2017-12-13
有很多個無序的數,怎麼選出其中最大的若干個數?即,從n個數中選出最大的k個數。元素數量不多的情況下,使用對應的排序演算法來對資料進行排序,再輸出最大的前k個數。兩種排序(部分排序,全部排序)
全部排序:( 時間複雜度均為o(nlog2n) )
快速排序:
堆排序:
存在的問題:
部分排序:把n個數中的前k個數排序出來,複雜度是o(n*k)。
選擇排序:
氣泡排序:
結論:利用快速排序的思想
快排回顧:
解決方案:
結論:
前兩個解法都存在統一的問題,需要對資料訪問多次,只能適用於資料量較小的情況。若資料量較大,則不能全部裝入記憶體,所以要求盡可能少地遍歷資料。步驟概括:所耗費的時間複雜度為o(n * k)。
對於尋找最小值以及替換的問題
堆排序實現:
後續會用相關**實現。敬請期待! ????
演算法事務和鎖
redis資料型別
elvis
the easy way or the right way.
分治演算法 尋找第k大數
問題描述 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k大的元素,這裡給定的線性集是無序的 其實這個問題很簡單,直接對線性序列集qsort,再找出第k個即可。但是這樣的時間複雜度就是qsort的時間複雜度o nlogn 有沒有更快的方法呢?看到網上有一種解法是採取了快排的思...
分治演算法 尋找第k大數
問題描述 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k大的元素,這裡給定的線性集是無序的 其實這個問題很簡單,直接對線性序列集qsort,再找出第k個即可。但是這樣的時間複雜度就是qsort的時間複雜度o nlogn 有沒有更快的方法呢?看到網上有一種解法是採取了快排的思...
分治演算法 尋找第k大數
問題描述 給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k大的元素,這裡給定的線性集是無序的 其實這個問題很簡單,直接對線性序列集qsort,再找出第k個即可。但是這樣的時間複雜度就是qsort的時間複雜度o nlogn 有沒有更快的方法呢?看到網上有一種解法是採取了快排的思...