From: Matthew Fernandez Date: Wed, 9 Jun 2021 02:45:50 +0000 (-0700) Subject: remove unused SparseMatrix_k_centers_user X-Git-Tag: 2.48.0~45^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=308237f20bc5ac16e8554b3456e75f6e78df4970;p=graphviz remove unused SparseMatrix_k_centers_user --- diff --git a/lib/sparse/SparseMatrix.c b/lib/sparse/SparseMatrix.c index 1884667d9..ad859df2e 100644 --- a/lib/sparse/SparseMatrix.c +++ b/lib/sparse/SparseMatrix.c @@ -3013,124 +3013,6 @@ int SparseMatrix_k_centers(SparseMatrix D0, int weighted, int K, int root, int * } - - -int SparseMatrix_k_centers_user(SparseMatrix D0, int weighted, int K, int *centers_user, int centering, real **dist0){ - /* - Input: - D: the graph. If weighted, the entry values is used. - weighted: whether to treat the graph as weighted - K: the number of centers - root: the start node to find the k center. - centering: whether the distance should be centered so that sum_k dist[n*k+i] = 0 - centers_user: the list of nodes that form the k-centers, GIVEN BY THE USER - Output: - dist: of dimension k*n, dist[k*n: (k+1)*n) gives the distance of every node to the k-th center. - return: flag. if not zero, the graph is not connected, or out of memory. - */ - SparseMatrix D = D0; - int m = D->m, n = D->n; - int *levelset_ptr = NULL, *levelset = NULL, *mask = NULL; - int aggressive = FALSE; - int connectedQ, end1, end2; - enum {K_CENTER_DISCONNECTED = 1, K_CENTER_MEM}; - real *dist_min = NULL, *dist_sum = NULL, dmax; - real *dist = NULL; - int nlist, *list = NULL; - int flag = 0, i, j, k, nlevel; - int root; - - if (!SparseMatrix_is_symmetric(D, FALSE)){ - D = SparseMatrix_symmetrize(D, FALSE); - } - - assert(m == n); - - dist_min = MALLOC(sizeof(real)*n); - dist_sum = MALLOC(sizeof(real)*n); - for (i = 0; i < n; i++) dist_sum[i] = 0; - if (!(*dist0)) *dist0 = MALLOC(sizeof(real)*K*n); - if (!weighted){ - dist = MALLOC(sizeof(real)*n); - root = centers_user[0]; - SparseMatrix_pseudo_diameter_unweighted(D, root, aggressive, &end1, &end2, &connectedQ); - if (!connectedQ) { - flag = K_CENTER_DISCONNECTED; - goto RETURN; - } - for (k = 0; k < K; k++){ - root = centers_user[k]; - SparseMatrix_level_sets(D, root, &nlevel, &levelset_ptr, &levelset, &mask, TRUE); - assert(levelset_ptr[nlevel] == n); - for (i = 0; i < nlevel; i++) { - for (j = levelset_ptr[i]; j < levelset_ptr[i+1]; j++){ - (*dist0)[k*n+levelset[j]] = i; - if (k == 0){ - dist_min[levelset[j]] = i; - } else { - dist_min[levelset[j]] = MIN(dist_min[levelset[j]], i); - } - dist_sum[levelset[j]] += i; - } - } - - } - } else { - root = centers_user[0]; - SparseMatrix_pseudo_diameter_weighted(D, root, aggressive, &end1, &end2, &connectedQ); - if (!connectedQ) return K_CENTER_DISCONNECTED; - list = MALLOC(sizeof(int)*n); - - for (k = 0; k < K; k++){ - root = centers_user[k]; - // fprintf(stderr,"k = %d, root = %d\n",k, root+1); - dist = &((*dist0)[k*n]); - flag = Dijkstra(D, root, dist, &nlist, list, &dmax); - if (flag){ - flag = K_CENTER_MEM; - dist = NULL; - goto RETURN; - } - assert(nlist == n); - for (i = 0; i < n; i++){ - if (k == 0){ - dist_min[i] = dist[i]; - } else { - dist_min[i] = MIN(dist_min[i], dist[i]); - } - dist_sum[i] += dist[i]; - } - - } - dist = NULL; - } - - if (centering){ - for (i = 0; i < n; i++) dist_sum[i] /= k; - for (k = 0; k < K; k++){ - for (i = 0; i < n; i++){ - (*dist0)[k*n+i] -= dist_sum[i]; - } - } - } - - RETURN: - if (levelset_ptr) FREE(levelset_ptr); - if (levelset) FREE(levelset); - if (mask) FREE(mask); - - if (D != D0) SparseMatrix_delete(D); - if (dist) FREE(dist); - if (dist_min) FREE(dist_min); - if (dist_sum) FREE(dist_sum); - if (list) FREE(list); - return flag; - -} - - - - SparseMatrix SparseMatrix_from_dense(int m, int n, real *x){ /* wrap a mxn matrix into a sparse matrix. the {i,j} entry of the matrix is in x[i*n+j], 0<=i