Se ho un heap massimo, e se ho bisogno di cambiare l'elemento max, si tratta di un singolo algoritmo bubble-down. C'è un modo per farlo attraverso la libreria standard C++, senza codificare manualmente l'algoritmo?Come modificare l'elemento max in un heap nella libreria standard C++?
Capisco che dovrebbe essere equivalente a pop_heap + push_heap, ma si tratta di 2 operazioni di svuotamento anziché di una sola.
Quindi - questo algoritmo di bubble-down è esposto tramite l'API della libreria?
Penso che 'std :: make_heap' sarebbe un po 'più lento di pop e spingere per un grande heap. Per un piccolo heap, potrebbe essere più veloce. – rici
@rici: Non so come sia implementato 'make_heap', ma è _possible_ che potrebbe essere super veloce per cose che sono già un heap ad eccezione di un elemento. È possibile che sia persino ottimale per quella situazione. Dipende però dall'implementazione. E sto solo speculando, potrebbe essere che l'implementazione di make_heap sia più o meno richiesta per essere la stessa runtime indipendentemente dal layout iniziale. –
Comunque sia implementato, ha bisogno di controllare ogni elemento per sapere che quello che gli dai è già un heap ad eccezione di un elemento. Quindi questo è O (N). Pop e push sono O (log N) con un moltiplicatore costante leggermente più grande (probabilmente non più di due o tre, però), quindi per un heap di grandi dimensioni 'make_heap' non verrà ridimensionato. – rici