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

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

5
重み付きグラフで、エッジの重みとしてゼロを使用できますか?
ランダムグラフを生成するスクリプトを作成しようとしていますが、重み付きグラフのエッジが0の値を持つ可能性があるかどうかを知る必要があります。 実際、0をエッジの重みとして使用できることは理にかなっていますが、ここ数日でグラフを操作しており、その例を見たことはありません。

3
トラバーサルが1つだけの無向ツリーの最長パス
2つの深さ優先検索を使用して、無向木で最長パスを見つけるためのこの標準アルゴリズムがあります。 ランダムな頂点からDFSを開始し、そこから最も遠い頂点を見つけます。それがv ′だと言う。vvvv′v′v' 次に、からDFSを開始して、最も遠い頂点を見つけます。このパスは、グラフ内で最も長いパスです。v′v′v' 問題は、これをより効率的に行えるかどうかです。単一のDFSまたはBFSでそれを行うことはできますか? (これは、無向木の直径を計算する問題と同等に説明できます。)

1
キューをBFS実装のスタックに変更すると、DFSを取得できますか?
次に、幅優先検索の標準的な擬似コードを示します。 { seen(x) is false for all x at this point } push(q, x0) seen(x0) := true while (!empty(q)) x := pop(q) visit(x) for each y reachable from x by one edge if not seen(y) push(q, y) seen(y) := true ここpushでpopは、キュー操作であると想定されています。しかし、スタック操作の場合はどうでしょうか?結果のアルゴリズムは、深さ優先順で頂点を訪問しますか? 「これは取るに足らない」というコメントに投票した場合、なぜそれが取るに​​足らないのかを説明してください。この問題は非常に注意が必要です。

3
より単純なパスの数発見アルゴリズム
G=(V,E)G=(V,E)G=(V,E)ssstttssstttGGGtttP ⇝ Z V P S R Y のV V S 、R 、Y 、VのP O Vs⇝ts⇝ts \rightsquigarrow tこれが他のパスのサブパスである場合、DFSもこのサブパスを再度通過します。たとえば、からまでのパスの数を見つける必要がある隣接リストを考えます。 ここで、DFSはで始まり、 DFSが正常に実行されないため、ます。 pathは。これはに遭遇するため、頂点色を灰色に変更しないためです。pppvvv posryvzworryvwzsszvposzorsvsrryyvvwzwz\begin{array}{|c|c c c|} \hline p &o &s &z \\ \hline o &r &s &v\\ \hline s &r \\ \hline r &y \\ \hline y &v \\ \hline v &w …

