タグ付けされた質問 「efficiency」

問題を解決しながら、できるだけ少ないリソース(時間、スペースなど)を使用します。質問が具体的にリソースの使用に関するものであり、実行時間についてたまたま発生する一般的なアルゴリズムの質問ではない場合は、このタグを使用します。

10
コンパイラがCで記述されている言語は、Cよりも高速になりますか?
見撮影ジュリアのウェブページを、あなたは、いくつかのアルゴリズム(タイミングは、以下に示す)間でいくつかの言語のいくつかのベンチマークを見ることができます。もともとCで書かれたコンパイラーを備えた言語は、Cコードよりも優れているのでしょうか? 図:Cに対するベンチマーク時間(小さいほど良い、Cパフォーマンス= 1.0)。

4
なぜ多項式時間が「効率的」と呼ばれるのですか?
コンピューターサイエンスで、せいぜい多項式の複雑さが効率的であると見なされるのはなぜですか? 実際のアプリケーション(a)では、複雑さアルゴリズムは時間内に実行されるアルゴリズム、たとえばn 80よりもはるかに高速ですが、前者は非効率であると見なされ、後者は効率的です。ロジックはどこですか?!nlognnlog⁡nn^{\log n}n80n80n^{80} (a)たとえば、宇宙の原子数は約と仮定します。1080108010^{80}


3
素因数乗算よりも効率的な階乗アルゴリズム
繰り返しと再帰の両方を使用して階乗をコーディングする方法を知っています(n * factorial(n-1)たとえば)。教科書を読んで(詳細な説明はありません)、階乗を半分に再帰的に分割することで、階乗をコーディングするさらに効率的な方法があることを読みました。 なぜそうなるのか理解しています。しかし、私は自分でそれをコーディングしてみたかったのですが、どこから始めればいいのかわかりません。友人は、私が最初にベースケースを書くよう提案しました。数値を追跡できるように配列を使用することを考えていましたが、そのようなコードを設計する方法が実際にはわかりません。 どのようなテクニックを研究すべきですか?

5
ソートされた配列に要素を追加する
これを行うための最速の方法は何ですか(アルゴリズムの観点からも、実際的な問題からも)? 私は次の線に沿って何かを考えていました。 配列の末尾に追加して、これに近いベストケース(開始時に完全にソートされた配列)があり、実行時間が線形である(最適な場合)ので、バブルソートを使用できます。 一方、ソートされた配列から開始することがわかっている場合、バイナリ検索を使用して、指定された要素の挿入ポイントを見つけることができます。 私の考えでは、2番目の方法はほぼ最適ですが、そこに何があるのか​​興味があります。 どうすればこれを最適に行うことができますか?

7
アルゴリズム(および一般的な効率)の重要性は低下していますか?
計算能力の購入は過去よりはるかに手頃であるため、アルゴリズムの知識と効率性はそれほど重要ではなくなりますか?無限ループを避けたいことは明らかです。そのため、すべてがうまくいくわけではありません。しかし、より良いハードウェアを持っているなら、どういうわけかもっと悪いソフトウェアを持っているでしょうか?
29 efficiency 

3
選択ソートがバブルソートよりも速いのはなぜですか?
ウィキペディアには、「...選択ソートはほとんど常にバブルソートおよびGNOMEソートよりも優れている」と書かれています。どちらもバブルソートよりも選択ソートが速いと考えられる理由を誰にでも説明してください: 最悪の場合の時間の複雑さ:O( n2)O(n2)\mathcal O(n^2) 比較の数: O( n2)O(n2)\mathcal O(n^2) 最適な時間の複雑さ: バブルソート:O(n )O(n)\mathcal O(n) 選択ソート:O( n2)O(n2)\mathcal O(n^2) 平均ケース時間の複雑さ: バブルソート:O( n2)O(n2)\mathcal O(n^2) 選択ソート:O( n2)O(n2)\mathcal O(n^2)

2
近似ルックアップをサポートする効率的なマップデータ構造
キーの効率的な近似ルックアップ(たとえば、文字列のレーベンシュタイン距離)をサポートし、入力キーに最も近い一致を返すデータ構造を探しています。私がこれまでに見つけた最適なデータ構造はBurkhard-Kellerツリーですが、この目的のために他の/より良いデータ構造があるかどうか疑問に思っていました。 編集:特定のケースの詳細: 文字列は通常、互いに大きなレーベンシュタインの違いを持っ​​ています。 文字列の最大長は約20〜30文字で、平均は10〜12文字に近い。 挿入よりも効率的なルックアップに関心があります。これは、クエリを効率的に行いたい静的データのセットを構築するためです。

