Я изучал хэш-таблицы и пришла мысль:Использование словаря вместо сортировки, а затем поиск
Почему бы не использовать словари для поиска элемента вместо первого сортировки списка затем выполнить бинарный поиск? (Предположим, что я хочу, чтобы искать несколько раз)
- Мы можем преобразовать список в словарь в
O(n)
(я думаю) время, потому что мы должны пройти через все элементы. - Мы добавляем все эти элементы в словарь, и это занимает
O(1)
время - Когда словарь будет готов, мы можем искать для любого элемента в
O(1)
времени (в среднем) иO(n)
наихудший
сейчас если говорить о среднем случае O(n)
лучше, чем другие алгоритмы сортировки, потому что в лучшем случае они принимают O(nlogn)
. И если я прав обо всем, что я сказал, то почему бы так не сделать?
Я знаю, что есть разные вещи, которые вы можете сделать с отсортированными элементами, которые нельзя сделать в несортированном словаре или массиве. Но если мы придерживаемся только поиска, то это не лучший способ выполнить поиск, чем другая сортировка алгоритмы?
Или мы просто перебираем несортированный список в O (n) для поиска элемента? – timgeb
@timgeb тогда, если вам нужно выполнить поиск n раз, тогда у вас есть сложность 'n * O (n)', и если вы сначала отсортируете, а затем выполните поиск n раз, это будет 'n * O (logn)'. И, согласно john теории вы можете выполнять поиск столько раз, сколько хотите в 'O (1)' время, которое намного лучше, чем то, что вы говорите –
@jamessmith да, но вы не упоминали, что хотите много раз искать. В этом случае преобразуйте список в набор (зачем вам нужен dict?) в O (n), то выполните любую последующую проверку герметичности в O (1). Сохранение отсортированного списка, которое вы можете делить пополам, полезно только тогда, когда вам нужен порядок и/или дублирующие элементы. – timgeb