- •27. Составной оператор (блок). Условный оператор. Оператор перехода goto и помеченный оператор. Оператор цикла с параметром (оператор for)
- •28. Оператор цикла с предусловием (оператор while). Оператор цикла с постусловием (оператор repeat). Оператор варианта (оператор case).
- •29. Функции и процедуры в псевдокодах
- •30.Бинарное дерево поиска. Сортировка элементов, хранящихся в бинарном дереве поиска.
- •31. Оператор проверки принадлежности элемента множеству. Оператор вставки элемента в бинарное дерево поиска.
- •32.Оператор удаления элемента из бинарного дерева
- •33. Оценка эффективности алгоритмов на бинарном дереве поиска.
- •34. Частично упорядоченные деревья – основные понятия. Оператор удаления наиболее приоритетного элемента из частично упорядоченного двоичного дерева.
- •35. Оператор вставки элемента в частично упорядоченное дерево.
- •36. Реализация частично упорядоченного двоичного дерева двоичной кучей.
- •37. Нагруженные деревья – основные понятия. Реализации узлов нагруженного дерева (атд treenode). Основные операторы для атд treenode.
- •38. Реализация нагруженного дерева (атд tree). Структура программы для проверки орфографии с помощью нагруженного дерева.
- •39. Структура 2-3 дерева. Поиск записи с заданным ключом в 2-3 дереве.
- •40. Вставка элемента в 2-3 дерево.
- •41. Удаление элемента из 2-3 дерева
- •42. Остовные деревья минимальной стоимости (одмс) – основные понятия. Основное свойство одмс (с доказательством).
- •43. Алгоритм Прима построения одмс.
- •44. Понятие задачи коммивояжера. Жадный алгоритм для приближенного решения задачи коммивояжера.
- •45. Задача коммивояжера для полного графа с неравенством треугольника. Основные шаги алгоритма решения задачи. Утверждение 5.1 максимально погрешности алгоритма.
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-ве ситуации:
a≤b новый элемент передвигать не нужно
b≤a≤c в этом случае новый элемент нужно передвинуть вверх и его приоритет будет выше c, что и необходимо, таким образом рассмотрим алгоритм полностью решающий проблему. Время выполнения INSERT пропорционально длине пути, который пройдет новый элемент от листа до конечной точки О(log2(n))
