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

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

2
Map-Reduceモデルの時間複雑度分析
Hadoop / MapReduceパラダイムで実行するようにアルゴリズムを再設計しようとしています。ビッグデータプラットフォームのアルゴリズムの時間の複雑さを測定するための全体的なアプローチがあるかどうか疑問に思っていました。 簡単な例として、n(= 10億)の数の平均を取ることは、O(n)+ Cで実行できます(除算が一定時間演算であると仮定)。Map Reduceのこの大規模な並列化可能なアルゴリズムを壊すと、データをk個のノードに分割することで、時間の複雑さは単にO(n / k)+ C + C 'になります。ここで、C 'は、開始ジョブの計画時間のオーバーヘッドとして想定できます。関与するシャッフルはなく、レデューサーの仕事はほとんど取るに足らないことに注意してください。 データに対する反復ループを使用したアルゴリズムのより完全な分析に興味があり、重いシャッフルとリデューサー操作を含みます。可能であれば、I / O操作とデータのネットワーク転送を組み込みたいです。

1
深さ優先検索の時間の複雑さ[終了]
休業。この質問には詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善してみませんか?詳細を追加し、この投稿を編集して問題を明確にしてください。 3年前休業。 初心者の質問をすることを許してください。しかし、私はアルゴリズムと複雑さの初心者であり、特定のアルゴリズムの複雑さがどのようにして生じたのか理解するのが難しい場合があります。 コーメンのアルゴリズムの紹介から DFSアルゴリズムを読んでいましたが、これがアルゴリズムでした。 G -> graph G.V -> set of vertices in G u.π -> parent vertex of vertex u G.Adj[u] -> adjacency list of vertex u DFS(G) 1 for each vertex u ∈ G.V 2 u.color = WHITE 3 u.π = NIL 4 time = 0 …

3
理論的な複雑さと実際の効率の違い
この疑似コードがある場合: for i=0 to n/2 do for j=0 to n/2 do ... do anything .... 反復回数は ん2/ 4ん2/4n^2/4。 このプログラムの複雑さは何ですか?それは?O (ん2)O(ん2)O(n^2) その複雑さは、どのような直感的な公式/非公式なものですか? 次に、この他の疑似コードがある場合: for i=0 to n do for j=0 to n do ... do anything .... 再び複雑さは -それは正しいですか?O (ん2)O(ん2)O(n^2) この場合、実際の効率と理論上の複雑さの間に違いはありますか?これらの1つは他よりも高速ですか?

1
ピボットとして平均を使用すると、クイックソートがスピードアップしますか?
どういうわけか私は昨夜クイックソートについて考え、ウィキペディアでそれについて読んでいました。私にとって興味深い部分は、次のとおりです。「ピボットを中央の50%から一貫して選択できれば、リストを最大で分割するだけで済みます。ピボットの選択は、動作につながる可能性があるクイックソートの1つの考えられる問題のようです。log4/3nlog4/3⁡n\log_{4/3} nO(n2)O(n2)O(n^2) 私の考えは、各ステップでパーティションの平均値をピボットとして使用すると、速度が大幅に向上する可能性があります。特にいくつかのステップの後、外れ値がリストの独自の区分にある場合、平均と中央値は互いに非常に近いはずです(もう一度、大きなリストを見てください)。各ステップで平均を計算するための追加の時間はなければなりません。したがって:nnn クイックソートの推定時間:nAlog4/3nnAlog4/3⁡nnA\log_{4/3} n Quicksort_meanの推定時間:2nAlog5/3n2nAlog5/3⁡n2nA\log_{5/3} n (5/3は、私が控えめに見積もる可能性が高いです。サブセットは外れ値がないため、すぐに2に近づく可能性があります)。したがって、約10,000エントリから開始すると、Quicksort_meanは(平均して)Quicksortよりも高速になります。さらに、スタックの最小要素または最大要素をとらないようにバインドされているため、になるリスクは決してありません。O(n2)O(n2)O(n^2) 私の主な質問は次のとおりです。何か見逃しましたか?私は認めなければなりません、私は自分でクイックソートを実装したことがないので、全体の他の部分(ストレージなど)を見逃す可能性があります

