↑↓ naviguer · ↵ ouvrir · échap pour fermer

← Tous les algorithmes/Trouver un chemin

Recherche gloutonne (meilleur d’abord)

Puis-je arriver plus vite en fonçant vers le but ?

Développe toujours la case qui semble la plus proche du but. Rapide en terrain dégagé, mais il peut renvoyer un long chemin.

TempsO(V log V)
MémoireO(V)
Où il est utiliséRecherche de chemin →
L’idée

Le meilleur d’abord glouton est l’algorithme de Dijkstra avec une autre priorité. Au lieu du coût déjà payé, il ordonne la frontière par une heuristique : une estimation de la distance restante. Il plonge vers le but.

En terrain dégagé, il développe très peu de cases. Autour d’un obstacle, il paie son obstination : il continue de pousser contre le mur qui fait face au but, et le chemin renvoyé peut être bien plus long que le plus court, car il ne compte jamais ce qu’il a déjà dépensé.

Essayer

Chargement de la démo…

La grille avec le meilleur d’abord glouton sélectionné. Dessinez un mur juste devant le but et regardez-le s’acharner dessus.

Pas à pas
  1. 01Choisir une heuristique h(case) : la distance en ligne droite, de Manhattan ou octile jusqu’au but.
  2. 02Mettre le départ dans une file de priorité ordonnée par h.
  3. 03Prendre la case de h le plus bas.
  4. 04Si c’est le but, remonter les parents mémorisés jusqu’au départ.
  5. 05Sinon, mettre en file chaque voisine non visitée selon son propre h et recommencer.
En pseudo-code
function greedy_best_first(start, goal, h):
    parent = {start: none}
    heap   = [(h(start), start)]
    while heap is not empty:
        _, cell = heap.pop_min()
        if cell == goal: return path_from(parent, goal)
        for n in neighbours(cell):
            if n not in parent:
                parent[n] = cell
                heap.push((h(n), n))
    return no_path
Son coût
Temps: O(V log V)Mémoire: O(V)

Le pire cas est celui de Dijkstra ; en pratique il développe souvent bien moins de cases.

Points forts
  • Très peu de cases développées en terrain dégagé.
  • Une ligne de différence avec Dijkstra.
Limites
  • Pas optimal : le chemin peut être bien plus long que le plus court.
  • Piégé par une impasse qui fait face au but.
  • Ne vaut que ce que vaut l’heuristique.
Où il est utilisé
  • 01Recherche de cheminComparez le peu de cases qu’il développe à la longueur de son chemin, à côté d’A* et de Dijkstra.
Algorithmes voisins

A*

Trouver un chemin →

Algorithme de Dijkstra

Trouver un chemin →