時間復雜度為什麼要除2
❶ 演算法時間復雜度o(1)和o(2)的區別
O後面的括弧中有一個函數,指明某個演算法的耗時/耗空間與數據增長量之間的關系。其中的n代表輸入數據的量。
時間復雜度為O(n),就代表數據量增大幾倍,耗時也增大幾倍。比如常見的遍歷演算法。所以O(2)相比於O(1)數據量會更多,同時需要執行的時間會更多。
一般情況下,演算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),存在一個正常數c使得fn*c>=T(n)恆成立。記作T(n)=O(f(n)),稱O(f(n)) 為演算法的漸進時間復雜度,簡稱時間復雜度。
(1)時間復雜度為什麼要除2擴展閱讀
時間復雜度O(n^2),就代表數據量增大n倍時,耗時增大n的平方倍,這是比線性更高的時間復雜度。比如冒泡排序,就是典型的O(n^2)的演算法,對n個數排序,需要掃描n×n次。
比如O(logn),當數據增大n倍時,耗時增大logn倍(這里的log是以2為底的,比如,當數據增大256倍時,耗時只增大8倍,是比線性還要低的時間復雜度)。二分查找就是O(logn)的演算法,每找一次排除一半的可能,256個數據中查找只要找8次就可以找到目標。
O(nlogn)同理,就是n乘以logn,當數據增大256倍時,耗時增大256*8=2048倍。這個復雜度高於線性低於平方。歸並排序就是O(nlogn)的時間復雜度。
❷ 折半查找的時間復雜度
假設對n個元素的折半查找需要消耗的時間為t(n)。容易知道:
如果n = 1,則t(n) = c1
如果n > 1,則t(n) = t(n/2) + c2
其中n/2需要取整,c1、c2都是常數
對於正整數n,可以有:
t(n) = t(n/2) + c2
= t(n/4) + 2*c2
= t(n/8) + 4*c2
= ...
= t(n/(2的k次方)) + k*c2
一直推演下去,直到n/(2的k次方)等於1,也就是k = log2(n),此時等式變為:
t(n) = t(1) + k*c2
= c1 + log2(n)*c2
於是時間復雜度為log2(n)。注意log2(n)和log(n)其實是同樣的復雜度,因為它們之間僅僅差了一個常量系數而已。
這個是不嚴格的推導,因為沒有考慮整數除以2之後可能有餘數的情況。但即使有餘數,也是不影響時間復雜度的。
遞歸折半查找的時間復雜度是O(log2n),空間復雜度是O(log2n),也是遞歸的最大深度
非遞歸的時間復雜度是O(log2n),空間復雜度是O(1),僅僅用幾個單變數就夠了
❸ 時間復雜度 2是如何出現的
裡面的2是平方的意思,對照代碼循環里的(y+1)(y+1)。
後面的1/2是1/2次冪,即平方根的意思。
望採納。
❹ 冒泡演算法的時間復雜度為什麼是O*2
例如數組中有n個元素,並假定該數組是倒序的,那麼該數組的需要做n-1趟排序,並且每趟排序需進行n-1次比較,所以共需要(n-1)*(n-1)次比較,這是最壞情況的時間復雜度,但後,大家都說是n*2。
❺ 請問順序表中插入結點時如平均移動次數為n/2,為什麼說它的時間復雜程度O(n)而不是O(n/2)
時間復雜度指演算法執行過程中所需要的基本運算次數。你的只是一個大體評估的方式。
---------------------------------------------------------------------
大O表示法是根據數據梯度產生的變化而評估。
-----------------------------------------------------------------------
大O表示法表示時間復雜度的時候取一個下限即可,不用那麼精確。
-----------------------------------------------------------------------------------------
可能你認為o(N)和o(N/2)有區別,但實際上這兩者對於大O表示法表示的時間復雜度來說沒區別,大O表示法表示的時間復雜度關注的是數據量的增長導致的時間增長情況,o(N)和o(N/2)在數據量增加一倍的時候,時間開銷都是增加一倍(線性增長)。所以都認為是O(N)
-------------------------------------------------------------------------------------------
但是程序優化的時候就要精確評估了!能提高多少就提高多少。