算法设计第一章详解

合集下载

算法设计与分析:第1章 算法分析基础

算法设计与分析:第1章 算法分析基础

算法测试
B 291Dprogram testingE
– ( ; – 2984&29F<*-/#
5D7 1?Ftest caseEF>, 29 < F 293;F@29: %0.'!
C +$DdebugE
– (A6=; –
) ;F
9)+*[,1'-FD!V6: 9)+*= #(!)
– =O!S UN#Q [ " 66Q 59
B59[MI!)59X6 Q596
!3[489+*
!3[ >G(
!3X
算法的执行时间绝大部分花在循环 和递归上
• B61( ,*=
#!7 @H
• 42 7&1
– -3%9 !#."; ,
– )
< +:!#;42>$7 &1>* +:7 &1
• ')(/
– % 0=')8(/ 6(/
1.3.3 算法复杂度
时间复杂度( time complexity )
• • #
课程介绍
n )*
– #/) –
!.3(- 31:
n )*$,
6&"%9 – 57"%20(+ – 57"9'
n4
— 8
主要内容
1. 算法的基本概念和常见符号 2. 算法设计的常用技术
• 递归法、蛮力法、分治法、减治法 • 贪心法、动态规划、回溯法、分支限界法 • 概率算法、近似算法、计算复杂性理论 3. 算法的评价:复杂度分析
引言
1.1 算法概述

算法第1章算法概述详解

算法第1章算法概述详解

6
计算机算法设计与分析
7
意念与现实(4): 一个例子
如果我们再次改变试验中拿球的方式,将拿某个特定标号 的球改为取出任意标号的球,即在差 1分钟到零点时,将标 号为1 ~ 10的 10个球放进罐子,然后从罐子里任意拿出一个 球;在差1/2分钟到零点时,将标号为11~20的10个球放进罐 子,然后从罐子里任意拿出一个球;在差 1/4 分钟到零点时, 将标号为21~30的10个球放进罐子,然后从罐子里任意拿出 一个球……这种拿球方式又将产生何种结果呢? 答案是仍然是0 太不可思议了吧!这三个本质相同的算法怎么有如此匪夷 所思的结果呢?如果非要说这三个算法有什么不同,就是拿 球时的标号不同。 但难道标号的不同使最后球的数量发生了变化?
计算机算法设计与分析
3
主要内容介绍
• • • • • • 第1 章 第2 章 第3 章 第4 章 第5 章 第6 章 算法概述 递归与分治策略 动态规划 贪心算法 回溯法 分支限界法
3
计算机算法设计与分析
4
意念与现实(1): 一个例子
给你一个无限容积的罐子和无限个球,球从1开始连续编号
★ 在差 1分钟到零点时:将标号为 1~10的 10个球放进罐子, 然后将10号球从罐子里拿出。 ★ 在差1/2分钟到零点时:将标号为 11~20的10个球放进罐 子,然后将20号球从罐子里拿出。 ★ 在差1/4分钟到零点时:将标号为21~30的10个球放进罐 子,然后将30号球从罐子里拿出。 ★ …… 就这样将游戏进行下去。假定放球和取球不占时间,请问,
计算机算法设计与分析
6
意念与现实(3): 一个例子
对于有些人来说,这个答案似乎不可接受。但又确实找不 到驳斥的办法。你能找出来吗?

计算机专业课《算法》_第一章算法概述

计算机专业课《算法》_第一章算法概述

几个复杂性参照函数
若干符号及其意义:O(f),(f),(f),o(f)
• 在下面的讨论中,对所有n,f(n) 0,g(n) 0。
(1)渐近上界记号O O(g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
0 f(n) cg(n) }
(2)渐近下界记号 (g(n)) = { f(n) | 存在正常数c和n0使得对所有n n0有:
有限的计算步后停止。
2.确定性:每一条规则都是明确、无二义的。 3. 可行性:每一计算步都是基本的、可实现的。
4. 输入: 算法开始执行执行之前指定初始值 (有零个或多个输入) 。 5. 输出:产生与输入相关的量(有至少一个)。 二、算法的又一描述方式
设:四元组(Q, I, , f ).
其中:Q:状态集合; I, :Q的子集,分别代表输入和输出 f: 定义在Q之上的一个映射,
1.2 算法复杂性分析(1) • • • • 计算机资源:时间、空间 复杂性:所需资源多少 算法复杂性:算法运行时所需资源的量 算法复杂性分析目的:分析问题复杂性、 选择最好算法 • 时间复杂性:所需时间资源的量T(n) • 空间复杂性:所需空间资源的量S(n)
• 其中n是问题的规模(输入大小)
算法复杂性分析(2) • 算法是否可行? • 可计算理论 • 时间复杂性细化 • 三种典型的复杂性: 最坏、最好、平均复杂性
且有:若q Q ,则:f(q) = q。
1. 计算序列描述:
若对于I 的每一个输入x,由f 定义一个计算序列: y0 , y1 , y2 , …… 。 其中:y0 = x; yk+1 = f( yk ) (k 0)。
若一个计算序列在第k步终止,且k是使yK 的最小整数,则称yk是由x产生的输出。 2. 算法描述: 一个算法是对于I 中所有输入x, 都能在有穷步 内终止的一个计算序列。

算法设计与分析基础

算法设计与分析基础

2023/12/21
20
LingJie/GDUT
1.2.6 详细表述该算法的方法
• 可以用到的工具有自然语言(nature
language)、伪代码(pseudocode)以及程序 流程图(flow chart)等。
• 当对一个问题有了概要的理解后,下面的工作
就是把这个问题的想法进行细化。所谓的细化 就是把它们表示成算法的步骤。
令执行顺序以及同步等问题。并行算法的设计 有相应的理论,这里仅考虑串行算法。
2023/12/21
17
LingJie/GDUT
1.2.3 选择精确或者近似的算法
• 解决问题下一步要考虑的是使用精确的还是近
似的算法。并不是每一个可解的问题都有精确 的算法,例如求一个数的平方根,求非线性方 程的解等。有时候一个问题有精确的解法但是 算法的执行效率很差,例如旅行家问题。因此 如果待处理的问题涉及到上述那些方面,则要 考虑是选择精确的还是近似的算法。
2023/12/21
10
LingJie/GDUT
-- 2* 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
-- 2 3*
5
7
9
11
13
15
17
19
21
23
25
-- 2 3
5*
7
11
13
17
19
23
25
-- 2 3
5
7
11
13
第一步:找出m的所有质因数。 第二步:找出n的所有质因数。 第三步:从第一步求得的m的质因数分解式和第二步求得的n
的质因数分解式中,找出所有公因数。 第四步:将第三步找到的公因数相乘,结果为所求的

算法与程序设计第一章

算法与程序设计第一章

算法与程序设计第一章算法与程序设计是计算机科学和软件工程的基础课程,它们是培养计算机科学家和工程师的关键。

算法是解决问题的方法或步骤的有序集合,而程序设计是将算法转化为计算机能够执行的指令的过程。

本章主要介绍了算法和程序设计的基本概念、算法分析和程序设计的基本流程。

在第一节中,我们了解到算法是如何定义的,并且学习到算法设计和分析的基本原则。

算法设计的目标是找到一个最优的解决方案,而算法分析则是评估一个算法的好坏以及效率。

我们可以通过问题规模和算法的执行时间来评估一个算法的效率,通常用大O表示法来表示算法的时间复杂度。

时间复杂度可以帮助我们分析算法的执行时间是否随着问题规模的增加而显著增加。

在第二节中,我们学习了程序设计的基本概念和原则。

程序是由一系列指令组成的,它告诉计算机如何执行特定的任务。

程序设计的过程包括问题分析、程序设计、编码和调试等步骤。

我们应该采用模块化和分层的方法来设计程序,这样可以提高程序的可读性和可维护性。

在第三节中,我们介绍了伪代码和流程图这两种用来描述算法的工具。

伪代码是一种类似于编程语言的描述算法的方法。

它可以帮助我们更清楚地理解算法和程序的逻辑结构。

流程图是一种图形化表示算法的方法,用图形符号表示指令和流程控制结构。

流程图可以帮助我们更直观地理解算法的执行过程。

在第四节中,我们讨论了问题的抽象和建模。

一般来说,问题的抽象是将具体的问题转化为一种更一般和更抽象的形式。

问题的建模是将抽象化的问题转化为计算机可以处理的问题。

通过问题的抽象和建模,我们可以更好地理解问题的本质和结构,并且能够更有效地设计解决方案。

在最后一节中,我们介绍了基本的数据结构和算法。

数据结构是组织和存储数据的方式,而算法是操作数据的一组规则。

数据结构和算法是计算机科学和软件工程的核心内容。

我们讨论了数组、链表、栈和队列等常用的数据结构,以及它们的基本操作和应用场景。

我们还介绍了线性和二分这两种常用的算法。

算法设计及分析第一章算法概述-

算法设计及分析第一章算法概述-
满足某个条件时结束。又称重复或迭代结构。
注意: 模块间的调用也是一种控制结构,特别 地 模块自身的直接或间接调用—递归结构,是一 种功能很强的控制结构。
3)数据结构
算法操作的对象是数据,数据间的逻辑关系、 数据的存储方式及处理方式就是数据的数据结构。 它与算法设计是紧密相关的。
注意: 算法是把人类找到的求解问题的方法, 用以上要素过程化、形式化、机械化地表示出来。
目录
前言 第一篇 引入篇
第一章 算法概述 第二章 算法分析基础 第二篇 基础篇 第三章 算法基本工具和优化技巧 第三篇 核心篇 第四章 基本的算法策略 第五章 图的搜索算法
第四篇 应用篇 第六章 算法设计实践
引入篇
第一章 算法概述
1.1 用计算机求解问题
问题求解(problem solving)是个大课题, 它涉 及归约、推断、决策、规划、常识推理、定理证明 和相关过程的核心概念
原则是简单性、独立性和完整性。
(3)模块间的接口问题
传递方式一般有以下几种: ① 按名共享: 全局变量 ② 子模块返回调用模块信息: 子模块名 ③ 调用模块传递给子模块信息: 值参数传递 ④ 调用模块与子模块互相传递信息: 变量参数传递(C语 言没有此种传递方,Pascal、C++语言提供此类参数) ⑤ 按地址共享变量: 地址参数传递(参数为指针变量名 、数组名,变量地址)
1、算法的定义
算法是指在解决问题时, 按照某种机械步骤一定可 以得到问题结果的处理过程。当面临某个问题时, 需要找到用计算机解决这个问题的方法和步骤, 算 法就是对解决这个问题的方法和步骤的描述,是指 令的有限序列。
机械步骤是指, 算法中有待执行的运算和操 作, 必须是相当基本的。换言之, 它们都是能够精 确地运行的算法, 执行者甚至不需要掌握算法的 含义, 即可根据该算法的每一步骤要求, 进行操作 并最终得出正确的结果。

算法设计与分析知识点

算法设计与分析知识点

第一章算法概述1、算法的五个性质:有穷性、确定性、能行性、输入、输出。

2、算法的复杂性取决于:(1)求解问题的规模(N) , (2)具体的输入数据(I),( 3)算法本身的设计(A),C=F(N,I,A。

3、算法的时间复杂度的上界,下界,同阶,低阶的表示。

4、常用算法的设计技术:分治法、动态规划法、贪心法、回溯法和分支界限法。

5、常用的几种数据结构:线性表、树、图。

第二章递归与分治1、递归算法的思想:将对较大规模的对象的操作归结为对较小规模的对象实施同样的操作。

递归的时间复杂性可归结为递归方程:1 11= 1T(n) <aT(n—b) + D(n) n> 1其中,a是子问题的个数,b是递减的步长,~表示递减方式,D(n)是合成子问题的开销。

递归元的递减方式~有两种:1、减法,即n -b,的形式。

2、除法,即n / b,的形式。

2、D(n)为常数c:这时,T(n) = 0(n P)。

D(n)为线形函数cn:r O(n) 当a. < b(NT(n) = < Ofnlog^n) "n = blljI O(I1P)二"A bl吋其中.p = log b a oD(n)为幕函数n x:r O(n x) 当a< D(b)II JT{ii) = O(ni1og b n) 'ia = D(b)ll].O(nr)D(b)lHJI:中,p= log b ao考虑下列递归方程:T(1) = 1⑴ T( n) = 4T(n/2) +n⑵ T(n) = 4T(n/2)+n2⑶ T(n) = 4T(n/2)+n3解:方程中均为a = 4,b = 2,其齐次解为n2。

对⑴,T a > b (D(n) = n) /• T(n) = 0(n);对⑵,•/ a = b2 (D(n) = n2) T(n) = O(n2iog n);对⑶,•/ a < b3(D(n) = n3) - T(n) = 0(n3);证明一个算法的正确性需要证明两点:1、算法的部分正确性。

算法与程序设计第一章如何用计算机解决问题课件

算法与程序设计第一章如何用计算机解决问题课件

水仙花数流程图描述
开始 N=100 N<=999 Y
N
N的个位数的三次方+N 的十位数的三次方+N的 Y 百位数的三次方=N N N=N+1 输出N值
结束
用伪代码描述水仙花数算法 For N=100 to 999 if N的个位数的三次方+N的十位数的三次方+N的百位数的三次方=N then 输出n end if next1
课堂练习: 分别用自然语言和流程图描述求解 1、所有水仙花数的问题。水仙花数是指一个三位数, 它的各位数的立方和正好等于该数本身。如 153=13+53+33。 2、设计统计前1000个自然数中的奇数的个数的流程图
3、设计算法:找出乘积为840的两个相邻偶数
水仙花数自然语言描述 1、将N的初始值赋为100 2、如果N的个位数的三次方加上N的十位数的三次 方再加上N的百位数的三次方等于N,输出N值,否则转 入第3步 3、如果N<=999,将N的值加1,转到第2步,否则转入 第4步 4、输出运算结果,结束程序
算法独立于任何具体的程序设计语言,一个算法 可以用多种程序设计语言来实现。
算法的特征
算法要有一个清晰的起始步,表示处理问题的起点, 且每一个步骤只能有一个确定的后继步骤(1算法的 确定性),从而组成一个步骤的有限序列(2算法的有 穷性);要有一个终止步(序列的终止)表示问题得到 解决或不能得到解决;每条规则必须是确定的、可 行的(3算法的可行性)、不能存在二义性。算法总是 对数据进行加工处理,因此,算法的执行过程中通 常要有数据4输入(0个或多个)和数据5输出(至少一 个)的步骤。
人解决问题的一般过程 观察问题→分析问题→脑中收集信息→根据已有的 知识、经验判断、推理→采用方法和步骤解决 简单地概括 ⑴明确问题 ⑵提出假设 ⑶验证假设

计算机算法设计与分析--第1章 算法概述

计算机算法设计与分析--第1章 算法概述
12
③确认算法。算法确认的目的是使人们确信这一算 法能够正确无误地工作,即该算法具有可计算性。 正确的算法用计算机算法语言描述,构成计算机程 序,计算机程序在计算机上运行,得到算法运算的 结果; ④ 分析算法。算法分析是对一个算法需要多少计算 时间和存储空间作定量的分析。分析算法可以预测 这一算法适合在什么样的环境中有效地运行,对解 决同一问题的不同算法的有效性作出比较; ⑤ 验证算法。用计算机语言描述的算法是否可计算、 有效合理,须对程序进行测试,测试程序的工作由 调试和作时空分布图组成。
16
算法描述
1. 从第一个元素开始,该元素可以认为已 经被排序 2. 取出下一个元素,在已经排序的元 素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素, 将该元素移到下一位置 4. 重复步骤3,直到找到已排序的元素 小于或者等于新元素的位置 5. 将新元素插入到该位置中 6. 重复步骤2
15
1.3 算法示例—插入排序算法
算法的思想:扑克牌游戏
a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1 a0,...,n-1
= = = = = = =
5,2,4,6,1,3 5,2,4,6,1,3 2,5,4,6,1,3 2,4,5,6,1,3 2,4,5,6,1,3 1,2,4,5,6,3 1,2,3,4,5,6
8
算法≠程序
算法描述:自然语言,流程图,程序设计
语言,伪代码 用各种算法描述方法所描述的同一算法, 该算法的功用是一样的,允许在算法的描述 和实现方法上有所不同。
本书中采用类C++伪代码语言描述算法
9
人们的生产活动和日常生活离不开算法, 都在自觉不自觉地使用算法,例如人们到 商店购买物品,会首先确定购买哪些物品, 准备好所需的钱,然后确定到哪些商场选 购、怎样去商场、行走的路线,若物品的 质量好如何处理,对物品不满意又怎样处 理,购买物品后做什么等。以上购物的算 法是用自然语言描述的,也可以用其他描 述方法描述该算法。

算法设计与分析耿国华第一章

算法设计与分析耿国华第一章

(2i 1) n
i 1
n
2
(2i 1) (2i 1) 2n 1 (n 1)
i 1 i 1
2
2n 1 n 2
故命题成立。
Chapter
1
1.5 算法复杂性分析方法
1.5.1 复杂度函数
1.5.2 最好、最坏和平均情况
1.5.3 渐进分析 1.5.4 阶的证明方法
Chapter
1
1.3 算法分析准则
分析准则
(4)高效率和低存能量 评价算法性能另一个要考虑的因素就是算法的运行效率,也 就是要估计一下按算法编制的程序在计算机上执行所耗费的时 间和所占用空间。 评价算法运行效率的主要技术指标是:算法运行的时间复杂 度和空间复杂度。
Chapter
1
1.4 算法分析基础
Chapter
1
1.1 引言----算法特性
• 算法特性
(1)有限性:
一个算法必须保证执行有限步之后结束
(2)确定性(无二义)
算法的每一步骤必须有确切的定义
(3)可行性
算法原则上能精确地运行。在现有条件情况下,是可以
实现的 。
Chapter
1
1.1 引言----算法特性• 算法特性(4)输入
一个算法有0个或多个输入,以刻画运算对象的初始情况
Chapter
1
1.1 引言----算法描述方式
• 算法的描述方式
(1)自然语言
所谓的“自然语言”指的是日常生活中使用的语言,如汉语、 英 语。用自然语言进行描述通俗易懂,容易掌握,但是不 严谨、容易有二义性。
(2)框图(流程图)
它是用各种几何图形、流程线及文字说明来描述计算过程的 框图。直观地表示算法的整个结构,着重处理流程,便于检查 修改。但是它无法表达数据流程。

第一章算法设计基础

第一章算法设计基础

第一章算法设计基础著名计算机科学家N.Wirth教授曾提出过一个著名的公式:程序=算法+数据结构。

可见算法设计将对程序的实现起关键作用。

谭浩强先生也说过,离开算法就谈不上程序。

那么,究竟什么是算法(algorithm)呢?可以说,算法是对特定问题求解步骤的一种描述。

至于采用什么手段、何种方式进行描述则是可以根据各人的喜好和习惯去选择。

目前,算法描述手段主要有:流程图、结构化流程图(N-S图、PAD图)、自然语言、伪代码等。

程序是通过高级语言,也即程序设计语言来书写的,它必须符合高级语言的语法规定,以最终能够在计算机上运行为目的;而算法设计则可以更加灵活自由地书写,它不必遵循语法规则,只是作为程序设计的参考依据。

也就是说,在进行程序书写之前,通过算法描述来明确程序设计的思路和具体解决问题的方案。

下面【例1】通过一个相同的算法设计问题,采用不同方法对其进行描述。

【例1】设计求n的阶乘n!的函数的算法。

法一、N-S图:法二、PAD图:*注:T即True,表示“真”;F即 False,表示“假”。

法三、自然语言结合伪代码方法:1.若n=0,则fac←1;2.否则,2.1. fac←1;2.2. i←1;2.3. 当i≤n 做循环:2.3.1. fac←fac*i;2.3.2. i←i+1;3.返回fac值;由上例看出,针对同一问题,可以选择各种不同算法描述,其目的都是为高级语言的编程作准备。

算法可以不必考虑编程所使用的具体语言,它只提供解决问题的方法及思路。

上例中的算法描写语句fac←1;也可以写成fac=1; 其意思是:将1送给变量fac。

可见,书写算法的自由度是很大的。

那么,算法究竟应该描述到何种程度才算完成算法的设计呢?比如说,总不能说“将100以内的素数逐个找出并输出”就算是完整的算法设计吧!其中的细节实现是需要在算法设计中加以体现的。

算法究竟应该描述到多细,这个尺度应如何把握?我们认为需以大家都能读懂、高级语言方便实现为尺度。

计算机算法设计与分析

计算机算法设计与分析
其中:Q是包含子集 I 和Ω的集合,表示计算的状态. I、 Ω分别表示计算的输入、输出集合. F 表示计算的规则,它是一个由Q到它自身的函数,且 具有自反性,即对于任何q Q,有F(q)=q.
问题
抽象
算法
输 入
computer
计算机与软件学院(School of Computer and Software)
对特定问题求解步骤的一种描述,是指 令的有限序列。
计算机与软件学院(School of Computer and Software)
Chap1
Nanjing University of Information Science & Technology
算法的形式化定义:算法是一个四元组( Q,I,Ω,F )
计算机与软件学院(School of Computer and Software)
Chap1
Nanjing University of Information Science & Technology
例:百鸡问题. “鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,
值钱一。百钱买百鸡,问鸡翁、母、雏各几何?” a:公鸡只数,b:母鸡只数,c:小鸡只数。约束方程: a+b+c=100 5a+3b+c/3=100 c%3=0 第一种解法: a、b、c的可能取值范围:0 ~ 100,对在此范围内的 a、b、c的 所有组合进行测试,凡是满足上述三个约束方程的组合,都是 问题的解。
计算机与软件学院(School of Computer and Software)
Chap1
Nanjing University of Information Science & Technology

算法设计与分析第1章 算法概述

算法设计与分析第1章 算法概述

T avg ( n )

p ( I )T ( I )
size ( I ) n
p p p p 1 2 3 n n 1 p n n n n

2013-5-24
p n

i1
n
i n 1 p
算法设计与分析
p( n 1) 2
2013-5-24
算法设计与分析
16
与机器无关的时间效率
(1)Tmax(n) = max{ T(I) | size(I)=n }=O(n) (2)Tmin(n) = min{ T(I) | size(I)=n }=O(1) (3)在平均情况下,假设: (a) 搜索成功的概率为p ( 0 p 1 ); (b) 在数组的每个位置i ( 0 i < n )搜索成功的概率相同,均为 p/n。
2013-5-24 算法设计与分析 18
2. 复杂性的渐近分析
• 比较两种不同的复杂性
– 3×n + 2和3×n 论当n→∞时,算法的时间复杂性,即复杂性 的渐近性态
2013-5-24
算法设计与分析
19
1) 渐近性态
• 设T(n)为算法A的时间复杂性函数,则它是n的单 ~ 调递增函数,如果存在一个函数 T( n ) 使得当 n→∞,有:
• 描述算法可以有多种方式:自然语言、数 学语言、流程图、表格方式、 图示形式、 程序设计语言等。 在此将采用C++与自然 语言相结合的方式来描述算法。
• 算法设计方法主要有:分治策略、动态规 划、贪心法、回溯法、分支限界、概率算 法等。
2013-5-24 算法设计与分析 13
1.2 算法的复杂性分析
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序是算法用某种程序设计语言的具体实现。 程序可以不满足算法的性质(4)。
4、算法描述语言
自然语言、 流程图、 程序设计语言、 伪代码等。
9
5、问题求解(Problem Solving)
理解问题
数学模型
设计算法 证明正确性
设计程序
算法分析
10
1.2 算法复杂性分析
1、复杂性的计量
算法的复杂性(C):算法执行所需的时间和空间 的数量。
时间复杂性(T)
算法的复杂性(C)
空间复杂性(S)
11
1.2 算法复杂性分析 C F(N, I, A)
问题的规模 输入
算法
T T (N, I, A)
S S(N, I, A)
12
1.2 算法复杂性分析
时间复杂性:
元运算种类
k
T T (N, I ) tiei (N, I ) i 1
元运算时间 元运算次数
)
max
IDN
T
(N
,
I
)
max
IDN
tiei (N , I )
i 1
k
tiei (N , I * ) T (N , I * ) i 1
k
~
~
最好情况: Tmin(N )
min
IDN
T (N, I )
i1
tiei (N, I )
T (N, I)
15
1.2 算法复杂性分析
平均情况:
k
Tavg (N ) P(I )T (N, I ) P(I ) ti ei (N, I )

4. 如果 g(N) O( f (N)) ,则 O( f ) O(g) O( f )

5. f O( f ) 6. O(Cf (N)) O( f (N))
机械工业出版社,2007。
3
内容安排:
一 算法概述 二 递归与分治策略(I) 三 动态规划 (I,H) 四 贪心算法 (I) 五 回溯法 (H) 六 分支限界法 (H)
4
第一章 算法概述
Algorithm Introduction
5
学习要求:
理解算法的概念 理解什么是程序,程序与算法的区别和内在联系 掌握算法计算复杂性的概念 掌握算法渐进复杂性的数学表达 掌握用C++语言描述算法的方法 了解NP类问题的基本概念

13
例 题 1-1 (P7 1-4)
(1)设新机器在用同一算法在同样的时间t 内能解输入规模
为 n1 的问题。
t
3 2n
3 2n1 64
, n1
n6
(2) n12 64n2 n1 8n
(3)由于T(n) 为常数,因此算法可以解任意规模的问题。
14
1.2 算法复杂性分析
最坏情况:
k
Tm ax( N
6
1.1 算法与程序
1、算法 一系列将问题的输入转换为输出的计算 或操作步骤。
7
2.算法的性质
输入: 有外部提供的量作为算法的输入。 输出: 算法产生至少一个量作为输出。 确定性:组成算法的每条指令是清晰、无歧义的。 有限性:算法中每条指令的执行次数是有限的,
执行每条指令的时间也是有限的。
8
3、程序与算法的区别与内在联系
I DN
I DN
i 1
输入I的概率
16
例 题 1-2
在一维整型数组 A[n]中顺序查找与给定值 k 相等的元素(设计该
数组中有且仅有一个元素值为 k ),顺序查找算法如下:
Int Find(int A[], int n)
{
i:=0;
a
while i<n
t
最好情况:Tmin 3a 2t s
i:=i+1;
f (n) 3n2 10n
g(n) n2
3n2 10n O(n2 )
h(n) n3
3n2 10n O(n3) ??
*上界的阶越低,结果就越有价值。
23
2)渐进性态的阶
1. O( f ) O(g) O(max(f , g))

2. O( f ) O(g) O( f g)

3. O( f ) O(g) O( f g)
20
2)渐进性态的阶
1) N 1,有3N 4N ,所以3N O(N)
2) N 1,有 N 1024 1025N ,所以 N 1024 O(N)
3) N 10,有 2N 2 11N 10 3N 2 ,所以
2N 2 11N 10 O(N 2)
21
2)渐进性态的阶
练习:1) f (n) 3n2 10n
(a+s)
n If A[i]==k t
Break
最坏情况:Tmax 2a (2t a s)n
Reture i
a
}
分析:问题的规模为n,设元运算执行时间为赋值:a,判断:t,加法:s。
17
2、 复杂性的渐进性态
1)渐进性态
设 T(N) 为算法 A 的时间复杂性函数,则它是 N 的单增函数,
如果存在一个函数
T(N)
3N 2 4N log N 7
* 渐进分析适用于N充分大的情况,当问题的规模很小时,或比较的两算法 同阶时,则不能做这种简化.
19
2)渐进性态的阶
设 f (N) 和 g(N) 是定义在正整数集上的正函数,
(1)大O表示法 (算法运行时间的上限 )
若存在正常数 C 和自然数 N 0 使得当 N N0 时,有 f (N) Cg(N) ,则称函数 f (N) 在 N 充分大时有上界, 且 g(N) 是它的一个上界,记为 f (N) O(g(N)) , 也称 f (N) 的阶不高于 g(N) 的阶。
~
T
(
N
)
,使得当
N
时,有
~
T(N)T(N) 0 T(N)

~
T
(
N
)

T
(
N
)

N
时的渐进性态或渐进复杂性.
18
2、 复杂性的渐进性态
~
例: T (N ) 3N 2 4N log N 7 ,则 T (N) 3N 2 。
~
T (N ) T (N ) 4N log N 7
0(N )
计算机算法设计与分析
1
algorithm@
123456
网易网盘
算法2013
2
参考书目:
1) 王红梅,算法设计与分析,清华大学出版社,2006。 2) 吕国英,算法设计与分析,清华大学出版社,2009。 3) Alfred V. Aho等,(黄林鹏等译)计算机算法的设
计与分析,机械工业出版社,2007。 4) R. C. T. Lee,(王卫东译)算法设计与分析导引,
2) f (n) n2 2n
10
3) f (n) 21 1
n
4) f (n) log n3
5) f (n) 10 log 3n
3n2 10n O(n2 )
n2 2n O(2n ) 10
21 1 O(1) n
log n3 O(log n)
10 log 3n O(n)
22
2)渐进性态的阶
相关文档
最新文档