Sto lavorando su un sistema con rigidi vincoli in tempo reale in c ++ e ho bisogno di un modo molto veloce per calcolare la media rolling / moving / streaming di un insieme di numeri di dimensioni N = 100 a 300. Normalmente questa dimensione sarebbe banale ma in questo caso l'algoritmo verrà eseguito circa 1000/2000 volte per 0,1 ms
Ogni calcolo verrà aggiunto un singolo valore nell'intervallo (0-1), quindi (a seconda del contenitore) i valori precedenti saranno già (debolmente) ordinati.
Requisiti:
Nessuna allocazione dinamica della memoria poiché la finestra mediana sarà di dimensioni fisse e qualsiasi allocazione potrebbe impiegare troppo tempo
Comportamento FIFO per rimuovere l'ultimo aggiunto e inserire un nuovo valore
Approccio attuale
Attualmente sto considerando un approccio mediano rolling min-max in cui si mantiene un riferimento all'elemento più vecchio e ogni elemento ha un riferimento all'elemento successivo più vecchio. Tuttavia, non sono sicuro di come funzionerebbe, in quanto sarebbe necessario rimuovere quell'elemento da qualsiasi posizione nell'heap e potrebbe anche trovarsi in uno dei due heap.