1
行列乗算アルゴリズムの実行時間を分析するために使用される計算モデルはどれですか?
行列乗算アルゴリズム(Strassenのアルゴリズムなど)の漸近ランタイムについてはすでに学習しましたが、この複雑さを測定するために使用される計算モデルへの明示的で満足のいく参照は見つかりませんでした。実際、私は3つの可能な答えを見つけましたが、どちらも完全に満足できるものではないようです。 ウィキペディアによると、ここで使用されているモデルはマルチテープチューリングマシンです。マトリックス乗算の分析では、スカラー乗算は一定の時間複雑さを持つと想定されているため、これは私にはあまり意味がありません。これは、チューリングマシンには当てはまりません。 一部のテキストは、使用される算術演算の数として複雑さを漠然としか説明していません。しかし、この文脈での算術演算は正確には何ですか?その加算、乗算、そしておそらく減算だと思います。しかし、除算、整数除算、剰余などはどうですか?そして、ビット単位の操作についてはどうでしょうか-これらはどのようにこの設定に適合しますか? 最後に、最近、BSSマシンを計算モデルとして使用する記事を発見しました。しかし、これは私にとっても少し奇妙に思えます。たとえば、整数行列の場合、整数除算などの操作を禁止することはあまり意味がありません。 これらを整理するのを手伝ってくれるだれでもに感謝します。

4
この関数の時間の複雑さはどれくらいですか?
これは私の講義ノートの例です。この関数は時間の複雑さを伴いますかO (n ログn )O(nlog⁡n)O(n \log n)?。最悪のケースは機能がelse分岐に入るので、時間の複雑性が2つの入れ子になったループログんlog⁡n\log n そして んnn、そうです O (n ログn )O(nlog⁡n)O(n \log n)。私は正しいですか? int j = 3; int k = j * n / 345; if(k > 100){ System.out.println("k: " + k); }else{ for(int i=1; i<n; i*=2){ for(int j=0; j<i; j++){ k++; } } }

2
行列乗算プログラムの入れ子ループの不変式
Hoareロジックを使用して2つの行列を乗算するためのプログラムの正確性を証明することについて、卒業論文を作成しています。これを行うには、このプログラムの入れ子ループの不変式を生成する必要があります。 for i = 1:n for j = 1:n for k = 1:n C(i,j) = A(i,k)*B(k,j) + C(i,j); end end end 私は最初に内部ループの不変式を見つけようとしましたが、今までは本当のものを見つけることができません。上記のプログラムの不変式を見つけるのを手伝ってくれる人はいますか?
7 algorithms  loop-invariants  correctness-proof  formal-languages  regular-languages  pumping-lemma  logic  logic  programming-languages  lambda-calculus  term-rewriting  operational-semantics  complexity-theory  time-complexity  computability  proof-techniques  reductions  digital-preservation  distributed-systems  storage  algorithms  dynamic-programming  check-my-algorithm  reference-request  cryptography  quantum-computing  formal-languages  regular-languages  context-free  formal-grammars  algorithms  graphs  network-flow  algorithms  data-structures  randomized-algorithms  lists  computability  proof-techniques  undecidability  terminology  distributed-systems  parallel-computing  artificial-intelligence  heuristics  search-problem  algorithms  computational-geometry  algorithm-analysis  asymptotics  recurrence-relation  mathematical-analysis  master-theorem  algorithms  algorithm-analysis  runtime-analysis  computability  reductions  turing-machines  formal-languages  context-free 

3
最大のものを見つけることの複雑さ
以下は、私がそうであると信じるものでこれを行うための私のアルゴリズムです O(n)O(n)O(n)時間、そしてそれに対する私の証拠。私の教授はそれが実行されることに同意しませんO(n)O(n)O(n) 代わりにそれが実行されると考えています Ω(n2)Ω(n2)\Omega(n^2)時間。証明自体またはスタイルに関するコメント(つまり、私のアイデアは明確かもしれませんが、プレゼンテーションは明確ではありません)。 元の質問: 与えられた nnn 数、最大を見つける m≤nm≤nm \leq n そのうちに o(nlogn)o(nlog⁡n)o(n \log n)。あなたは他に何も想定しないmmm。 私の答え: 最初に並べ替え mmm配列の要素。これにはO(1)O(1)O(1) 時間、これは完全に依存しているため mmmではなく nnn。 それらをリンクされたリストに格納します(ソートされた順序を維持します)。これもかかりますO(1)O(1)O(1) 時間と同じ理由で。 配列内の他のすべての要素について、リンクリストの最小要素より大きいかどうかをテストします。これにはO(n)O(n)O(n) 時間として nnn 比較を行う必要があります。 数値が実際に大きい場合は、リンクされたリストの最初の要素(最小のもの)を削除し、リストを並べ替えられた順序で保持する場所に新しい数値を挿入します。これにはO(1)O(1)O(1) それは定数(mmm)上記のリストは拡大しません。 したがって、アルゴリズムの全体的な複雑さは O(n)O(n)O(n)。 リンクされたリストとは対照的に赤黒ツリーを使用すると、定数の点でより効率的であることを知っています(定数の上限が O(m⋅log2(m))O(m⋅log2⁡(m))O(m\cdot \log_2(m)) とは対照的に mmm (比較を容易にするために)ツリーの最下部の要素へのポインタを保持するという問題は非常に実行可能ですが、そのときは私には起こりませんでした。 私の証拠は何ですか?それを提示するより標準的な方法はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.