我有一个算法,它采用具有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
,因为节点可以轻松连接到所有其他节点。正确?
答案 0 :(得分:3)
这里有两种情况:
m
,相邻节点的数量由常量C
限定,m
,相邻节点的数量仅受n
的节点数限制在第一种情况下,复杂度为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)。