Проверка принадлежности. Множество представлено битовым вектором

Множество представлено битовым вектором

Проверка отношения xÎA. Под А будем понимать заданное множество и, в то же время, бинарный код этого множества. Эта операция сводится к считыванию из битового вектора значения бита номер x. Обозначим его через qx.

Пусть M = |U|. В качестве массива-носителя B бит. вектора выберем массив с элементами типа unsigned short (16 бит). Размер n массива B будет равным:

m = M/16+1. (1)

Определим константу bit:

const unsigned short bit = 0x8000;

Она содержит единственный единичный бит в первой слева позиции 16-битового значения. Вычисление qx сводится к выполнению след. операций:

j=i/16; k=i%16;

qx = B[j] & (bit>>k);

Отсюда время выполнения этой операции равно: t = Const.

Это время не зависит ни от размера множества А, ни от размера универсума U.

Множество представлено одномерным массивом

Проверка отношения xÎA. Значение x поочередно сравнивается с элементами мн-ва A. Отсюда:

t = Const ∙n.

где n = |A|.

Множество представлено упорядоченным массивом

Использование алгоритма бинарного поиска дает:

t = Const ∙log(n).

Включение

Множество представлено битовым вектором

Рассмотрим алгоритм включения элемента x в множество A, т.е. алгоритм выполнения операции A+x, где А – множество, x – добавляемый элемент. Операция сводится к установке бита с номером, равным x, в 1. Вычисления сводятся к выполнению след. операций:

j=i/16; k=i%16;

qx = B[j] || (bit>>k);

Отсюда время выполнения этой операции также равно: t = Const.

Множество представлено одномерным массивом

Операция A+x. Включаемый элемент x вносится в мн-во A в том случае, если он там не содержится. Отсюда имеем:

t = Const ∙n.

Множество представлено упорядоченным массивом

Эта операция содержит два шага:

- проверить, содержится ли заданное x в мн-ве А,

- если содержится, то вставить его в А, не нарушая порядка.

Определяющим (более медленным) является второй шаг. Для времени имеем:

t = Const ∙n.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: