- 1、本文档共118页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法指的是一种计算过程,具有以下性质: 通用性:即适用于某一类问题中的所有个体,而不只是用来解决一个具体的问题。 能行性:即应有明确的步骤一步一步地引导计算的进行。 机械性:即每个步骤都是机械的、定死的,不需要计算者临时动脑筋。 有限性:至少对某些输入数据,算法应在有限多步内结束,并给出计算结果。 离散性:算法的输入数据及输出数据都应是离散的符号。 4、算法:递归、排序、查找 算法的基本要求: 正确 易维护(可读,易修改) 方便使用 高效 速度快 运行时间少,时间复杂度低 占用内存少 空间复杂度低 算法的效率可以测试,用大量输入数据测量运行的时间和占用的内存,通过比较判别和选择效率高的算法 更重要的是编程前的分析和估计,即理论的计算,给出事前的判断 4、算法:递归、排序、查找 递归——一个关于递归的故事 一个没有去过北京的人问:天安门是什么样子?去过北京的人答道:天安门有个城楼,城楼上有个国徽,国徽里有个天安门,天安门有个城楼,城楼上有个国徽,国徽里有个天安门, …… 4、算法:递归、排序、查找 ——递归 4、算法:递归、排序、查找 ——递归 递归是常用的编程技术,其基本思想是“自己调用自己”。 数学上最常见、最简单的递归问题就是自然数的阶乘。 n=1 n! = 1; n1 n! = n * (n-1)!; 适合用递归方法求解的问题 有一个初始状态 后续的情况可由前面的状态推出 如Fibonacci数列 F1 = F2 = 1; Fn = Fn-1 + Fn-2 (n=3) 递归与循环 long Fibonacci(int n) { if( n==1|| n==2 ) return 1; else return Factorial(n-1) + Factorial(n-2) ; } long Fibonacci(int n) { int i; long f1,f2,fn; if( n==1|| n==2 ) return 1; f1 = 1; f2 = 1; for( i=3; i=n; i++) { fn = f1 + f2; f1 = f2; f2 = fn; } return fn; } 4、算法:递归、排序、查找 ——递归 递归问题欣赏 河内塔( Hanoi Tower)问题:这是一个流传很久的游戏。 1. 有三根杆子A,B,C。A杆上有n只碟子 2. 每次移动一块碟子,小的只能叠在大的上面 3. 把所有碟子从A杆经C杆全部移到B杆上. 递归求解: 1. 若只有一只碟子,直接将它从A杆移到B杆; 2. 把n-1只碟子从A杆经B杆移动到C杆,将A杆上第n只碟子移到B杆;然后再将n-1只碟子从C杆经A杆移到B杆。 4、算法:递归、排序、查找 ——递归 此外,递归是人工智能语言Lisp/Prolog等进行问题求解的基本手段。 递归问题欣赏 8皇后问题:把8个皇后放在8 x 8的棋盘上,使得任何一个都不将其他7个的军。 骑士巡游问题:给出一个n x n的棋盘,一位骑士按国际象棋的规则移动——放在第(0,0)格里,找出一种可以走遍整个棋盘的方案(如果存在的话)。即做n2-1次移动,使得棋盘上每个格子都恰好只被访问一次。 4、算法:递归、排序、查找 ——递归 4、算法:递归、排序、查找 ——排序 排序是指对一些数据信息的重新组织,通常是对一个数组进行重新操作,使得信息由大到小(降序)或者由小到大(升序)存储。要求排序是很一种基本的需要。我们所感兴趣的是如何寻找到一个好的办法来进行排序。 就地排序算法:不增加新的存储空间 1、插入排序法(Insert Sort) 将一个数插入到序列中的合适位置。 2、选择排序法(Selection Sort) 每次把最小(大)的元素交换到最前面。 3、冒泡排序法(Bubble Sort) 比较并交换相邻的元素,直到所有元素都被放到合适的位置。 4、算法:递归、排序、查找 ——排序 4、算法:递归、排序、查找 ——排序:插入排序(思想) 4、算法:递归、排序、查找 ——排序:插入排序(算法) int a[] = {19, 2, 35, -6, -12, 5, 23, 16, 9, 0}; int i,j,k; int x; for(i=1; i a.length; i++) // a.length-1轮插入排序 { x = a[i];
文档评论(0)