algorithm - 近似数查找算法
问题描述
考虑以下游戏:
- 约翰和彼得就数字n达成一致。
- John在 1 和n之间选择一个数字x。
- Peter在 1 和n之间进行了一系列猜测k。对于每个猜测:
- 如果x /2 ≤ k ≤ 2 x,则彼得获胜。
- 否则,约翰告诉彼得x是否小于k。
彼得希望以最少的猜测次数获胜。
有明显的解决方案需要最坏情况O (log n ) 的猜测,但一位朋友告诉我,有一个解决方案的渐近行为比这更好。我朋友说的对吗?
解决方案
你的朋友是对的。x的可能值可以划分为 {1,2,3,4}、{5,6,...,19,20}、{21,22,...,83,84} 等范围,其中每个range 有一个覆盖整个范围的“中心”元素;例如,如果x介于 21 和 84 之间,则k = 42 是一个获胜的猜测。有O (log n ) 个这样的范围,Peter 可以使用二进制搜索在O (log log n ) 猜测中找到正确的范围。
推荐阅读
- javascript - Openlayers - 地图初始化后启用交互
- javascript - React Native Stripe 问题
- regex - 在 Perl 中计算字符串中非空白字符的数量
- javascript - 从对象值渲染 - React js
- python-3.x - pip search 和 pip install 出错
- sorting - 以相同的方式对两个列表进行排序
- angular - Angular11 Web 应用程序被 CORS 策略阻止:预检响应中的 Access-Control-Allow-Headers 不允许访问控制允许来源
- android - 这行“_contacts?.length ?? 0”在颤振/飞镖中是什么意思
- java - 执行器保护时找不到 HttpSecurity bean
- c++ - 在 Visual Studio 中创建 dll 项目时附加依赖库的说明