Presupponendo che disponga di milioni di stringhe. Ogni stringa ha un valore int. Voglio recuperare questo valore inserendo una stringa, ma non voglio memorizzare tutte queste stringhe perché occupano molto spazio. Non riesco a utilizzare la tabella hash perché è necessario memorizzare tutte o almeno molte stringhe in memoria. Quindi, qual è la buona struttura dati per il mio caso (non ho bisogno di aggiungere o eliminare stringhe, ho già preparato i dati e ho letto solo operazioni consentite)Modo memoria efficiente per memorizzare le stringhe
risposta
Il tuo motivo per non usare una tabella hash non suono valido in base alle informazioni limitate nella tua domanda attualmente. È abbastanza efficiente se implementato bene. Può anche avere il vantaggio di non sprecare memoria memorizzando stringhe duplicate se questo è accettabile per le tue esigenze, riducendo ulteriormente il consumo di memoria se sono possibili stringhe duplicate.
Si potrebbe anche archiviare un modulo compresso di ogni stringa nella tabella hash se si è creativi su come si eseguono le ricerche. Quanto sono lunghe le stringhe?
La lunghezza media è di 10 lettere. Almeno io non posso memorizzare stringhe con un solo oggetto del mio hashtable. Quindi penso che esista un modo per rafforzare questo approccio. – Neir0
Utilizzare un trie per evitare la memorizzazione di stringhe comuni ..
Trie è una buona idea, ma è molto più lenta di quella hashtable. – Neir0
@larsmans Heh!Ho pensato a qualcosa di simile per massimizzare l'efficienza di un pattern regex molto grande, anche se ora mi chiedo se questo viene fatto automaticamente quando viene analizzata una stringa regex. Bello sapere come si chiama. – Nolo
una tabella hash non è un modo efficiente di memoria per memorizzare stringhe, anche se – argentage
Si consiglia di guardare il Judy tree, che è stato progettato per essere sia veloce e compatto, e dispone di una versione progettata per le chiavi di stringa. La sua implementazione è disponibile su sourceforge.
Se è possibile pre-elaborare l'elenco di parole, osservare gli hash perfetti, ad esempio CMPH. (gperf è un altro, ma sembra ottimizzato per i set di dati più piccoli.)
Dalla documentazione CMPH:
Una funzione hash perfetta associa un insieme statico di n chiavi in una serie di numeri interi m senza collisioni, dove m è maggiore o uguale a n. Se m è uguale a n, la funzione è chiamata minima.
...
La Biblioteca CMPH racchiude le più recenti e più efficienti algoritmi in un facile da usare, la produzione di qualità, API veloce. La libreria è stata progettata per funzionare con voci grandi che non possono essere contenute nella memoria principale. È stato utilizzato con successo per la costruzione di funzioni hash minime per set con più di 100 milioni di chiavi, ...
- 1. modo efficiente per memorizzare le immagini in Android
- 2. Modo memoria efficiente per memorizzare numero intero con segno a 32 bit in Redis
- 3. MySQL miglior modo per memorizzare stringhe lunghe
- 4. bisogno di memoria modo efficiente per archiviare tonnellate di stringhe (era: implementazione HAT-Trie in java)
- 5. Modo efficiente per memorizzare gli articoli riordinabili in un database
- 6. Quale struttura dati C# consente di cercare le stringhe in modo più efficiente per le sottostringhe?
- 7. Il modo più efficiente per memorizzare l'indirizzo IP in MySQL
- 8. JS usa sempre due byte per carattere per memorizzare le stringhe?
- 9. Modo efficiente per creare stringhe da un elenco
- 10. Equivalente per le stringhe di stringhe
- 11. Algoritmo efficiente per trovare tutte le stringhe "uguali ai caratteri"?
- 12. Come memorizzare in modo efficiente le informazioni di un'attività sul calendario di un anno
- 13. Il modo più efficiente per implementare una ricerca fonetica
- 14. Java: memoria efficiente ByteArrayOutputStream
- 15. C#: ricerca in modo efficiente una stringa grande per le occorrenze di altre stringhe
- 16. Modo efficiente per memorizzare una stringa JSON in una colonna Cassandra?
- 17. Trova e sostituisci stringhe nei documenti in modo efficiente
- 18. Il modo più efficiente per creare miniature?
- 19. Qual è un buon modo per dividere le stringhe qui?
- 20. Dovremmo memorizzare le stringhe di formato nelle risorse?
- 21. Modo efficiente per scorrere l'elenco dei file
- 22. Eseguire in modo efficiente più sostituzioni di stringhe in Python
- 23. Il modo più efficace per dividere le stringhe in Python
- 24. Angular2 modo più semplice per memorizzare le risposte HTTP
- 25. Il modo migliore per memorizzare le notifiche degli utenti?
- 26. Crescere un data.frame in modo efficiente dalla memoria
- 27. Creazione efficiente di stringhe Byte
- 28. Qual è il modo più efficiente per memorizzare coppie nome/valore in un database Marklogic
- 29. il modo più efficiente per raggruppare i risultati di ricerca per similarità delle stringhe
- 30. Java: come archiviare in modo efficiente una grande quantità di array di stringhe
Che linguaggio di programmazione? Inoltre, ci sono molte stringhe identiche? –
@ jdv-Jan de Vaan Nessuna stringa è unica. Non penso che la mia domanda sia specifica per la lingua, ma preferisco il C#. – Neir0
Non è chiaro cosa devi fare. Hai solo bisogno di estrarre quei numeri e salvare in un altro file? O hai bisogno di eseguire alcuni calcoli con loro? Va bene se l'ordine di input non viene mantenuto? –