[英]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.