我最近遇到了这个采访问题,Matrix largest product of n numbers in a row
我理解滚动乘法的方法。我想知道是否可以进一步优化,如果我限制了问题,必须选择整个行,列或对角线。
基本上问题现在变成, 给定NxM矩阵,找到具有最大乘积的行或列或对角线。
是否可以使用O(log n)算法?
答案 0 :(得分:1)
否,如果矩阵是N X M
,在最坏的情况下你不能比O(NM)
做得更好,因为你必须找到所有行,列的产品以及对角线。你无法避免这些计算。
您可以进行小的优化,例如删除存在零的行/列/对角线(因为乘法将导致零)
答案 1 :(得分:1)
你必须在每一行和每一列至少看一次,所以你不能做得比O(max(M,N))好。为简单起见,许多人认为M == N并将其表示为O(N)。
由于您还需要查看行/列中的每个元素,因此将其设为O(M * N)。基本上这表明你需要在得到结果之前查看矩阵的每个元素。