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

グラフ、エッジで接続されたノードの離散構造に関する質問。人気のフレーバーは、エッジキャパシティを持つツリーとネットワークです。

2
ピアグレーディングデザイン-グラフを選択して、正確なランキング/レーティングを取得
バックグラウンド。グレーディングプロセスの一部としてピアグレーディングを使用して、半自動グレーディングのコードを書いています。生徒には一度に2組のエッセイが与えられ、生徒はスライダーを使用してどちらが優れているか、どれほど優れているかを選択できます。たとえば、スライダーは次のようになります。 A---X-B ピアグレーディングの結果に基づいて、エッセイがランク付けされ、教師が上位X%と下位X%を評価し、すべてのエッセイのスコアがこれに基づいて自動的に計算されます。このランキング/スコアリングプロセスを実行する方法はすでに考え出されています。その部分はうまくいきます。 私の質問。生徒に与えるエッセイのペアをどのように選択すればよいですか? シミュレーションでは、正確なランキングを取得するには、エッセイを少なくとも3回成績評価する必要があることが示唆されています。したがって、各エッセイは、ピアグレーディング用に提示されるペアのうち少なくとも3つに表示されます。 これはグラフの問題と考えることができます。エッセイをノードと考えてください。各エッジは、ピアのグレーディングプロセス中に提示されるエッセイのペアを表します。上記の精度結果は、各ノード(またはほとんどのノード)の次数が少なくとも3であることを示唆しています。どのようなグラフを使用する必要がありますか?ピアグレーディング中に使用するグラフをどのように生成する必要がありますか? 1つの課題は、グラフにクラスターがある場合、これによりピアグレーディングが歪むことです。たとえば、ピアグレーディングの結果が歪むため、高品質のエッセイに対してピアグレーディングを行うことは望ましくありません。 あなたは何をお勧めします? この問題は、次のようなものを使用した無向グラフでモデル化できると思います。 次数が最も低いノードを取得して、次に少ないノードとリンクします あなたの平均学位が少なくとも3になるまで続けます ノード接続を最大化 クリークの数を最小限に抑える これは良いアプローチですか?そうでない場合、代わりに何をお勧めしますか?


1
中国の郵便配達員の問題:奇数次ノード間の最良の接続を見つける
私はプログラムを書いて、無向ドラフで中国の郵便配達員問題(ルートインスペクション問題とも呼ばれます)を解決し、現在、奇数のノードを接続するための最適な追加エッジを見つけるために問題に直面しているため、オイラー回路を計算できます。 (解決したいグラフのサイズを考えると)計算して評価する必要のあるエッジの膨大な組み合わせがあるかもしれません。 例として、奇数次ノードます。最適な組み合わせは次のとおりです。A,B,C,D,E,F,G,HA,B,C,D,E,F,G,HA, B, C, D, E, F, G, H 、 C D、 E F、 G HABABABCDCDCDEFEFEFGHGHGH 、 B D、 E H、 F GACACACBDBDBDEHEHEHFGFGFG 、 B C、 E G、 F HADADADBCBCBCEGEGEGFHFHFH ....AEAEAE ABABABAAABBB したがって、私の質問は次のとおりです。その問題を純粋な総当たりよりも複雑に解決する既知のアルゴリズムはありますか(それらすべてを計算して評価します)? €:いくつかの調査の結果、「エドモンズの最小長マッチングアルゴリズム」について話しているこの記事を見つけましたが、このアルゴリズムの疑似コードや学習者記述は見つかりません(または少なくともGoogleとして認識していません) J. Edmondsによる一致アルゴリズムのヒット数が多い)


