
- •Теоретический раздел лекции Тема 1. Программирование с использованием рекурсии
- •1.1. Cтратегии решения задачи разбиением ее на подзадачи
- •1.2. Программирование рекуррентных соотношений
- •Var z:extended;
- •1.3. Условия окончания рекурсии
- •1.4. О целесообразности использования рекурсии
- •Var I,X,y,z:word;
- •1.5 Правила выбора программной реализации рекуррентных соотношений
- •Тема 2. Задачи перебора вариантов
- •2.1. Модель дерева решений
- •2.2. Задача оптимального выбора (задача о рюкзаке)
- •2.3. Метод полного перебора двоичного дерева
- •Var wt,ct:extended;
- •Var j,k:byte;
- •If k in s then begin
- •Var j:byte;
- •Var j:byte;
- •Var wt1,oct1:byte;
- •2.4. Метод ветвей и границ
- •Var n,I:byte;
- •Var wt1,oct1:Extended;
- •Include(s,I);
- •If I in Sopt then writeln(I,a[I].W,a[I].C);
- •2.5. Эвристические методы
- •Тема 3. Поиск и сортировка массивов записей
- •3.1. Применимость сортировки и поиска
- •3.2. Массив записей и поиск в нем
- •Var m:word;
- •3.3. Сортировки массивов
- •Var c: mas; I,j,k:word;
- •Var m:word;
- •Var I,j:Word;
- •Var I,j,l,r:Word; X:Tk; w:Tzp;
- •Тема 4. Связанные списки с использованием рекурсивных данных
- •4.1. Список, стек, очередь
- •4.2. Списки на основе динамических массивов
- •Inherited create;
- •Var turn:Tlist; с1,c2:Tinf;
- •4.3. Рекурсивные данные и однонаправленные списки
- •Inherited create;
- •Var stec,st1,turn,tr1:Tlist; inf:Tinf;
- •4.4. Начальное формирование, добавление и удаление элементов однонаправленного списка
- •4.5. Разновидности связанных списков
- •Inf:Tinf;
- •Тема 5. Поиск и сортировки на связанных линейных списках
- •5.1. Поиск в однонаправленных списках
- •5.2. Сортировка однонаправленных списков
- •1 3Var Inf:tInf;
- •Тема 6. Использование линейных связанных списков
- •6.1. Вычисления арифметических выражений
- •Var ch,ch1,ch2,chr:char;
- •I:byte;ch,ch1:char;
- •6.2. Сложение больших целых чисел
- •Var u,V,s,t:byte;
- •6.3. Работа с разреженными матрицами
- •Inf:Tinf;
- •Inf:tInf;
- •Var proot,p:Ptree;
- •Var bl:boolean;
- •7.2. Бинарное дерево поиска
- •7.3. Основные операции с бинарным деревом поиска
- •Inf:tInf;
- •Var d1:Tree; c:Tinf; k:Tkey;
- •Var bl:Boolean;
- •Var m:Word;
- •Var p:Ttree; m:Word;
- •Тема 8. Хеширование
- •8.1. Что такое хеширование
- •8.2. Схема хеширования
- •Interface
- •Inf:Tinf;
- •8.4. Другие способы хеширования
- •Практический раздел Указания по выбору варианта
- •Индивидуальные практические работы и контрольные работы
- •Индивидуальная практическая работа №1. Программирование с использованием рекурсии
- •1.1. Понятие рекурсии
- •1.2. Порядок выполнения работы
- •1.2.1. Пример решения задачи
- •Индивидуальная практическая работа №2. Организация однонаправленного списка на основе рекурсивных типов данных в виде стека
- •2.1. Основные понятия и определения
- •Inf:tInf; // информация
- •Контрольная работа №1. Программирование с использованием деревьев на основе рекурсивных типов данных
- •1.1. Понятие древовидной структуры
- •Inf:tInf;
- •1.2. Компонент tTreeView
- •1.3. Бинарное дерево поиска
- •Основные операции с двоичным деревом поиска
- •1.4. Порядок написания программы
- •Inf:tInf;
- •Inherited Free;
- •Var tr:Ttree;
- •1.5. Индивидуальные задания
- •Курсовая работа
- •Литература
Контрольная работа №1. Программирование с использованием деревьев на основе рекурсивных типов данных
Цель лабораторной работы: получить навыки программирования алгоритмов обработки данных с использованием древовидных структур. Получить навыки работы с компонентом TTreeView.
1.1. Понятие древовидной структуры
Древовидная модель оказывается довольно эффективной для представления динамических данных с целью быстрого поиска информации.
Для реализации древовидных структур данных степени m используется следующая конструкция рекурсивного типа данных:
Type Ttree=^tree
Tree=Record
Inf:tInf;
A1:Ttree;// A1..Am – указатели на адреса,
... // по которым расположены сестры
Am:Ttree; // Если сестра отсутствует, то
end; // соответствующий адрес равен Nil
После того как дерево заполнено информацией, его нужно уметь просмотреть, распечатать, осуществить поиск. Для работы с деревьями используют набор специфических алгоритмов.
1.2. Компонент tTreeView
Компонент TTreeView из меню компонентов Win32 предназначен для отображения ветвящихся иерархических структур в виде горизонтальных деревьев, например, каталогов файловой системы дисков. Основным свойством этого компонента является Items, которое представляет собой массив элементов типа TtreeNode, каждый из которых описывает один узел дерева. Всего в Items - count узлов. Рассмотрим некоторые методы класса TtreeNodes.
Function AddFirst(Node:TtreeNode;const S:String):TtreeNode; - создает первый дочерний узел в узле Node. Если Node=Nil, то создается корневой узел. S – это строка содержания узла. Функция возвращает указатель на созданный узел.
Function AddChild(Node:TTreeNode; const S:String):TTreeNode; - добавляет очередной дочерний узел к узлу Node.
Function AddChildFirst(Node:TTreeNode; const S:String):TTreeNode; - добавляет новый узел как первый из дочерних узлов узла Node.
Procedure Clear; - очищает список узлов, описанных в свойстве Items.
Function FullExpand; - раскрывает все узлы при отображении дерева.
1.3. Бинарное дерево поиска
Наиболее часто для работы со списками используется бинарное (имеющие степень 2) дерево поиска, в котором ключи расположены таким образом, что для любого узла значения ключа у левого преемника меньше, чем у правого. Таким образом, организованное дерево получило название бинарное дерево поиска. Ввиду его своеобразной организации эффективность поиска информации в такой динамической структуре данных сравнима с эффективностью двоичного поиска в массиве, т.е. О(log2n). Заметим, что двоичный поиск в линейном связанном списке организовать невозможно, а эффективность линейного поиска имеет порядок О(n/2).
Основные операции с двоичным деревом поиска
При организации списков в виде двоичного дерева необходим пакет программ, реализующих следующие действия: поиск заданного ключа; поиск минимального (максимального) ключа; вставка нового значения ключа, не изменяя свойств дерева поиска; удаление заданного ключа; формирование дерева поиска; балансировка дерева.
1.4. Порядок написания программы
Задание: В качестве примера рассмотрим проект, который создает дерево, отображает его в компонентах TTreeView и Memo и удаляет дерево. Панель диалога будет иметь вид, представленный на рис. 8.1.
Рис. 1.1.
Элементы текста программы приведены ниже.
Unit UDerevo;
. . . . .
Type Tkey= longword;
TInf=record
s:string[80]; // Ф.И.О.
key:Tkey; // Номер паспорта
end;
Ttree=^tree;
Tree=Record