Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
алгоритмы1.docx
Скачиваний:
42
Добавлен:
10.06.2015
Размер:
2 Мб
Скачать
☆

34. Частично упорядоченные деревья – основные понятия. Оператор удаления наиболее приоритетного элемента из частично упорядоченного двоичного дерева.

Мы рассмотрим частично упорядоченное дерево, как очереди с приоритетами. Очередь с приоритетами предполагает, что на множестве x € M элементов заданы функции приоритетов Р(х) ее областью значений будет некоторое подмножество множества вещественных чисел. Далее будем полагать, что у x приоритет тем выше, чем больше Р(х).

Абстрактный тип данных предполагает, что модель множества заданная с оператором INSERT DELETEMIN (удаление элемента с наивысшим приоритетом) MAKENULL, построение элементов в очереди с приоритетами предполагается, что очередь очередного элемента осуществляется по наибольшему приоритету.

Такая дисциплина используется в ОС компьютера при распределении каких-то ресурсов между процессами.

Существует несколько реализаций АТД очереди с приоритетом.

Рассмотрим способ использования упорядоченного дерева. Эти деревья относятся к классу сбалансированных деревьев, это понятие не имеет строго однозначного определения, а качественно нужно понимать так: листья возможны только на самом нижнем или на предыдущем уровне, но не на более высоких.

Все уравнения, кроме нижнего заполняются полностью, тем более сбалансировано, чем оно ближе к полному дереву. Дополнительно мы будем предполагать, где некоторые листья отсутствуют могут располагаться только правее присутствующих. Далее мы будем рассматривать в качестве сбалансированной бинарной части упорядоченные деревья. Частично упорядоченное будет пониматься так: пусть в узлах охраняться элементы какого-то множества и на нем задана функция Р(х). Каждому узлу придается приоритет равный приоритету хранящемуся в узле x, и будем полагать, что приоритет узла V не ниже чем приоритет любого его сына.

Пример:

Рис. 4.7

Отдельные узлы могут иметь одинаковые приоритеты. Удаление наиболее приоритетного элемента из частично упорядоченного 2-го дерева. В начале проведем анализ приоритета (рис. 4.7)

Очевидно, что DELETMIN должен удалить корень дерева. Непосредственное удаление нарушит связность, поэтому на нижнем уровне находим самый правый лист и ставим вместо корня, получим:

Рис. 4.8

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

Рис. 4.9 (а)

Рис. 4.9 (б)

В силу сбалансированности пути длинною 1+log2(n) продпроцесс прохождения элемента до конечного узла будет иметь порядок О(log2(n))

35. Оператор вставки элемента в частично упорядоченное дерево.

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

Пусть в дереве 4.7 нам нужно добавить элемент P(x)=4.

Рис. 4.10 (а)

Рис. 4.10 (б)

Рис. 4.10 (в)

Проведем более подробный анализ. По условию работы этого элемента возможны 2-ве ситуации:

  1. a≤b новый элемент передвигать не нужно

  2. b≤a≤c в этом случае новый элемент нужно передвинуть вверх и его приоритет будет выше c, что и необходимо, таким образом рассмотрим алгоритм полностью решающий проблему. Время выполнения INSERT пропорционально длине пути, который пройдет новый элемент от листа до конечной точки О(log2(n))