這是一個基本的問題......但我認爲O(M + N)與O(max(M,N))是一樣的,因爲當我們走向無窮大時,更大的項應該占主導地位?另外,這與O(min(M,N))不同,是嗎?我一直看到這個符號,尤其是。在討論圖算法時。例如,您經常會看到:O(| V | + | E |)(例如,http://algs4.cs.princeton.edu/41undirected/)。O(M + N)是什麼意思?
回答
是的,O(M + N)表示與O(max(M,N))相同的事物。這與O(min(M,N))不同。正如@Dr_Asik所說,O(M + N)在技術上是線性的O(N),但是當M和N有意義時,能夠說「在什麼時候是線性的」是很好的。想象一下,算法在行數和列數上是線性的。我們可以定義N =行+列,並說O(N)或者我們可以說O(M + N),其中M是行,N是列。
線性時間記爲O(N)。由於(M + N)是一個線性函數,因此它應該簡單地記爲O(N)。同樣,將O(1)與O(2),O(10)等進行比較也是沒有意義的,它們都是不變的,並且都應該注意到O(1)。
我知道這是一個古老的線程,但是現在我正在研究這個問題,我想我會爲那些目前正在搜索類似問題的人添加我的兩分錢。
我認爲,O(N + M),在表示爲adjacency list的曲線圖的情況下,正是並且不能被改變,原因如下:
1)O(N + M) O(n)+ O(n)= O(n)+ O(m),但O(m)的上界爲O(n^2),所以O(n + m)= O N^2)。然而,這純粹僅以n來表示,也就是說,它只考慮頂點並給出一個弱上限(因爲它試圖用頂點表示邊)。這確實表明O(n)不等於O(n + m),因爲與頂點相比,可以是二次量的邊。 2)O(n + m)表示O(n + m)考慮了在實現算法時必須通過的所有元素,該算法被簡化爲Breadth First Search(BFS)。由於它將圖中的所有元素都只考慮一次,因此可以認爲它是線性的,並且是一個更嚴格的分析,即用n^2上邊界邊界。人們可以爲了符號而寫一些像n = | V |的東西+ | E |因此BFS運行是O(n)並且給讀者一個線性感,但是一般來說,如OP所提到的,它被寫爲O(n + m),其中 n = | V |和m = | E |。
非常感謝,希望這有助於某人。
- 1. m * n * 3是什麼意思?
- 2. 這是什麼意思:「檢測到的時間複雜度:O((N + M)* K)」?
- 3. N-Queen Lisp(1- n)是什麼意思?
- 4. Java - 「\ n」是什麼意思?
- 5. \ n是什麼意思
- 6. '%8.1fC \ n'是什麼意思?
- 7. \ n \ r是什麼意思?
- 8. n%7是什麼意思?
- 9. stringBuffer.append(「\ n」)是什麼意思?
- 10. make [n]中的[n]是什麼意思?
- 11. 符號T(n)是什麼意思?
- 12. M Gemfile。這是什麼意思?
- 13. mVariableName中的m是什麼意思?
- 14. Git的 - 這是什麼意思-m
- 15. M,D的意思是十進制(M,D)究竟是什麼意思?
- 16. C中「if(n/10)」是什麼意思?
- 17. 這個函數是O(N + M)還是O(N * M)?
- 18. 'O'的dtype是什麼意思?
- 19. 是什麼意思:是什麼意思?
- 20. 對於給定的方程f(N),滿足O(f(N))是什麼意思?
- 21. JProfiler - [n類]是什麼意思?
- 22. 1(mod N)是什麼意思?
- 23. 「const char(&a)[N]」是什麼意思?
- 24. 「本地n = $ {x ## * wlan}」是什麼意思?
- 25. 當我們說時間複雜度是O(M + N)時,這意味着什麼?
- 26. 什麼是取代(/ \ n /克, 「東西」)是什麼意思?
- 27. 什麼意思「O」在Hibernate HQL
- 28. %{}是什麼意思?
- 29. '#'是什麼意思?
- 30. 「?」是什麼意思?
那麼,我在很多地方都會看到這個符號,包括很有信譽的人。看看:http://algs4.cs.princeton.edu/41undirected/ – Frank 2012-08-13 16:14:47
希望我的回答澄清了這一點。通過重新定義N = X + Y,您總是可以將O(X + Y)重寫爲O(N)。我們是否應該這樣做,僅僅是因爲它是「正確」的方式呢?我說「不」,但其他人可能會不同意。 – 2012-08-13 16:20:28
我明白它的意思是「線性」。這是一個很好的捷徑,意思是「在主導術語」線性的「恕我直言」。 – Frank 2012-08-13 16:27:40