大O表示法

2021-09-01 03:25:19 字數 1413 閱讀 6935

大o表示法

汽交按尺寸被分為若干類、微型、小型、中型等等。在不提及具體尺寸的情況下,這些分類可以為我們所涉及到車的大小提供乙個大致慨念。我們同樣也需要一種快捷的方法來評價計算機演算法的效率,在電腦科學中,這種粗略的度量方法被稱作「大o」表示法。在比較演算法時似乎應該說一些類似「演算法a比演算法b快兩倍」之類的話,但實際上這類陳述並沒有多大意義。為什麼?這是由於當資料項個數變化時,對應的比例也會發生根本改變。有可能資料項增加了50%,則a就比b快了三倍。或有可能只有一半的資料項,但現在a和b的速度是相同的。我們所需的是乙個可以描述演算法的速度是如何與資料項的個數相聯絡的比較。下面是我們目前所見過的演算法大o表示。

無序陣列的插入;常數

無序陣列的插入是我們到現在為止所見過的演算法中唯一乙個與陣列中的資料項個數無關的演算法;新資料項總是被放在下乙個有空的地方,a[nelems],然後nelems增加。無論陣列中的資料項個數n有多大, 一次插入總是用相同的時間。我們可以說向乙個無序陣列中插入—個資料項的時間t是乙個常數k:

t=k在現實情況中,插入所需的實際時間(不管是微秒還是其他單位)與以下這些出素有關:微處

理器,編譯程式生成程式**的效率,等等。 上面等式中的常數k包含了所有這些因素。在現實際情況要得到k的值,需要測量一次插入所花費的時間。(軟體就是為了這個目的們存在的。)k就等於這個時間。

線性查詢:與n成正比

t=k*n/2

將2併入k可以得到乙個更方便的公式。t=k*n

二分查詢:與log(n)成正比

同樣,我們可以為二分查詢制定出乙個與t和n有關的公式:

t=k*log (n)

正如前面所提到的,時間t與以2為底n的對數成正比。實際上,由於所有的對數都和其他

對數成比例(從底數為2轉換到底數為10需乘以3、322),我們可以將這個為常數的底數也併入k。

由此不必指定底數:

t=k*log(n)

不要常數

大o表示法同上面的公式比較類似,但它省去了常數k。當比較演算法時,並不在乎具體的微處

理器晶元或編譯器;真正需要比較的是對應不同的n值,t是如何變化的,而不是具體的數字。因

此不需要常數。

大o表示法使用大寫字母o,可以認為其含義是「order of(大約是)。我們可以使用大o表示

法來描述線性查詢使用了o(n)級時間,二分查詢使用了o(logn)級時間。向乙個無序陣列中插入

使用了o(1)。(小括號中是數字1。)

線性查詢 o(n)

二分查詢 o(logn)

無序陣列的插入 o(1)

有序陣列的插入 o(n)

無序陣列的刪除 o(n)

有序陣列的刪除 o(n)

大o表示法的實質並不是對執行時間給出實際值,而是表達了執行時間是如何受資料項個數所

影響的。除了實際安裝後真正去測量一次演算法的執行時間之外,這可能是對演算法進行比較的最有意

義的方法了。

大O表示法

用另乙個 通常更簡單的 函式來描述乙個函式數量級的漸近上界。大o表示法 稱乙個函式g n 是o f n 當且僅當存在常數c 0和n0 1對一切n n0均有 g n c f n 成立,也稱函式g n 以f n 為界或者稱g n 受限於f n 記作g n o f n 定義 如果乙個問題的規模是n,解這一...

大o表示法

下面是一些常用的時間複雜度以及簡單的定義 o 1 常量時間 o 1 表示該演算法的執行時間 或執行時占用空間 總是為乙個常量,不論輸入的資料集是大是小。bool isfirstelementnull ilistelements o n o n 表示乙個演算法的效能會隨著輸入資料的大小變化而線性變化。...

大O表示法

概念 大o表示法是和資料項的個數相關聯的粗略度量演算法時間複雜度的快捷方法。常數 乙個無序可重複陣列插入乙個資料項的時間t是常數k,常數k表示一次插入所花費的時間,包含cpu 編譯器等工作時間。可表示為 t k 線性查詢 從陣列中線性查詢乙個資料項平均需要n 2步,每步所花費的時間為k 可表示為 t...