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


Сравнение множеств


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

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

Сравнение множеств

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

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

Применение операций, определяемых дельтой, довольно прозрачно. К заданному исходному множеству добавляются элементы, определяемые операциями ins, и удаляются элементы, определяемые операциями del. Тем самым, гарантируется тождественность условия

Сравнение множеств
, в котором функция
Сравнение множеств
 возвращает модифицированное представление коллекции, полученное в  результате применения дельты к заданному представлению коллекции X.

Две конкурентные транзакции

Сравнение множеств
 могут оказаться конфликтными в случае
Сравнение множеств
, когда в одной транзакции некоторый элемент добавляется в коллекцию, а в другой транзакции тот же самый элемент удаляется. Однако, если обе дельты вычислялись относительно общей версии коллекции в рамках распространенной схемы слияния “3-way Merge”:
Сравнение множеств
,
Сравнение множеств
, то подобные конфликты исключены в силу того, что удаляемый элемент обязан принадлежать базовой версии коллекции X и не может быть добавлен в нее повторно вследствие ограничения уникальности элементов множества. В случае иных схем слияния с участием нескольких базовых версий, например, схемы “4-way Merge”, подобные конфликты должны идентифицироваться и корректно разрешаться. Тривиальными способами разрешения являются следующие опции
Сравнение множеств
, предполагающие игнорирование обеих конфликтных операций или принятие одной из них.

Сложность вычисления дельты

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

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