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

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

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

2
Schönhage–Strassenの乗算アルゴリズムの変換が安価なのはなぜですか?
Schönhage-Strassenの乗算アルゴリズムは、サイズの乗算を回すことによって動作しますNNN サイズの多くの乗算に l g(N)lg(N)lg(N)数論変換と再帰を使用します。少なくとも私はそれがそうであると思います。他にいくつかの賢さがあるからです。正確に要約するのに十分理解していません。それで終わりますO (N⋅ リットルG(N)⋅ リットルG(l g(N)))O(N⋅lg(N)⋅lg(lg(N)))O(N \cdot lg(N) \cdot lg(lg(N))) 時間。 数論変換は、有限体で行われることを除いて、離散フーリエ変換とまったく同じです。F2N+ 1F2N+1F_{2^N+1} 整数を法として 2N+ 12N+12^N+1。これにより、フーリエ変換には1の根の乗算が多くなるため、演算が大幅に安価になります。F2N+ 1F2N+1F_{2^N+1}の結束のルーツはすべて2の累乗なので、シフトするだけです!また、整数は、浮動小数点の複素数よりもはるかに扱いやすいです。 とにかく、私を混乱させるのは F2N+ 1F2N+1F_{2^N+1}とても大きいです。からランダムな要素を与えるとF2N+ 1F2N+1F_{2^N+1}、 それはとります O (N)O(N)O(N)それを指定するビット。したがって、2つの要素を追加するにはO (N)O(N)O(N)時間。そして、DFTは多くの追加を行います。 Schönhage–Strassenは入力を Nl g(N)Nlg(N)\frac{N}{lg(N)} とのグループ l g(N)lg(N)lg(N)ビット。これらのグループは、F2N+ 1F2N+1F_{2^N+1}それが変形することを。DFTの各パスにはO (Nl g(N))O(Nlg(N))O(\frac{N}{lg(N)}) 足し算/引き算、そして O (l g(Nl g(N)))O(lg(Nlg(N)))O(lg(\frac{N}{lg(N)}))パス。だから加算加算に基づいてO (N)O(N)O(N) これらのすべての追加のコストは O(NNlg(N)lg(Nlg(N)))O(NNlg(N)lg(Nlg(N)))O(N \frac{N}{lg(N)} lg(\frac{N}{lg(N)}))、これは漸近的に同じです O(N2)O(N2)O(N^2)。 それより少し上手くいくことができます...値が非常に小さいため、追加は非常にまばらです。最初のパスの追加は本当にコストがかかりますO(lg(N))O(lg(N))O(lg(N)) それぞれ、2番目のパスのコスト 21O(lg(N))21O(lg(N))2^1 …

1
モジュラー乗算
私はウィキペディアのモジュラー乗算のページを読んでいました...を計算アルゴリズムを理解できませんでした。a⋅b(modm)a⋅b(modm)a \cdot b \pmod{m} uint64_t mul_mod(uint64_t a, uint64_t b, uint64_t m) { long double x; uint64_t c; int64_t r; if (a >= m) a %= m; if (b >= m) b %= m; x = a; c = x * b / m; r = (int64_t)(a * b - c …

2
配列の要素が同じ回数繰り返されるかどうかを判断するアルゴリズムの正確さの証明
タイトルが長かったことをお詫びしますが、内容についての情報が欠けているので、どうやって別の書き方をするのか本当にわかりませんでした。 最近、並列アルゴリズムに関する大学の試験を受けました。1つの演習で、配列の要素(これを呼び出すとしましょうA)が同じ回数繰り返されているかどうかを判断するアルゴリズムを作成するように求められました。 例えば: 1)A = 1 8 8 1 8 1 1 8:答えは「はい」です。すべての数値が2回繰り返されます。 2)A = 7 8 8 5 5 4 7 8:答えはノーです。 並列計算の特定のモデルであるPRAMのアルゴリズムを作成する必要がありました。このモデルでは、読み取り/書き込みの競合やその他の問題を回避するためにいくつかの手法を使用する必要がありましたが、これは関係ありません。私が最終的に得たのは、新しい配列でしたB。それを次のように定義できます。Given the array A, B[i] contains the number of repetitions of the element A[i] within A. 例えば: 1) A = 1 8 8 1 8 1 1 …

