順序統計量的選擇

2021-07-08 18:29:34 字數 1006 閱讀 3476

在選擇順序統計量中,期望的時間複雜度是o(n),主要是對於給定的陣列,從其中選擇出第k小的值。其與原理:利用了快速排序中的隨機分割區間的函式,將第k小的值分割到乙個區域裡面,相當於把該問題劃分的時候只劃分了乙個子問題,就沒有o(lgn),根據快速排序的時間複雜度為o(nlgn)可知,其時間複雜度為o(n)。最壞執行時間為o(n*n),遇到很壞的情況下,每次都是劃分到最大的陣列中。對於分割後返回的位置值,用之與k比較大小,便知道了第k小的值所在的子陣列位置,一直遞迴,便能求出該值。**如下:

int insert::randomselect(vector

&coll,int begin,int end,int statistic)//statistic為第statistic小,而temp為下標,要比之小1

int temp=randompartition(coll,begin,end);

int temp2=temp-begin+1;

if(temp2==statistic)

else

if(statistic < temp2)

else

}

注意:temp2不能用temp+1代替。如果用,就會出錯,因為二者在遞迴時begin並不相等,begin是乙個變化的值,不是為0。他在statistic >temp2時begin就不為0了,十分重要。錯誤**如下

int insert::randomselect(vector

&coll,int begin,int end,int statistic)//statistic為第statistic小,而temp為下標,要比之小1

int temp=randompartition(coll,begin,end);

if(temp+1==statistic)//錯誤,會在某種情況下,迴圈遞迴,會導致棧溢位

else

if(statistic < temp+1)

else

}

選擇任意順序統計量的問題

concept 順序統計量 order statistic 乙個集合中按照大小順序排列的位數。tips 1 對集合進行快速排序。2 將要求的第k位順序統計量和第一步得到的pivot在陣列中的位置相比較,如果相等,則pivot就是第k位的值,否則根據比較結果進行遞迴。首先,快速排序partition ...

第K順序統計量

1.第k順序統計量概念 在乙個由n個元素組成的集合中,第k個順序統計量是該集合中第k小的元素。例如,最小值是第1順序統計量,最大值是第n順序統計量。2.求top k元素與求第k順序統計量不同 第k順序統計量 只求解陣列中的第k大元素,是求解乙個元素。一般使用 快速排序 的思想,將陣列劃分求解。3.第...

順序統計量和中位數 線性時間的選擇演算法

一 求最大最小值 即遍歷一次,然後依次跟當前最大或最小的比較一下,遍歷結束,則選擇結束。源 來自網上 得到最小值 int getmin int ndata,int nlen return nmin 返回最小值 得到最大值 int getmax int ndata,int nlen return nm...