
- •Теоретический раздел лекции Тема 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. Индивидуальные задания
- •Курсовая работа
- •Литература
Inf:Tinf;
Key:Tkey;
procedure TForm1.Button1Click(Sender: TObject);
begin //создать
M0:=StrToInt(Edit3.Text);
H1:=TH.create(M0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin // занести из таблицы
n:=StrToInt(Edit4.Text);
for i:=1 to n do begin
Inf.Fio:=StringGrid1.Cells[0,i];
Inf.key:=StrToInt(StringGrid1.Cells[1,i]);
H1.Add(inf);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin //найти прочесть и удалить
key:=StrToInt(Edit2.Text);
H1.Red(key,Inf);
Edit1.Text:=Inf.Fio;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin // добавить новую запись
Inf.Fio:=Edit1.Text;
Inf.key:=StrToInt(Edit2.Text);
H1.Add(inf);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
StringGrid1.rowcount:=H1.n;
H1.Free(StringGrid1);
end;
Преимущество этого метода заключается в том, что связанные хэш-таблицы никогда не переполняются, довольно просто осуществляется вставка, удаление и поиск элементов. Недостаток таких таблиц в том, что если данные недостаточно равномерно перемешаны по ключу, то некоторые списки могут оказаться очень длинными, в то время как большинство других будут пустыми, при этом поиск будет замедляться.
Для избавления от этого недостатка нужно придумать другую функцию хеширования. Иногда используют следующую функцию i:=(Key+p) Mod M, где Р - простое число. Можно Р генерировать с помощью датчика случайных чисел, при этом вначале записи и поиска датчик устанавливается в одинаковое начальное положение.
8.4. Другие способы хеширования
Перемешанная таблица.
Этот метод послужил поводом, для названия (хеширование).
Используется простой массив H[i], функция хеширования i=Key mod M. Алгоритм разрешения конфликтов следующий:
-
Х
Х
Х
Х
Х
Если очередная позиция i занята, тогда ищется первая свободная позиция и туда помещается элемент. Для уменьшения эффекта кластеризации можно использовать функцию хеширования с датчиком случайных чисел, описанную выше.
Попробуйте свои силы и напишите методы работы с этой таблицей.
Метод блоков.
Используется массив одномерных массивов одинакового размера (блоков).
Type
Tblok=array[1..P] of Tinf;
Var H:array[0..M-1] of Tblok;//массив из блоков
H1,H2:array[0..M-1] of Tblok;//блоки переполнения
Размещаются элементы следующим образом:
Вначале обычная функция i:=Key mod M находит номер блока и размещает в H[i] элемент (в конце блока). Если i-й блок переполнен, то элемент помещается в очередной блок переполнения H1[i]. Этот способ используется при хранении данных на файле. Запись и чтение в (из) файла осуществляется поблочно. Это позволяет значительно ускорить поиск, т.к. чтение из файла по одной записи медленнее, чем сразу блоком.
Практический раздел Указания по выбору варианта
Рабочей программой дисциплины «Основы алгоритмизации и программирование» в первой части предусмотрено выполнение двух индивидуальных практических работ и двух контрольных работ. В работах необходимо выполнить задание в соответствии с вариантом.
Контрольные работы и индивидуальные практические работы должны быть оформлены в соответствии с общеустановленными нормами и правилами, предъявляемыми к выполнению контрольных работ и практических работ.
Выбор вариантов задания осуществляется студентом самостоятельно на основании двух последних цифр номера зачетной книжки из данных табл. 1.