Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Відкрите хешування

Читайте также:
  1. Закрите хешування

Блок2

Хеш-таблиця — структура даних, що реалізує інтерфейс асоціативного масиву, а саме, вона дозволяє зберігати пари (ключ, значення) і здійснювати три операції: операцію додавання нової пари, операцію пошуку і операцію видалення за ключем.

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

Відкрите хешування

На мал. 1 показана базова структура даних при відкритому хешуванні. Основна ідея полягає в тому, що потенційна множина (можливо, скінченна) розбивається на кінцеве число класів. Для В класів, пронумерованих від 0 до В - 1, будується хеш-функція h, яка для будь-якого елементу х початкової множини функція Н(х) приймає цілочисельне значення з інтервалу 0, В - 1, яке, природно, відповідає класу, якому належить елемент х. Елемент х часто називають ключем, Н(х)-_ хеш-значенієм х, а "класи" - сегментами.. Ми говоритимемо, що елемент х належить сегменту Н(х).

 

Мал. 1. Організація даних при відкритому хешуванні

 

Масив, названий таблицею сегментів і проіндексований номерами сегментів 0,1,…, B - 1, містить заголовки для В списків. Елемент х i -го списку - це елемент початкової множини, для якого h(х)=i.

Якщо сегменти приблизно однакові за розміром, то в цьому випадку списки всіх сегментів повинні бути найбільш короткими при даному числі сегментів. Якщо початкова множина складається з N елементів, тоді середня довжина списків буде N/B елементів. Якщо можна оцінити величину N і вибрати В якомога ближче до цієї величини, то в кожному списку буде один-два елементи. Тоді час виконання операторів словників буде малою постійною величиною, залежною від N (або, еквівалентною, від В).

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

Тут же ми введемо хеш-функцію (яка буде "хорошою", але не "відмінною"), визначену на символьних рядках. Ідея побудови цієї функції полягає в тому, щоб представити символи у вигляді цілих чисел, використовуючи для цього машинні коди символів. У мові Pascal є вбудована функція ord(c), яка повертає цілочисельний код символу с. Таким чином, якщо х - це ключ, тип даних ключів визначений як аrrау[1..10] of char (у прикладі 2 цей тип даних названий nametype), тоді можна використовувати хеш-функцію, код якої представлений в прикладі 1. У цій функції підсумовуються всі цілочисельні коди символів, результат підсумовування ділиться на В і береться залишок від ділення, який буде цілим числом з інтервалу від 0 до B - 1.


Дата добавления: 2015-08-21; просмотров: 265 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Примечания к вступлению| Закрите хешування

mybiblioteka.su - 2015-2024 год. (0.005 сек.)