4
特定のサイズのすべての非同型グラフを列挙する
サイズすべての無向グラフを列挙したいのですが、各同型クラスのインスタンスが1つだけ必要です。言い換えると、個の頂点上のすべての非同型(無向)グラフを列挙したいのです。これどうやってするの?nnnnnnn より正確には、次のプロパティを持つ一連の無向グラフを生成するアルゴリズムが必要です:個の頂点上の無向グラフごとに、がと同型であるようなインデックスが存在します。アルゴリズムが可能な限り効率的であることを望みます。言い換えれば、私が気にするメトリックは、このグラフのリストを生成して反復する実行時間です。第二の目標は、アルゴリズムが実装するのに複雑すぎないのが良いことです。G1,G2,…,GkG1,G2,…,GkG_1,G_2,\dots,G_kGGGnnniiiGGGGiGiG_i 各同型クラスから少なくとも1つのグラフが必要であることに注意してください。ただし、アルゴリズムが複数のインスタンスを生成する場合は問題ありません。特に、すべての可能なグラフをカバーしている限り、出力シーケンスに2つの同形グラフが含まれていれば、そのようなアルゴリズムを見つけやすくしたり、より効率的なアルゴリズムを有効にしたりすることができます。 私のアプリケーションは次のとおりです。サイズすべてのグラフでテストしたいプログラムがあります。2つのグラフが同型である場合、私のプログラムは両方で同じ動作をすることを知っています(両方で正しいか、両方で間違っています)ので、各同型クラスから少なくとも1つの代表を列挙し、次にテストするだけで十分ですそれらの入力に関するプログラム。私のアプリケーションでは、はかなり小さいです。nnnnnnn 私が検討したいくつかの候補アルゴリズム: 考えられるすべての隣接行列、つまり、対角線上にすべて0がある対称 0-or-1行列をすべて列挙できます。ただし、これには行列の列挙が必要です。これらの行列の多くは同型グラフを表すため、これは多くの労力を浪費しているようです。2 n (n − 1 )/ 2n×nn×nn\times n2n(n−1)/22n(n−1)/22^{n(n-1)/2} 考えられるすべての隣接行列を列挙し、それぞれについて、以前に出力したグラフのいずれかと同型かどうかをテストできました。以前に出力されたものと同型でない場合は、出力します。これにより、出力リストが大幅に短縮されますが、少なくともステップの計算が必要になります(グラフの同型チェックが超高速であると仮定した場合でも)。私のメトリック。2n(n−1)/22n(n−1)/22^{n(n-1)/2} 隣接行列のサブセットを列挙することは可能です。特に、が個の頂点グラフである、一般性を失うことなく、なるように頂点が配置されていると仮定できます。。言い換えれば、すべてのグラフは、頂点が非減少度の順に配置されているグラフと同型です。そのため、このプロパティを持つ隣接行列のみを列挙すれば十分です。そのような隣接行列がいくつあるのか正確にはわかりませんが、よりもはるかに少なく、GGGnnnV={v1,…,vn}V={v1,…,vn}V=\{v_1,\dots,v_n\}degv1≤degv2≤⋯≤degvndeg⁡v1≤deg⁡v2≤⋯≤deg⁡vn\deg v_1 \le \deg v_2 \le \cdots \le \deg v_n2n(n−1)/22n(n−1)/22^{n(n-1)/2}2n(n−1)/22n(n−1)/22^{n(n-1)/2}計算のステップ。ただし、これによって多くの冗長性が残ります。多くの同型クラスが何度もカバーされるため、これが最適であるとは思えません。 もっと良くできますか?正しく理解すれば、約非同型グラフの等価クラス。上記のアルゴリズムより実行時間が良いアルゴリズムを見つけることができますか?どれだけ近づくことができますか下限?私は主に小さな扱いやすさ(たとえば、または程度;そのようなアルゴリズムを完了までもっともらしく実行できるほど小さい)を気にし、大きな漸近性についてはあまり気にしません。2n(n−1)/2/n!2n(n−1)/2/n!2^{n(n-1)/2}/n!∼2n(n−1)/2/n!∼2n(n−1)/2/n!\sim 2^{n(n-1)/2}/n!nnnn=5n=5n=5n=8n=8n=8nnn 関連:等価でないバイナリ行列を構築します(残念ながら、有効な答えを受け取っていないようです)。

2
検索アルゴリズムをテストするためのグラフはどこで入手できますか?
ダイクストラ、深さ優先などの一連のパス検索アルゴリズムを実装しています。 最初はいくつかの自作グラフを使用していましたが、今はもう少し挑戦してみたいので、どちらかを探しています ベンチマークで使用されるグラフ。 現実世界の都市のグラフ(または、Googleマップ、または可能であれば他の種類のソースからそのような情報をダウンロードする方法)。 可能であれば、さまざまなサイズのグラフのセットに対してアルゴリズムを試すことができるように、それらのソースにフロンティアを簡単に作成または許可してもらいたいと思います。 私は主要な目標から転用されないようにシンプルなソリューションを探しています(異なるアルゴリズムのセットを比較します)。そのため、グラフデータを独自の形式(基本的には、接続された(x, y)ポイントのセット)。 具体的には、2D巡回グラフを探しています。それらのグラフが現実世界の都市通りを反映している場合(一方通行の通り、双方向の通りなどを考慮に入れて、さらに良い!)