2
私たちはより良いことができますか
この質問に対する答えは「いいえ」であると、私は(愚かにも判明しました)確信しています。なぜ私は尋ねるのですか? それは、EPFLの並列プログラミングコースのAleksandar Prokopec博士が、さまざまな特性を主張するデータ構造を導入しているためです。これらの特性は保持している場合、そうです、私により良いでバランスの取れたバイナリツリーを構築することが可能でなければならないこと時間。O ( nログn )O(んログ⁡ん)O(n\log n) 私はこれを信じていないので、私の考えのどこに欠陥があるのだろうと思います。 データ構造は、conc-treeリストです。標準形式では、通常のバイナリツリーのように見えconcat、ノードの左右のサブツリーの高さが2以上異なることがないことを保証する操作が付属しています。予想通りconcat、複雑さはです。O (ログn )O(ログ⁡ん)O(\log n) しかし、リストと呼ばれるコンクツリーリストのビルダーバリアントがありAppendます。このバリアントは、複数のサブツリーで一時的な高さの違いを可能にします。このバリアントでは、償却済み時間の追加が要求されます。O (1 )O(1)O(1) そのため、要素を追加すると複雑さが必要になるようです。んんnO (n )O(ん)O(n) ただし、このバリアントの特徴は、が2の累乗であるときは常に、完全にバランスのとれた二分木(これまでに挿入されたすべての要素を含む)になることです。したがって、一時的な不均衡は許容されますが、ツリーは2挿入のすべてのパワーで均衡になります。んんn このバリアントでは、ノードと呼ばれる新しいクラスのノードAppendが導入され、サブツリーの高さが1つ以上異なることが許可されているノードです。ただし、挿入ごとに、このような一時ノードはすべて削除されます。2k2k2^k Wikipediaのページのページは、(基本的なデータ構造の記述と見かなり簡潔なアルゴリズムを説明しappend、特定のメソッドを)。 したがって、が2の累乗の場合、要素を挿入するためのコストはあり、バランスのとれたバイナリツリーを構築しました。またはそうです。んんnO (n )O(ん)O(n) で別の質問私は、特定の値のためのアルゴリズムのためのステップ数を述べることができる場合、私は効果的に」尋ねのために例えば、、整数である、私は複雑さを述べるできるようにするには、この十分ですすべての値?」んんnn =2kん=2kn = 2^kkkkんんn Yuval Filmusの答えから、答えは「いいえ」であることがわかりますが、「多くの場合、はで単調であると予想されます。その場合、控除は成立します。」TTTんんn したがって、この場合、要素の挿入に複雑さあり、要素ごとに平衡バイナリツリーがある場合、このコンクツリーバリアントアプローチで平衡バイナリツリーを構築するコストは。んんnO (n)O(ん)O(n)2k2k2^kO (n )O(ん)O(n) ここで何が問題になっていますか?正直に言うと、このバリアントに対して要求された償却済み追加時間がわかりません。多くの場合、挿入にはコストがかかりますが、一時ノードで何が起こっているかを見ると、全体的な挿入コストは償却されたように見え。O (1 )O(1)O(1)O (1 )O(1)O(1)AppendO (ログん)O(ログ⁡ん)O(\log n) これが当てはまる場合、バランスの取れたバイナリツリーを構築すると、驚くほどのコストがかかります。O (nログn )O(んログ⁡ん)O(n\log n) 長い質問で申し訳ありませんが、問題のアルゴリズムについて詳しく説明していません。代わりに、ウィキペディアを見回してください。

1
ガリルの法則はボイヤー・ムーアアルゴリズムでどのように機能しますか?
ガリルのルールを使用したボイヤー・ムーアのテキスト検索アルゴリズムがどのように機能するかを知りたいのですが。検索を試みましたが、このWikipediaページなど、見つけた情報を理解できませんでした。そして、なぜこのルールで線形時間の複雑さを実現するのでしょうか?

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 …

