算法设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法的概念
1)算法是一个有穷规则的集合
2)算法是求解一个问题类的无二义性的有穷过程。
3)用与给定计算机通讯的语言编写的,并且可以在这种计算机上执行的过程叫做算法
4)算法是对所有有效输入都停机的图灵机
算法的五个特征
1)有穷性:计算步骤有限,且有一定的顺序,同时每一步骤都能在有限的时间内完成
2)确定性:每个计算步骤必须是确定的、无二义性
3)可终止性:运算能在有限的时间内完成,没有死循环4)输入:有零或多个输入
5)输出:有一个或多个输出
算法设计的步骤
一、问题的陈述
已知什么,求什么,提附加问题以帮助理解用户的要求二、模型的选定三、算法的详细设计四、算法的正确性五、算法的实现
1)完善子程序
2)选合适的数据结构
六、算法的分析七、程序的测试
算法的评价
1.正确性
2.执行时间最短
3.复杂性最小
这些因素与使用的机器、程序设计语言、程序员有关
算法的复杂性一般随问题规模的增长而增大。
算法复杂性= 算法所需要的计算机资源
顺序统计
问题:从n个元素中找出第k个最小元素(或最大元素) 。把n个元素排成非递减序,从中找出第K个最小元素O(nlog2n)
把这n个元素放在集合S中,从S中随机地选出一个元素a,a为界,把全体元素分成:
S1 S2 S3
{小于a} {等于a} {大于a}
再根据S1、S2、S3排中元素个数从某个子集中寻找。
先从S中找到中值元素m,再用m去划分S
矩阵乘法
方法三:Strassen的分治算法
令P=(A11+A22)(B11+B22), Q=(A21+A22)B11,R=A11(B12-B22), S=A22(B21-B11),T=(A11+A12)B22,U=(A21-A11)(B11+B12),V=(A12-A22)(B21+B22)
则C11=P+S-T+V, C12=R+T,C21=Q+S, C22=P+R-Q+U
T(n)=O(n log7)=O(n2.81)
大整数乘法方法二:设n=2r,将两个数都按位数划分成两段
即x=a2n/2+b, y=c2n/2+d 则:
xy=(a2n/2+b)(c2n/2+d)=ac2n+(ad+bc) 2n/2
+bd
T(n)=O(n2)
方法三:
xy=(a2n/2+b)(c2n/2+d)=ac2n+(ad+bc) 2n/2+bd
= ac2n+((a-b)(d-c)+ac+bd)2n/2+bd
T(n)=O(n log3)=O(n1.59
)
第三章动态规划
概念:动态规划方法涉及多级决策过程中的最优化问题。
它把求解的问题分成许多级或许多子问题,然后按顺序求
解各子问题;前一子问题的解为后一子问题的求解提供了
有用的信息;并且在求解任一子问题时,保留那些有可能
达到最优的局部解,丢弃其它局部解;依次解决各子问题,
最后一个子问题的解就是初始问题的解。
基本思想:分治思想和解决冗余。
重叠子问题:在用递归算法自顶向下解问题时,每次产生
的子问题并不总是新问题,有些子问题被反复计算多次。
最优子结构:当问题的最优解包含了其子问题的最优解
时,称该问题具有最优子结构性质。
最优性原理又称为最优子结构性质:
如果有一决策序列包含有非最优的决策子序列,则该
决策序列一定不是最优的。即一个最优策略的子策略总是
最优的。
解题步骤:
1、找出最优解的性质,并刻画其结构特征;
2、递归地定义最优值(写出动态规划方程);
3、以自底向上的方式计算出最优值;
4、根据计算最优值时记录的信息,构造最优解。
动态规划与分治法的区别和联系
相同之处:都是将原问题分解成若干个子问题,先求解子
问题,然后从这些子问题的解得到原问题的解。
区别:分治法中被分解的子问题之间相互独立;在动态规
划中,经分解的子问题往往不是互相独立的,各子问题必
须按顺序求解,前一子问题的解是求解下一子问题的条
件,已求解子问题的有用解保存起来,以免重复计算。
资源分配问题
)}
(
{
max
)
(
)}
(
)
(
{
max
)
(
....
..........
)}
(
)
(
{
max
)
(
1
1
1
2
1
2
2
2
1
1
2
x
G
x
f
x
x
f
x
G
x
f
x
x
f
x
G
x
f
a
x
x
a
x
x
n
n
n
n
a
x
x
n
n
≤
≤
≤
≤
≤
≤
-
≤
≤
≤
=
-
+
=
-
+
=
单源最短路径问题
cost(i,j)=min{C(j,r)+cost(i+1,r)}
r∈V i+1
Procedure Fgraph
{ for i ←1 to n cost[i] ←0;
for j =n-1 step –1 to 1 do
{找顶点r,使
cost[j]←C(j,r)+cost[r];
D[j] ←r ;
}
P[1] ←1 ; P[k] ←n;
for j=2 to k-1 do P[j] ←D[P[j-1]]
}
资源分配问题
)}
(
{
max
)
(
)}
(
)
(
{
max
)
(
....
..........
)}
(
)
(
{
max
)
(
1
1
1
2
1
2
2
2
1
1
2
x
G
x
f
x
x
f
x
G
x
f
x
x
f
x
G
x
f
a
x
x
a
x
x
n
n
n
n
a
x
x
n
n
≤
≤
≤
≤
≤
≤
-
≤
≤
≤
=
-
+
=
-
+
=
流水作业车间调度问题
算法设计:流水作业调度问题的Johnson算法
(1)令};
|
{
},
|
{
2
1i
i
i
i
b
a
i
N
b
a
i
N≥
=
<
=
(2)将N1中作业依a i的非减序排序;将N2中作业依b i的
非增序排序;
(3)N1中作业接N2中作业构成满足Johnson法则的最优调
度。
货郎担问题
算法设计:设T( i,S)是由结点i出发,经过结点集S中每
个结点各一次并回到初始结点1的一条最短路径长度,则
T(1,V-{1})就是一条最优的周游路线长度。动态规划模型:
T(1,V-{1})=min{d1k+T(k,V-{1,k})}
则,T( i,S)= d i,1,当S为空时;
T( i,S)=min{d ij+T(j,S-{j})} ,当S中有多于
一个元素时,
j ∈S,i ∉S