在矩阵上查找路径以获得最大值
Find path on a matrix to get max value
我知道,这是一个老问题,如果给出这样的矩阵:
[1 1 2 3,
2 3 4 4,
3 4 1 3,
2 1 3 4]
从给定的位置开始,从右到左,只能向右或向上或向下移动,不能原路返回右停,求取最大值的路径。
我正在考虑使用DP(可能需要尝试所有可能的路径并计算值),但它似乎会花费大量内存,因为它存储了所有可能的解决方案并且也可能很慢。
请问有没有其他想法或方法可以做出更好的解决方案?如果可能,更快的解决方案?
如果你想优化内存,你可以试试回溯。这将只涉及存储当前路径,以及最佳解决方案的路径和值。
大纲是:
- 您存储了步数列表(右、上、下)
- 可以这么说,你走的是深度优先,如果可以的话,尝试迈出新的一步
- 如果你做不到,就返回一个并改变步骤到下一个可能的方向。 (如果它比以前存储的更好,请存储此路径)。
- 如果该步骤没有下一个可能的方向,请重复 3。
- 如果穷尽所有可能性,return存储的最佳路径。
我认为有一种方法可以做 DP,但我无法快速找到它。因为目前还没有人回答我就给出一个图的方法。创建一个有向图,其中从 A 到 B 的边将等于该顶点中的数字。从您的描述中可以清楚地看出它不会有任何循环。你会得到这样的网格图,但只是定向的:
现在在右侧的某处获取一个顶点源并将其连接到第一层(将所有边都设为0)。与目的地相同,但它在左侧。
我知道,这是一个老问题,如果给出这样的矩阵:
[1 1 2 3,
2 3 4 4,
3 4 1 3,
2 1 3 4]
从给定的位置开始,从右到左,只能向右或向上或向下移动,不能原路返回右停,求取最大值的路径。
我正在考虑使用DP(可能需要尝试所有可能的路径并计算值),但它似乎会花费大量内存,因为它存储了所有可能的解决方案并且也可能很慢。
请问有没有其他想法或方法可以做出更好的解决方案?如果可能,更快的解决方案?
如果你想优化内存,你可以试试回溯。这将只涉及存储当前路径,以及最佳解决方案的路径和值。
大纲是:
- 您存储了步数列表(右、上、下)
- 可以这么说,你走的是深度优先,如果可以的话,尝试迈出新的一步
- 如果你做不到,就返回一个并改变步骤到下一个可能的方向。 (如果它比以前存储的更好,请存储此路径)。
- 如果该步骤没有下一个可能的方向,请重复 3。
- 如果穷尽所有可能性,return存储的最佳路径。
我认为有一种方法可以做 DP,但我无法快速找到它。因为目前还没有人回答我就给出一个图的方法。创建一个有向图,其中从 A 到 B 的边将等于该顶点中的数字。从您的描述中可以清楚地看出它不会有任何循环。你会得到这样的网格图,但只是定向的:
现在在右侧的某处获取一个顶点源并将其连接到第一层(将所有边都设为0)。与目的地相同,但它在左侧。