Работа вам нужна срочно. Не волнуйтесь, уложимся!
Заполните, пожалуйста, данные для автора:
- 22423 авторов готовы помочь тебе.
- 2402 онлайн
Решить
Хеширование — это метод преобразования данных (в данном случае — последовательности символов ФИО) в фиксированную длину путем применения некоторой математической функции. Результат называется хешем и используется для быстрого поиска данных. В этом конкретном задании вам предложено выполнить несколько вариантов хеширования строки, а также обсчитать и найти элементы внутри таблицы с помощью различных методов.
Здесь требуется:
Для указанных ФИО: «Соколов Алексей Михайлович»* ФИО включает 26 символов, но для этой задачи берем только первые 12 символов: Соколов Алек
Алгоритм:
Например, для "Соколов Алек" сначала переводите символы в числовое значение:
Отсортированные значения: \( 65\ (А), 67\ (С), 101\ (е), 107\ (к, к), 108\ (л, л), 111\ (о, о, о), 118\ (в) \). Итоговая последовательность символов: А, С, e, к, к, л, л, о, о, о, в.
- Необходимо выполнить хеширование методом прямого связного хеширования с хеш-таблицей размера 5. Здесь подразумевается использование метода разрешения коллизий путем прямого связывания (примерно как списки).
Создаем хеш-функцию для данной строки. Допустим, простая хеш-функция:
hash(i) = ord(i) % 5
Применяем её для нашей строки:
0 -> [А]
1 -> [о, е]
2 -> [С, к]
3 -> [л, в]
- Необходимо выполнить хеширование методом открытой адресации с помощью линейной и квадратной проб. Используем ту же строку "Соколов Алек", и хеш-таблицу размера 11. Простая хеш-функция:
hash(i) = ord(i) % 11
Применяем её для каждого символа:
При линейной пробе, если ячейка занята, идем к следующей:
1 -> С
2 -> е
8 -> к (затем происходит коллизия с "в")
9 -> л
10 -> А
Для коллизии на позиции 8: просто идем на следующую свободную позицию: в и л ставим в ячейки 9 и 10.
В квадратной пробе, вместо простого перехода к следующей ячейке, используется формула:
i = (h(x) + j^2) % table_size