如何识别网络中的节点集群

时间:2011-05-22 11:29:02

标签: php mysql algorithm networking graph

我有一个描述几组连接节点的表:

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

...然后我有2个集群{A,B,C,D,E}和{F,G}

(时间几乎无关紧要 - 只是在那里证明节点+ origin_node不一定是唯一/有序的。)

但是我在制定一个识别几千行集群的算法时有点困难。

我正在使用MySQL 5.0.22 - 所以没有'CONNECT BY',并且可以访问PHP和awk - 尽管我更容易理解算法而不是编码解决方案。只要花费不到几个小时的时间来分析数据,我就会依赖简单而不是订单。

顺便说一句:这是一个现实世界的问题 - 不是家庭作业(我很久以前就不再是学生了 - 也许为时过早;)

TIA

2 个答案:

答案 0 :(得分:0)

  

我更容易理解算法而不是编码解决方案

试过这些链接?

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

http://en.wikipedia.org/wiki/Category:Data_clustering_algorithms

此外,虽然不是MySQL,但微软的网站上也有东西:

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


根据您的评论进行修改:

在您的特定情况下,类似于创建闭包表的东西可能会起作用。

使用临时表......

从任意节点开始。将其分配给新群集。

下一个节点。是否有指向当前已识别群集的节点的链接?

  • 如果不是,请将其分配给新群集。

  • 如果是,请将其分配给该群集。然后,对于每个链接,验证已处理的节点是否在同一个集群中。如果没有,请将它们重新分配给该群集。

答案 1 :(得分:0)

走路网络并标记受访节点(类似于垃圾收集算法)。它的效率相当高,但需要相当多的代码。