比较二进制搜索和合并排序的叶节点

时间:2018-09-25 00:44:54

标签: binary-search mergesort

对于二分查找,它形成一个完整的二叉树,因此n =(2 ^ k)-1。 2向合并排序也形成一个完整的二叉树,但是n = 2 ^ k,这为什么呢?为什么还不(2 ^ k)-1?

2 个答案:

答案 0 :(得分:0)

因为与BST中的根不同,BST中的根是集合中的某个数字,所以直到您到达算法的末尾(当它成为整个列表并从中合并)时,合并排序中的树的根才算是什么。列表的左排序和右排序部分。 BST公式中的-1是第一个值,我们将其声明为BST的根。

答案 1 :(得分:0)

我认为您正在混淆完全不同的事情。二进制搜索在排序数组上进行,而不是在树上进行。数组可以有任何长度。在每个步骤中,它都会查看最靠近中间元素的元素,然后-如果该中间元素不是搜索的项目-它将递归搜索左和右子列表。

现在事实证明,如果您碰巧有一个大小为2 ^ k-1的数组,则可以计算出数学结果,以便在中心的任一侧始终具有相等数量的元素。为什么?在递归的基础上,中心元素的任一侧均为零。在底座上方的水平线上,中心元素的每一侧各有1个或3。在上方平面的水平上,中心的两侧各有3个。继续这样:

base      0 + 1 + 0 = 1  = 2^1 - 1
level 1   1 + 1 + 1 = 3  = 2^2 - 1
level 2   3 + 1 + 3 = 7  = 2^3 - 1
level 3   7 + 1 + 7 = 15 = 2^4 - 1
level 4  15 + 1 +15 = 31 = 2^5 - 1

您可以看到,对于k = 1,2,这些长度为2 ^ k-1的数组,...产生了“不错的”对称二进制搜索。

Mergesort在每个步骤将数据拆分为2种方式。同样,它适用于所有数据长度。但是在这种情况下,没有“中间”元素。因此,在此基础上,我们将对2个长度为1的子列表进行排序,然后将结果合并到更高的级别:

base     1 + 1 = 2 
level 1  2 + 2 = 4
level 2  4 + 4 = 8
level 3  8 + 7 = 16

因此,这里的“ nice”数据长度是2、2 ^ k的幂,其中k = 1,2,3 ...