SAMPLE-K-CENTER(X', m, k) Let C be new array S = ∅ for i = m - k + 1 to m if i ∈ S S = S ∪ {k} INSERT(C, X'[k]) else S = S ∪ {i} INSERT(C, X'[i]) return C
CLUSTER-1-DIMENSION(X, n, k) //先进行排序 RANDOMIZED-QUICKSORT(X, 1, n) let S[0 : n], T[0 : n] be new arrays for i = 1 to n S[i] = S[i - 1] + X[i] T[i] = T[i - 1] + X[i] * X[i] let g[0 : k, 0 : n], pre[0 : k, 0 : n] be new matrices for i = 0 to k g[i, 0] = 0 for j = 1 to n g[0, j] = ∞ for i = 1 to k for j = 1 to n g[i, j] = g[i - 1, j] pre[i, j] = j for l = 0 to j - 1 w = T[j] - T[i] + (S[j] - S[i]) * (S[j] - S[i]) / (j - i) if g[i, j] > g[i - 1, l] + w g[i, j] = g[i - 1, l] + w pre[i, j] = l // 开始存储最终答案。 U = ∅ now = n for i = k down to 1 p = pre[i, now] if p != now INSERT(U, X[p + 1 : now]) now = p return g[k, n], U