第一章 算法的基本概念

合集下载

计算机软件技术基础知识点总结

计算机软件技术基础知识点总结

《计算机软件技术基础》第一章算法1.1算法的基本概念算法:指解题方案的准确而完整的描述算法的基本特征:能行性(算法中的每一个步骤必须能够实现;算法执行的结果要能够达到预期的目的)确定性(算法中的每一个步骤都必须是有明确定义的,不能摸棱两可,也不能有多义性)有穷性(算法必须能在执行有限个步骤之后终止)拥有足够的情报(算法执行的结果总是与输入的初始数据有关。

不同输入对应不同输出)算法:是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的、明确的,此顺序将在有限的次数下终止。

算法的基本要素:1.算法中对数据的运算和操作(算术运算、逻辑运算、关系运算、数据传输【赋值、输入、输出】)2.算法的控制结构(算法中各操作之间的执行顺序)1.2算法描述语言C语言描述和简单的算法描述语言(1)符号与表达式:符号主要用以表述变量名、数组名等(2)赋值语句(3)控制转移语句:无条件转移语句形式:GOTO 标号条件转移语句形式IF C THEN SIF C THEN S1ELSE S2(4)循环语句WHILE语句:WHILE C DO SFOR语句:FOR i=init TO limit BY step DO S(5)其他语句EXIT语句:退出某个循环,使控制转到包含EXIT语句的最内层的WHILE或FOR循环后面的一个语句去执行RETURN语句:结束算法的执行(允许使用用引号括起来的注释信息)READ(INPUT)和WRITE(PRINT/OUTPUT)语句:用于输入输出(6)算法中的注释总是用一对方括号【】括起来;复合语句用一对花括号{}括起来1.3算法设计基本方法1.列举法【例1.1】基本思想:根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的(通常解决“是否存在”“有多少种可能”类型问题)特点:算法比较简单,但列举情况较多时,工作量将很大寻找路径、查找、搜索等问题采用列举法有效2.归纳法基本思想:通过列举少量的特殊情况,经过分析,最后找出一般的关系3.递推法(数学例题)指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果(本质属于归纳法)4.递归基本思想:将问题逐层分解的过程,实际上并没有对问题进行求解,而只是当解决了最后那些简单的问题后,再沿着原来分解的逆过程逐步进行综合【例1.3】自己调用自己的过程称为递归调用过程递归分为直接递归:一个算法P显式地调用自己间接递归:算法P调用另一个算法Q,而算法Q又调用算法P5.减半递推技术(分治法)减半:将问题的规模减半,而问题的性质不变递推:重复“减半”的过程【例1.4】6.回溯法通过对问题的分析,找出一个解决问题的线索;然后沿着这个线索逐步试探。

数据结构以及算法笔试题汇总(全)

数据结构以及算法笔试题汇总(全)

1.算法一般都可以用哪几种控制结构组合而成?答案:顺序、选择、循环。

2. 在下列选项中,哪个不是一个算法一般应该具有的基本特征?说明:算法的四个基本特征是:可行性、确定性、有穷性和拥有足够的情报。

答案:无穷性。

3. 在计算机中,算法是指什么?答案:解题方案的准确而完整的描述。

4. 算法的时间复杂度是指?答案:算法执行过程中所需要的基本运算次数。

5. 算法的空间复杂度是指?答案:执行过程中所需要的存储空间。

6. 算法分析的目的是?答案:分析算法的效率以求改进。

7. 下列叙述正确的是(C)A.算法的执行效率与数据的存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止D.算法的时间复杂度是指执行算法程序所需要的时间8. 数据结构作为计算机的一门学科,主要研究什么?答案:主要研究数据的逻辑结构、对各种数据结构进行的运算,以及数据的存储结构。

9. 数据结构中与所使用的计算机无关的是数据的(C)A.存储结构B.物理结构C.逻辑结构D.物理和存储结构10. 下列叙述中,错误的是(B)A.数据的存储结构与数据处理的效率密切相关B.数据的存储结构与数据处理的效率无关C.数据的存储结构在计算机中所占的空间不一定是连续的D.一种数据的逻辑结构可以有多种存储结构11. 数据的存储结构是指什么?答案:数据的逻辑结构在计算机中的表示。

