Я хочу объединить двоичную кучу, реализованную как массив с размером m в другую кучу (одного и того же типа) с n элементами , Используя повторяющиеся вставки, это принимает O (m * log (n)). Представляется общепринятым, что альтернативный метод конкатенации массивов, а затем перестройка кучи, принимая O (m + n), более эффективен.Слияние двух кучек: O (n * log (n)) по сравнению с O (n + m)
Теперь мне кажется, что для некоторых пар (m, n) с m < n метод O (m * log (n)) будет более эффективным. According to Wolfram Alpha это относится к m < (n * log (2))/log (n/2). Правильно ли это толкование? И стоит ли проверить эффективность выполнения/время выполнения?
Хорошо, но разве это не просто сдвиг точки, в которой повторная вставка более эффективна? Или это также делает проверку невозможной/намного более дорогостоящей? – Oberon
Ну, это сдвигает точку. Тем не менее, будет некоторое значение M, для которого менее затратно вставлять каждый элемент по одному. Например, если у вас есть куча размером 100000 и вы хотите объединить ее с кучей размера 2, лучше вставить элементы. Я вижу, что это не очевидно из моего ответа, поэтому я добавлю его. –