用于简单范围搜索算法的伪代码

时间:2011-11-30 04:37:04

标签: algorithm search range pseudocode

我正在为即将到来的CS考试练习一些练习题集。我希望我能帮助找出这个算法的伪代码:

  

给定已按升序排序的n整数数组,我需要给出一个算法的伪代码描述,以便在具有复杂度O(r + logn)的A上执行范围搜索,其中{{1输出点的数量。换句话说,给定一个封闭的时间间隔r,输出所有数组元素[lo, hi],其中A[i]


我理解复杂性的'lo <= A[i] <= hi'部分只是输出区间内的元素(将它们放在算法中的单独数组中)。

我不太清楚如何做到这一点。假设只是一种算法。递归是必要的吗?由于算法必须是r,因此不断划分数组似乎是一个想法。我对如何实现它感到困惑。

2 个答案:

答案 0 :(得分:2)

作为提示,请考虑如何调整binary search algorithm以查找大于或等于lo的第一个元素以及小于或等于hi的最后一个元素。每次搜索需要多长时间?你会如何以这种方式修改二进制搜索?

答案 1 :(得分:2)

“不断划分阵列”是正确的。如果你通过每次分成两半来做到这一点,这称为“二分搜索”,实际上是O(log(n))。

您必须进行两次搜索,一次针对hi,一次针对lo,但这不会改变复杂度的顺序,因为我们乘以一定数量的迭代次数。