【问题标题】:Under bound binary search?下界二分查找?
【发布时间】:2015-05-08 10:54:59
【问题描述】:

如何在常规二分搜索中设置我的条件,以便找到最大值 x,使得 f(x) t。

现在我的界限是

if f(x) > t then high = x-1
else if f(x)< t then low = x+1
else return x

主while循环是while low &lt;= high

【问题讨论】:

  • f(x) &lt;= t 时才返回?
  • f(x) 的最大值
  • 你的集合是按 f(x) 排序的吗?如果没有,你不能使用二分搜索...
  • @MyNameIsKhan 这看起来不像二进制搜索。您应该选择您知道所需答案所在的桶的中间值,而不仅仅是减少搜索空间的大小。
  • @Asad 不,它是二分搜索的主 while 循环的核心。 x 是低和高范围的中间值。

标签: algorithm binary-search


【解决方案1】:

这个怎么样?

int ans = -1;

bsearch()
  if f(x) > t then high = x-1
  else if f(x)<= t then low = x+1, ans = x

另一种方法:

只需使用您当前的 bsearch 找到 f(x) 最小值 > t 的 x, 那么你想要的只是 x - 1 ? (如果存在)

PS:如果你使用的是C++,你可以使用upper_bound()找到x的位置,那么x-1就是你的答案

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2012-12-24
    • 2015-07-25
    • 1970-01-01
    相关资源
    最近更新 更多