タグ付けされた質問 「graph-theory」

14
有向グラフでサイクルを検出するための最適なアルゴリズム
有向グラフ内のすべてのサイクルを検出するための最も効率的なアルゴリズムは何ですか? 実行する必要があるジョブのスケジュールを表す有向グラフがあります。ジョブはノードであり、依存関係はエッジです。このグラフ内の循環の依存関係につながるエラーのケースを検出する必要があります。

16
深さ優先検索(DFS)と幅優先検索(BFS)を使用するのはいつ実用的ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 10日前休業。 DFSとBFSの違いは理解していますが、どちらを使用する方が実際的かを知りたいのですが。 誰かがDFSがBFSを打ち負かす方法の例を教えてもらえますか?


10
Primではなく、Kruskalをいつ使用すればよいですか?
Primのアルゴリズムをいつ使用する必要があるのか​​、Kruskalがいつ最小のスパニングツリーを見つけるのかについて疑問に思っていましたか?どちらにも簡単なロジックがあり、最悪の場合は同じです。違いは、少し異なるデータ構造を含む可能性のある実装だけです。それで、決定的な要因は何ですか?

7
DFSとBFSの両方の時間の複雑さはなぜですかO(V + E)
BFSの基本的なアルゴリズム: set start vertex to visited load it into queue while queue not empty for each edge incident to vertex if its not visited load into queue mark vertex したがって、時間の複雑さは次のようになると思います。 v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges) v頂点はどこ1にn まず、私が言ったことは正しいですか?第二に、これはどうですか、O(N + E)そしてなぜ素晴らしいのかについての直感。ありがとう

16
2つの任意の頂点間のすべての接続を見つけるグラフアルゴリズム
以下で説明するタスクを実行するための最適な時間効率の良いアルゴリズムを決定しようとしています。 一連のレコードがあります。このレコードのセットには、このセットのレコードのペアが相互に接続する方法を示す接続データがあります。これは基本的に無向グラフを表し、レコードは頂点であり、接続データはエッジです。 セット内のすべてのレコードには接続情報があります(つまり、孤立したレコードはありません。セット内の各レコードは、セット内の他の1つ以上のレコードに接続しています)。 セットから任意の2つのレコードを選択し、選択したレコード間のすべての単純なパスを表示できるようにしたいと思います。「単純なパス」とは、パスに繰り返しレコードがないパス(つまり、有限パスのみ)を意味します。 注:選択した2つのレコードは常に異なります(つまり、開始頂点と終了頂点が同じになることはなく、サイクルはありません)。 例えば: 次の記録がある場合: A、B、C、D、E 以下は接続を表しています。 (A、B)、(A、C)、(B、A)、(B、D)、(B、E)、(B、F)、(C、A)、(C、E)、 (C、F)、(D、B)、(E、C)、(E、F)、(F、B)、(F、C)、(F、E) [(A、B)は、レコードAがレコードBに接続することを意味します] 開始レコードとしてBを選択し、終了レコードとしてEを選択した場合、レコードBをレコードEに接続するレコード接続を通るすべての単純なパスを見つけたいと思います。 BをEに接続するすべてのパス: B-> E B-> F-> E B-> F-> C-> E B-> A-> C-> E B-> A-> C-> F-> E これは一例です。実際には、何十万ものレコードを含むセットがある場合があります。

