
- •1. Условный оператор, оператор выбора
- •5. Метод пошаговой детализации (последовательного уточнения) разработки алгоритмов.
- •2. Операторы организации циклов
- •3. Обработка двумерных массивов.
- •4. Процедуры и функции
- •37. Алгоритмы генерирования k-элементных подмножеств множества
- •6. Использование множеств для решения задач
- •7. Процедуры и функции обработки строк
- •8. Сортировка и поиск информации. Методы внутренней сортировки: Сортировка «пузырек»
- •9.Сортировка подсчетом.
- •10.Сортировка простым обменом
- •11. Методы внутренней сортировки: «Шейкер-сортировка»
- •12. Методы внутренней сортировки: Сортировка «Хаора»
- •14. Методы внутренней сортировки: Пирамидальная сортировка
- •16.Сортировка бинарными вставками
- •17. Методы внутренней сортировки: Сортировка «Шелла»
- •15 Сортировка простыми вставками.
- •19.Чтение типизированных файлов
- •18. Сортировка слиянием
- •20.Алгоритмы удаления записей типизированного файла.
- •19.Сортировка естественным слиянием.
- •28. Динамическая структура очередь, ее создание и использование.
- •20. Поразрядная сортировка
- •32. Деревья: построение бинарного дерева
- •52.Чтение типизированных файлов
- •21. Рекуррентные выражения. Рекурсия: прямая и косвенная.
- •22.Стандартные процедуры и функции Unit Graph.
- •53.Алгоритмы удаления записей типизированного файла.
- •27. Динамическая структура стек, ее создание и использование.
- •34. Алгоритмы генерирования перестановок (антилексикографическом порядке )
- •29. Списки: односвязные
- •33. Алгоритм генерирования перестановок в лексикографическом порядке.
- •30.Списки: двухсвязные
- •31. Динамическая структура кольцо, ее создание и использование.
- •34. Алгоритмы генерирования перестановок
- •51. Создание типизированных файлов.
- •36. Алгоритмы генерирования множества всех подмножеств
- •65. Создание таблиц базы данных с помощью Database Desktop.
- •38. Введение в теорию графов. Способы представления ориентированных и неориентированных графов: матрицы смежности
- •39. Поиск в ширину в графе
- •40. Поиск в глубину в графе
- •41,42. Построение остовного дерева графа.
- •43. Поиск кратчайшего пути в графе (Алгоритм Дейкстры)
- •44.Алгоритм Форда поиска кратчайших расстояний в графе.
- •45.Алгоритм Флойда поиска кратчайших расстояний в графе.
- •46. Алгоритмы с возвращением, их реализация с помощью рекурсий и динамических структур. Примеры алгоритмов с возвращением.
- •50.Типизированные файлы, их назначение и использование. Основные процедуры обработки типизированных файлов
- •47,48. Типы файлов, объявление, логическая и физическая организация файловой системы, процедуры и функции обработки файлов
- •67,68 Компоненты страниц Data Access, Data Controls. Создание базы данных, псевдонима бд
- •62 Компоненты страницы Samples, их назначение, свойства, примеры применения
- •56.Полиморфизм. Виртуальные методы. Таблица виртуальных методов
- •54.Понятие объекта.(класса). Инкапсуляция. Иерархия классов (типов). Правила наследования
- •57. Компоненты страницы Standard, их назначение, свойства, примеры применения.
- •49. Нетипизированные файлы
- •58.Компоненты страницы Additional, их назначение, свойства, примеры применения
- •1. TBitBtn
- •2. TSpeedButton
- •3. TMaskEdit
- •4. TDrawGrid
- •60. Компоненты страницы System, их назначение, свойства, примеры применения
- •71. Создание справочной системы
- •61,. Компоненты страницы Dialogs их назначение, свойства, примеры применения
- •63. Задание и изменение свойств компонентов с помощью Инспектора объектов и программно
- •64. Обработка событий, связанных с использованием компонентов.
- •70. Мультимедийные возможности Delphi
- •66. Создание и использование модуля данных Data Module.
- •69. Графические возможности Delphi
29. Списки: односвязные
Наиболее простой способ объединить или связать некоторое множество элементов — это "вытянуть их в линию", то есть организовать линейный связный список (linear linked list).
В линейном односвязном списке (ЛОС) каждый элемент состоит из двух различных по назначению видов полей: содержательные (информационные) поля и поле структурного (или логического) указателя. В содержательных полях хранятся данные, ради которых и создавался список. Некоторые содержательные поля могут содержать указатели на данные, не вместившиеся в содержательные поля — такие указатели называются дополнительными или вторичными (secondary pointer). Поле логического указателя (logical pointer) хранит адрес в памяти следующего элемента списка. Пользуясь указателем (адресом), можно получить доступ к элементу списка, а от него к следующему и т. д., пока не будет достигнут последний элемент (см. рис. 7.1.). Поле указателя последнего элемента списка должно содержать признак "пустого" указателя (Nil), свидетельствующий о конце списка.
Свойство линейности односвязного списка определяется линейностью
логической упорядоченности его элементов: для каждого элемента (кроме первого и последнего) имеется единственный предыдущий и единственный последующий элементы. На рис. 7.1. представлена логическая структура ЛОС. Организованный таким образом список называют еще однонаправленным (one-way list).
Дескриптор ЛОС может быть реализован в виде отдельной записи и может содержать такую информацию о списке, как
1) код структуры,
2) имя списка,
3) указатель (адрес) начала списка (First) — этот указатель называется указателем списка (list pointer),
4) указатель на текущий элемент (Current),
5) текущее количество элементов в списке,
6) описатель (дескриптор) элемента.
В одном из содержательных полей каждого элемента иногда размещают так называемый указатель возврата (backward pointer), ссылающийся на дескриптор.
Для доступа к желаемому элементу ЛОС в общем случае необходимо просматривать список с его начала, даже если указатель текущего элемента расположен близко от искомого элемента, но после него. В кольцевом списке (ring, circular, cyclic list), логическая структура которого представлена на рис. 7.2, очередной просмотр можно начинать с текущего элемента, поскольку элементы списка "связаны" в кольцо. Для этого в поле логического указателя последнего элемента помещается вместо "пустого" указателя указатель начала списка.
33. Алгоритм генерирования перестановок в лексикографическом порядке.
Перестановки
Комбинаторные алгоритмы не могут обойтись без простейших алгоритмов перестановок n-элементного множества. Пусть мы имеем n элементов:
a1, a2, ..., an
и некоторое свойство P, зависящее от поряка расположения этих элементов. Например, располагая 9 чисел 1, 2, ..., 9 в клетках квадрата со стороной 3, мы можем рассмотреть свойство "магичности" квадрата. Для того, чтобы найти все магические квадраты порядка 3 мы можем воспользоваться генеретором перестановок. Число перестановок n элементов равно n!. Это легко доказывается. Действительно, на первом месте может стоять любой из n данных элементов. Рассматривая все перестановки оставшихся n-1 элементов получаем связь числа перестановок C(n) и C(n-1):
C(n)=C(n-1)*n
С учетом того, что C(1)=1, мы и получаем, что C(n)=n!.
Алгоритм PERM1 лексикографический
procedure perm(x:integer);
var i,k,d:integer;
begin
if x=n then act else begin
perm(x+1);
for i:=x+1 to n do begin
d:=p[i];for k:=i downto x+1 do p[k]:=p[k-1];p[x]:=d;
perm(x+1);
for k:=x to i-1 do p[k]:=p[k+1];p[i]:=p[x];p[i]:=d;
end;
end;
end;