python - 二进制搜索以在 Python 中找到可能的最高值
问题描述
我有一个非常大的数字(20 位数字),我需要找到它。所以在 0 到 99999999999999999999 之间的范围内。
我可以检查数字是否大于或小于猜测的数字,例如:
is_smaller(12341234123412341234)
# True
is_smaller(98769876987698769876)
# False
但是,该函数的is_smaller
工作原理尚不清楚,但数字的值是恒定的。
这可以通过二进制搜索来解决吗 - 我不太确定如何实现这一点,因为我只知道数字是否更小/更大。我遇到的大多数二进制搜索实现都使用它在数组中查找给定数字,这对我不起作用,因为该数字是未知的。
在这种情况下如何使用二进制搜索,或者另一种方法更适合?
目标是找到仍然返回的最高可能True
值is_smaller
。
编辑:我无法判断数字是否更大,所以我没有is_bigger
功能。因此,在较小的范围内(例如 0 到 10),如果感兴趣的数量是6,我拥有的函数将返回:
[...]
is_smaller(4)
# True
is_smaller(5)
# True
is_smaller(6)
# True
is_smaller(7)
# False
is_smaller(8)
# False
我不得不承认问题中的函数名称选择得非常糟糕。
解决方案
如果某物既不大于也不小于您要查找的数字,那就是您要查找的数字。
def is_answer(n):
return not is_smaller(n) and not is_larger(n)
现在你可以使用标准的二分查找了;只需替换看起来像的条件
if x == search_term:
if x < search_term:
if x > search_term:
和
if is_answer(x):
if is_smaller(x):
if is_larger(x):
分别。如果你想为你的二分搜索使用<=
or>=
运算符,你可以从这些构建块中自己构建它。
推荐阅读
- python - 有没有一种简单的方法可以将 zeep 响应转换为 json、pandas、xml?
- json - 使用 jq 获取具有最新时间戳的 json 对象
- c# - 如何获得PowerPoint演示文稿中的所有形状?(我需要在 OpenXml 中)
- c# - Linq GroupBy 表达式引发 AnonymousType 异常
- python - 单击 Scrapy-Splash 中的显示按钮
- javadoc - com.gluonhq.charm.glisten.application.ViewStackPolicy 值的含义是什么?
- html - 如何定位
之后的标记 - excel - 更改 excel 图表图例颜色而不影响系列
- wordpress - 如何在wordpress 5.2中限制一个类别中的一篇文章
- powershell - 检查 AD 组是否为空