如何将一系列收集操作转换为差异?

时间:2018-04-15 09:13:15

标签: arrays algorithm data-structures computer-science

我正在寻找一种能够将一系列收集操作转换为差异的算法,其中操作可以是:插入,删除和移动。

例如:

I(0), I(0) -> I(0), I(1)
D(0), D(0) -> D(0), D(1)
M(1,0), D(0) -> D(1)
I(0), I(2), D(0) -> I(1)
I(0), I(0), I(0), M(0,5) -> I(0), I(1), I(5)

左侧是要在集合上应用的有序操作序列,而右侧是操作更改集合的差异描述。

差异操作的顺序并不重要。 Diff是发生的变化列表,例如删除起始集合的索引0和1处的元素,将元素插入最终集合的索引4和5,将元素从起始集合的索引3移动到最终集合的索引9等。

请注意,两个操作可以相互消灭或转换为一个操作。

到目前为止,我在一个算法中可以通过切换所有可能的组合并抵消索引或转换操作来将两个后续操作合并到差异中,但我不确定如何将其扩展到超过作为传入操作的两个操作影响所有先前的操作并且可以在该过程中被消灭。

0 个答案:

没有答案