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

1. Организация таблицы идентификаторов

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 и рис. 2.

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

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

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

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