#computer-science #binary-heap
#информатика #двоичная куча
Вопрос:
В частности, без изменения входных данных.
Я до сих пор ничего не смог найти по этому вопросу, интересно, есть ли у него решение лучше, чем очевидное время O (n log n).
Комментарии:
1. Как вы определяете равенство двух куч? Наиболее очевидным определением равенства было бы O (n), поскольку вы просто проверили бы, равны ли два массива. Или вы подразумеваете под равенством, что сортировка обеих куч приведет к равным последовательностям?
2. @MoB. Что повторяющиеся
pop_max
операции будут давать одни и те же значения. Сортировка и сравнение будут работать. Прямое сравнение не работает, потому что кучи представлены массивами3 1 2
и3 2 1
должны сравниваться равными. Тем не менее, существует некоторая общая структура, мне интересно, использовалась ли она.
Ответ №1:
Согласно вашему определению, две кучи равны, если они дают одну и ту же последовательность элементов при многократном извлечении их максимального элемента. Поскольку это равносильно деструктивной сортировке элементов в куче, равенство также эквивалентно утверждению, что две последовательности элементов кучи при сортировке равны. Но это эквивалентно многомножному равенству между двумя кучами.
Проверка равенства множества может быть выполнена в O (n) (амортизированном), например, с помощью хэш-таблицы для сопоставления каждого элемента первой кучи с его частотой, что может быть выполнено неразрушающим образом в O (n), а затем проверка элементов второй кучи по хэш-таблице,что также можно сделать в O (n) .
Поскольку невозможно проверить равенство, не рассматривая каждый элемент хотя бы один раз, O (n) также является самой жесткой границей для проверки равенства двух двоичных куч.
Комментарии:
1. В этом случае предположение о хешируемости было бы неуместным.
2. Это важная информация. Можете ли вы подробнее рассказать о точном характере ваших ограничений?