Является ли время поиска сложности хеш-таблицы O (n ^ 2) или O (log n)? - PullRequest
0 голосов
/ 18 июня 2019

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

1 Ответ

1 голос
/ 18 июня 2019

Вы не опубликовали никакого кода, поэтому я собираюсь сделать некоторые предположения.Вы говорите, что у вас есть хеш-таблица с 26 ключами (известными заранее), поэтому я предполагаю, что она реализована оптимально в виде массива из 26 элементов, который получает O(1) доступ по ключу в этот массив.Затем вы говорите, что у вас есть массивы для каждого элемента, содержащие все элементы, начинающиеся с этой буквы.Что касается хеш-функций, то они довольно слабые, но, безусловно, являются допустимыми.

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

Теперь, так как вы говорите «первая буква», я предполагаю, что вы работаете со строками, которыедает возможность для оптимизации.Строки имеют приятное свойство в том, что их можно легко заказать.Таким образом, если вы гарантируете, что ваши корзины всегда сортируются в лексикографическом порядке, вы можете получить O(log n) поиск с помощью двоичного поиска, а не линейного.Обратите внимание, что это изменение переводит вашу функцию вставки с (101) * на O(n), поэтому вам следует подумать, будете ли вы чаще вставлять или выполнять поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...