2
特定のラダーが有効かどうかを効率的に判断する方法は?
私の地元のスカッシュクラブには、次のように機能するはしごがあります。 シーズンの初めに、クラブの各メンバーの名前を別々の行に並べた表を作成します。 次に、各名前の横に、勝ったゲームの数とプレイしたゲームの数を記入します(プレイヤーの勝ち/ゲームの形式で)。 したがって、シーズンの初めには、テーブルは次のようになります。 Carol 0/0 Billy 0/0 Alice 0/0 Daffyd 0/0 任意の2人のプレイヤーが試合をすることができ、1人のプレイヤーが勝ちます。テーブルの一番下に最も近いプレーヤーが勝った場合、プレーヤーの位置が切り替わります。その後、ステップ2を繰り返し、各プレイヤーの隣の勝ちとゲームの数を更新します。たとえば、アリスがビリーを破った場合、 Carol 0/0 Alice 1/1 Billy 0/1 Daffyd 0/0 これらの試合はシーズンを通して続き、最終的にはおおよその強さの順にリストされます。 残念ながら、更新はかなり偶然に行われるため、間違いが発生します。以下は無効なテーブルの例です。つまり、いくつかの開始順序(シーズンの初めに使用した順序を忘れてしまった)と一致と結果のシーケンスに対して上記の手順を正しく実行しても作成できなかったテーブルです。 Alice 0/1 Billy 1/1 Carol 0/1 Daffyd 0/0 Alice 2/3 Billy 0/1 Carol 0/0 Daffyd 0/0 Alice 1/1 Billy 0/2 Carol 2/2 Daffyd 0/1 テーブルが与えられた場合、それが有効かどうかをどのように効率的に判断できますか?以下に注意することから始めることができます。 元の開始順序を忘れているため、名前の順序は重要ではありません。 勝利の合計数は、プレイしたゲームの数の合計の半分でなければなりません。(これは、上記の最初の例が無効であることを示しています。) …

2
Cのvoid型がempty / bottom型と類似していないのはなぜですか?
ウィキペディアと私が見つけた他のソースはvoid、空のタイプではなくユニットタイプとしてリストCのタイプを見つけました。void空の/下の型の定義によりよく適合するように思えるので、この混乱を見つけます。 void私が知る限り、値は存在しません。 戻り値の型がvoidの関数は、関数が何も返さないため、何らかの副作用しか実行できないことを指定します。 タイプのポインターvoid*は、他のすべてのポインタータイプのサブタイプです。また、void*C との間の変換は暗黙的です。 最後の点voidに、空の型であることの引数としてのメリットがあるかどうかはわかりvoid*ませんvoid。 一方、voidそれ自体は他のすべてのタイプのサブタイプではありません。これは、タイプがボトムタイプであるための要件であると言えます。
28 type-theory  c  logic  modal-logic  coq  equality  coinduction  artificial-intelligence  computer-architecture  compilers  asymptotics  formal-languages  asymptotics  landau-notation  asymptotics  turing-machines  optimization  decision-problem  rice-theorem  algorithms  arithmetic  floating-point  automata  finite-automata  data-structures  search-trees  balanced-search-trees  complexity-theory  asymptotics  amortized-analysis  complexity-theory  graphs  np-complete  reductions  np-hard  algorithms  string-metrics  computability  artificial-intelligence  halting-problem  turing-machines  computation-models  graph-theory  terminology  complexity-theory  decision-problem  polynomial-time  algorithms  algorithm-analysis  optimization  runtime-analysis  loops  turing-machines  computation-models  recurrence-relation  master-theorem  complexity-theory  asymptotics  parallel-computing  landau-notation  terminology  optimization  decision-problem  complexity-theory  polynomial-time  counting  coding-theory  permutations  encoding-scheme  error-correcting-codes  machine-learning  natural-language-processing  algorithms  graphs  social-networks  network-analysis  relational-algebra  constraint-satisfaction  polymorphisms  algorithms  graphs  trees 

