Contextealgorithme pour le modèle correspondant
Je suis la conception d'une application qui convertit le texte d'une langue à l'autre. Par exemple, le texte de saisie hello
sera converti en texte de langue spécifié. Ceci est fait en ayant une table de recherche pour chaque langue. L'algorithme de conversion comporte les étapes suivantes.
- Recherche la correspondance exacte. Le mot entier
hello
sera le modèle. Si des correspondances trouvées, arrêtez le traitement et renvoyez la correspondance. - Sinon, démarrez de gauche à droite et recherchez chaque caractère jusqu'à ce que toutes les combinaisons soient terminées. Ex: Itération1: modèle =
h
, 2ème -he
, 3ème -hel
et ainsi de suite. Le jeton correspondant sera conservé dans un tampon temporaire et retourné lorsqu'il n'y aura plus de correspondance. Cela fonctionne comme la règle maximale de munch. - Si la correspondance est trouvée, le texte correspondant sera supprimé du texte d'origine et poursuivra le traitement avec le texte restant.
Cet algorithme devra parcourir plusieurs fois le texte d'entrée et conduire à une complexité quadratique. J'essaye d'optimiser ceci en arrangeant la table de recherche dans une structure en arbre (très semblable à l'arbre de suffixe). S'il y a du texte recherche pour h
, hel
, lo
, il sera organisé comme
root
--h
----hel
--lo
Cela me permettra d'éviter les recherches inutiles. Après la correspondance h
, je dois aller au caractère suivant seulement si le noeud h
a des enfants. Cela réduit considérablement le nombre d'itérations.
Questions
- Quel est le nom de ce type de structure de données? Existe-t-il une implémentation prête à l'emploi pour C ou C++?
- Voyez-vous des améliorations possibles sur l'algorithme ou la structure de données ci-dessus?
Des pensées ...?
Me rappelle des essais http://en.wikipedia.org/wiki/Trie – Manuel