Нечеткое сравнение коллекций семантический и алгоритмический аспекты


Сравнение списков


Для сравнения списков (или последовательностей) могут быть задействованы классические алгоритмы минимального редакторского расстояния (edit-distance (ed)) и алгоритмы нахождения наибольшей общей последовательности (longest-common-subsequence (lcs)), нашедшие применение в самых разных приложениях [20, 21]. Поскольку данные семейства алгоритмов достаточно хорошо проработаны и изучены, мы ограничимся вопросами их использования в общем контексте решения задач сравнения и слияния коллекций на основе семантики модели.

Пусть элементы списка

Сравнение списков
 предварительно последовательно пронумерованы, начиная с единицы, и каждый элемент
Сравнение списков
 индексируется в соответствии с положением в списке. Далее
Сравнение списков
 обозначается i-ый элемент коллекции,
Сравнение списков
 — число элементов коллекции и
Сравнение списков
 — упорядоченное подмножество элементов коллекции
Сравнение списков
, начинающееся в позиции i и заканчивающееся в позиции
Сравнение списков
.

Тогда дельта, полученная в результате сравнения двух версий коллекции

Сравнение списков
, может быть представлена множеством операций вставки новых элементов в соответствующие позиции исходного списка и удаления элементов с соответствующих позиций подобно тому, как это осуществляется в алгоритмах минимального редакторского расстояния:

Сравнение списков
Сравнение списков
Сравнение списков
 
Сравнение списков
Сравнение списков

Здесь операция

Сравнение списков
 вставляет упорядоченный набор элементов модифицированного списка
Сравнение списков
 с индексами в отрезке
Сравнение списков
 в позицию i исходного списка
Сравнение списков
. Операция
Сравнение списков
 удаляет элементы исходного списка с индексами, принадлежащими отрезку
Сравнение списков
, и, наконец, операция
Сравнение списков
 переносит элементы с индексами в отрезке
Сравнение списков
 в модифицируемый список без изменений. Последний тип операций избыточен при практической реализации, поскольку подмножество переносимых элементов может быть вычислено путем анализа интервалов индексов для удаляемых элементов. Тем не менее, здесь они используются с методической целью. Все значения индексов позиций элементов рассчитываются относительно исходных версий коллекции.

Корректное представление дельты

Сравнение списков
 предполагает, что выполняются следующие условия:

Сравнение списков

Сравнение списков

Сравнение списков

означающие, что индексы позиций вставки элементов не повторяются, а интервалы вставляемых и удаляемых элементов не пересекаются в разных операциях.

Будем считать также, что аналогичное условие выполняется для операций переноса элементов, индексы которых в исходном списке дополняют индексы удаляемых элементов:

Сравнение списков

Сравнение списков

Сравнение списков

Применение дельты предполагает предварительное упорядочение операций по индексам вставки и удаления элементов в исходной коллекции

Сравнение списков
 таким образом, что при совпадении индексов операции вставки предшествуют соответствующим операциям удаления.
Сами операции последовательно выполняются со значениями индексов, скорректированными с учетом предшествующих результатов. При подобной интерпретации каждая операция вставки элементов
Сравнение списков
 может рассматриваться в качестве композиции элементарных операций вставки отдельных элементов 
Сравнение списков
 с наложенными отношениями предшествования между ними. Используемый символ отношения
Сравнение списков
 означает, что операции
Сравнение списков
,
Сравнение списков
 должны выполняться таким образом, чтобы в результирующем представлении коллекции элемент
Сравнение списков
 предшествовал элементу
Сравнение списков
 при условии, что обе операции применяются. Последнее замечание существенно, поскольку одна из операций может быть не включена в результирующую транзакцию. Тем не менее, транзитивные отношения предшествования определяют частичный порядок между операциями транзакции, который должен соблюдаться независимо от того, какие операции применяются, а какие — нет. Таким образом, установленные отношения предшествования гарантируют, что элементы
Сравнение списков
 будут вставлены в результирующий список, не нарушая исходный порядок. Подобные отношения могут конструктивно использоваться при выполнении операций. Например, если операция реализуется как вставка в указанную позицию списка, то при условии
Сравнение списков
 операция
Сравнение списков
 должна применяться до операции
