我在两个大小为NxN的排序矩阵上遇到了一些问题。
即,对矩阵进行排序,使得每一行和每一列按升序排序。我的任务是首先读取两个矩阵然后乘以它们,这应该产生另一个排序的方阵。在这个结果矩阵中,我必须搜索一个元素,但问题是时间复杂度限制为O(n^2(lgn))
,而典型的乘法算法约为O(n^3)
。
如何同时查找动态正确值的元素?谁能帮我解决这个问题?我已经挣扎了一个星期左右,我仍然没有看到一个很好的解决方案。
我真的很感谢你的任何帮助!
祝你好运!
答案 0 :(得分:1)
可以在O(N)
时间内搜索已排序矩阵中的元素。
1. Start from lower left corner of the matrix A[N-1][0] (i = N-1, j = 0).
2. If element is > A[i][j], go right (increment j).
3. If element is < A[i][j], go above (decrement i).
4. If element is == A[i][j], Stop with success.
5. If i < 0 or j == N, Stop with failure.
现在,您要在矩阵中搜索元素,该矩阵是两个已排序矩阵的乘积。
IMO可以在整个O(N^2)
时间内完成!
只需应用上述搜索算法并即时计算矩阵元素。计算每个元素需要O(N)
时间,因为您将一行与一列相乘。因此,算法的整体复杂性应为O(N^2)
。