作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设您有一组具有已知下限和未知上限的数字,即 0、1、2、3 ... 78,其中 78 是未知数。目前假设数字之间没有间隙。有一个耗时的函数 test()
可以测试一个数字是否在集合中。
什么是找到集合中最高数字的有效方法(需要少量的 test()
调用)?
如果您知道上限是 75 +/- 25 怎么办?
如果集合中的数字之间存在随机间隙,即 0、1、3、4、7、... 78,会怎样?
最佳答案
对于“无间隙情况”:
test(x) == true
,test(x+1) == false
,对吗?您基本上是在最低已知“不在集合中”(例如最大的 32 位 int)和最高已知“在集合中”(开始具有已知的下限)通过每次测试范围内的中间值并相应地调整边界。这将给出一个 O(log N)
解决方案(根据 调用 test()
的次数),其中 X
是潜在 集的大小,而不是实际 集的大小。对于小集合,这将比仅尝试 1、2、3... 慢,但对于大集合要快得多。
如果存在差距,所有这些都会下降,在这一点上,我认为除了“从绝对最大可能的数字开始并一直工作直到 test(x) == true< 之外没有任何可行的解决方案
在这一点上是最高的数字”。据我所知,任何其他策略都将失败或成本更高。
关于algorithm - 如何设计有效的最小上界搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/594923/
我是一名优秀的程序员,十分优秀!