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