通过向量和Linq对数据进行聚类

时间:2017-10-05 17:16:45

标签: c# linq c#-6.0

所以给定一个具有一些类似属性(整数,字符串等)的类的数组,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时间运行,这是非常不理想的。

0 个答案:

没有答案