簡體   English   中英

如何更高效地找到前k個最大的元素

[英]How to find the top k largest elements more efficiently

如何比 O(logN + k) 更快地找到二叉搜索樹中的 k 個最大元素

我用上述漸近線實現了算法,但是如何讓它更快呢?

使用以下內容擴展樹數據結構:

  • 使您的樹線程化,即為每個節點添加一個父引用。

  • 維護對具有最大值的節點(“最右邊”的節點)的引用。 在添加/刪除節點時保持最新。

有了這些信息,您就可以避免從根節點到最右邊節點的第一次下降,並立即開始收集值。 如果二叉樹是平衡的,那么最右邊的節點將在(或接近)樹的底層。 然后以相反的順序沿着樹走——為了找到最有價值的節點——將使你遍歷許多 O() 的邊。

替代結構,例如 B+ 樹和跳躍列表,也可以提供 O() 訪問它們存儲的最大值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM