网站大量收购闲置独家精品文档,联系QQ:2885784924

计算机算法复习题.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机算法复习题

算法概述 算法必须具备的四个性质: 输入: 有零个或多个由外部提供的量作为算法的输入 输出: 算法产生至少一个量作为输出. 确定性: 组成算法的每条指令是清晰的,无歧义的. 有限性: 在执行了有穷步骤后运算终止(程序则可以不满足此条性质,如操作系统,无限循环) 写出算法复杂性的渐近性态的数学表达式: (能写出上阶函数即可)如: 算法的复杂性分为:时间复杂性 需要时间资源的量;空间复杂性 需要的空间资源的量 程序所需要的空间主要由指令空间,数据空间,环境栈空间构成: 会分析程序段的时间复杂度 一次冒泡 A、templateclass T void Bubble(T a[ ], int n) {// 计算a[0:n-1]中最大的元素通过冒泡移到右边 for( int i =1;in; i++) if( a[i]a[i+1]) swap(a[i], a[i+1]); } B、templateclass T void BubbleSort(T a[ ], int n) {// 计算a[0:n-1]中的n个元素通过冒泡排序 for( int i =n;i1; i--) Bubble(a,i); } 第二章 递归与分治策略 递归的概念(根据递归公式,能写出递归算法) 如: 递归函数如下: A、int Factorial(int n) { if (n==0) return 1; return n*Factorial(n-1); } B、 递归概念:一个直接或间接地调用自身的算法称为递归算法;一个使用函数自身给出定义的函数称为递归函数 递归缺点:消耗时间空间多 优点:容易实现理解 递归小结 优点:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。 缺点:递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。 2、分治法 分治法的基本思想是讲一个规模为N的问题分解成K个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解这些子问题,然后将子问题的解合并得到原问题的解。 二分有哪些信誉好的足球投注网站方法的基本算法描述和基本思想 基本思想: 二分搜有哪些信誉好的足球投注网站的基本思想是将N个元素分成个数大致相同的两半,去a【n/2】与x作比较,如果x=a【n/2】,则找到了x,算法中止。如果小于,则只要在数组的a的左半部继续有哪些信誉好的足球投注网站x;如果大于,则只要在数组a的右半部继续有哪些信誉好的足球投注网站x 二分有哪些信誉好的足球投注网站算法 templateclass T int BinarySearch( T a[], const T x, int n) {//在a[0]=a[1]=···=a[n-1]中有哪些信誉好的足球投注网站x //如果找到,则返回所在位置,否则返回 –1 int left= ; int right= ; while( ){ int middle= ; if(x==a[middle]) return middle; if(xa[middle]) left= ; else right= ; } return –1; //未找到x } 合并排序的具体算法和基本思想: 合并排序算法是用分治法的策略实现对N个元素进行排序的算法。基本思想是:将待排序元素分成大小大致相同的两个子集,分别对两个子集进行排序,最终将排好序的子集合合并成所要求的排好序的集合。 合并排序的算法 templateclass Type void MergeSort(Type a[ ], int left, int right) {// A[left:right]是一个全程数组,含有 right-left+1个待排序的元素。 if ( leftright ) { //至少有2个元素 int mid = (left+right)/2; //求当前数组的分割点 MergeSort(a,left, mid); MergeSort(a,mid+1, right); Merge(a,b,left, mid ,right); copy(a,b,left,right); } } 合并函数 template class Type void Merge(

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档