![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
dron4ik |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
Задание. Реализовать метод открытого хеширования. Исходные ключи – любые слова (например – фамилии). Размер хеш-таблицы должен задаваться в программе с помощью константы m. Хеш-функция – такая же, что и в задании 1--->>(((((Для преобразования текстовых ключей в числовые значения использовать суммирование кодов символов текстового ключа: код (End) = код (E) + код (n) + код (d). Преобразование числового кода ключа в значение индекса выполнить с помощью простейшей хеш-функции, которая берет остаток от целочисленного деления кода на размер хеш-таблицы делить надо на константу m))). В случае возникновения конфликта при попытке размещения в таблице нового ключа этот ключ добавляется в конец вспомогательного списка. Это требует включения в каждую ячейку хеш-таблицы двух указателей на начало и конец вспомогательного списка.
Программа должна выполнять следующие действия: • добавление нового ключа в таблицу с подсчетом сделанных при этом сравнений • поиск заданного ключа в таблице с подсчетом сделанных при этом сравнений • вывод текущего состояния таблицы на экран • удаление заданного ключа из таблицы Алгоритм удаления: • вычислить хеш-функцию и организовать поиск удаляемого элемента в таблице • если удаляемый элемент найден в ячейке таблицы, то эта ячейка либо становится пустой (если связанный с ней список пуст), либо в нее записывается значение из первого элемента списка с соответствующим изменением указателей • если удаляемый элемент найден в списке, то производится его удаление с изменением указателей После отладки программы необходимо выполнить ее для разных соотношений числа исходных ключей и размерности таблицы: взять 20 ключей и разместить их поочередно в таблице размерности 9, 17 и 23. Для каждого случая найти суммарное число сравнений, необходимое для размещения ключей и их поиска. Сделать вывод о влиянии размерности таблицы на эффективность поиска. Все работает вроде верно, но когда сдавал преподу он мне сказал ввести ключ var а потом ввести ключ avr//и программа сразу вылетела...препод сказал что у мя чтото с процедурой добавления и проблема с указтелями....ни как не пойму что и как исправить..помогите пожалуйста.( program Work3; |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ты при создании нового элемента списка не устанавливаешь ему указатель на следующий элемент в nil:
function AddToDList(var obj:ListFL; elt:String):Integer;, хотя эту процедуру можно сделать короче, потому что выделение памяти будет происходить независимо от того, равняется obj.First nil-у или нет, вынеси это в начало процедуры... |
dron4ik |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
А как добавить в конец вспомогательного списка элемент который конфликтует с другим? а то он не правильно добавляется.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
![]() 0: Add to hash table Что неправильно? |
dron4ik |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
если два ключа добавляются в одну ячейку то один ключ добавляется в ячейку а другой в конец вспомогательного список. как это сделать?
|
dron4ik |
![]()
Сообщение
#6
|
![]() Бывалый ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 318 Пол: Мужской Репутация: ![]() ![]() ![]() |
неужели ни кто незнает?
|
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 15:09 |