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