4
線形時間でスーパースターを見つける方法は?
有向グラフを検討してください。ノードから他のノードに到達できないが、他のすべてのノードにへのエッジがある場合にのみ、ノードスーパースターを呼び出します。正式に:vvvv vvv \qquad \displaystyle v superstar :⟺outdeg(v)=0∧indeg(v)=n−1 superstar :⟺outdeg(v)=0∧indeg(v)=n−1 \text{ superstar } :\Longleftrightarrow \mathrm{outdeg}(v) = 0 \land \mathrm{indeg}(v) = n-1 グラフ内のノードの数。たとえば、下のグラフでは、塗りつぶされていないノードはスーパースターです(他のノードはそうではありません)。nnn [ ソース ] 時間で有向グラフのすべてのスーパースターをどのように識別できますか?適切なグラフ表現は、通常の候補から選択できます。問題の複雑さを前処理に移す表現の使用は控えてください。O(n)O(n)\mathcal{O}(n) 密度に関する仮定はできません。グラフにスーパースターが含まれているとは想定していません。存在しない場合、アルゴリズムはそれを認識する必要があります。 表記法:はノードの発信エッジの数であり、は着信エッジでも同様です。、I 、N 、D 、E 、Goutdegoutdeg\mathrm{outdeg}indegindeg\mathrm{indeg}

7
BFS / DFSを使用して木の直径を見つけるアルゴリズム。なぜ機能するのですか?
このリンクは、BFS / DFSを使用して無向木の直径を見つけるためのアルゴリズムを提供します。要約: グラフ内のノードsでBFSを実行し、最後に検出されたノードuを記憶します。最後に検出されたノードvを思い出して、uからBFSを実行します。d(u、v)は木の直径です。 なぜ機能するのですか? このページ2には理由がありますが、混乱を招きます。証明の最初の部分を引用しています: グラフ内のノードsでBFSを実行し、最後に検出されたノードuを記憶します。最後に検出されたノードvを思い出して、uからBFSを実行します。d(u、v)は木の直径です。 正しさ:d(a、b)が木の直径になるように、aとbを2つのノードとします。aからbへの一意のパスがあります。tをBFSによって検出されたそのパス上の最初のノードとします。sからuへのパスとaからbへのがエッジを共有しない場合、tからuへのパスにはsが含まれます。そうp1p1p_1p2p2p_2 d(t,u)≥d(s,u)d(t,u)≥d(s,u)d(t,u) \ge d(s,u) d(t,u)≥d(s,a)d(t,u)≥d(s,a)d(t,u) \ge d(s,a) ....(さらに不等式が続きます..) 不平等は私には意味がありません。

6
単純なグラフの2つのスパニングツリーには、常にいくつかの共通エッジがありますか?
いくつかのケースを試してみましたが、単純なグラフの2つのスパニングツリーには共通のエッジがあることがわかりました。これまでのところ、反例は見つかりませんでした。しかし、私はこれを証明または反証することもできませんでした。この推測を証明または反証する方法は?

3
疎グラフのすべての最短パスを見つけるための最速のアルゴリズムは何ですか?
ような頂点とエッジを持つ重みのない無向グラフで、グラフ内のすべての最短経路を見つける最速の方法は何ですか?あるFloyd-Warshallよりも速く実行できますが、反復ごとに非常に高速ですか?E 2 V > E O (V 3)VVVEEE2V>E2V>E2V \gt EO(V3)O(V3)O(V^3) グラフが重み付けされている場合はどうですか?

