【发布时间】:2019-05-22 11:23:55
【问题描述】:
我已阅读:https://www.topcoder.com/community/competitive-programming/tutorials/binary-search。 有些部分看不懂==>
我们可以称之为主定理的状态是二进制搜索可以是 当且仅当对于 S 中的所有 x,p(x) 意味着对于所有 y > x 的 p(y) 才使用。 这个属性是我们丢弃后半部分时使用的 搜索空间。相当于说 ¬p(x) 蕴含 ¬p(y) 所有 y
但我认为当我们想在数组中查找一个元素(仅检查是否相等)时,这个条件不成立,并且这个条件只在我们试图找到不等式时成立,例如当我们搜索一个元素时大于或等于我们的目标值。
示例:我们在这个数组中找到 5。
索引=0 1 2 3 4 5 6 7 8 1 3 4 4 5 6 7 8 9我们定义 p(x)=>
if(a[x]==5) return true else return false
第一步=>中间索引=8+1/2=9/2=4==>a[4]=5 并且 p(x) 对此是正确的,从主要理论来看,结果是 p(x+1) ........ p(n) 是真的,但不是。
那么问题出在哪里?
【问题讨论】:
-
他们确实说
which is what we use when we discard the first half of the search space.而你说this condition does not hold when we want to find an element。这就像在兜圈子。 ?二分查找中还有2个条件,它们一定是在谈论它们。 -
“定理”表明您不能在该数组中对该谓词使用二进制搜索。
-
@molbdnilo我无法理解请解释更多。
-
@AiraBanazadeh 该定理说明了对数组的要求和二分搜索的谓词是可能的。 (通俗地说,它没有说“如果你搜索,数组有这个属性”,它说“如果数组有这个属性,你可以搜索它”。)你的数组和谓词不满足这些要求(
p(5)是是的,但p(6)是假的)所以你不能使用它们进行二分搜索。
标签: binary-search