行列或对角线,最大产品

时间:2015-07-13 05:46:36

标签: arrays algorithm

我最近遇到了这个采访问题,Matrix largest product of n numbers in a row

我理解滚动乘法的方法。我想知道是否可以进一步优化,如果我限制了问题,必须选择整个行,列或对角线。

基本上问题现在变成, 给定NxM矩阵,找到具有最大乘积的行或列或对角线。

是否可以使用O(log n)算法?

2 个答案:

答案 0 :(得分:1)

,如果矩阵是N X M,在最坏的情况下你不能比O(NM)做得更好,因为你必须找到所有行,列的产品以及对角线。你无法避免这些计算。

您可以进行小的优化,例如删除存在零的行/列/对角线(因为乘法将导致零)

答案 1 :(得分:1)

你必须在每一行和每一列至少看一次,所以你不能做得比O(max(M,N))好。为简单起见,许多人认为M == N并将其表示为O(N)。

由于您还需要查看行/列中的每个元素,因此将其设为O(M * N)。基本上这表明你需要在得到结果之前查看矩阵的每个元素。