Почему поиск элемента по значению в std::set имеет сложность O(log n)?

set::find имеет логарифмическую сложность благодаря упорядоченной структуре поиска; обычно это сбалансированное дерево. Его высота растёт как log n, поэтому проверяется лишь один путь.

Короткий ответ

Что ответить на собеседовании

set::find имеет логарифмическую сложность благодаря упорядоченной структуре поиска; обычно это сбалансированное дерево. Его высота растёт как log n, поэтому проверяется лишь один путь.

Подробный разбор

Ответ с пояснениями

set::find имеет логарифмическую сложность благодаря упорядоченной структуре поиска; обычно это сбалансированное дерево. Его высота растёт как log n, поэтому проверяется лишь один путь.

На каждом шаге сравнение направляет поиск в подходящее поддерево. Стандарт задаёт требование к сложности, но не обязывает использовать именно красно-чёрное дерево.

Важно вызывать s.find(key): универсальный std::find(s.begin(), s.end(), key) последовательно обходит элементы и имеет линейную сложность. Если сравнение ключей само по себе дорогое, это также влияет на фактическое время.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее