我将如何解决此问题:使用大O表示法给出深度为n的树中可包含的节点数
我不是在寻找确切的答案或任何事情,我将如何解决问题呢?
答案 0 :(得分:2)
在另一个答案中已经提到过这一点,但具体而言,在确定此问题的大O符号时有两个相关的数量。
很明显,如果树具有无限深度,那么将存在无限数量的节点。在这里尝试捕获的大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)属于同一个。 (用大写的符号表示你放弃每一个常数)。