删除3: before {1, 2, 3, 4},after {1, 2, 4}
插入5: before {1, 2, 3, 4},after {1, 2, 5, 3, 4}
移动4: before {1, 2, 3, 4},after {4, 1, 2, 3}
因此,算法应该计算在给定数字的起始和终止序列之间最小的这种变换数,并且最好能够给出所需的变换列表。序列的一个重要特征是数字永远不会重复。
我有一个想法,可以修改Levenshtein算法,使其仅计算删除和插入的数量并忽略替换。而移动的次数将是删除和插入的数量除以2。但我不确定是否正确。
有人知道这样的算法吗?
编辑:
我可能应该说,这个算法将在序列的序列上工作。例如:
{ {1, 2, 3}, {4}, {5, 6, 7} }
其中数字不重复。序列中内部元素的总数不改变。元素可以从一个内部序列移动到另一个内部序列。内部序列的数量也是恒定的。因此,它可以是
{ {1, 2, 3, 4, 5, 6, 7}, {}, {} } { {}, {1, 2, 3, 4, 5, 6, 7}, {} } { {}, {}, {1, 2, 3, 4, 5, 6, 7} }
这个算法的想法是计算每个对应内部序列的距离,然后将它们相加以得到外部序列的距离。
因此,元素可以从内部序列中删除或插入,但它们永远不会从外部序列中消失。
这个算法最重要的方面是它应该找到最小的变换次数,而不仅仅是一些变换次数。