计算机算法设计与分析课程设计(共14页).docx
《计算机算法设计与分析课程设计(共14页).docx》由会员分享,可在线阅读,更多相关《计算机算法设计与分析课程设计(共14页).docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上用分治法解决快速排序问题及用动态规划法解决最优二叉搜索树问题及用回溯法解决图的着色问题一、 课程设计目的:计算机算法设计与分析这门课程是一门实践性非常强的课程,要求我们能够将所学的算法应用到实际中,灵活解决实际问题。通过这次课程设计,能够培养我们独立思考、综合分析与动手的能力,并能加深对课堂所学理论和概念的理解,可以训练我们算法设计的思维和培养算法的分析能力。二、课程设计内容:1、分治法:(2)快速排序;2、动态规划:(4)最优二叉搜索树;3、回溯法:(2)图的着色。三、概要设计:l 分治法快速排序:分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这
2、些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。分治法的条件:(1) 该问题的规模缩小到一定的程度就可以容易地解决;(2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3) 利用该问题分解出的子问题的解可以合并为该问题的解;(4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 抽象的讲,分治法有两个重要步骤:(1)将问题拆开;(2)将答案合并;l 动态规划最优二叉搜索树: 动态规划的基本思想是将问题分解为若干个小问题,解子问题,然后从子问题得到原问题的解。设计动态规划法的步骤: (1) 找出最
3、优解的性质,并刻画其结构特征;(2)递归地定义最优值(写出动态规划方程);(3)以自底向上的方式计算出最优值;(4)根据计算最优值时得到的信息,构造一个最优解。l 回溯法图的着色回溯法的基本思想是确定了解空间的组织结构后,回溯法就是从开始节点(根结点)出发,以深度优先的方式搜索整个解空间。这个开始节点就成为一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为一个新的或节点,并成为当前扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前的扩展结点就成为死结点。换句话说,这个节点,这个结点不再是一个活结点。此时,应往回(回溯)移动至最近一
4、个活结点处,并使这个活结点成为当前的扩展结点。回溯法即以这种工作方式递归的在解空间中搜索,直到找到所要求的解或解空间中以无活结点为止。四、详细设计与实现:l 分治法快速排序快速排序是基于分治策略的另一个排序算法。其基本思想是,对于输入的子数组,按以下三个步骤进行排序: (1)、分解(divide) 以元素为基准元素将划分为三段,和,使得中任何一个元素都小于,而中任何一个元素大于等于,下标在划分过程中确定。(2)、递归求解(conquer) 通过递归调用快速排序算法分别对和进行排序。(3)、合并(merge) 由于和的排序都是在原位置进行的,所以不必进行任何合并操作就已经排好序了。算法实现题:
5、现将数列23 21 34 45 65 76 86 46 30 39 89 20 2 3 8 47 38 54 59 40进行快速排序。源程序如下:#include using namespace std;#define size 20 int partition(int data,int p,int r) int n=datap,i=p+1,j=r,temp; /将n的元素交换到右边区域 while(true) while(datain) -j; if(i=j) break; temp=datai; datai=dataj; dataj=temp; datap=dataj; dataj=n;
6、return j; void quick_sort(int data,int p,int r) if(p=r) return; int q=partition(data,p,r); quick_sort(data,p,q-1); /对左半段排序 quick_sort(data,q+1,r); /对右半段排序 int main() int i,n,datasize;printf(请输入要排列的数目(=20):);scanf(%d,&n);printf(请输入要排列的数列:n); for(i=0;in;+i) scanf(%d,&datai); quick_sort(data,0,n-1);pri
7、ntf(排列后的数列为:n); for(i=0;in;+i) printf( %d ,datai); printf(n);return 0; 运行结果如下:图1l 动态规划最优二叉搜索树1、最优二叉搜索树问题描述和分析:设是有序集,且,表示有序集S的二叉搜索树利用二叉树的结点存储有序集中的元素。它具有下述性质:存储于每个结点中的元素x大于其左子树中任一结点所存储的元素,小于其右子树中任一结点所存储的元素。二叉树的叶结点是形如的开区间,在表示S的二叉搜索树中搜索元素x,返回的结果有两种情况:(1)在二叉搜索树的内结点中找到。(2)在二叉搜索树的叶结点中确定。设在第(1)中情形中找到元素的概率为;
8、在第(2)种情形中确定的概率为。其中约定。显然有:称为集合S的存取概率分布。在表示S的二叉搜索树T中,设存储元素的结点深度为;叶结点的结点深度为,则:表示在二叉搜索树T中进行一次搜索所需要的平均比较次数,p又成为二叉搜索树T的平均路长。在一般情况下,不同的二叉搜索树的平均路长是不相同的。最优二叉搜索树问题是对于有序集S及其存取概率分布,在所有表示有序集S的二叉搜索树中找到一棵具有最小平均路长的二叉搜索树。2、最优子结构性质:二叉搜索树T的一棵含有结点和叶结点的子树可以看作是有序集关于全集合的一棵二叉搜索树,其存取概率为以下的条件概率:式中,。 设是有序集关于存取概率的一棵最优二叉搜索树,其平均
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 设计 分析 课程设计 14
限制150内