arrays - 如何找到重新排序列表以获取另一个列表所需的步骤列表?

标签 arrays algorithm list reorderlist

假设我们必须列出(表示为数组或任何语言的任何内容)。这些列表同样长并且包含相同的唯一元素 - 但顺序不同。

例如:

First list: A, B, C, D
Second list: A, D, B, C

现在我要查找的是重新排序第一个列表以匹配第二个列表所需的步骤列表。在这个例子中,只有一个步骤:

3 -> 1

也就是说,因为索引 3 处的元素被移动到索引 1。请注意 B 和 C 确实更改了索引,但这只是因为当 D 在索引 1 处插入时它们正在为 D “腾出空间”,所以这步骤不应包含在移动列表中!

另一个例子:

First list: A, B, C, D, E, F
Second list: D, B, A, C, E, F
Changes:  3 -> 0, 1 -> 1

因为 D 被移动到索引 0 而 B 被移动到 1。请注意,对于 B,我们使用原始索引 1 而不是执行第一次移动后的索引。

这些步骤都是“一次执行”的——这意味着没有顺序,但我们只是通过将移动的元素放在它们应该在的位置然后用剩余的元素填充剩余的槽来创建一个新列表。

现在我的问题是:有人知道可以执行此操作的算法吗?

提前致谢! :)

最佳答案

如果您需要最短的步骤列表,请执行 Longest Increasing Subsequence在列表中并仅更改该子序列之外的元素的位置。

关于arrays - 如何找到重新排序列表以获取另一个列表所需的步骤列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29947896/

相关文章:

python - 将 np 矩阵及其索引转换为两个列表

javascript - php 文件到 php 数组到 js 数组 - 作为数组的数组

javascript - 如何从多个数组中删除最小数字

algorithm - 如何查找位置点集是否包含距离大于 1 公里的点

algorithm - 在未排序数组中查找多个子数组的中位数

algorithm - 文本搜索算法

c - 从结构内部的指针数组访问指针会导致段错误

javascript - 在 JavaScript 中查找两个日期数组之间的差异

python - 当数组非常大时,根据另一个数组的范围有效地分离数组的一部分

bash - 每个命令 "Argument list too long"