Какова временная сложность применения функции next()
и prev()
для объекта типа multiset<int>::iterator
, где соответствующий мультимножество содержит элементы N
?
Я понимаю, что в STL мультимножество реализовано как сбалансированное двоичное дерево поиска, и поэтому я ожидаю, что временная сложность будет равна O (log N) за операцию (в худшем случае), если мы просто пересечем дерево до тех пор, пока мы найдите соответствующее значение, но у меня есть догадка, что это должно быть O (1) в среднем.
Но что, если дерево реализовано следующим образом: при вставке элемента x
в сбалансированное двоичное дерево поиска мы также можем получить наибольшее число в дереве, меньшем, чем x, и наименьшее число в дереве больше x
в O (log N). Таким образом, теоретически мы можем иметь каждый node в дереве поддерживать указатель на его элементы next
и prev
, чтобы next()
и prev()
выполнялись в постоянное время для каждого запроса.
Кто-нибудь может рассказать о том, что?