3
動的グラフの最短経路を取得する
現在、有向グラフの最短経路を研究しています。ダイクストラやベルマンフォードのよ​​うに、ネットワーク内の最短経路を見つけるための多くの効率的なアルゴリズムがあります。しかし、グラフが動的な場合はどうでしょうか?動的とは、プログラムの実行中に頂点を挿入または削除できることを意味します。新しいグラフで最短経路アルゴリズムを再度実行する必要なく、エッジeを挿入した後、頂点から他のすべての頂点uへの最短経路を更新するための効率的なアルゴリズムを見つけようとしています。これどうやってするの?前もって感謝します。vvvあなたはuueee 注:変更は、アルゴリズムの最初の反復後に行うことができます 注[2]: 2つのノード、はソース、tはターゲットです。これらのノード間の最短パスを見つける必要があります。グラフが更新されたら、π (s 、t )を更新するだけです。これはsとtの間の最短経路です。ssstttπ(s 、t )π(s,t)\pi(s,t)sssttt 注[3]:エッジ挿入の場合にのみ興味があります。 正式な定義:グラフ与えられた場合。定義更新操作を)1と、エッジの挿入Eに対してE)は、エッジのアミノ酸欠失または2 EからEを。目的は、更新操作後のすべてのペアの最短パスのコストを効率的に見つけることです。効率的には、少なくとも更新操作の後に、Bellman-FordアルゴリズムなどのAll-Pairs-Shortest-Pathアルゴリズムを実行するよりも優れています。G = (V、E)G=(V,E)G = (V,E)eeeEEEeeeEEE 編集:以下に問題の簡略版があります: 重み付きグラフが与えられ、単方向のエッジと2つの重要な頂点sおよびtで構成されます。候補の双方向エッジのセットCも提供されます。私はエッジを構築しなければならない(U 、V )∈ Cはからの距離を最小にするために、SをT。G (V、E)G(V,E)G(V,E)ssstttCCC(U 、V )∈ C(u,v)∈C(u,v) \in Csssttt

3
AKSの素数性テストが実際に他のテストよりも高速になるのはいつですか?
私はそれについて学ぶときにAKSの素数性テストがどのように解釈されるべきか、例えばPRIMES⊆Pを証明するための帰結、またはコンピューターでの素数性テストのための実際の実用的なアルゴリズムのアイデアを得ようとしています。 テストには多項式ランタイムがありますが、高度であり、可能な限り高い定数があります。それでは、実際には、どので他の素数性テストを上回っていますか?ここで、は素数の桁数であり、「surpass」は典型的なコンピューターアーキテクチャでのテストのおおよその実行時間を指します。nnnnnnn 私は、機能的に比較可能なアルゴリズム、つまり、正確さのために推測を必要としない決定論的なアルゴリズムに興味があります。 さらに、テストのメモリ要件を考えると、他のテストよりもこのようなテストを使用していますか?

7
2つの配列が異なる1つの要素。効率的に見つける方法は?
私はコーディング面接の準備をしていますが、この問題を解決する最も効率的な方法を実際に見つけることはできません。 ソートされていない数値で構成される2つの配列があるとします。配列2には、配列1にはない数値が含まれています。両方の配列はランダムに配置された番号を持ち、必ずしも同じ順序または同じインデックスではありません。例えば: 配列1 [78,11、143、84、77、1、26、35 .... n] 配列2 [11,84、35、25、77、78、26、143 ... 21 ... n + 1] 異なる数を見つけるための最速のアルゴリズムは何ですか?その実行時間は何ですか?この例では、探している数字は21です。 私のアイデアは、配列1を実行し、配列2からその値を削除することでした。完了するまで繰り返します。これは、実行時間に近いはずです。O (n ログn )O(nlog⁡n)O(n \log n)

3
素数を法とする階乗を計算する最も効率的な方法は何ですか?
係数の後の階乗を効率的に計算するアルゴリズムを知っていますか? たとえば、私はプログラムしたい: for(i=0; i<5; i++) sum += factorial(p-i) % p; しかし、p階乗を直接適用するための大きな数(素数)です。(p≤108)(p≤108)(p \leq 10^ 8) Pythonでは、このタスクは本当に簡単ですが、最適化の方法を知りたいのです。

6
間隔内の2つの数値の最大XORを見つける:二次式よりも良いことはできますか?
lllrrr L ≤ I 、最大(I ⊕ J )最大(私⊕j)\max{(i\oplus j)}L ≤ I 、J ≤ Rl≤私、j≤rl\le i,\,j\le r ナイーブアルゴリズムは、考えられるすべてのペアを単純にチェックします。たとえば、ルビーでは次のようになります。 def max_xor(l, r) max = 0 (l..r).each do |i| (i..r).each do |j| if (i ^ j > max) max = i ^ j end end end max end 私感私たちはより良い次より行うことができます。この問題のためのより良いアルゴリズムはありますか?

2
マージソートの「分割」ステップを回避できますか?
したがって、マージソートは、分割統治アルゴリズムです。上記の図を見ながら、基本的にすべての分割ステップをバイパスできるかどうか考えていました。 2つずつジャンプしながら元の配列を反復処理した場合、インデックスiおよびi + 1の要素を取得し、独自のソートされた配列に入れることができます。これらのすべてのサブ配列(図に示すように[7,14]、[3,12]、[9,11]および[2,6])を取得したら、通常のマージルーチンに進んで取得します。ソートされた配列。 配列を繰り返し処理し、必要なサブ配列をすぐに生成するのは、分割ステップを全体で実行するよりも効率が悪いですか?

7
DFAはNFAよりも効率的だと言えますか?
計算理論について読み始めたところです。(文字列を受け入れる際に)より強力な方を比較すると、両方とも同じです。しかし、効率はどうですか?DFAは発信エッジを1つしか持たず、あいまいさがないため、DFAはNFAと比較して高速になります。ただし、NFAの場合は、考えられるすべてのケースを確認する必要があり、確実に時間がかかります。それで、DFAはNFAよりも効率的だと言えるでしょうか? しかし、脳の他の部分は、NFAは理論上のみに存在すると考えているため、その効率をDFAと比較することはできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.