次のように、テキストの追加と削除の位置を含むリストがあります。
Type Position Text/Length
1. + 2 ab // 'ab' was added at position 2
2. + 1 cde // 'cde' was added at position 1
3. - 4 1 // a character was deleted at position 4
より明確にするために、これはこれらの操作が行うことです:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
---------------------------------
t | e | x | t | | | | |
1. t | a | b | e | x | t | | |
2. c | d | e | t | a | b | e | x | t
3. c | d | e | a | b | e | x | t |
アクションの数は、次のように減らすことができます。
Type Position Text/Length
1. - 1 1 // 't' was deleted at position 1
2. + 1 cdeab // 'cdeab' was added at position 1
または:
Type Position Text/Length
1. + 1 cdeab // 'cdeab' was added at position 1
2. - 6 1 // 't' was deleted at position 6
これらのアクションはデータベースに保存され、これを最適化するには、同じ結果を得るために実行するアクションの数を減らすにはどうすればよいですか? O(n*n) より速い方法はありますか?
これらのアクションは時系列であることに注意してください。アクションの順序を変更すると、別の結果が得られます。