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

特定の問題を明確な方法で解決するために必要な特定の手順の説明。抽象的な形式で表現されます。

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

7
一般的な行列の最大固有値を計算する最速の方法は何ですか?
編集:固有値の大きさが1以上であるかどうかをテストしています。 大きなスパースな非対称行列の最大の絶対固有値を見つける必要があります。 eigen()EISPACKまたはLAPACKのQRアルゴを使用してすべての固有値を検索し、次にabs()絶対値を取得するために使用するRの関数を使用しています。しかし、私はそれをより速くする必要があります。 また、igraphRパッケージのARPACKインターフェイスを使用してみました。しかし、私の行列の1つでエラーが発生しました。 最終的な実装はRからアクセス可能でなければなりません。 おそらく同じ大きさの複数の固有値があるでしょう。 何か提案はありますか? 編集: 精度はする必要があるだけ1e-11です。「典型的な」行列はこれまででした。QR分解を行うことができました。ただし、より大きなものを使用することもできます。現在、Arnoldiアルゴリズムについて読み始めています。Lanczsosに関連していることを理解しています。386 × 386386×386386\times 386 EDIT2:「テスト」している複数のマトリックスがあり、変化しない大きなサブマトリックスがあることがわかっている場合。無視/破棄することは可能ですか?


1
漸近勾配を見つけるための数値アルゴリズムはありますか?
一連のデータポイントありそれらは(ほぼ)大規模な行に漸近する関数従うと予想されます。基本的に、はとしてゼロに近づき、おそらくすべての微分、についても同じことが言えます、など。しかし、f(x)の関数形式が何であるかは、それが基本関数の観点から説明できるものを持っている場合でもわかりません。(xi,yi)(xi,yi)(x_i,y_i)y(x)y(x)y(x)xxxf(x)≡y(x)−(ax+b)f(x)≡y(x)−(ax+b)f(x) \equiv y(x) - (ax + b)x→∞x→∞x \to \inftyf′(x)f′(x)f'(x)f′′(x)f″(x)f''(x)f(x)f(x)f(x) 私の目標は、漸近勾配aの可能な限り最良の推定値を取得することaaaです。明らかな大雑把な方法は、最後のいくつかのデータポイントを選択して線形回帰を行うことですが、もちろん、データがあるxの範囲内でf(x)f(x)f(x)が「十分にフラット」にならない場合、これは不正確になります。明らかに粗雑な方法は、f(x)\ approx \ exp(-x)(または他の特定の関数形式)を想定し、すべてのデータを使用してそれに適合することですが、私が試した単純な関数は\ exp (-x)または\ dfrac1 {x}は、f(x)の下のxのデータと完全には一致しませんxxxf(x)≈exp(−x)f(x)≈exp⁡(−x)f(x) \approx \exp(-x)exp(−x)exp⁡(−x)\exp(-x)1x1x\dfrac1{x}xxxf(x)f(x)f(x)は大きい。漸近勾配を決定するための既知のアルゴリズムはありますか、データが漸近線にどのように近づくかについての知識が不足しているので、信頼区間とともに勾配の値を提供できますか? この種のタスクは、さまざまなデータセットを扱う作業で頻繁に発生する傾向があるため、主に一般的なソリューションに興味がありますが、リクエストにより、この質問を引き起こした特定のデータセットにリンクしています。コメントで説明されているように、Wynn ϵϵ\epsilonアルゴリズムは、私が知る限り、いくぶんオフの値を提供します。これがプロットです: (高いx値でわずかに下向きの曲線があるように見えますが、このデータの理論モデルでは、漸近的に線形になるはずです。)
23 algorithms 

10
ソートされた数値の配列の合計を計算するのに、どのアルゴリズムがより正確ですか?
与えられるのは、正数増加する有限シーケンスです。次の2つのアルゴリズムのうち、数値の合計の計算に適しているのはどれですか?z1、z2、。。。。。znz1、z2、。。。。。znz_{1} ,z_{2},.....z_{n} s=0; for \ i=1:n s=s + z_{i} ; end または: s=0; for \ i=1:n s=s + z_{n-i+1} ; end 私の意見では、エラーはますます小さくなるので、最大の番号から最小の番号に番号を追加し始める方が良いでしょう。また、非常に大きな数値を非常に小さな数値に加算すると、近似結果が大きな数値になる可能性があることもわかっています。 これは正しいです?他に何が言えますか?

