【问题标题】:How would I find the time complexity of the following recursive algorithm?我如何找到以下递归算法的时间复杂度?
【发布时间】:2019-03-26 18:40:30
【问题描述】:

假设r是一棵树的根(可能是非二元的),c是r的一个子节点,每个节点都包含一个整数。

Algorithm findMax(r)
if r = null return null
int maxValue = r.value
if r.isLeaf return maxValue;
for each child c of r do{
    if findMax(c) > maxValue
        maxValue = findMax(c)
}
return maxValue

【问题讨论】:

  • 您对此有何看法?另外,你的意思是maxValue = findMax(c)if findMax(c) > maxValue
  • 我认为这将是 O(n^2) 但我不确定的部分是每个节点的子节点数量可能不同。
  • @BenTilden 我的帖子回复你了吗?
  • 是的,谢谢@DavidWinder

标签: recursion tree max time-complexity tree-traversal


【解决方案1】:

目前,当将n 视为中的节点数时,它确实具有 O(n) 复杂度。

对于根的每个子节点,您调用递归函数到c 中的所有子树根。所以基本上,你在这个图上执行 DFS,它在 O(V+E) -> 在你的情况下,当图是一棵树时,它等于 O(V)。

请注意,您在 if 语句中调用 findMax 的递归函数 - 如果它是真的,您再次计算它 - 这会将复杂度增加到 O(2*n)。计算 findMax 函数一次,将其结果分配给本地 var 并检查并更新 maxValue 将复杂度降低到 O(n)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 2019-05-08
    • 1970-01-01
    • 2023-01-20
    • 2011-02-12
    相关资源
    最近更新 更多