小编典典

搜索排序的2D矩阵

algorithm

M是一个二维整数矩阵(nXm),它们在行和列中都进行排序。写一个函数search(ints),该函数返回数字或Null的确切位置。这样做最有效的方法是什么?


阅读 228

收藏
2020-07-28

共1个答案

小编典典

初始化:m [1..n(rows),1 .... m(columns)]

i = n,j = 1

从(i,j)开始:

STEP 1) if the value equals m(i,j) return (i,j)
STEP 2) if the value > m(i,j) go to step 1 with j+=1
STEP 3) else go to step 1 with i-=1

如果j或i超出范围,则在每一步都返回无解。

在n = m的情况下,此解决方案的复杂度为O(n + m),则复杂度为O(n)

我想知道是否有像二进制搜索一样的log(n * m)解决方案

编辑 另一个可能的解决方案:

STEP 1)take the middle (n/2,m/2) of the matrix and compare it to the value
STEP 2) if the value equals m(i,j) return (i,j)
STEP 3) if the value is higher you can get rid from the first quarter  
STEP 4) if the value is lower you can get rid from the forth quarter
STEP 5) split the 3 other quarters to 2, a rectangle and a box, 
        send those both items to step 1 in a recursive manner

我不确定此解决方案的效率:如果R = N * M,则T(R)= T(R / 2)+ T(R / 4)+ O(1)

2020-07-28