Implémentation d'un algorithme A Star (A *) en Java
Avertissement: j'ai peu de fond en Java, depuis que je suis principalement un développeur C#.
Voudrais avoir l'implémentation java de l'algorithme A*.
Oui, j'ai vu de nombreuses versions de la même ligne et je suis incapable de choisir entre eux.
Je suis à la recherche d'un algorithme A* mise en œuvre qui utilise toutes les nouvelles fonctionnalités de java qui rend l'algorithme plus rapide(même si un peu). La raison en est que nous avons mise en œuvre pour la recherche de chemin sur un MMO
et donc, la performance est la priorité absolue.
Tous les pointeurs ( sur au moins où chercher ) ?
source d'informationauteur naveen
Vous devez vous connecter pour publier un commentaire.
Essayer plusieurs, de mesurer, de choisir la manière la plus rapide, s'adapter à vos besoins. La Performance est principalement déterminé par le choix de l'heuristique de la fonction, qui est indépendante d'Une* * * * l'.
Si l'heuristique est fixe, la mise en œuvre de la file d'attente de priorité est susceptible de devenir le goulot d'étranglement, alors essayez de le couplage des tas. Ces sont parmi les plus rapides tas de structures de données dans la pratique, et ils ont l'avantage par rapport binaire tas qu'ils permettent de O(1) heure d'insertion de + amorti O(log n) pop-min. Ceci est important dans le cas attendus de nombreux* les boucles, où la file d'attente est remplie, mais jamais entièrement vidé, c'est à dire, le nombre d'insertions est beaucoup plus grande que le nombre de pop.
Si la mémoire devient un problème, basculez vers itératif-approfondissement* (IDA*) ou récursive best-first search (RBFS).
Si rien ne fonctionne, pensez à utiliser une approximation de l'algorithme greedy search). Tout simplement de l'optimisation d'un décemment écrit Un* boucle ne va pas vous donner énormément de vitesse-ups.
Voir Russell et Norvig pour les algorithmes et une bonne discussion des questions.
Si la performance est votre priorité, A* est probablement pas votre meilleur choix. * Fournit une solution exacte, et que la suite va continuer de traiter l'écart jusqu'à ce qu'il trouve la bonne réponse. Il y a d'autres solutions légères qui donnent d'assez bonnes solutions beaucoup plus rapide: l'e.g forcée, l'escalade ou le mieux-tout d'abord, même un simple parcours en profondeur d'abord.