Я думаю, що перше, що слід врахувати, - що це підтримувана операція?
Чи відповідає "вставлення значення певним, фіксованим ключем" (наприклад, для ключів, узятих із цілої області, вставки з ключем = 3), що підтримується операцією для мінімальної купи?
Ні, тому що цю операцію можна тривіально реалізувати за допомогою більш загальних підтримуваних операцій. Аналогічно, введення одразу двох елементів може бути здійснено за допомогою існуючої insert
операції.
З іншого боку, insert
операцію неможливо визначити інакше, ніж викрити деталі реалізації. Це майже те саме для операцій, перелічених на сторінці вікіпедії, за heapify
винятком, які, можливо, можуть бути реалізовані послідовністю insert
.
Іншими словами, є елементарні операції, надані на тип, які тісно пов'язані з деталями реалізації, щоб вони добре працювали, і є інші операції, які не дотримуються цього правила, і, таким чином, можуть бути реалізовані як комбінації канонічних.
Зважаючи на це визначення, чи вважаєте ви, що ключ-ключ може бути реалізований виключно з іншими підтримуваними операціями, без втрати продуктивності? Якщо так, то це не підтримується операція згідно з наведеним вище визначенням, інакше ви цілком можете мати рацію.
Напевно, визначення підтримуваної операції, яку я надаю, є моїм, наскільки я знаю. Це не формально, і, таким чином, підлягає обговоренню (хоча мені це здається досить зрозумілим). Однак я би радий, якби хтось міг надати джерело, яке чітко і однозначно визначає, що підтримується операція для типів даних, або принаймні визначає її в кращих термінах, ніж моє (це визначення, наведене в CLR? У мене немає копії ).
Мій другий пункт стосуватиметься того, як ми визначаємо пріоритетну чергу (яка є причиною розвитку бінарних груп). Чи increase_key
необхідна операція для цього типу даних, тобто для правильного його використання?
Як ви бачите, мій кут стосується визначень. Я дійсно не даю відповіді на ваші запитання, лише деякі вказівки, тому покращення вітаються.