首页 文章

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

提问于
浏览
-1

在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 回答

  • 2

    你可以使用方法

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

    创建列表视图而不是执行:

    Collections.binarySearch(list, key);
    

相关问题