Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_5-Poshuk (2013).doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
191.49 Кб
Скачать

4.2. Організація хеш-таблиці №1

Побудувати хеш-таблицю розмірністю m=37, метод організації якої вибрати згідно з варіантом.

4.2.1. Вибір хеш-функції.

а) Вибір варіанта індивідуального завдання:

Введемо позначення: DN – день народження

MN – місяць народження

RN – рік народження

А1 – ASCII-код першої літери прізвища – велика латинська літера

А2 – ASCII-код другої літери прізвища – мала латинська літера

№ варіанта = ( DN + RN + А1 ) % 20+ 1

б) Варіанти завдань:

  1. h(key) = (АSCII-код першого символа ключа) % m;

  2. h(key) = (АSCII-код останього символа ключа) % m;

  3. h(key) = (сума АSCII-кодів першого і останьої символів ключа) % m;

  4. h(key) = [сума АSCII-кодів перших двох символів ключа (якщо ключ містить тільки один символ, то обидва символи вважати рівними першому)] % m;

  5. h(key) = [сума АSCII-кодів останніх двох символів ключа (якщо ключ містить тільки один символ, то обидва символи вважати рівними першому) ] % m;

  6. h(key) = [сума АSCII-кодів перших трьох символів ключа (якщо ключ містить менше трьох символів, то відсутні символи вважати рівними першому символу) ] % m;

  7. h(key) = [сума АSCII-кодів останніх трьох символів ключа (якщо ключ містить менше трьох символів, то відсутні символи вважати рівними першому символу) ] % m;

  8. h(key) = (сума АSCII-кодів всіх символів ключа) % m;

  9. h(key) = (кількість символів в ключі) % m;

  10. h(key) = [3*(кількість символів в ключі)] % m;

  11. h(key) = [5*(АSCII-код першого символа ключа)] % m;

  12. h(key) = [7*(кількість символів в ключі)] % m;

  13. h(key) = [10*(АSCII-код останього символа ключа)] % m;

  14. h(key) = [(АSCII-код першого символа ключа) *(кількість символів в ключі)] % m;

  15. h(key) = [(АSCII-код останього символа ключа) *(кількість символів в ключі)] % m;

  16. h(key) = (добуток АSCII-кодів першого і останьої символів ключа) % m;

  17. h(key) = [добуток АSCII-кодів перших двох символів ключа (якщо ключ містить тільки один символ, то обидва символи вважати рівними першому)] % m;

  18. h(key) = [добуток АSCII-кодів останніх двох символів ключа (якщо ключ містить тільки один символ, то обидва символи вважати рівними першому) ] % m;

  19. h(key) = [добуток АSCII-кодів перших трьох символів ключа (якщо ключ містить менше трьох символів, то відсутні символи вважати рівними першому символу) ] % m;

  20. h(key) = [добуток АSCII-кодів останніх трьох символів ключа (якщо ключ містить менше трьох символів, то відсутні символи вважати рівними першому символу) ] % m;

4.2.2. Розв'язання колізій при хешуванні

а) Вибір варіанта індивідуального завдання:

№ варіанта = ( DN + RN + А2 ) % 25+ 1

б) Варіанти завдань:

Розв'язання колізій при хешуванні здійснити:

  1. методом роздільних ланцюжків (розмірність хеш-таблиці m=37 замінити на m=7);

  2. методом відкритого хешування (розмірність хеш-таблиці m=37 замінити на m=9);

  3. методом відкритої адресації з функцією повторного хешування

hi(key) = ( h(key) + i ) % m;

  1. методом закритого хешування з функцією повторного хешування

hi(key) = ( h(key) + 2 · i ) % m;

  1. методом лінійного зондування з функцією повторного хешування

hi(key) = ( h(key) + 3 · i ) % m;

  1. методом лінійної послідовності спроб з функцією повторного хешування

