【发布时间】:2010-12-12 11:55:08
【问题描述】:
我想知道,二分搜索可以应用于二维数组吗?
- 阵列上的条件是什么?二维排序??
- 复杂度需要多长时间?
- 算法将如何改变搜索边界 (minX,maxX,minY,maxY)?
编辑:
一维二分搜索维护两个指针minX 和maxX..
它选择中间索引(minX+maxX)/2并将其与搜索值进行比较,如果大于则更改maxX,否则更改minX...直到minX>=maxX
普通二进制seacrh的伪代码:
min := 1;
max := N; {array size: var A : array [1..N] of integer}
repeat
mid := min + (max - min) div 2;
if x > A[mid] then
min := mid + 1
else
max := mid - 1;
until (A[mid] = x) or (min > max);
谢谢
【问题讨论】:
-
您有什么特别想要实现的目标吗?
-
我的第一个建议是让你的一维算法得到解决。可能存在一些边界问题。考虑一个大小为 1 的数组。这里是
min = 1和max = 1。然后mid := min + (max - min) div 2产生mid = 0(假设整数运算)。那么谁知道A[mid]等于什么(假设A被索引为:1..N)。 -
@NealB 这只是维基百科中的代码......没关系它只是为了演示......
-
再看一眼...我的错误:
mid := min + (max - min) DIV 2结果为 1,这很好。 -
在我的例子中,我有一个 X=压力和 Y=温度的二维点列表。给定一个输入 targetKey (X,Y),我需要在数据集中找到最接近 targetKey 的那个。起初我以为我可以使用 BinarySearch,在类型上实现一个自定义比较器,比较两点之间的距离。但是这不起作用,因为在运行每个二分搜索之前,它需要按照与 targetKey 的距离顺序对列表进行重新排序。更好的解决方案是使用四叉树。仅供参考,这里有一个 C# 实现:link
标签: algorithm multidimensional-array binary-search