Я пришел с этим вопросом интервью по программированию, и я не уверен, что мой ответ правильный. Я не смог найти правильный ответ на этот вопрос. Вот вопрос,
Пусть H1 и H2 — две (бинарные) max-кучи с n1 и n2 элементами соответственно. Если каждый элемент в H1 больше, чем каждый элемент в H2, разработайте алгоритм, который объединяет эти две кучи в одну (двоичную) максимальную кучу за время O(n2) (предположим, что и H1, и H2 достаточно велики, чтобы вместить n1 + n2). элементы)
Итак, я подумал, что, поскольку каждый элемент в H1 больше, чем каждый элемент в H2, мы можем хранить объединенную максимальную кучу в H1. Итак, все, что нам нужно сделать, это просто получить первый элемент из H2 в позиции 0 в массиве для H2, а затем вставить этот элемент в H1, добавить в конец массива H1, сделав его листом в H1. Мы можем непрерывно делать это для каждого элемента в H2. Я предполагаю, что как только мы начнем добавлять элементы из H2 в качестве дочерних элементов к элементам H2, нам придется начать проверять, меньше ли этот дочерний элемент, чем родитель, и если нет, мы меняем их местами. Я предполагаю, что, поскольку добавление элемента без вызова heapify и замена при необходимости даст нам сложность O (n2).
Итак, верно ли мое решение? Если нет, любая помощь будет высоко оценена. Пожалуйста, сообщите мне, если какая-либо часть моего решения неясна, чтобы я мог уточнить.