
ASD_Lecture04
.pdf
Приклад: Бібліографія
•R. Kruse, C. Tondo, B. Leung, “Data Structures and Program Design in C”, 1991, Prentice Hall.
•E. Horowitz, S. Salini, S. Anderson-Freed, “Fundamentals of Data Structures in C”, 1993, Computer Science Press.
•R. Sedgewick, “Algorithms in C”, 1990, Addison-Wesley.
•A. Aho, J. Hopcroft, J. Ullman, “Data Structures and Algorithms”,
1983, Addison-Wesley.
•T.A. Standish, “Data Structures, Algorithms & Software Principles in C”, 1995, Addison-Wesley.
•D. Knuth, “The Art of Computer Programming”, 1975, AddisonWesley.
•Y. Langsam, M. Augenstein, M. Fenenbaum, “Data Structures using C and C++”, 1996, Prentice Hall.
Лекція 4 |
31 |

Хешування
Вставити інформацію у бінарне дерево
пошуку, використовуючи в якості ключа
прізвище автора
Лекція 4 |
32 |

Хешування
Kruse Horowitz Sedgewick |
Aho |
Knuth Langsam Standish |
Kruse
Horowitz Sedgewick
Aho |
Knuth Langsam Standish |
Вставити інформацію у бінарне дерево
пошуку, використовуючи в якості ключа
прізвище автора
Лекція 4 |
33 |

Хешування
хеш-таблиця
|
|
0 |
|
|
|
ключ |
хеш |
1 |
pos 2 |
||
|
функція |
3 |
|
|
|
|
|
: |
|
|
: |
|
|
TABLESIZE - 1 |
Лекція 4 |
34 |

Хешування
хеш-таблиця
|
|
|
0 |
|
|
|
|
||
|
хеш |
|
1 |
|
“Kruse” |
5 |
2 |
||
функція |
||||
|
|
3 |
||
|
|
|
||
|
|
|
4 |
5 Kruse
6
Лекція 4 |
35 |

Хешування
•Кожний елемент має унікальнйи ключ.
•Використовуються масиви великої розмірності, які називаються хеш-таблицями.
•Використовується хеш-функція.
Хеш-функція
•Ставить у відповідність ключам позицію у хеш-таблиці.
•Повинна бути простою для облчислення.
•Використовує всі ключі.
•Рівномірний розподіл ключів.
Лекція 4 |
36 |

Застосування
•Бази даних.
•Перевірка правопису.
•CRC32, який застосовується в апаратурі Ethernet і у форматі упакованих файлів
ZIP.
•Комп’ютерні шахові програми.
•Компілятори.
•Тощо
Лекція 4 |
37 |

Операції з хеш-таблицею
•Ініціалізації
–всі позиції у хеш-таблиці є порожніми.
•Вставляння
•Пошук
•Видалення
Лекція 4 |
38 |

Приклад: Хеш функція #1
unsigned int hash(char* s)
{
int i = 0; unsigned value = 0;
while (s[i] != ‘\0’)
{
value = (s[i] + 31*value) % 101; i++;
}
return value;
}
Лекція 4 |
39 |

Приклад: Хеш функція #1
value = (s[i] + 31*value) % 101;
•A. Aho, J. Hopcroft, J. Ullman, “Data Structures and Algorithms”, 1983, Addison-Wesley.
‘A’ = 65 |
‘h’ = 104 |
‘o’ = 111 |
value = (65 + 31 * 0) % |
101 = |
65 |
||||||||
value |
= |
(104 |
+ |
31 |
* |
65) |
% |
101 |
= |
99 |
value |
= |
(111 |
+ |
31 |
* |
99) |
% |
101 |
= |
49 |
Лекція 4 |
40 |