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

Мал.2.5.Заповнення хеш-таблиці і таблиці індефікаторів при використанні метода ланцюжків

Комбіновані способи побудови таблиць ідентифікаторів

Вище в прикладі була розглянута досить примітивна хеш-функція, яку ніяк не можна назвати задовільною.Гарна хеш-функція розподіляє надходять на її вхід ідентифікатори рівномірно на всі наявні в рас ¬ поряжение адреси, так що колізії виникають не так часто. Існує велика безліч хеш-функцій.Кожна з них прагне розподілити адре ¬ са під ідентифікатори за своїм алгоритмом, але, як було показано вище, иде ¬ ального хешування досягти неможливо.

У реальних компіляторах практично завжди так чи інакше використовується хеш-адресація.Алгоритм застосовуваної хеш-функції зазвичай складає «ноу-хау» розробників компілятора.Зазвичай при розробці хеш-функції творці компілятора прагнуть звести до мінімуму кількість виникаючих колізій не на всій безлічі можливих ідентифікаторів, а на тих їхніх варіантах, кото ¬ риє найбільш часто зустрічаються у вхідних програмах.Звичайно, прийняти до уваги всі допустимі вихідні програми неможливо.Найчастіше виконуємо ¬ ється статистична обробка зустрічаються імен ідентифікаторів на некото ¬ ром безлічі типових вихідних програм, а також приймаються до уваги угоди про вибір імен ідентифікаторів, загальноприйняті для вхідної мови.Гарна хеш-функція - це крок до значного прискорення роботи компіля ¬ тора, оскільки звернення до таблиць ідентифікаторів виконуються багато ¬ кратно на різних фазах компіляції.

Те, який конкретно метод застосовується в компіляторі для організації таблиць ідентифікаторів, залежить від реалізації компілятора. Один і той же компіля ¬ тор може мати навіть кілька різних таблиць ідентифікаторів, організований ¬ них на основі різних методів.

Як правило, застосовуються комбіновані методи. У цьому випадку, як і для методу ланцюжків, у таблиці ідентифікаторів організується спеціальне додат ¬ валий поле посилання. Але на відміну від методу ланцюжків воно має дещо інше значення.При відсутності колізій для вибірки інформації з таблиці вико ¬ зуется хеш-функція, поле посилання залишається порожнім.Якщо ж виникає колізія, то за допомогою поля посилання організується пошук ідентифікаторів, для яких значення хеш-функції збігаються, по одному з розглянутих вище методів: неупорядкований список, упорядкований список або ж бінарне дерево.При добре побудованій хеш-функції колізії будуть виникати рідко, тому кількість ідентифікаторів, для яких значення хеш-функції збіглися, буде не настільки велика.Тоді і час пошуку одного серед них буде незначним (в принципі, при високій якості хеш-функції підійде навіть перебір по не ¬ впорядкованого списку).

Такий підхід має перевагу в порівнянні з методом ланцюжків, оскільки не вимагає використання проміжної хеш-таблиці.Недоліком методу є необхідність роботи з динамічно розподілюваними областями па ¬ мяти. Ефективність такого методу, очевидно, в першу чергу залежить від ка ¬ повідно застосовуваної хеш-функції, а в другу - від методу організації додат ¬ Передачі сховищ даних.

Хеш-адресація - це метод, який застосовується не тільки для організації таблиць ідентифікаторів у компіляторах. Даний метод знайшов своє застосування і в операційних системах, і в системах управління базами даних. Цікавлю ¬ щиеся читачі можуть звернутися до відповідної літератури [4, т.2, 17, 50].