Eventuali duplicati:
Find the min number in all contiguous subarrays of size l of a array of size nCalcolo di un movimento massimo
Ho una (grande) array di dati numerici (dimensione N
) e vorrebbe calcolare una matrice di esecuzione massimi con una dimensione fissa della finestra w
.
Più direttamente, posso definire un nuovo array out[k-w+1] = max{data[k-w+1,...,k]}
per k >= w-1
(ciò presuppone gli array basati su 0, come in C++).
C'è un modo migliore per farlo rispetto a N log(w)
?
[Spero ci dovrebbe essere uno lineare in N
senza dipendenza da w
, come per lo spostamento medio, ma non riesce a trovarlo. Per N log(w)
Penso che ci sia un modo per gestire con una struttura dati ordinata che farà insert()
, delete()
e extract_max()
complessivamente in log(w)
o meno su una struttura di dimensione w
- come un albero binario ordinato, ad esempio].
Grazie mille.
Così bene che ho dovuto votare sia questa risposta sia la risposta a cui hai fatto riferimento! – Andy
Devo commentare qui che l'implementazione della coda a due stack non è necessariamente la migliore. L'ho provato, per un'applicazione REAL-TIME, e il risultato è stato catastrofico ... A seconda dell'applicazione, si potrebbe anche provare la struttura deque (coda doppia), che darà anche il risultato O (N) nel complesso , ma non necessariamente ammortizzato O (1) per l'operazione di cancellazione. Ho fatto un deque circolare implementato su un array e ha funzionato bene. Dai un'occhiata anche a questa domanda: https://stackoverflow.com/questions/12329073/find-the-min-number-in-all-contiguous-subarrays-of-size-l-of-a-ray-of-size -n. – Alan