3
最長経路問題に最適な部分構造がない理由は何ですか?
私が最も長いパスについて学習し、問題が最適なサブ構造を欠いていたため、一般的なグラフで最長のパスは動的計画法によって解くことができないという事実に出くわしました(私は文が最長に修正する必要があると思われた簡単な一般的なグラフにパスされていない解けることにより、動的プログラミング)。 それらが単純である必要があると想定する場合(何らかの理由でこれは必要ですが、まだ理解していません)最長であれば、反例を作成するのは簡単です。4つのノードA→B→C→D→Aを持つ正方形グラフを考えてみます。 AからDへの最長パスは、明らかにA→B→CDです。ただし、BからCへの最長パスはB→A→D→Cであり、パスB→C(これは、この場合、実際には最短経路です!)。 これは、パスを単純にする必要があるためにのみ機能するようです。最適な部分構造が存在しないことを証明するために、パスは単純である必要があると想定する必要がありますか? 私は反例が良い証拠/証拠であるはずだと思います(私はそれを否定しません)、私は反例が非常に啓発的であるとまったく思いません。なぜそれが最適な部分構造を許可しないという点を証明するのかはわかりますが、最長経路の最適部分構造がないはずであることが明らかである理由を実際に理解または直感することができません。たとえば、切り取りと貼り付けの引数が機能しないのはなぜですか?サブパスが最も長くない場合は、より長いパスをそのまま使用してください。それはとても魅力的に聞こえます、つまり、私たちがより長いものを配置した場合、もちろんそれは長くなるはずです...しかし、これは何らかの理由で間違っています。この例は実際にDPが決してできないことを実際に証明していますか最長(シンプル?)パスを効率的に解決しますか?私はそれがPにないという一般的な証明を要求しません(それはP対NPソリューションを求めている可能性があるため)。私はちょうどそれその証拠の後だ解くことができないDPによって(またはDPは、この最長経路問題を解決することはできないというか、問題がないことを、少なくとも非常に強力な証拠ではない最適なサブ構造を持っています)。 私はウィキペディアで問題がNP-Hardであることを明確に見てきました。つまり、おそらく高速なアルゴリズムはありません。それが、最適な部分構造に明らかに欠けているべき証拠を提供するために存在する証拠/直感の唯一のタイプであるかどうか(または欠けていない場合、問題をより速くするために使用できないこと)はわかりません。それが高速の動的プログラムで解決できないことを示す唯一の方法ですか? シンプルが必要な理由です私たちがその要件を設けない場合、問題は些細な/興味のないものになるのですか?言い換えると、サイクルがある場合、そのサイクルから到達可能なすべてのノードへの最長パスの問題が(そのサイクルへのパスを見つけることによって)解決されています。到達可能なサイクルがないノードの場合、非循環グラフがあり、これはDPで解決できます(重みが正の場合)。さらに、サイクルがある場合は、自動的に物事が最適な部分構造を持つようになりました(私はそう思います)。最長パスは、2つのケースをカバーする最長パスで構成されているためです。どちらにも最適な部分構造が含まれています。だから、問題は単純なパスを必要とせずに取るに足らないものになったのですか?または、何か不足しているのですか、それとも単純なパスが必要なのかについてのより良い説明がありますか?しない一般的な最長パスは DPで解決できますか? また、DPを使用できないことを保証するために必要な要件は100%わかりません。負のエッジの重み、正の、重み付けされていない、有向、無向である必要がありますか?要件は何ですか?

2
独立セットとセットパッキングの同等性
ウィキペディアによると、独立集合問題は集合パッキングの特殊なケースです問題の。しかし、これらの問題は同等であるように私には思えます。 独立集合探索問題がある:グラフ所与G(V,E)G(V,E)G(V,E)及び整数nnn、検索nnn隣接しない2つがの頂点。 セットのパッキング探索問題がされて:有限コレクション与えられたの有限集合の整数、見つけるCCCnnnnnn対毎の互いに素であるセット。 次の双方向の削減に基づいて、それらは同等であると思います。 →:グラフ上の独立した集合問題を考えて、集合ののコレクションを作成します。各頂点に対して、隣接するすべてのエッジを含む集合があります。ここで、すべてのパッキングセットは、2つの頂点が共通していない頂点のセットに対応します。つまり、これはの同じサイズの独立したセットです。G(V,E)G(V,E)G(V,E)CCCv∈Vv∈Vv \in VSv∈CSv∈CS_v \in CvvvCCCGGG ←:コレクションセットパッキング問題をとして、すべてのセットに頂点があり、と間にエッジがあるグラフ作成します。セットと交差する場合、。ここで、すべての独立した頂点セットは、2つが交差しないセットのセットに対応します。つまり、これは同じサイズののセットパッキングです。CCCG(V,E)G(V,E)G(V,E)S∈CS∈CS \in CvS∈VvS∈Vv_S \in VvS1vS1v_{S_1}vS2vS2v_{S_2}S1S1S_1S2S2S_2GGGCCCCCC 私の質問は、私の削減は正しいですか?もしそうなら、これらの問題は同等ですか?ある問題に対して他の問題に対して近似アルゴリズムを使用することは可能ですか?

