n元素集合的第k個分位數是將排序後的集合分成k個相等大小的集合(在1之內)的k-1階統計量。給出一個O(n lg k)時間算法來列出集合的第k個分位數。查找n元素集的第k個分位數。 (來自cormen)
的直接的解決方案是選擇每k,2K,3K .. IK的最小元素,它的運行時間爲O(KN)(K調用選擇的O程序(N))。但是這可以優化成比O(kn)更好。在選擇過程中在索引'i'處找到中位數的中位數後,我們進行以下遞歸調用。
如果中值i是中值的指數> K,遞歸地調用的左子陣列甲選擇第k個最小的元素[0 ... I]
如果i是< K,遞歸地選擇在右子陣列A [i + 1 ... n]中第n + i + k個最小元素。
,在上面的遞歸調用作如下修改這將因子「K」減少「登錄K」?
如果中位數i的中位數的索引大於k,則遞歸地選擇左子數組A中的第k個最小元素A [0 ... i],並遞歸地選擇右子數組中的第n-k個最小元素A [i + 1 ... n]。
如果i是< k,遞歸地選擇右子陣列A [i + 1 ... n]中的第n-i + k個最小元素,並遞歸地選擇左子陣列A [ 0 ... i]。
主要呼叫將只選擇(A,K,N)。
在尋求幫助之前,您有多遠了? – 2010-10-11 15:13:44
請下載者發表評論。我的猜測是你低估了這個問題,因爲它沒有顯示user472402已經做了什麼來解決這個問題,哪裏被卡住了。 – 2010-10-11 15:22:40
海傢伙,抱歉沒有提供任何背景,我卡在哪裏。我是相當新的博客:) 海峽前進的解決方案將是選擇每個k,2k,.. ik th元素。運行時間將是O(kn)。我正在考慮如何減少因子k來記錄k。但我沒有得到任何結論。請幫忙。 – user472402 2010-10-11 15:56:30