Ho la seguente situazione: Ho una grande collezione di stringhe (diciamo 250.000+) di lunghezza media di forse 30. Quello che devo fare è fare molte ricerche all'interno di questi .. per lo più quelli saranno di StartsWith e Contains tipo.che cosa è la struttura/algoritmo di raccolta stringhe più veloce per startwith e/o contiene ricerche
La raccolta è statica in fase di esecuzione. Il che significa che la lettura iniziale e il riempimento della raccolta di scelta avvengono solo una volta. Pertanto, le prestazioni di costruzione della struttura dati non sono assolutamente importanti. Anche la memoria non è un problema: il che significa anche che non mi dispiace avere due raccolte con gli stessi dati in ciascuna se necessario (come una per startswith e un'altra per contiene). L'unica cosa che conta è l'esecuzione delle ricerche che dovrebbero restituire tutti gli elementi che corrispondono alla condizione di ricerca.
Per startwith mi sono imbattuto in un albero Trie o Radix .. ma forse ci sono anche scelte migliori?
Per contiene .. Non ho ancora una buona idea (oltre all'esecuzione di una query linq su una lista che non sarà molto veloce con quella quantità di dati).
Grazie in anticipo a tutti!
aggiornamento: ho dimenticato una parte importante: con Contiene voglio dire corrispondenze esatte della collezione .. ma voglio trovare tutte le stringhe della collezione che contengono la data searchstring
La sottostringa per la ricerca Contiene riguarda parole o singoli caratteri? Mi chiedo se costruire un indice abbia senso per quello. –
Dovrebbe supportare i caratteri. Sebbene per motivi di prestazioni, potrei immaginare di dare una lunghezza minima di 3 o più caratteri prima della ricerca. (può pensarlo come un completamento automatico in una casella di testo che entra in azione solo dopo che alcuni caratteri sono già inseriti) – Mikk
Cerca nel web "Rabin Karp". Questo dovrebbe iniziare come ha diversi algoritmi di ricerca collegati ... http: //www.stoimen.com/blog/2012/04/02/algoritmi informatici-rabin-karp-string-searching/Pensa anche all'utilizzo di un filtro bloom e al suo precaricamento con le stringhe all'avvio. – JimR