C++ 如何以低于指数的时间复杂度从左上到右下找到矩阵中路径的乘积?
如果我们只能向右或向下移动,如何有效地找到从mat[0][0]到达mat[r-1][c-1]的路径乘积?15->8->9和product=1*2*5*8*9=720。MxN矩阵的路径数为C++ 如何以低于指数的时间复杂度从左上到右下找到矩阵中路径的乘积?,c++,algorithm,matrix,C++,Algorithm,Matrix,如果我们只能向右或向下移动,如何有效地找到从mat[0][0]到达mat[r-1][c-1]的路径乘积?15->8->9和product=1*2*5*8*9=720。MxN矩阵的路径数为 / (M-1) (N-1) \ / (M-1) (N-1) \ | | = | | \ M-1 / \ N-1 / 对于一篇可访问的论文,请看一看用于解决该问题的众多网络资源之一,例如 基本直觉是
/ (M-1) (N-1) \ / (M-1) (N-1) \
| | = | |
\ M-1 / \ N-1 /
对于一篇可访问的论文,请看一看用于解决该问题的众多网络资源之一,例如
基本直觉是垂直和水平移动的数量在所有路径上都是固定的,因此问题可以简化为计算排列
对于平方NxN矩阵,路径数为第N个加泰罗尼亚数
/ 2 N \ / 2 N \
C_N = | | - | |
\ N / \ N+1 /
见
在任何情况下,这意味着产品的数量是N的指数,因此效率将受到限制
如果您根据某些标准对最优路径感兴趣,则该问题可能会考虑动态规划,从而考虑多项式空间和时间。最小化乘积相当于最小化对数之和。求图中最短路径和的算法很多。实际上,我认为你不需要计算对数。只是调整现有的方法你的问题不清楚。你所说的路径积是什么意思?@MBo所说的路径积我指的是该路径中包含的索引上的整数的积。在上面的例子中,其中一条路径是0,0->0,1->1,1->2,1->2,2,2。因此,乘积是mat[0][0]*mat 0][1]*mat 1][1]*mat 2][1]=720 Damien,但我不需要最短路径。实际上,我想检查一条可能路径的乘积是否可以被给定的整数“k”整除。只计算这些可能的路径。@Touqeer Pathan但你的问题并没有提到k的可整除性和计算这些路径。值得编辑问题,添加完整的问题陈述
/ 2 N \ / 2 N \
C_N = | | - | |
\ N / \ N+1 /