2
A *グラフ検索時間の複雑さ
時間の複雑さとA *に関する混乱。 A * Wikiによると 、時間の複雑さは解の深さで指数関数的です(最短経路): A *の時間の複雑さはヒューリスティックに依存します。無制限の探索空間の最悪の場合、展開されたノードの数は、解の深さ(最短経路)dで指数関数になります。O (bd)O(bd)O(b^d)、 どこ bbb 分岐因数(州ごとの平均の後継者数)です。 この受け入れられた回答へのコメントは、グラフのサイズの観点から複雑さを与える方が理にかなっていることを指摘しているため、O ((| V| + | E| )⋅LOG| V| )O((|V|+|E|)⋅log|V|)O((|V| + |E|) \cdot log |V|) 明らかに、ヒューリスティックがすべてのノードに0の値を割り当てる場合、A *はダイクストラのアルゴリズムになり、均一コストのヒューリスティックは本質的にヒューリスティックを無効にします。 ヒューリスティックを O (1 )O(1)O(1) (そして一貫性のある)、最悪のケースは本質的にA *を複雑度のあるダイクストラのアルゴリズムに劣化させていることは理にかなっています O (| E| + | V| ログ| V| )O(|E|+|V|log⁡|V|)O(|E|+|V|\log|V|) 最小優先度のキューの実装(フィボナッチヒープ)。 私が間違っている? 私がこれまで見てきた本などは、ソリューションの深さに関して複雑さを与えます

3
すべてのエッジの重みが等しい場合、BFSを使用して最小のスパニングツリーを取得できますか?
グラフのすべてのエッジが与えられた場合 GGG 等しい重量です ccc、線形時間で最小のスパニングツリーを生成するために、幅優先検索(BFS)を使用できますか? BFSはノードを2回訪問せず、頂点からトラバースするだけなので、直感的にこれは正しいように聞こえます vvv 頂点へ あなたuu 訪れたことがない場合 あなたuu 以前は、サイクルが発生しないように、 GGG接続されている場合、最終的にすべてのノードにアクセスします。すべてのエッジの重みは等しいため、BFSが選択したエッジは関係ありません。 私の推論は意味がありますか?

5
有限状態オートマトン:最終状態
私たちのプログラミング言語の概念コースでは、最終状態が有限状態図の別の状態につながることは問題ないと私たちの講師は主張しました。 しかし、これは根本的に矛盾した概念のようです。定義により、最終状態は遷移を終了する状態です。つまり、最終状態に到達すると、他に何もする必要がなくなります。 それでも、彼はこのようなスライドを提示しました。最終状態は2つの円で表されています... B、D、E、およびHが明らかにそうでない場合に、最終状態になることができるのはなぜですか。

1
から
定義。グラフと2つの頂点sおよびtが与えられた場合、k -shortest-paths問題は、G のsとtの間のk最短単純パスを見つけることです。G = (V、E)G=(V,E)G=(V,E)ssstttkkkkkkssstttGGG これらのパスの長さは必ずしも同じである必要はなく、頂点とtは必ずk接続されていることに注意してください。この問題に対して線形時間(nおよびmの観点から)アルゴリズムがあるかどうか疑問に思っていました。ssstttkkkんnnメートルmm 「円のランキングループレスパスアルゴリズムの新しい実装」など、私は文献でいくつかの論文を見てきましたが、時間の複雑さは本当に高いです。また、Epsteinによる他の論文「K最短パスを見つける」では、実行時間O (n + m + k )の単純なパスではないk最短パスを見つけるアルゴリズムを示しています。O (Kn (m + n l o gn ))O(Kn(m+nlogn))O(Kn(m+nlogn))kkkO (n + m + k )O(n+m+k)O(n+m+k) -simple-shortest-paths問題の線形時間アルゴリズムはありますか?kkk

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)