12. 数据的逻辑结构是指?答案:反映数据元素之间逻辑关系的数据结构。

13. 根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为?答案:线性结构和非线性结构。

14. 下列数据结构具有记忆功能的是(C)A.队列B.循环队列C.栈D.顺序表15. 下列数据结构中,按先进后出原则组织数据的是(B)A.线性链表B.栈C.循环链表D.顺序表16. 递归算法一般需要利用什么实现?答案:队列17. 下列关于栈的叙述中正确的是(D)A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进后出的线性表18. 由两个栈共享一个存储空间的好处是?答案:节省存储空间,降低上溢发生的机率。

算法的基本概念

算法的基本概念

时间 11 天零 13 小时 6.7 秒
第一个算法 第二个算法
n = 2
20
100 万次 714 次
1s
10000
3
714μs ( 10000 / 5 + 1 ) ´ ( 10000 / 3 + 1 ) 合并排序需 20 秒
选择排序需 6.4 天
算法的执行时间随问题规模的增大而增长的情况。 二、算法运行时间的评估 不能准确地计算算法的具体执行时间 不需对算法的执行时间作出准确地统计(除非在实时系统中) 1、计算模型:RAM 模型(随机存取机模型)、图灵机模型等 2、初等操作:所有操作数都具有相同的固定字长;所有操作的时间花费都是一个常数 时间间隔。算术运算;比较和逻辑运算;赋值运算,等等; 例:输入规模为 n ,百鸡问题的第一个算法的时间花费,可估计如下:
11. min = cost; 12. } 13. i++; 14. } 15. }
执行时间: while 循环执行 n ! 次。
表 1.1 算法 1.4 的执行时间随 n 的增长而增长的情况
n
5 6
n !
120μs 720μs
n
(1.1.10)
当 n 很大时, c 1 / c 2 的作用很小。 3、算法时间复杂性的定义: 定义 1.2 设算法的执行时间 T ( n ) ,如果存在 T * ( n ) ,使得:
lim
n ® ¥
T ( n ) - T * ( n ) = 0 T ( n )
1.2 算法的时间复杂性
一、算法复杂性的度量? 二、如何分析和计算算法的复杂性?
1.2.1 算法的输入规模和运行时间的阶

高二数学 第一章《算法初步》教案人教A版必修3

高二数学 第一章《算法初步》教案人教A版必修3

1.1.1算法的概念一、三维目标:1、知识与技能:(1)了解算法的含义,体会算法的思想。

(2)能够用自然语言叙述算法。

(3)掌握正确的算法应满足的要求。

(4)会写出解线性方程(组)的算法。

(5)会写出一个求有限整数序列中的最大值的算法。

(6)会应用Scilab 求解方程组。

2、过程与方法:通过求解二元一次方程组,体会解方程的一般性步骤,从而得到一个解二元一次方程组的步骤,这些步骤就是算法,不同的问题有不同的算法。

由于思考问题的角度不同,同一个问题也可能有多个算法,能模仿求解二元一次方程组的步骤,写出一个求有限整数序列中的最大值的算法。

3、情感态度与价值观:通过本节的学习,使我们对计算机的算法语言有一个基本的了解,明确算法的要求,认识到计算机是人类征服自然的一各有力工具,进一步提高探索、认识世界的能力。

二、重点与难点:重点:算法的含义、解二元一次方程组和判断一个数为质数的算法设计。

难点:把自然语言转化为算法语言。

三、学法与教学用具:学法:1、写出的算法,必须能解决一类问题(如:判断一个整数n(n>1)是否为质数;求任意一个方程的近似解;……),并且能够重复使用。

2、要使算法尽量简单、步骤尽量少。

3、要保证算法正确,且计算机能够执行,如:让计算机计算1×2×3×4×5是可以做到的,但让计算机去执行“倒一杯水”“替我理发”等则是做不到的。

教学用具:电脑,计算器,图形计算器四、教学设想:1、创设情境:算法作为一个名词,在中学教科书中并没有出现过,我们在基础教育阶段还没有接触算法概念。

但是我们却从小学就开始接触算法,熟悉许多问题的算法。

如,做四则运算要先乘除后加减,从里往外脱括弧,竖式笔算等都是算法,至于乘法口诀、珠算口诀更是算法的具体体现。

