O(g(n))表示一个函数集合
定义:O(g(n)) = {f(n):存在c>0,>0,使得对所有n有0f(n)c*g(n)}
例:2=O() (即2O() ,O()2)
即2是属于O() 定义的集合的,假设c=2,=10,则0f(n)cg(n)即 022*即0,对于所有的n10,都大于,所以2O()
直观上来看,其实O标记定义的就是一个上界,表示算法最糟糕的情况下主要操作的执行次数也不会超过c*(n为规模,如对n个数进行排序),所以如果某算法在最糟糕情况下的主要操作的执行次数为2,它也依然可以说是时间复杂度为O()的算法
(g(n)) = {f(n):存在c>0,>0,使得对所有n有0c*g(n)f(n)}
(表示的是一个下界)
(g(n)) = {f(n):存在>0,>0,>0,使得对所有n有0*g(n)f(n)*g(n)}
(表示的是一个渐进紧确界)
o(g(n)) = {f(n):对任意c>0,存在>0,使得对所有n有0f(n)<c*g(n)}
(o表示的是一个严格的上界)
(g(n)) = {f(n):对任意c>0,存在>0,使得对所有n有0c*g(n)<f(n)}
(表示的是一个严格的下界)
当n大于某个值到趋于无穷的这个区间中:
f(n)(g(n)): 存在c使得f(n)总小于等于c*g(n)
f(n)(g(n)):存在c使得f(n)总大于等于c*g(n)
f(n)(g(n)):存在和使得f(n)总介于*g(n)和*g(n)之间
f(n)o(g(n)):不管c多小f(n)都小于c*g(n)
f(n)(g(n)):不管c多大f(n)都大于c*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)是多少项的多项式,只需要看最高次项,增长最快的那项即可
1、log n、n、n*log n、、、、n! 在前面的增长越慢,后面的增长越快