簡體   English   中英

大O復雜度O(n log n)vs O(n log m)

[英]big O complexity O(n log n) vs O(n log m)

我有一個算法,該算法采用具有n節點的DAG圖,並且對於每個節點,它都會在其鄰接節點上進行二進制搜索。 據我所知,這將是O(n log n)算法,但是由於log內的n僅對應於節點的鄰接,我想知道這是否會變成O(n log m) m表示與每個節點相鄰的m個節點(直觀上,通常小於n )。

為什么不O(n log m) 我會說O(n log m)沒有意義,因為從技術上講m不是輸入的大小, n是。 此外,在最壞的情況下m可以是n因為一個節點可以很容易地連接到所有其他節點。 正確?

這里有兩種情況:

  1. m ,相鄰節點的數量由常數C ,並且
  2. m ,相鄰節點的數量僅受n ,節點數量的限制

在第一種情況下,復雜度為O(n) ,因為Log(C)是一個常數。 在第二種情況下,它是O(n*log(n))因為您在問題中進行了解釋(即“ m可以是n )。

大O表示法為算法的復雜度提供了一個上限,因此,由於在最壞的情況下m等於n(准確地說是n-1),因此正確的復雜度應為O(n log n)

當然,在DAG中,一個節點連接到其他每個節點。 另一個示例是節點號為0,1,2 ... n的DAG,其中每個節點都有一條邊緣,通向所有編號更高的節點。

給出依賴於多個參數的復雜度估計的先例-http: //en.wikipedia.org/wiki/Dijkstra%27s_algorithm引用了O(| E | + | V | log(| V |)的代價在某些情況下,這可能是有用的信息。

正確的是,在圖的最壞情況下,每個節點都有n-1個鄰居,這意味着它與其他每個節點都相連,但是如果每個節點都如此,那么它將不會是非循環圖。 因此,每個節點的平均鄰居小於n。

DAG中的最大邊數為:(n-1)n / 2

如果我們查看每個節點,則平均會有(n-1)/ 2個鄰居。 因此,在最壞的情況下,您的復雜度仍將保持O(n log n)

暫無
暫無

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

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