Je me sens un peu d'épaisseur à ce point. J'ai passé des jours à essayer de complètement envelopper ma tête autour de suffixe de la construction de l'arbre, mais parce que je n'ai pas de connaissances en mathématiques, de nombreuses explications échapper à moi comme ils commencent à faire usage excessif de la mathématique, de la symbologie. Le plus proche d'une bonne explication que j'ai trouvé est Rapide de Chaîne de Recherche Avec le Suffixe Arbres, mais il glisse sur divers points et certains aspects de l'algorithme restent floues.
Une étape-par-étape de l'explication de cet algorithme, ici, sur un Débordement de Pile serait inestimable pour beaucoup d'autres d'ailleurs moi, j'en suis sûr.
Pour référence, voici Ukkonen du papier sur l'algorithme: http://www.cs.helsinki.fi/u/ukkonen/SuffixT1withFigs.pdf
Mon idée de base, jusqu'à présent:
- J'ai besoin pour itérer sur chaque préfixe P d'une chaîne de T
- J'ai besoin pour itérer sur chaque suffixe S en préfixe P et l'ajouter à l'arbre
- Pour ajouter le suffixe S de l'arbre, j'ai besoin d'itérer sur chaque personnage en S, avec les itérations consistant, soit en marchant vers le bas une branche qui commence avec le même jeu de caractères C à S et, potentiellement, le fractionnement d'un bord en descendant les nœuds quand j'atteins un caractère différent dans le suffixe, OU si il n'y a pas de correspondance bord de marcher vers le bas. Lorsque l'absence de correspondance bord est trouvé à pied vers le bas pour le C, une nouvelle feuille de bord est créé pour C.
L'algorithme de base semble être en O(n2), comme il est indiqué dans la plupart des explications, que nous avons besoin de tous les préfixes, nous avons besoin à l'étape par le biais de chacun des suffixes pour chaque préfixe. L'algorithme d'Ukkonen, apparemment, est unique en raison de l'suffixe pointeur de la technique qu'il utilise, mais je pense que c' est ce que je vais avoir du mal à comprendre.
Je suis aussi de la difficulté à comprendre:
- exactement quand et comment le "point actif" est attribué, utilisés et modifiés
- ce qui se passe avec la canonisation aspect de l'algorithme
- Pourquoi les implémentations j'ai vu le besoin de "fixer" la délimitation des variables qu'ils sont à l'aide de
EDIT (13 avril 2012)
Ici est le code source que j'ai écrit et de sortie sur la base jogojapan la réponse ci-dessous. Le code affiche une description détaillée et basée sur le texte diagramme des étapes nécessaires, car il s'inspire de l'arbre. C'est une première version et pourrait probablement le faire avec l'optimisation et ainsi de suite, mais cela fonctionne, ce qui est la chose principale.
[Edite URL, voir mise à jour du lien ci-dessous]
EDIT (15 avril 2012)
Le code source a été complètement réécrit à partir de zéro et maintenant, non seulement fonctionne correctement, mais il prend en charge automatique de la canonisation, ce qui le rend plus agréable à la recherche de texte graphique de la sortie. Le code Source et l'échantillon de sortie: