Название: [РЕШЕНО] Поиск изменений между массивами Отправлено: Racheengel от Ноябрь 04, 2016, 22:24 Может, конечно, это я туплю, но такая вроде бы простая задача "не гуглится".
В общем - есть 2 массива, второй является производным от первого, но в несколько изменённом состоянии (где-то что-то удалили, где-то добавили, где-то заменили и пр.) Задача - найти "где" и "что". Решение "в лоб", в принципе, я сделал, но не верю, что нет ничего стандартного... Название: Re: Поиск изменений между массивами Отправлено: Igors от Ноябрь 05, 2016, 12:52 Неск лет назад это делал, спрашивал здесь же (рез-т тот же). Очень близко к "сравнению исходников". Долго разрывать, что (смутно) помню: сначала оба массива поделить на "блоки", псевдокод
Код После этого все сразу "ложится" Название: Re: Поиск изменений между массивами Отправлено: Old от Ноябрь 05, 2016, 14:01 Решение "в лоб", в принципе, я сделал, но не верю, что нет ничего стандартного... Ну прямо стандартного конечно нет, но если речь про бинарный diff, то библиотек есть не мало.Например, вот: https://github.com/cubicdaiya/dtl Название: Re: Поиск изменений между массивами Отправлено: Igors от Ноябрь 06, 2016, 04:24 Пусть есть массивы/контейнеры A и B и текущие позиции i для A и j для B. Тогда
- если A[ i ] == B[ j ] то наращиваем совпадающий блок до упора - иначе ищем первое совпадение в противоположном массиве (в B для A[ i ] и в А для B[ j ]). Напр оказалось A[ i ] == B[ j + 5 ]. Это значит мы нашли решение при котором не совпало 5 эл-тов. Пытаемся улучшить его повторив поиск для A[ i + 1 ]....A[ i + 4 ]. Напр если A[ i + 1 ] == B[ j ], то всего 1 эл-т не совпал. Ну дальше "дело техники" оформить это рекурсией Название: Re: Поиск изменений между массивами Отправлено: rudireg от Ноябрь 06, 2016, 10:38 Может так?
Код
Название: Re: Поиск изменений между массивами Отправлено: Bepec от Ноябрь 06, 2016, 11:45 Если взять все возможные варианты, количество ошибок при этом может возрасти многократно. Достаточно добавить три четыре повторяющихся последовательности перед уже имеющейся и получает что первая будет принята за истинную, оставшиеся за добавленные. Ну и тому подобное.
Название: Re: Поиск изменений между массивами Отправлено: Racheengel от Ноябрь 06, 2016, 15:07 Да, в принципе я примерно так и сделал - искал сначала совпадающий блок, потом параллельно просматривал оба массива до первого "значительного" совпадения (т.е. как минимум более 1 символа, это настраивается), потом генерировал элемент для SES и тд.
В общем, всем спасибо) Igors, Old: посмотрю еще "бинарный diff", возможно, он будет более шустрым, чем моё велосипедо. Название: Re: [РЕШЕНО] Поиск изменений между массивами Отправлено: joker от Ноябрь 21, 2016, 10:50 Я извиняюсь, что влажу, но постановка задачи очень сильно напомнила вот такую штуку
Может быть поможет. https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%9B%D0%B5%D0%B2%D0%B5%D0%BD%D1%88%D1%82%D0%B5%D0%B9%D0%BD%D0%B0 |