Нет, запись Big-O не обязательно ограничена худшим случаем.Как правило, вы увидите публикацию Big-O для лучших, средних и наихудших случаев.Просто большинство людей склонны фокусироваться на худшем случае.За исключением случая с хеш-таблицей, наихудший случай случается редко, поэтому использование среднего регистра имеет тенденцию быть более полезным.
Да, хорошая хеш-функция снижает вероятность коллизии.Неправильная хеш-функция может вызвать эффект кластеризации (когда хэш-значения разных значений одинаковы или близки к одному и тому же значению).Легко показать, что HashSet
действительно может стать O (n), реализовав функцию GetHashCode
таким образом, что она все время возвращает одно и то же значение.
В двух словах, да HashSet
и Dictionary
могут быть описаны как имеющие O (1) сложность во время выполнения, потому что акцент делается на сценарии среднего случая.
Кстати, Big-O также может использоваться для анализа амортизированной сложности,Амортизируемая сложность заключается в том, как последовательность отдельных (а иногда даже разных) операций ведет себя, когда они сгруппированы, как если бы они были одной большой операцией.Например, говорят, что в дереве преобразования амортизируется сложность O (log (n)) поиска, вставки и удаления, даже несмотря на то, что наихудшим случаем для каждого может быть O (n), а наилучшим - O (1).1011 *