Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
TA1_2.DOC
Скачиваний:
9
Добавлен:
02.11.2018
Размер:
444.42 Кб
Скачать

Определение.

Очередь - это список, в который элементы всегда добавляются с одного (переднего) конца, а удаляются с другого.

Как и стек, очередь можно реализовать одним массивом (рис. 7), где приведена очередь, содержащая список из элементов P, Q, R, S, T. Два указателя обозначают ячейки текущего переднего и заднего концов очереди.

Рис. 6

Чтобы добавить (Add) новый элемент к очереди, как и в случае стека, полагают first= first+1 и помещают новый элемент в name [first].

Чтобы удалить (Delete) элемент из очереди, заменяют last = last +1. Эта техника с точки зрения доступа к элементам основана на принципе “первый вошел - первый вышел”.

Поскольку массив name имеет конечную длину l, указатели first и last рано или поздно доберутся до его конца. Если длина списка, представленного этой очередью, никогда не превосходит l, то можно трактовать name [0] как элемент, следующий за элементом name [l-1]

Поиск в ширину использует очередь, в глубину  стек.

1.2. Множества. Представление множеств.

1) Применение списков.

При этом объем памяти, необходимый для представления множества, пропорционален числу его элементов. Время, требуемое для выполнения операции над множествами, зависит от природы операции.

Пусть А и В - множества.

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

Операция АВ требует времени, пропорционального сумме размеров множеств, поскольку надо выделить элементы, входящие в оба множества, и вычеркнуть один экземпляр каждого такого элемента. Если же А и В не пересекаются, то можно найти АВ за время, не зависящее от размера А и В. Для этого необходимо сделать конкатенацию списков, представляющих А и B. Задача объединения двух непересекающихся множеств усложняется, если необходимо быстро определять, входит ли данный элемент в данное множество. Сложность - О(1).

2) Битовое представление  представление в виде двоичного вектора.

Пусть U- универсальное множество (т.е. все рассматриваемые множества являются его подмножествами), U= n. Линейно упорядочим его. Подмножество SU

представляется в виде вектора vs из n битов, такого, что i-ый разряд в vs равен 1 тогда и только тогда, когда i-ый элемент множества U принадлежит S.

vs называется характеристическим вектором для S.

Определение принадлежности i-ого элемента множества U данному множеству не зависит от размера данного множества. Основные операции над множествами ( объединение, пересечение ) можно осуществить как операции  и  над двоичными векторами ( за время O( 1 )).

3) Представление в виде массивов.

Определяется массив A такой, что :

Определение принадлежности i-ого элемента множества U данному множеству решается за O(1),

операции объединение и пересечение - за время, пропорциональное U.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]