Algorithm-Cluster

 view release on metacpan or  search on metacpan

src/cluster.c  view on Meta::CPAN

If a memory error occurs, cuttree returns 0.

========================================================================
*/
{
    int i = -nelements+1; /* top node */
    int j;
    int k = -1;
    int previous = nelements;
    const int n = nelements-nclusters; /* number of nodes to join */
    int* parents;

    if (nclusters == 1) {
        for (i = 0; i < nelements; i++) clusterid[i] = 0;
        return 1;
    }
    parents = malloc((nelements-1)*sizeof(int));
    if (!parents) return 0;
    while (1) {
        if (i >= 0) {
            clusterid[i] = k;
            j = i;
            i = previous;
            previous = j;
        }
        else {
            j = -i-1;
            if (previous == tree[j].left) {
                previous = i;
                i = tree[j].right;
                if (j >= n && (i >= 0 || -i-1 < n)) k++;
            }
            else if (previous == tree[j].right) {
                previous = i;
                i = parents[j];
                if (i == nelements) break;
            }
            else {
                parents[j] = previous;
                previous = i;
                i = tree[j].left;
                if (j >= n && (i >= 0 || -i-1 < n)) k++;
            }
        }
    }
    free(parents);
    return 1;
}

/* ******************************************************************** */

static Node*
pclcluster(int nrows, int ncolumns, double** data, int** mask, double weight[],
    double** distmatrix, char dist, int transpose)

/*



( run in 0.229 second using v1.01-cache-2.11-cpan-4d50c553e7e )