我们知道解一元二次方程的算法,求解一元一次不等式、一元二次不等式的算法,解线性方程组的算法,求两个数的最大公因数的算法等。

计算机算法

计算机算法

第一章绪论算法(Algorithm)理论处于计算机科学的核心地位,它与计算机应用的许多实际问题有着直接的联系。

§1 算法的基本概念1 算法的地位①算法(Algorithm)理论处于计算机科学的核心地位。

想要使用计算机解决问题,就要设计该问题的算法,要给出解决该问题所需的一系列解题步骤。

②算法与程序计算机软件的重要内容之一是程序,程序是计算机指令的序列,计算机一步一步地执行这个指令序列,就完成了希望它所做的事情。

程序设计就是按照一定的要求编排一个合理的指令序列。

程序设计主要包含两个方面,行为特性设计和结构特性设计。

结构特性设计是指确定合适的数据结构,将程序处理的数据在计算机内部表示和存放。

行为特性设计是确定要解决的实际问题的具体步骤,把全部解题过程完整地描述出来,这一过程就是算法设计。

算法设计是程序设计的基础。

美国《计算机科学基础》一书指出,“算法代表了对问题的解”,“程序是算法在计算机上的特定实现”。

N.Wirth指出“程序就是在数据的某些特定的表示方法和结构的基础上对抽象算法的具体表述。

”通俗地讲,程序是用计算机语言表述的算法。

数据结构是程序设计的另一基础。

程序的目的是加工数据,具体的数据加工步骤为算法,程序是算法和数据结构的统一。

著名计算机科学家N.Wirth于1976年提出了“程序=算法+数据结构”的概念。

这个公式表明,算法与数据结构是密切相关的,算法的设计要与数据结构相适应。

算法不等于程序,它不需考虑具体的机器,算法也不等于计算方法,它比计算方法更具体。

算法知识位于程序设计的高层(算法,方法学,语言和工具),具有相对稳定性。

很多经典算法产生于20世纪50、60年代,如hash算法,快速排序算法,至今仍在使用。

2 算法的定义下面我们先看两个例子:例1 求一个数a的平方根。

利用迭代公式:x n+1=(x n+a/x n)/2 ,算法如下:①对x赋初值x0②如果| x2-a| < ε则转④③x=(x+a/x)/2, 转②④输出x例2 求m,n的最大公约数利用辗转除法可得求自然数m,n的最大公约数的算法如下:①r=m mod n②循环直到r=0m=nn=rr= m mod n③输出n可以看出,算法是解题方案的准确而完整的描述,它是由一些步骤组成的一个过程,这些步骤连在一起给出一类问题的解。

算法分析的基本概念和方法

算法分析的基本概念和方法

i 1
i 1
i 1
❖ 在最好情况下,ti=1, for 1 i <n;
Tmin(n) c1n c2 (n 1) c3(n 1) c4 (n 1) c7 (n 1)
(c1 c2 c3 c4 c7 )n (c2 c3 c4 c7 ) O(n)
❖ 在最坏情况下,ti i+1, for 1 i <n;
1.1.算法及其特性
❖ 一、 算法(algorithm)
算法就是一组有穷的规则,它们规定了解决某 一特定类型问题的一系列运算。
❖ 二、算法的五个特性
① 确定性 ② 能行性 ③ 有穷性 ④ 输入 ⑤ 输出
1.1.算法及其特性
三、衡量算法性能的标准
衡量算法性能一般有下面几个标准: 确定性 易读性 健壮性 算法的时间和空间性能:高效率和低存储空间
n i1
Байду номын сангаас
2
1.4. 复杂度的有关概念
二、举例
[例2] 直接插入排序算法1.5。
以元素的比较作为基本操作。 最好情况下的时间复杂度: (n) 最坏情况下的时间复杂度: (n2) 在等概率前提下,平均情况下的时间复杂度:(n2 )
算法分析的基本法则
❖ 非递归算法:
(1)for / while 循环 循环体内计算时间*循环次数; (2)嵌套循环 循环体内计算时间*所有循环次数; (3)顺序语句 各语句计算时间相加; (4)if-else语句 if语句计算时间和else语句计算时间的较大者。
1.3. 分析复杂度的基本步骤
二、表示出在算法运行期间基本运算执行的总频数
同一个问题对不同的输入,基本运算的次数亦可能不同。 因此,我们引进问题大小(即规模,size)的概念。例如, 在一个姓名表中寻找给定的Z的问题,问题的大小可用表中 姓名的数目表示。对于两个实数矩阵相乘的问题,其大小可 用矩阵的阶来表示。而对于遍历一棵二叉树的问题,其大小 是用树中结点数来表示等等。这样,一个算法的基本运算的 次数就可用问题的大小n的函数f(n)来表示。

