2

質問 : 有向グラフがあります。時間計算量 Ɵ(n) でグラフの穴 (ピット) を見つける方法。

グラフの穴 : (入力) が n-1 次、(出力) が 0 次の頂点の場合、グラフに穴があります。

4

4 に答える 4

4

何か不足していますか?グラフのエッジに沿ってグラフを検索しないでください。グラフ内の n 個の頂点すべてを反復処理し、それぞれの入力エッジと出力エッジの数をテストします。頂点ごとに、着信エッジと発信エッジの数を保存できると思います。エッジ数がある場合、これは O(n) をスケーリングします。

@REPLY: より具体的にするには、グラフがどのように実装されているかを知る必要があります。しかし、私は次のようなことを意味します:

foreach( node in graph )
     if (( node.numberInputEdges == numNodes -1 ) && 
         ( node.numberOutputEdges == 0 ))
         print ( "this node is a pit" )
于 2013-06-12T18:14:46.083 に答える
0

グラフには 1 つの「ピット」しか存在できません (deg_in = N-1 のため)。したがって、deg_out = 0 のすべてのノードを検索します。2 つの場合は停止します。ある場合は、deg_in を確認します。これがO(N)です。

于 2013-06-12T20:30:23.883 に答える
0

隣接リストの実装がある場合は、それをスキャンするだけで、出次数が 0 の頂点があれば O(n) 時間で見つかります。隣接行列がある場合は、DFS を使用できます。

DFS では、発信ノードが見つかるたびにカウンターをインクリメントするだけです。

擬似コード:

for each adjacent node :
   indegree->neighbour ++;
   if (neighbour not visited ) dfs(neighbour)   

最後に indegree 配列をスキャンして、indegree (n-1) を持つノードを取得します。bcoz すべてのノードが Pit へのエッジを持ちます。

于 2013-06-12T18:24:06.053 に答える