我的理解 函式的增長,大O記號

2021-08-19 14:32:49 字數 1475 閱讀 8019

當我們在描述乙個任務所消耗的時間時,一般我們會將任務中的所有步驟所消耗的時間相加,得到總時間,例如:

總消耗時間=步驟1消耗時間+步驟2消耗時間+......+步驟n消耗時間

如果我們將這裡的步驟消耗的時間用 指令執行的次數*指令執行一次的時間 來替換,就是乙個演算法所消耗的總時間。但是理想與現實總是存在差距的,我們並不能用這種方式來計算演算法的總耗時。這裡關鍵的問題在於,不同的程式語言,不同的編譯器,不同的cpu,快取等等因素都將導致執行一次操作的時間各不相同。如果將這些因素統統考慮進去,那麼在描述演算法複雜度上將寸步難行。

為此我們需要丟棄這些外部因素,轉而只考慮演算法中關鍵操作的執行次數。雖然這樣做,使得我們無法精確描述演算法的耗時,但是卻可以了解大致的趨勢。這就是所謂的漸進分析法

一種描述函式在極限附近的行為的方法。

最常用的是 用乙個函式(通常更加簡單)來描述另乙個函式,在變數趨於∞時的行為。(可以看出來,這種方法得到結論是相對的)。

令f和g為從實數集到實數集的函式。如果存在常數c和k使得只要當x>k時就有|f(x)|<=cg(x)。我們就說f(x)是o(g(x))的。

從定義中可以得到幾個關鍵資訊:

f和g是定義域和陪域都是實數集的函式

f和g存在乙個關係,即f(x)<=cg(x)

f和g的這種關係,必須是在x>k時才成立

換句話說,當變數x的值大於k時,函式f小於或等於函式g乘以c,這個不等式恆成立。

再進一步說,當變數x的值在區間(k,∞)時,函式f的y值小於等於函式g的y值的c倍,也就是函式f的增長比函式g的增長的c倍慢。

所以f(x)是o(g(x))的的意思就是,當x無限增長時,函式f的增長慢與函式的g某個固定的倍數。

大o的定義是對漸進分析法的一種實際應用,通過函式g來描述函式f的相對變化趨勢。

其中讓我比較困惑的是定義中的c這個常量的含義:用乙個較簡單的函式並將其擴大c倍,來與另乙個函式比較。如下圖:

這裡的較簡單函式g(x)=x²,用其來描述另乙個函式f(x)=x²+2x+1。可以看出函式g與函式f並沒有任何相交的地方,但是在乘以常數c=4後,cg(x)與f(x)在k=1處有乙個交點,x>k=1之後,函式f(x)始終小於cg(x)。這樣我們就用函式g來描述了函式f的相對增長速度。我們說,當c=4,x>1時,函式f的增長比函式g慢,c和k稱為f(x)是o(g(x))的關係的憑證。

因此我對c的理解為,當我們用乙個函式g來描述另乙個函式f的相對增長關係時,必須至少相交點,為了使之相交,將函式g擴大c倍,如果它們已經存在交點,c可以為1。所以只要能使它們相交,c可以取不同值,這樣f(x)是o(g(x))的關係的憑證就不止一對,可以有很多。

f(x)是o(g(x)) 告訴我們 f(x)比cg(x)增長得慢,但滿足這種關係的f(x)可能存在多個,所以f(x)是o(g(x))也就告訴我們f(x)∈o(g(x)),即所有滿足o(g(x))關係的函式的集合。

小小的我在慢慢長大

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!有時候,時間是一把雕刻人的寶刀,讓你在不知不覺中慢慢長大,漸漸走向你人生的正軌,悄悄遠離稚氣的臉頰,有時候,又顯得那麼可惡,讓魚尾紋爬上媽媽會說話的眼角,嘿嘿,又或許,只有爸爸能讀得懂那句歲月的諾言.又是一年滿校園的山楂,我們提高班如約而至的開學了...

函式的增長

1 漸進記號 我們主要用漸進記號來描述演算法的執行時間 記號 如 g n 是函式的乙個漸進緊確界 o記號 如o g n 是函式的乙個漸進緊確上界 o記號 如o g n 是函式的乙個漸進緊確上界 記號 如 g n 是函式的乙個漸進緊確下界 w 記號 如 w g n 是函式的乙個漸進緊確下界 漸進函式性...

函式的增長

1 漸進記號 我們主要用漸進記號來描寫敘述演算法的執行時間 記號 如 g n 是函式的乙個漸進緊確界 o記號 如o g n 是函式的乙個漸進緊確上界 o記號 如o g n 是函式的乙個漸進緊確上界 記號 如 g n 是函式的乙個漸進緊確下界 w記號 如 w g n 是函式的乙個漸進緊確下界 漸進函式...