public Map<Point, List<Point>> cluster() {
        // 随即选取k个点作为中心点
        List<Point> keys = Random.choice(points, k);
        while (true) {
            // 根据中心点对属性点聚类
            clusters = clusterPoints(keys);

            // 根据聚类结果计算中心点
            ArrayList<Point> tmpKeys = new ArrayList<Point>();
            for (List<Point> pointList : clusters.values()) {
                tmpKeys.add(getKey(pointList));
            }


            // 如果重新计算的中心点没有变化，则迭代结束
            if (keys.containsAll(tmpKeys)) {
                break;
            }

            // 如果中心点变化了，则更新中心点
            keys = tmpKeys;
        }
        return clusters;
    }