最优网格聚类

时间:2013-02-08 21:00:32

标签: algorithm dynamic-programming

首先是1D案例。给定N个数组的数组,将其切割成n个块,以使每个元素与其块平均值的平方距离之和最小化。例如,如果要求将[0.1,0.3,2,1.2,1.3]切成三块,最佳解是[[0.1,0.3],[2],[1.2,1.3]]。

通过动态编程,可以在O(N * n)

中轻松解决这个问题

现在是2D案例。我们给了一个(N,M)矩阵,我们希望用n * m块来剪切它。解决方案应该看起来像一个不规则间隔的网格 - 它是一组n个水平切割和m个垂直切割。

这看起来更棘手。人们可以通过固定水平切口动态地找到最佳垂直切口,但这似乎不会导致任何地方。枚举所有可能的水平切割O(C(M,m))是难以处理的。

有没有办法在多项式时间内做到这一点?

1 个答案:

答案 0 :(得分:0)

这听起来很像NP-Hard问题:http://en.wikipedia.org/wiki/K-means_clustering因此我认为不存在多项式时间算法。