
- •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 максимально погрешности алгоритма.
37. Нагруженные деревья – основные понятия. Реализации узлов нагруженного дерева (атд treenode). Основные операторы для атд treenode.
Дана структура применения для хранения множества элементов являющихся символьными строками, такие структуры используются, когда основные операторы должны быть оператором INSERT, DELETE, MAKENULL и PRINT.
Качественное описание структуры в нагруженном дереве, каждое ребро помечено 1-ним символом основного алфавита.
Путь от корня к листу соответствует одномерному слову, который задается последовательностью символов. Дополнительно к основному алфавиту, деревья используют специальный символ «$» (маркёр) конца слова, следовательно любое слово заканчивается «$». Благодаря этому, например словам СОК и СОКРАТ будут соответствовать разные ветви дерева, иначе множество ребер соответствующим СОК не будет соответствовать множеству ребер СОКРАТ. При таком построении его узлы будут соответствовать префиксам слов, причем собственные префиксы словами не считаются.
Пример нагруженного дерева приведен на рис. 4.11
Вводим 2-ва абстрактных типа данных:
АТД TREE (собственно нагруженное дерево)
АТД TREENODE (узел нагруженного дерева)
Узел нагруженного дерева будем рассматривать, как отображение в котором областью определения является множество символов расширенного алфавита, а областью значения является множество указателей на узлы.
Наиболее простая реализация узла нагруженного дерева является массив указателей на узлы. Индексирование символов расширенного алфавита:
type
chars=(‘a’, ‘б’, … , ‘я’, ‘$’); //множество символьного расширенного алфавита
TREENODE = array [chars] of ^ TREENODE;
var node: TREENODE;
Наглядно переменную NODE, если оно отображает 2-й узел на 2-м уровне, можно интерпретировать так:
Элемент node [‘0’] – это указатель на 2-й узел 3-го уравня
node [‘1’] является указателем на 3-й уровень 3-го узла
node [‘a’] … node [‘я’], node [$] nil
Если дан символ ξ действующий в дереве, то ребро node [ξ] будет указывать на номер в который входит соответствующее ребро, в противном случае node [ξ] получит nil
node [‘$’] всегда либо nil, либо указатель на себя, т.е петля.
Основные операторы для АТД TREENODE:
Создание пустого узла (листа)
procedure MAKENULL (var node TREENODE);
var c: chars;
begin
for c:=’a’ to ‘$’ do node [c]:=nil;
end;
Передача указателя элементу массива
procedure ASSIGN (var node: TREENODE; c: chars; p:^TREENODE);
begin node [c]:=p;
end;
Получение указателя ассоцир. с определенным символом в узле
function VALUEOF (var node: TREENODE; c: chars):^TREENODE;
begin
return (node [c]);
end;
Передача элементу массива индексированного конкретным символом указатель на новый узел
procedure GETNEW (var node: TREENODE; c: chars);
begin
new (node [c]); //создание нового узла, который будет адресовываться node [c]
MAKENULL (node [c]^); //инициализация всех элементов массива ненулевым адресом
Реализация узлов нагруженного дерева может быть очень не экономичной: если общее число различных префиксов = p и при этом величина N*p существенно больше l всех слов в хранилище, то в узлах нагруженного дерева будет …