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

アルゴリズムは、問題に対する抽象的な解決策を定義する明確に定義された一連のステップです。このタグは、問題がアルゴリズムの設計と分析に関連している場合に使用します。

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 + …

2
グラフのkノード間の距離を最大化
無向で重み付けされていないグラフがあり、測地線距離の観点から、からノードを選択し、それらが互いに可能な限りペアになるようにします。言い換えれば、それらは可能な限りグラフの周りに広がる必要があります。k GGGGkkkGGG ましょう間の最短経路の長さおよびで。ここで、頂点のセットに対して、 UがV G X ⊆ V (G )D (X )= Σ { U 、V } ⊆ X D (U 、V )。d(u,v)d(u,v)d(u,v)uuuvvvGGGX⊆V(G)X⊆V(G)X \subseteq V(G)d(X)=∑{u,v}⊆Xd(u,v).d(X)=∑{u,v}⊆Xd(u,v).d(X) = \sum_{\{u,v\} \subseteq X}d(u,v). 問題SCATTERED SETを、入力が最大化する個の頂点セットを見つけるように要求する問題であるとします。k X d (X )G,kG,kG,kkkkXXXd(X)d(X)d(X) SCATTERED SETを解決する効率的なアルゴリズムはありますか?

2
二部グラフの色変更
二部グラフが与えられ、すべての頂点が赤または青のいずれかに色付けされている場合、次の操作を使用して青の頂点の数を最小限に抑えようとしています。G=(A,B,E)G=(A,B,E)G = (A,B,E) 頂点を選択vavav_aAAA 色フリップ、という意味とのすべての隣人色が変わります。N[va]N[va]N[v_a]vavav_avavav_a 青い頂点の数を最小にする色変更セットを選択する多項式時間アルゴリズムはありますか?必要な再着色の数は関係ありません。X⊆AX⊆AX \subseteq A 反転の順序は重要ではなく、すべての頂点について、反転するかしないかを確認します。色は、2を法として増分される数値と考えることができます。これにより、簡単なアルゴリズムが生成されます。AAAO(2|A|⋅n)O(2|A|⋅n)O(2^{|A|} \cdot n)

2
配列の最小差を見つけるアルゴリズム
長さの整数の配列が与えられたときに、配列内の2つの整数間の最小差を見つけるアルゴリズムが必要です。nnn そのようなアルゴリズムの1つは、配列を並べ替えて、隣接する数値のペアをチェックすることです。これには時間がかかります。O(nlogn)O(nlog⁡n)O(n\log n) アルゴリズムなど、より高速な方法はありますか?O(n)O(n)O(n)

1
ハイパーキューブ内のすべてのグリッドポイントをアルゴリズム的に生成する
\def\R{\mathbb{R}}\def\Z{\mathbb{Z}}\def\n#1{\|#1\|_\infty}問題は計算数学から直接生じ、次のように述べた: 正則行列所与の、すべてのベクトルが効果的に見つけるよう、\ N {MVは}の最大成分であります係数のベクトル。M∈ Rd× dM∈Rd×dM\in\R^{d\times d}V ∈ Zdv∈Zdv\in\Z^d∥ MV ∥∞≤ 1‖Mv‖∞≤1\n{Mv}\leq1∥ MV ∥∞‖Mv‖∞\n{Mv} 以下にアルゴリズムを示しますが、グリッドポイントの数よりもはるかに多くのステップがあるため、非常に非効率的です。私の場合はd = 5でも耐えられd= 5d=5d=5ますが、d= 6d=6d=6では完全に失敗します。時間はあまりありません。また、高次元にも対応したいです。 私の現在のアルゴリズムは以下に基づいています(免責事項:より多くの数学が含まれています):最初に、\ n {M ^ {-1}}を計算し∥ M− 1∥∞‖M−1‖∞\n{M^{-1}}ます。次に、\ n {v} \ leq \ n {M ^ {-1}} \ n {Mv} \ leq \ n {M ^ {-1}}が観察され∥ V∥∞≤ ∥はM− 1∥∞∥Mv∥∞≤ ∥はM− 1∥∞‖v‖∞≤‖M−1‖∞‖Mv‖∞≤‖M−1‖∞\n{v}\leq\n{M^{-1}}\n{Mv}\leq\n{M^{-1}}ます。つまり、L …

