set и unordered_set

254
25 октября 2017, 05:56

Все мы знаем, что std::set - это красно-чёрное дерево (соответственно со сложностью поиска O(log n)), а std::unordered_set - хэш-таблица с поиском за константу.
Какие вообще преимущества есть у set'а, не считая поддержание порядка элементов? Если мне не важен порядок, то всегда ли лучше выбрать хэш-таблицу?

Answer 1

Иногда,хранение именно в виде упорядоченного массива очень важно с точки зрения алгоритма. Например, найдите значение (int), ближайшее к заданному, если значения хранятся в unodered_set.

Иногда, написание адекватной задаче хеш функции - невозможно, например, при хранении double.

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

Также следует помнить, что стоимость одного вычисления хеша для строки O(k) (где k -длинна строки) - в среднем, а стоимость оператора сравнения O(k) - в худшем случае и O(log(n)) - в среднем, если строи случайные начиная с первых символов. При этом, в случае set будет произведено только одно "неудачное" сравнение, когда мы найдем искомый результат, но это дорогое сравнение на придется произвести и в случае unordered_set. Если ожидаемый набор строк для поиска, только с очень маленькой вероятностью содержит строки из set, то O(k) окажется дороже O(log(n)).

READ ALSO
Увеличение времени исполнения кода

Увеличение времени исполнения кода

Столкнулся со следующей проблемой: Есть код, написанный не одним человеком, который работает с использованием MPIВ части последовательного...

202
Высвобождение памяти

Высвобождение памяти

Не могу найти где забываю высвободить памятьПодскажите,пожалуйста

254
Выполнение 2х функций в одном файле javascript

Выполнение 2х функций в одном файле javascript

Изобретаю велосипед, и столкнулась с проблемойЕсть код, в котором должны обрабатываться 2 клика

207
Мобильное меню не закрывается

Мобильное меню не закрывается

Есть элемент i при клике на который открывается меню и значек меняется на крестик путем замены класса, так же у элемента меняется id что бы я мог...

278