簡體   English   中英

什么是O(n * log m)+ O(m)?

[英]What is O(n*log m) + O(m)?

我對大O表示法的加法感到困惑。

我要創建一種算法,以找到具有學校問題的其他一些要求的圖形的MST。 它的時間復雜度為O(E * log V) ,其中E是圖中的邊數,而V是圖中的頂點數。 我已經找到了O(E * log V)+ O(V)的解決方案。

是否滿足O(E * log V)+ O(V)= O(E * log V)嗎?

感謝您的所有答案! 我在連接圖上,在未連接圖上假設這種復雜性,我的算法在O(E * log V)中工作

對於任何x,您都可以制作一個具有x邊和2個(大部分是斷開的)頂點的圖形。

對於這樣的圖,E log V =x²,所以(V + E log V)/(E log V)=(2ˣ+x²)/x²。

這隨着x的增加而無限制地增長,因此,即使對於圖形,O(E log V)+ O(V)與O(E log V)也不同。

但是,如果您指定連接圖,則您有V <E。在這種情況下,只要V> = 2,您就有V + E log V <E + E log V <= 2(E log V)

因此,對於連通圖,O(E log V)= O(E log V)+ O(V)。

O(ElogV + V)與O(ElogV)不同。 通常,V可以比ElogV任意大,這使兩個復雜度類不同。

但是,假設您有一個O(ElogV + V)時間算法來查找某個MST(如果存在),則可以將其轉換為有保證的O(ElogV)時間算法,並假設該圖以鄰接表的形式表示。

我們可以在O(E)時間內確定E> = V / 2。 遍歷圖的頂點,看看該頂點附近是否有邊。 如果找到沒有相鄰邊的頂點,則該圖顯然沒有MST,因為該頂點未連接到圖的其余部分。 如果遍歷了所有頂點,則知道E> = V / 2。 如果在n個步驟后發現沒有相鄰邊的頂點,則知道圖中至少有(n-1)/ 2個邊,因此此過程需要O(E)時間(即使天真的看起來是O( V)時間)。

如果E小於V / 2,則圖形斷開連接(因為在連接的圖形中,E> = V-1),並且沒有MST。

因此:檢查E> = V / 2,僅在這樣的情況下,運行MST算法。

這需要O(E + ElogV + V)= O(E + ElogV + 2E)= O(ElogV)時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM