- •Структуры и алгоритмы обработки данных
- •Часть 1
- •Последовательное представление линейных списков
- •Связанное представление линейных списков
- •Очередь
- •Связанное представление матриц
- •Бинарное дерево поиска. Построение и поиск элемента
- •Бинарное дерево поиска. Удаление элемента
- •Линейные списки с индексами. Построение и поиск элемента. Способы коррекции
- •Инвертированные списки
- •Построение словаря с использованием деревьев
- •Построение словаря с использованием матриц
Построение словаря с использованием матриц
В таблице должно быть столько столбцов сколько букв в исходном алфавите + 1 столбец, номер + 1 столбец, пробел + 1столбец пояснение. Количество строк произвольно. Для ускорения поиска номера столбца по букве используется Хеш-таблица. Известно, что каждая буква кодируется, и ей соответствует какое-то десятичное число. Код «Я» - 64, значит, в Хеш-таблице будет 64 строки.
Адрес буквы:
Удаление слова из словаря:
Находим слово и записываем путь. Если строка не пустая, то это конец. Хорошо было бы строки, освободившиеся от значений удалённых слов использовать для записи новых слов.
Для этого соединили их в целую цепочку свободных строк. При поиске, свободные строки берём из цепочки. Среднее количество сравнений при поиске слова равно средней длине слова, то есть равно L.
Хеш – таблицы. Функции расстановки
Хеш-таблица – это обычный массив с необычной адресацией, задаваемой хеш-функцией, например: адрес = ключ mod 10. На рис.1 представлена хеш-таблица, не содержащая ни одного элемента. На рис.2 представлена хеш-таблица с элементами (адрес = ключ mod 10).
Рис.1 Рис.2
20 |
10 |
30 |
21 |
40 |
-1 |
32 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
35 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
28 |
18 |
-1 |
19 |
-1 |
-1 |
-
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
Расстановка в хеш-таблице ключей. Для включения ключа в хеш-таблицу, сначала вычисляется адрес ключа. Если хотя бы одна ячейка строки свободна, тогда ключ просто помещается в свободную ячейку. Если все ячейки заняты тогда, возникает коллизия. В случае коллизии проверяем все ячейки по строкам. Если какой-нибудь ключ не совпадает с адресом, то вместо него помещается исходный ключ, а для другого ключа ищем свободную ячейку. Если все ячейки заняты по праву, то перемещаемся по порядку по всем ячейкам, пока значение не станет равно -1. Если найдено значение -1, то помещаем ключ в эту ячейку
Хеш – таблицы. Способы разрешения коллизий
Хеш-таблица – это обычный массив с необычной адресацией, задаваемой хеш-функцией, например: адрес = ключ mod 10. На рис.1 представлена хеш-таблица, не содержащая ни одного элемента. На рис.2 представлена хеш-таблица с элементами (адрес = ключ mod 10).
Рис.1 Рис.2
20 |
10 |
30 |
21 |
40 |
-1 |
32 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
35 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
-1 |
28 |
18 |
-1 |
19 |
-1 |
-1 |
-
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
Разрешение коллизий происходит путём:
1. Линейного опробования. Идём до тех пор, пока не найдётся первое свободное место -1 куда и запишем ключ.
Количество сравнений зависит от
2. Случайное опробование – если при вычислении адреса получим коллизию, то берём другую форму для вычисления, если и там получим коллизию, то разрешим её методом линейного опробования.
3. Срастающиеся цепочки: Если получим коллизию, то ищем свободное место, помещаем на него элемент и соединим его цепочкой с предыдущим элементом.