第一章 数值计算方法的基本概念


b−a [ f (a) + f (b)] 2
e = x − x∗
为近似值 x 的绝对误差,简称误差。

(2.1)
一般情况下,我们只能知道近似值 x ,而不只准确值 x ,但可以根据测量工具或计算 的情况,对绝对误差的大小范围作出估计,即可以给出一个正数ε,使得

e = x − x∗ ≤ ε

(2.2)
1 1 11 ⎧ ⎪ x1 + 2 x 2 + 3 x3 = 6 ⎪ 1 1 13 ⎪1 ⎨ x1 + x 2 + x3 = 3 4 12 ⎪2 1 1 1 ⎪ x + x + x = 47 1 2 3 ⎪ 4 5 60 ⎩3
求解时,先将系数舍入成两位有效数字的数,变为
⎧ x1 + 0.5 x 2 + 0.33 x3 = 1.8 ⎪ ⎨ 0.50 x1 + 0.33 x 2 + 0.25 x3 = 1.1 ⎪0.33 x + 0.25 x + 0.20 x = 0.78 1 2 3 ⎩
按四舍五入取四位小数,可得 2 = 1.4142 ,前面已经提到,该数的绝对误差不超过末位 数字的半个单位,即

2 − 1.4142 ≤
定义 2.1 设 x 的近似值
1 *10 − 4 = 0.00005 2
(a1 ≠ 0)
(2.6)
x ∗ = ±0.a1 a 2 L a n * 10 m
如果
x − x∗ ≤
§2
误差来源与误差的基本概念
2.1 误差的来源及分类 在数值计算中,误差是不可避免的。引起误差的因素很多,主要的原因有以下几种: 1.模型误差 解决实际问题的科学计算 ,首先要建立数学模型,即将实际问题经过 抽象合理简化,略去一些次要因素。因而它只是对所提出的问题的一种近似描述,包含有误 差,这种误差称为模型误差。 2.观察误差 在数学模型中总含有一些参数,如温度、长度、电压等,它们的值往往

算法概念介绍及举例说明

xx+y repeat repeat
就算法分析而言,一条语句的数量级指的是执行它的频 率,而一个算法的数量级则指的是它所有语句执行频率的 和。
确定一个算法的数量级是十分重要的,它在本质上反映 了一个算法所需要的计算时间。
四、计算时间的渐进表示
假设某种算法的计算时间是f(n),其中变量n可以是输入 或输出量,也可以是两者之和,还可以是它们之一的某 种测度(例如,数组的维数,图的边数等等)。g(n)是 在事前分析中确定的某个形式很简单的函数,例如, nm,logn,2n,,n!等。它是独立于机器和语言的函数,而 f(n)则与机器和语言有关。
对于I2,通过比较x和ak容易得到解决。如果x= ak,则j=k且 不需再对I1和I3求解;否则,在I2 子问题的j=0,此时若x<ak, 则只有I1留待求解,在I3子问题中的j=0。若x>ak,只有I3留待 求解,在I1子问题中的j=0。在ak作了比较之后,留待求解的 问题(如果有的话)可以再一次使用分治法来求解。如果对
2.2 二 分 检 索
一、问题描述 已知一个按非降次序排列的元素表a1,a2,…an,要求判定某 给定元素x是否在该表中出现。若是,则找出x在表中的位 置,并将此下标值赋给变量j;若非,则将j置成0。
二、问题分析 设该问题用I=(n, a1,a2,…an,x)来表示,可以将它分解成一
些子问题,一种可能的做法是,选取一个下标k,由此得到三个 子问题:I1=(k-1, a1,a2,…ak-1,x),I2=(1,ak,x)和I3=(n-k, ak+1,…an,x)。
证明:取n0=1,当n>=n0时,利用A(n)的定义和 一个简单 的不等式,有 | A(n) || am | nm | a1 | n | a0 | (| am | | am1 | / n | a0 | / nm )nm (| am | | a0 |)nm

