1. 程式人生 > >兩個有序序列的中位數(詳解)

兩個有序序列的中位數(詳解)

1. 實踐題目

7-3 兩個有序序列的中位數

2. 問題描述

在一行中輸出兩個輸入序列的並集序列的中位數。時間複雜度不能大於O(logn)

3. 演算法描述(不能貼上程式)


因為時間複雜度不能大於logn,所以把原序列排好序再來找中位數是不可能的了(快排nlogn)。故我採用二分法的思想,對原序列進行二分處理,比較中位數。比到最後兩個指標的情況如圖所示,此時較小的數即為兩序列的中位數。

4. 演算法時間及空間複雜度分析(要有分析過程)

時間複雜度O( log(n)*log(n) )。每次取兩個陣列各自的中位數,用來比較,取小的那個的後面和大的的前面。然後再迭代一次,再比較,取向應的數。以考慮中位數在序列中的情況。

空間複雜度 O(1)

5. 程式執行截圖

 


6.心得體會(對本次實踐收穫及疑惑進行總結)

明白了相同問題可以有多種解法。看到時間複雜度不能大於O(logn)第一反應就是用二分法,對序列進行劃分處理,所以整體的解題思路比較清晰。