4
100個の移動するターゲット間の最短経路を見つけるにはどうすればよいですか?(ライブデモが含まれています。)
バックグラウンド 次の図は問題を示しています。 赤い丸をコントロールできます。ターゲットは青い三角形です。黒い矢印は、ターゲットが移動する方向を示します。 最低限のステップですべてのターゲットを収集したい。 ターンごとに、左/右/上または下に1ステップ移動する必要があります。 ボードに表示されている指示に従って、ターゲットを1回転するたびに1ステップ移動します。 デモ この問題の再生可能なデモをGoogle appengineで公開しました。 これは私の現在のアルゴリズムが最適ではないことを示しているので、誰かが目標スコアを上回ることができるかどうか非常に興味があります。(これを管理したら、おめでとうメッセージが表示されます!) 問題 私の現在のアルゴリズムは、ターゲットの数に非常によく対応していません。時間は指数関数的に増加し、16匹の魚ではすでに数秒です。 32 * 32のボードサイズと100個の移動ターゲットでの答えを計算したいと思います。 質問 すべてのターゲットを収集するための最小ステップ数を計算するための効率的なアルゴリズム(理想的にはJavaScript)とは何ですか? 私が試したこと 私の現在のアプローチはメモ化に基づいていますが、それは非常に遅く、常に最良のソリューションを生成するかどうかはわかりません。 「特定のターゲットのセットを収集して特定のターゲットに到達するための最小ステップ数はいくつですか?」の副問題を解決します。 サブ問題は、前のターゲットが訪問したことについての各選択肢を調べることにより、再帰的に解決されます。以前のターゲットのサブセットをできるだけ早く収集し、最終的な位置から現在のターゲットにできるだけ早く移動することが常に最適であると思います(ただし、これが有効な仮定であるかどうかはわかりません)。 これにより、n * 2 ^ n状態が計算され、非常に急速に増加します。 現在のコードを以下に示します。 var DX=[1,0,-1,0]; var DY=[0,1,0,-1]; // Return the location of the given fish at time t function getPt(fish,t) { var i; var x=pts[fish][0]; var …


10
特定のノードにアクセスするグラフで最短経路を見つけます
約100個のノードと約200個のエッジを持つ無向グラフがあります。1つのノードには「start」というラベルが付けられ、もう1つは「end」というラベルが付けられ、「mustpass」というラベルが付けられたノードが約12個あります。 'start'で始まり、 'end'で終わり、すべての 'mustpass'ノードを(任意の順序で)通過する、このグラフの最短パスを見つける必要があります。 (http://3e.org/local/maize-graph.png / http://3e.org/local/maize-graph.dot.txtは問題のグラフであり、ペンシルバニア州ランカスターのトウモロコシの迷路を表しています)

4
ストリートデータ(グラフ)での近隣(クリーク)の検索
都市の近隣をグラフ上のポリゴンとして自動的に定義する方法を探しています。 私の近所の定義には2つの部分があります。 ブロック:通り(エッジ)と交差点(ノード)の数が最低3(三角形)である、いくつかの通りの間で囲まれた領域。 近隣:特定のブロックについて、そのブロックに直接隣接するすべてのブロックとブロック自体。 例については、この図を参照してください。 たとえば、B4は7つのノードとそれらを接続する6つのエッジによって定義されるブロックです。ここでのほとんどの例と同様に、他のブロックは4つのノードとそれらを接続する4つのエッジによって定義されます。また、B1の近傍にはB2が含まれ(逆も同様)、B2にもB3が含まれます。ます。 OSMからストリートデータを取得するためにosmnxを使用しています。 osmnxとnetworkxを使用して、グラフを走査して各ブロックを定義するノードとエッジを見つけるにはどうすればよいですか? 各ブロックについて、隣接するブロックをどのように見つけることができますか? 私は、グラフと座標(緯度、経度)のペアを入力として受け取り、関連するブロックを識別して、そのブロックのポリゴンと上記で定義した近傍を返すコードに向けて取り組んでいます。 以下は、マップを作成するために使用されるコードです。 import osmnx as ox import networkx as nx import matplotlib.pyplot as plt G = ox.graph_from_address('Nørrebrogade 20, Copenhagen Municipality', network_type='all', distance=500) そして、ノードの数と次数が異なるクリークを見つけるための私の試み。 def plot_cliques(graph, number_of_nodes, degree): ug = ox.save_load.get_undirected(graph) cliques = nx.find_cliques(ug) cliques_nodes = [clq for clq in cliques if …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.