在O(n)复杂度中的列有序矩阵中搜索

时间:2015-06-05 07:13:21

标签: algorithm matrix

我有一个矩阵(n * n),其所有列按非降序排序而行没有排序 - 我知道行中的每个值都小于所有值在下面的行中,但行内的值没有排序,尽管它们都比下面一行中的值更小或相同

我需要在O(n)中找到此矩阵中的值。我想在其中一个列上运行二进制搜索,直到我进入一个与我的搜索值最接近的单元格(当然,我在搜索过程中没有找到该值)。

然后,我将检查单元格行和上面一行中的搜索值(如果是单元> searching_val)或下面的行(如果单元格< searching_val)。

会起作用吗?它是否也适用于列充满相同值的情况?

1 个答案:

答案 0 :(得分:0)

  

我知道连续的每个值都小于

下面行中的所有值

这意味着行按升序排序

因此,从您的定义开始,行和列都是有序的。

通过这种方式,您可以将Matrix搜索为大小为n * n的数组。在这种情况下二进制搜索将:

O(log(n*n)) = O(2*log(n)) = O(log(n)) < O(n)

您只需定义一个以递增(或降序)顺序在Matrix中移动的索引。