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

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

2
数値積分とカウントルート
2つの異なる方法で表示できる問題があります。 を計算する んんn次元積分、数値コンテキスト。統合のドメインはんんn側面の三次元ハイパーキューブ LLL。 の根を数える(数えるだけ) んんn次元関数(多項式ではない)。 元の問題を解決するには、そのうちの1つを解決するだけで十分です。数値積分の単純なアルゴリズムにはO (Lん)O(Lん)O(L^n)、次元ごとに線形時間を取る。しかし、(1)に対して漸近的に高速なアルゴリズムがあるかどうかはわかりません。 (2)については、根を見つけることができるアルゴリズム(ニュートンと二分法)を知っていますが、非多項式にある根の数を数えるだけの最良のアルゴリズムについてはわかりません んんn次元関数。 (2)に最適なアルゴリズムは何ですか?(1)の最速よりも優れていますか?

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, \ …

1
グラフの最も一般的な祖先の類似アルゴリズム
私は型システムに取り組んでいて、最も低い共通の祖先に似ているように見える問題を見つけました。2つのタイプがある場合、同じターゲットタイプになる変換の最小シーケンスを見つける必要があります。単純なタイプツリーがある場合、結果を取得する方法はわかっていますが、残念ながら、もう少し複雑なグラフ構造があります。 そのグラフにはいくつかの重要なポイントがあります。これは単方向であり、ループは形成されません。タイプの数に制限がないため、静的に作成することはできません。パスの距離は一般的に非常に短いです。それは、多くのショートカットエッジを持つツリーのように「感じ」ます。 最初は最低の共通祖先を調べましたが、それは主にツリーアルゴリズムとして記述されています。私はそれを適応させることができるという希望をまだあきらめていません。他の可能性は、より一般的な経路探索アルゴリズムです。 私は誰かが以前にこの問題、または同様の問題を見たことがあることを願っています。何かが存在している必要があると思い込み、間違った用語/名前を検索しているだけであることは十分によく知られているようです。 これをより正式に説明するための私の試みは次のとおりです。 グラフがあり、各頂点に1組の出力エッジます。グラフは動的で、場合によっては無限なので、グラフ全体に対してG = \ {V、E =(V_x、V_y)\}の形式を作成する方法はありません。G = { V}G={V}G = \{ V \}V= { E=Vバツ}V={E=Vx}V = \{ E=V_x \}G = { V、E= (Vバツ、Vy)}G={V、E=(Vバツ、Vy)}G = \{V, E=(V_x,V_y)\} パスは、そのノードから利用可能なエッジのいずれかをたどることにより、頂点から形成されます。。このパスの長さは、シーケンス内の頂点の数と同じです。可能なサイクルはありません。2つのノード間のすべてのパスのセットは、として表されます。Pんメートルバツ=Vん、。。。、VメートルPんメートルバツ=Vん、。。。、VメートルPnm_x = V_n, ..., V_mPn m = {Vん、。。。、Vメートル}Pんメートル={Vん、。。。、Vメートル}Pnm = \{ V_n, ..., V_m \} は有限のステップ数で空であると判断できることに注意してください。セット全体を列挙することは実際には不可能です。Pn mPんメートルPnmPn mPんメートルPnm 問題は、2つの頂点から3番目の頂点への最短経路を見つけることです。すなわち、所与の、ある見つけるパスするようと存在し、最小です。Va、VbVa、VbV_a, V_bVcVcV_cPacバツPacバツPac_xPbcyPbcyPbc_yl e …

1
有向グラフの最大独立セットを見つける方法は?
私はこの問題を解決しようとしています。 問題:与えられたnnn 正の整数、あなたの仕事は2つの数がないように整数の最大数を選択することです a,ba,ba, b その中で aaa で割り切れる bbb。 最大独立セットとこのセットのサイズを見つける必要があります。サイズは、ケーニッヒの定理によって見つけることができます。しかし、どのようにして最大独立セットを見つけることができますか(つまり、どの頂点がセットの一部であるか)。 私もいくつか検索をして、ここで何かを見つけました: If removing a vertex does not change minimum path cover then I can get the desired result without that vertex. しかし、私は根本的な定理を理解していません。どんな助けも大いに役立ちます。

2
弱くて強い完全性
疑似多項式アルゴリズムは、それが解決する問題について何を教えてくれますか?アルゴリズムが入力長で指数関数的で、入力値で多項式である場合、実行時間がどのように改善されるかわかりません。それでは、この指数関数から多項式へのシフトをどのように説明しますか?

2
時間内にサフィックス配列を構築するアルゴリズム
最近、suffix配列を使用していて、理解しやすいsuffix配列を作成するための効率的なアルゴリズムを見つけることができません。多くのサイトでアルゴリズムがあることを見てきましたが、多くの重要な詳細が省略されているため、理解できません。Top Coderに例があります。O(nlog2n)O(nlog2⁡n)O(n \log^2 n) 誰かが私に理解しやすいサフィックス配列構築のための効率的なアルゴリズムを紹介してくれませんか?

1
特定のプロパティを使用したグラフ生成のアルゴリズム
いくつかの一般的なプロパティ(たとえば、クラスタリング係数、平均最短経路長、次数分布など)を満たすグラフを生成するために提案された多数のアルゴリズムが存在する場合があります。 私の質問は特定のケースに関するものです。異なるクラスタリング係数と平均最短パス長を使用して、いくつかの無向の通常のグラフ(つまり、これらのグラフのすべてのノードが同じ数の隣接ノードを持っている)を生成したいと思います。より一般的には、次数の分布を修正することで、異なるクラスタリング係数と平均最短経路長を持つグラフを生成したいと思います。 これを行うためのよく知られたアルゴリズムは何ですか(または実際に何かありますか?)、同じ目的で推奨されるソフトウェアは何ですか?


1
ログスペースで2つのログスペースプログラムの連結をシミュレートする
私は2つの対数空間プログラムとを持っています。FFFGGG プログラムは配列入力を取得し、出力配列を作成します。FFFA[1..n]A[1..n]A[1..n]B[1..n]B[1..n]B[1..n] プログラムは、によって作成された入力として取得し、そこから出力配列を作成します。GGGBBBFFFC[1..n]C[1..n]C[1..n] 入力配列を取得し、それに対応する配列を作成するログスペースプログラムが存在することの証明を作成する必要があります。しかし、私はそれを書く正しい方法を見つけることができません。これはどのように行われますか?HHHAAACCC ログスペースプログラムは、ビットのメモリを使用するプログラムです。守らなければならないいくつかの条件を次に示します。O(logn)O(log⁡n)O(\log n) 単純な整数型の変数のみを使用する必要があります(intC ++、longintPascalなど)。 整数の許容範囲が定義されていますが入力のサイズである場合、変数に保存できるのは、基づいてポリモニアルサイズの値のみです。nnnnnn 例えば:私たちは、缶がで値を取る変数持つことができます、またはも値「、しかし、我々はできます値を取る変数があります。他のタイプの変数、および配列と反復子は許可されていません。[−n...n][−n...n][-n...n][−3n5...3n5][−3n5...3n5][-3n^5...3n^5][−4...7][−4...7][-4...7][0...2n][0...2n][ 0...2^n] ルールに関する例外は入力と出力です。入力は、プログラムが読み取ることができる特殊変数(主に配列)で使用でき、出力は他の特殊変数にのみ書き込むことができます。したがって、出力から読み取ったり、入力変数の値を増やしたりすることはできません。 プログラムは再帰を使用できません。 Pascalで書かれた対数空間プログラムの例(誰もが理解できるようにするため)で、整数の配列で最大の数を見つける var n: integer; //input variable the number of elements in A A: array [1..n] of integer; //input variable - the array of integers m: integer; // output variable, the position of maximum i, j: integer; //working …

1
レベンシュタイン距離と動的タイムワープ
ワグナー・フィッシャーアルゴリズムとdtwアルゴの間をどのように平行に描くかわかりません。どちらの場合も、各インデックスの組み合わせ(i、j)の距離を求めます。 ワーグナーフィッシャーでは、空の文字列から別の文字列への挿入回数によって距離を開始します。 let wagnerFischer (s: string) (t: string) = let m, n = s.Length, t.Length let d = Array2D.create (m + 1) (n + 1) 0 for i = 0 to m do d.[i, 0] <- i for j = 0 to n do d.[0, j] <- j for j …

1
ばらばらのセットのデータ構造の実用的なアプリケーション
エッジがグラフに動的に追加されるとき、素集合のデータ構造が無向グラフの接続されたコンポーネントを追跡するために使用されることを知っています。また、それがクラスカルの最小全域木アルゴリズムで使用されていることも知っています。このデータ構造の他の可能なアプリケーションは何ですか?