2
なぜこのグラフはMSTヒューリスティックの2近似限界のタイトさを示しているのですか?
これは私が与えられた宿題の問題であり、何時間も頭を掻き集めてきました(そのため、いくつかの指針に満足しています)。私はすでに、近似比がよりも悪くなることはないことを知っています。ホイールグラフがあります。各エッジのコストはで、エッジで接続されていないすべてのノード間の距離はです。ホイールグラフは次のです。222111222W6W6W_6 MSTヒューリスティックアルゴリズムの出力であると思われるものを青色でマークしました。しかし、すべてのノードは一度しかアクセスできないため、これも最適なソリューションだと思います。したがって、ツアーの費用は最適とMSTの両方でになります。777 このタイプのグラフが、MSTヒューリスティックの近似境界がタイトであることをどのように示しているかはわかりません(必ずしもこのインスタンスではなく、一般にグラフ)。誰かが私を啓発できますか?222WんWnW_n

2
n log n = c。これの良い近似は何ですか?
私は現在Big O表記法と計算の複雑さを調べています。 CLRSの問題1.1は、基本的な質問のように聞こえます。これは、入力のサイズとともにさまざまなアルゴリズムの複雑さがどのように成長するかについての直感を得ることです。 質問は尋ねます: 次の表の各関数と時間について、問題を解決するアルゴリズムにマイクロ秒かかると仮定して、時間で解決できる問題の最大サイズを決定します。f(n)f(n)f(n)tttnnntttf(n)f(n)f(n) 期間は、1秒、1分、1時間、1日、1か月、1年、1世紀です。 関数は、アルゴリズムで頻繁に発生する一般的な時間の複雑さであり、リストは次のとおりです。f(n)f(n)f(n) log2n,n−−√,n,nlog2n,n2,n3,2nandn!log2⁡n,n,n,nlog2⁡n,n2,n3,2nandn! \log_2n, \quad \sqrt{n}, \quad n, \quad n \log_2 n, \quad n^2, \quad n^3, \quad 2^n \quad \text{and} \quad n! ほとんどはかなり単純な代数的操作です。私はこれらの2つ、そして同じ理由で両方に苦労しています: がマイクロ秒の時間である場合、私が苦労している2つは cccnlog2n=cnlog2⁡n=c n \log_2 n = c n!∼2πn−−−√(ne)n=cn!∼2πn(ne)n=c n! \sim \sqrt{2\pi n} \left(\frac{n}{e}\right)^n = c 以下のためスターリングの近似を使用することを考えました。n!n!n! これらはどちらもを解く能力を必要とし、スターリングはもう少し操作が必要です。nlog2n=cnlog2⁡n=cn \log_2 n = c ご質問 …

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
T(n)のビッグOとは何ですか?
私は式と順序を見つける必要がある宿題を持っています T(n)T(n)T(n) によって与えられた T(1)=1T(n)=T(n−1)T(n−1)+1.T(1)=1T(n)=T(n−1)T(n−1)+1.T(1) = 1 \qquad\qquad T(n) = \frac{T(n-1)}{T(n-1) + 1}\,. 私がいることを確立してきた今は少し混乱しています。ある第二の部分のための正解?T(n)=1nT(n)=1nT(n) = \frac{1}{n}T(n)∈O(1n)T(n)∈O(1n)T(n) \in O(\frac{1}{n}) big-Oの定義に基づいて、 O(g(n))={f(n)∣∃c,n0>0 s.t. 0≤f(n)≤cg(n) for all n≥n0}.O(g(n))={f(n)∣∃c,n0>0 s.t. 0≤f(n)≤cg(n) for all n≥n0}.O(g(n)) = \{f(n) \mid \exists c, n_0>0\text{ s.t. } 0\leq f(n) \leq cg(n)\text{ for all } n\geq n_0\}\,. これはも当てはまるので、定義に基づいてf(n)=g(n)=1nf(n)=g(n)=1nf(n) = g(n) = …

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

3
遺伝的アルゴリズムの性能を実験的に分析する方法は?
最適化問題の遺伝的アルゴリズムがあります。同じ入力と同じパラメーター(母集団のサイズ、世代のサイズ、クロスオーバー、突然変異)での複数の実行に対するアルゴリズムの実行時間をプロットしました。 実行時間は実行ごとに異なります。これは正常ですか? また、大きな入力で実行すると、期待に反して実行時間が増加する代わりに減少する場合があることにも気付きました。これは予想されますか? 遺伝的アルゴリズムのパフォーマンスを実験的に分析するにはどうすればよいですか?

