兩個已排序的陣列,個數相同且都為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 此時堆頂元素假...