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

入力サイズの増加に伴うアルゴリズムのランタイムの増加を推定する方法に関する質問。

1
2つの再帰呼び出しによる再帰関係の解決
私はそれは決してしないだろうという条件の下でクイックソートの最悪のランタイムを勉強して、非常の定義を変更するためのアンバランスパーティションを非常に。 これを行うために、私は自分自身に、ランタイム何質問をクイックソート常にそうになりますが、いくつかの画分にパーティションに起こるよう要素は左側のパーティションにあり、は右側のパーティションにあります(要素、ピボット、中央に残ります)。T(n,p)T(n,p)T(n, p)0&lt;p≤120&lt;p≤120 < p \leq {1\over 2}⌊p(n−1)⌋⌊p(n−1)⌋\lfloor{p(n-1)}\rfloor⌈(1−p)(n−1)⌉⌈(1−p)(n−1)⌉\lceil(1 - p)(n - 1)\rceil111 が最悪の場合の上限を与えることを確認することは難しくありません。ここで、は最大不均衡許容パーティションです。フラクションパーティションはよりバランスがとれており、実行時間が短くなります。端数許可されていません。T(n,p)T(n,p)T(n, p)ppp&gt;p&gt;p> p&lt;p&lt;p<p が最良のケースであり、がクイックソートの最悪のケースであることは明らかです。どちらにも、あらゆる教育リソースで見られる簡単な再発関係があります。しかし、私はを一般的にどのように研究するかについての手がかりはありません。明らかな関係は次のとおりです。T(n,12)T(n,12)T(n, {1 \over 2})T(n,0)T(n,0)T(n, 0)T(n,p)T(n,p)T(n, p) T(n,p)=n+T(⌊p(n−1)⌋,p)+T(⌈(1−p)(n−1)⌉,p)T(n,p)=n+T(⌊p(n−1)⌋,p)+T(⌈(1−p)(n−1)⌉,p)T(n, p) = n + T(\lfloor{p(n-1)}\rfloor, p) + T(\lceil(1 - p)(n - 1)\rceil, p) ここで行き詰まっています。私は周りを検索してみましたが、分割統治アルゴリズムについて理解できるすべての文献は、文字通り「分割」を行い、パーティションのサイズが常に等しいという事実を使用して分析を「だまし」、用語を1回にマージしました。絶え間ない。 2つの再帰呼び出しを処理する方法がわかりません。丸めを削除しても安全かどうかはわかりません。これは分析的に解決することは可能ですか?はいの場合、どのように? PS:私は漸近論には興味がありません(定数に対してを示すのは簡単です)。が小さくなるにつれて、クイックソートがどのくらい遅くなるかに興味があります。たとえば、の比率に興味があります。p p T (n 、0.25 )Θ(nlogn)Θ(nlog⁡n)\Theta(n \log n)ppppppT(n,0.25)T(n,0.5)T(n,0.25)T(n,0.5)T(n, 0.25) \over T(n, 0.5) PPS:学部生として、明白なことを長くしすぎたり、説明が不十分であったりすれば、すさまじいことをお詫びします。ここで他のSEサイトほど見下されているかどうかはわかりませんが、これは宿題ではなく個人的な関心事であることに注意します。

