从一系列值中找到最接近边界的最快方法

时间:2011-11-27 00:00:10

标签: c++ algorithm sorting

假设我已对预先计算的浮点数进行了排序:

1, 3, 10, 29

假设我的“输入”是7.3。我希望我的程序返回3和10,因为它们是我的数组中7.3之前和之后的数字。

最快的方法是什么?我假设您可以在log(n)时间使用二分查找,但是可以在恒定时间内完成吗?

2 个答案:

答案 0 :(得分:3)

我怀疑你能不能在恒定时间内完成它,但你可以在某些假设下使用a van Emde Boas tree在log(log(n))中完成它。在实现简便性方面,二进制搜索可能是最佳选择。

答案 1 :(得分:1)

除非将输入限制为少量预定值,否则不能在恒定时间内执行此操作。只需使用二进制搜索。

二进制搜索的C ++函数是lower_bound。 (还有其他人,但你想要lower_bound。)