設x[1...n]和y[1...n]為兩個陣列,每個都包含n個已排序好的數。給出乙個求陣列x和y中所有2n個元素的中位數的、o(lgn)時間的演算法。
演算法思想:
該演算法類似於二分查詢演算法
1.兩個陣列中小於median的個數為(n - 1)個,假設該median為陣列a中的第k個,k為陣列下標,那麼在陣列a中已經存在k個值小於median,那麼在陣列b中必然有(n - 1) - k = (n-k-1)個數小於median,如果b[n - k - 2] <= median <= b[n - k - 1],那麼median就找到了,如果median >= b[n - k - 1],則搜尋陣列a中[0, k-1]中的元素,如果median <= b[n - k - 2],則搜尋陣列a中[k+1, n- 1]中的元素.
2.依次類推,類似二分查詢,不斷重新設定low,high,middle
3.如果在陣列a中沒找到,則在陣列b中找
#includeusing namespace std;
int find(int *a,int *b,int n)
int low=0,high=n-1;
while(low<=high) }
return -1;
}int main()
; int b=;
if(find(a,b,5)==-1)
cout<
兩個排序陣列的中位數
求兩個排序陣列中位數,這道題是很有意思的一道題目,演算法導論中9.3 8題,這題必須在o logn 的時間複雜度求解,否則肯定悲劇。這題有個關鍵的條件,那就是這兩個陣列長度相等 思路如下 陣列a 1,3,5,7,9 陣列b 2,4,6,8,10 首先取二者的中位數,在o 1 時間複雜度內求出,那麼陣...
兩個排序陣列的中位數
求兩個排序陣列中位數,這道題是很有意思的一道題目,演算法導論中9.3 8題,這題必須在o logn 的時間複雜度求解,否則肯定悲劇。這題有個關鍵的條件,那就是這兩個陣列長度相等 思路如下 陣列a 1,3,5,7,9 陣列b 2,4,6,8,10 首先取二者的中位數,在o 1 時間複雜度內求出,那麼陣...
兩個排序陣列的中位數
兩個排序的陣列a和b分別含有m和n個數,找到兩個排序陣列的中位數,要求時間複雜度應為o log m n 給出陣列a 1,2,3,4,5,6 b 2,3,4,5 中位數3.5 給出陣列a 1,2,3 b 4,5 中位數 3 public double findmediansortedarrays in...