Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_EVM.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
2.78 Mб
Скачать

II.6.3. Построение ти по методу бинарного дерева

Можно сократить время поиска искомого элемента, не увеличивая значительно время, необходимое на заполнение ТИ, отказавшись от организации таблицы в виде непрерывного массива данных. Применяют метод построения таблиц, при котором они имеют форму бинарного дерева. Узел дерева – это элемент таблицы. Первый элемент является корневым узлом, встреченным при заполнении таблицы. Каждая вершина имеет не более двух ветвей. Применяются алгоритмы заполнения бинарного дерева. Он работает с потоком входных данных, содержащим идентификаторы (в компиляторе порождается в процессе разбора текста исходной программы). Поиск нужного элемента в дереве также выполняется по алгоритму, схожему алгоритму заполнения дерева.Бывает ситуация, когда при какой-либо последовательности дерево вырождается в упорядочный связной список. Это недостаток данного метода. Другой недостаток – необходимость работы с динамич. выделением дерева механической памяти. Среднее время на заполнение ТЗ и на поиск элемента в нем Тn определяется так

ТЗ = N * log2N

Этот метод нашел применение в ряде компиляторов.

II.6.4. ХЭШ-функции, ХЭШ-адресации

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

Хэш-функцией – это некоторое отображение множества входных элементов R на множество целых неотрицательных чисел Z. Записывается так:

Z: F(r) = n, rR, nZ.

Множество допустимых входных R называется допустимыми значениями хэш-ф. Множество значений Хэш-ф называют подмножество M из множества целых неотрицательных чисел Z

Z: M Z

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

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

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

На рисунке проиллюстрирована организация ТИ с использованием хэш-адресации.

Трем различным идентификаторам A1, А2, А3 соответствуют три значения хэш-функций n1, n2, n3,которые адресуют ячейки, где содержится информация об этих идентификаторах. При поиске идентификатора вычисляется значение n и по этому адресу выбираются данные из соответствующей ячейки. Метод достаточно эффективен, т.к. время размещения элемента в таблице и время его поиска определяются только временем, затрачиваемым на определение хэш-функций, которое значительно меньше времени, необходимого на многократные сравнения элементов таблицы.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]