Не существует "естественного" способа удалить минимальное значение из максимальной кучи. Вам просто нужно посмотреть на все листовые узлы, чтобы определить, какой из них является минимальным.
Тогда вопрос в том, сколько всего конечных узлов. Интуитивно мы ожидаем, что доля узлов в куче, которые являются листьями, будет довольно близка к общему количеству узлов. Сделайте это до предела - если у вас есть куча в 1 000 000 штук, у вас будет один узел в верхнем слое, а все оставшиеся 999 999 элементов - в следующем слое. Даже в самом маленьком случае, когда куча представляет собой двоичную кучу, можно ожидать, что примерно половина элементов будет на нижнем уровне.
Точнее, давайте подумаем! Сколько листьев будет у семизначной кучи с n узлами? Итак, каждый узел в дереве будет либо
- листом, либо
- будет иметь семь дочерних узлов,
с одним возможным исключением, поскольку самая нижняя строка может быть неполной, может быть один узел с менее чем семью дочерними элементами. Поскольку это всего лишь один раз, мы можем игнорировать этот последний узел, когда имеем дело с миллионами элементов. Быстрое доказательство по индукции можно использовать, чтобы показать, что любое дерево, в котором каждый узел либо не имеет дочерних, либо семь дочерних узлов, будет иметь в семь раз больше листовых узлов, чем внутренних узлов (докажите это!), Так что мы ожидаем, что (7/8 ) тыс. узлов будут листами, всего 875 000 листов для проверки.
В результате лучшим ответом здесь будет примерно 10 6 сравнений.