順序統計學總結

來源:互聯網
上載者:User
如果要轉載,需要註明出處: http://blog.csdn.net/xiazdong先來看一個問題:“給定一個無序的序列,求序列的中位元。”正常的答案都是“先排序,再取A[n/2],花費O(nlgn)”,學習完本文後,發現其實能夠在O(n)求出中位元。但是要注意,有些情境下前一種方法更好,比如說:“要分別求第1個順序統計量、第二個順序統計量、第三個順序統計量、....、第n個順序統計量”,如果使用“先排序後取”的方法只要 O (nlgn),但是後一種方法,則要O(n^2)(n次select方法)。
順序統計學要解決的問題是:“ 給定一個無序序列,問第k個小的數是什嗎?”順序統計學的演算法是基於快速排序的partition函數,並運用了分治法的思想。第i個順序統計量:第i個最小的值。
本文將結合一些習題以便更好地講解本主題。虛擬碼:最壞情況已耗用時間: O (n^2)最好情況已耗用時間: O (1)期望已耗用時間: O (n)
演算法導論9.2-1中問:“對於上面的randomized_select,一定不會出現長度為0的遞迴調用”,因為在randomized_select中,我們的目的要求出第i個順序統計量,因為調用randomized(A,a,b,i),的條件是A[a,...,b]之間一定有第i個順序統計量,因此如果調用了長度為0的數組,則與條件矛盾。
接下來要證明為什麼期望已耗用時間是 O (n)。(下述證明需要假設所有元素都是不相同的)設隨機變數T(n)表示select演算法的已耗用時間,E(T(n))表示select演算法的期望已耗用時間。我們假設按照最壞情況來討論,即如果劃分了兩個子數組後,都調用較長的那個子數組。
T(n)所有的情況如所示:通過替換法即可證明E(T(n))=O(n)
而上面導致最壞情況出現的原因是randomized_partition的不確定性,怎麼樣能夠得到一個好的劃分呢?Blum、Floyd、Pratt、Rivest、Tarjan發現了一個最壞情況還是線性時間的選擇演算法。
這個演算法的基本思想是:每次找到的都是一個好的劃分,這樣就能保證select的時間是O(n)。具體細節可以看演算法導論9.3節,這裡我要提一些書上沒有的:(1)書上說的“分組,每組5個元素”,此處每組5個元素是最低要求,即只要大於等於5都可以,但是如果每組4個元素,則劃分就不是一個好劃分。演算法導論9.3-1中就需要證明如果每組3個元素,select就不是線性時間的了。
總結一句話:其實這個演算法我們只要把他當做一個封裝的子程式來用就可以了:“select(A,p,q,i)方法一定能夠線上性時間找出A[p...q]中第i個小的元素。”
百度面試題:假設一整型數組存在若干正數和負數,現在通過某種演算法使得該數組的所有負數在正數的左邊,且保證負數和正數間元素相對位置不變。時空複雜度要求分別為:O(n)和O(1)






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.