Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二进制搜索的比较次数_Java_Algorithm_Binary Search - Fatal编程技术网

Java 二进制搜索的比较次数

Java 二进制搜索的比较次数,java,algorithm,binary-search,Java,Algorithm,Binary Search,使用二进制搜索查找数组中所有n个排序的不同整数所需的比较总数是多少?我认为这个数字是n log2 n(2是基数),但我不确定。你觉得怎么样 如果你想要一个准确的答案,那么它显然是而不是nlog(N)或nlog2(N)。对于大多数整数N,logN和log2不是有理数,但是比较的次数必须是整数值 此外,确切答案将取决于二进制搜索算法的实现细节。例如,如果“比较”是返回true和false的简单关系,则需要比“比较”返回负值、零或正值时进行更多的比较。(在后一种情况下,当算法提前点击键时,您可以短路。

使用二进制搜索查找数组中所有n个排序的不同整数所需的比较总数是多少?我认为这个数字是n log2 n(2是基数),但我不确定。你觉得怎么样

如果你想要一个准确的答案,那么它显然是而不是nlog(N)或nlog2(N)。对于大多数整数N,logN和log2不是有理数,但是比较的次数必须是整数值


此外,确切答案将取决于二进制搜索算法的实现细节。例如,如果“比较”是返回true和false的简单关系,则需要比“比较”返回负值、零或正值时进行更多的比较。(在后一种情况下,当算法提前点击键时,您可以短路。)

找到每一个需要
log2n
,并且需要执行
n
次,所以
nlogn
就是这样。

我认为需要
nlogm

其中m是数组的大小,因此
记录m
以查找值。 然后对不同的整数执行
n

因此,总共
n logm

对于1个数字,最多会有(2*log2n+1)个向下舍入的比较(So 7.6=>7)

当我们降落在数组中的某个数字上时,首先检查它是否是我们正在寻找的那个数字。 (==第一次比较)。 然后我们检查它是否更小(或更大)(第二次比较)

为了找到这个数字,我们必须处理最多log2n个数字

我们必须对最后一个数字进行最后一次比较,以确认这是一个

因此,在[1..16]中寻找16将需要2*log216+1=9个比较(假设我们得到这些数字:8,12,14,15,16)。在[1..10]中寻找10将需要2*log210+1=7.6=>7(假设我们在这些数字上着陆:5,8,9,10)


因此,对于n个数字,最多会有n倍的数字。

谢谢您的评论,现在我明白了。我认为斯蒂芬C说的是真的。我认为,除非我们有一个精确的值,否则我们实际上无法计算出这个问题的公式。然而,如果n=2^n-1,如511(2^9-1),则很容易计算。对于511,比较总数=1x1+2X2+3X4+4X8+5X16+6X32+7X64+8X128+9X256=4097。

关于我的问题的更多详细信息:搜索算法是:int left=0,right=array.length()-1;虽然我误解了你的问题,但我认为在任意长度(=m)的排序数组中要找到(=n)有多少个不同的整数是事先知道的.我的错。谢谢你的评论,现在我明白了。我认为斯蒂芬C说的是真的。我认为除非我们有一个精确的值,否则我们实际上无法计算出这个问题的公式。但是,如果n=2^n-1,比如511(2^9-1)对于511,比较总数=1x1+2X2+3X4+4X8+5X16+6X32+7X64+8X128+9X256=4097。