Как оценить сложность unsubscribe в EventEmitter

Поиск и сдвиг элементов дают O(n) в худшем случае. Для частого удаления по идентификатору можно использовать Map или Set, учитывая нужную семантику подписок.

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

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

Поиск и сдвиг элементов дают O(n) в худшем случае. Для частого удаления по идентификатору можно использовать Map или Set, учитывая нужную семантику подписок.

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

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

Условие

Подписчики события хранятся в массиве. unsubscribe выполняет findIndex по handler, затем splice. Какова сложность при n подписчиках и какая структура может помочь?

Ответ

Поиск и сдвиг элементов дают O(n) в худшем случае. Для частого удаления по идентификатору можно использовать Map или Set, учитывая нужную семантику подписок.

Не называйте весь unsubscribe O(1) только потому, что найден индекс: splice может сдвинуть хвост массива. Отдельно определите возможность повторной регистрации одного handler и отписки во время emit. Оценка относится к данной реализации; структура с токенами подписок и хеш-таблицей обычно даёт ожидаемое постоянное время удаления.

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

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

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

Подробнее