1
トポロジカルソートの手順、その正確さの証明
定義:状態機械の保存された不変条件は、状態に関する述語、が状態に対して真であり、が何らかの状態である場合、は次のようになります。 。PPPP(q)P(q)P(q)qqqq→ rq→rq \rightarrow rrrrP(r )P(r)P(r) 定義:折れ線グラフは、エッジがすべて1つのパス上にあるグラフです。 定義:正式には、状態機械は、セットの要素が「状態」と呼ばれ、関係が遷移関係と呼ばれ、遷移関係のグラフの矢印がトランジションと呼ばれます。状態から状態への遷移は、と記述されます。qqqrrrq→ rq→rq \rightarrow r DAG:有向アシリックグラフ 次の手順は、任意の有向グラフ適用できます。GGG サイクルにあるエッジを削除します。 削除エッジ頂点からパスがある場合に頂点には含まれていません。< u → v ><u→v>あなたuuvvv< u → v ><u→v> 頂点と頂点間にどちらの方向にもパスがない場合は、エッジを追加します。< u → v ><u→v>あなたuuvvv 該当するものがなくなるまで、これらの操作を繰り返します。 この手順は、状態マシンとしてモデル化できます。開始状態はであり、状態はすべてと同じ頂点を持つ可能な有向グラフです。GGGGGG (b)プロシージャがダイグラフで終了する場合、はと同じ頂点を持つ折れ線グラフであることを証明します。HHHHHHGGG ヒント:が折れ線グラフでない場合、何らかの操作が適用可能でなければならないことを示します。HHH (c) DAGであることが手順の保存された不変であることを証明します。 (d)そのことを証明するGGG はDAGであり、手順が終了すると、最終的な折れ線グラフのウォーク関係はトポロジの種類になります。 GGG。 ヒント:述語が P(u 、v )P(u,v)P(u,v)::からの有向パスがあります あなたuu に vvv 2つの頂点について、手順の保存された不変式です u 、v u, vu, \ …

4
償却分析に関する質問
アルゴリズムと複雑さに関する試験の準備として、私は現在、古い演習を解いています。初めて遭遇したときにすでに苦労してきた概念の1つは、償却分析の概念です。償却分析とは何ですか?私たちの講義ノートには、「償却分析は特定の操作に必要な「平均時間」の限界を与え、最悪の場合の限界を与えることもある」と述べられています。それは本当に便利に聞こえますが、例について言えば、私が何をしなければならないのかわからず、サンプルソリューションを読んだ後でも、彼らが何をしているのかわかりません。 基数2に1を加算してみましょう。つまり、0、1、10、11、100、101、110、111、1000、...償却分析を使用して、各ステップで変更する必要があるのは常に多くのビットだけを償却することを示します。 (元々はドイツ語での演習なので、完全に正確ではないかもしれない私の翻訳をお詫びします) ここで、標準解は最初に、いくつかの定数に対してを定義し。これは、潜在的な関数と呼ばれるもので、過剰な時間の単位に何らかの形で対応しているものだと思います(ただし、この特定の定義を思い付く理由はわかりません)。番目のステップでビットを変更する必要があると仮定します。そのようなステップは常に次の形式ですφ (I ):= C ⋅ #{ バイナリ表現における1ビット}ϕ(i):=c⋅#{1-bits in the binary representation}\phi(i) := c \cdot \# \{\text{1-bits in the binary representation}\}c > 0c>0c > 0メートルmm私ii …01…1m→…10…0m.…01…1⏟m→…10…0⏟m.\dots \underbrace{0 1 \dots 1}_m \to \dots \underbrace{1 0 \dots 0}_m. この発言は私には理解できますが、やはりその背後にある動機はわかりません。次に、どこからともなく、彼らは彼らが「見積もり」と呼ぶものを思いつきます a(i)=m+c(ϕ(i)−ϕ(i−1))=m+c(−m+2)a(i)=m+c(ϕ(i)−ϕ(i−1))=m+c(−m+2)a(i) = m + c(\phi(i) - \phi(i-1)) = m + c(-m …

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