3
Big O:依存関係のあるネストされたForループ
Big Oで宿題を与えられました。前のループに依存するforループが入れ子になっています。私は本当にそれを理解したいので、ここに私の宿題の質問の変更されたバージョンがあります: sum = 0; for (i = 0; i &lt; n; i++ for (j = 0; j &lt; i; j++) sum++; 私を後押ししているのはそのj &lt; i部分です。ほぼ階乗のように実行されるようですが、追加されます。ヒントは本当にいただければ幸いです。

3
最大要素をピボットとして選択した場合、Quicksortには常に2次ランタイムがありますか?
クイックソートアルゴリズムがあり、常に最小(または最大)の要素をピボットとして選択する場合。すでにソートされたデータセットを提供すると、「すでにソートされた」リストが昇順か降順かに関係なく、常に最悪のパフォーマンスが得られると私は思いますか? 私の考えでは、ピボットの最小要素を常に選択する場合、ピボットに対してソートするように選択されたサブセットは常に同じサイズ?

1
負のサイクルをキャンセルする
ジェネリックネガティブサイクルキャンセリングアルゴリズムを使用して、最小コストフローの問題を解決したいと考えています。つまり、ランダムな有効フローから始めて、最小平均コストサイクルなどの「良い」負のサイクルは選択せず、Bellman-Fordを使用して最小サイクルを発見し、発見されたサイクルに沿って拡張します。ましょうグラフ内のノードの数であり、Aのエッジの数、Uグラフにおけるエッジの最大容量、Wグラフにおけるエッジの最大コスト。次に、私の学習資料は次のように主張しています。VVVああAUUUWWW 最初の最大コストはA U W以下にする必要がありますA UWあUWAUW 1つの負のサイクルに沿った増加により、コストが少なくとも1ユニット削減されます 負のコストを許可しないため、最小コストの下限は0です。 負の各サイクルはO (VA )O(Vあ)O(VA) そして、アルゴリズムの複雑さはであると彼らは言う。私は各主張の背後にある論理を理解していますが、複雑さは異なると思います。具体的には、拡張の最大数は、拡張ごとに1単位のフローによって与えられ、A U Wからゼロまでのコストを取って、最大A U Wの拡張を提供します。それぞれについて負のサイクルを発見する必要があるので、増加の最大数にサイクルを発見するのに必要な時間(V A)を掛けてO (A 2 V UO (V2A UW)O(V2あUW)O(V^2AUW)A UWあUWAUWA UWあUWAUWVあVあVAアルゴリズム。O (A2VUW)O(あ2VUW)O(A^2VUW) これは学習教材の誤り(これは、コースからの学生のメモではなく、教授から提供されたテキストです)ですか、それとも私の論理は間違っていますか?

2
A *グラフ検索時間の複雑さ
時間の複雑さとA *に関する混乱。 A * Wikiによると 、時間の複雑さは解の深さで指数関数的です(最短経路): A *の時間の複雑さはヒューリスティックに依存します。無制限の探索空間の最悪の場合、展開されたノードの数は、解の深さ(最短経路)dで指数関数になります。O (bd)O(bd)O(b^d)、 どこ bbb 分岐因数(州ごとの平均の後継者数)です。 この受け入れられた回答へのコメントは、グラフのサイズの観点から複雑さを与える方が理にかなっていることを指摘しているため、O ((| V| + | E| )⋅LOG| V| )O((|V|+|E|)⋅log|V|)O((|V| + |E|) \cdot log |V|) 明らかに、ヒューリスティックがすべてのノードに0の値を割り当てる場合、A *はダイクストラのアルゴリズムになり、均一コストのヒューリスティックは本質的にヒューリスティックを無効にします。 ヒューリスティックを O (1 )O(1)O(1) (そして一貫性のある)、最悪のケースは本質的にA *を複雑度のあるダイクストラのアルゴリズムに劣化させていることは理にかなっています O (| E| + | V| ログ| V| )O(|E|+|V|log⁡|V|)O(|E|+|V|\log|V|) 最小優先度のキューの実装(フィボナッチヒープ)。 私が間違っている? 私がこれまで見てきた本などは、ソリューションの深さに関して複雑さを与えます

1
再帰挿入ソートの繰り返し
CLRSからこの問題を試しました(ページ39、2.3-4) 挿入ソートは次のように再帰的な手続きとして表現できます。ソートするA[1... n]には、再帰的にソートしてA[1... n-1]からA[n]、ソートされた配列に挿入しA[1... n-1]ます。この再帰バージョンの挿入ソートの実行時間の再帰を記述します。 私が形成した再発は T(n)={Θ(1)T(n−1)+Θ(n)if n=1,if n&gt;1.T(n)={Θ(1)if n=1,T(n−1)+Θ(n)if n&gt;1. T(n) = \begin{cases}\Theta(1) & \textrm{if } n = 1,\\ T(n-1) + \Theta(n) & \textrm{if } n > 1. \end{cases} 私の推論 の基本ケースでは、リストはソートされるため、作業は発生せず、時間が一定になります。n=1n=1n = 1 他のすべてのケースでは、時間はシーケンスのソートとそのシーケンスA[1...n-1]への挿入に依存します。したがって、それはそれらの合計、すなわちます。T(n−1)+Θ(n)T(n−1)+Θ(n)T(n-1) + \Theta(n) 再発関係が正しいか知りたい。そうでない場合、間違いは何ですか?どのようにして再発関係を正しく定式化するのですか?

1
何が操作としてカウントされますか?
初心者の質問にはお詫びしますが、アルゴリズムの時間の複雑さを計算するときに「単純な操作」として正確に何がカウントされるかについて少し混乱しています。特に、すべての操作が等しいと考えるのはなぜですか? 確かに、2つの非常に大きな数値を除算することは、数値に1を加えるよりも時間がかかります(forループの各反復の場合のように)。たとえば、乗算は小さな加算をいくつでも構成できます。それで、それらを単に加算する代わりに、演算のタイプ(加算、乗算など)と関連する数値のサイズに応じて、各演算にある種の重みを適用するべきではありませんか? 私の問題は、アルゴリズムの複雑さがO (f )(一部の関数fの場合)であることを証明するよう求められていることです。 「簡単な操作」。それで、私はこれについてどうしますか?O (f)O(f)O(f)fff

1
線形時間での圧縮/エンコードについて
私はNJ Larsson、A. Moffat:Offline Dictionary-Based Compressionの論文を読んでいます。これは、私が正しく理解していれば、バイトペアエンコーディングに非常に似ている圧縮アルゴリズムについて説明しています。 長さnの文字列が与えられた場合、この圧縮方法を使用して線形O(n )時間で圧縮する方法を理解しようとしています。これはどのように正確に行われますか?私はこの論文を読みましたが、どのようにして線形時間を達成するのかまだ理解していません。そのため、別の方法で説明されているのかもしれません。SSSnnnO(n)O(n)\mathcal O (n) 私の最初の混乱は、アルゴリズムの最初のステップで発生します。たとえばabcababcabc、最も一般的なペアabが新しいシンボルに置き換えられる場合などXcXXcXcです。最も一般的なペアをすばやく見つける方法がわかりません。私の素朴なアプローチは、最初のペアabを最初に見て、bc発生数を数え、次に次のペアを見て、発生数を数えるなどです。しかし、これは、最も多くを見つけるためだけにすでに与えます。共通のペア1回。O(n2)O(n2)\mathcal O (n^2) 次に、時間で最も一般的なペアを見つける方法を理解したとしても。私の次の問題は、O(n )回までの最も一般的なペアを見つける必要がないかということです。したがって、これはO(n 2)の合計時間を与えますか?O(n)O(n)\mathcal O(n)O(n)O(n)\mathcal O(n)O(n2)O(n2)\mathcal O(n^2)

1
メディアントを使用したブラケット検索の複雑さは何ですか?
Rekoデコンパイラー用に作成したアルゴリズムの複雑さを推定しようとしています。ここで、コンパイラーが定数による整数除算に行った変換を「取り消す」ようにしています。コンパイラーは除算を整数の乗算とシフトに変換しました:、ここではコンピューターのマシンワードのビット数です。結果の定数乗算は、ほとんどの現代的なアーキテクチャでの除算よりもはるかに高速ですが、元のコードに似ていません。(X * ⌊ 2 β / N ⌋ )&gt; &gt; β βx/nx/nx / n(x∗⌊2β/n⌋)&gt;&gt;β(x∗⌊2β/n⌋)&gt;&gt;β(x * \lfloor 2^\beta / n \rfloor) >> \betaββ\beta 説明するには:Cステートメント y = x / 10; Microsoft Visual C ++コンパイラによって、次のアセンブリ言語にコンパイルされます mov edx,1999999Ah ; load 1/10 * 2^32 imul eax ; edx:eax = dividend / 10 * 2 ^32 …

1
この再帰的アルゴリズムの実行時間はどれくらいですか?
A229037 の最初の値を計算するというコードゴルフチャレンジのために、次の(無記号の)Haskellプログラムを作成しました。nnn これは、番目の値を計算するために提案するソリューションです。nnn a n | n&lt;1 = 0 | n&lt;3 = 1 | otherwise = head (goods n) goods n = [x | x &lt;- [1..], isGood x n] isGood x n = and [ x - a(n-k) /= a(n-k) - a(n-k-k) || a(n-k-k) == 0 | k &lt;- …



1
検索と並べ替えアルゴリズムの基本操作の複雑さ[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 Wikiには優れたチートシートがありますが、これは含まれていません。比較またはスワップの。(ただし、通常、スワップ数はその複雑さを決定します)。そこで、以下を作成しました。次の情報は正しいですか?エラーがある場合はお知らせください。修正します。 挿入ソート: 平均ケース/最悪ケース: ; 入力がすでに降順でソートされている場合に発生しますΘ(n2)Θ(n2)\Theta(n^2) ベストケース: ; 入力がすでにソートされている場合Θ(n)Θ(n)\Theta(n) 比較の数:、最悪の場合&にΘ (N )最良の場合にΘ(n2)Θ(n2)\Theta(n^2)Θ(n)Θ(n)\Theta(n) スワップ数:最悪/平均ケース&Θ(n2)Θ(n2)\Theta(n^2)が最良の場合000 選択ソート: 平均ケース/最悪ケース/最良ケース:Θ(n2)Θ(n2)\Theta(n^2) 比較数:Θ(n2)Θ(n2)\Theta(n^2) スワップ数:最悪/平均ケース&0Θ(n)Θ(n)\Theta(n)000最良のケースの中で最もにおいて、アルゴリズムは、あなたが所定の位置に要素を入れ替えたら、あなたは再びそれに触れることはありません、Nスワップが必要です。 マージソート: 平均ケース/最悪ケース/最良ケース:。入力がソートされているかどうかはまったく関係ありませんΘ(nlgn)Θ(nlgn)\Theta(nlgn) 比較数:最悪の場合は&最良の場合はΘ (n )。サイズn&mの2つの配列をマージしていると仮定します。ここでn &lt;Θ(n+m)Θ(n+m)\Theta(n+m)Θ(n)Θ(n)\Theta(n)n&lt;mn&lt;mn<m スワップ数:スワップなし![ただし、インプレースソートではなく追加のメモリが必要] クイックソート: 最悪の場合:Θ(n2)Θ(n2)\Theta(n^2) ; 入力はすでにソートされています ベストケース: ; ピボットが配列をちょうど半分に分割するときΘ(nlogn)Θ(nlogn)\Theta(nlogn) 比較数:最悪の場合&Θ (n l o g nΘ(n2)Θ(n2)\Theta(n^2)最良の場合にΘ(nlogn)Θ(nlogn)\Theta(nlogn) スワップ数:最悪の場合&0Θ(n2)Θ(n2)\Theta(n^2)000、最良の場合は バブルソート: 最悪の場合:Θ(n2)Θ(n2)\Theta(n^2) ベストケース:Θ(n)Θ(n)\Theta(n) ; ソート済み 比較数:Θ(n2)Θ(n2)\Theta(n^2)最悪の場合と最良の場合の スワップ数:最悪の場合&0Θ(n2)Θ(n2)\Theta(n^2)000、最良の場合は 線形検索: 最悪の場合:Θ(n)Θ(n)\Theta(n) ; …

2
分散方式でのツリーの6色分け
ツリー6の分散アルゴリズムを理解するのにいくつかの困難があり時間でのカラーリング。O(log∗n)O(log∗⁡n)O(\log^*n) 詳細な説明は、次のペーパーにあります:スパースグラフの並列対称性の破れ。ゴールドバーグ、プロトキン、シャノン。 つまり、アイデアは... プロセッサID者によって与えられた有効な着色から出発し、手順を繰り返し、各非ルートノードrecoloringによって色記述のビット数を減少するビットのインデックス連結することによって得られた色で異なっておよびこのビットの値。ルート を連結と、新しい色を形成します。vvvCvCvC_vCparent(v)Cparent(v)C_{parent}(v)rrr000Cr[0]Cr[0]C_r[0] アルゴリズムは回の反復後に終了します。O(log∗n)O(log∗⁡n)O(\log^*n) 回の繰り返しで実際に終了する理由を直感的に理解できません。最後の反復に関する論文で言及されているように、2つのビット文字列が異なる最小のインデックスは最大3です。したがって、0番目のビットと1番目のビットは同じで、である可能性があるため、この2つのビットは4を与えます。色+異なる3番目のビット用の別の2色、および紙のように6色ではなく合計8色、および2ビットで先に進むことができない理由、異なるビットを見つけて分離することはまだ可能です。O(log∗n)O(log∗⁡n)O(\log^*n)22=422=42^2=4 論文よりもアルゴリズムを少し深く分析していただければ幸いです。

1
高速なコンピューターと低速なコンピューターを考えると、低速アルゴリズムを実行する高速コンピューターは、高速アルゴリズムを実行する低速コンピューターよりもどのくらいのサイズになりますか?
この質問の出典は、私が受講している学部課程から来ています。これは、アルゴリズムの分析の概要をカバーしています。これは宿題ではなく、CLRSで質問されます。 MIPSで実行されている低速マシンとy MIPSで実行されている高速マシンがあります。また、同じクラスで実行時間の複雑さが異なる2つのアルゴリズムがあります。1つの「低速」アルゴリズムはT (n )= c 1 n 2で実行され、「高速」アルゴリズムはT (n )= c 2 n log nで実行されます。。xxxyyyT(n)=c1n2T(n)=c1n2T(n) = c_1n^2T(n)=c2nlognT(n)=c2nlog⁡nT(n) = c_2n \log n 高速アルゴリズムは低速マシンで実行し、高速アルゴリズムは低速マシンで実行します。低速アルゴリズムを実行する高速マシンが高速アルゴリズムを実行する低速マシンに勝るようなnの最大値はいくつですか? これまでの私の解決策: すべてのnのセットを見つけるnnnc 2 n log nとなるような nは自然数です。c2nlognx&gt;c1n2yc2nlog⁡nx&gt;c1n2y\frac{c_2n\log n}{x} > \frac{c_1n^2}{y}nnn これはこれまでのところ私の仕事です: {n:c2nlog2nx&gt;c1n2y,n∈N}={n:n&lt;c2yc1xlog2n,n∈N}{n:c2nlog2⁡nx&gt;c1n2y,n∈N}={n:n&lt;c2yc1xlog2⁡n,n∈N}\{n : \frac{c_2 n \log_2 n}{x} > \frac{c_1 n^2}{y}, n \in \mathbb{N}\} = \{n : n …

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