簡體   English   中英

在grpah中,找到所有連接到一個節點但未連接到另一個節點的節點的最快方法是什么?

[英]in grpah what will be the fastest way to find all the nodes connected to one node but not connected to another node.?

假設您有兩個節點 P 和 Q。現在我們必須找到與 Q 有邊但與 P 沒有邊的節點。最快的方法是什么? 我應該使用什么算法或數據結構? 目前,每當添加一條邊時,我都會為每個節點維護一個向量,該向量保存連接到該節點的所有節點(讓我們將這個 Vi 稱為第 i 個節點)。 我也有鄰接矩陣。 我正在做的大致是這樣的。

for each node in Vq
check if it is connected to P using adjacency matrix
do something with this node

你認為這里可以做更快的事情嗎?

幾乎相同的事情:

  • 從鄰接矩陣中取P行和Q行
  • 對於節點 I,
    • 如果第 i 列的 P 行為 0,Q 行為 1,則進行運算。

這明確表示在 for 循環中沒有另一個循環用於“檢查它是否已連接”。

這是理論上你能做到的最快速度(這是 O(n),理論上的下限是 O(n))。 在實踐中,您可能能夠根據您使用的語言和優化的目的來優化它。 例如,如果您將其表述為 Matlab 會喜歡它:

nodes = (~rowP)*rowQ';

如果我錯了,請糾正我,但它的運行速度不應超過線性時間。 必須檢查每個節點,但要在恆定時間內驗證邊的存在。

暫無
暫無

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

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