4
(ビット)加算とシフトをプリミティブとして使用して平方根を計算する
質問:ビットの自然数与えられた、(ビット)の加算とシフトのみを使用してを計算する方法は?nnnNNN⌈N−−√⌉⌈N⌉\lceil \sqrt{N} \rceilO(n)O(n)O(n) ヒントは、バイナリ検索を使用することです。しかし、必要な複雑さを実現できませんでした(を取得しました)。O(n2)O(n2)O(n^2) それはどういう意味ですかusing only $O(n)$ (bit) additions and shifts: これはアルゴリズムブックの練習問題です。 私の意見では、それは2を追加し、言うことを意味しビットは、自然数は、コストとシフトする、と言うビットは、自然数もコスト。次に、そのような操作を回しか使用できません。 比較のコストについては触れられていません。私はそれを無視することができると思います、または2つ、たとえばビットの自然数を比較することもを要すると仮定することができます。nnnO(1)O(1)O(1)nnnO(1)O(1)O(1)O(1)O(1)O(1)O(n)O(n)O(n)nnnO(1)O(1)O(1) 私のアルゴリズムO(n2)O(n2)O(n^2): ビットの数の範囲を決定の: したがって、 t_1 \ triangleq \ lfloor \ frac {n-1} {2} \ rfloor + 1 \ le t \ le \ lceil \ frac {n} {2} \ rceil + 1 \ triangleq t_2。ttt⌈N−−√⌉⌈N⌉\lceil \sqrt{N} \rceil2n−12≤N−−√≤2n2⇒2⌊n−12⌋≤⌈N−−√⌉≤2⌈n2⌉2n−12≤N≤2n2⇒2⌊n−12⌋≤⌈N⌉≤2⌈n2⌉2^{\frac{n-1}{2}} …

2
あるセットの要素と別のセットの要素を一意に組み合わせることにより、合計距離の最小値を見つける
入力として、私はR Nに2セットのポイントを持っています。通常、大きなNの場合、たとえばN = 40です。両方のセットにm個の要素があるとします。 S = s 1 ... s m T = t 1 ... t m 意味的には両方のセットは等しいですが、R ^ Nポイントの(あらゆる種類の)ノイズにより、意味的に同じであるはずの要素の距離は0よりも大きくなります。 私が見つけたいのはmのタプル(s i、t j)で、距離の合計(s i、t j)が最小化され、k = 1のタプルのセットでs kとt kが1回だけ発生します。 ... m 基本的に(i、j)は、合計距離を最小限に抑えながら、互いにぶつからないチェス盤の塔として選択する必要があります。 言い換えれば、SとTの間の「アイデンティティマップのようなものですが、ノイズに対してロバスト」な1対1のマップを見つけたいのです。距離の測定は、類似した要素の類似性を示す良い指標であると想定しています。 基本的に私は1 ... Nの順列を見つける必要があります。したがって、この問題はTSPに非常に似ているため、NP困難またはNP完全のどちらかであると思います。ただし、TSPの問題をここでの問題のサブセットに書き換えることはできません。 この問題は、大きなNに対して現実的に解決できますか?この問題に名前はありますか?実現可能な解決策は何でしょうか?合計距離よりも優れている可能性のある別の基準はありますか? 私は貪欲なアプローチを考えました、Dを距離の行列としましょう、d ij = distance(s i、t j)。 T = {} while D is …

1
グラフのすべての非循環方向を見つけるアルゴリズム
無向グラフの非循環方向に取り組んでおり、次の質問があります。 接続された無向単純グラフ与えられた場合、すべての可能な非循環方向を見つける方法は?GGGGGG 非環状配向の数はいくつですか?(より知られているここになるように)グラフのと頂点で評価彩色多項式である。しかし、私はを負の値()で評価する方法を理解することに成功しませんでした。 (−1)p χ(G,−λ)(−1)p χ(G,−λ)(-1)^p\ \chi(G,-\lambda)GGGpppχχ\chi−λ−λ-\lambdaχχ\chi−λ−λ-\lambda

