シナリオ:
- 写真のリスト
- すべての写真には次のプロパティがあります
id
sequence_number
main_photo_bit
- 最初の写真は に
main_photo_bit
設定されてい1
ます (他のすべては0
) - 写真の順序は
sequence_number
(任意です) - メインの写真が必ずしも最低であるとは限りません
sequence_number
(ソート前)
次の表を参照してください。
id, sequence_number, main_photo_bit
1 10 1
2 5 0
3 20 0
次に、シーケンス番号とメインの写真ビットを変更して順序を変更します。
ソート後の要件:
- 最初の
sequence_number
写真の は変更されていません - 最初の
sequence_number
写真のが一番低いです - できるだけ変化を少なく
例:
例 #1 (2 番目の写真が最初の位置に移動):
id, sequence_number, main_photo_bit
2 10 1
1 15 0
3 20 0
これが起こったことです:
- id 1: 新規
sequence_number
およびにmain_photo_bit
設定0
- id 2: 古い最初の写真 (id 2)
sequence_number
にmain_photo_bit
設定1
- id 3: 何も起こらない
例 #2 (3 番目の写真から 1 番目の位置へ):
id, sequence_number, main_photo_bit
3 10 1
1 20 0
2 30 0
これが起こったことです:
- id 1: 新しい
sequence_number
写真は最初の写真よりもmain_photo_bit
大きい0
- id 2:
sequence_number
新しく生成された秒より大きい新しいsequence_number
- id 3: 古い最初の写真
sequence_number
とにmain_photo_bit
設定1
新しい注文を保存するために必要な手順を計算するための最良の方法は何ですか?
編集:
更新をできるだけ少なくしたい理由は、外部サービスと同期したいからです。これは非常にコストのかかる操作です。
私はすでにアルゴリズムの実用的なプロトタイプを手に入れましたが、いくつかのエッジケースで失敗します. したがって、パッチを適用する代わりに (これは機能する可能性がありますが、これまでよりもさらに複雑になります)、他の (より良い) 方法があるかどうかを知りたいです。
私のバージョン (要するに) では、写真を並べ替え ( を変更sequence_number
)、 を交換しますmain_photo_bit
が、すべてのシナリオを解決するには十分ではありません。