Esempio n. 1
0
compressive_storage::compressive_storage(
    const std::string& name,
    const clustering_config& config)
    : storage(name, config),
      status_(0) {
  mine_.push_back(wplist());
}
Esempio n. 2
0
void compressive_storage::carry_up(size_t r) {
  if (r >= mine_.size() - 1) {
    mine_.push_back(wplist());
  }
  forget_weight(mine_[r]);
  if (!is_next_bucket_full(r)) {
    if (!reach_forgetting_threshold(r + 1) ||
        mine_[r].size() == get_mine().size()) {
      concat(mine_[r], mine_[r + 1]);
      mine_[r].clear();
    } else {
      mine_[r + 1].swap(mine_[r]);
      mine_[r].clear();
    }
  } else {
    wplist cr = mine_[r];
    wplist crr = mine_[r + 1];
    mine_[r].clear();
    mine_[r + 1].clear();
    concat(cr, crr);
    size_t dstsize = (r == 0) ? config_.compressed_bucket_size :
        2 * r * r * config_.compressed_bucket_size;
    compressor_->compress(crr, config_.bicriteria_base_size,
                          dstsize, mine_[r + 1]);
    carry_up(r + 1);
  }
}
wplist kmeans_clustering_method::get_cluster(
    size_t cluster_id,
    const wplist& points) const {
  if (cluster_id >= k_) {
    return wplist();
  }
  return get_clusters(points)[cluster_id];
}