1
並行して最大独立セットを見つける
グラフで、次のプロセスを実行します。G (V、E)G(V,E)G(V,E) 最初、すべてのノードは色付けされていません。VVV には色付けされていないノードがありますが、色付けされていない各ノードは次のことを行います。 VVV ランダムな実数を選択し、それを近隣のすべてに送信します。 その数を近隣の数と比較します。自分の数が厳密に最小の場合、隣人は自分自身を赤く塗りつぶし、隣人に通知します。 隣人が赤くなった場合、このノードは自分自身を黒く塗ります。 例えば: グラフがabcdeというパスであるとします。 最初のステップの数値が次のとおりであるとします:1-2-0-3-4。 ノードaとcは赤く塗られています。ノードbとdは黒く塗られています。 2番目のステップでは、ノードeのみが未着色のままです。最小限に抑えられているため、赤く塗りつぶされます。 私の質問は:すべてのノードが色付けされる前にこのプロセスが実行する平均ステップ数は何ですか? 私の現在の計算では、推定が導かれますが、これは真実であるにはあまりにも良すぎるようです。ここに計算があります:O (1 )O(1)O(1) d個の隣接ノードを持つノードを考えます。vがその近傍の中で最小になる確率は、1 /(d + 1 )です。これが発生した場合、vとそのすべての近傍が色付けされます。したがって、各ステップで色分けされる頂点の予想数は、(d + 1 )/(d + 1 )= 1ノードあたり1です。したがって、各ステップで色分けされる頂点の予想される総数はO (n )なので、O (1vvvdddvvv1 /(d+ 1 )1/(d+1)1/(d+1)vvv(d+1)/(d+1)=1(d+1)/(d+1)=1(d+1)/(d+1)=1 O(n)O(n)O(n)すべてのノードが色付けされる時間。O(1)O(1)O(1) この分析が間違っている場合(おそらくそうです)、実際のステップ数はいくつですか? 編集:@JukkaSuomelaによって指摘されているように、上記のアルゴリズムはMetivier et al、2011によるものであり、これらの講義ノートで説明および分析されています。彼らは、実行時間がことを証明します。O(logn)O(log⁡n)O(\log n) しかし、私はまだこの分析がタイトであると確信していません。チェックしたすべてのグラフで、アルゴリズムは予想時間内に完了したようです。O(1)O(1)O(1) 私の質問は今です:このアルゴリズムが実際に平均でステップを必要とする最悪の場合のグラフは何ですか?O(logn)O(log⁡n)O(\log n)

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})

3
順序付けで他の2つの要素の「間に」要素を挿入できる効率的な順序付けを維持していますか?
次のような要素の束に注文があると想像してください: 矢印は意味します。また、推移的です:。X←YX←YX \leftarrow YX&lt;YX&lt;YX < Y(X&lt;Y)∧(Y&lt;Z)⟹(X&lt;Z)(X&lt;Y)∧(Y&lt;Z)⟹(X&lt;Z)\left(X < Y\right) \wedge \left(Y < Z\right) \implies \left(X < Z\right) ようなクエリに効率的に応答するには、何らかのラベル付けまたはデータ構造が必要です。たとえば、左から右へのノードに番号を付けることができ、従って、単にクエリに答えるために比較整数行うことができます:{}?A \ stackrel {&lt;} D \ 1 &lt;4を意味\ Tを暗示。次のようになります。A&lt;?DA&lt;?DA \stackrel {?}{<} DA&lt;?D⟹1&lt;4⟹TA&lt;?D⟹1&lt;4⟹TA \stackrel {?}{<} D \implies 1 < 4 \implies T 番号は順序であり、文字は単なる名前です。 しかし、次のように、順序付けで他の2つの要素の「間に」要素を挿入する必要がある場合はどうでしょう。 どのようにしてそのような順序を維持できますか?単純な番号付けでは、使用する整数の間に「2,3」がないという問題に遭遇2,32,32,3します。

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