小编典典

算法:在二维整数数组中搜索整数的有效方法?[重复]

algorithm

一个高效的程序,用于在二维矩阵中查找元素,该元素的行和列单调递增。(行和列从上到下,从左到右增加)。

如果二维数组已排序,我只能想到二进制搜索。


阅读 265

收藏
2020-07-28

共1个答案

小编典典

上学期,我把这个问题摆在家庭作业上,两个我认为是中等水平的学生提出了一个非常优雅,简单和(可能)最优的算法,这让我感到惊讶:

Find(k, tab, x, y)
  let m = tab[x][y]

  if k = m then return "Found"
  else if k > m then
    return Find(k, tab, x, y + 1)
  else
    return Find(k, tab, x - 1, y)

该算法在每次调用时都消除了一行或一列(请注意,它是尾部递归的,并且可以转换为循环,从而避免了递归调用)。因此,如果您的矩阵为n * m,则算法以O(n +
m)执行。这个解决方案比二分法搜索更好(解决该问题时我期望的解决方案)。

编辑 :我修复了一个错字(在递归调用中k变为x),而且,正如克里斯指出的那样,最初应使用“右上角”来调用它,即Find(k,tab,n,1),其中
n 是行数。

2020-07-28