【发布时间】:2017-08-05 00:06:48
【问题描述】:
我正在尝试在我的结果之上构建一个搜索树。某种末端有 n 个叶子的 k-ary 树。我正在寻找 C++ 解决方案并尝试使用std::vector,但由于我需要内存一致性而无法完成。它可以通过嵌套向量来完成,但我不能这样做。
让我通过例子来解释细节:
未排序的结果可能是
Result R = { 4, 7, 8, 3, 1, 9, 0, 2, 2, 9, 6 }
最重要的是,我需要一棵树,其中的节点在我的具体问题中是质心。但为了简单起见,我将在这里使用人工值。
我将搜索树维度定义为
Height H = 2
Branch B = 3
一开始的树
4 7 8 3 1 9 0 2 2 9 6
第二步
layer_0 1.6 5 8.2
| | |
+-+-+-+-+-+ +-+ +-+-+-+
| | | | | | | | | | | |
layer_1 3 1 0 2 2 3 4 6 7 8 9 9
最后一步
layer_0 1.6 5 8.2
| | |
+---+---+ +-+---+ +---+----+
layer_1 0.8 1.6 2.4 4.2 5 5.8 6.4 8.2 8.4
| | | | | | |
+-+ +-+-+ | | | | +-+
layer_2 1 0 2 2 3 4 6 7 8 9 9
最后这棵树不是 k-ary 树,因为末端的叶子大小为 0 <= size <= |R|。
此时我正在试验两个向量。
std::vector<size_t> layer_2;
std::vector<float> leafs;
std::size_t width, height;
在width 和height 的帮助下,可以浏览leafs。但我在质疑自己如何优雅地连接leafs 和layer_2?
一个好的解决方案应该是什么样的?
【问题讨论】:
-
"... 因为我需要内存一致性。" 这是什么意思?您需要连续内存吗?还有什么?为什么你的树中充满了原始集合中没有出现的值?为什么你的叶子没有排序?
-
是的,连续内存是正确的方法。对不起我的英语不好。叶子被分类。树使用上部叶子的平均值。最后的叶子 (4, 7, 8, 3, ...) 被分组,其值最接近父级。
-
好的,所以你有固定深度的 3 叉树和单独的 1 层部分 3 叉树......这看起来不必要地复杂。啊,我明白了,出于某种原因,您需要子树质心值。你到底想达到什么目的?
-
不是固定的深度。就在这个例子中。深度在 2 和 4 之间变化(8
标签: c++ tree contiguous