查詢兩個有序序列的中位數

2021-09-29 23:27:12 字數 773 閱讀 5315

舉例:序列a(2,4,6,8,20),序列b(11,13,15,17,19)

第一種方法:

可以先把兩個有序表合併排列,之後查詢中位數,由於我們只需要檢視其第(2n-1)/2個元素,故只需要排列好前(2n-1)/2-1個元素,然後返回此時兩個序列中的較小值,時間複雜度o(n)

int seach2(int arr1,int arr2,int n) 

else

k++;

} return arr1[i] > arr2[j] ? arr2[j] : arr1[i];

}

第二種方法:減治法,時間複雜度o(logn)

分別求出序列a 和b 的中位數,設為a 和b,求序列a 和b 的中位數過程如下:

1)若a=b,則a 或b 即為所求中位數,演算法結束。

2)若a3)若a>b,則捨棄序列a 中較大的一半,同時捨棄序列b 中較小的一半,要求捨棄的長度相等;(此時中位數在a的下半部分,b的上半部分)

在保留的兩個公升序序列中,重複過程1)、2)、3),直到兩個序列中只含乙個元素時為止,較小者即為所求的中位數。

int search(int a, int b, int n)

else

}else

else

}} return a[start1] < b[start2] ? a[start1] : b[start2];

}

查詢 兩個有序序列的中位數

已知有兩個等長的非降序序列s1,s2,設計函式求s1與s2並集的中位數。有序序列,的中位數指a n 1 2 的值,即第 個數 a 0 為第1個數 輸入分三行。第一行給出序列的公共長度n 0在一行中輸出兩個輸入序列的並集序列的中位數。5 1 3 5 7 9 2 3 4 5 646 100 10 1 1...

兩個有序序列的中位數

5 7 兩個有序序列的中位數 25分 已知有兩個等長的非降序序列s1,s2,設計函式求s1與s2並集的中位數。有序序列a0,a1,an 1a 0,a 1,cdots,a a 0 a 1 a n 1 的中位數指a n 1 2a a n 1 2 的值,即第 n 1 2 lfloor n 1 2 rflo...

兩個有序序列的中位數

問題 已知有兩個等長的非降序序列s1,s2,設計函式求s1與s2並集的中位數。有序序列a 0 a 1 a n 1 的中位數指a n 1 2 的值,即第 n 1 2 個數 a 0 為第1個數 演算法描述 輸入兩個長度自定且等長的陣列,然後對他們進行賦值。演算法的思路是分別取他們的中位數進行比較,假設兩...