タグ付けされた質問 「complexity」

計算の難易度またはアルゴリズムの漸近実行時間に関連します。

7
フロップカウントによるアルゴリズム分析は時代遅れですか?
私の数値解析コースでは、問題のサイズに対して、必要な浮動小数点演算(フロップ)の数を数えることにより、アルゴリズムの効率を分析することを学びました。たとえば、数値線形代数に関するTrefethen&Bauのテキストには、フロップカウントの3Dに見える写真さえあります。 キャッシュにないものをフェッチするためのメモリレイテンシは、フロップのコストよりもはるかに大きいため、「フロップは無料」と言うのが流行しています。しかし、少なくとも数値解析コースでは、フロップを数えることを生徒に教えています。代わりに、メモリアクセスをカウントするように教える必要がありますか?新しい教科書を書く必要がありますか?または、メモリアクセスがマシン固有であり、時間を費やすことができませんか?フロップまたはメモリアクセスがボトルネックであるかどうかに関して、長期的な傾向はどうなりますか? 注:以下の回答のいくつかは、「実装を強烈に書き換えて、数フロップを節約するか、キャッシュのパフォーマンスを向上させるべきですか?」しかし、私が求めているのは、「算術演算またはメモリアクセスの観点からアルゴリズムの複雑さを推定する方が便利ですか?」という行に沿ったものです。


3
対角線と固定対称線形システムは、事前計算後の2次時間で解くことができますか?
ある解決する方法、フォームのシステム線形(D_I + A)X_I = b_i Aが固定SPD行列でありD_Iは正の対角行列でありますか?O(n3+n2k)O(n3+n2k)O(n^3+n^2 k)kkk A D i(Di+A)xi=bi(Di+A)xi=bi(D_i + A) x_i = b_iAAADiDiD_i たとえば、各DiDiD_iがスカラーの場合、AのSVDを計算するだけで十分AAAです。ただし、これは、可換性の欠如により、一般DDDについて分類されます。 更新:これまでの答えは「いいえ」です。誰が理由について興味深い直感を持っていますか?回答がないということは、2人の非通勤オペレーター間で情報を圧縮する非自明な方法がないことを意味します。驚くほど驚くことではありませんが、それをよりよく理解することは素晴らしいことです。

3
科学プログラミングコンテスト
私は定期的にいわゆる「プログラミングコンテスト」に参加します。このコンテストでは、限られた時間内に独自のコードと問題解決スキルで困難なアルゴリズムの問​​題を解決します。それらがどのように見えるかの参考例については、Google Code JamやACM-ICPCなどのコンテストを検索してください。 (プログラミングコンテストの内容がわかっている場合は、次の段落をスキップできます) これらのコンテストでは、個人またはチームで、物理的なサイトまたはオンラインで競争できます。目標は、コンテストが終了する前にできるだけ多くの問題を解決することです。各問題は、実行時間、使用メモリなど、ソリューションが満たさなければならない特定の制約に関連付けられています。問題の難易度は、「明らかな解決方法」から「高度な知識やひび割れへの多大な工夫」にまで及びます。もちろん、主な目標は楽しみを持つことですが、場合によっては、成功するとGoogleのような一流企業の採用担当者とのインタビューでさえ、賞金、名誉、忍耐につながる可能性があります。 (上の段落をスキップした場合は、スキップを停止してください。ここに私の質問が来るので) プログラミングコンテストを通じて、アルゴリズム、コンピュータサイエンス全般、そして問題解決スキルのコーディングと開発に関して、全体的な意味の感覚に真の関心を抱くことができました。科学計算でも同様にしたいと思います。 質問: 純粋にアルゴリズム的な種類と同じような流れで、数値解析、最適化などに焦点を当てた競争はありますか? グーグルを試してみましたが、一目で見つかりませんでした… 補遺: Project Eulerをチェックアウトするよう提案されましたが、それは私が探していたものではありません。私が望んでいるのは、pdeの解法を使って創造的になる、数値最適化の問題を解決するなど、より「汚れた」種類の数値を練習する場です。比較のために、Kaggleは、定期的に開催されるさまざまなコンテストでデータマイニング、機械学習などを練習できるサイトです。私はそのようなものが欲しいのですが、数値スキームなどを実装して創造的にするために。

1
MDシミュレーションの複雑さ
私は分子動力学(MD)シミュレーションが初めてです。シミュレーション時間に関する分子動力学シミュレーションの複雑さは何ですか?言い換えると、シミュレーション時間を10ナノ秒から20ナノ秒に増やしたい場合、ランタイムの増加に関して何が期待できますか?

