Взять Hashtables в качестве примера.Как правило, они очень быстрые и вставка, поиск, удаление должны работать в постоянное время, и это здорово.Вот почему каждый использует их.Однако в худшем случае хэш-значение каждого из ваших элементов будет одинаковым, и тогда время выполнения станет намного хуже.Есть способы минимизировать ущерб, такой как хеширование Cuckoo и т. Д., Но в худшем случае хеш-таблица будет иметь худшее время выполнения или худшее потребление памяти, чем другие структуры данных.Обычно вы не выбираете Hashtables из-за их асимптотического времени выполнения в худшем случае, потому что это очень маловероятно.
Редактировать: Извините, я пропустил вопрос об алгоритмах, а не об общей сложности времени выполнения.Но мне просто нужно небольшое изменение: предположим, вы хотите, чтобы алгоритм нашел все дубликаты в массиве.Вы можете просто вставить все элементы в HashSet.Если у вас есть хорошая функция хеширования, обычно у вас будут только коллизии, если ваши элементы одинаковы.Таким образом, у вас будет O (N) время выполнения.Но если вы получаете много ложных срабатываний, когда элементы имеют одинаковое значение хеш-функции, даже если они различаются, ваш алгоритм findDuplicates будет переходить в квадратичное время выполнения.Опять же, такое столкновение очень маловероятно, поэтому вы, вероятно, в любом случае воспользуетесь этим подходом.