Du coup pour aller de IRE à HYDROTHERAPIQUE, on galère beaucoup et on parcours à peu près tout le dictionnaire, alors que pour aller de HYDROTHERAPIQUE à IRE, j'imagine que ça doit aller un peu plus vite ?
Pas vraiment, en réalité (46 secondes vs 53 chez moi). Ici, ça vient de la structure du graphe qui relie l'ensemble des mots et de la manière dont sont reliés ces deux là.
Mon exemple n'était pas parfait.
Imaginons qu'on cherche à aller de IRE à ZYGOMATIQUE.
Avec un parcours systématique, en partant de IRE, on va explorer à peu près tout le dictionnaire ( 300 000 sur 350 000 mots) avant de conclure qu'il n'y a pas de solution.
Alors que si on inverse la question, en partant de ZYGOMATIQUE, c'est instantané pour conclure qu'il n'y a pas de solution.
L'idée de base de l'algorithme, c'est donc de bâtir 2 demi-arbres (un en partant de chacun des 2 mots donnés) et de voir quand ces 2 demi-arbres se rejoignent.
L'autre idée, c'est de ne pas explorer des pistes peu prometteuses.
Si on veut relier ZESTE à SAVOIR, ZESTE a de 42 voisins. Par exemple PESTE, PENTE, ZESTES, SEIZE.
Mais très facilement, avec une fonction calcule_distance_théorique(), on voit que SEIZE nous rapproche de SAVOIR, alors que PENTE nous en éloigne. On va donc explorer les voisins de SEIZE, putot que les voisins de PESTE ou PENTE.
Si on recherche tous les voisins de ces 42 mots, le traitement est 42 fois plus long que rechercher les voisins de SEIZE uniquement.
Pour relier ZESTE à SAVOIR, avec un algorithme 'brutal', on appelle plus de 11000 fois la fonction 'Rechercher tous les voisins d'un mot'.
Avec un algorithme optimisé, on appelle cette fonction seulement 8 fois.
Le bénéfice est énorme.
Le parcours obtenu peut donner cela :
*Recherche d'un chemin de ZESTE à SAVOIR :
Chemin à priori le plus efficace = ZESTE-?-SAVOIR
Recensement des voisins directs de ZESTE ; Nbre de voisins trouvés = 42
Recensement des voisins directs de SAVOIR ; Nbre de voisins trouvés = 62
ZESTE a 42 voisins, contre 62 pour SAVOIR ; j'explore donc les voisins de ZESTE
Chemin à priori le plus efficace = ZESTE-SEIZE-?-SAVOIR
Recensement des voisins directs de SEIZE ; Nbre de voisins trouvés = 32
SEIZE a 32 voisins, contre 62 pour SAVOIR ; j'explore donc les voisins de SEIZE
Chemin à priori le plus efficace = ZESTE-SEIZE-RISEE-?-SAVOIR
Recensement des voisins directs de RISEE ; Nbre de voisins trouvés = 65
RISEE a 65 voisins, contre 62 pour SAVOIR ; j'explore donc les voisins de SAVOIR
Chemin à priori le plus efficace = ZESTE-SEIZE-RISEE-?-ROSAI-SAVOIR
Recensement des voisins directs de ROSAI ; Nbre de voisins trouvés = 65
RISEE a 65 voisins, contre 65 pour ROSAI ; j'explore donc les voisins de ROSAI
RISEE et ROSAI ont un voisin commun : SEOIR ! Solution trouvée !
ZESTE
SEIZE
RISEE
SEOIR
ROSAI
SAVOIR *