在 k 次谎言情况下寻找最小值和最大值
在计算机科学领域,寻找集合中的最小值和最大值是一个基础问题。传统上,我们假定用于比较元素大小的“神谕”(oracle)总是给出正确答案。但在现实场景中,神谕可能会给出错误答案,这就引入了在谎言情况下寻找最值的问题。
1. 问题背景
考虑一个包含 n 个元素的集合 X,其元素间存在未知的全序关系 ≤。我们可以通过神谕来访问这个顺序,给定集合中的两个元素 x 和 y,神谕会告知我们 x < y 还是 x > y。
-
传统方法 :
- 寻找集合 X 中的最小值,最少需要 n - 1 次比较,且 n - 2 次比较在最坏情况下是不够的。
- 若要同时找出最小值和最大值,Pohl 在 1972 年证明了 ⌈3n/2⌉ - 2 次比较是最优的。该算法先将集合元素两两配对比较,然后在“失败者”中找最小值,在“胜利者”中找最大值。
-
存在谎言的情况 :现在假设神谕在整个计算过程中最多可能给出 k 次错误答案,这就是所谓的“在 k 次谎言情况下的计算”。在这种情况下,之前的算法就不再适用。Aigner 给出了一个上界,即 (k + O(√k))n 次比较足以解决问题。而我们的目标是进一步优化这个结果。
2. 简单算法
在证明更优算法之前,先介绍一个简单算法,它能说明主要思路,但给出的界限相对较弱。
-
通用算法框
k次谎言下寻找最值算法
超级会员免费看
订阅专栏 解锁全文
14

被折叠的 条评论
为什么被折叠?



