二进制搜索算法需要,因为一个事实,即树(有n个节点)的高度会的log(n)的log(n)时间。
你将如何证明这一点?
二进制搜索算法需要,因为一个事实,即树(有n个节点)的高度会的log(n)的log(n)时间。
你将如何证明这一点?
下面让我们首先假设树是完整的 - 它有2 ^ N叶节点。 我们试图证明你需要一个二进制搜索n次递归步骤。
对于每个递归步骤你砍候选人叶节点的数目恰好一半(因为我们的树完成)。 这意味着N个减半操作之后,恰好有一个候选节点离开。
正如我们在二进制搜索算法的每个递归步骤恰好对应于一个高度水平的高度恰好是N.
泛化到所有平衡二叉树:如果树少的节点比2 ^ N,我们肯定不需要更多 halvings。 我们可能需要较少的或相同的量,但绝不会。
现在,这里我不会给数学证明。 试着去了解使用日志底座2.登录2问题日志在计算机科学的一般意思。
首先,要明白是二进制数(log 2 N)(对数的基数为2)。 例如,
对于每一个高度节点的完全平衡树的数量
Height Nodes Log calculation 0 1 log21 = 0 1 3 log23 = 1 2 7 log27 = 2 3 15 log215 = 3
考虑节点8和15之间的平衡树(任意数量的,比方说10)。 它总是要高度3,因为任何数量的日志2名8至15为3。
在平衡二叉树要解决的问题的规模减半每次迭代。 需要由此大致登录2应用n次迭代,以获得大小为1的问题。
我希望这有帮助。
假设我们有一个完整的树一起工作,我们可以说,在深度为k,有2 个节点。 你能证明这一点使用简单归纳的基础上,直觉,即增加一个额外的级别树将通过分别在上一级时间两个节点数量的增加在整个树节点的数量。
树的高度k是日志(N),其中N是节点的数量。 这可以表述为
日志2(N)= K,
它相当于
N = 2 k
要理解这一点,这里有一个例子:
16 = 2 4 =>日志2(16)= 4
树的高度和节点的数量呈指数关系。 以节点数量的日志只是让你向后努力找到的高度。
只是仰望在克努特的严格证明,第3卷 - 搜索和排序算法......他确实是远更严格比谁我能想到的。
http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming
您可以在任何好的计算机科学图书馆和许多(很)旧怪才的书架上找到它。