2010-03-03 6 views

Répondre

1

Le problème que vous résolvez est le problème de "correspondance exacte des chaînes". La solution naïve s'exécute en O (n^2), mais vous pouvez faire beaucoup mieux que cela. Certains algorithmes linéaires pour résoudre ce problème sont Knuth-Morris-Pratt (KMP), Boyer-Moore et Apostolico-Giancarlo. Une autre façon de le résoudre est de construire un automate à états finis qui entre dans un état acceptant lorsqu'il voit la chaîne du motif. La meilleure solution possible est O (n), et tous ceux qui ont le pire temps de fonctionnement. Vous devez scanner la chaîne d'un bout à l'autre; cependant, il est possible de sauter une fraction des caractères (ce que feront Boyer-Moore et Apostolico-Giancarlo), car certaines discordances peuvent impliquer d'autres discordances. Si vous avez besoin de coder vous-même, je vous recommande d'utiliser l'algorithme de Knuth-Morris-Pratt, car il est un peu plus intuitif et plus facile à implémenter que les autres solutions que j'ai mentionnées. La plupart des langages de programmation, cependant, ont une fonction "indexOf" ou "find" qui résoudra cela pour vous.

0

Dans la programmation C vous avez la fonction strstr pour trouver la position de la chaîne de sous dans la source String.

0

Si vous avez une grande chaîne et vous allez chercher de nombreux sous-chaînes,
il est bon d'avoir à l'esprit la structure suffix array.
Fondamentalement, vous créez un tableau de pointeurs et vous le trier.
Ensuite, vous pouvez localiser n'importe quelle sous-chaîne avec une recherche binaire.

Questions connexes