Maison >développement back-end >Tutoriel Python >Comment pouvons-nous optimiser les performances de l'algorithme A* en améliorant la fonction heuristique et la gestion des files d'attente prioritaires ?
Dans ce code, la lenteur des performances résulte du calcul heuristique coûteux au sein de la fonction astar. Pour améliorer les performances, considérez les éléments suivants :
Comme démontré dans l'analyse, les outils de profilage tels que l'échantillonnage de pile peuvent identifier rapidement les goulots d'étranglement des performances. En examinant les traces de la pile, vous pouvez identifier les instructions qui consomment trop de temps.
La fonction heuristique, heuristique, boucle inutilement sur l'ensemble du tableau de formation, ce qui entraîne une surcharge importante. Une approche plus efficace consiste à maintenir une somme courante de fCamel et bCamel tout en parcourant le tableau.
def heuristic(formation): fCamels, bCamels = 0, 0 for i in formation: if i == fCamel: fCamels += 1 elif i == bCamel: bCamels += fCamels * bCamels # Update to fCamel * bCamel differences else: pass return bCamels
Au sein de la fonction astar, l'openlist est une file d'attente prioritaire qui trie les nœuds en fonction de leurs valeurs f. L'appel openlist.put entraîne une surcharge inutile car les valeurs f sont déjà calculées et stockées dans les objets nœuds.
Une approche plus efficace consiste à remplacer l'opérateur __lt__ pour la classe de nœud afin de comparer directement les valeurs f. Cela élimine le besoin du paramètre f dans openlist.put.
def __lt__(self, other): return self.f < other.f
De plus, assurez-vous que la liste ouverte est maintenue dans l'ordre croissant des valeurs f, comme l'exige l'algorithme A*. L'implémentation par défaut dans le module Queue ne garantit pas ce comportement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!