Недавно меня спросили: «Как бы вы реализовали hastable». Я знаю, что алгоритм хэширования имеет решающее значение, так как меньше коллизий лучше, чем производительность WRT, но какой алгоритм/структура данных следует использовать для доставки амортизированного постоянного времени {O (1)} для вставки/удаления/поиска?Внедрение Hashtable
ответ
таблицы хеширования имеет две основных возможностей:
- открытой адресация, который является простого массива [динамического массива actualy если вы можете позволить вашему столу расти на лета]. Как только конфликт встретится - вам нужно использовать вторую хеш-функцию, чтобы найти следующую строку, на которую будет отображаться элемент. Обратите внимание, что это решение имеет некоторые проблемы [которые могут быть решены], когда ваша хеш-таблица также позволяет удалять. [Специальный знак для «удаленных» блюд]
- СЦЕПЛЕНИЯ - в этом решении, каждый вхож в массиве является связанным список - containig всех элементов хешируются этой вхожа. Здесь - все элементы, сопоставленные определенному значению, находятся в списке.
важная часть о хэш-таблиц [в обоих растворах] для того, чтобы позволить armotorized O (1) вставки/дел/смотреть вверх - выделяет большую таблицу и перепевы после достижения заранее определенный load factor.
EDIT: сложность analsis:
Предположим, коэффициент нагрузки p
для некоторого p < 1
.
- вероятность «столкновения» в каждом доступе есть
p
Таким образом, среднее значение массива доступов:Sigma(i * p^(i-1) * (1-p)) for each i in [1,n]
Это дает:Sigma(i * p^(i-1) * (1-p)) = (1-p) * Sigma(i * p^(i-1)) <= (1-p) * 1/(p-1)^2 = 1-p = CONST
. [взгляните на правильность Sigma(i * p^(i-1)) < 1/(p-1)^2 in wolfram alpha]. Таким образом, получается в среднем постоянное количество обращений к массиву. Кроме того: вам может потребоваться перефразировать все элементы после достижения коэффициента загрузки, в результате получитсяO(n)
доступ к массиву. Это приводит кn * O(1)
ops [добавление n элементов] и1 * O(n)
op [rehashing], так что вы получаете:(n * O(1) + 1 * O(n))/n = O(1)
время в арматуре. - Очень похоже на (1), но анализ выполняется при доступе к списку. Для каждой операции требуется ровно один доступ к массиву, а число вариантов доступа к списку - с тем же анализом, что и раньше.
Помог ли downvoter комментировать? – amit
Я не голосовал, но, думаю, вы перепутали свою терминологию. Реализованные хеш-таблицы «Цепочки» состоят из связанных списков элементов в каждом хэш-ведре. Реализованные хеш-таблицы с открытым адресом - это те, которые хранят элементы в одном буфере и могут быть реализованы с помощью стратегии двойного хэширования, которую вы описали. Проверьте страницу, с которой вы связались ... –
@DarrenEngwirda: Спасибо за ваш комментарий. Я не являюсь носителем английского языка, и из-за этого я время от времени смешиваю условия. Я отредактировал ответ. – amit
- 1. Внедрение HashTable в Swift?
- 2. haskell hashtable в hashtable?
- 3. Поиск Сложность Hashtable в Hashtable?
- 4. Каков наилучший способ получить HashTable в PHP?
- 5. Hashtable. История имени. Почему бы не HashTable?
- 6. Добавить Hashtable в конец другого Hashtable
- 7. Hashtable (интермедиат) более специфичны, чем Hashtable (Map)
- 8. Java - как адресовать Hashtable в Hashtable
- 9. Различия между .Net Hashtable, Java Hashtable & HashMap
- 10. Hashtable А равно в hashTable управления B
- 11. Unsort Hashtable
- 12. Hashtable удваивает?
- 13. HashTable overWrite
- 14. hashtable Синхронизация
- 15. Строка Hashtable
- 16. Powershell Hashtable
- 17. Hashtable скремблирование?
- 18. HashTable concurrency
- 19. Альтернативы Hashtable
- 20. Приложение Hashtable
- 21. Преимущества HashTable
- 22. Sync'd Hashtable не поддерживает PowerShell. Попробуйте: [HashTable] :: Synchronized (@ {})
- 23. Является ли Hashtable как ценность другого Hashtable рекомендуемым?
- 24. Удалить содержимое Hashtable или просто создать экземпляр нового Hashtable?
- 25. Hashtable <String, Integer []> myhash = new Hashtable();
- 26. Hashtable valgrind memory leak
- 27. Hashtable выходные заголовки столбцов
- 28. Hashtable - это быстро
- 29. Weird HashTable ArrayIndexOutOfBounds Exception
- 30. Разбор JSON в Hashtable
Может ли сила массивов быть с вами? –
Вы посмотрели в книге «Введение в алгоритмы» Кормена и др.? – Raphael
Это именно та книга, в которой я нахожусь. –