Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用二进制搜索算法查找与给定二进制键值最近的元素?_Java_Algorithm_Binary Search - Fatal编程技术网

Java 如何使用二进制搜索算法查找与给定二进制键值最近的元素?

Java 如何使用二进制搜索算法查找与给定二进制键值最近的元素?,java,algorithm,binary-search,Java,Algorithm,Binary Search,我有一个二元向量的排序列表,我们称之为L,我有一个二元向量q,我如何使用二元搜索在L中找到与q最接近的向量?如果您将最近的定义为两个向量之间的距离。下面是找到最近向量的伪码 Vector closestVector = null; Vector findClosestVector(L,q) { int i= L.lenght/2; if(i ==1 ) { Vector v = L.get(0); int distan

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

如果您将最近的定义为两个向量之间的距离。下面是找到最近向量的伪码

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)。插入点定义为将键插入阵列的点


因此,如果向量
q
在数组中,您会发现它的索引和它的邻居最接近它。如果不是,你会发现一个索引
j=-i-1
i
binarySearch
的结果),在那里插入
q
,然后
i
i-1
将最接近它。

如何定义最接近。这是两个向量之间的距离。他可能指的是汉明距离。你有没有试过在“最近距离”算法页面上查看维基百科?