K-means 算法的工作原理如下:
- 选择 k 个点作为初始质心(因此,K-*);
- 计算所有顶点到所选择的 k 个质心的距离;
- 将每个顶点分配给最近的质心;
- 通过生成属于质心的所有顶点之间的平均值来重新计算质心的位置(因此,k-means,对每个 k 质心进行一次平均计算);
- 当在 step中没有顶点被分配给另一个质心时,转到 step
2
并停止- 或者直到您的错误条件得到满足。3
在您的情况下,由于您有一个无向图,因此最好考虑边缘距离来生成每个顶点的坐标,然后应用该算法。
如果您不想执行此初始过程,您可以计算从一个顶点到所有其他可到达顶点的距离,但是您必须为每次迭代都执行此操作——这是相当不必要的开销。
对于您的无向图:
[vertex1] [vertex2] [edge cost]
a b 1
a c 2
a d 3
b d 4
c d 5
距离表将类似于:
a b c d
a 0 1 2 3
b 1 0 (1) 4
c 2 (1) 0 5
d 3 4 5 0
(1) - b to c = (b to a, a to c) = 3
如果这应该是您的表格,只需在您的图表上应用 Dijkstra 算法,对于每个顶点,并将结果表格视为您的距离表格。
该表将具有最小距离,但是,如果您有任何其他策略来计算它,则完全由您决定如何计算它。
另请注意,如果您的图是有向的,则矩阵将不是对称的,因为在这种情况下是对称的。