Informatica · Strutture dati
Divario tra rimozioni a finestra minima e massima
Per calcolare il massimo di ogni finestra scorrevole di ampiezza $k$ su un array, si usa una coda a due estremità (deque) di indici, mantenuta sempre con i valori corrispondenti in ordine decrescente: per ogni nuovo elemento si rimuovono dal fondo della deque tutti gli indici il cui valore è $\le$ del nuovo elemento (perché non potranno mai più essere il massimo di nessuna finestra futura), poi si inserisce il nuovo indice in fondo; infine si rimuove dalla testa l'indice se è uscito dalla finestra corrente. Sia $T(k)$ il numero totale di rimozioni (testa+fondo, sommate su tutta l'esecuzione) ottenuto applicando l'algoritmo con ampiezza di finestra $k$.
Si applica l'algoritmo all'array $[8, 12, 11, 4, 10, 9, 6, 7, 5, 3, 2, 1]$ (lunghezza $n=12$, indicizzato da $0$), calcolando $T(k)$ per ogni ampiezza $k$ compresa tra $2$ (la più stretta possibile) e $11$ (la più larga possibile, $k=n-1$). Qual è la differenza $T(2) - T(11)$?