演算法實現 X和Y的中位數問題

2021-06-05 16:47:35 字數 1484 閱讀 5711

問題描述:

設x[0:n-1]和y[0:n-1]為2 個陣列,每個陣列中含有n 個已排好序的數。試設計乙個

o(log n)時間的演算法,找出x和y 的2n個數的中位數。

例如,當n=7,x=[1,3,6,7,8,9,10];y=[2,4,5,11,12,13,14]時,x 和y

的中位數是7。

«演算法設計:

對於給定的n 個元素的陣列x[0:n-1]和y[0:n-1],試設計乙個o(log n)時間演算法,計

算x 和y 的中位數。

«資料輸入:

輸入資料由檔名為input.txt的文字檔案提供。

檔案的第1行是每個陣列中元素個數n;接下來的2行中每行有n 個整數,分別為x 和

y 中元素。

«結果輸出:

將計算出的x 和y 的中位數輸出到檔案output.txt中。

輸入檔案示例 輸出檔案示例

input.txt output.txt

7 7

1 3 6 7 8 9 10

2 4 5 11 12 13 14

#include #include #include using namespace std;

bool ismiddle( int a, int b, int max, int &i, int& upper, int& lower , int& result )

else

bresult = true;

} else

else

if ( a[i] >= b[max-i-2] && a[i] <= b[max-i-1] )

}result/=2;

return bresult;

}int getmiddle( int a1, int a2, int length )

} i2 = ( l2+u2) /2;

if ( abs( u2-l2) >1 )

}} return result;

}int main()

ofstream outfile( outfilename.c_str(), ios_base::out | ios_base::trunc );

if ( outfile.fail() )

int len =0;

while ( !(infile>> len) )

if ( len <=0 )

int *a1 = new int[len];

int *a2 = new int[len];

int number=0, i=0;

for ( i=0; i>number) && !infile.eof() );

if ( i3.:輸入二叉樹的兩個節點,輸出它們的最近公共祖先節點

struct node

4.上億個單詞,如何設計演算法去掉其中重複的單詞,要求寫出程式,並估算時間和空間複雜度

BFPRT(中位數的中位數)演算法

又稱為 中位數的中位數演算法 該演算法由 blum floyd pratt rivest tarjan 在1973年提出,最壞時間複雜度為o n 最差的空間複雜度為o logn 演算法步驟 1 將 n 個元素劃分為 n 5 個組,每組 5 個元素,若有剩餘,捨去 2 使用排序方法找到 n 5 個組中...

演算法 動態中位數問題

輸入一組整數a1,a2,an 每輸入乙個整數,輸出到此時為止的中位數。中位數定義 如果數串的大小是偶數 2j,中位數是從小到大排列的第 j 個數 如果數串的大小是奇數 2j 1,中位數是從小到大排列的第 j 1 個數。一組整數,數字和數字之間以空格隔開。一組整數,數字和數字之間以空格隔開。最後乙個數...

演算法題 中位數問題

平時我們要找中位數還得排一下序,但是如果掌握了堆這乙個結構。我們就只需要乙個大頂堆和乙個小頂堆就可以了。大頂堆和小頂堆的性質不贅述,但是乙個比較重要的提一下,就是大頂堆堆頂是整個堆的最大值,小頂堆的頂必然是最小值。並且我們要實現的中位數的演算法,還需要保證小頂堆的最小值大於大頂堆的最大值。1 有了這...