diff options
| author | Paul Duncan <pabs@pablotron.org> | 2019-02-05 11:08:51 -0500 | 
|---|---|---|
| committer | Paul Duncan <pabs@pablotron.org> | 2019-02-05 11:08:51 -0500 | 
| commit | 42a5ea32a5bbba10b112a601ea8f34412842f1c3 (patch) | |
| tree | 91b6ac1e940cc3d24fb2258df03bd16d6a11cbdd /src/km-find.c | |
| parent | 7907db7627aafa35a45f7246e79f5369b6714828 (diff) | |
| download | kmeans-42a5ea32a5bbba10b112a601ea8f34412842f1c3.tar.xz kmeans-42a5ea32a5bbba10b112a601ea8f34412842f1c3.zip  | |
use openmp, s/silouette/silhouette/, move row_map allocation outside of km_solve()
Diffstat (limited to 'src/km-find.c')
| -rw-r--r-- | src/km-find.c | 28 | 
1 files changed, 19 insertions, 9 deletions
diff --git a/src/km-find.c b/src/km-find.c index 5ae5948..e9fed0f 100644 --- a/src/km-find.c +++ b/src/km-find.c @@ -28,9 +28,9 @@ find_solve_on_stats(    km_find_data_t * const find_data = cb_data;    UNUSED(set); -  // save total sum and silouette +  // save total sum and silhouette    find_data->distance_sum = stats->sum; -  find_data->silouette = stats->silouette; +  find_data->silhouette = stats->silhouette;  }  static const km_solve_cbs_t @@ -59,7 +59,14 @@ km_find(      return false;    } -  float best_silouette = -2.0; +  // allocate row map: row => distance, cluster ID +  km_row_map_t * const row_map = calloc(set->num_rows, sizeof(km_row_map_t)); +  if (!row_map) { +    // return failure +    return false; +  } + +  float best_silhouette = -2.0;    for (size_t i = 2; i < cbs->max_clusters; i++) {      for (size_t j = 0; j < cbs->num_tests; j++) {        // init cluster set @@ -76,8 +83,8 @@ km_find(        };        // solve test -      // (populates sum and silouette) -      if (!km_solve(&cs, set, &FIND_SOLVE_CBS, &find_data)) { +      // (populates sum and silhouette) +      if (!km_solve(&cs, set, row_map, &FIND_SOLVE_CBS, &find_data)) {          // return failure          return false;        } @@ -88,15 +95,15 @@ km_find(        // emit result        cbs->on_data(&find_data, cb_data); -      if (find_data.silouette > best_silouette) { +      if (find_data.silhouette > best_silhouette) {          // emit new best result -        if (cbs->on_best && !cbs->on_best(find_data.silouette, &cs, cb_data)) { +        if (cbs->on_best && !cbs->on_best(find_data.silhouette, &cs, cb_data)) {            // return failure            return false;          } -        // update best silouette -        best_silouette = find_data.silouette; +        // update best silhouette +        best_silhouette = find_data.silhouette;        }        // finalize cluster set @@ -107,6 +114,9 @@ km_find(      }    } +  // free row map +  free(row_map); +    // return success    return true;  }  | 