3
Thomasアルゴリズムは、対称対角優勢なスパース三重対角線形システムを解くための最速の方法ですか
Thomasアルゴリズムが、アルゴリズムの複雑さの観点から対称対角線上にあるスパース三重対角システムを解決するための最速の方法(おそらく?)かどうか疑問に思っています(LAPACKなどの実装パッケージを探していません)。トーマスアルゴリズムとマルチグリッドの両方が複雑さであることは知っていますが、マルチグリッドの定数因子はそれよりも少ないのでしょうか?マルチグリッドの方が速いように思えませんが、私は前向きではありません。O(n )O(n)O(n) 注:マトリックスが非常に大きい場合を考えています。直接的な方法または反復的な方法のどちらでもかまいません。

2
行列を反転するための「補因子技術」には実用的な意味がありますか?
タイトルは質問です。この手法は、「コファクターの行列」または「補助行列」の使用を含み、正方行列の逆の成分の明示的な公式を提供します。たとえばよりも大きい行列を手作業で行うのは簡単ではありません。以下のためマトリックスは、マトリックス自体の行列式を計算し、計算する必要の決定行列を。だから、私はそれがアプリケーションにとってそれほど有用ではないと推測しています。しかし、確認をお願いします。3×33×33\times 3n×nn×nn\times nn2n2n^2(n−1)×(n−1)(n−1)×(n−1)(n-1)\times(n-1) 私は、行列に関する定理を証明する上での手法の理論的意義については質問していません。

4
ライブラリ関数のFLOPカウント
単純な関数でFLOPの数を評価するとき、基本的な算術演算子を集計する式を単純にたどることができます。ただし、偶数除算を含む数学ステートメントの場合、これを行うことはできず、加算と乗算のみの関数からのFLOPカウントと比較できると期待されます。操作がライブラリに実装されると、状況はさらに悪化します。したがって、特別な機能のパフォーマンスについて合理的な考えを持つことが不可欠です。 特別な機能とは、次のようなものを意味します。 exp() sqrt() sin / cos / tan() 通常はシステムライブラリによって提供されます。 これらの複雑さの決定は、それらの多くが適応性があり、入力依存の複雑さを持っているという事実によってさらに混乱します。たとえば、exp()の数値的に安定した実装は、多くの場合、適応的に再スケーリングしてルックアップを使用します。ここでの私の最初の印象は、この場合にできる最善の方法は、関数の平均的な動作を確認することです。 この議論全体は、もちろん、アーキテクチャに大きく依存しています。この議論では、従来の汎用アーキテクチャに限定し、特別な機能ユニット(GPUなど)を持つアーキテクチャを除外できます。 システムとシステムの比較のために、特定のアーキテクチャ向けにこれらを標準化するかなり簡単な試みを見つけることができますが、メソッドとメソッドのパフォーマンスを重視する場合、これは受け入れられません。これらの関数のフロップの複雑さを決定するためのどの方法論が受け入れられると考えられますか?大きな落とし穴はありますか?

2
mpi_allgather操作の計算コストは​​、ギャザー/スキャッター操作と比較してどうですか?
単一のmpi_allgather操作または1つのmpi_scatterと1つのmpi_gather操作を使用して並列化できる問題に取り組んでいます。これらの操作はwhileループ内で呼び出されるため、何度も呼び出される場合があります。 MPI_allgatherスキームを使用した実装では、重複する行列を解決するために、分散ベクトルをすべてのプロセスに収集しています。もう1つの実装では、分散ベクトルを単一のプロセッサ(ルートノード)に収集し、このプロセッサで線形システムを解き、ソリューションベクトルをすべてのプロセスに分散させます。 収集操作のコストが、分散操作と収集操作を合わせたものよりもかなり大きいかどうか知りたいです。メッセージの長さは、その複雑さにおいて重要な役割を果たしていますか?mpiの実装によって異なりますか? 編集:

