Множество представлено битовым вектором
Исключение элемента x из множества A сводится к установке бита с номером, в 0. Вычисления сводятся к выполнению след. операций:
bit = ~ (bit>>k);
j = i/16; k = i % 16;
qx = B[j] & bit;
Отсюда время выполнения этой операции также равно: t = Const.
Множество представлено одномерным массивом
Операция A-x может быть реализована такими операторами:
for (i = 0; i < n; i++) if (x == A[i]) break;
for (k = i; k < n-1; k++) A[i] = A[i+1];
Время выполнения обоих циклов будет равно:
t = c1n1+c2n2,
где c1 - время выполнения операции сравнения, c2 - время выполнения операции присваивания (пересылки), n1 – к-во итераций первого цикла, n2 – к-во итераций второго цикла. Пусть c = max(c1,c2), тогда, учитывая, что n = n1+n2, получаем:
t ≤ Const×n.
Множество представлено упорядоченным массивом
Алгоритм такой же, как и для представления мн-ва неупорядоченным массивом. Для снижения времени можно использовать алгоритм бинарного поиска, однако порядок алгоритма остается таким же:
t ≤ Const×n.
Объединение
Множество представлено битовым вектором
Определение операции объединения: AÈB = { x | xÎA или xÎB }.
Операция сводится к поэлементному выполнению операции дизъюнкции над парами соответствующих битов. Реализовать это можно следующим образом:
for (i = 0; i < m;i++) C[i] = A[i] || B[i];
Здесь символы A,B,C используются как имена множеств и, в то же время, как имена соответствующих массивов-носителей.
Т.к. m и N связаны линейным соотношением (1), то при достаточно больших N будем иметь:
t = Const ∙N.
Множество представлено одномерным массивом
Операция AÈB. Пусть nA = |A|, nB = |B|. Данную операцию можно рассматривать как последовательность операций включения: для каждого элемента мн-ва В необходимо выполнить операцию вкючения его в м-во А. Т.к. операция включения требует линейного времени, имеем:
t ≤ Const×nAnB.
Множество представлено упорядоченным массивом
Можно использовать идею алгоритма слияния, которая используется для сортировки. Тогда упорядоченность массивов, представляющих множества, дает алгоритм с временем:
t = Const (nA+nB),
т.е. имеем линейный по времени алгоритм.