兩個等長公升序序列找中位數

2022-08-20 11:54:08 字數 1631 閱讀 7540

乙個長度為 l 的公升序序列 s,處在第

個位置的數稱為 s 的中位數。例如,若序列

,則

的中位數是 15,兩個序列的中位數是含他們所有元素的公升序序列的中位數。例如,若

,則

的中位數是 11。現在有兩個等長公升序序列 a 和 b,試設計乙個演算法,找出兩個序列 a 和 b 的中位數。

把 a 和 b 混合到一起再找中位數。實現方法簡單且不為本篇文章討論重點,不再詳細敘述。

將公升序序列左右兩邊同時減去相等個數的數字,中位數不變。

令兩個公升序序列 a , b 的中位數為 a , b,求解過程如下:

① 若 a = b,則 a 或 b 即為所求中位數。

② 若 a < b,則捨棄序列 a 中較小的一半,同時捨棄序列 b 中較大的一半,要求兩次捨棄的長度相等。

③ 若 a > b,則捨棄序列 a 中較大的一半,同時捨棄序列 b 中較小的一半,要求兩次捨棄的長度相等。

在保留的兩個公升序序列中,重複過程 ① ,② ,③,直到兩個序列中均只含乙個元素時為止,較小者即為所求的中位數。 

a = b時,容易得到兩個序列在數軸上的大小關係,雖然左右兩邊並沒有絕對大小關係,但是中位數的選取只跟中間位置有關,所以並不影響。

② a != b

a != b時,以 a < b 為例。

對於奇數個數序列:

因為中位數只與公升序序列的位置有關,通過左圖中的有/無絕對大小關係可得 藍1,藍2,綠4,綠5 代表的四個數絕對不可能在中間位置(5),所以把他們刪去,即中位數的大小範圍為 [a , b] 。

對於偶數個數序列:

還是那句話因為中位數只與公升序序列的位置有關,通過右圖中的有/無絕對大小關係可得 藍1,藍2,綠3,綠4 代表的四個數絕對不可能在中間位置(4),所以把他們刪去,即中位數的大小範圍為 ( a , b ]。

//當元素個數為偶數

}else

//同理

else}}

return a[s1]a[s1]:b[s2];

}

求解兩個等長公升序序列的中位數

2011年計算機聯考真題 題目描述 乙個長度為l l 1 的公升序序列s,處在第 l 2 個位置的數稱為s的中位數。例如,若序列s1 11,13,15,17,19 則s1的中位數是15,兩個序列的中位數是含它們所有元素的公升序序列的中位數。例如,若s2 2,4,6,8,20 則s1和s2的中位數是1...

求解兩個公升序序列的中位數

描述 乙個長度為l l 1 的公升序序列s,處在第l 2 若為小數則去掉小數後加1 個位置的數稱為s的中位數。例如,若序列s1 11,13,15,17,19 則s1的中位數是15。兩個序列的中位數是含它們所有元素的公升序序列的中位數。例如,若s2 2,4,6,8,20 則s1和s2的中位數是11。現...

求兩個有序非等長陣列中位數

本部落格所用演算法是受另外一篇部落格所啟發,但該博主給出的 很多邊界條件和n m為偶數的情況未考慮到,這裡我做了一定的完善。原題如下 there are two sorted arrays nums1 and nums2 of size m and n respectively.find the m...