[英]Detecting the sink in a directed acyclic graph
假設在DAG
中有一個具有以下屬性的頂點:
所有頂點都連接到它
它沒有連接到任何頂點
這通常稱為接收器頂點 。
是否有可能在O(n)
檢測到這個頂點,其中n
是圖中頂點的數量?
由於圖中沒有循環,並且所有頂點都與接收器連接,只需選擇任何起始節點並開始隨機行走。 當你無法繼續行走時,你就在最近的n個台階上。
一旦你走了n步(或更少,你不能繼續),因為問題並不能保證有一個水槽,你應該檢查你是否在一個。 這增加了另一個O(n)
。 所以問題是O(2 n) = O(n)
我能想到的最好是O(n + m)
其是O(n)
如果m
是O(n)
假設存在接收器,請對圖形進行拓撲排序。 排序中的最小節點是接收器。 注意拓撲排序是O(n + m)
。
我以前提供的實現在這里可以輕松地對這個問題進行修改。
如果您可以在線性時間內計算節點內/外的邊數,則可以。 首先,找到沒有輸出邊的頂點(O(n)掃描所有節點)。 只有在只有一個這樣的頂點時才滿足您的條件。 然后,計算其入射邊緣(O(n)以掃描所有輸入邊緣)。 如果恰好有n-1個入邊,則滿足條件。 如果任一測試失敗,則沒有接收器頂點。
我假設“連接”你的意思是“通過邊緣連接”,而不是“通過路徑可達”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.