【问题标题】:How to find the product of paths in a matrix from top-left to bottom-right in less than exponential time complexity?如何以小于指数的时间复杂度找到矩阵中从左上角到右下角的路径乘积?
【发布时间】:2020-09-05 07:28:53
【问题描述】:

如果我们可以向右或向下移动,如何有效地找到从 mat[0][0] 到达 mat[r-1][c-1] 的路径乘积? 1 例如,如果矩阵是 r=3,c=3。

1 2 3 4 5 6 7 8 9

一个可能的路径是 1->2->5->8->9 并且产品 = 1*2*5*8*9 = 720。

【问题讨论】:

  • 最小化乘积相当于最小化对数之和。存在许多用于在图中找到最短路径(总和)的算法。在实践中,我认为您不需要计算对数。只需调整现有方法
  • 你的问题不清楚。 product of paths 是什么意思?
  • @MBo 路径的乘积是指该路径中包含的索引上存在的整数的乘积。在上面的示例中,路径之一是 (0,0)->(0 ,1)->(1,1)->(2,1)->(2,2)。所以,乘积为 mat[0][0]*mat[0][1]*mat[1] [1]*mat[2][1]*mat[2][2] = 720.
  • @Damien 但我不需要最短路径。实际上,我想检查“可能路径的乘积”是否可以被给定整数“k”整除。并且只计算这些可能的路径。
  • @Touqeer Pathan 但是你的问题并没有说明被 k 整除和计算这样的路径。值得编辑问题,添加完整的问题陈述

标签: c++ algorithm matrix


【解决方案1】:

MxN 矩阵的路径数为

 / (M-1) + (N-1) \      / (M-1) + (N-1) \
|                 | =  |                 |
 \     M-1       /      \     N-1       /

有关可访问的论文,请查看用于解决该问题的众多网络资源之一,例如。 this one.

基本直觉是垂直和水平移动的次数在所有路径上都是固定的,因此问题可以简化为计数排列。

对于方形NxN 矩阵,路径数是N-th 加泰罗尼亚数

       / 2 N \     / 2 N \
C_N = |       | - |       |
       \  N  /     \ N+1 /

(参见例如Wikipedia article)。

无论如何这意味着N 中的产品数量呈指数级增长,因此效率将受到限制。

如果您对根据某些标准的最佳路径感兴趣,则该问题可能允许动态规划,从而允许多项式空间和时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-25
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多