二进制搜索算法需要log(n)时间,因为树的高度(有n个节点)将是log(n)。
你会如何证明这一点?
答案 0 :(得分:16)
现在我不在数学证明。尝试使用日志到基础来理解问题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,因为从8到15的任何数字的log 2 是3。
在平衡二叉树中,每次迭代时要解决的问题的大小减半。因此,需要大致log 2 n次迭代才能获得大小为1的问题。
我希望这会有所帮助。
答案 1 :(得分:9)
首先假设树已完成 - 它有2 ^ N个叶节点。我们试图证明你需要N个递归步骤来进行二分搜索。
对于每个递归步骤,您将候选叶节点的数量精确减少一半(因为我们的树已完成)。这意味着在N个减半操作之后,只剩下一个候选节点。
由于我们的二分搜索算法中的每个递归步骤恰好对应于一个高度级别,因此高度恰好为N.
对所有平衡二叉树的推广:如果树的节点数少于2 ^ N,我们肯定不需要更多减半。我们可能需要更少或相同数量但不能更多。
答案 2 :(得分:4)
假设我们有一个完整的树可以使用,我们可以说在深度k,有2个 k 节点。您可以使用简单的归纳来证明这一点,基于这样的直觉:向树中添加额外的级别将增加整个树中的节点数量,这是前一级别中的节点数量的两倍。
树的高度k是log(N),其中N是节点数。这可以表示为
log 2 (N)= k,
,相当于
N = 2 k
要理解这一点,以下是一个例子:
16 = 2 4 => log 2 (16)= 4
树的高度和节点数以指数式相关。记录节点数就可以让你向后工作以找到高度。
答案 3 :(得分:1)
只需查看Knuth,第3卷 - 搜索和排序算法中的严格证据......他所做的比我能想到的任何人都要严格得多。
http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming
你可以在任何好的计算机科学图书馆和许多(非常)老极客的书架上找到它。