時間複雜度的實際例子(鑰匙管理員)

2021-09-29 07:45:54 字數 1766 閱讀 3047

時空複雜度(時間複雜度/空間複雜度)o(1)、o(n)、o(n^2)、o(log n)、o(n log n)是什麼意思

這些都是演算法時空複雜度的表示。不僅僅用於表示時間複雜度,也用於表示空間複雜度。 

o後面的括號中有乙個函式,指明某個演算法的耗時/耗空間與資料增長量之間的關係。其中的n代表輸入資料的量。

o(1)就是最低的時空複雜度了,也就是耗時/耗空間與輸入資料大小無關,無論輸入資料增大多少倍,耗時/耗空間都不變。 雜湊演算法就是典型的o(1)時間複雜度,無論資料規模多大,都可以在一次計算後找到目標(不考慮衝突的話),衝突的話很麻煩的,指向的value會做二次hash到另外一快儲存區域。

通俗易懂的例子

什麼是o(1)呢,就比如你是乙個酒店的管理員,你負責管理酒店的鑰匙,你很聰明,你把酒店的100把鑰匙放在了100個格仔裡面存著,並且把格仔從1~100進行了編號,有一天有客人來了,酒店老闆說,給我拿10號房間的鑰匙給我,你迅速從10號格仔裡面拿出鑰匙給老闆,速度非常快,這時候你就是乙個電腦了,老闆跟你說拿幾號房房間的鑰匙,你只需要看一眼就能知道鑰匙在**。

比如時間複雜度為o(n),就代表資料量增大幾倍,耗時也增大幾倍。

比如常見的遍歷演算法。 

要找到乙個陣列裡面最大的乙個數,你要把n個變數都掃瞄一遍,操作次數為n,那麼演算法複雜度是o(n).

通俗易懂的例子

突然,有一天,你的老闆給你說,你用100個箱子存100把鑰匙,太浪費空間了,你能補能把鑰匙上編號一下,然後把鑰匙要用繩子穿起來,這樣我們可以把這個放箱子的地方再裝修乙個房間出來。你想了一下,是啊,現在房價這麼貴,這樣能多賺點錢。所以你就不能通過上面的方法來找到鑰匙了,老闆跟你說,給我拿45號房間的鑰匙出來,你就需要從100個鑰匙裡面挨個找45個房間的鑰匙。

再比如時間複雜度o(n^2),就代表資料量增大n倍時,耗時增大n的平方倍,這是比線性更高的時間複雜度。比如氣泡排序,就是典型的o(n^2)的演算法,對n個數排序,需要掃瞄n×n次。 

用氣泡排序排乙個陣列,對於n個變數的陣列,需要交換變數位置次,那麼演算法複雜度就是o().

通俗易懂的例子

隨著經濟發展越來越好,你的老闆把酒店擴大了,有100層每一層有100個房間,當然,你還是你,不過你因為關注我的部落格,知道怎麼把鑰匙排序更好了,你把每一層的鑰匙穿在一起,然後一共就有100個用繩子穿起來的鑰匙串。然後老闆叫你找鑰匙的時候,你先要找到樓層的編號,再對應找到房間的編號,所以大概對應的是這樣的**。

再比如o(log n),當資料增大n倍時,耗時增大log n倍(這裡的log是以2為底的,比如,當資料增大256倍時,耗時只增大8倍,是比線性還要低的時間複雜度)。二分查詢就是o(log n)的演算法,每找一次排除一半的可能,256個資料中查詢只要找8次就可以找到目標。 

通俗易懂的例子

這個就像是有一百把鑰匙,你突然覺得,我從頭找是不是太慢了,我從中間找,比如我要找到23號的房間鑰匙,我從中間切開,找到50編號的位置,然後23在1~50裡面,我再把從中間切開變成25,然後23在1~25之間,我再切開變成12.5,然後23在12.5~25之間,依次找下去,直到找到鑰匙。這種查詢鑰匙的方法的複雜度就是o(log^n)

o(n log n)同理,就是n乘以log n,當資料增大256倍時,耗時增大256*8=2048倍。這個複雜度高於線性低於平方。歸併排序就是o(n log n)的時間複雜度。 

時間複雜度例子

時間複雜度計算例項 表示時間複雜度的階有 o 1 常量時間階o n 線性時間階 o n 對數時間階o n n 線性對數時間階 o nk k 2 k次方時間階 例 兩個n階方陣的乘法 for i 1,i n i for j 1 j n j 由於是乙個三重迴圈,每個迴圈從1到n,則總次數為 n n n ...

演算法的複雜度 時間複雜度與空間複雜度

通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...

演算法的時間複雜度 空間複雜度

時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...