タグ付けされた質問 「algorithm-analysis」

アルゴリズムの特性を決定する科学と芸術に関する質問。多くの場合、正確性、実行時間、スペースの使用法が含まれます。アルゴリズムのランタイムに関する質問には、[runtime-analysis]タグを使用します。

3
数値アルゴリズムで数値の単項表現を使用しないのはなぜですか?
擬似多項式時間アルゴリズムは、入力値(大きさ)で多項式の実行時間を持ち、入力サイズ(ビット数)で指数関数の実行時間を持つアルゴリズムです。 たとえば、数値が素数であるかどうかをテストするには、2からまでの数値をループし、 modがゼロかどうかを確認する必要があります。modがO(1)時間かかる場合、全体的な時間の複雑さはO(n)になります。n − 1 nnnnn − 1n−1n-1nnn 私私i ただし、を入力の書き込みに必要なビット数とすると、(バイナリ)であるため、あり、問題の実行時間は指数関数的なO()になります。x = log n n = 2 x 2 xバツバツxx = ログnバツ=ログ⁡nx = \log nn = 2バツn=2バツn = 2^x2バツ2バツ2^x 私の質問は、入力単項表現を考慮する場合、常にあり、擬似多項式時間は多項式時間の複雑さに等しくなります。では、なぜこれを行わないのでしょうか?x = nnnnx = nバツ=nx=n さらに、ナップザックには擬似多項式時間アルゴリズムがあるため、をとることにより、ナップザックは結果として多項式になりますP = NPx = nバツ=nx=n


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 私感私たちはより良い次より行うことができます。この問題のためのより良いアルゴリズムはありますか?

