我有一個樹數據結構,其中每個節點可以有任意數量的子節點,樹可以是任何高度。獲得樹中所有葉節點的最佳方式是什麼?在遍歷樹中的每條路徑之前,是否可以做得更好,直到我擊中葉節點?找到樹數據結構中所有葉節點的最高性能方法
實際上,樹的最大深度通常爲5左右,樹中的每個節點都會有大約10個孩子。
我接受其他類型的數據結構或特殊樹,這些樹會使葉節點特別優化。
我使用的是JavaScript,但實際上只是在尋找一般建議,任何語言等
謝謝!
我有一個樹數據結構,其中每個節點可以有任意數量的子節點,樹可以是任何高度。獲得樹中所有葉節點的最佳方式是什麼?在遍歷樹中的每條路徑之前,是否可以做得更好,直到我擊中葉節點?找到樹數據結構中所有葉節點的最高性能方法
實際上,樹的最大深度通常爲5左右,樹中的每個節點都會有大約10個孩子。
我接受其他類型的數據結構或特殊樹,這些樹會使葉節點特別優化。
我使用的是JavaScript,但實際上只是在尋找一般建議,任何語言等
謝謝!
內存佈局對於最優檢索是必不可少的,所以子列表應該是連續的而不是鏈表,節點應該按照檢索順序依次放置。
您的樹越靜態,可以完成更好的佈局。
全部在一個佈局
所有在一個陣列中的全序
臨
精讀
兩個陣列布局爲內部節點
內部節點指向葉子
臨
精讀
陣列(矢量的動態尺寸,C++矢量)
查找樹的葉子是O(n)
,這對於樹是最佳的,因爲您必須查看O(n)
地點以檢索所有n
事物,以及沿途的分支節點。常量開銷是分支節點。
如果我們增加分支因子,例如讓每個分支有32個孩子而不是2個,我們大大減少了開銷節點的數量,這可能使得遍歷速度更快。
如果我們跳過一個分支,我們不包括該分支中的值,所以我們必須查看所有分支。