N個數中找出第k個最大的數----選擇問題

設有一組N個數而要確定其中第k個最大者,稱之爲選擇問題。

解法一:將N個數鍍金一個數組中,再通過某種簡單的算法,比如冒泡排序法,以遞減順序將數組排序,然後返回位置k上的元素。運行時間爲O(N^2)。

解法二:先把前k個元素讀入數組並(以遞減的順序)對其排序,接着,將剩下的元素在逐個讀入。當新元素被讀到時,如果他小於數組中的第k個元素則忽略,否則就將其放到數組中正確的位置上,同時將數組中的一個元素基礎數組。當算法終止時,位於第k個位置上的元素作爲答案返回。運行時間爲O(N^2)。

解法三:(假設我們只考慮找出第k個最小的元素)將N個元素讀入一個數組,然後對該數組應用BuildHeap算法。最後,執行k次DeleteMin操作。從該堆最後提取的元素就是我們的答案。運行時間爲O(NlogN)。

解法四:在任一時刻我們都將維持k個最大元素的集合S。在前k個元素讀入以後,當再讀入一個新的元素時,該元素將與第k個元素進行比較,記着第k個最大的元素爲Sk。如果新的元素更大,那麼用新元素代替S中的Sk。此時,S將有一個新的最小元素,它可能是新添加進的元素,也可能不是。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章