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

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

2
平方根関数を使用しての形式の素数性をテストするための効率的なアルゴリズムはありますか?
私が読んでいたCLRSを、それがあればことを示すように求めフォームの素数である及び平方剰余した後、の平方根である(一方は容易ことを示すことができますは平方根です)。p pp4 k + 3 4k+34k+3a aaa k + 1ak+1a^{k+1} a − ka−ka^{-k} 以前の事実を使用していて、(必ずしも素数である必要はない)の形式の数があることを知っているかどうか疑問に思っていたので、平方根関数を使用して(何か?)異なる素数性テストがあるかもしれません(つまり、)。N = 4 k + 3 N=4k+3N = 4k+3N NNS Q R T N(a )= a k + 1SQRTN(a)=ak+1SQRT_N(a) = a^{k+1} だから私が考えたアルゴリズムは次のとおりです: 二次残差(QR)(a ^ {\ frac {p-1} {2}} \ equiv 1 \ pmod pが成り立つかどうかを確認することでこれを簡単に行うことができます)。QRを取得したら、a ^ {k + …


1
並行して最大独立セットを見つける
グラフで、次のプロセスを実行します。G (V、E)G(V,E)G(V,E) 最初、すべてのノードは色付けされていません。VVV には色付けされていないノードがありますが、色付けされていない各ノードは次のことを行います。 VVV ランダムな実数を選択し、それを近隣のすべてに送信します。 その数を近隣の数と比較します。自分の数が厳密に最小の場合、隣人は自分自身を赤く塗りつぶし、隣人に通知します。 隣人が赤くなった場合、このノードは自分自身を黒く塗ります。 例えば: グラフがabcdeというパスであるとします。 最初のステップの数値が次のとおりであるとします:1-2-0-3-4。 ノードaとcは赤く塗られています。ノードbとdは黒く塗られています。 2番目のステップでは、ノードeのみが未着色のままです。最小限に抑えられているため、赤く塗りつぶされます。 私の質問は:すべてのノードが色付けされる前にこのプロセスが実行する平均ステップ数は何ですか? 私の現在の計算では、推定が導かれますが、これは真実であるにはあまりにも良すぎるようです。ここに計算があります:O (1 )O(1)O(1) d個の隣接ノードを持つノードを考えます。vがその近傍の中で最小になる確率は、1 /(d + 1 )です。これが発生した場合、vとそのすべての近傍が色付けされます。したがって、各ステップで色分けされる頂点の予想数は、(d + 1 )/(d + 1 )= 1ノードあたり1です。したがって、各ステップで色分けされる頂点の予想される総数はO (n )なので、O (1vvvdddvvv1 /(d+ 1 )1/(d+1)1/(d+1)vvv(d+1)/(d+1)=1(d+1)/(d+1)=1(d+1)/(d+1)=1 O(n)O(n)O(n)すべてのノードが色付けされる時間。O(1)O(1)O(1) この分析が間違っている場合(おそらくそうです)、実際のステップ数はいくつですか? 編集:@JukkaSuomelaによって指摘されているように、上記のアルゴリズムはMetivier et al、2011によるものであり、これらの講義ノートで説明および分析されています。彼らは、実行時間がことを証明します。O(logn)O(log⁡n)O(\log n) しかし、私はまだこの分析がタイトであると確信していません。チェックしたすべてのグラフで、アルゴリズムは予想時間内に完了したようです。O(1)O(1)O(1) 私の質問は今です:このアルゴリズムが実際に平均でステップを必要とする最悪の場合のグラフは何ですか?O(logn)O(log⁡n)O(\log n)

2
コルモゴロフ非圧縮性法を使用した平均ケースアルゴリズム分析
非圧縮性メソッドは、平均的なケースのアルゴリズムの分析を簡素化すると言われています。私が理解しているところによると、これは、そのアルゴリズムの可能な入力のすべての組み合わせを計算してから、平均的な複雑さを導き出す必要がないためです。代わりに、単一の非圧縮文字列が入力として使用されます。非圧縮文字列が一般的であるため、この入力は平均的なケースの正確な近似として機能できると想定できます。 非圧縮性メソッドを実際にアルゴリズムに適用することに夢中です。余談ですが、私は数学者ではありませんが、この理論は日常のプログラミングに実用的であると思います。 最終的に、特定のアルゴリズムの平凡なケースでも複雑なケースでも、平均的なケースを推定する方法を学びたいと思います。誰かがこの方法を単純なアルゴリズムにどのように適用できるかを私に実演していただけませんか?たとえば、入力文字列Sが与えられた場合、すべての一意の文字をSに格納し、それぞれを個別に出力します。 void uniqueChars(String s) { char[] chars = chars[ s.length() ] int free_idx = 0; for (int i = 0; i < s.length(); i++) { if (! s[i] in chars) { chars[free_idx] = s[i] free_idx++; } } for (int i = 0; i < chars.length(); i++) { print …

1
PageRank反復の頂点ごとのエラーは単調減少していますか?
グラフ全体を取り上げると、エラーベクトルのノルムは単調減少でなければならず、そうでなければPageRankが収束することを保証できませんでした。 ただし、同じことが頂点ごとにも当てはまりますか?つまり、反復tから反復t + 1まで、PageRank値に近づくにつれて、頂点の2乗誤差は常に減少することが保証されますか?または、頂点の二乗誤差が増加する可能性はありますか? これはまた、一般的にパワー反復といくつかのより広い関係を持っているように見えますか?答えのある説明または証明があれば幸いです。

2
MST:Primのアルゴリズムの複雑さ、なぜ
CLRSによると、プリムのアルゴリズムは以下のように実装されています- MST-PRIM(G,w,r)MST-PRIM(G,w,r)\mathtt{\text{MST-PRIM}}(G,w,r) 毎u∈V[G]u∈V[G]u \in V[G]を行います key[u]←∞key[u]←∞\mathtt{\text{key}}[u] \leftarrow \infty π[u]←NILπ[u]←NIL\pi[u] \leftarrow \mathtt{\text{NIL}} key[r]←0key[r]←0\mathtt{\text{key}}[r] \leftarrow 0 Q←V[G]Q←V[G]Q \leftarrow V[G] 一方、 // ... O (Q≠∅Q≠∅Q \ne \emptysetO(V)O(V)O(V) ← EXTRACT-MIN(u ) // ... O (lguuu ←←\leftarrow EXTRACT-MIN(u)EXTRACT-MIN(u)\mathtt{\text{EXTRACT-MIN}}(u)O(lgV)O(lg⁡V)O(\lg V) それぞれの //ん... O (E )v∈adj[u]v∈adj[u]v \in \mathtt{\text{adj}}[u]O(E)O(E)O(E) もしとW (U 、V )> キー [ V ]v∈Qv∈Qv \in …


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) ; …

4
並べ替えられた配列のリストの中央値を見つける
入力:(数値の)配列 セット。 各配列内の要素は並べ替えられていますが、配列のセットは必ずしも並べ替えられていません。配列は必ずしも同じサイズである必要はありません。要素の総数はです。A I Nℓℓ\ellAiあ私A_inんn 出力:入力のすべての要素のうち最小番目の要素。kkk この問題の最も効率的なアルゴリズムは何ですか? たとえば、実行時間を達成することは可能ですか?O(ℓ+logn)O(ℓ+ログ⁡ん)O(\ell + \log n)

3
連続するXOR値の最大値と最小値を見つける
整数配列(最大サイズ50000)指定された、Iは最小値と最大見つけなければならない例えば一部について、と。X = P ⊕ P + 1 ⊕ ⋯ ⊕ A Q P Q P ≤ QXXXX=ap⊕ap+1⊕⋯⊕aqX=ap⊕ap+1⊕⋯⊕aqX = a_p \oplus a_{p+1} \oplus \dots \oplus a_qpppqqqp≤qp≤qp \leq q 私はこのプロセスを試しました: for all。私はそれをで事前に計算し、次にいくつかの、の値を計算しては次のようになり:。したがって: I O (N )X P Q (P ≤ Q )X = 和Q ⊕ 和P - 1sumi=a0⊕a1⊕⋯⊕aisumi=a0⊕a1⊕⋯⊕ai\text{sum}_i = a_0 \oplus a_1 …

1
グラフ内のすべての2ホップ近傍リストを見つけるアルゴリズム
グラフ場合、| V | = n。Vのすべてのノードのすべての2ホップ近傍リストのコレクションを生成するための高速アルゴリズムとは何ですか。G = (V、E)G=(V,E)G = (V,E)| V| =n|V|=n|V| = nVVV 簡単に言えば、でそれを行うことができます。行列のべき乗では、Strassenアルゴリズムを使用してO (n 2.8)でそれを行うことができます。別の行列乗算アルゴリズムを使用すると、これよりも優れた処理を行うことができます。より良い方法はありますか?ラスベガスのアルゴリズムはありますか?O (n3)O(n3)O(n^3)O (n2.8)O(n2.8)O(n^{2.8})

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 …

1
ヒープソートの最悪のケースを見つける
ACM ICPC 2004–2005 Northeastern European contestで問題Hに取り組んでいます。 問題は基本的に、ヒープを構築するためのアルゴリズム(シフトダウン)で最大数の交換を生成する最悪のケースを見つけることです。 入力:入力ファイルにはが含まれています()。nnn1≤n≤50,0001≤n≤50,0001 \le n \le 50{,}000 出力:ヒープになるように、からまでの異なる整数を含む配列を出力します。これをソートされた配列に変換すると、シフト操作の交換の合計数が最大になります。nnn111nnn 入力例:6 対応する出力:6 5 3 2 4 1 そして基本的な出力: [2, 1] [3, 2, 1] [4, 3, 1, 2] [5, 4, 3, 2, 1] [6, 5, 3, 4, 1, 2]

1
選択と挿入の並べ替えに敵対的な引数を使用するにはどうすればよいですか?
選択と挿入の並べ替えの下限を見つけるために必要な敵対的な引数を見つけるように求められました。それへの参照がどこにも見つかりませんでした。 これについてはいくつか疑問があります。私は通常、「アルゴリズム」ではなく特定の「問題」の下限を見つけるために敵対的な議論が使用されることを理解しています。 マージの問題を理解しました。しかし、どのようにして選択および挿入ソート用に作成できますか?


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