- •Содержание
- •1. Организация таблицы идентификаторов
- •1.1. Исходные данные
- •1.2. Назначение таблиц идентификаторов
- •1.3. Метод простого рехэширования
- •1.4. Метод цепочек
- •1.5. Результаты
- •2. Проектирование лексического анализатора
- •2.1. Исходные данные
- •3. Проектирование синтаксического анализатора
- •3.1. Исходные данные
- •3.2. Построение синтаксического анализатора
- •3.3. Результаты
- •Список использованной литературы
- •Приложение а Исходный текст программы
- •Приложение б Граф состояний лексического анализатора
1.4. Метод цепочек
Согласно данному методу, хэш-функция вычисляет адрес, по которому происходит обращение сначала к хеш-таблице, а затем через нее по найденному адресу — к таблице идентификаторов. В таблицу идентификаторов для каждого элемента добавляется поле, в котором может содержаться ссылка на любой элемент таблицы. В случае возникновения коллизии алгоритм размещает элементы в ячейках таблицы, связывая их друг с другом последовательно через поле ссылки.
Поскольку при заполнении таблицы идентификаторов основными операциями являются добавление элемента в таблицу и поиск элемента в ней, на рис. 3 и рис. 4 представлены блок-схемы этих операций для рассматриваемого метода.
Рис. 3. Блок-схема добавления элемента в таблицу идентификаторов по методу цепочек
Рис. 4. Блок-схема алгоритма поиска элемента в таблицу идентифиикаторов, организованной по методу цепочек
1.5. Результаты
Для сравнения метода простого рехэширования и метода цепочек выбран текстовый файл, содержащий 100 строк.
В результате работы программы получены следующие данные, которые представлены в табл. 1.
Таблица 1
|
Метод простого рехэширования |
Метод цепочек |
Коллизий |
74 |
59 |
Сравнений |
19 |
3 |
Среднее число сравнений |
0,19 |
0,03 |
На основе полученных результатов можно сделать следующие выводы.
Недостатки метода простого рехэширования:
элементы могут попадать в ячейки с адресами, которые потом будут совпадать со значениями хеш-функции, что приводит к возникновению дополнительных коллизий;
среднее время на размещение элемента и на поиск элемента в таблице зависит от заполненности таблицы идентификаторов и качества используемой хеш-функции;
требование неполного заполнения таблицы ведет к неэффективному использованию объема доступной памяти.
Достоинством метода простого рехэширования является то, что он позволяет добиться неплохих результатов для эффективного поиска элемента в таблице (лучших, чем метод бинарного дерева).
Достоинства метода цепочек:
нет необходимости заполнять пустыми значениями таблицу идентификаторов (это можно сделать только для хеш-таблицы), то есть память используется более экономно;
элементы не могут попадать в ячейки с адресами, которые потом будут совпадать со значениями хеш-функции, то есть дополнительные коллизии не будут возникать;
среднее время на размещение элемента и на поиск элемента в таблице зависит только от среднего числа коллизий, возникающих при вычислении хеш-функции.
Недостатком метода цепочек является необходимость организации работы с динамическими массивами данных.
Метод цепочек является более эффективным методом организации таблицы идентификаторов. Именно он и будет в дальнейшем использован для хранения информации об идентификаторах в курсовой работе.
2. Проектирование лексического анализатора