1
最大スタッキング高さの問題
次の問題は以前に調査されましたか?はいの場合、それを解決するためにどのようなアプローチ/アルゴリズムが開発されましたか? 問題(「最大スタッキング高さの問題」) 与えられたのポリゴン、その安定した、非オーバーラップ配置見つける彼らの積載高さを最大限に重力の影響の下で固定床の上を。んんn 例 3つのポリゴン: 積み重ねの高さが異なる、非常に多くの安定した重なり合わない配置の3つ: 明確化 すべてのポリゴンは均一な質量と等しい密度を持っています 摩擦はゼロです 重力が下向き方向のすべての点に作用しています(つまり、力のベクトルはすべて平行です) 構成が不安定な平衡点にある場合、構成は安定しているとは見なされません(たとえば、図の緑色の三角形は、バランスポイントの左側と右側の質量が等しい場合でも、どの頂点でも平衡化できません)。 さらに上記の点を明らかにする:ポリゴンが(「転倒」)が不安定であると考えられる場合を除き、それは少なくとも一点にかかっている厳密に左 と少なくとも一点右に厳密に(この定義は大幅シミュレーションを簡略化しその重心のと特に、配置が安定しているかどうかを評価するために位置統合などが不要になります。 「物理的」な形の問題は、ほとんどの場合にのみ解決できる継続的な問題です。アルゴリズムで取り組むことができる離散問題を取得するには、ポリゴン頂点と配置でのそれらの配置の両方を適切なラティスに制約します。 ノート あらゆる種類の総当たり攻撃は明らかに実行不可能です。ラティス内のポリゴンの配置に厳格な制約があっても(限られた領域の「格子空間」を提供するなど)、複雑さはいくつかのポリゴンを超えると単純に爆発します。 単一のポリゴンを削除すると構成が不安定になり、そのような配置は、すべての中間ステップが安定していることに依存しているアルゴリズムでは到達できないため、配置を構築するのは簡単です。 問題は少なくともNPのにおいがするので、頂点の総数がEXPTIMEで完了する可能性が高いため、ヒューリスティックスでもかなりの関心があります。希望を与えることの1つは、ほとんどの人間が例の3番目の配置が最適であることを認識するという事実です。

1
一般的なグラフのすべての完全/最大一致をカウントして見つける
最近、私は次の質問につながった問題に対処しています。 一般的なグラフですべての最大/完全なマッチングを列挙するための優れたアルゴリズムはありますか? 一般的なグラフですべての最大/完全な一致を見つけるための優れたアルゴリズムはありますか? これら2つの問題の複雑さは同じですか? 次の参考資料を見つけました。 二部グラフのすべての完全な最大および最大マッチングを列挙するアルゴリズム-二部グラフのすべての最大マッチングを列挙するアルゴリズムを提案します。 検索すべての2部グラフでパーフェクトマッチング部グラフ内のすべての完璧なマッチングを求めるアルゴリズムの提案- 両方のアルゴリズムの複雑さは、グラフ内の完全一致の数に依存します(最悪の場合、指数実行時間を意味します)。 さらに、両方の記事が2部グラフを扱っているため、一般的なグラフで同じ問題を扱っている同様の記事を見つけることができませんでした。 上記の問題に関する情報と参照をいただければ幸いです。

1
アルゴリズムはgit bisectによって最適化されていますか?
してみましょう DAGなります。一部のノードは「不良」であり、その他は「良好」であることがわかっています。悪いノードの子孫は悪いが、良いノードの祖先は良い。また、不良ノードには一意の最小要素があり、タイプ「Are you good or bad?」のクエリでクエリするノードをできるだけ少なくしたいと考えています。GGGGGGGGG この問題は、一般的なバージョン管理システムであるGitでコマンドによって解決されます。git-bisectこれは、プログラマーがバグが導入された最初のコミットを見つけるのに役立ちます。 最初に、Gitによって実装されたアルゴリズムは、1つの不良コミットと1つ以上の良好なコミットを知っていると想定しています。実行の各ステップで、アルゴリズムは次のステップ(ここから取得)を使用してコミットを見つけます。 次のコミットのみを保持します。 a)不良コミットの祖先である(不良コミット自体を含む)、および b)グッドコミットの祖先ではない(グッドコミットを除く)。 結果のグラフの適切な端から始めて、各コミットに、その祖先の数にプラス1を関連付けます。 各コミットに関連付ける最小(X、N− X)分(バツ、N−バツ)\min(X, N-X)、ここでバツバツXはステップ2でのコミットに関連付けられた値、NNNはグラフ内のコミットの総数(ステップ1で削減された後)。 最良の二分ポイントは、関連付けられた数が最大のコミットです。 このアルゴリズムは基本的に、「最悪の場合」を実現するコミットを見つけています。実際、は、最良の場合の次の反復でのDAG内のノードの数なので、が最悪のケースです。最小(X、N− X)分(バツ、N−バツ)\min(X,N-X)最大最小(X、N− X)最高分(バツ、N−バツ)\max\min(X,N-X) 不思議なんだけど: 「最悪のケース」、つまりを達成するノードを選択した場合、違いはありますか?minmax(X,N−X)minmax(X,N−X)\min\max(X,N-X) このアルゴリズムは最悪の場合最適ですか? 編集:私はこの問題に限界があることに気づきました。と呼ばれる親を持つ単一のノードによって形成されるDAGを考えます。が不良であることがわかっている場合は、各親をチェックして、それらが最小の不良ノードであるかどうかを確認します。Ω(N)Ω(N)\Omega(N)bbbN−1N−1N-1g1,…,gN−1g1,…,gN−1g_1,\dots,g_{N-1}bbb 編集2:以前は実際には境界です。ここで、はposetの幅です。この問題の代替アルゴリズムは、クエリを使用するcstheory.stackexchangeのこの回答に記載されています。Ω(w)Ω(w)\Omega(w)wwwO(wlogn)O(wlog⁡n)O(w\log{n})

