用合併排序算法解決逆序數問題

     這段時間本人開始學習《算法導論》這本書,並且將書中的某點問題的解決寫入自己的博客中,當成對自己的勉勵,如果自己寫的文章中有什麼錯誤之處,請高手指正。

     分治法(divide-and-conquer)。爲了解決一個給定的問題,算法要一次或多次地遞歸調用其自身來解決相關的子問題。通常採用分治策略:1、分解:將原問題劃分成一系列子問題;2、解決:遞歸地解各子問題。若子問題足夠小,則直接求解;3、合併:將子問題的結果合併成原問題的解。

     逆序對問題:設A[1..n]是一個包含n個不同數的數組。如果在i<j的情況下,有A[i]>A[j],則(i,j)就稱爲A中的一個逆序對。比如數組<2,3,8,6,1>有5個逆序對<2,1>,<3,1>,<8,1>,<6,1>,<8,6>。給出一個算法,它能用O(nlogn)的最壞情況運行時間,確定n個元素的任何排列中逆序對的數目。方法是修改合併排序算法解決這個問題,算法的時間複雜度是O(nlogn)。(《算法導論》(第二版)P24,思考題2-4:逆序對)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章