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