hi(key) = ( h(key) + 4 · i ) % m;

  1. методом рехешування з функцією повторного хешування

hi(key) = ( h(key) + pi ) % m ,

де pi – послідовність випадкових цілих чисел: p1 = 3, р2 = 1, p3 = 7 , 4 = 4 , ... (за потребою, продовжити цей ряд);

  1. методом рехешування додаванням з функцією повторного хешування

hi(key) = ( h(key) + i · h(key) ) % m;

  1. методом відкритої адресації з функцією повторного хешування, що задається таким способом: спочатку перевіряється комірка h(key)+1, після цього перевіряється комірка h(key)–1, далі комірка h(key)+2, далі h(key)–2, далі h(key)+3 і так далі. Якщо досягається один з країв таблиці, то пошук продовжувати тільки з одного боку ключа (тобто тільки +і або тільки –і).

  2. методом відкритої адресації з функцією повторного хешування

hi(key) = ( h(key) + i 2 ) % m;

  1. методом закритого хешування з функцією повторного хешування

hi(key) = ( h(key) + 2 · i 2 ) % m;

  1. методом квадратичного зондування з функцією повторного хешування

hi(key) = ( h(key) + 3 · i 2 ) % m;

  1. методом квадратичної послідовності спроб з функцією повторного хешування

hi(key) = ( h(key) + 4 · i 2 ) % m;

  1. методом рехешування з функцією повторного хешування

hi(key) = ( h(key) + pi · i 2 ) % m ,

де pi – послідовність випадкових цілих чисел: p1 = 2, р2 = 5, p3 = 1, р4 = 3, ... (за потребою, продовжити цей ряд);

  1. методом відкритої адресації з функцією повторного хешування

hi(key) = ( h(key) + 4 · і + i 2 ) % m;

  1. методом закритого хешування з функцією повторного хешування

hi(key) = ( h(key) + 3 · і + 2 · i 2 ) % m;

  1. методом квадратичного зондування з функцією повторного хешування

hi(key) = ( h(key) + 2 · і + 3 · i 2 ) % m;

  1. методом квадратичної послідовності спроб з функцією повторного хешування

hi(key) = ( h(key) + і + 4 · i 2 ) % m;

  1. методом рехешування з функцією повторного хешування

hi(key) = ( h(key) + сi · і + pi · i 2 ) % m ,

де сi , pi – послідовності випадкових цілих чисел: с1 = 4, с2 = 1, с3 = 5, ... ; p1 = 3, р2 = 2, p3 = 4 , ... (за потребою, продовжити ці ряди);

  1. методом відкритої адресації з функцією подвійного хешування

hi(key) = ( h(key) + i · g(key) ) % m ,

де g(key) = 7 – (АSCII-код першого символа ключа – 5) % 7 ;

  1. методом закритого хешування з функцією подвійного хешування

hi(key) = ( h(key) + i · g(key) ) % m ,

де g(key) = 5 – (АSCII-код останього символа ключа + 2) % 5 ;

  1. методом лінійного зондування з функцією подвійного хешування

hi(key) = ( h(key) + 2 · i · g(key) ) % m ,

де g(key) = 1 + (АSCII-код першого символа ключа + 2) % 3 ;

  1. методом рехешування з функцією подвійного хешування

hi(key) = ( h(key) + 3 · i · g(key) ) % m ,

де g(key) = 4 – (АSCII-код останього символа ключа – 9) % 3 ;

  1. методом відкритої адресації з функцією повторного хешування

hi(key) = ( h(key) + i ) % m

та шляхом побудови динамічної хеш-таблиці (при заповненні хеш-таблиці більше ніж наполовину, збільшити її розмір в 2 раза);

  1. методом відкритої адресації з функцією повторного хешування

hi(key) = ( h(key) + i ) % m

та шляхом зміни структури хеш-таблиці (кожну комірку хеш-таблиці замінити блоком з трьох комірок);

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