Possibile duplicato:
algoritmo rolling medio in C
Dato che gli interi vengono letti da un flusso di dati. Trova la mediana degli elementi letti finora in modo efficiente.
Soluzione che ho letto: possiamo usare un heap massimo sul lato sinistro per rappresentare elementi che sono inferiori alla mediana effettiva e un heap minimo sul lato destro per rappresentare elementi che sono maggiori della mediana effettiva.
Dopo aver elaborato un elemento in entrata, il numero di elementi negli heap differisce al massimo per 1 elemento. Quando entrambi gli heap contengono lo stesso numero di elementi, troviamo la media dei dati radice dell'heap come mediana efficace. Quando i cumuli non sono bilanciati, selezioniamo la mediana effettiva dalla radice dell'heap contenente più elementi.
Ma come costruiremmo un heap massimo e un heap minimo, ad esempio come potremmo conoscere la mediana effettiva qui? Penso che inseriremmo 1 elemento in max-heap e poi il successivo 1 elemento in min-heap, e così via per tutti gli elementi. Correggimi se sbaglio qui.