4
(適応?)関数プロットのアルゴリズム
私は、特異性を持っているかもしれないし、持っていないかもしれない関数のために標準的な2Dグラフを描くアルゴリズムを探しています。目的は「Mini-CAS」を作成することです。そのため、ユーザーがグラフ化する機能のタイプについての先験的な知識はありません。 この問題は非常に古いので、文献には標準的なアルゴリズムがいくつかあるはずです。かつては、Googleを介して参照を見つけることにあまり成功していませんでした。 1つの興味深いアルゴリズム、つまり「Adaptive function plotting」という名前の「YACAS-アルゴリズムの本」からのアルゴリズムを見つけました 。 要するに: 標準のアルゴリズムはありますか? 既知のプロット困難な関数のテストスイートはありますか? 読むべき興味深い論文は何ですか?

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人の非通勤オペレーター間で情報を圧縮する非自明な方法がないことを意味します。驚くほど驚くことではありませんが、それをよりよく理解することは素晴らしいことです。

2
多対多の一般化された割り当て問題のアルゴリズム
多対多の一般化された割り当て問題(GAP)を解決するために使用できるアルゴリズムに関する文献を見つけることができないようです。つまり、1つのエージェントに複数のタスクを割り当てることができるだけでなく、複数のエージェントを割り当てることができるモデル1つのタスクに割り当てられます(1対1および1対多のAPは、Penticoの論文で説明されています)。割り当ての問題はほとんどありませんが、調査中にこのような問題に遭遇しました。その解決方法について詳しく知りたいと思います。このような多対多のGAPが別の名前で知られている可能性はありますか、またはそれに関する文献がほとんど見つからない別の理由がありますか? Pentico、D。課題の問題:黄金周年記念調査。European Journal Of Operational Research(2007); 176(2):774-793。

4
FortunaまたはMersenne Twisterは、アルゴリズムRNGとして望ましいですか?
最近の回答では、モンテカルロシミュレーションをシードするためにFortunaまたはMersenne Twister Random Number Generators(RNG)を使用することに言及しました。フォーチュナのことを聞いたことがなかったので調べてみたところ、主に暗号化の使用を目的としているようです。 現在、実動コードでMersenne Twisterを使用してK-Meansアルゴリズムをシードしています。 「FortunaまたはMersenne Twister」は、「アルゴリズムシード」​​アプリケーション(モンテカルロとK-Meansのシードなど)に最適と見なされますか?または、それは「投げる」-つまり最も便利なものを使用します。 私が座っているところから、「最高」は最高品質の乱数を提供し、迅速に動作し、(おそらく)メモリのフットプリントが小さいはずです。これらのうち、おそらく品質は私たちのほとんどにとって最も重要です。

6
次元に依存しないコードを作成するにはどうすればよいですか?
特定の操作/アルゴリズムの1次元、2次元、3次元のバージョンについて、非常によく似たコードを書くことがよくあります。これらのバージョンをすべて維持するのは面倒です。単純なコード生成はかなりうまく機能しますが、より良い方法が必要だと考えられているようです。 一度操作を記述し、それを高次元または低次元に一般化する比較的簡単な方法はありますか? 具体例の1つ​​は次のとおりです。スペクトル空間で速度場の勾配を計算する必要があるとします。3次元では、Fortranループは次のようになります。 do k = 1, n do j = 1, n do i = 1, n phi(i,j,k) = ddx(i)*u(i,j,k) + ddx(j)*v(i,j,k) + ddx(k)*w(i,j,k) end do end do end do ここで、ddx配列は適切に定義されています。(マトリックス乗算でもこれを行うことができます。)2次元フローのコードはほぼ同じですが、3番目の次元がループ、インデックス、およびコンポーネントの数から削除されます。これを表現するより良い方法はありますか? 別の例は次のとおりです。3次元グリッド上で点ごとに定義された流体速度があるとします。速度を任意の位置(つまり、グリッドポイントに対応しない)に補間するには、3次元すべてにわたって連続して1次元ネビルアルゴリズムを使用します(つまり、次元削減)。単純なアルゴリズムの1次元の実装を前提として、次元削減を行う簡単な方法はありますか?

