Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
59
Добавлен:
02.05.2014
Размер:
286.72 Кб
Скачать

1.4 Метод рехеширования с псевдослучайным числом

Для решения проблемы коллизии можно использовать метод рехэширования. Согласно этому методу, если для элемента А адрес п() = h(A), вычисленный с помощью хэш-функции h, указывает на уже занятую ячейку, то необходимо вычислить значение функции n1 = h1{A) и проверить занятость ячейки по адресу n1. Если и она занята, то вы­числяется значение h2(A), и так до тех пор, пока либо не будет найдена свободная ячейка, либо очередное значение hi(A) не совпадет с h(A). В последнем случае считается, что таблица идентификаторов заполнена и места в ней больше нет — выдается информация об ошибке размещения идентификатора в таблице.

Поиск элемента А в таблице идентификаторов будет выполняться по следующему алгоритму:

Шаг 1. Вычислить значение хэш-функции п = h(A) для искомого элемента А.

Шаг 2. Если ячейка по адресу п пустая, то элемент не найден, алгоритм завершен, иначе необходимо сравнить имя элемента в ячейке п с именем искомого элемента А. Если они совпадают, то элемент найден и алгоритм завершен, иначе i := 1 и перейти к шагу 3.

Шаг 3. Вычислить пi = hi(A). Если ячейка по адресу ni пустая или п = пi, то элемент не найден и алгоритм завершен, иначе — сравнить имя элемента в ячейке пi с име­нем искомого элемента А. Если они совпадают, то элемент найден и алгоритм завершен, иначе i := i + 1 и повторить шаг 3.

Для наглядности на рисунке 3 изображена блок-схема поиска.

Для организации таблицы идентификаторов по методу рехэширования необходи­мо определить все хэш-функции hi для всех i. Чаще всего функции hi определяют как некоторые модификации хэш-функции h. В данной курсовой работе используется рехэширование с псевдослучайными числами по формуле hi(A) = (h(A) + pi) mod Nm., где pi – псевдослучайное число.

Рисунок 3 – Блок-схема алгоритма поиска по методу рехеширования с псевдослучайным числом.

1.5 Результаты

Для тестирования программы выбран исходный текстовый файл содержащий поряка 1000 строк.

В результате работы программы получены следующие данные:

– метод цепочек:

– всего сравнений: 690;

– в среднем сравнений: 3,63;

– метод рехеширования с псевдослучайным числом:

– всего сравнений: 639;

– в среднем сравнений: 3,36.

На основе полученных результатов можно сделать следующие выводы: при относительно небольшом количестве идентификаторов оба метода показывают примерно одинаковые результаты. В нашем случае при использовании 1068 идентификаторов среднее количество требуемых сравнений для метода цепочек оказалось на 0,27 сравнений больше, чем для метода рехеширования с псевдослучайным числом.

В то же время, наиболее эффективным и наиболее часто применяемым на практике является комбинированный метод со сбалансированным бинарным деревом. Именно он и будет в дальнейшем использован для хранения информации об идентификаторах в курсовой работе.

2 Проектирование лексического анализатора

2.1 Исходные данные

Для выполнения данной части курсовой работы требуется написать программу, которая выполняет лексический анализ входного текста в соответствии с заданием и порождает таблицу лексем с указанием их типов и значений. Текст на входном языке задается в виде символьного (текстового) файла. Программа должна выдавать сообщения о наличие во входном тексте ошибок, которые могут быть обнаружены на этапе лексического анализа.

Программа должна допускать наличие комментариев неограниченной длины во входном файле.

Соседние файлы в папке Курсовой проект3