В настоящее время я прохожу университетский курс по структурам данных, и эта тема уже давно беспокоит меня (это не домашнее задание, а чисто теоретический вопрос).
Предположим, вы хотите реализовать словарь. В словаре, конечно, должна быть функция поиска, принимающая ключ и возвращающая значение .
Прямо сейчас я могу представить только 2 очень общих способа реализации такой вещи:
- Использование некоторого дерева поиска, которое (всегда?) Дало бы O (log n) наихудшее время выполнения для нахождения значения по ключу или
- Хеширование ключа, который, по сути, возвращает натуральное число, соответствующее индексу в массиве значений, давая O (1) время выполнения в худшем случае.
Возможно ли O (1) наихудший случай время работы функции поиска без использования массивов?
Доступен ли произвольный доступ только при использовании массивов?
Возможно ли это благодаря использованию структуры данных на основе указателей (таких как связанные списки, деревья поиска и т. Д.)?
Возможно ли сделать какие-то конкретные предположения, например, ключи находятся в некотором порядке?
Другими словами, можете ли вы представить реализацию (если возможно) для функции поиска и словаря , которая получит любой ключ в словаре и вернет его значение в O ( 1) время без использования массивов для произвольного доступа?