如何使用二进制搜索算法找到给定二进制密钥值的最接近元素?

时间:2013-06-23 08:54:35

标签: java algorithm binary-search

我有一个二进制向量的排序列表,我们称之为L,我有一个二进制向量q,如何使用二分搜索找到L中最接近q的向量?

2 个答案:

答案 0 :(得分:1)

如果您将最近定义为两个向量之间的距离。这是找到最接近的矢量的pesudo代码。

Vector closestVector = null;
Vector findClosestVector(L,q)
{

     int i= L.lenght/2;
     if(i ==1 ) 
     {
           Vector v = L.get(0);
           int distance = distance(v,q);
           if(closestVector == null)
           {
                   closestVector = v;
           }
           else {
               int d1 = distance(closestVector,q);
               if(d1 > distance) {
                     closestVector = v;
                     return v;
                 }
           }

     }
     else
     {
           Vector left = findClosestVector(L(0,L/2),q);
           Vector right = findClosestVector(L(L/2,L),q);
           if(distance(left,q) > distance(right,q))
           {
                return right;
           }
           else
           {
               return left;
           }
     }

 }

}

答案 1 :(得分:1)

既然你说你有一个排序的矢量列表,我认为“最接近”是指与该排序最接近另一个的矢量。您可以使用java.util.Arrays.binarySearch。它返回:

  

搜索键的索引,如果它包含在数组中;否则,( - 插入点 - 1)。 插入点定义为将密钥插入数组的点。

因此,如果向量q在数组中,则会发现其索引及其邻居最接近它。如果不是,您会发现索引j = -i - 1ibinarySearch的结果),其中q将被插入,然后ii-1最接近它。