2
「三分探索」は、実際の区間で単峰関数を最適化するアルゴリズムの適切な用語ですか?
実際の区間で定義された単峰関数を最適化したいとします。Wikipediaでternary searchという名前で説明されている有名なアルゴリズムを使用できます。 間隔を繰り返し半分にするアルゴリズムの場合、二分探索という用語を離散問題用に予約し、それ以外の場合は二分法という用語を使用するのが一般的です。この慣例を外挿すると、三分割法という用語が私の問題を解決するアルゴリズムに適用されるのではないかと思います。 私の質問は、アルゴリズムが継続的な問題に適用される場合でも、三元検索という用語を適用することは、学者の間で一般的であり、たとえば上級論文で使用しても安全かどうかです。これには信頼できる情報源が必要です。三分割法という用語が実際に存在するかどうかにも興味があります。

3
ランダムアクセスメモリの下限?
ここに私をうんざりさせているおそらく素朴な質問があります:任意に大きなメモリをランダムにアドレス指定するための漸近的下限はありますか?私の信念の原因は、物理的に保存されたメモリへの最短経路は3次元空間を経由する必要があり、ここの対角線は最小限の長さでなければならないということです。Ω (n−−√3)Ω(ん3)\Omega(\sqrt[3]{n}) たとえば、任意の数の要素を並べ替える場合、これらの要素をアドレス指定すると、最終的には距離に比例するコストがかかります。また、空間内のすべての単一点間に高速ケーブルがある場合でも、幾何学的制限があるように見えますより高い。Ω (n lgn)Ω(んlg⁡ん)\Omega(n \lg n) 私の議論の何が問題になっていますか?

2
単純なグラフ正規化アルゴリズム
与えられた色付きのグラフに標準的な文字列を提供するアルゴリズムを探しています。つまり。グラフの文字列を返すアルゴリズム。2つのグラフが同型の場合にのみ、同じ文字列を取得します。 特に、ほとんどのグラフ(もちろん、最悪の場合は超多項式)で妥当なパフォーマンスを発揮し、簡単に実装できる単純なアルゴリズムを探しています。小さなグラフを期待しているので、パフォーマンスは優れている必要はありません。 残念ながら、私が見つけたほとんどのものは非常に複雑であり、単純にアルゴリズムを説明するよりも、深い数学的なつながりを表現することに関心があります。そんなに深く潜る時間がないのではないでしょうか。誰かが私にショートカットを与えることはできますか? フロイドワーシャルアルゴリズムのようなものを期待しています。最適ではありませんが、十分に優れており、実装は簡単です。

3
アルゴリズムを開発して2和問題を解決するには?
整数の並べ替えられた配列があるとすると、合計がペアの数を見つけたいと思います。例えば、所与の{ - 3 、- 2 、0 、2 、3 、4 }、ゼロに対合計の数である2。000{ - 3 、- 2 、0 、2 、3 、4 }{−3,−2,0,2,3,4}\{-3,-2,0,2,3,4\}222 ましょ入力配列の要素の数です。バイナリ検索を使用して配列の要素の追加の逆を見つける場合、順序はO (log N )です。セット内のすべての要素をトラバースする場合、順序はO (N log N )です。NNNO (ログN)O(log⁡N)O(\log N)O (NログN)O(Nlog⁡N)O(N\log N) 次数アルゴリズムを見つける方法は?O (N)O(N)O(N)

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