分治
分治法是將乙個規模為n的問題分解為k個規模較小的子問題。注意:這裡的子問題一定是相互獨立且與原問題相同。用遞迴的方法解這些子問題。然後將各子問題的解合併到原問題的解。
二分查詢演算法是運用分治的典型例子
分治-二分查詢
給定已按公升序排好序的n個元素a[0:n-1],現要在這n個元素中找出一特定元素x。
分析據此容易設計出二分搜尋演算法:
在 a[0] <= a[1] <= ... <= a[n-1] 中搜尋 x, 找到x時返回其在陣列中的位置,否則返回-1
int binarysearch(int a, int x, int n)
return -1; // 未找到x
}例如:
#includeusingnamespace
std;
#include
int bifind(int a,int x,int n)//
二分查詢
return -1;}
intmain()
cout
=0;j--) for(i=0;i)
}for(i=0;i<20;i++)
cout
<'';
cout
) cout
<<"
未查找到:
"
}
分治法 二分查詢
1 首先二分查詢滿足分治法的四個條件 1 原問題的解可以通過分解為若干個小的問題來解決 將原陣列序列可分解為兩個子串行 2 小的問題的解決方法和原問題的解決方法大致相似 都是確定乙個序列的上界和下界然後求得mid進行比較 3 小問題的解可以通過合併從而得到原問題的解 在子串行中可以更容易得到解從而r...
分治法 二分查詢
問題描述 二分查詢又稱為折半查詢,它要求待查詢的資料元素必須是按關鍵字大小有序排列的。問題描述 給定已排好序的n個元素s1,sn,現要在這n個元素中找出一特定元素x。首先較容易想到使用順序查詢方法,逐個比較s1,sn,直至找出元素x或搜尋遍整個序列後確定x不在其中。顯然,該方法沒有很好地利用n個元素...
分治法 二分查詢
問題 給定已按公升序排好序的n個元素a 0 n 1 現要在這n個元素中找出一特定元素x,返回其 首次 出現的位置。雖說是老問題,但是並不可簡單忽視,網上有人說 十個二分九個錯 還是要好好梳理一下。問題一,區間開閉 設查詢區間左右端點為left與right,這兩個點其實開閉均可,一般統一用閉合。問題二...