簡體   English   中英

極小程度有向無環圖中的最短路徑

[英]Shortest path in Directed Acyclic Graph with small degree

給定n個頂點上的加權有向非循環圖,使得每個頂點具有至多5 indecree和最多5 outdegree。 節點0, 1, ..., n - 1的定向如下

0 1 2 3 4

5 6 7 8 9

10 11 12 13 14

...

n-5 n-4 n-3 n-2 n-1

邊緣只能從一行中的節點到下一行中的某個節點。

我們將給出q查詢,詢問從uv的最短路徑長度。 這里n可以高達10^5q高達10^4 權重都是正整數。

我們能否做得比O(nq)動態編程更好(這顯然不適用於此)?

這似乎太好了,不好意思,如果它不是......你可以得到O(n)編輯O(n^(4/3)) )預處理和O(1)查詢。

我在考慮你知道如何在時間O(n^2)中計算圖中所有節點之間的所有最短距離。 (這確實可能,你似乎知道)

將圖形划分為k個塊,每個塊包含n/(5*k)行。 (塊應該在完整的行上開始和結束,並且兩個連續的行在它們各自的第一行和最后一行上重疊)

計算每個塊中所有節點(特別是第一行和最后一行)之間的最短路徑: O((n/k)^2)

然后,您可以考慮僅包含兩個塊之間邊界處的節點的簡化圖,其邊值等於它們剛剛計算出的最短路徑。此簡化圖的大小為O(k) 在時間O(k^2)計算該圖中的所有最短路徑。

總預處理時間: O((n/k)^2 + k^2) k=sqrt(n) ,得到O(n)預處理。

然后查詢時間為O(1) :取u塊結束時的5個節點,v塊開始處的5個節點(如果塊不同),你只需要比較u-> v的25種可能性

編輯

當然這是假的。 實際上你有k塊用於計算最短路徑,因此該步驟的總復雜度為O(k*(n/k)^2) 因此總和為O(n^2/k + k^2)O(n^2/k + k^2)的最佳選擇是k=n^(2/3) ,這給出了O(n^(4/3))預處理的總復雜度O(n^(4/3))和總查詢O(q)

暫無
暫無

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

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