大O复杂度O(n log n)vs O(n log m)

时间:2012-09-16 12:21:27

标签: algorithm complexity-theory

我有一个算法,它采用具有n个节点的DAG图,并且对于每个节点,它在其邻接节点上进行二进制搜索。据我所知,这将是O(n log n)算法,但由于日志中的n仅对应于节点的邻接,我想知道这是否会变为O(n log m)m我指的是与每个节点相邻的m个节点(直观且通常远小于n)。

为什么不O(n log m)?我会说O(n log m)没有意义,因为m在技术上不是输入的大小,n是。此外,在最坏情况下,m可以是n,因为节点可以轻松连接到所有其他节点。正确?

4 个答案:

答案 0 :(得分:3)

这里有两种情况:

  1. m,相邻节点的数量由常量C限定,
  2. m,相邻节点的数量仅受n的节点数限制
  3. 在第一种情况下,复杂度为O(n),因为Log(C)是常量。在第二种情况下,它是O(n*log(n)),因为您在问题中解释了原因(即“m可以n)”。

答案 1 :(得分:0)

Big O表示法提供算法复杂度的上限,因此在最坏的情况下m等于n(准确地说n - 1),正确的复杂度将是 O(n log n)

答案 2 :(得分:0)

肯定有DAG,其中一个节点连接到每个其他节点。另一个例子是节点号为0,1,2 ... n的DAG,其中每个节点都有一条通向所有更高编号节点的边。

有一个先例可以给出一个依赖于多个参数的复杂性估计 - http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm引用O的成本(| E | + | V | log(| V |)。在某些情况下,这可能是有用的信息。

答案 3 :(得分:0)

在图表的最坏情况下,每个节点都有n-1个邻居是正确的,这意味着它与其他所有节点相连,但如果每个节点都是如此,那么它就不会是非循环图。 因此,每个节点的平均邻居小于n。

DAG中的最大边数为:(n-1)n / 2

如果我们查看每个节点,它将具有平均(n-1)/ 2个邻居。 因此,在最坏的情况下,您的复杂性仍将保持 O(n log n)