Performance 时间复杂性,二叉(搜索)树

Performance 时间复杂性,二叉(搜索)树,performance,time-complexity,asymptotic-complexity,Performance,Time Complexity,Asymptotic Complexity,假设我有一个完整的二叉树,深度达到一定的d。遍历(预序遍历)这棵树的时间复杂度是多少 我很困惑,因为我知道树中的节点数量是2^d,因此时间复杂度应该是BigO(2^d)?因为这棵树是指数增长的 但是,根据互联网上的研究,每个人都说遍历是BigO(n),其中n是元素的数量(在这种情况下是2^d),而不是BigO(2^d),我遗漏了什么 感谢n定义为节点数 2^d仅为该深度的每个可能节点都已满时的节点数 即 当2^d为8时,只有5个节点 一个完整的二叉树除了最后一行之外,所有节点都填充到左边。你可以

假设我有一个完整的二叉树,深度达到一定的d。遍历(预序遍历)这棵树的时间复杂度是多少

我很困惑,因为我知道树中的节点数量是2^d,因此时间复杂度应该是
BigO(2^d)
?因为这棵树是指数增长的

但是,根据互联网上的研究,每个人都说遍历是
BigO(n)
,其中n是元素的数量(在这种情况下是
2^d
),而不是
BigO(2^d)
,我遗漏了什么


感谢

n定义为节点数

2^d仅为该深度的每个可能节点都已满时的节点数

当2^d为8时,只有5个节点

一个完整的二叉树除了最后一行之外,所有节点都填充到左边。你可以在维基百科上找到这个定义


n定义为节点数

2^d仅为该深度的每个可能节点都已满时的节点数

当2^d为8时,只有5个节点

一个完整的二叉树除了最后一行之外,所有节点都填充到左边。你可以在维基百科上找到这个定义


即使你可以将时间复杂度表示为O(2^d),这也是毫无用处的,因为你无法将它与任何其他集合的时间复杂度进行比较


另一方面,将时间复杂度表示为O(n)非常有用。它准确地告诉您当您增加项目数时集合的反应,而不必确切地知道集合是如何实现的,并且您可以将其与其他集合的时间复杂度进行比较。

即使您可以将时间复杂度表示为O(2^d),这是非常无用的,因为你不能用它来与任何其他集合的时间复杂性进行比较


另一方面,将时间复杂度表示为O(n)非常有用。它准确地告诉您当您增加项目数时集合的反应,而不必确切地知道集合是如何实现的,并且您可以将其与其他集合的时间复杂度进行比较。

n=2^d。这里没有问题。如果n=2^d,那么我可以说BigO(n)或BigO(2^d)。如果n是2^d?通常使用n。问题的大小用n表示,复杂性也用n表示。n=2^d。这里没有问题。如果n=2^d,那么我可以说BigO(n)或BigO(2^d)。如果n是2^d?通常使用n。问题的大小用n表示,复杂性也用n表示。我的问题是,如果它是一个完整的树,即完全满这是正确的,但最后一行满的节点数是2^d-1。另外值得注意的是,由于2^(d-1),我的问题是,如果它是一个完整的树,即完全满的,这是正确的,除了最后一行满的节点数是2^d-1。同样值得注意的是,既然2^(d-1),那么你说的是什么,实际上我选择哪一个并不重要。但是bigO(n)更直观。我真的不明白为什么O(2^d)是,除非,这是因为界限太高了吗?@dgamma3:这很没用,因为你必须知道树是如何实现的,否则它不会告诉你当你向它添加更多项时集合的反应。那么你的意思是,实际上,我选择哪一个并不重要。但是bigO(n)更直观。我真的不明白为什么O(2^d)是,除非,这是因为界限太高了吗?@dgamma3:这是非常无用的,因为你必须知道树是如何实现的,否则它不会告诉你当你向它添加更多项时集合的反应。
     o
   /   \
  o     o
 / \   
o   o