解题思路
本题要求实现二分 K-means (Bi-Kmeans) 算法来解决网络子网分割问题。该算法是对传统 K-means 算法的优化,能够有效避免陷入局部最优解。
算法的核心思想是采用自顶向下的分裂策略,每次选择一个簇进行二分,直到达到目标簇数量。具体流程如下:
首先,将所有网络站点作为一个整体,使用标准 K-means 算法(K=2)将其分割成两个子网。在进行 K-means 聚类时,选取子网中 x 坐标最小和最大的两个站点作为初始簇心,然后迭代更新簇心(使用簇内所有站点的平均坐标),直到簇心变化小于阈值或达到最大迭代次数。
接下来,算法进入主循环,每次迭代都需要从现有的所有簇中选择一个进行进一步划分。选择的标准是基于 SSE(误差平方和)最小化原则:计算每个簇被划分前后的 SSE 差值,选择能够最大程度降低全局 SSE 的簇进行划分。SSE 的计算方式是以簇的平均坐标为簇心,计算簇内所有站点到簇心的欧氏距离平方和。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写