這個問題在這里已經有了答案: 為什么常數總是從大 O 分析中洗掉? (7 個回答) 22 小時前關閉。
我已經搜索了整個堆疊溢位,但找不到一個簡潔的答案。考慮這段代碼:
n = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12] ] # O(1)
for i in n: # O(n)
for j in i: # O(n)
print(j)
如果我的理解O()是正確的,這個演算法的時間復雜度是1 n*n,如果我們丟掉無關緊要的1 ,它就變成了n^2,或者二次時間。現在考慮這段代碼:
n = input() # O(1)
for i in range(0, len(n), 2): # O(n/2)?
print(n[i])
這次我們使用除法而不是指數:1 n/2-> n/2。
但是在我搜索的所有地方,人們都說O(n/2) == O(n),因為O()測量相對時間等。但是如果O(n/2)是絕對的,我們應該在使用大 O 時將其折疊成O(n),這不會使時間復雜度的型別也像log n和n!不正確,因為它只是意味著用絕對值修改 n...?
n^2==n因為它與 相同n/2,但/我們使用^. 是不正確的n!,因為階乘只是一系列乘法,所以我相信在丟棄所有 -1 后會崩潰成完全不同的東西。我哪里錯了?n!n*(n-1)*...
PS我對對數和大O符號的理解非常不完整,如果我遺漏了一些明顯的東西,請不要恨我。
uj5u.com熱心網友回復:
看看大 O 上的維基百科頁面
在典型用法中,O 表示法是漸近的,也就是說,它指的是非常大的 x。在這種情況下,“增長最快”的術語的貢獻最終會使其他術語變得無關緊要。因此,可以應用以下簡化規則:
- 如果 f(x) 是幾項的和,如果有一個增長率最大的,可以保留,其他的都省略。
- 如果 f(x) 是多個因子的乘積,則可以省略任何常數(乘積中不依賴于 x 的項)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/424319.html
上一篇:在Unity3D中查找最近的物件
