Il mio programma C aveva molte chiamate di funzioni strstr. La libreria standard strstr è già veloce ma nel mio caso la stringa di ricerca ha sempre una lunghezza di 5 caratteri. Ho sostituito con una versione speciale per guadagnare un po 'di velocità:Versione ottimizzata di strstr (la ricerca ha lunghezza costante)
int strstr5(const char *cs, const char *ct) { while (cs[4]) { if (cs[0] == ct[0] && cs[1] == ct[1] && cs[2] == ct[2] && cs[3] == ct[3] && cs[4] == ct[4]) return 1; cs++; } return 0; }
La funzione restituisce un intero perché è abbastanza per sapere se ct si verifica in cs. La mia funzione è semplice e più veloce rispetto a strstr standard in questo caso particolare, ma mi interessa sapere se qualcuno ha dei miglioramenti prestazionali che potrebbero essere applicati. Anche piccoli miglioramenti sono ben accetti.
Sommario:
- cs ha lunghezza di> = 10, ma altrimenti può variare. La lunghezza è conosciuta prima (non usata nella mia funzione). Lunghezza del CS è di solito da 100 a 200.
- ct ha lunghezza di 5
- contenuti di stringhe può essere qualsiasi cosa
Edit: Grazie per tutte le risposte e commenti. Devo studiare e testare le idee per vedere cosa funziona meglio. Inizierò con l'idea di MAK sul suffisso trie.
Chiamerai frequentemente la funzione con lo stesso valore di cs? di ct? –
Valore di cs se frequentemente uguale. ct cambia ogni volta. – armakuni
Non è possibile denominare validamente la funzione strstr5(), l'implementazione riserva tutti i nomi di funzione che iniziano con "str" seguito da una lettera minuscola. – unwind