如何在矩阵中存储不平衡树

时间:2013-09-26 16:53:53

标签: data-structures matrix tree graph-algorithm

我正在使用词汇树,k-ary树数据结构,深度为L,这是迭代运行分层k-means聚类的结果。这是一种不平衡的结构,因为当分配给集群的数据点数小于集群数时,集群过程可能会停止。

我的问题是我需要以矩阵格式存储这棵树。

我想过简单地以广度优先顺序存储它但如果节点的实际数量之间的差异(例如n)和平衡树中的理论节点数,则内存浪费可能太高增加,即:

n << (1-k^L)/(1-k)

有没有办法以矩阵形式有效地存储不平衡树而不浪费内存或浪费更少的东西?

1 个答案:

答案 0 :(得分:-1)

似乎很难不浪费任何空间。但是,下面概述了一种相当简单的方法,如果总是分配叶子的空间(在某些情况下有用),则只需要O(N log_k N)空间或O(k N log_k N),其中N是数量树中的元素。成本是访问元素需要O(log_k N)。

确切的实施是相当可变的,因为它取决于许多因素。这个想法是简单地将平衡二叉树的表示概括为一个数组,作为一个不平衡的n-ary树作为矩阵。这是通过使矩阵单元充当节点来完成的。节点中包含的信息可以位于具有数据结构的单个单元中,也可以分布在接下来的几个单元中。主要的是每个节点必须包含该特定节点的信息以及它所拥有的任何子节点的位置信息。然后使用增量指针来跟踪儿童的下一个免费地点所在的位置。

总的来说,它只是一个小于或等于r * c元素的数组,它被分解为r行和c列的矩阵。列表列表可能更有用,因为行L将包含深度为L的节点。否则,那里没有太多用处。