Сравнение списков
. Две конкурентные операции с пересекающимися значениями интервалов индексов могут приводить к ситуациям, допускающим неоднозначное решение. Две операции удаления
Сравнение списков
 и
Сравнение списков
 с пересекающимися интервалами индексов
Сравнение списков
 допускают консолидированное исполнение  в виде
Сравнение списков
. Однако полный перечень опций применения определяется как множество всех простых сочетаний (сочетаний без повторений) операций удаления, включая пустое множество:
Сравнение списков
. Число возможных сочетаний может быть слишком велико для выбора необходимого варианта в ходе интерактивной сессии. Поэтому более естественным может оказаться представление конкурентных операций в более компактном виде с меньшим числом альтернатив выбора, а именно:
Сравнение списков
Отметим, что агрегированная операция удаления общих элементов
Сравнение списков
 может рассматриваться как консолидированное действие, не требующее в большинстве случаев дополнительного согласования.


Альтернативы удаления
Сравнение списков
 и
Сравнение списков
  дополняют общую операцию до соответствующих действий в каждой транзакции и могут приниматься в произвольном сочетании с двумя другими операциями. Две конкурентные операции вставки и удаления элементов, пересекающиеся по индексам:
Сравнение списков
,
Сравнение списков
, где
Сравнение списков
, следует считать неконфликтными, поскольку операции удаления могут всегда быть корректно исполнены последовательно или вместе с соответствующими операциями вставки. Для конфликтных операций вставки
Сравнение списков
 и
Сравнение списков
, добавляющих неэквивалентные списки элементов
Сравнение списков
 в одну и ту же позицию i исходного списка, пользователь должен принять решение относительно способа формирования консолидированного списка вставляемых элементов. Потенциально, любое размещение элементов альтернативных списков может считаться допустимым при выполнении следующих двух условий: оригинальный порядок элементов не изменяется и исключается дублирование эквивалентных элементов из разных версий списка в смежных позициях результирующего списка. Таким образом, возможные варианты консолидации представляются следующим образом:
Сравнение списков
Первые два условия гарантируют, что исходный порядок элементов при консолидации не будет нарушен. Третье условие, связанное с непосредственным предшествованием операций
Сравнение списков
 в итоговой транзакции, обеспечивает исключение тождественных элементов при вставке в соседние позиции из разных списков. Возможный способ реализовать подобную стратегию заключается в применении упомянутых выше методов сравнения к консолидируемым последовательностям. Пусть вспомогательные списки
Сравнение списков
,
Сравнение списков
 представляют собой соответствующие последовательности вставки элементов
Сравнение списков
 и
Сравнение списков
. Тогда их дельта представима в виде:
Сравнение списков
 
Сравнение списков
Сравнение списков
 
Сравнение списков
Сравнение списков
Способы консолидации элементов из альтернативных списков задаются на основе
Сравнение списков
 следующими размещениями:
Сравнение списков
Размещения предполагают предшествование операций, определяемое естественным порядком позиций вставки и индексных интервалов в исходных операциях сформированной дельты. Тем самым, оперируя с альтернативными последовательностями вставки и выделяя отличия между ними, удается определить конструктивный способ разрешения данного рода конфликтов. Рассмотрим следующий пример.


Пусть
Сравнение списков
 — основная и модифицированные версии некоторого списка символов:
Сравнение списков
,
Сравнение списков
,
Сравнение списков
. Тогда дельты, вычисленные в результате сравнения соответствующих модифицированных версий с базовой, представляются как
Сравнение списков


и
Сравнение списков
. В данном случае изменения не содержат конфликтов и могут быть консолидированы, приводя к результирующему представлению списка
Сравнение списков
. Оценка вычислительной сложности классического алгоритма минимального редакторского расстояния с использованием метода динамического программирования составляет
Сравнение списков
. Этой же оценкой определяется общая сложность формирования дельты для списков. При неоптимальном формировании дельты, например, путем нахождения наибольшей общей последовательности и определения дополняющих операций, оценка вычислительной сложности может быть улучшена до
Сравнение списков
, однако количество элементарных операций в полученном представлении дельты может оказаться высоким. Более детальная систематизация алгоритмов и сравнительный анализ их вычислительной сложности приводятся в [20, 21].

Содержание раздела