舉例:序列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個數 演算法描述 輸入兩個長度自定且等長的陣列,然後對他們進行賦值。演算法的思路是分別取他們的中位數進行比較,假設兩...