- •Системное программное обеспечение (pascal)
- •1.1.1. Пример вывода числа в виде строки символов.
- •1.2. Рекурсивные структуры данных и рекурсивные подпрограммы.
- •1.3. Линейная рекурсия в списке.
- •1.4. Деревья.
- •1.4.1. Обход дерева.
- •1.4.2. Двоичное (бинарное) дерево с указателями на объекты произвольного типа.
- •2. Функция ввода
- •3. Таблица имен
- •3.1. Поиск в таблице.
- •3.2. Основные алгоритмы поиска.
- •3.2.1. Прямой поиск строки.
- •3.2.4. Бинарный поиск.
- •3.3. Назначение и принципы организации таблиц идентификаторов.
- •3.3.4. Методы разрешения коллизий.
- •3. Метод построения таблиц, имеющих форму бинарного дерева.
- •3.3.5. Принципы работы хеш-функций.
- •3.3.6. Построение таблиц идентификаторов на основе хеш-функций.
- •1. Алгоритм организации таблицы идентификаторов.
- •2. Алгоритм поиска элемента в таблице идентификаторов.
- •3.3.8. Построение таблиц идентификаторов по методу цепочек.
- •1. Алгоритм работы метода цепочек.
- •2. Алгоритм поиска элемента в таблице идентификаторов.
- •4. Обработка ошибок
- •5. Драйвер
- •II. Контрольные вопросы
- •III. Последовательность выполнения индивидуального задания.
1. Алгоритм работы метода цепочек.
Во все ячейки хеш-таблицы поместить пустое значение, таблица идентификаторов пуста, переменная FreePtr (указатель первой свободной ячейки) указывает на начало таблицы идентификаторов; i:=1.
Вычислить значение хеш-функции ni для нового элемента Ai. Если ячейка хеш-таблицы по адресу ni пустая, то поместить в нее значение переменной FreePtr и перейти к шагу 5; иначе – перейти к шагу 3.
j:=1, выбрать из хеш-таблицы адрес ячейки таблицы идентификаторов mj и перейти к шагу 4.
Для ячейки таблицы идентификаторов по адресу mj проверить значение поля ссылки. Если оно пустое, то записать в него адрес из переменной FreePtr и перейти к шагу 5; иначе – j:=j+1, выбрать из поля ссылки адрес mj и повторить шаг 4.
Добавить в таблицу идентификаторов новую ячейку, записать в нее информацию для элемента Ai (поле ссылки должно быть пустым), в переменную FreePtr поместить адрес за концом добавленной ячейки. Если больше нет идентификаторов, которые надо разместить в таблице, то выполнение алгоритма закончено, иначе – i:=i+1 и перейти к шагу 2.
2. Алгоритм поиска элемента в таблице идентификаторов.
Вычислить значение хеш-функции n для искомого элемента A. Если ячейка хеш-таблицы по адресу n пустая, то элемент не найден и алгоритм завершен, иначе – j:=1, выбрать из хеш-таблицы адрес ячейки таблицы идентификаторов mj.
Сравнить имя элемента в ячейке таблицы идентификаторов по адресу mj с именем искомого элемента A. Если они совпадают, то искомый элемент найден и алгоритм завершен, иначе – перейти к шагу 3.
Проверить значение поля ссылки в ячейке таблицы идентификаторов по адресу mj. Если оно пустое, то искомый элемент не найден и алгоритм завершен; иначе –j:=j+1, выбрать из поля ссылки адрес mj и перейти к шагу 2.
4. Обработка ошибок
Функция обработки ошибок считает ошибки, пишет сообщение об ошибке и возвращает управление обратно.
5. Драйвер
Драйвер – это управляющая программа, которая необходима для инициализации и запуска всех функций калькулятора.
II. Контрольные вопросы
Что такое рекурсивная подпрограмма?
Какие существуют рекурсивные структуры данных?
В чем заключается задача поиска данных в таблице?
Что такое таблица идентификаторов?
В чем заключается алгоритм Кнута, Мориса и Пратта (КМП-поиск)?
В чем заключается алгоритм Боуера и Мура (БМ-поиск)?
В чем заключается бинарный поиск?
Что представляют собой абстрактные структуры данных и для чего они предназначены?
Что такое АТД-cловарь и для чего он используется?
Что такое хеширование и хеш-таблица?
Что такое хеш-адресация?
Что такое коллизия, и в каких случаях происходят коллизии?
Какие существуют методы разрешения коллизий?
В чем заключается метод цепочек?
В чем заключается метод открытой адресации?
В чем заключается метод построения таблиц, имеющих форму бинарного дерева?
Принципы работы хеш-функций.
Что такое рехеширование, и в чем заключается этот метод?
Из каких основных частей состоит калькулятор?
Что представляет собой программа синтаксического разбора?
В чем заключается задача функций ввода и обработки ошибок? Что представляет собой драйвер?