所以给定一个具有一些类似属性(整数,字符串等)的类的数组,Linq可以轻松地执行聚类算法吗?
例如,让我们有以下类:
class Foo {
string A { get; }
string B { get; }
string C { get; }
}
以下内容将被视为一个群集,因为它们至少有一个与该群组的另一个成员共有的向量:
{ "A", "1", "X" }
{ "A", "2", "Z" }
{ "B", "1", "Y" }
{ "C", "3", "X" }
{ "C", "100", "bar" }
如果我有一组Foos和一个新的foo,并且我检测到其中一个向量与至少一个向量之间至少有一个交集,那么它也应该是该群集的一部分。
另外,如果我有这两个群集:
{ "A", "1", "X" }
{ "A", "2", "Z" }
{ "F", "7", "Y" }
{ "F", "8", "G" }
以下Foo被添加到系统中将适用于两个集群,导致它们现在一起变异为一个巨型集群:
{ "F", "1", "N" }
字符串A "F"
存在于集群2中,字符串B" 1"存在于群集1中。
所以我想做的就是拥有一个IEnumerable并执行Linq操作,以便快速将它们分组到这些集群中。
我们现在有代码可以完成这项工作,但它在N ^ N时间运行,这是非常不理想的。