Rapide comparaison de chaînes de caractères en C

J'ai actuellement ce genre de boucle

while(1)
{
    generate_string(&buffer);

    for(int i = 0; i < filelines; i++)
    {
        if(strcmp(buffer,line[i]) == 0)
        {
           /*  do something  */
        }
    }
}

J'ai un fichier avec quelques millions de chaînes de caractères(qui, espérons-le, devrait être réduit de moitié prochainement), le nombre de toutes ces chaînes sont stockées dans filelines

ligne[i] est fondamentalement où la chaîne est stockée.

Actuellement, en raison de la comparaison de ces millions de chaînes de caractères, la fonction generate_string(&buffer); est exécuté environ 42 fois par seconde.
Est-il un moyen plus rapide de faire de comparaison de chaînes de caractères en C?

Si vous pouvez trier les lignes, c'est sûr.
Si vous pouvez hachage, hash.
non, parce que la vraie question ici n'est pas "comment faire pour comparer deux chaînes de caractères", c'est "comment tester une chaîne de confinement dans un grand ensemble de cordes".
Seulement si les chaînes tailles sont les mêmes, vous pourriez faire si((buffer[0] == ligne[0]) && (tampon[1] = = [1]) && ...). Qui est plus rapide que d'appeler strcmp().
J'ai juste couru un profil sur wakkerbot: il utilise 200ms à faire 2M recherches dans une 500K dictionnaire de mots connus. Une dernière strcmp() à la mise en correspondance table de hachage entrée.

OriginalL'auteur farmdve | 2012-05-23