我試圖在我的結果之上構建搜索樹。某種類型的k-ary樹,最後有n個葉子。我正在尋找一個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元樹作爲最終葉子尺寸0 <= size <= |R|
。
在這一刻,我有兩個載體試驗。
std::vector<size_t> layer_2;
std::vector<float> leafs;
std::size_t width, height;
隨着width
和height
幫助有可能通過leafs
導航。但我在質疑自己如何優雅地連接leafs
和layer_2
?
一個很好的解決方案將如何模樣?
_結束「...因爲我需要存儲的一致性。」 _這是什麼意思?你需要**連續**內存?還有別的嗎?爲什麼你的樹木裏充滿了不在你的原始集合中的價值?爲什麼你的葉子沒有排序? – Useless
是的,連續記憶是正確的方式。對不起我的英語不好。樹葉被分類。樹使用上部葉子的平均值。最後的葉子(4,7,8,3,...)被分組,其值最接近父級。 – user1587451
好的,所以你有固定深度的3-ary樹,和一個單獨的1級部分3-ary樹...這似乎不必要的複雜。啊,我知道,出於某種原因你需要子樹質心值。你究竟在努力實現什麼? – Useless