1
Octreesが多極空間分解に使用されるのはなぜですか?
Fast Multipole Method(FMM)のほとんど(すべて?)の実装では、関連するドメインを分解するために八分木が使用されます。理論的には、octreeは単純な体積境界を提供します。これは、FMMのO(n)ランタイムを証明するのに役立ちます。この理論的根拠を超えて、他のツリーまたはトライデータ構造よりもOctreeを使用する利点はありますか? セルは直接の隣接セルを知っているため、八分木を使用すると、相互作用リストの決定が容易になる場合があります。ただし、Dual Tree Traversalのような、より動的なツリートラバーサルを使用する相互作用リストは不要です。 代替手段はkdツリーです。考えられる理論的な欠点の1つは、建設には高価な中央値検出操作が必要になることです。ただし、スペースパーティショニングの効率は劣りますが、構築中に中央値を検出する必要のないバージョンのkdツリーがあります。実装面では、kdツリーは非常に単純です。 さらに急進的な代替案はRツリーです。 だから、私の質問は次のとおりです。FMMに最適な選択肢となるOctreesについてはどうですか?
18 algorithms 

2
行列値の連続分数のための効率的なアルゴリズムはありますか?
次のように再帰的に定義された行列方程式があるとします A[n] = inverse([1 - b[n]A[n+1]]) * a[n] その場合、A [1]の方程式は連続分数に似ており、退屈な再計算を回避する非常に効率的な方法がいくつかあります(いくつかの例については「数値レシピ」を参照)。 しかし、b [n] A [n + 1]が正方行列であるという唯一の制約により、係数b [n]およびa [n]を行列にすることができる類似の方法があるのだろうか 1 - b[n]A[n+1] 実際に可逆です。
18 algorithms 

3
アルゴリズムパラメータを簡単に変更するために、どのようなプログラミング戦略を使用できますか?
科学的アルゴリズムの開発は非常に反復的なプロセスであり、多くの場合、実験デザインの一部として、またはアルゴリズムのパフォーマンスの調整の一環として変更する多くのパラメーターを変更する必要があります。これらのパラメーターを構造化して、反復間で簡単に変更したり、新しいパラメーターを簡単に追加したりするには、どのような戦略をとればよいですか?

3

3
べき級数マップの使用
私は加速器物理学の分野から来ました。特に円形のストレージリングに関連していますシンクロトロン光源用。高エネルギー電子は、磁場に導かれてリングの周りを循環します。電子は何十億回も循環しており、安定性を予測したいと考えています。位相空間(位置、運動量空間)の観点から、リングの1点での電子の動きを説明できます。リングを回るたびに、パーティクルは新しい位置と運動量に戻り、これにより「ワンターンマップ」と呼ばれる位相空間のマップが定義されます。原点に不動点があると仮定する場合があるため、べき級数で拡張できます。したがって、反復べき級数マップの安定性について知りたいと思います。これについて多くの難しい質問があり、このトピックには古い歴史があります。いわゆる切り捨てられたべき級数代数を実装するために、多数のライブラリが実装されています。(例えばY. Yanによるzlibに関するこの論文。物理学に関するより多くの背景と分析の1つのアプローチは、Bazzani et。al。ここで。)問題は、そのようなライブラリを使用する方法、および安定性の問題を解決する方法です。ビームダイナミクスで使用される主なアプローチは正規形解析でしたが、成功したとは思いません。ある種のスペクトル法が他の分野で開発されているのだろうか(おそらくこのようなものに沿って)?)。誰かが原点を固定点とする反復べき級数マップの長期安定性が分析される別のドメインを考えることができます。私が知っている1つの例は、フィッシュマンと原子物理学の「アクセラレータモード」の仕事です。他にありますか?キックローターまたはヘノンマップとしてモデル化できる他のシステムは何ですか?

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