大o表示法
最常用來描述漸進複雜度引入大o表示法,給定兩個正值函式f和g。
定義:如果存在正數c和n,對於所有的n>=n,有f(n)<=cg(n),則f(n)=o(g(n)).
上述定義表明,如果對於足夠大的n(或大於某自然數的n的n)存在正數c時f不大於cg,則f為g的大o表示法
f(n)=2n2+3n+1=o (n2)
為了選擇更好的c和n,規定某個n值,f中的某項應該時最大項,在等式中只有2n2和3n可能是最大項,但是當n>1.5時,2n2>3n,他們都與同一函式對g(n)=n2和f(n)有關,對於固定的g,可以得出無窮多的常數對c和n,關鍵在於g和f以相同速率增長。大o表示中固有的不精確性還會導致其他問題,所以大o表示法定義中的f(n)用n2代替,n2為f(n)的大o表示
2n2+3n+1<=cn2
大o表示法的性質
(傳遞性)如果f(n)=o(g(n)),g(n)=o(h(n)),那麼f(n)=o(h(n))(或者o(o(g(n)))=o(g(n)))
證明:根據定義若存在正數c1和n1,對於所有的n>=n1,有f(n)<=c1g(n),則f(n)=o(g(n));同樣,若存在正數c2和n2,對於所有n>=n2,有g(n)<=c2h(n),則g(n)=o(h(n))。因此,對於所有n>=n,其中n為n1與n2中的較大者,有c1g(n)<=c1c2h(n),只要取c=c1*-c2,則對於所有的n>=n有f(n)<=ch(n),即f(n)=o(h(n))。
如果f(n)=o(h(n)),g(n)=o(h(n)),則f(n)+g(n)=o(h(n))
證明:令c=c1+c2,則有f(n)+g(n)<=ch(n)。
ank=o(nk)
證明:令c>=a,不等式ank
<=cnk恆成立。
對於任何正數j,nk=o(nk+j)。
證明:令c=n=1,成立
從上面的性質可以推出,任何多項式都是該多項式中次數最高的大o表示。
對數函式是演算法效率評估中乙個非常重要的函式。實際上,如果演算法複雜度是乙個對數函式,那麼該演算法非常好
性質:如果f(n)=cg(n),則f(n)=o(g(n)).
對於任何正數a和b(b!=1),loga(n)=o(logb(n))。
該性質說明對數函式之間存在對應關係,性質6表明,無論底數為何,對數函式互為大o表示也就是說所有的對數函式有相同的增長速度。
對於任何正數a!=1,loga(n)=o(lg(n)),其中lg(n)=log2(n)。
c 資料結構及演算法
omega 表示法與 theta 表示法 大o表示法表示函式的上界。對應於大o表示法,存在下界的定義 定義 若存在正數c和n,對於所有的n n,有f n cg n 則f n omega g n 上述定義表明,如果有一正數c,對於所有的n,是f不小於cg,則f是g的大 omega 表示,換句話說,cg...
資料結構及演算法
總所周知,程式的實質就是 對資料的表示,以及對資料的處理。資料要能被計算機處理,首先必須能夠儲存在計算機的記憶體中,這項任務就是資料的表示,其核心就是資料結構。對乙個實際問題的求解必須滿足實際處理的要求,這項任務就是資料處理,其核心是演算法。有這樣乙個著名公式 是誰提出的有點記不住了 資料結構 演算...
資料結構及演算法
最近常看到一些同行常提到資料結構和演算法,這個問題有時候面試會常常遇到,讓你說一下關於資料結構的理解,結常看到網上一些同行對資料結構的解釋和看法,差不多也都各有千秋吧 同時感覺好多人都對資料結構的理解不是很清楚,那怕是平時的開發過程中常用到資料結構及演算法,但是一但回答起這個問題來,感覺就是無從說起...