Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые проекты / курса не мои / Василию / ПЗ Берта / пояснительная записка.doc
Скачиваний:
32
Добавлен:
02.05.2014
Размер:
535.04 Кб
Скачать

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

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

В курсовом проекте используется сопоставление двух методов: хеш-адресация (метод разрешения коллизий: рехешированием с помощью произведения) и упорядоченный список.

1.2 Назначение таблиц идентификаторов

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

Структура данных таблицы идентификаторов должна со­держать в обязательном порядке поле имени идентификатора, а также поля дополнительной информации об идентификаторе по усмотрению разработчиков компилятора, но в курсовом проекте хранение какой-либо дополнительной информации об идентификаторах можно не организовывать. Таблицы идентификаторов реализованы в виде статических массивов.

1.3 Хеш-адресация с рехешированием.

Для хеш-адресации с рехешированием в качестве хэш-функции используем функ­цию, которая будет получать на входе строку, а в результате выдавать сумму ко­дов первого и второго элементов строки. Если строка содер­жит один символ, то хэш-функция берется от одного элемента.

Для решения проблемы коллизии используем метод простого рехеширования , новую хеш-функцию получаем по формуле:

hi(A) = ( h(A)+i ) mod Nm, (1)

где i – число возникновения коллизий, а Nm – максимальное значение из области значений (равное 509).

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

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

Блок-схема добавления элемента в таблицу идентификаторов методом хеш-адресации представлена на рис. 1.

Рис. 1 Блок-схема добавления элемента методом хеш-адресации

Блок-схема поиска элемента в таблице идентификаторов методом хеш-адресации представлена на рис. 2.

Рис.2 Блок-схема поиска элемента в ТИ методом хеш-адресации

Соседние файлы в папке ПЗ Берта