渐进符号

渐进符号

符号O:

比如说这里有个式子:     f(n)=O(g(n))  他表达了函数f(n)和g(n)的一种关系 什么关系呢? 数学定义如下:

存在c>0 n0>0 使得 n>=n0时:

0<=f(n)<=c * g(n) 恒成立.

我们来用这个式子证明 100(n^2)=O(n^3)       其中      f(n)  是100(n^2)   g(n)  是n^3

  要证明  存在c>0 n0>0 使得 n>=n0时:

  f(n)<=c * g(n)     即    100(n^2)<=c*(n^3) 恒成立.

  哈哈既然是说存在一个c>0 我们就取c=100 等式两边的 100消掉 即    n^2<=n^3

  可以看到 n0就算取1 n^2<=n^3 也是恒成立的.

  所以 100(n^2)=O(n^3).

那么这个渐进符号是为了解决什么问题呢?

比如说我们有两个排序算法

算法a 他的执行时间满足 y=f(n) n是要排序的数的个数 即为输入规模

算法b 他的执行时间满足 y=g(n)

如果 f(n)和g(n)满足:  f(n)=O(g(n))

那么我们可以证明 存在n0>0 使得g(n)>=f(n) 恒成立.

也就是说 当输入规模越来越大超过一定的规模时 算法b 消耗的时间 大于等于 算法a 消耗的时间

算法里面喜欢用算法随着问题规模变大 消耗时间的变化速度来描述算法的有效性 名曰 算法的时间复杂度

这是因为我们无法比较 几个算法实际运行的速度 因为咱这里有不同的 电脑 不同的 问题规模 这都是变数 不好比

不过时间复杂度还是很好用的

符号Ω: f(n)=Ωg(n)

  存在c>0 n0>0 使得 n>=n0时:

  0<=c*g(n)<=f(n) 恒成立.

时间: 2024-11-07 23:35:42

渐进符号的相关文章

如何理解算法中的渐进符号?

我们分析一个算法的时候,常常需要用到数学去描述其性能.最常用的的是?.比如在一段程序中有 For(I = 0,I < n ; I ++) For(J = 0; j < n ; j++); For (cnt = 0; cnt < n ; cnt ++); 我们会说其最坏情况是n^2+ n,这时候,实际上我们没有考虑机器因素,我们把每一条指令的执行时间都当做单位1来看,如果我们考虑到机器因素,比如在A机器上,每条指令执行的速度是c1,那么他的最坏情况是( n^2  +  n) / c1,而在

算法分析中常用的几种渐进符号

在算法分析中,经常会遇到以下几种渐进符号 渐近精确界记号:ΘΘ(big-theta) 渐近上界记号?:OO(big-oh) 渐近下界记号?:ΩΩ(big-omege) 非渐近紧确上界:o(小-oh) 非渐近紧确下界:ω(小-omege) 下面对渐进符号进行详解: 大写O符号f(n)=O(g(n)),这里f(n)是分析出来算法的执行次数的函数,O的定义:   当且仅当存在正的常数c和n0,使得对于所有的n>=n0,有f(n)<=cg(n).这里cg(n)就是函数f(n)的上限.讲到这是不是很迷糊

算法分析和设计_渐进符号的表示

小声音 big-O notation and its relatives-concepts that belong in the vocabulary of every serious programmer and computer scientist. 为什么要研究它 渐进表示法是算法分析里的基本术语,当听到别人说某段代码以"n的大O时间"运行,而另一段代码以"n平方的大O时间 运行",你需要知道背后的含义. 当某个问题可以用不同的算法解决时,需要用一个东西进行比

对渐进符号的理解

高等数学和算法导论中都遇到这个东西,谈一谈自己的理解吧 O,Ω,Θ,ω和ο 我觉得是函数之间增长量级大小关系的一种比较 影响两个函数大小关系的主要是最高项的系数和函数本身的内在增长性质(幂次高低,什么函数等等) Θ刻画的就是两个内在增长性质一样的函数,所以他们的大小只受常数倍倍的系数影响 ω:非渐进紧确的,f(n)=ω(g(n)),意味着f(n)其实和g(n)是内在增长性质不同的(因为对任何常数c,在无穷远处,总有f(n)是大于g(n)的) ο:分析同上 Ω:可能是仅仅因为常数系数的影响,也可能

麻省理工学院公开课-第二讲:渐进符号、递归及解法

http://blog.csdn.net/julius819/article/details/8267060 http://www.cnblogs.com/banli/archive/2013/05/21/3089900.html

算法的复杂度分析

这个是每个学习算法都必须掌握的东西.不过感觉又不太好说的清楚. 大概扯一下.就是因为每个计算机的运行的速度都不一定相同.所以需要一个标准来判断一个程序跑的快慢. 比如一个简单的for循环.for(int i = 0; i < n; i++); 这个循环其实循环了n次.可能在不同的机器上跑的时间不同. 但是都一定会跑n次.所以用O(n)来表示这个循环的时间复杂度. 再举一个例子 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++

算法导论学习笔记——第3章

一些数学问题 1.对任意两个函数f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=O(g(n))和f(n)=Ω(g(n)) 2.实数集有一个属性不能应用在渐进符号上 三分性:对于实数a和b,下列三种情况有且仅有一种情况成立,a>b,a=b,a<b 并不是所有的函数都可以进行渐进比较 3.近似的函数增长 对数<线性<多项式<指数<阶乘

算法 01

介绍了插入排序和归并排序原理. 插入排序将数组中每个元素都与前面的所有元素比较,进行插入,循环一遍. 归并排序将数组分为有序的两组,两组的第一位元素比较,有序放入新数组中. 性能的分析: 引用theta渐进符号 θ θ:弃用低阶项,忽略常数因子. EX: 3m3+2㎡+4554  = θ(m3) 通过访问内存的次数来比较性能. 插入排序性能:  θ(㎡) 归并排序:θ( m*lg(m) ) 归并排序的内存访问次数量级小于插入排序,故性能更好.

Analysis of Algorithms--preface

Analysis of Algorithms: First part of the course is focused on analysis. Second part of the course is focused on design. The analysis of algorithm is the theoretical study.(算法分析是理论研究) The theoretical study of computer-program performance and resource