В моем предложении по катанию кошек отслеживается конвой кошек. Периодически он должен сравнивать previousOrder
с currentOrder
(каждый из них является ArrayList<Cat>
) и уведомлять кошачьих участников о любых изменениях.
Каждая кошка уникальна и может появляться только один раз в каждом списке (или вообще отсутствует). В большинстве случаев списки previousOrder
и currentOrder
имеют одно и то же содержимое в том же порядке, но может произойти любое из следующих событий (от более частых до менее частых):
- Порядок кошек полностью скремблируется.
- Кошки индивидуально перемещаются вверх или вниз в списке
- Новые кошки присоединяются к определенной точке конвоя
- Кошки покидают конвой
Это выглядит как изменить проблему расстояния для меня. В идеале я ищу алгоритм, который определяет шаги, необходимые для выполнения previousOrder
match currentOrder
:
- MOVE
Fluffy
в положение12
- INSERT
Snuggles
в позиции37
- УДАЛИТЬ
Mr. Chubbs
- и др.
Алгоритм должен также распознавать сценарий №1, и в этом случае новый порядок передается целиком.
Какой лучший подход для этого?
(Этот пост и этот пост задают похожие вопросы, но они оба имеют дело с отсортированными списками. Мины упорядочены, но несортированы.)
ИЗМЕНИТЬ
алгоритм Левенштейна - большое предложение, но меня беспокоит потребность времени/пространства в создании матрицы. Моя главная цель - как можно быстрее определить и сообщить об изменениях. Что-то, что быстрее, чем поиск дополнений и отправка сообщения по строкам "Вот новые кошки, и вот текущий порядок".