c語言優(yōu)先級排序口訣 一道java面試題,20億數(shù)字的文本排序,如何取前100?
一道java面試題,20億數(shù)字的文本排序,如何取前100?因?yàn)檫@是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最
一道java面試題,20億數(shù)字的文本排序,如何取前100?
因?yàn)檫@是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最后100個元素就是結(jié)果。空間復(fù)雜度為k,時間復(fù)雜度為nlogk
優(yōu)先級隊(duì)列也稱為堆。它分為最小堆和最大堆。您提到的最小優(yōu)先級隊(duì)列是最小堆。這是一種二叉樹。最小堆的主要特性是每個子樹的根節(jié)點(diǎn)的值小于其子樹的根節(jié)點(diǎn)的值。從堆中獲取最小值并插入一個值并將堆調(diào)整為最小值的代價是log2(n)。該算法在時間排序調(diào)度算法中有很好的應(yīng)用。這東西很有用。它通常與其他算法結(jié)合使用。例如,我們動態(tài)地給出一些數(shù)字,或者刪除一些數(shù)字,然后詢問當(dāng)前數(shù)字的中位數(shù)是多少?;蛘邉討B(tài)插入或刪除數(shù)字,并詢問當(dāng)前數(shù)字的最小值是多少。等待