簡體   English   中英

如何識別網絡中的節點群集

[英]How to identify clusters of nodes in a network

我有一張表描述了幾組連接的節點:

node
origin_node REFERENCES node
start_time
end_time

我想找出數據集包含多少個群集,例如,記錄是否為:

A, B, 10:00, 11:00
B, C, 9:00, 9:15
D, E, 10:00, 10:15
B, A, 13:00, 13:30
E, B, 12:00, 13:20
F, G, 9:00, 9:15

...那么我將有兩個群集{A,B,C,D,E}和{F,G}

(時間幾乎沒有關系-只是用來證明node + origin_node不一定是唯一的/有序的)。

但是我在制定一種算法上有些困惑,該算​​法可以從幾千行中識別出集群。

我正在使用MySQL 5.0.22-所以沒有'CONNECT BY',並且可以訪問PHP和awk-盡管對我而言,理解算法而不是編碼解決方案會更容易。 只要花費少於幾個小時的時間來分析數據,我就會傾向於簡化訂單。

順便說一句:這是一個現實世界的問題-不是作業(我很久以前就不再是學生-也許還為時過早;)

TIA

對我來說,理解算法而不是編碼解決方案會更容易

嘗試過這些鏈接?

http://en.wikipedia.org/wiki/Cluster_analysis

http://en.wikipedia.org/wiki/類別:Data_clustering_algorithms

另外,盡管不是MySQL,但Microsoft網站上還有一些東西:

http://msdn.microsoft.com/en-us/library/ms174879.aspx


根據您的評論進行編輯:

在您的特定情況下,類似於創建閉合表的方法可能會起作用。

正在使用臨時表...

從任意節點開始。 將其分配給新集群。

下一個節點。 是否存在從當前標識的集群到節點的鏈接?

  • 如果否,請將其分配給新群集。

  • 如果是,請將其分配給該群集。 然后,對於每個鏈接,確認已經處理的節點在同一群集中。 如果不是,則將它們重新分配給該群集。

遍歷網絡並標記訪問的節點(類似於垃圾收集算法)。 它相當有效,但是需要大量代碼。

暫無
暫無

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

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