- 1、本文档共67页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
东北大学软件学院;与数据结构的区别:
考虑问题的角度:数据结构关心不同的数据结构在解题中的作用和效率;算法关心不同的设计技术的适用性和效率。
考虑问题的高度:数据结构关心的是解具体问题,算法不仅于此,它提供一种解决问题的通用方法。;About Algorithm;课程内容;计算机算法设计与分析(第3版).
王晓东.
电子工业出版社.
2007年5月;References;第1章 算法概述;本章教学要求
理解算法与程序的概念,二者区别与联系
掌握算法复杂性的渐近性态的数学表述
掌握描述算法的方法
重点
理解算法与程序
算法复杂性的渐近性态的数学表述
算法表示方法
难点
算法复杂性的渐进性态的数学表述;What’s Algorithm?
算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。;What is an algorithm?;算法的五个重要特征;Example of computational problem: sorting;一般求d=gcd(m,n)的过程用自然语言可以描述如下:
(1) 找出m的素因子;
(2) 找出n的素因子;
(3) 找出m,n的公共的素因子;
(4) 计算所有公共素因子的乘积,结果即为m,n的最大公约数。
这样的过程能称之为算法吗?;计算gcd(m,n)的连续整数检测算法;欧几里德算法;Some Well-known Computational Problems;程序
程序=数据结构+算法
可以不满足有限性
程序性能(program performance):指运行一个程序所需要的内存大小和时间。
算法的描述
自然语言方式、表格方式等
;Basic Issues Related to Algorithms;Algorithm design strategies;Analysis of Algorithms;算法的复杂性
;
1. 多用户系统中运行时,需指明分配给该程序的内存大小。
2. 想提前知道是否有足够可用的内存来运行该程序。
3. 一个问题可能有若干个内存需求各不相同的解决方案,从中择取。
4. 利用空间复杂性来估算一个程序所能解决的问题的最大规模。;
1.有些计算机需要用户提供程序运行时间的上限,一旦达到这个上限,程序将被强制结束。
2.正在开发的程序可能需要提供一个满意的实时响应。
;一、空间复杂性;;数据空间(data space):用来存储所有常量和所有变量值所需的空间。
;; 环境栈空间(environment stack space)-保存函数调用返回时恢复运行所需要的信息。当一个函数被调用时,下面数据将被保存在环境栈中:
返回地址;
所有局部变量的值、递归函数的传值形式参数的值;
所有引用参数以及常量引用参数的定义。;空间复杂度; 在分析空间复杂性中,实例特征的概念非常重要。所谓实例特征是指决定问题规模的那些因素。
输入和输出的数量或相关数的大小,如对n 个元素进行排序、n×n 矩阵的加法等,都可以n 作为实例特征,而两个m×n 矩阵的加法应该以n 和m 两个数作为实例特征。;令S(P)表示程序P需要的空间,则有
S(P) = c + SP(实例特征);利用引用参数
;;Theoretical analysis of time efficiency;二、时间复杂性 time efficiency;估算运行时间的方法;templateclass T
int Max(T a[ ], int n)
{ // 寻找a [ 0 : n - 1 ]中的最大元素
int pos = 0;
for (int i = 1; i n; i++)
if (a[pos] a[i])
pos = i;
return pos;
}
;templateclass T
void Rank(T a[ ], int n, int r[ ])
{// 计算a[0:n-1]中n个元素的排名
for( int i =0;in; i++)
r[i] = 0;//初始化
//逐对比较所有的元素
for(i = 0; in; i++)
for(int j = 0; ji; j++)
if (a[j] = a[i])
r[i]++;
else
r[j]++;
};templateclass T
void Insert(T a[], int n, const T
文档评论(0)