我有一个表描述了多个连接的节点:如何识别节点的集群网络中
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}
(时刻是几乎不相关的 - 它只是为了证明node + origin_node不一定是唯一的/有序的)。
但我被困在制定标识从几千行的聚类算法一点。
我与MySQL 5.0.22工作 - 所以没有“CONNECT BY”,并有机会获得PHP和awk - 虽然它会是我更容易理解的算法,而不是编码的解决方案。只要花费不到几个小时的时间来分析数据,我就会倾向于简化订单。
BTW:它是一个现实世界的问题 - 没有家庭作业(我不再是一个学生在很久以前 - 也许还为时过早;)
TIA
在搜索算法之前,您应该正确地确定要解决的问题,即捕获您的群集想法的“公式”是什么?它们是否与http://en.wikipedia.org/wiki/K-means_clustering使用的类似? – akappa 2011-05-22 11:55:30
我不认为有一种方法可以在MySQL中使用单个SQL语句来执行此操作。我会更程序化地将它作为存储过程或PHP。如果只有几千行,无论你如何处理,性能都不应该成为问题。也许一个HashTable按节点键入一个集群的值。那么你只需要将集群合并在一起即可。 – 2011-05-22 12:00:51
@akappa:也许我对术语聚类的使用是不恰当的,因为尽管有趣的是,维基百科上的聚类算法的讨论基于测量基本指标的相对距离 - 而我的数据主要是名义上的,并且存在为一组重叠的树(即最终的复合图可能包含闭环) – symcbean 2011-05-22 14:57:21