索引元素的快速反向查找

时间:2013-12-04 16:58:21

标签: java

我的问题是在索引中进行反向查找时尝试提高性能。我有一个有序的对象列表,必须在概念上分成几个类别。创建列表并需要存储列表时,将检索每个类别开始的索引。查询后来,当我给出有序列表的索引并需要知道它属于哪个类别时。

在我目前的方法中,我有两个有序列表:一个包含元素,另一个包含类别的索引。

List<Object> data = { "df", "sdfgbh", "sgdadF", "dfdF", "dFADF", "adfadf", "Dafadf", "dafadf", "654654", "sfgsfgsfg", "ethdgh", "fgnfghfgh", "fghsdfgh", "54654", ...up to 1000 }

List<Integer> categories = { 50, 146, 222, 345, 475, 610, 824, 968 }

当试图找到索引i的类别时,算法具有性能O(n)

public int categoryIndex(int position) {
 for (Integer i: categories){
   if (i > position) return i;  
 }
 return 0;
}

这个问题的其他方法是否比二进制搜索具有更好的性能?

1 个答案:

答案 0 :(得分:1)

除了延长你的data列表并进行直接索引查找(每个元素只需要1个内存指针,因此对于1000个元素的列表只有大约4k - 至少可行),二元搜索至少是O(log(n))时间。