算法分析基础学习笔记
2017-08-10 20:40
344 查看
算法分析基础学习笔记
首先恩,复杂度是个神马东西(o゚▽゚)o
复杂度分为时间复杂度和空间复杂度。 ̄ω ̄= 复杂度这个玩意是用来表征某段程序的运行效率的。程序的运行效率的具体表现形式又分为该程序运行时解决问题所用时间多少和所用内存大小。其中,解决问题所用时间多少的数量级被抽象为时间复杂度,一般来说,时间复杂度越小越好,所代表的的时间需求就越少;解决问题所用的内存多少的数量级被抽象为空间复杂度,且空间复杂度越小越好,所代表的空间需求就越小。来谈谈令人色变的Ο和Ω符号,恩,还有Θ符(`・ω・´)
Ο和Ω这两符号是一对天生的好基友。它们都是用来近似地表征某段程序的复杂度的。我们先来看一下Ο,Ω,Θ,o的数学定义。
(摘自《数据结构与算法分析》一书)
定义:如果存在正常数c和n0 使得当 N >=n0 时T(N)<=cf(N),则记为T(N)=O(f(N))。
定义:如果存在正常数c和n0 使得当 N >=n0 时T(N)>=cg(N),则记为T(N)=Ω(g(N))。
T(N)=Θ(h(N)) 当且仅当 T(N)=O(h(N)) 且 T(N)=Ω(h(N))。
若 T(N)=O(p(N)) 且 T(N)!=Θ(p(N)) 则记 T(N)=o(p(N))。
在数学上,大O是用另一个(通常更简单的)函数来描述一个函数数量级的渐近上界。在这里,我们的实际算法时间复杂度为T(N),即T(N)为对算法实际运行时间的一个量度。第一个定义是说,最后总存在一个点n0,在它以后cf(N)至少与T(N)一样大。若忽略常数因子c,f(N)至少与T(N)一样大。这就是说,f(N)总会大于或等于T(N),这样,f(N)就形成了一个对T(N)的渐进上界,此时称O(f(N))为算法的最坏情况。如下图。
类似的,我们可以从第二个定义了解到g(N)为T(N)的渐进下界,此时称此时称Ω(g(N))为算法的最佳情况。如下图。
而Θ符号就是说算法的时间复杂度恰好能用函数h(N)表征,即T(N)=O(h(N)) 和 T(N)=Ω(h(N)) 同时满足,这样,上下界就重合为一条确定的曲线,从而夹在上下界之间的T(N)就只能为这条曲线了。
然后o符号是说p(N)应该小于T(N)而不能达到T(N)。如下图。
相关文章推荐
- 算法分析与设计基础 学习笔记 第一章
- 计算广告学习笔记1.8 广告的基础知识-ROI 分析
- OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
- 黑马程序员--Java基础学习笔记之抽象类和接口、内存结构分析、Java APIs
- 嵌入式开发之C基础学习笔记02--第一个例子分析
- 数据结构学习笔记1(算法分析)
- C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构
- web前端学习笔记-瀑布流的算法分析与代码实现
- 数据结构与算法基础学习笔记
- 基础算法学习笔记(一)----回溯法
- 统计自然语言处理基础学习笔记(7)——句法分析
- java 从零开始,学习笔记之基础入门<线程及实例分析>(十九)
- javascript动画、运动算法详细解释与分析 (一、Tween 运动算法学习笔记)
- 统计自然语言处理基础学习笔记(8)——文本分析
- 基础算法学习笔记(一)----回溯法
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- Introduction to Algorithms 算法导论 第1章 基础知识 学习笔记及习题解答
- OpenCV学习笔记(28)KAZE 算法原理与源码分析(二)非线性尺度空间构建