c++ - 如何以小于指数的时间复杂度找到矩阵中从左上角到右下角的路径乘积?
问题描述
如果我们只能向右或向下移动,如何有效地找到从 mat[0][0] 到达 mat[r-1][c-1] 的路径乘积?1<= r,c <= 10^3。 例如,如果矩阵是 r=3,则 c=3。
1 2 3 4 5 6 7 8 9
一种可能的路径是 1->2->5->8->9 并且产品 = 1*2*5*8*9 = 720。
解决方案
MxN
矩阵的路径数是
/ (M-1) + (N-1) \ / (M-1) + (N-1) \
| | = | |
\ M-1 / \ N-1 /
对于可访问的论文,请查看致力于该问题的众多网络资源之一,例如。这个。
基本直觉是垂直和水平移动的数量在所有路径上都是固定的,因此可以将问题简化为计数排列。
对于NxN
方阵,路径数是N
第-个加泰罗尼亚数
/ 2 N \ / 2 N \
C_N = | | - | |
\ N / \ N+1 /
(参见例如维基百科文章)。
无论如何,这意味着产品的数量是指数级的N
,因此效率将受到限制。
如果您对根据某些标准的最佳路径感兴趣,则该问题可能允许动态规划,从而允许多项式空间和时间。
推荐阅读
- javascript - 不想在 Jquery 中复制隐藏的行
- php - PHP;我在表格下方写的所有内容,例如按钮甚至纯文本都显示在从数据库获取数据的表格上方
- asp.net-core - 使用 GraphQL for .NET 和 EF Core 3.0 进行并行异步查询
- amazon-web-services - 如何将 AWS Just In Time Provisioning (JITP) 嵌入您的微控制器(运行 Freertos)
- solr - “如何解决 Solr 7 中的‘服务器错误’”
- iis - 在具有特定域名的 IIS 中使用子应用程序
- xml - 杨模型验证错误。元素不允许在任何地方,预期的结束标签
- python - Tesseract 手写数字失败
- excel - 单个营业月的两个日期之间的差异
- javascript - 无法从嵌套 JSON 获取值到下拉列表