【问题标题】:binary search and eps in comparisons比较中的二进制搜索和 eps
【发布时间】:2012-01-04 20:13:42
【问题描述】:

我在二分搜索中有 2 个比较,但我无法在两个底层之间做出确切的偏好。我在下面的两个样本之间摇摆不定:

for (int step = 0; step < 100; ++step) {
  double middle = (left + right) / 2;
  if (f(middle) > 0) right = middle; else left = middle;
}

for (int step = 0; step < 100; ++step) {
  double middle = (left + right) / 2;
  if (f(middle) > eps) right = middle; else left = middle;
}

f 是一个单调递增的函数,因为即使 eps 很小,二分搜索参数中的相应误差也有很大的危险。另一方面,即使我们的比较由于舍入误差而对相等的值不正确,二分搜索仍然会正确收敛,因为相等的值可能只出现在一个点上,并且在非常接近它的点上一切都是正确的。我想对此有一个想法。

【问题讨论】:

  • 一个似乎找到 0 而另一个找到 eps?有什么问题?
  • 另外,它真的需要精确到最大最小值的 .0000000000000000000000000000788860905% 吗?对于double,您只需要 52 个循环,对吗?
  • petr-mitrichev.blogspot.com/2011/06/… 有趣的是,这个博客属于发布问题的人
  • @Rohan:从这个和他的另一个问题来看,我严重怀疑这就是真正的彼得米​​特里切夫。

标签: c++ algorithm binary-search eps


【解决方案1】:

从您的代码来看,您正在尝试确定函数何时将具有零值。第一种方法已经足够好了,因为它符合你的意图。看来不用第二种方法了。

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 2021-09-20
    • 2014-06-21
    • 2020-10-25
    • 2017-01-26
    • 1970-01-01
    • 2015-07-29
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多