compressive_storage::compressive_storage( const std::string& name, const clustering_config& config) : storage(name, config), status_(0) { mine_.push_back(wplist()); }
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]; }