簡體   English   中英

給定具有自循環的有向加權圖,找到與給定節點x完全相距k dist的節點列表?

[英]Given a directed weighted graph with self loops ,find the list of nodes that are exactly k dist from a given node x?

圖中的每個邊都具有1的權重。圖可以具有周期,如果節點具有自循環,則它可以是從0到無窮大的任何距離,具體取決於編號。 我們采取自我循環的時間。

我已經使用bfs解決了這個問題,但是對距離的約束是10 ^ 9的順序,因此bfs很慢。

我們將在形式(距離,源)的給定圖形上詢問多個查詢,並且o / p是從源頂點開始精確地在給定距離處的節點列表。

約束

1<=Nodes<=500
1<queries<=500
1<=distance<=10^9

我有一種感覺,會有很多重復的計算作為沒有。 節點很小,但我無法弄清楚如何在較小的問題中減少問題。

有效的方法是什么?

編輯:我已經嘗試過使用矩陣求冪,但對於給定的約束,它太慢了。 問題的時間限制為1秒。

G = (V,E)為圖形,並定義鄰接矩陣A ,如下所示:

A[i][j] = 1       (V[i],V[j]) is in E
          0       otherwise

在這個矩陣中,對於每個k

(A^k)[i][j] > 0 if and only if there is a path from v[i] to v[j] of length exactly k.

這意味着通過創建此矩陣然后計算指數,您可以輕松獲得答案。

對於快速指數計算,您可以通過平方使用指數 ,這將產生O(M(n)^log(k)) ,其中M(n)是nXn矩陣的矩陣乘法成本

在同一圖表上查找不同的查詢時,這也可以節省一些計算。

附錄 - 索賠證明:

基數: A^1 = A ,實際上在A根據定義, A[i][j]=1當且僅當(V[i],V[j])E

假設:假設聲明對所有l<k都是正確的

A^k = A^(k-1)*A 根據歸納假設, A^(k-1)[i][j] > 0如果存在從V[i]V[j]的長度為k-1的路徑。

讓我們檢查具有索引ij兩個頂點v1,v2
如果它們之間存在長度為k的路徑,則將其設為v1->...->u->v2 u的指數為m
從ih A^(k-1)[i][m] > 0因為有一條路徑。 另外A[m][j] = 1 ,因為(u,v2) = (V[m],V[j])是邊。

A^k[i][j] = A^(k-1)*A[i][j] = A^(k-1)[i][1]A[1][j] + ... + A^(k-1)[i][m]A[m][j] + ... + A^(k-1)[i][n]A[n][j] 

由於A[m][j] > 0A^(k-1)[i][m] > 0 ,則A^(k-1)*A[i][j] > 0

如果沒有這樣的路徑,那么對於每個頂點u使得(u,v2)是邊緣,沒有從vu的長度k-1路徑(其他的v1->..->u->v2是長度為k )的路徑。

然后,使用歸納假設我們知道如果A^(k-1)[i][m] > 0A[m][j] = 0 ,對於所有m
如果我們在定義A^k[i][j]的和中分配它,我們得到A^k[i][j] = 0

QED

小注釋:從技術上講, A^k[i][j]ij之間的路徑數,長度恰好為k 這可以證明與上面類似,但更多地關注細節。
為了避免數字增長太快(這會增加M(n)因為你可能需要大整數來存儲該值),並且因為你不關心0/1以外的值 - 你可以將矩陣視為布爾值 - 僅使用0/1值並修剪其他任何值。

如果圖表中有周期,那么您可以推斷cycle * N + 1每個相鄰節點之間存在鏈接,因為您可以根據需要進行迭代。

這讓我想到了這個想法,我們可以利用這些循環來獲得優勢!
在檢測周期時使用BFS,我們計算offset + cycle*N然后我們得到接近我們的目標(K)

很容易搜索K.

例如

A - > B - > C - > D - > BK = 1000; S = A;

A - 0
B - 1
C - 2
D - 3
B - 1(+ 4N)
在這里你可以檢查k - (1+4N) = 0 > 1000 - 1 - 4N = 0 > 999 = 4N > N=249 =>最佳B是249*4 + 1 = 997 floor()
更簡單的方法是計算: round(k - offset, cycle)

從這里你可以只計算幾個步驟。
在這個例子中(作為REGEX): A(BCD){249}BCD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM