计算机算法设计与分析课程设计word版本Word文档下载推荐.docx
- 文档编号:13641319
- 上传时间:2022-10-12
- 格式:DOCX
- 页数:14
- 大小:371.72KB
计算机算法设计与分析课程设计word版本Word文档下载推荐.docx
《计算机算法设计与分析课程设计word版本Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机算法设计与分析课程设计word版本Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
(2)将答案合并;
●动态规划—最优二叉搜索树:
动态规划的基本思想是将问题分解为若干个小问题,解子问题,然后从子问题得到原问题的解。
设计动态规划法的步骤:
(1)找出最优解的性质,并刻画其结构特征;
(2)
(2)递归地定义最优值(写出动态规划方程);
(3)(3)以自底向上的方式计算出最优值;
(4)(4)根据计算最优值时得到的信息,构造一个最优解。
●回溯法—图的着色
回溯法的基本思想是确定了解空间的组织结构后,回溯法就是从开始节点(根结点)出发,以深度优先的方式搜索整个解空间。
这个开始节点就成为一个活结点,同时也成为当前的扩展结点。
在当前的扩展结点处,搜索向纵深方向移至一个新结点。
这个新结点就成为一个新的或节点,并成为当前扩展结点。
如果在当前的扩展结点处不能再向纵深方向移动,则当前的扩展结点就成为死结点。
换句话说,这个节点,这个结点不再是一个活结点。
此时,应往回(回溯)移动至最近一个活结点处,并使这个活结点成为当前的扩展结点。
回溯法即以这种工作方式递归的在解空间中搜索,直到找到所要求的解或解空间中以无活结点为止。
四、详细设计与实现:
●分治法—快速排序
快速排序是基于分治策略的另一个排序算法。
其基本思想是,对于输入的子数组,按以下三个步骤进行排序:
(1)、分解(divide)以元素为基准元素将划分为三段,和,使得中任何一个元素都小于,而中任何一个元素大于等于,下标在划分过程中确定。
(2)、递归求解(conquer)通过递归调用快速排序算法分别对和进行排序。
(3)、合并(merge)由于和的排序都是在原位置进行的,所以不必进行任何合并操作就已经排好序了。
算法实现题:
现将数列{2321344565768646303989202384738545940}进行快速排序。
源程序如下:
#include<
iostream>
usingnamespacestd;
#definesize20
intpartition(intdata[],intp,intr)
{
intn=data[p],i=p+1,j=r,temp;
//将<
n的元素交换到左边区域
//将>
n的元素交换到右边区域
while(true)
{
while(data[i]<
n)++i;
while(data[j]>
n)--j;
if(i>
=j)
break;
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
data[p]=data[j];
data[j]=n;
returnj;
}
voidquick_sort(intdata[],intp,intr)
{if(p>
=r)
return;
intq=partition(data,p,r);
quick_sort(data,p,q-1);
//对左半段排序
quick_sort(data,q+1,r);
//对右半段排序
}
intmain()
inti,n,data[size];
printf("
请输入要排列的数目(<
=20):
"
);
scanf("
%d"
&
n);
请输入要排列的数列:
\n"
for(i=0;
i<
n;
++i)
scanf("
data[i]);
quick_sort(data,0,n-1);
排列后的数列为:
printf("
%d"
data[i]);
printf("
return0;
运行结果如下:
图1
●动态规划—最优二叉搜索树
1、最优二叉搜索树问题描述和分析:
设是有序集,且,表示有序集S的二叉搜索树利用二叉树的结点存储有序集中的元素。
它具有下述性质:
存储于每个结点中的元素x大于其左子树中任一结点所存储的元素,小于其右子树中任一结点所存储的元素。
二叉树的叶结点是形如的开区间,在表示S的二叉搜索树中搜索元素x,返回的结果有两种情况:
(1)在二叉搜索树的内结点中找到。
(2)在二叉搜索树的叶结点中确定。
设在第
(1)中情形中找到元素的概率为;
在第
(2)种情形中确定的概率为。
其中约定。
显然有:
称为集合S的存取概率分布。
在表示S的二叉搜索树T中,设存储元素的结点深度为;
叶结点的结点深度为,则:
表示在二叉搜索树T中进行一次搜索所需要的平均比较次数,p又成为二叉搜索树T的平均路长。
在一般情况下,不同的二叉搜索树的平均路长是不相同的。
最优二叉搜索树问题是对于有序集S及其存取概率分布,在所有表示有序集S的二叉搜索树中找到一棵具有最小平均路长的二叉搜索树。
2、最优子结构性质:
二叉搜索树T的一棵含有结点和叶结点的子树可以看作是有序集关于全集合的一棵二叉搜索树,其存取概率为以下的条件概率:
式中,。
设是有序集关于存取概率的一棵最优二叉搜索树,其平均路长为。
的根结点存储元素。
其左右子树和的平均路长分别为和。
由于和中结点深度是它们在中的结点深度减1,故有:
由于是关于集合的一棵二叉搜索树,故。
若,则用替换可得到平均路长比更小的二叉搜索树。
这与是最优二叉搜索树矛盾。
故是一棵最优二叉搜索树。
同理可证也是一棵最优二叉搜索树。
因此最优二叉搜索树问题具有最优子结构性质。
3、递归计算最优值:
最优二叉搜索树的平均路长为,则所求的最优值为。
由最优二叉搜索树问题的最优子结构性质可建立计算的递归式如下:
初始时,。
记为,则为所求的最优值。
计算的递归式为:
据此,可设计出解最优二叉搜索树问题的动态规划算法。
算法实现题:
给出标识符集{1,2,3}={do,if,stop}存取概率,若b1=0.4b2=0.2b3=0.05a0=0.2a1=0.05a2=0.05a3=0.05构造一棵最优二叉搜索树
#include<
voidOptimalBinarySearchTree(floata[],floatb[],intn,floatm[][20],ints[][20],floatw[][20])
{//求解最优值的方法
inti,r,k;
floatt;
=n;
i++){
w[i+1][i]=a[i];
//搜索不到的点,最优解为0
m[i+1][i]=0;
}
for(r=0;
r<
r++)
for(i=1;
=n-r;
intj=i+r;
//左子树为空
w[i][j]=w[i][j-1]+a[j]+b[j];
m[i][j]=m[i+1][j];
s[i][j]=i;
for(k=i+1;
k<
=j;
k++){
t=m[i][k-1]+m[k+1][j];
if(t<
m[i][j])
{//以k为根节点,左子树不为空
m[i][j]=t;
s[i][j]=k;
m[i][j]+=w[i][j];
i++)
for(intj=1;
j<
j++)
cout<
<
s["
]["
]="
s[i][j]<
endl;
voidprint(inti,intj,ints[][20],intS[])//递归输出结果
{
if(j>
=i){
intk=s[i][j];
cout<
("
;
print(i,k-1,s,S);
)"
"
S[k]<
print(k+1,j,s,S);
intmain()
{//主函数
intn,i;
floata[20],b[20],m[20][20],w[20][20];
ints[20][20],S[20];
请输入有序集元素的个数n:
cin>
>
请输入有序集各元素的值S[i](一共"
n<
个):
S[i];
请输入概率数组a的各元素的值a[i](一共"
n+1<
a[i];
请输入概率数组b的各元素的值b[i](一共"
b[i];
OptimalBinarySearchTree(a,b,n,m,s,w);
最优值即平均步长为:
m[1][n]<
图2
1、图的m着色问题描述:
给定无向连通图G和m种不同的颜色。
用这些颜色为图G的各顶点着色,每个顶点着一种颜色。
是否有一种着色法使G中每条边的2个顶点着不同颜色。
这个问题是图的m可着色判定问题。
若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。
求一个图的色数m的问题称为图的m可着色优化问题。
2、算法设计:
一般连通图的可着色法问题并不仅限于平面图。
给定图和m种颜色,如果这个图不是m可着色,则给出否定答案;
如果这个图是m可着色的,找出所有不同的着色方法
下面根据回朔法的递归描述框架设计图的m着色算法。
用图的邻接矩阵a表示无向量连通图。
若属于图的边集E,则,否则。
整数1,2,…,m用来表示m种不同颜色。
顶点所有颜色用表示,数组是问题的解向量。
问题的解空间可表示为一棵高度为n+1的完全m叉树。
解空间树的第层中每一结点都有m个儿子,每个儿子相应于的m个可能的着色之一。
第n+1层结点均为叶结点。
在下面的解图的m可着色问题的回溯法中,搜索解空间中第层子树。
类的数据成员记录解空间中结点信息,以减少传给的参数。
记录当前已找到的m着色
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 设计 分析 课程设计 word 版本