簡體   English   中英

找到有向非負加權圖的最短路徑,避免給定子集頂點的任何頂點彼此相鄰?

[英]Find the shortest path of a directed non-negative weighted graph avoiding any vertices of a given subset vertices to be next to each other?

假設給定一個簡單的有向非負加權圖 G = (V, E) 和頂點 X ⊂ V 的子集。該圖采用鄰接表表示,子集 X 作為列表。 如何找到一種算法來計算圖中不屬於 X 的頂點 s,t 之間的短路路徑,並且每當路徑使用 X 中的兩個頂點時,這兩者之間至少有一個不在 X 中的頂點頂點? 該算法應該在 O(m+nlogn) 時間內。

我一直在考慮這個問題,但找不到在 O(m+nlogn) 時間下的算法,知道如何解決這個問題嗎?

假設m = |E| n = |V| .

帶有斐波那契堆的 Dijkstra 算法在O(m + n log n)中運行。 所以你想在不增加最終時間復雜度的情況下考慮額外的約束。

如果查詢一個頂點是否在 X 中不能在恆定時間內完成,那么您首先需要通過在O(n)中構建一個 X 的哈希集來做到這一點。 使用此哈希集的后續查詢將在恆定時間內運行。

現在,從圖中刪除 X 中頂點對之間的邊只是添加了另一個O(m) 然后,您可以在刪除邊的新圖上運行 Dijkstra,整個過程只需要O(m + n log n)時間。

暫無
暫無

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

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