使用Big O表示法计算树中的节点

时间:2013-12-09 20:24:44

标签: big-o

我将如何解决此问题:使用大O表示法给出深度为n的树中可包含的节点数

我不是在寻找确切的答案或任何事情,我将如何解决问题呢?

3 个答案:

答案 0 :(得分:2)

在另一个答案中已经提到过这一点,但具体而言,在确定此问题的大O符号时有两个相关的数量。

  • 树的深度(n)
  • 每个节点拥有的平均子女数(k)

很明显,如果树具有无限深度,那么将存在无限数量的节点。在这里尝试捕获的大O符号是树中节点数量增长到无穷大的速率。

由于树的每一层将具有前一层中节点数的大约k倍。在第一层中,假设我们有一些a个节点,在第二层中我们有k*a个节点,在第三层中我们有k*k*a个节点。

关于复杂性的一个重要部分是常量(如a)在宏观方案中并不重要,因为2*infinity仍然是无穷大。因此,上一步的相关进展是:

1 -> k -> k*k ->...

这个函数似乎是k^something的几个例子的形式,你说不提供答案,所以我不会直接给出答案,但我认为这个答案是你的权利就在门口。

祝你好运!

答案 1 :(得分:0)

首先,您必须找到一个函数f(n),表示可以在深度为n的树中包含的节点数,然后从n派生大O.

http://en.wikipedia.org/wiki/Big_O_notation

从f(n)推导出大O的一种简单方法如下,如上所述:

  • 如果f(x)是几个项的总和,则保留增长率最大的项,省略所有项。

  • 如果f(x)是多个因子的乘积,则省略任何常数(产品中不依赖于x的项)。

所以如果你发现f(n)= 100 * 2 ^ n + 100000000 * n ^ 2 + 2000000000000000000000000

然后大O将是O(2 ^ n)

答案 2 :(得分:0)

您需要找到表示深度为n的树中节点数上限的函数。因此,您需要查看每个节点具有最大可用子节点数的情况。在二叉树的情况下,每个节点必须有2个子节点,所以只需绘制一些二叉树并寻找方案。看看下面的功能:

f(n) = number of nodes in depth n
f(1) = 1
f(2) = 2
f(3) = 4
f(4) = 8
f(n) = 2 * f(n-1) = 2 * 2 * f(n-2) = 2 * 2 * 2 * f(n-3) = 2*2*2*2...*2*f(1) 

(you multiply by two n-1 times ) 2^(n-1) * 1 = 2^(n-1)

因此,要获得深度为n的二叉树中节点的上界,需要对这些值求和:

Sum of f(n) for n from [1, n] = Sum of 2^(n-1) where n is from 1 to n = 2^(N) - 1
  • 它是总和闭合公式,你可以从任何数学教科书中获得或手工制作很少的“技巧”

因此二叉树中的最大节点数由2 ^(n) - 1限定,其中n是二叉树的深度,这意味着它与O(2 ^ n)属于同一个。 (用大写的符号表示你放弃每一个常数)。