分治法 中位數問題,C

2021-09-18 01:47:45 字數 1087 閱讀 6384

採用分治法完成如下任務:

中位數問題

問題描述

設x[ 0 : n - 1]和y[ 0 : n – 1 ]為兩個陣列,每個陣列中含有n個已排好序的數。找出x和y的2n個數的中位數。

程式設計任務

利用分治策略試設計乙個o (log n)時間的演算法求出這2n個數的中位數。

資料輸入

由檔案input.txt提供輸入資料。檔案的第1行中有1個正整數n(n<=200),表示每個陣列有n個數。接下來的兩行分別是x,y陣列的元素。

結果輸出

程式執行結束時,將計算出的中位數輸出到檔案output.txt中。

輸入檔案示例

input.txt

35 15 18

3 14 21

輸出檔案示例

output.txt

14 實現提示

比較兩個序列的中位數大小,如果兩個數相等,則該數為整個2n個資料的中位數,否則通過比較,分別減少兩個序列的查詢範圍,確定查詢的起止位置,繼續查詢。

#include

using

namespace std;

intgetmedian

(int x,

int y,

int xlow,

int xhigh,

int ylow,

int yhigh)

;int

main()

intgetmedian

(int x,

int y,

int xlow,

int xhigh,

int ylow,

int yhigh)

else

if(x[xmid]

< y[ymid]

)else

return x[xmid]

;getmedian

(x, y, xlow, xhigh, ylow, yhigh)

;}

找中位數問題 分治法

題目 設a和b都是從小到大已經排好序的n個不等的整數構成的陣列,如果把a與b合併後的陣列記作c,設計乙個演算法找出c的中位數。解題思路 思路一 對將a和b合併數組成c,並且進行排序,然後直接輸出中位數。該演算法的時間複雜度為 o nlogn 空間複雜度為 o n 思路二 利用分治法。假定a 0,n ...

演算法實驗之分治法求中位數

利用分治策略試設計乙個o log n 時間的演算法求出這2n個數的中位數。要輸入的內容在檔案1.txt中,輸出的結果在檔案2.txt中。include includeusing namespace std template t mid t a,t b,int len int n if len 2 0...

主元素,中位數以及快速排序問題(分治法問題)

ibm最後有道求主元素的題目,乙個陣列有n個元素,其中有超過n 2的元素相同,請找出這個元素。時間複雜度為o n 方法1 如果乙個元素的個數超過n 2則這個元素必然是這n個元素的中位數。則這個題目是找中位數。方法是通過快速排序變化的來的演算法。如下 做這個題目複習了下快排,選擇乙個pivot,然後圍...