採用分治法完成如下任務:
中位數問題
問題描述
設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,然後圍...