2
関係構成を計算する
定義:を自己ループのないDAGとし、およびをグラフとします。G=(V,E)G=(V,E)G=(V,E)X⊆GX⊆GX \subseteq GY⊆GY⊆GY \subseteq G 入力:。出力:リレーショナル構成リレーショナル構成 in。X,YX,YX,Y X∘YX∘YX \circ YO( | E| | V| )O(|E||V|)\mathcal{O}(|E||V|) ケース1:。およびに対する2つのforループ:ランタイム。|E|≤|V||E|≤|V||E| \le |V|E(X)E(X)E(X)E(Y)E(Y)E(Y)≤O(|E|2)≤O(|E||V|)≤O(|E|2)≤O(|E||V|) \le \mathcal{O}(|E|^2) \le \mathcal{O}(|E||V|) ケース2:|V|≤|E||V|≤|E||V| \le |E| グラフを描く:(。エッジをから黒、赤と呼びます。(V(G),E(X)∪E(Y))(V(G),E(X)∪E(Y))(V(G),E(X) \cup E(Y))(O(|V|)+O(|2E|)))(O(|V|)+O(|2E|)))(O(|V|)+\mathcal{O}(|2E|)))E(X)E(X)E(X)E(Y)E(Y)E(Y) トポロジカルにソートします(Kahn:)。最初のレベルをにすると、エッジはレベルから高いレベルに移動します。O(|V|)+O(|E|)O(|V|)+O(|E|)\mathcal{O}(|V|) + \mathcal{O}(|E|)000 このグラフを2回描画します。 最初のコピーで、偶数レベルで始まるすべての赤いエッジと奇数レベルで始まるすべての黒いエッジを削除します:。O(E)O(E)\mathcal{O}(E) 2番目のコピーでは、「黒の偶数」と「赤の奇数」をすべて削除します:。O(E)O(E)\mathcal{O}(E) 最初のコピーの場合: レベルすべてのノードuuu2i2i2i レベルすべてのノードvvv2i+12i+12i+1 レポートエッジ(実行時)。(u,v)(u,v)(u,v)O(V2)≤O(EV)O(V2)≤O(EV)\mathcal{O}(V^2) \le \mathcal{O}(EV) 2番目のコピーの場合: " " についても同じです。2i+12i+12i+1 報告されたノードを結合し、重複する を破棄します(グラフ表現でこれが可能であることを願っています)。O(V2)&lt;=O(EV)O(V2)&lt;=O(EV)\mathcal{O}(V^2) <= \mathcal{O}(EV) いくつかの人が私のアルゴリズムを調べて、 合ってます …


1
抽象構文ツリーを指数関数未満の時間で解析できませんか?
問題の抽象的な説明 私の見たところ、解析解除とは、ASTからトークンストリームを作成することを意味し、再度解析すると、等しいASTが生成される、つまりparse(unparse(AST)) = AST保持されるはずです。 これは、同じASTを生成する有効な解析ツリーを見つけることと同じです。 言語は、eBNFバリアントを使用した、コンテキストフリーのS属性の文法で記述されます。 したがって、アンパーサーは、すべての文法制約が保持されている通過ノードを通過する有効な「パス」を見つける必要があります。これは基本的に、文法生成規則へのASTノードの有効な割り当てを見つけることを意味します。これは一般に制約充足問題(CSP)であり、バックトラックすることにより、解析と同様に解決できます。O (eん)O(eん)O(e^n) 幸いなことに、構文解析では、GLRを使用してでこれを行うことができます(またはより適切に文法を制限します)。AST構造は文法生成規則構造に非常に近いので、実行時間が解析よりも悪い実装を見て本当に驚きました。XTextは解析にANTLRを使用し、解析解除にバックトラックを使用しています。O (ん3)O(ん3)O(n^3) ご質問 コンテキストフリーのS属性文法は、パーサーとアンパーサーが共有する必要があるすべてのものですか、それとも、たとえば、解析手法/パーサーの実装に制約がありますか? この問題は一般的にではないと感じています-天才がこれを手伝ってくれるでしょうか?O (eん)O(eん)O(e^n) StackOverflowでこの質問に対する回答を受け取りませんでした。ここで質問することを提案されましたが、私は冗長性が嫌いなので、ここで回答するように頼むことを許してくれるといいのですが。

1
セットパッキングと同様の問題
セットのファミリーに電話する F={S1,…,Sk}F={S1,…,Sk}\mathcal{F} = \{S_1, \dotsc, S_k\} 各セットの場合「多様」 Si∈FSi∈FS_i \in \mathcal{F}少なくとも1つの一意の要素があります。最大の多様なセットを見つけるための可能なアプローチは何ですかSSS セットの家族で FF\mathcal{F}? 1つのアプローチは、変更されたセットパッキング問題を解決することです。と思いますF={S1,…,Sk}F={S1,…,Sk}\mathcal{F}=\{S_1,\dotsc,S_k\}。しましょうKKK 要素のサブセットである K⊂⋃SiK⊂⋃SiK \subset \bigcup S_i、そして F−K={S1∖K,…,Sk∖K}F−K={S1∖K,…,Sk∖K}\mathcal{F}_{-K}=\{S_1 \setminus K,\dotsc, S_k \setminus K\}。次に、最大多様セットSSS から得られる最大の最大集合パッキングに対応 F−LF−L\mathcal{F}_{-L} どこ LLL のすべての非固有要素のセットです FF\mathcal{F}。 しかし、選択するための良いヒューリスティックは何ですか KKK?それとも、より良いアプローチがありますか?

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