版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、李清勇 教授算法设计与分析引言为什么需要这个概念算法复杂度?1. 评价指标2. 交流符号Boss:针对这个问题你们算法的性能怎么样?Developer 1:A算法复杂度是?Developer 2:B算法复杂度是?最大和连续子数列问题:算法1 算法2 算法3 算法4算法复杂度 直观定义算法复杂度是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要的空间资源的量称为 空间复杂性。这个量应该只依赖于算法要解的问题的规模、算法的输入和算法本身的函数。N、I表示算法要求解问题的规模、算法的输入。一般把时间复杂性和空间复杂性分开,并分别用T和S来表示,则有: T=T(N,I)和S=S(N
2、,I)。问题规模问题的规模: N=2 VS N=10000迷宫问题: 在一个N*N的迷宫中,求解从入口到出口的路径,如果不存在路径则返回0。输入实例问题规模N=10000时,算法的输入: 输入1:没有路径,且入口即被障碍包围输入2:有一条路径;迷宫问题: 在一个N*N的迷宫中,求解从入口到出口的路径,如果不存在路径则返回0。直观定义的困境影响算法执行时间的因素:计算机配置算法求解的问题规模算法求解的输入实例时间复杂度不应该是在特定计算机上求解某一个输入实例所需要的运行时间;而应该是一个不依赖于计算机配置、问题规模和输入实例的抽象表示。算法复杂度分析 指令抽象T(N, I) 表示特定算法在一台抽
3、象的计算机上运行所需要的时间。 K个元运算,O1, O2, , Ok, 运行一次所需时间为 t1, t2, , tk; 统计Oi的调用次数为ei,ei = ei(N, I); 因此,T(N, I) = tiei(N, I)。算法复杂度分析 指令抽象冒泡排序算法(升序排列)void sort(int *pValues, int iDim) for (int i = 0; i iDim; i+) for (int j = 1; j iDim i; j+) if (pValuesj pValuesj -1) int iTemp = pValuesj; pValuesj = pValuesj - 1;
4、 pValuesj - 1 = iTemp; 不可对规模为N的每一种合法输入都统计Swap,需合理的简化Swap 如果输入为 1, 2, 3, 4, 5, 需要0次Swap操作 如果输入为5, 4, 3, 2, 1, 需要10次Swap操作算法复杂度分析 输入简化最坏情况下的时间复杂性:最好情况下的时间复杂性:平均情况下的时间复杂性:时间复杂度表示 输入简化冒泡排序算法(升序排列)void sort(int *pValues, int n) for (int i = 0; i n; i+) for (int j = 1; j n i; j+) if (pValuesj pValuesj -1)
5、 int iTemp = pValuesj; pValuesj = pValuesj - 1; pValuesj - 1 = iTemp; T(N)的表达式比较复杂,需合理的简化!SwapT(N) = (N-1) + + 1 = N(N-1)/2 = 0.5N2 0.5NBoss:这个算法的复杂度怎么样?Developer:它的复杂度是0.5N2 0.5NBoss:神马?囧时间复杂度表示函数简化上讲回顾void sort(int *pValues, int n) for (int i = 0; i n; i+) for (int j = 1; j n i; j+) if (pValuesj p
6、Valuesj -1) int iTemp = pValuesj; pValuesj = pValuesj - 1; pValuesj - 1 = iTemp; 冒泡排序算法(升序排列)时间复杂度记号时间复杂度的记号包括:O 时间复杂度记号OO的定义:设f(N)和g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当NN0时有f(N)Cg(N),则称函数f(N)当N充分大时上有界,且g(N)是f(N)的一个上界,记为f(N)=O(g(N),即f(N)的阶不高于g(N)的阶。 f(N)Cg(N)g(N)N0注意:O得到的只是一个充分大的上界,这个上界的阶越低则评估就越精确,结果
7、就越有价值!例子1证明:例子2证明(反证法):时间复杂度记号根据O的定义,容易证明它有如下运算规则:1) O(f)+O(g)=O(max(f,g);2) O(f)+O(g)=O(f+g);3) O(f)O(g)=O(fg);4) 如果g(N)=O(f(N),则O(f)+O(g)=O(f);5) O(Cf(N)=O(f(N),其中C是一个正的常数;6) f=O(f)。 O的定义:设f(N)和g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当NN0时有f(N)Cg(N),则称函数f(N)当N充分大时上有界,且g(N)是f(N)的一个上界,记为f(N)=O(g(N),即f(N)
8、的阶不高于g(N)的阶。 时间复杂度记号时间复杂度记号的定义: 如果存在正的常数C和自然数N0,使得当NN0时有f(N)Cg(N),则称函数f(N)当N充分大时下有界,且g(N)是它的一个下界,记为f(N)=(g(N),即f(N)的阶不低于g(N)的阶。 的定义:定义f(N) = (g(N) 当且仅当 f(N)=O(g(N) 且f(N)= (g(N),此时称f(N)与g(N)同阶。时间复杂度类别按照O(f)函数形式把时间复杂度分为两类: 多项式复杂度算法,形如:O(nc) 指数复杂度算法, 形如:O(cn)O(1)O(logn)O(n)O(nlogn)O(n2)O(n3)O(cn)O(n!)O
9、(nn)时间复杂度类别比较(1)时间复杂度类别比较(2)非递归算法时间复杂性分析1)确定关键操作 可以是高级程序设计语言中的赋值、比较、算术运算、逻辑运算、读写单个常量或单个变量等操作(一般被看作是基本操作,并约定所用的时间都是一个单位);也可以是由常数个基本操作构成的程序块。2)计算关键操作总的执行步数 一般是数列和的形式。3)求解其渐进阶,并用O(.)表示实例-1问题描述:给定数组A(长度为n)和数t,判断数组A中是否包含t?算法描述:bool isExist(float* iArray, int n, float t) for (int i = 0; i n; i+)if (iArray
10、i = t) return true;else return false; 实例-2问题描述:给定数组A和B(长度为n)和数t,判断数组A或者B中是否包含t?算法描述:bool isExist(float* iArrayA, float* iArrayB, int n, float t)for (int i = 0; i n; i+) if (iArrayAi = t) return true;for (int i = 0; i n; i+) if (iArrayBi = t) return true;return false;想想与例1的区别哦!实例-3问题描述:给定数组A和B(长度为n),
11、判断数组A和B中是否包含相同元素?算法描述:bool mon(float* iArrayA, float* iArrayB, int n)for (int i = 0; i n; i+)for (int j = 0; j n; j+) if (iArrayAi = iArrayBj) return true;return false;实例-4问题描述:给定数组A(长度为n),判断数组A中是否包含重复元素?算法描述:bool isDuplicate(float* iArrayA, int n)for (int i = 0; i n; i+) for (int j = i + 1; j n; j+
12、) if (iArrayAi = iArrayAj) return true;return false;想想与例3的区别哦!实例-5问题描述:给定升序排列的整数数组A(长度为n)和整数x,判断数组A中是否包含元素x,如果存在则返回其位置,否则返回-1?算法描述:int BinarySearch(int* iArrayA, int n, int x) int left=0; int right=n-1; while(left iArrayAmiddle) left=middle+1; else right=middle 1; return 1; /未找到x递归算法时间复杂性分析1)分析递归程序的结构,确定每一逻辑块的时间复杂性 非递归的程序块(或者子函数)用非递归方法分析其复杂性;递归函数的复杂性则跟据其输入规模递归地表示。2)构造复杂性函数的递归方程3)求解递归方程和渐进阶,并用O(.)表示实例-1算法描述:long FN( long n ) if (n1)穿孔圆盘,盘的尺寸由下到上依次
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某陶瓷厂陶瓷制品生产工艺准则
- 某麻纺厂生产环境检测办法
- 四年级上册夜间飞行的秘密第二课时完美教案
- 中小企业财税筹划策略
- 教师管理人员综合素质评价指标体系
- 施工现场材料领用与库存管理
- 肿瘤护理的在线教育
- S7-200Smart GET和PUT通讯实操指南
- 教师教研课评课技巧与范文
- 桥梁维护顶升专项施工方案范本
- 2026年广西真龙彩印包装有限公司笔试题及答案
- 河南资本集团笔试题库
- 2026湖北神农架林区公安局招聘辅警22人笔试备考试题及答案解析
- 2026菏泽特殊教育职业学校公开招聘人员(2人)考试模拟试题及答案解析
- 全国数据资源调查报告(2025年)
- 2026年ESG(可持续发展)考试题及答案
- 2026年防治碘缺乏病日宣传课件
- 身骑白马 SSA 三声部合唱谱
- 2026年高级社会工作师押题宝典题库及1套完整答案详解
- 2026年辅警转正考试时事政治试题及答案
- 20S515 钢筋混凝土及砖砌排水检查井
评论
0/150
提交评论