3
動的グラフの最短経路を取得する
現在、有向グラフの最短経路を研究しています。ダイクストラやベルマンフォードのよ​​うに、ネットワーク内の最短経路を見つけるための多くの効率的なアルゴリズムがあります。しかし、グラフが動的な場合はどうでしょうか?動的とは、プログラムの実行中に頂点を挿入または削除できることを意味します。新しいグラフで最短経路アルゴリズムを再度実行する必要なく、エッジeを挿入した後、頂点から他のすべての頂点uへの最短経路を更新するための効率的なアルゴリズムを見つけようとしています。これどうやってするの?前もって感謝します。vvvあなたはuueee 注:変更は、アルゴリズムの最初の反復後に行うことができます 注[2]: 2つのノード、はソース、tはターゲットです。これらのノード間の最短パスを見つける必要があります。グラフが更新されたら、π (s 、t )を更新するだけです。これはsとtの間の最短経路です。ssstttπ(s 、t )π(s,t)\pi(s,t)sssttt 注[3]:エッジ挿入の場合にのみ興味があります。 正式な定義:グラフ与えられた場合。定義更新操作を)1と、エッジの挿入Eに対してE)は、エッジのアミノ酸欠失または2 EからEを。目的は、更新操作後のすべてのペアの最短パスのコストを効率的に見つけることです。効率的には、少なくとも更新操作の後に、Bellman-FordアルゴリズムなどのAll-Pairs-Shortest-Pathアルゴリズムを実行するよりも優れています。G = (V、E)G=(V,E)G = (V,E)eeeEEEeeeEEE 編集:以下に問題の簡略版があります: 重み付きグラフが与えられ、単方向のエッジと2つの重要な頂点sおよびtで構成されます。候補の双方向エッジのセットCも提供されます。私はエッジを構築しなければならない(U 、V )∈ Cはからの距離を最小にするために、SをT。G (V、E)G(V,E)G(V,E)ssstttCCC(U 、V )∈ C(u,v)∈C(u,v) \in Csssttt

2
スパニングツリー問題のNP完全性証明
講師からの質問にヒントを探しています。 したがって、この決定問題はことがわかりました。NP-completeNP-complete\sf{NP\text{-}complete} グラフには、正確なセットを葉として含むスパニングツリーがあります。この決定問題へのハミルトニアン経路を減らすことで、ことを証明できることがわかりました。GGGGGGS={x1,x2,…,xn}S={x1,x2,…,xn}S=\{x_1, x_2,\ldots, x_n\}NP-completeNP-complete\sf{NP\text{-}complete} しかし、私のインストラクターもクラスで私たちに尋ねました: それはまた、だろうではなく「の正確なセットの場合」、我々が行いますNP-completeNP-complete\sf{NP\text{-}complete}SSS 「セット全体とその他のリーフを含む」または「サブセット」SSSSSS 「Sのサブセット」はになると思いますが、それを証明することはできません。どの問題をこれに還元できるかわかりません。「のセットを含める...」については、多項式時間で解決できると思います。NP-completeNP-complete\sf{NP\text{-}complete}SSS

3
グラフの最小スパニングツリーが一意ではない場合
重み付きの無向グラフGが与えられた場合:Gに複数の最小全域木が存在するために、どの条件が当てはまらなければならないか すべての重みが異なる場合、MSTは一意であることを知っていますが、このステートメントを逆にすることはできません。グラフに同じウェイトの複数のエッジがある場合、複数のMSTが存在する可能性がありますが、1つだけ存在する場合もあります。 この例では、左側のグラフには一意のMSTがありますが、右側のグラフにはありません。 MSTの非一意性の条件を見つけるのに最も近い方法は次のとおりです。 グラフGのすべてのコードレスサイクル(他のサイクルを含まないサイクル)を検討します。これらのサイクルのいずれかに最大重み付きエッジが複数回存在する場合、グラフには一意の最小スパニングツリーがありません。 私の考えは、このようなサイクルのために n個の頂点がある場合、エッジの1つだけを除外し、すべての頂点を接続することができます。したがって、MSTを取得するために最も高い重みを持つエッジを削除するには複数の選択肢があるため、MSTは一意ではありません。 しかし、次にこの例を思いつきました。 このグラフには、私の条件に合ったサイクルがあることがわかります:(E、F、G、H)しかし、私が見る限り、最小スパニングツリーは一意です: したがって、私の状態は正しくないようです(または、完全に正しくない可能性があります)。最小スパニングツリーの非一意性に必要かつ十分な条件を見つけるための助けに感謝します。

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