Algorithm 排序数组,在中查找if元素的比较次数

Algorithm 排序数组,在中查找if元素的比较次数,algorithm,sorting,Algorithm,Sorting,我有一个排序数组和一个数字,我应该做多少最大比较来确定数组中是否包含该数字 假设数组中有一百万个数字。使用分治或二进制搜索伪代码: 将阵列一分为二 如果数字大于上半部分的最大值,则使用下半部分工作,否则使用上半部分工作 对另一半重复步骤1-2 最坏情况:需要分成两个数组,每个数组的长度为1=>OlogN要完成@aponeme的答案,最大比较次数等于 2*upper(log2(n)) n, n/2, n/4, ...n/(2^steps). 原因是您检查的数组的大小等于 2*upper(lo

我有一个排序数组和一个数字,我应该做多少最大比较来确定数组中是否包含该数字


假设数组中有一百万个数字。

使用分治或二进制搜索伪代码:

将阵列一分为二 如果数字大于上半部分的最大值,则使用下半部分工作,否则使用上半部分工作 对另一半重复步骤1-2
最坏情况:需要分成两个数组,每个数组的长度为1=>OlogN

要完成@aponeme的答案,最大比较次数等于

2*upper(log2(n))
n, n/2, n/4, ...n/(2^steps). 
原因是您检查的数组的大小等于

2*upper(log2(n))
n, n/2, n/4, ...n/(2^steps). 
那么最大步数是这样的

 n/(2^nsteps) = 1, i.e. nsteps = log2(n) 

带有分治或二进制的lognsearch@apomene请解释如何添加到前面的注释中,您不能说您将进行log100万次比较,因为时间复杂度是粗略的,并且有一个常数需要乘以,可以小到1或更小,也可以大到1000或更大。您检查的数组大小=n,n/2,n/4,…n/2^个步骤。最大步数为n/2^nsteps=1,即nsteps=log2n这是否回答了您的问题?我理解这个算法,但问题是我应该执行多少最大比较。当你找到元素时,你需要添加基本情况,最坏的情况是元素没有出现在列表中。对不起,我不是这方面的专家。我有一百万件物品2,4。。。1 999 998,2 000 000,我需要检查元素1000 001是否在列表中。“我应该做多少比较,为什么?”我想这是指Damien最后的评论suffies@apomene,请在您的答案中提及该答案,以便我能够将其标记为已回答。最后,对于n=1000000的具体场景,最大比较次数为log21000000=20