简述算法的概念及其主要点。

简述算法的概念及其主要点。

随着计算机技术的不断发展,算法这个词已经被广泛使用,并在计算机领域中占据着非常重要的位置。

算法可以被认为是一种计算模型,用于解决具体的问题。

算法执行一系列有序的操作,这些操作按照某种特定的方式组合在一起来解决问题。

本文将简述算法的概念及其主要点。

1. 算法的基本概念算法指的是一种针对特定问题的的解决方法。

给定一个问题,算法是通过一系列操作来解决该问题的流程。

具体而言,算法侧重于解决特定的问题,并且可以提供确切的解决方案,以及解决方案所需的计算复杂度。

2. 算法的主要特征算法具有以下几个主要特征:(1)有穷性算法应该是一个有限的过程。

在有限的时间内,它应该能够产生出一个输出。

因此,在实际中,算法应该是可以被计算机所执行的。

(2)确定性在算法的执行过程中,每一步都应该是确定的。

也就是说,相同的输入条件应该能够运行出相同的输出结果。

(3)可行性算法需要依赖计算机上的硬件和软件资源来确保其实践可行。

(4)输出算法将结果输出。

有些算法只能输出是或否的结果,而有些算法则直接输出解决方案。

3. 算法的设计思路在设计算法时,应该遵循以下几个基本步骤:(1)明确问题算法开发人员需要非常清楚地了解要解决的问题。

为此,他们应该认真阅读问题描述,并了解该问题的一般特点和相应的解决方案。

(2)分析问题分析问题是算法设计中的一个重要步骤。

这一步需要对问题进行分解,并考虑每个分组策略的适用性。

分析问题通常需要使用抽象的数据结构、复合语句和循环结构。

(3)设计算法在设计算法的过程中,算法开发人员需要将前两步中的信息和方法结合起来,然后将它们转化为明确的方法和步骤。

这就是算法的设计。

在这一步中,需要考虑算法的复杂度以及所需的硬件和软件资源。

(4)实现算法实现算法是将算法转化为程序。

这一步需要程序员使用具体的编程语言来实现算法。

在实现过程中,程序员应该熟练掌握目标编程语言、程序控制结构和基本算法。

4. 算法的应用领域算法在各种不同的应用领域广泛应用。

人教版高中数学必修三课件:1.1.1 算法的概念

解:b→a→c→d→e
考点类析
例2 写出解方程x2-2x-3=0的一个算法.
解:方法一,算法如下: 第一步,将等号左边因式分解,得(x-3)(x+1)=0①; 第二步,由①式得x-3=0或x+1=0; 第三步,解x-3=0得x=3,解x+1=0得x=-1,即x=3或x=-1.
考点类析
例2 写出解方程x2-2x-3=0的一个算法. 解:方法二,算法如下: 第一步,移项,得x2-2x=3①; 第二步,①式等号两边同时加1并配方,得(x-1)2=4②; 第三步,②式等号两边同时开方,得x-1=±2③; 第四步,解③式得x=3或x=-1.
预习探究
(4)不唯一性:求解某一个问题的算法不一定只有唯一的一个,也可以有不同 的算法,这些算法有繁简、优劣之分. (5)普遍性:很多具体的问题,都可以通过设计合理的算法去解决.
预习探究
知识点三
算法的设计要求
设计算法的要求主要有以下几点: (1)写出的算法必须能解决一类问题,并且能够重复使用; (2)要使算法尽量简单、步骤尽量少; (3)要保证算法的各个步骤有效,计算机能够执行,且在有限步骤后能得到结果.
备课素材
累加、累乘问题的算法 解决一个问题的算法一般不是唯一的,不同的算法有优劣之别,保证得到正 确的结果是对每个算法的最基本的要求.另外,还要求算法的每个步骤都要 易于实现、易于理解,效率要高,通用性要好等.
备课素材
备课素材
[例2] 求1×3×5×7×9×11的值,写出其算法.
解:算法如下:
备课素材
[小结]
知识 1.算法的概念; 2.算法的特性; 3.算法的设计
方法
易错
1.根据具体的问题进行判断,是 给出问题,在书写步骤时,不能
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二 算法设计的例子,穷举法
1. 穷举法 2. 百鸡问题
3. 货郎担问题
11
1. 穷举法
从有限集合中,逐一列举集合的所有元素,对每一个元 素逐一判断和处理,从而找出问题的解
12
2. 百鸡问题
“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。 百钱买百鸡,问鸡翁、母、雏各几何?” 令 a:公鸡只数 b:母鸡只数 c:小鸡只数 约束方程: a + b + c = 100 5a + 3b + c/5 = 100 c%3=0 a、b、c的可能取值范围:0 ~ 100 对在此范围内的a,b、c、的所有组合进行测试,凡是 满足上述三个约束方程的组合,都是问题的解。 把问题转化为用 n 元钱买 n 只鸡,n 为任意正整数 约束方程: a + b + c = n 5a + 3b + c/5 = n 13 c%3=0
2
目 录
第一章 算法的基本概念 第二章 算法的复杂性分析 第三章 排序问题与离散集合的操作 第四章 递归与分治 第五章 贪婪法 第六章 动态规划 第七章 回溯 第八章 分支与限界 第九章 随机算法 第十章 图和网络问题 第十一章 计算几何问题 第十二章 NP完全问题 第十三章 计算复杂性 第十四章 下界 第十五章 近似算法
即意味着: f(n) = O(g(n)) 含义:f(n) 的增长最多象g(n) 的增长那样快。称O(g(n))是
f(n) 的上界。
31
例:百鸡问题第二个算法运行时间的上界

