Акциз 3-7 в книге «Руководство по разработке алгоритмов». говорит:
Предположим, у вас есть доступ к сбалансированной структуре данных словаря, которая поддерживает каждую из операций поиска, вставки, удаления, минимума, максимума, преемника и предшественника за время O(log n).Объясните, как изменить операции вставки и удаления, чтобы они по-прежнему занимали O(log n), но теперь минимум и максимум занимали время O(1). (Подсказка: подумайте об использовании абстрактных операций со словарем вместо того, чтобы возиться с указателями и тому подобным .)
Без подсказок я думаю, что этот вопрос довольно прост.
Вот мое решение:
для дерева я просто поддерживаю указатель min всегда указывающий на минимум, а другой указатель max всегда указывающий на максимум.
При вставке x я просто сравниваю min.key с x.key, если min.key > x.key, то min = x;
и также делаю это для max, если необходимо.
При удалении x, если min==x, то min = преемник(x); если max==x, то max = предшественница(x);
Но подсказка говорит, что я не могу возиться с указателями и тому подобным. Разве мое решение не связано с указателями?
Если мы не можем использовать дополнительные баллы, как я могу получить O(1) для минимума и максимума?
Спасибо