Я думаю, что первое, что нужно рассмотреть, это что такое поддерживаемая операция?
Соответствует ли «вставка значения с определенным фиксированным ключом» (например, для ключей, взятых из целочисленной области, вставка с ключом = 3) поддерживаемой операцией для минимальной кучи?
Нет, потому что эту операцию можно легко реализовать с помощью более общих поддерживаемых операций. Аналогично, вставка 2 элементов одновременно может быть выполнена с помощью существующей insert
операции.
С другой стороны, insert
операция не может быть определена иначе, как путем раскрытия деталей реализации. Это почти то же самое для операций, перечисленных на странице википедии, за heapify
исключением, что может быть реализовано с помощью последовательности insert
.
Другими словами, для типа предусмотрены элементарные операции, которые тесно связаны с деталями реализации, чтобы они хорошо выполнялись, и есть другие операции, которые не соответствуют этому правилу и, следовательно, могут быть реализованы как комбинации из канонических.
Имея это в виду, думаете ли вы, что ключ увеличения может быть реализован исключительно с другими поддерживаемыми операциями, без потери производительности? Если это так, то это не поддерживаемая операция по вышеприведенному определению, в противном случае вы вполне можете быть правы.
Возможно, определение поддерживаемой операции, которую я предоставляю, является моим, насколько я знаю. Это не формально и, следовательно, подлежит обсуждению (хотя мне это кажется довольно понятным). Тем не менее, я был бы рад, если бы кто-то мог предоставить источник, который четко и однозначно определит, что является поддерживаемой операцией для типов данных, или, по крайней мере, определит ее лучше, чем моя (это определение дано в CLR? У меня нет копии) ).
Мое второе замечание будет касаться того, как мы определяем приоритетную очередь (смысл существования двоичных куч). Является ли increase_key
необходимая операция для этого типа данных, то есть для его правильного использования?
Как вы видите, мой угол - все о определениях. На самом деле я не даю ответ на ваши вопросы, просто некоторые указатели, поэтому улучшения приветствуются.