/ / trova l'ultimo elemento ma N in un flusso senza memorizzare n elementi - stream

trova l'ultimo elemento ma N in un flusso senza memorizzare n elementi - stream

Supponiamo che ci sia un flusso di dati in arrivo, D (0),D (1), D (2), .... Quando D (i) arriva, voglio sapere D (i - N). Il modo più diretto è quello di memorizzare gli elementi N più recenti e continuare ad aggiornarli all'arrivo di nuovi dati. Ma il problema è che N può essere grande in modo che non ci sia abbastanza memoria per memorizzarli. Esiste comunque la possibilità di archiviare meno oggetti rispetto a N? Una costante di M << N di spazi è preferibile? Grazie in anticipo.

risposte:

1 per risposta № 1

Non per quanto posso vedere, a meno che non ce ne sia un po 'regolarità nei dati che è possibile sfruttare. Se i dati sono completamente casuali (tale che nessun elemento può essere dedotto dagli altri), allora una scelta di non salvare elemento K renderà impossibile riprodurre quell'elemento in iterazione k + N.

Invece, considera:

  • Puoi ridurre N?
  • È possibile memorizzare informazioni su disco o (se ci si trova in un ambiente embedded) su una memoria più lenta e più economica?
  • C'è qualche schema nei dati? Se c'è e.g. uno schema ripetitivo, è possibile utilizzarlo oppure, se esiste una relazione matematica tra i numeri, forse qualche formula può aiutare a ricostruire un numero da altri. Anche se non esiste uno schema percettibile, forse potresti utilizzare un algoritmo di compressione per ridurre la dimensione dei dati?
  • C'è qualche limitazione ai dati, ad es. ogni numero è compreso tra 0 e 255? In tal caso, potresti forse ridurre i requisiti di archiviazione.

(Qual è l'applicazione di questo, tra l'altro?)