Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 7 · Exercice de TD

Les bidons d'essence

Algorithmes gloutons · niveau 2

Énoncé

Une voiture disposant d'une autonomie de km se déplace le long d'une route comportant des stations aux positions . Proposer une méthode gloutonne pour minimiser le nombre d'arrêts de ravitaillement et en prouver l'optimalité.

Corrigé

L'algorithme glouton consiste à s'arrêter à la station accessible la plus lointaine à chaque étape.

def arrets(p: list, K: int) -> list:
    stops, position = [], 0
    i = 0
    while p[i] != p[-1]:
        # Rechercher la station la plus lointaine à portée d'autonomie
        while i + 1 < len(p) and p[i + 1] - position <= K:
            i += 1
        stops.append(p[i])
        position = p[i]
    return stops[:-1] if stops and stops[-1] == p[-1] else stops

Preuve (le glouton reste devant) : Notons les positions des arrêts choisis par le glouton, et ceux d'une planification optimale. Montrons par récurrence que .

  • Pour : le glouton choisit la station maximale accessible depuis le départ , donc .
  • Si : la station est à une distance maximale de de , et donc a fortiori à une distance inférieure ou égale à du point . L'autonomie de la voiture permet de franchir l'intervalle depuis . Le choix du glouton étant maximal sur cet intervalle, on a . Par conséquent, le glouton atteint l'arrivée avec un nombre d'arrêts .

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre