k-means在动态编程中的复杂性?

时间:2013-01-06 03:57:11

标签: algorithm complexity-theory dynamic-programming k-means

我们都知道k-means算法:enter image description here复杂度为 O(n * K * I * d)其中:

  1. n =分数
  2. K =群集数量
  3. I =迭代次数
  4. d =属性数
  5. 但我的问题是在动态编程中应用K-means时我无法弄清楚它的复杂性。

    简单地使用 DP 的K-means的想法如下:

    • 计算邻近矩阵
    • 让每个数据点成为一个群集
    • 重复
      • 合并两个最接近的群集
      • 更新邻近矩阵
    • 直到只剩下一个群集

    我试图找到它的伪代码,所以我可以尝试找出复杂性,但我不能。

    那么,我怎么能发现它的复杂性呢?它可能是什么?

    先谢谢你们的回答。

1 个答案:

答案 0 :(得分:1)

您所描述的算法不是动态编程的k-means,而是一种称为agglomerative clustering的层次聚类。通常,凝聚聚类实现需要时间(IIRC)O(n 3 d),其中n是数据点的数量,d是特征的数量。维基百科更深入地探讨了它是如何运作的。

请注意,以这种方式找到的群集与您通过k-means获得的群集相同。凝聚聚类倾向于产生具有不同属性集的非常不同的聚类。

希望这有帮助!