【问题标题】:Discrete Binary Search Main Theory离散二分搜索主要理论
【发布时间】: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


【解决方案1】:

我们可以在寻找精确值时使用该定理,因为我们
仅在丢弃一半时使用。如果我们正在寻找说 5,
我们发现中间是6,我们可以丢弃上半部分,
因为我们现在知道(由于定理)那里的所有项目都 > 5

还要注意,如果我们有一个排序的序列,并且想要找到任何元素
满足一个不等式,看看最后的元素就足够了。

【讨论】:

  • 但我认为我们可以在其他情况下使用二分搜索,例如,当我们想要获取排序数组中大于或等于精确值的第一个元素时,我们可以使用它。 ( >= 属性)
  • @AiraBanazadeh 二进制搜索将找到具有所需属性的 one 元素(如果存在),不一定是第一个。例如,在{1,2,3,4,5} 中查找>= 1 将找到3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多