我正在嘗試找到一種演算法,該演算法通過使用在 O(n) 處回傳大小為 n 的陣列的中值的函式,在 O(n) 處從大小為 n 的未排序陣列中找到第 k 個最小元素。我想我必須找到一個時間復雜度像cn cn/2 cn/2^2 .... cn/2^j=O(n)的遞回函式。
uj5u.com熱心網友回復:
您可以使用提供的 O(n) 中值查找演算法來使用快速選擇。
在 O(n) 時間內找到中位數,將陣列分成三部分(小于、等于和大于中位數),然后遞回到相關部分。
復雜性分析很容易(與標準隨機快速選擇演算法相比)。找到中位數和旋轉陣列都是 O(n),然后一個遞回到的陣列的大小最多有 n/2 個元素(根據中位數的定義)。所以遞回關系是 T(n) = n T(n/2),其解是 T(n) = O(n)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485807.html
上一篇:實作素數散列的最佳方法是什么?
