【问题标题】:Why is time complexity of recursive tree equal to number of leaf nodes instead of total number of nodes?为什么递归树的时间复杂度等于叶节点数而不是节点总数?
【发布时间】:2021-07-26 22:05:44
【问题描述】:

我在看下面简单递归函数的时间和空间复杂度:

它的时间复杂度是O(2^n),也就是叶子节点的个数。但是树的每个节点都有一个函数调用。为什么时间复杂度等于叶子节点的个数而不是节点的总数?

【问题讨论】:

  • 因为实际工作只在叶子( n
  • 在叶子它执行return;,在非叶子它执行dib(n-1);。为什么第一个算作真正的工作,而另一个不算?另外,关于“从堆栈中弹出”,您的意思是当一个节点执行dib(n-1) 时,它会从堆栈中弹出一些东西吗?究竟是什么被推送和弹出?

标签: algorithm recursion time-complexity binary-tree big-o


【解决方案1】:

如果只计算叶子或所有节点,不会改变复杂度。

所有非离开节点都是2^n-1。
O(2^n + 2^n-1) = O(2^n)。

【讨论】:

  • 明白了。另一位评论者说内部节点不算在内,因为实际工作只在叶子上完成。是哪个?
【解决方案2】:

树的深度为 5 和 16 个叶子节点,上次我检查 2^5 是 32 而不是 16.... 它是 2^n,因为有 2^(n-1) + 2^(n-2) + ... + 2^1 个节点恰好对应 2^n-1 次调用,丢弃 -1 你得到 O( 2^n)

【讨论】:

  • 明白,谢谢。 SomeDude 评论了我的原始帖子并说内部节点不计算在内,因为实际工作只在叶子上完成。是哪个?
  • 很明显我认为我是对的,因为我发布了这个作为答案......
猜你喜欢
  • 2020-05-27
  • 2013-09-25
  • 1970-01-01
  • 2021-08-15
  • 2016-02-01
  • 2020-06-10
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
相关资源
最近更新 更多