最小堆建立過程 一道java面試題,20億數(shù)字的文本排序,如何取前100?
一道java面試題,20億數(shù)字的文本排序,如何取前100?因為這是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最
一道java面試題,20億數(shù)字的文本排序,如何取前100?
因為這是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最后100個元素就是結(jié)果??臻g復(fù)雜度為k,時間復(fù)雜度為nlogk
顧名思義,即堆的每個節(jié)點都大于其后代,稱為大根堆,堆的每個節(jié)點都小于其左右后代,稱為小根堆。
最大堆和最小堆原理?
最大堆和最小堆是指堆的頂部分別有最大或最小元素的堆,也稱為大頂堆和小頂堆。堆是一種基本的抽象數(shù)據(jù)類型,通常用二叉樹表示并遞歸定義。堆的頂部是樹的根,這確保樹或子樹的根始終大于或小于子節(jié)點。優(yōu)先級隊列是堆的一個實例。使用最大堆還是最小堆取決于實際情況和個人定義。cqueue的STL中的容器優(yōu)先級實現(xiàn)了優(yōu)先級隊列,默認為big top heap。