在log n时间中查找概率等级

时间:2014-12-10 19:27:09

标签: algorithm probability

给你一个序列a1,a2 ......一个实数。我们想找一个等级为的数字 大于n / 2。设计一个O(log n)算法,该算法将找到一个等级大于n / 2的数字 概率大于1-1 / n。 注意:1。数字未排序。

2 个答案:

答案 0 :(得分:3)

假设n是偶数。显而易见的事情是随机地随机取样lg n个元素并返回最大值。最大值不在上半部分的概率是所有lg n个样本来自下半部分的概率。每个样本在下半部分的概率为1/2,因此失败概率为(1/2)^(lg n)= 1 / n。

答案 1 :(得分:-2)

这个问题的前提是可以在O(log n)中完成。由于序列是无序的,您所能做的就是检查第一个log n元素并返回最高值。

我不知道这是否真的会在超过1-1 / n的时间内返回高于2 / n排名的元素,但是你没有要求数学证明,只是为了算法。

Python伪代码:

max = None
for i in 0 to log(len(a)):
    if (max == None or a[i] > max:
         max = a[i]
return max