我们给出函数β-select(A),它给出了时间Θ(n)中的floor(n /β)元素的位置作为输出,其中n是A的元素个数。 / p>
我想写一个算法,该算法返回时间Θ(n)中的阶数k,1< = k< = n的元素。
我们可以这样做吗?
我们选择p =β-select(A),这将是floor(n / b)-th元素所在的位置,然后我们将p与k进行比较,如果k <1。 p,我们在区间[1,p-1]中寻找所需的元素,如果它大于iterval [p + 1,n],否则我们返回p?
或者我错了?
答案 0 :(得分:0)
让我们总是使用beta = 2.让我们假设beta select已经返回p。我们可以将原始数组分成三个部分:所有元素小于A [p],所有元素都等于A [p],而那些元素大于A [p]。我们知道k阶元素的位置(仅通过查看第一和第二部分的大小)。如果它位于第二部分,答案是A [p]。否则,我们可以递归地解决第一或第三部分。时间复杂度为O(n + n / 2 + n / 4 + ...)= O(n)。