• Aucun résultat trouvé

Exemple du plus court chemin dans le plan

N/A
N/A
Protected

Academic year: 2022

Partager "Exemple du plus court chemin dans le plan"

Copied!
3
0
0

Texte intégral

(1)

ALGORITHMES GLOUTONS(2) TP

Algorithmes gloutons (2) – TP

14

On rappelle qu’un algorithme glouton est un algorithme qui effectue à chaque instant, le meilleur choix possible sur le moment, sans retour en arrière ni anticipation des étapes suivantes, dans l’objectif d’atteindre au final un résultat optimal.

Exemple du plus court chemin dans le plan

Un livreur doit distribuerncolis ànadresses. Chaque adresseA,B,C,. . . est symbolisée par un point dans le plan et la position de départ est notéeΩ. Pendant sa tournée, le livreur doit passer à chaque adresse une et une seule fois.

Pour aller d’un point à un autre, le livreur parcourt un chemin linéaire.

On suppose que lesnadresses appartiennent à un carré d’arête stockée dans une variablearete. 1. Dénombrer les chemins possibles.

2. Expliquer pourquoi un algorithme qui consisterait à calculer toutes les distances de tous les chemins possibles n’est pas envisageable.

3. Proposer une stratégie plus efficace.

Les coordonnées des différents points du plan sont stockées dans une liste à deux éléments[x, y].

Les différentes coordonnées des adresses sont stockées dans une liste. Par exemple, la liste[[1, 2], [-3, 5]]

correspond aux coordonnées de deux points A(1, 2) et B(−3, 5). Le point de départ Ωn’appartient à la liste des coordonnées car on le prend comme origine du repère. Ses coordonnées sont doncΩ(0, 0).

4. Écrire une fonctiondistance(p1,p2)oùp1etp2sont les coordonnées de deux points et qui renvoie la distance entre ces deux points. On rappelle que la distance d(P1,P2) entreP1(x1,y1) etP2(x2,y2) est donnée par :

d(P1,P2)= q

(x2−x1)2+(y2−y1)2.

La première étape pour mettre en place la stratégie gloutonne est de calculer les distances entre chaque point du plan, point de départ y compris. Toutes les distances calculées seront stockée dans un tableau représenté par une liste de listes comme ci-dessous.

Python

1 # Distances entre A(1,2), B(-3,5) et Omega(0,0).

2 d =

3 [[0, 5.0, 2.23606797749979], # <--- [d(A,A),d(A,B),d(A,Omega)]

4 [5.0, 0, 5.830951894845301], # <--- [d(B,A),d(B,B),d(B,Omega)]

5 [2.23606797749979, 5.830951894845301, 0]] # <--- [d(Omega,A),d(Omega,B),d(Omega,Omega)]

5. Donner l’instruction permettant d’extraire du tableaudla distance deAàB.

G. BOUTARD& S. CALLEA 1 Lycée GAY-LUSSAC

(2)

TP ALGORITHMES GLOUTONS(2)

6. Le programme suivant construit le tableaud. Compléter le.

Python

1 def distances(points,omega):

2 """

3 Entrée : liste des coordonnées des points, liste des coordonnées de Omega

4 Sortie : liste de listes

5 Distances entre tous les points A,B,...,Omega

6 """

7 n = len(points)

8 d = [...*[0] for i in range(...)] # A compléter

9 for i in range(n):

10 for j in range(i):

11 d[i][j] = # A compléter

12 d[j][i] = # A compléter

13 for i in range(n):

14 d[i][n] = # A compléter

15 d[n][i] = # A compléter

16 return d

7. Exprimer en fonction denle nombre de distances calculées par la fonctiondistances.

On commence à mettre en place la stratégie gloutonne. Connaissant la position du livreur à un instant donné, l’adresse suivante sera celle dont la distance avec la position du livreur à l’instant donné est la plus courte.

Il conviendra cependant de pouvoir vérifier qu’une adresse a déjà été visitée ou non. Pour cela, on utilisera une liste nonVisitede longueurntelle que :nonVisite[i] = Truesi l’adresse n’a pas encore été visitée par le livreur et nonVisite[i] = Falsesinon.

8. Compléter la fonctionindiceSuivantpermettant de déterminer l’indice de l’adresse suivante.

Python

1 def indiceSuivant(position, d, nonVisite):

2 """

3 Entrée : indice de la position du livreur, tableau des distances,

4 liste des adresses visitées ou non

5 Sortie : indice de la position de l'adresse suivante

6 """

7 n = len(d) - 1

8 mini = 2 * arete

9 for i in range(n):

10 if nonVisite[i] == True :

11 dist = d[position][i]

12 if dist < mini:

13 mini = dist

14 indice = i

15 return indice,nonVisite

PCSI 2021 – 2022 2 G. BOUTARD& S. CALLEA

(3)

ALGORITHMES GLOUTONS(2) TP

9. Expliquer le fonctionnement de la fonction suivante : Python

1 def plusCourtChemin(points,omega):

2 """

3 Entrée : liste des coordonnées des points, liste des coordonnées de Omega

4 Sortie : liste de listes

5 Plus court chemin

6 """

7 n = len(points)

8 position = n # Point de départ

9 chemin = [position]

10 nonVisite = n * [True] # Aucune adresse visitée

11 d = distances(points,omega)

12 for i in range(n):

13 position,nonVisite = indiceSuivant(position, d, nonVisite)

14 chemin.append(position)

15 nonVisite[position] = False

16 return chemin

10. Compter le nombre de distances calculées par la fonctionplusCourtChemin. Comparer au nombre de chemins possibles (question 1).

G. BOUTARD& S. CALLEA 3 Lycée GAY-LUSSAC

Références

Documents relatifs

Lire les coordonnées des points A, B et C dans le..

Déterminer les coordonnées du milieu du

Théorème corrélatif : Par un point quelconque on mène deux tangentes '&amp; une co- nique; les points de contact de ces tangentes joints à Vun des points asymptotes (n° 63) forment

Terminale STG Chapitre 12 :

Le seuil de rentabilité correspond au niveau d'activité minimum que doit atteindre une entreprise ( par exemple ) pour obtenir un résultat nul, c'est à dire ne réaliser à ce seuil

Terminale STG Exercices sur le chapitre 11 : E4... Terminale STG Exercices sur le chapitre 11

Nous avons choisi, parmi les très nombreux systèmes de coordonnées tangentielles que l'on peut considérer, les deux qui nous ont paru les plus simples, l'un corres- pondant

JNOUS avons vu'(n° H ) que le point à l'infini dans la direction des axes a pour équation C = o*, il est donc corrélatif de la droite de l'infini en coordonnées ordi- naires :