1
バブルソートでのスワップの予想数
整数の配列が与えられた場合、配列各要素は、ある確率、固定数だけ増加できます。バブルソートを使用して配列をソートするために行われるスワップの予想数を見つける必要があります。NのB P [ I ] 0 ≤ I &lt; NAAANNNbbbp [ i ]p[i]p[i]0 ≤ I &lt; N0≤i&lt;n0 \leq i < n 私は次を試しました: 要素の確率するための与えられた確率から容易に計算することができます。i &lt; jA [ i ] &gt; A [ j ]A[i]&gt;A[j]A[i] > A[j]i &lt; ji&lt;ji < j 上記を使用して、スワップの予想数を次のように計算しました。 double ans = 0.0; for ( int i = 0; …

1
ランダム化された選択
ランダム化選択アルゴリズムは次のとおりです。 入力:配列の(明確、簡潔のために)数と数n個のk ∈ [ N ]AAAnnnK ∈ [ N ]k∈[n]k\in [n] 出力:の「ランク要素」(つまり、がソートされた場合は位置要素)A k AkkkAAAkkkAAA 方法: に要素が1つある場合、それを返しますAAA ランダムに一様に要素(「ピボット」)を選択しますppp セットおよび計算しますR = { ∈ A :&gt; P }L = { ∈ A :&lt; P }L={a∈A:a&lt;p}L = \{a\in A : a < p\}R = { ∈ A :&gt; P }R={a∈A:a&gt;p}R = \{a\in A : …

2
アルゴリズム時間分析「入力サイズ」対「入力要素」
アルゴリズムの無症候性の上限を分析および説明するために使用するとき、「入力長」および「入力サイズ」という用語とまだ混同されています アルゴリズムの入力長は、多くの種類のデータとあなたが話しているアルゴリズムに依存しているようです。 一部の著者は、入力の長さを入力の表現に必要な文字のサイズに言及しているため、アルゴリズムの入力セットとして使用する場合の「abcde」は6文字の「入力長」になります。 文字の代わりに数字(たとえば整数)がある場合、文字の代わりにバイナリ表現が使用される場合があるため、「入力長」は(入力セットの最大数Lである)として計算されます。 。N∗log(L)N∗log(L)N*log(L) 数字であっても、入力設定されている場合、それらは「決定変数」として「入力長さ」を記述することを他の課題は、範囲内の数値を有する長さNの入力セットに対してので、ある(入力の長さがちょうどNでありますたとえば、サブセットの合計)、または問題を述べるために必要なバイナリの場所の値の数をさらに複雑にします(N ∗ l o g (L )とまったく同じだと思います)0−2320−2320-2^{32}N∗log(L)N∗log(L)N*log(L) そう: アルゴリズムに依存しますか? 各入力長「バージョン」を使用する意味とタイミング 使用するルールを決定するために使用できるルールはありますか?

2
トリプルネストループの時間の複雑さ
次のトリプルネストループを検討してください。 for (int i = 1; i &lt;= n; ++i) for (int j = i; j &lt;= n; ++j) for (int k = j; k &lt;= n; ++k) // statement ここでのステ​​ートメントは、正確にn (n + 1 )(n + 2 )実行されます回。誰かがこの式がどのように得られたか説明してもらえますか?ありがとうございました。n(n+1)(n+2)6n(n+1)(n+2)6n(n+1)(n+2)\over6

3
「漸近的に効率的」とはどういう意味ですか?
アルゴリズムがより漸近的に効率的であると言うとき、それはどういう意味ですか?XXXYYY XXXはすべての入力に適しています。 XXXは、小さな入力を除くすべての入力に適しています。 XXXは、大きな入力を除くすべての入力に適しています。 YYYは、小さな入力にはより良い選択です。 この質問のリンクはこちらです。 http://quiz.geeksforgeeks.org/algorithms-analysis-of-algorithms-question-16/ より漸近的に効率的なアルゴリズムはすべての入力で機能するはずだと思いましたが、「小さいものを除くすべての入力で機能する」の理由がわかりません。

3
加算の時間の複雑さ
ウィキペディアは、加算の時間の複雑さをとしてリストしています。ここで、はビット数です。nnnnnn これは厳密な理論上の下限ですか?または、これは、現在最も高速な既知のアルゴリズムの複雑さだけです。加算が複雑であるため、他のすべての算術演算とそれらを使用するすべてのアルゴリズムが強調されているので、知りたいと思います。 o(n)で実行される追加アルゴリズムを取得することは理論的に不可能o(n)o(n)o(n)ですか?または、追加のために線形の複雑さに拘束されます。

2
Aho-CorasickアルゴリズムとRabin-Karpアルゴリズムの比較
複数のパターン検索をサポートする文字列検索アルゴリズムに取り組んでいます。実行時間の点で最も強力な候補のように見える2つのアルゴリズム、すなわちAho-CorasickとRabin-Karpを見つけました。しかし、2つのアルゴリズムの包括的な比較は見つかりませんでした。どのアルゴリズムがより効率的ですか?また、並列計算と複数パターン検索にはどちらが適していますか?最後に、必要なハードウェアリソースが少ないのはどれですか。 ACアルゴリズムの場合、検索フェーズは時間かかりますが、RKの場合はO (n m )です。ただし、RKの実行時間はあり、ACに類似しています。私の暫定的な結論は、RKはACほど多くのメモリを必要としないため、RKは実質的に優れているように見えるということです。あれは正しいですか?O (n + m )O(n+m)O(n+m)O (n m )O(nm)O(nm)O (n + m )O(n+m)O(n+m)

1
絞り込みタイプの推測
職場では、動的言語に関する型情報を推論する必要があります。次のように、ステートメントのシーケンスをネストされたlet式に書き換えます。 return x; Z =&gt; x var x; Z =&gt; let x = undefined in Z x = y; Z =&gt; let x = y in Z if x then T else F; Z =&gt; if x then { T; Z } else { F; Z } 一般的なタイプ情報から始めて、より具体的なタイプを推測しようとしているので、自然な選択は絞り込みタイプです。たとえば、条件演算子は、trueブランチとfalseブランチの型の和集合を返します。単純なケースでは、非常にうまく機能します。 ただし、次のタイプを推測しようとしたときに、思わぬ障害に遭遇しました。 function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
選択アルゴリズムのスペースに制限はありますか?
整数の配列で番目に大きい要素を見つけるためのよく知られた最悪の場合の選択アルゴリズムがあります。それは中央値中央値アプローチを使用して十分なピボットを見つけ、入力配列を所定の位置に分割し、再帰的に番目に大きい要素の検索を続けます。O(n)O(n)O(n) kkkkkk 入力配列に触れることが許可されなかった場合、時間で番目に大きい要素を見つけるためにどのくらい余分なスペースが必要になりますか?余分なスペースで番目に大きい要素を見つけても、実行時の維持できますか?たとえば、最大または最小の要素を見つけるには、時間とスペースが必要です。 kkkO(n)O(n)O(n)kkkO(1)O(1)O(1)O(n)O(n)O(n)O(n)O(n)O(n)O(1)O(1)O(1) 直感的に、空間よりも優れているとは思えませんが、その証拠はありますか?O(n)O(n)O(n) 誰かが参照を指すか、番目の要素が時間でスペースを見つける必要がある理由を議論することができますか?⌊n/2⌋⌊n/2⌋\lfloor n/2 \rfloorO(n)O(n)O(n)O(n)O(n)O(n)

1
修正されたBorůvkaのアルゴリズムのより厳密な分析
Borůvkaのアルゴリズムは、グラフのスパニングツリー最小を計算するための標準的なアルゴリズムの一つであると。G=(V,E)G=(V,E)G = (V,E)|V|=n,|E|=m|V|=n,|E|=m|V| = n, |E| = m 擬似コードは次のとおりです。 MST T = empty tree Begin with each vertex as a component While number of components &gt; 1 For each component c let e = minimum edge out of component c if e is not in T add e to T …

1
ランダム分割による選択のための鋭い集中?
アレイ内のメジアン要素を発見するための通常の単純なアルゴリズムの数です。nAAAnnn から要素を置き換えてサンプルする A Bn3/4n3/4n^{3/4}AAABBB ソートとランクを見つける要素との| B | ± √BBB lrB|B|±n−−√|B|±n|B|\pm \sqrt{n}lllrrrBBB そのチェックと中央値の反対側にあるとせいぜいがあることの要素との間のといくつかの適切な定数を。これが起こらない場合は失敗します。R A C √lllrrrAAA AlrC&gt;0Cn−−√CnC\sqrt{n}AAAlllrrrC&gt;0C&gt;0C > 0 それ以外の場合は、の要素をと間で並べ替えて中央値を求めます。L個のRAAAlllrrr これが線形時間で実行され、高い確率で成功することを確認するのは難しくありません。(すべての悪いイベントは、二項式の期待から大きく逸脱しています。) クイックソートを見た生徒に教えるのがより自然な同じ問題の代替アルゴリズムは、ここで説明するものです。ランダム化された選択 これが線形の予想実行時間を持っていることも簡単にわかります。「ラウンド」は、1/4から3/4の分割が行われたときに終了する再帰呼び出しのシーケンスであり、予想される長さがラウンドの最大数は2です(ラウンドの最初のドローでは、アルゴリズムが説明されているように、ラウンドの長さが幾何ランダム変数によって支配されるため、ラウンドが適切に分割される確率は1/2になり、その後実際に増加します。) だから今の質問: ランダム化された選択が高い確率で線形時間で実行されることを示すことは可能ですか? 我々はラウンドを、各ラウンドは少なくとも長有する確率で最大で結合した組合が実行時間であることを与えるので、確率。k 2 − k + 1 O (n log log n )1 − 1 / O (log n )O(logn)O(log⁡n)O(\log n)kkk2−k+12−k+12^{-k+1}O(nloglogn)O(nlog⁡log⁡n)O(n\log\log n)1−1/O(logn)1−1/O(log⁡n)1-1/O(\log n) これはちょっと物足りないですが、本当ですか?

2
アルゴリズムに関する優れた数学の本[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 私は数学的優雅さと厳格さの吸盤です、そして今、アルゴリズムとアルゴリズム分析に関するそのような文献を探しています。今では、どのアルゴリズムがカバーされているかは問題ではありませんが、それらがどのように提示および処理されるかは非常に重要です。使用するすべての概念を厳密かつ抽象的な方法で定義する非常に明確で正確な言語を最も重視しています。 私は、Cormen、Leiserson、Rivest、Steinによる古典的なアルゴリズムの紹介がかなり巧妙であるが、数学をうまく処理せず、その証明と定義については非公式です。Sipserの計算理論入門は、その点では優れているように見えますが、それでも数学からアルゴリズムへのシームレスな移行は提供していません。 誰かが何かをお勧めできますか? 注意:アルゴリズムは、グラフ、配列、セット、リスト、ツリーなどの古典的な非自明な抽象データ構造を使用して、必要なデータの管理に少なくとも侵入する必要があります。データ構造の使用と管理の問題を完全に無視したとしても、あまり興味はありません。しかし、私はそれらで解決された問題についてはあまり気にしません。

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