Hierarchy

The Tree class contains the construction of the hierarchy in it’s constructors and class methods.

Tree Structure

Functions

std::ostream &operator<<(std::ostream&, std::shared_ptr<Annotation> &annotation)
std::ostream &operator<<(std::ostream&, std::shared_ptr<Node> &node)
std::shared_ptr<Node> convertUltrametricTreeNodeToNode(std::shared_ptr<UltrametricTreeNode> ultrametricTreeRootNode)
struct Annotation
#include <tree_structure.hpp>

Public Functions

inline Annotation(double cost_decrease, long long center, std::weak_ptr<Annotation> parent = std::weak_ptr<Annotation>(), std::weak_ptr<Node> tree_node = std::weak_ptr<Node>(), std::weak_ptr<Node> orig_node = std::weak_ptr<Node>(), long long level = 0)
inline bool operator<(const Annotation &other) const
inline bool operator>(const Annotation &other) const

Public Members

double cost_decrease
long long center
std::weak_ptr<Annotation> parent
std::weak_ptr<Node> tree_node
std::weak_ptr<Node> orig_node
long long level
struct Node : public std::enable_shared_from_this<Node>
#include <tree_structure.hpp>

Public Functions

inline Node(long long id, double cost, std::vector<std::shared_ptr<Node>> children = {}, std::weak_ptr<Node> parent = std::weak_ptr<Node>(), long long k = -1, unsigned long long size = 0, bool is_cluster = false, long long low = -1, long long high = -1, std::shared_ptr<Annotation> anno = nullptr)
inline bool operator<(const Node &other) const
inline bool operator>(const Node &other) const
std::string to_json(bool fast_index = false)

Public Members

long long id
double cost
std::vector<std::shared_ptr<Node>> children
std::weak_ptr<Node> parent = std::weak_ptr<Node>()
long long k
unsigned long long size
bool is_cluster = false
long long low
long long high
std::shared_ptr<Node> orig_node
std::shared_ptr<Annotation> anno
bool is_merger = false
std::vector<double> representative
long long k_marking = -1
double closest_center = std::numeric_limits<double>::infinity()
long long level
class Tree
#include <tree_structure.hpp>

Public Functions

Tree(std::shared_ptr<Node> root, std::vector<std::vector<double>> &data, UltrametricTreeType tree_type, long long hierarchy, const std::unordered_map<std::string, std::string> &config = {})
inline double cost_function(double value)
std::vector<std::vector<double>> get_distance_matrix()
std::string to_json(bool fast_index = false)
std::vector<long long> kcenter_cut(long long k)
std::vector<long long> kcenter_elbow_cut(bool triangle = true)
std::vector<long long> threshold_elbow_cut()
std::vector<long long> threshold_cut(long long k)
std::vector<long long> stability_cut(unsigned long long mcs)
std::vector<long long> normalized_stability_cut(unsigned long long mcs)
std::vector<long long> threshold_q_coverage(long long k, unsigned long long minPts, bool prune_stem = false, bool elbow = false, bool use_full_tree_elbow = false)
std::vector<long long> get_lca_prune_solution(bool triangle = true)
unsigned long long get_elbow_k(bool triangle = true)

Public Members

std::shared_ptr<Node> root
UltrametricTreeType tree_type
long long hierarchy
std::unordered_map<std::string, std::string> config
std::vector<long long> index_order
std::vector<std::shared_ptr<Node>> sorted_nodes
std::vector<std::shared_ptr<Annotation>> k_solutions
double max_cost
std::vector<double> costs
std::vector<double> cost_decreases

Private Functions

void setup_fast_index()
void compute_sorted_nodes()
void compute_sorted_costs()
void assign_nodes_their_k_values()
std::shared_ptr<Node> create_centroids_hierarchy()
void annotate_tree(std::shared_ptr<Node> root, std::vector<std::vector<double>> &data)
inline double sq_euclid_dist(std::vector<double> &p1, std::vector<double> &p2)
void update_pointers(std::vector<double> &center, std::shared_ptr<Annotation> curr_anno, std::shared_ptr<Node> start_node, long long k)
void optimize_annotations(std::shared_ptr<Node> root, std::vector<std::vector<double>> &data)
void compute_representatives(std::shared_ptr<Node> fullTree, std::vector<std::vector<double>> &data)
std::shared_ptr<Node> convert_to_real_nodes_solution(std::shared_ptr<Node> pruned_solution)
long long mark_tree(std::shared_ptr<Node> tree, std::set<long long> centers)
std::vector<long long> k_solution(long long k, std::shared_ptr<Node> curr_solution)
void get_k_solution_helper(long long k, std::shared_ptr<Node> fullTree, std::shared_ptr<Node> new_solution)
void label_tree(std::vector<long long> &res, std::shared_ptr<Node> tree, long long label)
void extract_labels(std::vector<long long> &res, std::shared_ptr<Node> solution)
void label_clusters_helper_merge(std::shared_ptr<Node> tree, std::vector<long long> &labels, long long k)
std::vector<long long> label_clusters_merge(std::shared_ptr<Node> tree, long long k = -1)
void threshold_cut_main(std::vector<std::shared_ptr<Node>> &node_list, long long k, bool force_kcenter_cut = false)
void trim_stem(std::vector<std::shared_ptr<Node>> &node_list)
long long threshold(long long k = 0, bool stemTrim = false, bool force_kcenter_cut = false)
void mark_tree_from_pruned(std::vector<std::shared_ptr<Node>> pruned_nodes)
double stability(long long size, double pdist, double fallout_sum)
long long split_size(std::shared_ptr<Node> tree, unsigned long long mcs)
void bottom_up_cluster(std::shared_ptr<Node> fullTree, unsigned long long min_cluster_size)
void bottom_up_cluster_normalized(std::shared_ptr<Node> fullTree, unsigned long long min_cluster_size)