Я всегда пользовался словарями. Я пишу на Питоне.
В чем истинная разница между словарем и хеш-таблицей?
Ответы (6)
Словарь — это общая концепция, которая сопоставляет ключи со значениями. Есть много способов реализовать такое отображение.
Хэш-таблица — это особый способ реализации словаря.
Помимо хеш-таблиц, другим распространенным способом реализации словарей являются красно-черные деревья.
У каждого метода есть свои плюсы и минусы. Красно-черное дерево всегда может выполнять поиск за O(log N). Хеш-таблица может выполнять поиск за время O(1), хотя это может ухудшиться до O(N) в зависимости от ввода.
Словарь — это структура данных, которая отображает ключи в значения.
Хеш-таблица — это структура данных, которая сопоставляет ключи со значениями, беря хэш-значение ключа (путем применения к нему некоторой хэш-функции) и сопоставляя его с сегментом, в котором хранится одно или несколько значений.
ИМО, это аналогично вопросу о разнице между списком и связанным списком.
Для ясности может быть важно отметить, что в настоящее время Python МОЖЕТ реализовать свои словари с использованием хеш-таблиц, и в будущем МОЖЕТ случиться так, что Python изменит этот факт, не заставив их словари перестать быть словарями.
Hashtable
хранит ключи - тогда это не хеш-таблица?
- person danben; 14.01.2010
«Словарь» имеет несколько разных значений в программировании, как вам подскажет википедия: - «ассоциативный массив», смысл, в котором Python использует этот термин (также известный как «отображение»), является одним из этих значений (но также важны «словарь данных» и «атаки по словарю» при попытках подбора пароля) .
Хеш-таблицы являются важными структурами данных; Python использует их для реализации двух важных встроенных типов данных, dict
и set
.
Таким образом, даже в Python вы не можете считать «хеш-таблицу» синонимом «словаря»… поскольку подобная структура данных также используется для реализации «наборов»!-)
Словарь Python внутренне реализован с помощью хеш-таблицы.
Хеш-таблица всегда использует некоторую функцию, работающую со значением, чтобы определить, где значение будет храниться. Словарь (как я полагаю, вы его имеете в виду) является более общим термином и просто указывает на механизм поиска, который может быть хэш-таблицей или может быть реализован более простой структурой, которая не учитывает само значение при определении его места хранения.
Словарь реализован с использованием хеш-таблиц. На мой взгляд, разницу между двумя можно рассматривать как разницу между стеками и массивами, где мы будем использовать массивы для реализации стеков.