如果在进行二分查找时 log2(len(list)) 不是整数会怎样?它需要做多少次操作?
What'll happen if log2(len(list)) is not an integer while doing binary search? How many operations will it have to do?
我想弄清楚如果给定一个数组,当它的长度以 2 为基数“记录”时,二进制搜索将不会得到整数,那么它必须执行多少操作。
我真的不知道该怎么办。
上限为直接上级整数。你不能做“0.2”的操作,它是一或零,你需要做“更多的东西”……所以一整个操作。
对于包含 5 个元素的数组,您的二进制搜索是(最坏情况):
(O = non tested, - = rejected, X = value to search)
X O O O O
^ Start here. Op. #1
X O - - -
^ New pivot Op. #2
X - - - -
^ Found Op. #3
如您所见,您得到的操作次数与 8 个元素的最坏情况完全相同,即 2 的次幂。 log2(5)=2.32...
,上限为 3,这也是最坏的情况。
二分查找分三种情况:主元匹配,太大,太小。如果您的列表长度为 n,并且枢轴位于索引 floor(n/2),则新问题的大小为 0,floor((n-1)/2),ceil((n-1)/2) .
worst-case是每次选择ceil((n-1)/2)的情况。这给出了大小为 n 的列表的 worst-case 次比较的递归关系:
C(0) = 0
C(n) = 1 + C(ceil((n-1)/2)) = 1 + C(floor(n/2))
想一想,C(n)是n的二进制数的长度,
对于 n>0 是 floor(log_2(n)) + 1.
我想弄清楚如果给定一个数组,当它的长度以 2 为基数“记录”时,二进制搜索将不会得到整数,那么它必须执行多少操作。
我真的不知道该怎么办。
上限为直接上级整数。你不能做“0.2”的操作,它是一或零,你需要做“更多的东西”……所以一整个操作。
对于包含 5 个元素的数组,您的二进制搜索是(最坏情况):
(O = non tested, - = rejected, X = value to search)
X O O O O
^ Start here. Op. #1
X O - - -
^ New pivot Op. #2
X - - - -
^ Found Op. #3
如您所见,您得到的操作次数与 8 个元素的最坏情况完全相同,即 2 的次幂。 log2(5)=2.32...
,上限为 3,这也是最坏的情况。
二分查找分三种情况:主元匹配,太大,太小。如果您的列表长度为 n,并且枢轴位于索引 floor(n/2),则新问题的大小为 0,floor((n-1)/2),ceil((n-1)/2) .
worst-case是每次选择ceil((n-1)/2)的情况。这给出了大小为 n 的列表的 worst-case 次比较的递归关系:
C(0) = 0
C(n) = 1 + C(ceil((n-1)/2)) = 1 + C(floor(n/2))
想一想,C(n)是n的二进制数的长度, 对于 n>0 是 floor(log_2(n)) + 1.