Первый шаг - выяснить, какие файлы нужно создать / переименовать / удалить.
- A) Создать хэш-карту файлов дерева A
- B) Просмотрите файлы дерева B
- B.1) Если в хэш-карте есть идентичный файл (имя и содержимое), оставьте его в покое
- B.2) Если содержимое идентично, но имя отличается, переименуйте файл в файл хэш-карты
- B.3) Если содержимое файла не существует в хэш-карте, удалите его
- B.4) (если один из 1,2,3 был верным) Удалить файл из хэш-карты
Файлы, оставленные в хэш-карте, - это те, которые должны быть созданы. Это должен быть последний шаг после того, как структура каталогов была разрешена.
После устранения различий в файлах становится довольно сложно. Я не удивлюсь, если не найдется эффективного оптимального решения этой проблемы (NP-complete / hard).
Трудность заключается в том, что проблема не подразделяется естественным образом. Каждый ваш шаг должен учитывать все дерево файлов. Я подумаю об этом еще немного.
РЕДАКТИРОВАНИЕ: Кажется, что наиболее изученные алгоритмы расстояния редактирования дерева рассматривают только создание / удаление узлов и перемаркировку узлов. Это напрямую не относится к этой проблеме, потому что она позволяет перемещать целые поддеревья, что значительно усложняет задачу. Текущее самое быстрое время выполнения для "более легкой" проблемы редактирования расстояния - O(N^3)
. Я предполагаю, что время выполнения для этого будет значительно медленнее.
Полезные ссылки / Ссылки
Оптимальный алгоритм разложения для дерева Редактировать расстояние - Demaine, Mozes, Weimann