我有一个整数数组,可以达到数十万(或更多),按数字升序排序,因为它们最初是这样堆叠的。
我需要能够>=
尽可能高效地查询数组以获取其第一次出现的数字某个输入的索引。我什至不考虑它就知道如何做到这一点的唯一方法是遍历数组测试条件,直到它返回 true,此时我将停止迭代。然而,这是解决这个问题的最昂贵的解决方案,我正在寻找解决它的最佳算法。
我正在使用 Objective-C 进行编码,但我将给出一个 JavaScript 示例,以扩大能够做出响应的人的受众。
// Sample set
var numbers = [1, 7, 23, 23, 23, 89, 1002, 1003];
var indexAfter100 = getIndexOfValueGreaterThan(100);
var indexAfter7 = getIndexOfValueGreaterThan(7);
// (indexAfter100 == 6) == true
// (indexAfter7 == 2) == true
将这些数据放入数据库以执行此搜索只会是最后的解决方案,因为我很想看到某种算法在内存中快速解决这个问题。
我确实有能力改变数据结构,或者在我构建数组时存储一个额外的数据结构,因为我的程序已经将每个数字一个一个地推到这个堆栈上,所以我只需修改代码将它们添加到堆栈中。在将索引添加到堆栈时搜索索引是不可能的,因为搜索操作会在事后以不同的值频繁重复。
现在我在想“B-Tree”,但老实说,我不知道如何实现一个,在我开始弄清楚之前,我想知道是否有适合这个单一用例的好算法更好的?