algorithm - 组成字符串的最小路径

标签 algorithm dynamic-programming theory

给定一个由符号 S 组成的矩阵 N x M 和一个给定的符号序列,找到以给定顺序遍历所有符号的最小路径。允许的方向是 UP、DOWN、LEFT、RIGHT

例子:

Matrix:
   123
   265
   346
Sequence:
   1234561
Output:
   8 (start from top left corner, then D, D, R, R, U, L, U, L)

请注意,符号可以重复,因此图形算法在这里没有用处。 实际路径不相关,只有数字,因此动态规划可能是可行的方法。

形式上:给定的符号序列必须是路径的子序列。

我正在寻找一种算法来找到上述最短路径的长度。

最佳答案

动态规划状态可以是(row, col, pos):棋盘上的两个坐标和我们构建的序列中的位置。

函数 f (row, col, pos) 是达到这种状态的最小总行进距离。

很明显,当matrix[row][col]不等于sequence[pos]时,状态无效。 我们将通过 f (row, col, pos) = infinity 对其进行编码。

对于满足 matrix[row][col] = sequence[1] 的位置,基数是 f (row, col, 1) = 0

外循环遍历状态的 pos 部分。 要在 matrix[row][col] 等于 sequence[pos] 的情况下找到 f (row, col, pos),我们想观察所有状态 (row', col', pos - 1) 并取 f (row', col', pos - 1) 的最小值加上从 (row', col')(row, col) 的距离。 这个距离只是 |row - row'| + |col - col'|.

答案是 f (row, col, n) 的最小值,其中 n 是序列的长度。

希望你能从这里开始。


即使实际路径相关,这种方法也会有所帮助。 为了找到实际路径,我们可以将先前的状态与函数值一起存储。 换句话说,f (row, col, pos) 可以是一个三元组:实际答案,row' 前一个状态,col'以前的状态。

关于algorithm - 组成字符串的最小路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49830362/

相关文章:

c# - 未使用排序或 Linq OrderBy 方法的无序数组中的前 K 个数字

java - 不同风格的递归,引用/全局/指针变量的使用

theory - 说不确定的图灵机可以在多项式时间内求解NP有什​​么后果?

algorithm - 与向量相吻合

algorithm - 计算所有双音路径

r - R中多个二项式随机数的模拟

java - 不同长度数组中的公共(public)子序列

c++ - 动态规划 : Calculate all possible end positions for a list of consecutive jumps

php - 重用 MySQL 结果

oop - 耦合性和内聚性