《计算机算法设计与分析》课程设计.docVIP

《计算机算法设计与分析》课程设计.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《计算机算法设计与分析》课程设计

用分治法解决快速排序问题及用动态规划法解决最优二叉搜索树问题及用回溯法解决图的着色问题 课程设计目的: 《计算机算法设计与分析》这门课程是一门实践性非常强的课程,要求我们能够将所学的算法应用到实际中,灵活解决实际问题。通过这次课程设计,能够培养我们独立思考、综合分析与动手的能力,并能加深对课堂所学理论和概念的理解,可以训练我们算法设计的思维和培养算法的分析能力。 二、课程设计内容: 1、分治法: (2)快速排序; 2、动态规划: (4)最优二叉搜索树;、回溯法: (2)图的着色。 快速排序是基于分治策略的另一个排序算法。其基本思想是,对于输入的子数组,按以下三个步骤进行排序: (1)、分解(divide) 以元素为基准元素将划分为三段,和,使得中任何一个元素都小于,而中任何一个元素大于等于,下标在划分过程中确定。 (2)、递归求解(conquer) 通过递归调用快速排序算法分别对和进行排序。 (3)、合并(merge) 由于和的排序都是在原位置进行的,所以不必进行任何合并操作就已经排好序了。 算法实现题: 现将数列{23 21 34 45 65 76 86 46 30 39 89 20 2 3 8 47 38 54 59 40}进行快速排序。 源程序如下: #include iostream using namespace std; #define size 20 int partition(int data[],int p,int r) { int n=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; 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,data[size]; printf(请输入要排列的数目(=20):); scanf(%d,n); printf(请输入要排列的数列:\n); for(i=0;in;++i) scanf(%d,data[i]); quick_sort(data,0,n-1); printf(排列后的数列为:\n); for(i=0;in;++i) printf( %d ,data[i]); printf(\n); return 0; } 运行结果如下: 图1 动态规划—最优二叉搜索树 1、最优二叉搜索树问题描述和分析: 设是有序集,且,表示有序集S的二叉搜索树利用二叉树的结点存储有序集中的元素。它具有下述性质:存储于每个结点中的元素x大于其左子树中任一结点所存储的元素,小于其右子树中任一结点所存储的元素。二叉树的叶结点是形如的开区间,在表示S的二叉搜索树中搜索元素x,返回的结果有两种情况: (1)在二叉搜索树的内结点中找到。 (2)在二叉搜索树的叶结点中确定。 设在第(1)中情形中找到元素的概率为;在第(2)种情形中确定的概率为。其中约定。显然有: 称为集合S的存取概率分布。 在表示S的二叉搜索树T中,设存储元素的结点深度为;叶结点的结点深度为,则: 表示在二叉搜索树T中进行一次搜索所需要的平均比较次数,p又成为二叉搜索树T的平均路长。在一般情况下,不同的二叉搜索树的平均路长是不相同的。 最优二叉搜索树问题是对于有序集S及其存取概率分布,在所有表示有序集S的二叉搜索树中找到一棵具有最小平均路长的二叉搜索树。 2、最优子结构性质: 二叉搜

文档评论(0)

skvdnd51 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档