3
と間には複雑性がありますか?[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、計算科学スタック交換のトピックになるようにします。 5年前休業。 より大きくより小さい複雑度はありか?O (n log n )O(n)O(n)O(n)O(nlogn)O(nlog⁡n)O(n \log n)

2
アルゴリズムの計算努力
x opt x 0 x opt。x ϵ − O | | x − x opt | | 2O:=minx∈Rnf(x).O:=minx∈Rnf(x).\mathcal{O} := \min_{x \in \mathbb{R}^n} f(x).xoptxoptx_\text{opt}x0x0x_0xopt.xopt.x_\text{opt}.xxxϵ−ϵ−\epsilon-OO\mathcal{O}||x−xopt||2||x0−xopt||2≤ϵ.||x−xopt||2||x0−xopt||2≤ϵ.\begin{equation} \frac{||x - x_{\text{opt}}||_2}{||x_0 - x_\text{opt}||_2} \leq \epsilon. \end{equation} 次のプロパティを持つ close解を見つけるために、2つの反復アルゴリズムとが存在するとします。A 2 ϵ− OA1A1\mathcal{A}_1A2A2\mathcal{A}_2ϵ−ϵ−\epsilon-OO\mathcal{O} いずれについても合計の計算努力、すなわち努力イテレーションごとに必要な反復の総数は、見つける近いソリューションは、両方のアルゴリズムでも同じです。× ϵ −ϵ>0,ϵ>0,\epsilon > 0,××\timesϵ−ϵ−\epsilon- たとえば、反復ごとの努力は反復ごとの努力は O(n)、 A 2 O( n 2)。A1A1\mathcal{A}_1O(n),O(n),O(n),A2A2\mathcal{A}_2O(n2).O(n2).O(n^2). あるアルゴリズムが他のアルゴリズムよりも好まれる状況はありますか?どうして?

1
N体シミュレーションの最適化、名前または既存の作業の検索
WebGLで視覚化したN体シミュレーションの開発中に、最適化を考案しましたが、名前があるかどうか疑問に思っています。これまでに行われたことがない可能性は低いと思います。 これは次のように機能します。最初のタイムステップで、すべてのペアの反復を作成します。その反復中、各パーティクルについて: すべての密接な相互作用をリストに保存します-この相互作用に近いすべての粒子を表します。これらの相互作用は、それ以降、タイムステップごとに評価されます。このリストには通常、少数のエントリが含まれます。 他のすべてのパーティクルで反復し、パーティクルと一緒に保存する正味のフォースを計算します。したがって、この正味の力はタイムステップ間で記憶され、継続的に粒子に適用されます。 次に、シミュレーションが最初のタイムステップを過ぎてラウンドロビン方式で続行されると、各タイムステップは、少数の粒子の近接相互作用と正味の遠方力のリストを更新します。そのため、特定の数のタイムステップ(たとえば1000)を超えると、すべてのパーティクルの密接な相互作用と正味の遠方の力が更新されます。更新しないものは、それらの密接な相互作用をチェックし、正味の遠方の力を適用します。この例では、各時間ステップの計算の複雑さのようなものであるの代わりにN 2。N2/ 1000N2/1000N^2 / 1000N2N2N^2 これをある程度正確にするための秘訣は、「密接な相互作用」をよりよく識別することです。近接性が最適な指標ではない場合もあります。質量や相対速度なども考慮できます。「最も重要な相互作用」の方がいいかもしれません。または、「変更の可能性が最も高い、すぐに相互作用」。 この最適化により、すべてのペアの方法よりも相互作用する粒子が多くなりますが、 O()で表現する方法がわかりません。これは、タイムステップごとに完全なソリューションを作成するのではなく、古いものを(わずかに正しくない)再利用するためです。情報を収集し、時間の経過とともに計算量を分散させます。 (免責事項:私のwebglシミュレーションにも影響を受けるだけの「vfx」パーティクルがあります、重力のて効果を往復しないため、表示されるほど高速ではありません) この最適化手法には名前がありますか?

1
次の式を計算する改良された方法はありますか?
対称行列と任意の行列X \ in \ mathbb {R} ^ {n \ times n}、およびベクトルv \ in \ mathbb {R } ^ {n \ times 1}、O(n ^ 2)時間で次の式を計算することは可能ですか?Y∈Rn×nY∈Rn×nY \in \mathbb{R}^{n \times n}X∈Rn×nX∈Rn×nX \in \mathbb{R}^{n \times n}v∈Rn×1v∈Rn×1v \in \mathbb{R}^{n \times 1}O(n2)O(n2)O(n^2) diag(XTYX)⋅vdiag(XTYX)⋅vdiag(X^TYX) \cdot v ここで、diag(X)diag(X)diag(X)は、主な対角要素がXの要素に等しく、非対角要素が0に等しいn×nn×nn \times n行列を返します。X^ TはXの転置行列です。XXXXTXTX^TXXX
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.