算法效率分析基础-算法四
主要内容:
介绍研究算法效率的通用框架
- 介绍三种符号: O(读作O),Ω(读作omega),和Θ(读作theta).这些数学借来的符号已经成为讨论算法效率的特定语言
- 使用通用框架系统对非递归算法进行分析.这种分析主要的工具是先定义一个代表算法运行时间的求和表达式,然后使用标准的求和法则对表达式进行化简
- 使用通用架构系统对递归算法进行分析.在这里主要分析工具不是求和,而是一种称之为递推关系的特殊等式,我们会告诉大家如何建立这种递推关系,然后对其介绍一种求解方法.
- 对斐波那契数列进行分析
分析框架
我们即将描述一个分析算法效率的一般性框架.首先必须支出有两种算法效率:时间效率(time complexity)和空间效率(space complexity).时间效率也称之为时间复杂度,指出正在讨论的算法运行的有多快;空间效率也称空间复杂度,关心算法需要的额外空间.如今额外的空间问题已经不是我们重点关注的问题.对于大多数问题来说,我们在速度上取得的进展远远大于空间上的进展
输入规模的度量
几乎所有的算法对规模更大的输入都需要运行更长的时间.例如,需要更多的时间来对更长的数组排序,更大的矩阵相乘也需要花费更多的时间.所以在研究算法效率的时候把它当做一个以算法输入规模n为参数的函数是非常合乎逻辑的.在大多数情况下,选择什么参数是一目了然的.例如对于排序,查找,寻找列表的最小元素以及其他与列表有关的问题来说买这个参数就是列表的长度.对一个n次多项式
的求值问题来说,这个参数是多项式的次数,或者说是他系数的个数,系数的个数比次数大一运行时间的度量单位
掌握一下规律,我们不难发现一个算法中的基本操作:它通常是算法最内层循环中最费时的操作.例如,大多数排序算法是通过比较列表中的待排序元素来工作的.对于这种算法来说基本操作就是对键的比较.再举一个例子,求解数学问题的算法一般会设计四则运算:加减乘除,其中耗时最大的是除法,其次是乘法,最后是加减法.
这样我们建立起了一个算法时间效率的分下框架.他提出,对于输入规模n的算法,我们可以统计他的基本操作执行次数,对其效率进行度量.我们接下来将介绍递归算法和非递归算法的执行次数.
我们介绍该框架的一个重要应用
C(n)是基本操作的执行次数增长次数
表中数字的数量级对于算法的分析具有深远意义.这些函数中增长最慢的是对数函数.实际上他的增长如此之慢,以至于我们认为:如果一个程序的算法具有对数级的基本操作次数,改程序对于任何实际规模的输入几乎都会在瞬间完成.还要注意虽然特定的操作次数会明显依赖对数的底,但是一下方程
允许他在不同的底之间转换,仅对对数部分以外的新增一个乘法常量.这就是为什么我们仅对函数的增长次数以及其常数感兴趣时,要忽略常数的底,简写为log n.
在效率的另一端是幂函数2的n次方和阶乘函数n!,一个需要记住的要点是:
一个需要指数级操作次数的算法只能用来解决规模非常小的问题
我们还可以用另一种方式
4. 算法最优,最差和平均效率
一个算法的最差效率(worst-case efficiency)是指当输入规模为n的情况下在最坏情况下的效率.这时,相对于其他规模为n的输入,该算法运行时间最长.
通过确定算法运行时间上界,分析最坏情况下为我们提供了算法效率的一个非常重要的信息.
对于规模为n的算法来说,算法的运行时间不会超过最坏输入情况下的运行时间Cworst(n)
一个算法的最优效率(best-case efficiency)是指输入规模为n时算法在最优情况下的效率.对于顺序查找,Cbest(n)=1
平均效率是随机输入
5. 分析框架概要
渐进符号和基本效率类型
- O(g(n))是增长次数小于等于g(n)(及其常数倍,n趋向于无穷大)的函数集
- Ω(g(n))是增长次数大于等于g(n)(及其常数倍,n趋向于无穷大)的函数集
- Θ(g(n))是增长次数等于g(n)(及其常数倍,n趋向于无穷大)的函数集
- 符号O
2. 符号Ω
3. 符号Θ
4. 渐进符号的有用特性
5. 基本的渐进效率类型
非递归算法的数学分析
- 分析非递归算法效率的通用方案
- 算法分析常用的求和公式和法则
递归算法的数学分析
- 通用方案
计算第n个斐波那契数
算法经验分析
算法效率分析基础-算法四相关推荐
- 《算法设计与分析基础》Chapt 2 算法效率分析基础
2.1 分析框架 2.1.1 输入规模的度量 大多数情况,以输入数n 矩阵,维数 数值算法,数字的比特数 2.1.2 运行时间的度量单位 找出算法中最重要的操作,即基本操作 计算他们的运行次数 2.1 ...
- 算法时间复杂度分析基础
摘要 本文论述了在算法分析领域一个重要问题--时间复杂度分析的基础内容.本文将首先明确时间复杂度的意义,而后以形式化方式论述其在数学上的定义及相关推导.从而帮助大家从本质上认清这个概念. ...
- 编程方法学23:搜索排序与算法效率分析
前言 本笔记是斯坦福公开课,编程方法学的学习笔记. 总体而言,这门课讲了很多很基础的东西,具有很强的通用性. 正文 本次的笔记对应的是第二十三节课,这堂课是助教来讲搜索排序与算法效率分析的知识. 1线 ...
- PHP算法之四大基础算法
前言 虽然工作中,你觉得自己并没有涉及到算法这方面的东西,但是算法是程序的核心,一个程序的好与差,关键是这个程序算法的优劣,所以对于冒泡排序.插入排序.选择排序.快速排序这四种基本算法,我想还是要掌握 ...
- mysql left/right join算法效率分析_mysql left join,right join,inner join超详细用法分析
MySQL left join,right join,inner join超详细用法分析 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 ...
- 编程的50种基础算法_[校招基础算法]常见的ML、DL编程题
原文作者:Jack Stark 原文连接:https://zhuanlan.zhihu.com/p/81891467 在算法岗的面试中,除了数据结构和算法的编程题外,机器学习/深度学习的编程题也常常用 ...
- c++编写算法判断二叉树是否为完全二叉树_[校招-算法题] 二叉树基础算法1
二叉树是面试中常考的数据结构,因为涉及大量指针操作,因此可以考察思维的严谨性和灵活性.但是校招中的二叉树题规律性很强,因此需要总结一下. 各种常见的二叉树概念 二叉树:每个结点最多有两个子树(左子树和 ...
- [AcWing算法基础课] 一.基础算法
Algorithms + Data Structures = Programs. --Niklaus Wirth 本章包括排序.二分.高精度.前缀和与差分.双指针算法.位运算.离散化.区间合并等内容 ...
- 海外某音x-gorgon算法原理分析及算法源码公布
算法源码见附件 分享一个去年逆的一个海外版某音 1474版本 x-gorgon算法,这里简单介绍一下算法原理,首先malloc出来一个0x1A大小的空间,然后截取用户传入的byte数组中的参数,截取开 ...
最新文章
- 北京/上海/深圳内推 | 百度视觉技术团队招聘视觉/3D算法工程师
- python读取、写入、移动、复制文件(夹)以及其他关于文件(夹)的操作
- 8. An Introduction to MCMC for Machine Learning (2)
- TensorFlow官方入门实操课程-卷积神经网络
- garch预测 python_安利几个非常实用的 Python 库
- jqury ajax跳转界面,jquery ajax 界面跳转失败解决方案
- cmake install_在vscode中使用cmake-format(windows端)
- 你见过“最没见过世面”的女孩子是什么样的?
- Cacti监控Memcached时Count Stats和Memory/Structures没数据
- ELK温度监控--lmsensorsbeat
- 转载:Linux内核探索之路——关于书
- java-高级编程课-实验题集标答整理
- Coverity代码静态检测工具导出Excel文件
- 名悦集团国庆出行自驾游攻略
- Matlab矩阵和向量中的常用函数
- tcp-ip网络模型-物理层
- 小区安装人脸识别系统,先回答五大安全问题
- Kettle数据从txt到数据库表,表到文件
- int 长度 mysql_MySQL int 类型的长度和范围解惑
- 一张表格分成两页打印_表格被分成两页怎么处理