如何有效地在列表的一部分中进行二进制搜索?

时间:2017-11-12 12:37:42

标签: java binary-search

在JAVA中:我正在尝试进行指数搜索,然后对列表的一部分进行二进制搜索,但是我无法配置列表中的低位和高位,我最终会创建一个新数组来存储该部分列表然后进行二进制搜索并调整索引以对应原始列表;它有效,但效率很低。

任何人都可以在不制作其他阵列的情况下帮助找出正确的方法吗?

int[] binary_search = new int[(range_upper - range_lower + 1)];

            int k_for_list = range_lower;
            for(int k =0; k < binary_search.length; k++)
                {
                    binary_search[k] = l2.getId(k_for_list);
                    k_for_list++;
                }


            int low = 0;
            int high = binary_search.length - 1;

             while(high >= low) 
             {
                 int middle = (low + high) / 2;
                 if(binary_search[middle] == l1.getId(i1)) 
                    {
                     result.addPosting(l1.getId(i1), l1.getScore(i1) + l2.getScore(middle + range_lower));
                     element_not_found = 1;
                     i2 = middle + range_lower;                            
                    }

                 if(binary_search[middle] < l1.getId(i1))
                            low = middle + 1;
                  else
                            high = middle - 1;
              }              

1 个答案:

答案 0 :(得分:2)

您可以使用方法

List<Integer> list = l2.subList(range_lower, range_upper);

创建列表视图,然后执行:

Collections.binarySearch(list, key);