19 2 161 T2 ( n ) ≤ n + n + 28 15 15 19 2 176 19 2 161 n T2 ( n ) ≤ n + n+n = n + 15 15 15 15 19 2 176 2 ≤ n + n 15 15
= 20 n3 + 63 n2 + 69 n + 27 ' 可把 T1( n ) 写成 T1( n ) ≈ c1n3 c1 > 0
19 2 161 T2 (n) ≤ n + n + 28 15 15
T2 ( n ) ≈ c2n2
' ' T1 ( n ) / T2 ( n ) =
'
c2 > 0
c1 n ≈n c2
3
第一章 算法的基本概念
1.1 引言 1.2 算法的时间复杂性
4
1.1 引言
一 算法的定义和特征ຫໍສະໝຸດ 二 算法设计的例子,穷举法
三 算法的复杂性分析
5
一 算法的定义和特征
1. 欧几里德算法 2. 算法的定义 3. 算法的特征
6
术语“算法”的由来
Algorithm 算法
Logarithm
Algorism
令百鸡问题的第一、二两个算法,其最内部的循环体每执 行一次,需1μs时间。 第一个算法 第二个算法 n = 100 的内循环次数 100万次 714次 执行时间 1s 714μs 2001×3334 n = 10000的内循环次数 10000 3 执行时间 规模 n = 128 n = 1048576 11天零13小时 6.7秒
1) 第一种解法:
输入:所购买的三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[ ],m[ ],s[ ] 1. void chicken_question(int n,int &k,int g[ ],int m[ ],int s[ ]) 2. { int a,b,c; 4. k = 0; 5. for (a=0;a<=n;a++) 6. for (b=0;b<=n;b++) 7. for (c=0;c<=n;c++) { 8. if ((a+b+c==n)&&(5*a+3*b+c/3==n)&&(c%3==0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 14 13. }
算法设计与分析
1
在计算机科学与技术中的地位
操作系统、语言编译系统、数据库管理系统、以及各种各样 的计算机应用系统软件,都用具体的算法来实现。
算法的好坏,决定了所实现软件性能的优劣。
在实现一个软件时,必须解决用什么方法设计算法、如何判 定算法的性能。
因此,算法设计与分析是计算机科学与技术的一个核心问题 通过算法设计与分析这门课程的学习,使读者掌握算法设计 与分析的方法,利用这些方法去解决在计算机科学与技术中 所遇到的各种问题,去设计计算机系统的各种软件中所可能 遇到的算法,并对所设计的算法作出科学的评价。
22
1.2 算法的时间复杂性
一 算法的输入规模和运行时间的阶
二 运行时间的上界,O记号
三 运行时间的下界,Ω记号
四 运行时间的准确界,Θ记号
五 O记号、Ω记号、Θ记号的性质
六 复杂性类型和o记号
23
一 算法的输入规模和运行时间的阶
1. 算法的输入规模和运行时间 2. 算法运行时间的评估
24
1. 算法的输入规模和运行时间
选择排序所需时间 0.008s 6.4天
合并排序所需时间 0.0008s 20秒
25
1. 算法的输入规模和运行时间
两个事实: 1)算法的执行时间随问题规模的增大而增长,增长的速度 随不同的算法而不同。当问题规模较小时,不同增长速 度的两个算法,其执行时间的差别或许并不明显。而当 规模较大时,这种差别就非常大,甚至令人不能接受。 2)没有一个方法能准确地计算算法的具体执行时间。
4. do { 5. r = m % n; 6. m = n; 7. n = r; 8. } while(r) 9. return m; 10. }
8
2. 算法的定义
算法是解某一特定问题的一组有穷规则的集合
9
3. 算法的特征
1)有限性。算法在执行有限步之后必须终止。 2)确定性。算法的每一个步骤,都有精确的定义。要执行 的每一个动作都是清晰的、无歧义的。 3)输入。一个算法有0个或多个输入,它是由外部提供的, 作为算法开始执行前的初始值,或初始状态。算法的输入 是从特定的对象集合中抽取的。 4)输出。一个算法有一个或多个输出,这些输出,和输入有 特定的关系,实际上是输入的某种函数。不同取值的输 入,产生不同结果的输出。 5)能行性。算法的能行性指的是算法中有待实现的运算,都 是基本的运算。原则上可以由人们用纸和笔,在有限的时 间里精确地完成。 10
货郎担问题穷举法版本的执行时间
n
n!
1s
2s 6s 24s
n 6
7 8 9
n!
720s
5.04ms 40.3ms 362ms
n 11
12 13 14
n!
39.9s
479.0s 1.72h 24h
n 16
17 18 19
n!
242d
11.27y 203y 3857y
1
2 3 4
5
120s
10
3.62s
15
15d
20
77146y
21
三 算法的复杂性分析
问题一:如何设计算法,算法的设计方法。 问题二:如何分析算法的效率,算法的复杂性分析。 算法的效率用算法的复杂性来衡量 算法的复杂性:算法的时间复杂性和算法的空间复杂性
算法的时间复杂性越高,算法的执行时间越长
算法的空间复杂性越高,算法所需的存储空间越多 一、算法复杂性的度量? 二、如何分析和计算算法的复杂性?
小鸡只数:
c=n–a–b
16
第二种解法程序:
1. void chicken_problem(int n,int &k,int g[ ],int m[ ],int s[ ]) 2. { int i, j, a, b, c; 4. k = 0; i = n / 5; j = n / 3; 7. for (a=0;a<=i;a++) 8. for (b=0;b<=j;b++) { 9. c = n – a – b; 10. if ((5*a+3*b+c/3==n)&&(c%3==0)) { 11. g[k] = a; 12. m[k] = b; 13. s[k] = c; 14. k++; 15. } 16. } 17
29
4、多项式时间算法和指数时间算法
多项式时间算法:执行时间随规模 n 的多项式增长而 增长 指数时间算法:执行时间随规模 n 的指数增长而增长
30
二 运行时间的上界,O记号
定义:令 N 为自然数集合, R+为正实数集合。函数 f: N → R+ ,函数 g : → R+ ,若存在自然数 n0 N 和正常数 c,使得对所有的 n ≥ n0 ,都有: f(n) ≤ cg(n) 就称函数f(n) 的阶至多是O(g(n))。 因此,如果存在 lim f(n)/g(n),则: f (n) lim ≠ ∞ n→∞g ( n )
26
2. 算法运行时间的评估
1)计算模型:RAM模型(随机存取机模型)、图灵机
模型等
2)初等操作:所有操作数都具有相同的固定字长;所 有操作的时间花费都是一个常数时间间隔。算术运
算;比较和逻辑运算;赋值运算,等等;
27
例:百鸡问题算法的时间估计
T1( n ) ≤ 1 + 2 ( n + 1) + n + 1 + 2 ( n + 1)2 + ( n + 1)2 + 16 ( n + 1)3 + 4 ( n + 1)3
相关文档
最新文档