演算法導論習題9 3 8

2021-08-27 02:38:26 字數 680 閱讀 3220

兩個已排序的陣列,個數相同且都為n,求在lgn時間內求出兩陣列共同的中位數。

思路:分別求出兩陣列的中位數mid1,mid2,如果相等則即為所求中位數,如果mid1**如下:

#includeusing namespace std;

//找出下標從p到r範圍之間的中位數

int findmid(int a,int p,int r)

int selectmid(int a,int b,int length,int p1,int r1,int p2,int r2)

if(r2-p2==0)

mid1=findmid(a,p1,r1);

mid2=findmid(b,p2,r2);

if(mid1==mid2)

//如果mid1大於mid2則取a中下標範圍內的的前半部分,b中小標範圍內的後半部分

else if(mid1>mid2)

//如果mid1大於mid2則取a中下標範圍內的的hou半部分,b中小標範圍內的前半部分

else

//遞迴呼叫該函式知道找到中位數為止

selectmid(a,b,r1-p1+1,p1,r1,p2,r2);

}int main()

; int b[10]=;

int mid=selectmid(a,b,10,0,9,0,9);

cout<

演算法導論習題9 3 8

兩個已排序的陣列,個數相同且都為n,求在lgn時間內求出兩陣列共同的中位數。思路 分別求出兩陣列的中位數mid1,mid2,如果相等則即為所求中位數,如果mid1 如下 includeusing namespace std 找出下標從p到r範圍之間的中位數 int findmid int a,int...

演算法導論 習題 5 4 1

題 乙個房間裡必須要有多少人,才能讓某人和你生日相同的概率至少為1 2?必須要有多少人,才能讓至少兩個人生日為7月4日的概率大於1 2?解 1.假設一年有n 365 天,房間裡面有x人 不算自己 為求某人與自己生日相同,可求其反面,即房間裡面沒人跟自己生日相同,他們每個人生日可以在n天中選擇除去我生...

演算法導論 習題 6 5 8

題 請給出乙個時間為o nlgk 用來將k個已排序鍊錶合併為乙個排序鍊錶的演算法。此處n為所有輸入鍊錶中元素的總數。k個已排序鍊錶,假設每乙個鍊錶的第乙個元素為root i i 1,2,3.k 那麼可以為這k個元素root i 構造乙個最小堆heap min,其時間複雜度為o lgk 此時堆頂元素假...