数据结构与算法绪论概念().ppt

数据结构与算法绪论概念()

作业: 1、分析下列程序段的时间复杂度 (1) for(i=0; in; i++) for(j=0; jm; j++) A[i][j]=0; (2) i=1; while(i=n) i=i*3; (3) prime(int n) { int i=2; while((n%i)!=0 i*1.0sqrt(n)) i++; if(i*1.0sqrt(n)) printf(“%d是一个素数\n”,n); else printf(“%d不是一个素数\n”,n); (4) fact(int n) { if(n=1) return(1); else return(n*fact(n-1)); } 2、简答题 (1)数据的逻辑结构在计算机存储器中的映像通常有哪几种方法? (2)线性结构、树形结构、图形结构的特点分别是什么? (3)简述顺序存储结构与链式存储结构在表示数据元素之间关系上的主要区别。 * * * * 1.4 算法和算法分析 算法的基本概念 算法效率的度量 常用算法 穷举法 递推法与迭代法 递归法 逐步求精法 分治法 回溯法 动态规划法 贪心法 一、算法的概念 算法:是对特定问题求解步骤的一种描述,是指令的有限序列。其中每一条指令表示一个或多个操作。具有下列特性: 有穷性:执行有穷步结束,每步有穷时间内完成。 确定性:每条指令有确切含义, 唯一执行路径,相同输入--相同结果。 可行性:算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现的。 输入:一个算法有零个或多个输入,它们是在算法所需的初始量或被加工的对象的表示。这些输入取自特定的对象集合。 输出:一个算法有一个或多个输出,这些输出是同输入有着某些特定关系的量。 二、算法设计的要求 设计一个“好”的算法应达到以下目标: 正确性。也称有效性,是指算法能满足具体问题的要求。亦即对任何合法的输入,算法都会得出正确的结果。 可读性。指算法被理解的难易程度。主要阅读与交流,其次机器执行。可读性实质上强调的是:越简单的东西越美。 健壮性(鲁棒性)。是指对非法输入的抵抗能力。它强调的是,如果输入非法数据,算法应能加以识别并做出处理,而不是产生误动作或陷入瘫痪。 高效 (低时间复杂度与空间复杂度)。时间复杂度是指算法的运行的时间消耗,同一个问题,不同的算法可能有不同的时间复杂度。空间复杂度是指算法运行所需的存储空间的多少。 三、算法效率的度量 算法执行时间度量两种方法: (1)事后统计方法 不同算法--相同数据运行 缺点:统计量依赖于计算机硬件、 软件等环境因素,容易掩盖算法本身的优劣。一般采用下一方法。 (2)事前分析估算方法 一个用高级语言编写程序运行消耗时间取决于: a.算法策略 b.问题规模 c.语言 d.编译程序所产生的机器代码的质量 e.机器执行指令速度 去掉与计算机硬件、 软件有关因素,可以认为所用只依赖于问题的规模(n),即问题规模的函数。 度量方法 时间复杂度指算法中包含简单操作的次数,一般不必精确计算出算法的时间复杂度,只是大致计算出相应的数量级。 如: O(1)、O(logn)、O(n)、O( ) 一般,记 T(n)= O (f(n))---与f(n)增长率相同 度量方法 基本操作的原操作--最深层循环内的原操作 重复执行次数--频度 我们用算法中的各语句的语句频度之和表示算法的时间复杂度 例: (a) {++x;s=0;} O(1) (b) for(i=1;in;++i) {++x; s+=x;} O(n) (c) for(j=1;j=n;++j) for(k=1;k=n;++k) {++x; s+=x;} O(n2) 常量阶 线性阶 平方阶 时间复杂度的渐近表示 常用的上界函数有: log(n), , , n!,...... 下面给出几种常见的函数的比较关系:即当n充分大时,下列关系成立: O(a) O(log n) O(n) O(nlogn) O( ) ... O( ) O( ) O(n!) O( ) 上面,n为自变量,a和m为常数 算法的时间复杂度的分类 多项式时间复杂度算法:渐近函数为多项式,或变化率不超过多项式。 指数时间复杂度算法:渐近函数变化率超过多项式,这类算法也称NP(nondeterministic polynomial )-困难的算法。 [例] (1

文档评论(0)

1亿VIP精品文档

相关文档