- 4
- 0
- 约4.24千字
- 约 8页
- 2023-05-10 发布于湖北
- 举报
1、分治法
分治法的基本思想是将一个规模为n 的问题分解为k 个规模较小的子问
题,这些子问题相互独立且与原问题相同。递归的解这些子问题,然后将各子问题的解合并得到原问题的解。
分治法所能解决的问题一般具有以下几个特征:
该问题的规模缩小到一定的程度就可以容易地解决
该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
利用该问题分解出的子问题的解可以合并为该问题的解;
该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
分治法的基本步骤:
分治法在每一层递归上都有三个步骤:
分解:将原问题分解为若干个规模较小,相互独立,与原问题形式
相同的子问题;
解决:若子问题规模较小而容易被解决则直接解,否则递归地解各
个子问题;
合并:将各个子问题的解合并为原问题的解。
它的一般的算法设计模式如下:
[cpp] view plain copy
[cpp] view plain copy
1.
Divide-and-Conquer(P)
其中|P|表示问题P 的规模;n0 为一阈值,表示当问题P 的规模不
其中|P|表示问题P 的规模;n0 为一阈值,表示当问题P 的规模不
超过n0 时,问题已容易直接解出,不必
再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规
模的问题P。因此,当P 的规模不超过n0
时直接用算法ADHOC(P)求解。算法MERGE(y1,y2,...,yk)是该分治法
中的合并子算法,用于将P 的子问题P1
,P2 ,...,Pk 的相应的解y1,y2,...,yk 合并为P 的解。
2.
3.
4.
5.
6.
7.
8.
if |P|≤n0
then return(ADHOC(P))
将 P 分解为较小的子问题 P1 ,P2 ,...,Pk
for i←1 to k
do yi ← Divide-and-Conquer(Pi) △ 递归解决 Pi
T ← MERGE(y1,y2,...,yk) △ 合并子问题
return(T)
子问题的划分
子问题的划分:人们从大量实践中发现,在用分治法设计算法时,最
好使子问题的规模大致相同。换句话说,将一个问题分成大小相等的k
个子问题的处理方法是行之有效的。许多问题可以取 k = 2。这种使子
问题规模大致相等的做法是出自一种平衡(balancing)子问题的思想,它
几乎总是比子问题规模不等的做法要好。
2、二分搜索
大部分程序员应该都知道二分搜索的大致原理,这里不再赘述。需
要说明的是二分搜索是所有以比较为基础的搜索算法时间复杂度最低
的算法。用二叉树描速二分查找算法,最坏情况下与二叉树的最高阶相
同。比较二叉树线性查找也可用二叉树表示,最坏情况下比较次数为数
组元素数量。任何一种以比较为基础的搜索算法,其最坏情况所用时间不可能低于
O(logn)。
x:A[l]不成功x::A [ 2]三不成功
x:A[l]
不成功
x::A [ 2]
三
不成功
x ; _i \
x ; _i \ [n ]
不成功
不成功
图 3- 1- 1 模 拟 线 性搜索过程
I x : A [l (n+ l )/2 J J
x
x : A [L(n + l )I14 J]
-x:.A[l ( 3u + l ) / 4
已 [ l ] | . ..x : A [n ]I x :l \.[ l ( n + l ) /2 」 - 1 ] I] I x
已 [ l ] | . ..
x : A [n ]
图 3 - 1 - 2 模 拟 折 半 搜 索 过 程
_二分搜索程序清单如下:
_
_[cpp] view plain copy
_
1. //2d3 二分搜索技术
2.
#include stdafx.h
3.
#include iostream
4.
using namespace std;
5.
6.
templateclass Type
7.
int BinarySearch(Type a[],const Type
x,int
n);
8.
9.
int main()
10.
{
11.
int x = 6;
12.
int a[10];
13.
for(int i=0; i10; i++)
14.
{
15.
a[i] = i + 1;
16.
}
17.
coutBinarySearch(a,x,10)endl;
18.
return 0;
19.
}
20.
21.
templateclass Type
22.
int BinarySearch(Type a[],const Type
x,int
n)
23.
{
24.
int left = 0;
25.
int right = n-1;
26
您可能关注的文档
最近下载
- 2025年煤矿安全生产开工第一课培训课件.ppt
- 基于PLC的盾构机单液注浆系统设计_本科毕业设计(论文).doc VIP
- CDGA数据治理工程师认证考试2024真题模拟试卷(100题,含答案).pdf VIP
- 微网经济调度问题的混合整数规划方法.pdf VIP
- 河南成人2024学位英语考试真题及答案.docx VIP
- 长江中下游平原课件八年级地理下学期商务星球版.pptx VIP
- 商务星球版八年级地理下册长江中下游平原.pptx VIP
- 黄浦区2011高考二模试卷及答案.doc VIP
- 常用草药验方手册(江西万年县革委会1970).pdf
- 长江中下游平原课件商务星球版地理八年级下册.pptx VIP
原创力文档

文档评论(0)