Поиск и сдвиг элементов дают O(n) в худшем случае. Для частого удаления по идентификатору можно использовать Map или Set, учитывая нужную семантику подписок.
Как оценить сложность unsubscribe в EventEmitter
Поиск и сдвиг элементов дают O(n) в худшем случае. Для частого удаления по идентификатору можно использовать Map или Set, учитывая нужную семантику подписок.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Подписчики события хранятся в массиве. unsubscribe выполняет findIndex по handler, затем splice. Какова сложность при n подписчиках и какая структура может помочь?
Ответ
Поиск и сдвиг элементов дают O(n) в худшем случае. Для частого удаления по идентификатору можно использовать Map или Set, учитывая нужную семантику подписок.
Не называйте весь unsubscribe O(1) только потому, что найден индекс: splice может сдвинуть хвост массива. Отдельно определите возможность повторной регистрации одного handler и отписки во время emit. Оценка относится к данной реализации; структура с токенами подписок и хеш-таблицей обычно даёт ожидаемое постоянное время удаления.