• Aucun résultat trouvé

Algorithmique et complexité de calcul

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique et complexité de calcul"

Copied!
123
0
0

Texte intégral

(1)

Algorithmique et complexité de calcul

Avril 2008

Pr. Mohsine Eleuldj

Département Génie Informatique Ecole Mohammadia d’Ingénieurs Université Mohammed V – Agdal

eleuldj@emi.ac.ma

(2)

Complexité de calcul

Classification :

• Linéaire

• Quadratique

• Polynomial

• NP

• NP -complet

Problème

Algorithme 1 Algorithme 2 Algorithme 3 Indécidable

(problème de l’arrêt)

(3)

Algorithmique et complexité de calcul

Objectifs

• Étude des techniques de conception et d'analyse des algorithmes.

• comparaison et classification des algorithmes.

• Ce n’est pas un catalogue d'algorithmes pour la résolution de problèmes spécifiques.

Plan

I Préliminaires

II Analyse de l'efficacité des algorithmes III Diviser pour régner

IV Algorithmes voraces

V Programmation dynamique

VI Transformation du domaine

VII Algorithmes probabilistes

VIII Préconditionnement

(4)

Chapitre I : Préliminaires

Contenu

1 Notion d’algorithme

2 Efficacité des algorithmes 3 Nature de l’analyse

4 Pourquoi des algorithmes efficaces

5 Calcul des nombres de Fibonacci

(5)

1 Notion d’algorithme

Origine : le mot "algorithme" est associé au célèbre auteur Perce Abou Jaafar Mohammed Ibn Moussa Al Khawarizmi connu pour son livre

"Al Jabr oua El Mokabala" écrit à l'an 825.

Définition : un algorithme est une méthode systématique pour résoudre un problème donné. L'exécution ne doit pas laisser la place à

l'interprétation, l’intuition ni la créativité.

Definition : l’Algorithmique est l’étude des techniques de conception et d’analyse des algorithmes

Exemples :

• Multiplication des nombres entiers

• Division

• Calcul du PGCD

• Certaines recettes de cuisines

(6)

Exemple : multiplication des nombres

Analyse des ressources

Méthode classique : tables de multiplications + addition

Méthode russe : multiplication par 2 et division par 2 (décalages à droite et à gauche dans une représentation en base 2) + addition

53 x 17 371 53 901

53 17

26 34

13 72

6 136

3 272

1 544

901

(7)

Représentation des algorithmes

Langue naturelle Pseudo-code Langage de

programmation

Langue naturelle : ambiguïté

Langage de programmation : complexité de lecture (détails de programmation

Pseudo-code : description des algorithmes

(8)

Algorithme de multiplication russe

fonction russe (A,B) tableau X,Y

X[1] A, Y[1] B, i 1 { initialisation }

tant que X[i] > 1 faire { former les 2 colonnes } X[i + 1] X[i] div 2

Y[i + 1] Y[i] * 2 i i + 1

P 0 { addition des entrées appropriées }

tant que i > 0 faire

si (X[i] mod 2 = 1) alors P P + Y[i]

i i - 1 retourner P

Exercice : Faire la trace pour l'exemplaire (17,53). Modifier cet algorithme pour

(9)

Autre algorithme de multiplication russe

fonction autre_russe (A,B) entier x,y

x A, y B, P 0 {initialisation}

tant que x 1 faire

si (x mod 2 = 1) alors P P + y {ajouter la valeur appropriée}

x x div 2 y y * 2 retourner P

Exercice : Faire la trace pour l'exemplaire (35, 17).

(10)

Autre algorithme de multiplication

fonction pas_russe (A,B) tableau X,Y

X[1] A, Y[1] B, i 1 { initialisation }

tant que X[i] > 1 faire { former les 2 colonnes } X[i + 1] X[i] - 1

Y[i + 1] B i i + 1

P 0 { additionner les entrées appropriées }

tant que i > 0 faire

si X[i] > 0 alors P P + Y[i]

i i - 1 retourner P

Exercice : Faire la trace pour l'exemplaire (53,17). Ecrire l'algorithme

(11)

Etapes de résolution d’un problème

1 Trouver différents algorithmes (selon ≠ méthodes de conception) 2 Analyser leur efficacité (en terme de temps, espace mémoire,...)

3 Choisir le meilleur algorithme (selon la taille de l'exemplaire, puissance du matériel, ordre,...)

Problème

Algorithme 1

Algorithme 2

Algorithme 3

(12)

2 Efficacité des algorithmes

Définition : Un exemplaire x est l’entrée d’un algorithme, |x| = taille de l'exemplaire x

Exemples

- Tri : |x| est le nombre d'entiers à ordonner

- Multiplication : |x| est le nombre de chiffres (ou bits) des facteurs Approches d’analyse

- Empirique : programmation + exécution avec plusieurs exemplaires

- Théorique : déterminer la quantité de ressources (temps, mémoire,...) en fonction de la taille des exemplaires

Avantages de l'approche théorique

- Indépendance de l'ordinateur et langage de programmation

- Gain dans la programmation et l'exécution des algorithmes inefficaces

(13)

3 Nature de l’analyse

Efficacité d’un algorithme dépend - taille de l’exemplaire

- espace mémoire - …

Comparaison des algorithmes selon différentes analyses - meilleur cas (optimiste)

- moyenne

- pire cas (pessimiste)

(14)

Tri par insertion

Procédure insert (T[1..n])

pour i 2 jusqu'à n faire x T[i]

j i - 1

tant que j > 0 et T[j] > x faire T[j + 1] T[j]

j j - 1

T[j + 1] x Exercice : Faire la trace pour

T = [3,1,4,0,5], U = [0,3,4,6,9] et V = [9,6,4,3,0]

(15)

Trace de insert(T)

4 0 1 2 3 2 0 1 - j

non non oui oui oui non non oui

-

j > 0 et T[j] > x

0 1 3 4 5 5

5

0 1 3 4 5 1 0 3 4 5 1 3 0 4 5 0

4

4 3

1 3 4 0 5 1

2

3 1 4 0 5 -

-

T x

i

(16)

Trace de insert(U) et insert(V)

4 9

5

3 6

4

2 4

3

1 3

2

0 3 4 6 9 -

- -

U j

x i

3 4 6 0 9 3

3 40 6 9 2

6 4 93 0 1

4 69 3 0 0

3 3

4

4 0

5

3 46 9 0 0

4 3 69 0 1

4 6 3 9 0 2

2 4

3

6 9 4 3 0 0

1 6

2

9 6 4 3 0 -

- -

V j

x i

(17)

Tri par sélection

Procédure select (T[1..n])

pour i 1 jusqu'à n-1 faire minj i, minx T[i]

pour j i + 1 jusqu'à n faire si T[j] < minx alors

minj j minx T[j]

T[minj] T[i]

T[i] minx

Exercice : Faire la trace pour

T = [3,1,4,0,5], U = [0,3,4,6,9] et V = [9,6,4,3,0]

(18)

Trace de select(T)

3 1 4 0 5 -

- -

-

4 4 4 3 2 2 2 2 4 4 2 2 1 minj

3 4

0 1 3 4 5 3

5

4 -

4

0 4

01 4 35 0

5

1 -

2

4 -

3

0 1 4 3 5 1

5

1 4

1 3

1 3

1 2

3 -

1

T minx

j i

(19)

Trace de select(U) et select(V)

0 3 4 6 9 -

- -

-

4 4 3 3 3 2 2 2 2 1 1 1 1 1 minj

4 4

0 3 4 6 9 4

5

6 -

4

0 4

0 3 4 6 9 0

5

1 -

2

0 3 4 6 9 6

5

4 -

3

0 3 4 6 9 3

5

3 4

3 3

0 3

0 2

0 -

1

U minx

j i

9 6 4 3 0 -

- -

-

4 4 3 3 3 4 4 3 2 4 4 3 2 1 minj

4 4

9 6 4 3 0 4

5

6 -

4

3 4

06 4 3 9 0

5

6 -

2

9 6 4 3 0 6

5

4 -

3

0 34 6 9 3

5

3 4

4 3

4 3

6 2

9 -

1

V minx

j i

(20)

Analyse de insert et select

Trace

U : meilleur cas pour insert V : pire des cas pour insert V : meilleur cas pour select U : pire des cas pour select Conclusion

analyse au pire cas de insert et select

nous allons voir que insert et select sont de l'ordre de n

2

, où n = |x|

(21)

4 Pourquoi des algorithmes efficaces ?

Supposition

A : un algorithme M : une machine

A’ : un algorithme plus efficace que A M’ : une machine plus puissante que M Question : A sur M’ ou A’ sur M ?

Autrement si

n : taille de l’exemplaire

t(n) : temps d'exécution de A sur M t'(n) : temps d'exécution de A sur M' t"(n) : temps d'exécution de A’ sur M Question : t’(n) < t”(n) ou t”(n) < t’(n) ?

(22)

Application numérique

t(n) = 10

-4

x 2

n

s

t'(n) = t(n) x 10

-2

= 10

-6

x 2

n

s (M’ 100 plus rapide que M) t"(n) = 10

-2

x n

3

s (A’ plus efficace que A)

1 année -

- 1500

1 jour -

- 200

20 mn 1 année

- 45

10 mn 4 mois

1 année 38

5 mn 3 heures

10 jours 30

1mn 1 s

2 mn 20

10 s 2 ms

1/10 s 10

t"(n) t'(n)

t(n) n

1 jour

1 heure

1 minute temps de calcul(s)

106

105

104

103

102

10

t(n)

t'(n)

t"(n)

(23)

Calcul des nombres de Fibonacci (1/3)

Définition

f

0

= 0, f

1

= 1

f

n

= f

n-1

+ f

n-2

pour n ≥ 2 De Moivre

f

n

= 1/ √ 5 [ Φ

n

- (- Φ )

-n

]

où Φ = (1 + √ 5)/2 le nombre d'or

Cette formule n'est pas pratique pour calculer la valeur exacte de f

n

(24)

Calcul des nombres de Fibonacci (1/3)

fonction fib1(n)

si n < 2 alors retourner n

sinon retourner fib1(n-1) + fib1(n-2) fonction fib2(n)

i 1, j 0

pour k 1 jusqu'à n faire j i + j

i j - i

retourner j

(25)

Calcul des nombres de Fibonacci (3/3)

fonction fib3(n)

i 1, j 0, k 0, h 1 tant que n > 0 faire

si n est impair alors t jh

j ih + jk + t i ik + t t h2

h 2kh + t k k2 + t n n div 2 retourner j

Exercice : Faire la trace de fib1, fib2 et fib3 la trace pour n = 5

(26)

Exécution de fib1, fib2 et fib3

2 ms 3/2 ms

1 ms 1/2 ms

1/2 ms 1/2 ms

2/5 ms 1/3 ms

fib3

25 mn 15 s

150 ms 3/2 ms

3/4 ms 1/2 m

1/3 ms 1/6 ms

fib2

- -

- -

21 j 2 mn

1 s 8 ms

fib1

108 106

104 102

50 30

20 10

n

(27)

Chapitre 2 :

Analyse de l’efficacité des algorithmes

Contenu

1 Notations asymptotiques

2 Analyse des algorithmes itératifs

3 Résolution d’équations de récurrences

4 Analyse des algorithmes récursifs

(28)

1 Notations asymptotiques

Remarque : L'analyse théorique de l'efficacité d'un algorithme se fait à une constante près pour ne pas tenir compte de :

- langage de programmation

- compilateur et système d'exploitation - puissance de l’ordinateur

Notation "l'ordre de"

Soit f : N ---> R*

O(f(n)) = {t : N → R* / (∃ c ∈ R+) (∃ n0 ∈ N) (∀ n ≥ n0) [t(n) ≤ c f(n)]}

Définitions

O(f(n)) est appelé l'ordre de f(n)

t(n) ∈ O(f(n)) ⇒ t(n) est dans l'ordre de f(n)

(29)

t(n) ∈ O(f(n))

temps

n c f(n)

t(n)

n0

(30)

Exercices

a) Quel est l’ordre de l’algorithme qui prend un temps borné supérieurement par : t(n) = 3 s - 18n ms + 27n2 µs

b) Prouver que : f(n) ∈ O(g(n)) et g(n) ∈ O(h(x)) ⇒ f(n) ∈ O(h(n)) c) Déduire que g(n) ∈ O(h(n)) ⇒ O(g(n)) ⊂ O(h(n))

d) Soient f, g : N → R+, montrer que : O(f(n) + g(n)) = O(max(f(n) , g(n))) e) Soient f et g: N → R+, prouver que :

limn→∞ f(n) / g(n) = c ∈ R+ ⇒ O(f(n)) = O(g(n)) limn→∞ f(n) / g(n) = 0 ⇒ O(f(n)) ⊂ O(g(n)) f) Prouver que : log n ∈ O(√n) et √n ∉ O(log n)

g) Soit x ∈ R / 0 < x < 1. Utiliser ⊂ et = pour mettre en rang les ordres des fonctions suivantes:

n log n, n8, n1+x, (1 + x)n, (n2 + 8n + log3n)4 et n2/log n

(31)

Réponse (1/3)

Exemple 1 : Soit un algorithme qui prend un temps borné supérieurement par :

t(n) = 3 s - 18n ms + 27n2 µs.

Trouvons une fonction f aussi simple que possible tel que cet algorithme prenne un temps dans l'ordre de f(n).

Prenons c = 27 x 10-6 et n0 = 500/3

Soit n > n0 _ n > 500/3 _ 18n > 3000 _ 18n x 10-3 > 3 _ 3 - 18n x 10-3 < 0

_ 3 - 18n x 10-3 + 27n2 x 10-6 _ 27n2 x 10-6 = cn2.

(32)

Réponse (2/3)

Exemple 2 : a) Prouver que :

f(n) Œ O(g(n)) et g(n) Œ O(h(x)) _ f(n) Œ O(h(n)) b) Déduire que g(n) Œ O(h(n)) _ O(g(n)) C O(h(n)) Preuve :

f(n) ΠO(g(n)) _ ($ c' ΠR+) ($ n' ΠN) (" n > n') (f(n) _ c'g(n)) g(n) ΠO(h(x)) _ ($ c" ΠR+) ($ n" ΠN) (" n > n") (g(n) _ c"h(n)) Soit c = c'c" et n0 = sup(n',n") alors (" n > n0) f(n) _ c'g(n) _ c'c"h(n)

donc f(n) ΠO(h(n)).

Soit f(n) Œ O(g(n)) d'après (a) f(n) Œ O(h(n)) donc f(n) Œ O(h(n)).

Exemple 3 : Soient f, g : N --> R+, montrer que :

O(f(n) + g(n)) = O(max(f(n) , g(n))).

(33)

Réponse (3/3)

Applications :

n3+ 3n2+ n + 8 ΠO(n3 + (3n2 + n + 8)) = O(max(n3 , 3n2 + n + 8)) = O(n3). Il faut s'assurer que f(n) et g(n) soient positives car sinon on trouvera la contradiction suivante :

O(n2) = O(n3 + (n2 - n3)) = O(max(n3 , n2 - n3))) = O(n3).

Montrer que O(n2) _ O(n3).

Exercice 1: Soient f et g: N ---> R+. Prouver que : limn-->_ f(n) / g(n) = l ΠR+ _ O(f(n)) = O(g(n)) limn-->_ f(n) / g(n) = 0 _ O(f(n)) C O(g(n))

Exercice 2 : Prouver que log n ΠO( _n) et _n ΠO(log n)

Exercice 3 : Soit x ΠR / 0 < x <1. Utiliser C (inclusion) et = pour mettre en rang les ordres des fonctions suivantes:

n log n, n8, n1+x, (1 + x)n, (n2 + 8n + log3n)4 et n2/log n.

(34)

Autres notations asymptotiques

Remarque : la notion d'ordre est l'estimation d'une limite supérieure du temps d'exécution d'un algorithme sur un exemplaire de taille donnée. Nous allons estimer une limite inférieure.

Omega de

f(n)

Ω(f(n)) = {t : N → R* / (∃ c ∈ R+) (∃ n0 ∈ N) (∀ n ≥ n0) [t(n) ≥ c f(n)]}

Exercice : Soient f, g : N → R*, montrer que : f(n) ∈ O(g(n)) ⇒ g(n) ∈ Ω(f(n))

Ordre exact de f(n)

Θ(f(n)) = O(f(n)) ∩ Ω(f(n))

(35)

t(n) ∈ Θ (f(n)) = O(f(n)) ∩ Ω (f(n))

temps

n c1 f(n)

t(n)

n0

c2 f(n)

(36)

2 Analyse des algorithmes itératifs

Soit t(n) : temps d'exécution de l'algorithme pour un exemplaire de taille n Algorithmes analysés

Calcul de Fibbonacci Tri par selection

Tri par insersion

Calcul du PGCD

(37)

Analyse de fib2

fonction fib2(n) i ← 1, j ← 0

pour k 1 jusqu'à n faire j ← i + j

i ← j - i retourner j

t(n) = a + c + d = a + ( Σ

1 k n

b) + d = a + bn + d = a’ + bn où a’=a+d

⇒ t(n) ∈ O(n)

a

c d b

(38)

Analyse de fib3

fonction fib3(n) i

1, ...

tant que n > 0 faire ...

n

n div 2 retourner j

t(n) = a + c + d = a + bk + d

où k est le nombre d'itérations

k = nombre de bits dans la représentation binaire de n

k = log

2

n + 1

⇒ t(n) ∈ O(log n)

a

c d b

(39)

Analyse de select

Procédure select (T[1...n])

pour i 1 jusqu'à n-1 faire minj ← i, minx ← T[i]

pour j i+1 jusqu'à n faire si T[j] < minx alors

minj ← j minx ← T[j]

T[minj] ← T[i]

T[i] ← minx

t(n) = Σ

1 i n-1

[ a + Σ

i+1 j n

(b) + d ] = (a + d + bn)(n - 1) - bn(n-1)/2

⇒ t(n) ∈ O(n

2

)

a

e d

b c

(40)

Analyse de l'algorithme d'Euclide

calcul du PGCD de deux nombres fonction Euclide(m,n)

tant que m > 0 faire

t <-- n mod m n <-- m m <-- t retourner n

Montrons tout d'abord que : " n, m / n _ m _ n mod m < n/2

Cas 1 : m > n/2 _ 1 _ n/m < 2 _ [n/m] = 1_ n mod m = n - m _ n - n/2 = n/2 Cas 2 : m _ n/2 _ n mod m < m

Soit k le nombre d'itérations de la boucle pour l'exemplaire (m,n). Soient mi et ni les valeurs de m et n après la ième itération. On déduit que mk = 0 et le système suivant :

ni = mi-1

mi = ni-1 mod mi-1 n0 = n et m0 = m

On peut vérifier que ni > mi pour i _ 1. mi = ni-1 mod mi-1 < ni-1/2 = mi-2/2 Supposons que k est impair. Soit d tel que k = 2d + 1 alors :

mk-1 < mk-3/2 < mk-5/22 < ... < m0/2d Or mk-1 _ 1 _ m0/2d _ 1 _ d Œ log m > k Œ 2log m+1 le cas où k est pair est traité de la même t(n) ∈O(log m).

(41)

Analyse de fib1

fonction fib1(n)

si n < 2 alors retourner n

sinon retourner fib1(n-1) + fib1(n-2)

t(n) est la solution du système de récurrence : t(0) = t(1) = a

t(n) = t(n-1) + t(n-2)

(42)

3 Résolution de récurrences récurrence homogène

a

0

t

n

+ a

1

t

n-1

+ .. + a

k

t

n-k

= 0 (1)

cherchons une solution de la forme t

n

= x

n

(équation caractéristique) a

0

x

n

+ a

1

x

n-1

+ .. + a

k

x

n-k

= 0 (2)

cherchons une solution non nulle ⇒ (2) devient : a

0

x

k

+ a

1

x

k-1

+ .. + a

k

= 0

supposons que les k racines : r

1

, r

2

, ..., r

k

(réelles ou complexes) sont distinctes alors :

t

n

= Σ

1 i k

c

i

(r

i

)

n

où ci (1 ≤ i ≤ k) constantes déterminées par les conditions initiales

(43)

Calcul du nombre de Fibonacci

f

0

= 0 et f

1

= 1 (1) f

n

= f

n-1

+ f

n-2

(2)

Posons f

n

= x

n

, alors (2) devient : x

n

= x

n-1

+ x

n-2

⇒ x

2

- x - 1 = 0

∆ = 1 + 4 = 5 ⇒ r

1

= (1- √ 5)/2 et r

2

= (1+ √ 5)/2

⇒ f

n

= c

1

r

1n

+ c

2

r

2n

En utilisant les conditions initiales (1) on trouve : c

1

+ c

2

= 0

c

1

r

1

+ c

2

r

2

= 0 ⇒ c

1

= -1/ √ 5 et c

2

= 1/ √ 5

⇒ f = 1/ √ 5 [-((1- √ 5)/2)

n

+ ((1+ √ 5)/2)

n

] (Méthode de Moivre)

(44)

Analyse de fib1

t(0) = t(1) = a (1)

t(n) = t(n - 1) + (n - 2) (2) D'après le calcul précédent on déduit que :

t(n) = c

1

r

1n

+ c

2

r

2n

où r

1

= (1 - √ 5)/2 et r

2

= (1 + √ 5)/2 En utilisant les conditions initiales (1), on trouve le système :

c

1

+ c

2

= 0

c

1

r

1

+ c

2

r

2

= 0

⇒ c1 = -a (1 + √ 5)/2 √ 5 et c2 = a (1 + 3 √ 5)/2 √ 5

⇒ t(n) ∈ O(c

2n

) où |c

2

| > 1 ⇒ algorithme exponentiel

(45)

3 Résolution de récurrences récurrences non homogènes

Illustrons ce type de récurrence à l'aide de l'exemple suivant où l’on se ramène à une récurrence homogène

t

n

- 2t

n-1

= 3

n

(1)

En multipliant (1) par 3 et en la considérant pour n+1 on trouve:

3t

n

- 6t

n-1

= 3

n+1

(2)

t

n+1

- 2t

n

= 3

n+1

(3)

En faisant la différence de (2) et (3), on trouve : t

n+1

- 5t

n

+ 6

n-1

= 0

L'équation caractéristique de cette équation est : x

2

- 5x + 6 = 0 ⇔ (x - 2) (x - 3) = 0

⇒ t

n

= c

1

2

n

+ c

2

3

n

En utilisant (1), on trouve que t

n

= -c

1

2

n

+ 3

n+1

(46)

3 Résolution de récurrences récurrences non homogènes

Illustrons cette technique à l'aide de l'exemple suivant où nous faisons une transformation de variable :

T(n) = 4T(n/2) + n, n > 1 avec n = 2k (1) Posons tk = T(2k). L'équation (1) devient :

tk = 4tk-1 + 2k

En multipliant par 2 et en considérant l'équation pour n+1, on trouve :

2tk = 8tk-1 + 2k+1 (2)

tk+1 = 4tk + 2k+1 (3)

(2) – (3) donne : tk+1 - 2tk = 4tk - 8tk-1 ⇔ tk+1 - 6tk + 8tk-1 = 0 L'équation caractéristique de cette équation est :

x2 - 6x + 8 = 0 ⇔ (x - 2) (x - 4) = 0 _ donc tk = c12k + c24k donc T(n) = c1n + c2n2

En utilisant (1) on trouve que c1= -1 et par conséquent : T(n) = -n + c2n2

(47)

Tours de Hanoï

Problème

Soint trois aiguilles (1, 2 et 3) et m disques, tous de taille différente. Au départ tous les disques sont placés du plus grand au plus petit dans l’aiguille 1.

Comment déplacer les disques à l’aiguille 2 sans jamais mettre de disque par- dessus un disque plus petit dans les aiguilles ?

Exercice

1 Comment allez-vous faire pour déplacer 3 disques ? 2 Décrire un algorithme de la solution.

3 Faire la trace pour m = 3.

4 Déterminer le nombre de déplacements en fonction de m.

5 Déduire l’efficacité de l’algorithme.

6 Estimer le temps si m = 64 et si un déplacement prend 1 seconde.

7 Démontrer l’optimalité de l’algorithme.

1 2 3

(48)

Trace pour m = 3

1 2 3 1 2 3 1 2 3

1 2 3

1 2 3

1 2 3

3

1 2 3

(49)

Tours de Hanoï

procédure Hanoï (m,i,j) si m > 0 alors

Hanoï (m-1,i,6-i-j) écrire (i,"-->",j) Hanoï (m-1,6-i-j,j) Soit t(m) le temps d’exécution

t(1) = 1

t(m) = 2 t(m-1) + 1

1 2 3

(50)

Tours de Hanoï

Soit t(m) : temps d'exécution de l'algorithme sur un exemplaire de taille m.

t(1) = 1

t(m) = 2t(m-1) + 1 Calculons t(m)

t(m) = 2[ 2 t(m-1) + 1 ] + 1 = 22 t(m-2) + 2 + 1

= 22[ 2 t(m-3) + 1 ] + 2 + 1 = 23 t(m-3) + 22 + 2 + 1

= ...

= 2k t(m-k) + 2k-1 + ... + 2 + 1

= ...

= 2m-1 t(1) + 2m-2 + ... + 2 + 1 = 2m-1 + 2m-2 + ... + 21 + 20

= (2m - 1) / (2 - 1) = 2m - 1 donc t(m) O(2m).

Exercice : Trouver une version non récursive de la procédure Hanoï. Trouver l'ordre de l'algorithme.

(51)

Hanoi(3,1,2)

Hanoi(2,1,3)

Hanoi(1,1,2)

Hanoi(0,1,3) 12

Hanoi(0,3,2) 13

Hanoi(1,2,3)

Hanoi(0,2,1) 23

Hanoi(0,1,3) 12

Hanoi(2,3,2)

Hanoi(1,3,1)

Hanoi(0,3,2) 31

Hanoi(0,2,1) 32

Hanoi(1,1,2)

Hanoi(0,1,3) 12

Hanoianoi(0,3,2)

Trace à l’aide

d’appels récursif

(52)

Trace à l’aide d’un arbre

H(3,1,2)

12

H(2,1,3) H(2,3,2)

H(1,1,2)

12

H(0,1,3) H(0,3,2)

H(1,3,1)

23

H(0,2,1) H(0,1,3)

H(1,3,1)

31

H(0,3,2) H(0,2,1)

H(1,1,2)

12

H(0,1,3) H(0,3,1)

13 32

(53)

Chapitre 3 : Diviser-pour-régner

diviser-pour-regner (Divide and conquer) est une technique de conception d'algorithme composée de trois étapes :

- Décomposition de l'exemplaire en sous-exemplaires plus petits, - Résolution des sous-exemplaires et

- Combinaison des sous-solutions.

Plan

1 Fouille dichotomique

2 Multiplication des grands nombres 3 Multiplication matricielle

4 Exponentiation discrète

(54)

Schéma des algorithmes DPR

fonction DPR(x)

si x est suffisamment petit alors retourner ADHOC(x) décomposer x en sous-exemplaires x

1

, x

2

, ..., x

k

pour i 1 jusqu'à k faire y

i

<-- DPR(x

i

)

combiner les y

i

pour obtenir une solution y

retourner y

(55)

Résolution des récurrences DPR

Théorème : Soient a, b, c ≥ 0 et n = c

k

. La solution de la récurrence

b pour n = 1

T(n) = aT(n/c) + bn pour n > 1 est :

O(n) si a < c

T(n) ∈ O(n log n) si a = c

O(n

log a

) si a > c, où le logarithme en base c

T(n) : temps d'exécution d'un algorithme DPR sur l’exemplaire n

(56)

Fouille dichotomique

Problème : localisation de la valeur x dans un tableau T[1..n] trié (dictionnaire ou annuaire téléphonique)

fonction séquentielle (T[1..n],x) pour i 1 jusqu'à n faire

si T[i] > x alors retourner i-1 retourner n

fonction dichotomique(T[i..j],x) si i = j alors retourner i k (i+j+1) div 2

si x < T[k] alors retourner dichotomique(T[i..k-1],x) sinon retourner dichotomique(T[k..j],x)

Exercice : Montrer que t(n) ∈ O(log n)

(57)

Arithmétique des grands entiers

Utilisation : calcul de très grande précision. En 1986, Π est calculé avec 30 millions de chiffres. Ce calcul a nécessité 30 heures de calcul sur un ordinateur Cray-2.

Problème : calcul de u*v avec u et v composés de n=2

k

chiffres Solution :

Algorithme de multiplication classique ∈ O(n

2

)

Algorithme de multiplication DPR ∈ ?

(58)

Multiplication DPR (1/2)

u = 10

s

w + x

v = 10

s

y + z où 0 ≤ x, z < 10

s

et s = n/2

⇒ u*v = 10

2s

wy + 10

s

(wz + yx) + xz

w x

n

u

y z

n/2

v

n/2

(59)

Multiplication DPR (2/2)

fonction multA(u,v: grands-entiers) : grand-entier n max(u,v)

si n est petit alors

multiplier u et v par l'algorithme classique retourner le résultat

sinon

s n div 2

w u div 10

s

, x u mod 10

s

y v div 10

s

, z v mod 10

s

retourner multA(w,y) 10

2s

+ (multA(w,z) + multA(y,x)) 10

s

+ multA(x,z).

Exercice : Montrer que t(n) ∈ O(n

2

)

(60)

Amélioration de la multiplication DPR (1/2)

u = 10

s

w + x

v = 10

s

y + z où 0 ≤ x, z < 10

s

et s = n/2 Soient r, p et q tels que :

r = (w + x)(y + z) = wy + wz + xy + xz p = wy

q = xz

⇒ u * v = 10

2s

wy + 10

s

(wz + yx) + xz

= 10

2s

p + 10

s

(r - p - q) + q

(61)

Amélioration de la multiplication DPR (2/2)

fonction multB(u,v: grands-entiers) : grand-entier n max(u,v)

si n est petit alors

multiplier u et v par l'algorithme classique retourner le résultat

sinon

s n div 2

w u div 10s, x u mod 10s y v div 10s, z v mod 10s r multB(w+x , y+z)

p multB(w,y) q multB(x,z)

retourner 102sp + 10s(r-p-q) + q Exercice : t(n) ∈ O(n1,59)

(62)

Multiplication matricielle DPR

Soient A, B deux matrices carrées d'ordre n.

C = AB = (cij) 1≤ i, j ≤ n avec cij =

Σ

1≤k≤n aikbkj

Algorithme classique de multiplication de matrices appartient à O(n3) Algorithme DPR (Strassen)

Soient A = a11 a12et B =b11 b12 a21 a22 b21 b22

Soient m1, m2 m3, m4, m5, m6 m7 tels que : m1 = (a21 + a22 - a11)(b22 - b12 + b11) m2 = a11b11

m3 = a12b21

m4 = (a11 - a21)(b22 - b12) m5 = (a21 + a22)(b12 - b11) m6 = (a12 - a21 + a11 - a22)b22 m7 = a22(b11 + b22 - b12 - b21)

(63)

Protocole de cryptage (1976)

Ali et Bahia partagent l’information x = y sans que Fouad puisse la détecter

A / A aléatoire A < p

a = gA mod p x = bA mod p

Ali

B / B aléatoire B < p

b = gB mod p y = aB mod p

Bahia Fouad

p grand premier

g / 2 ≤ g ≤ p-1

(64)

Exponentiation discrète (1/3)

fonction expod1(g,A,p) a 1

pour i 1 jusqu'à A faire a a g retourner a mod p

Remarque : xy mod p = ((x mod p) (y mod p)) mod p fonction expod2(g,A,p)

a 1

pour i 1 jusqu'à A faire a a g mod p retourner a

Exercice : Analyser et comparer le temps d'exécution de expod1 et expod2 en fonction de A et p. Pour simplifier supposer que g=p/2.

(65)

Exponentiation discrète (2/3)

Exemple : calcul de x

23

x

23

= ((…((x x)x)…)x) ⇒ 22 multiplications x

23

= (((x

2

)

2

x)

2

x)

2

x ⇒ 7 multiplications

fonction expoditer(x,n) a x, b 1

tant que n > 0 faire si n est impair alors

b a b a a

2

n n div 2 retourner b fonction expodrec(x,n)

si n = 0 alors retourner 1 si n est impair alors

a expodrec(x,n-1) retourner a x

sinon

a expodrec(x,n/2)

retourner a

2

(66)

Exponentiation discrète (3/3)

fonction expod3(g,A,p)

si A = 0 alors retourner 1 si A est impair alors

a expod3(g,A-1,p) retourner a g mod p sinon

a expod3(g,A/2,p) retourner a

2

mod p

fonction expod4(g,A,p) a g, b 1

tant que A > 0 faire si A est impair alors

b a b mod p a a

2

mod p

A A div 2

retourner b

(67)

Exercice

Soit la matrice a) Montrer que

où fn est le nième nombre de Fibonacci.

b) Déduire un algorithme de type diviser-pour-régner pour le calcul de Fn.

c) comparer cet algorithme avec fib3 en prenant comme matrices intermédiaires : .

F = [ ]

0 11 1

F

n

= [ ]

ffn-1 fn

n fn+1

A = [ ]

i jj i+j

et B = [ ]

k hh h+k

(68)

Retour à l’algorithme fib3

fonction expod4(F,n) A F, B I

tant que n > 0 faire si n est impair alors

B AB A A

2

n n div 2 retourner B

fonction expod5(n)

k 0, h 1, i 1, j 0 tant que n > 0 faire

si n est impair alors t hj

j hi + kj + t i ki + t

t h

2

h 2hk + t

k k

2

+ t

n n div 2

retourner j

(69)

Chapitre 4 : Algorithmes voraces

Généralement

assez simples ⇒ rapides

résolution des problèmes d'optimisation solutions approximatives (heuristique) Contenu

Schéma général Remise de monnaie Plus courts chemins Remise de monnaie Coloration d’un graphe

(70)

Optimisation de la sélection avec contrainte

20 Kg

15 Kg

8 Kg 10 Kg

Capacité = 40 Kg

Solution vorace = 20 + 15 = 35 < 40

(71)

Schéma des algorithmes voraces

fonction vorace (C : ensemble) : ensemble

{C est l'ensemble de tous les candidats}

S ← ∅ {ensemble solution}

tant que ¬ solution (S) et C ≠ ∅ faire

x ← l'élément de C qui maximise sélect(x) C ← C - {x}

si réalisable (S {x}) alors S ← S ∪ {x}

si solution (S) alors retourner S sinon retourner pas de solution

(72)

Exemple 1 : Remise de monnaie

Problème : remettre la monnaie en donnant le moins de pièces possible.

Solution :

C : ensemble fini de pièces 1, 5, 10, 20, 50 et 100 DH

Solution(S) : total des pièces choisies correspond au montant à rendre Ensemble réalisable : total des pièces n'excède pas la somme à rendre fonction de sélection : la plus grande pièce qui reste dans C

Fonction objective : nombre de pièces utilisées dans la solution

Exercice : Décrire un algorithme vorace. Montrer qu’il fournit toujours une solution optimale lorsqu'elle existe

(73)

Exemple 1 : Algorithme vorace

fonction Remise_Monnaie (Montant) : tableau C ← {1,5,10,20,50,100}

S ← 0

tant que (Montant > 0) et (C ≠ ∅) faire x ← max{y/ y ∈ C}

C ← C - {x}

NP ← Montant div x {Nombre de pièces de type x}

S[x] ← NP

Montant ← Montant - NP*x si (Montant = 0) alors retourner S sinon retourner pas de solution

Exercice : Montrer l’Optimalité (idée (Ci ≥ 2 Ci+1))

(74)

Exemple 1 : qualité de la solution

Soit C ’ = C ∪ {12} = {1, 5, 10, 12, 20, 50, 100}

Montant = 16 =12 + 1 + 1 + 1 + 1 (5 pièces) ⇒ solution non optimale

= 10 + 5 + 1 (3 pièces) ⇒ est la solution optimale

Soit C" = C’ - {1} = {5, 10, 12, 20, 50, 100}

Montant = 15 = 12 + ??? ⇒ pas de solution

= 10 + 5 ⇒ une solution existe

(75)

Solution d’un algorithme vorace

Algorithme vorace

Solution optimale

Solution approximative non optimale

Pas de solution alors qu’elle existe

(76)

Exemple 2 : Plus courts chemins

Soit G = (N,A) un graphe orienté où N = {1,2,..,n} ensemble des nœuds et A est l'ensemble d'arcs. A chaque arc est associé une longueur non négative. Essayons de déterminer la longueur du plus court chemin de 1 vers les autres sommets.

L : matrice d'ordre n tel que L[i,j] ≥ 0 si l'arc (i,j) existe et L[i,j] = ∞ s'il n'existe pas.

fonction Dijkstra(L[1..n,1..n]) : tableau [2..n]

C ← {2,3,..,n}

pour i 2 jusqu'à n faire D[i] ← L[1,i]

répéter n-2 fois

v ← l'élément de C qui minimise D[v]

C ← C - {v}

pour chaque élément w de C faire

D[w] ← min (D[w] , D[v] + L[v,w])

(77)

Exemple 2 : Trace de l’algorithme

étape v C D

- - {2,3,4,5} [50,30,100,10]

2 5 {2,3,4} [50,30,20,10]

2 4 {2,3} [40,30,20,10]

3 3 {2} [35,30,20,10]

1

2

3 4

5

10 50

100

10 20

50

5 30

Exercice : Déterminer l’ordre de l’algorithme de Dijkstra. Modifier le afin de trouver le chemin le plus court entre tous les couples de sommets.

(78)

Exemple 3 : Minimisation de l'attente

Soient un serveur, n clients et ti: temps de service requis par le client i = 1,2,..,n minimiser : T = S1 i n (temps passé dans le système par le client i)

Exemple : t1 = 4, t2 = 7 , t3 = 3.

ordre T

1 2 3 4 + (4 + 7) + (4 + 7 +3) = 29 1 3 2 4 + (4 + 3) + (4 + 3 + 7) = 25 2 1 3 7 + (7 + 4) + (7 + 4 + 3) = 32 2 3 1 7 + (7 + 3) + (7 + 3 + 4) = 33

3 1 2 3 + (3 + 4) + (3 + 4 + 7) = 24 ← ordre optimal 3 2 1 3 + (3 + 7) + (3 + 7 + 4) = 27

Exercice : Montrer que l’algorithme exhaustif ∈ O(n!). Décrire l'algorithme vorace et analyser son efficacité. Démontrer que sa solution est optimale.

(79)

Exemple 3 : Algorithme vorace

fonction Ordonnancement (n,t) : tableau C ← {1,2,3,…,n}

pour i=1 à n faire

j ← min{ti/ i ∈ C}

C ← C - {j}

S[x] ← j retourner S

Exercice : Quel est l’ordre de l’algorithme ?

(80)

Exemple 3 : Optimalité de l’algorithme (1/2)

Soit I = (i1,i2,..,in) une permutation quelconque dans {1,2,..,n}.

Soit T(I) le temps total passé dans le système pour les clients i1,i2,..,in.

T(I) = ti1 + (ti1 + ti2) + ... + (ti1 + ti2 + .. tin) = nti1 + (n-1)ti2 + ... + tin

= S1≤k≤n (n - k + 1)tik

Supposons qu'il existe dans I, deux entiers a et b tel que a < b et tia > tib. Inversons l'ordre de ces deux clients et on obtient l'ordre I'.

Ordre de service 1 2 ... a ... b … n I i1 i2 ... ia ... ib ... In I' i1 i2 ... ib ... ia ... in

T(I') = (n-a+1)tib + (n-b+1)tia + S1<k<n et k≠a et b (n-k+1)tik

(81)

Exemple 3 : Optimalité de l’algorithme (2/2)

T(I) - T(I') = (n-a+1)tia + (n-b+1)tib - (n-a+1)tib - (n-b+1)tia

= (b-a)tia + (a-b)tib = (b-a) (tia - tib)

Comme b - a > 0 et tia - tib > 0, on déduit que :

T(I) - T(I') > 0 et par conséquent T(I) > T(I').

Nous pouvons améliorer tout ordre de service où un client est servi avant un autre nécessitant moins de temps

⇒ optimalité de l’algorithme

(82)

Exemple 4 : Coloration d’un graphe

Soit G = (N,A) un graphe non orienté.

Colorer le graphe tels que deux sommets reliés doivent être de couleurs différentes.

L'algorithme vorace :

- Choisir une couleur et un sommet comme point de départ

- Considérer les autres sommets et essayer de les colorer par cette couleur

- Lorsqu'on ne peut plus faire de progrès choisir une nouvelle couleur et un nouveau point de départ non coloré

- Colorer tout ce qui est possible avec cette deuxième couleur

1 2

3

4

5

(83)

Exemple 4 : Coloration d’un graphe

2-coloration 3-coloration

Remarques

Un algorithme basé sur une heuristique vorace permet la possibilité de trouver une

"bonne" solution mais pas la certitude

l’algorithme exhaustif qui produit une solution optimale est exponentiel

(84)

Exemple 5 : Feux de signalisation

Considérons 5 artères : A, B, C, D et E.

D et E sont des artères à sens unique

A

B C

D

E

Changements de direction (13)

AB, AC, AD, BA, BC, BD, DA, DB, DC, EA, EB, EC et ED

AB et EC sont possibles alors que AD et EB peuvent provoquer une collision Modélisation à l’aide d’un graphe

sommets correspondent aux changements de direction

arêtes joignent les couples de sommets dont les itinéraires se croisent

(85)

Exemple 5 : Trace de l’algorithme

4-colorable

AC DA

BD EB

AB AC AD

BA BC BD

DA DB DC

EA EB EC ED

Solution optimale car le sous-graphe composé des sommets AC, DA, BD et EB est un graphe complet de 4 sommets et nécessite par conséquent quatre couleurs.

Les sommets de la même couleur correspondent aux itinéraires sans collision. Les quatre couleurs correspondent aux quatre phases nécessaires du système de signalisation

Graphe complet

(86)

Exercices

Exercice 1 : Résoudre le problème de signalisation pour le carrefour suivant :

Exercice 2 : Trouver un algorithme vorace pour résoudre le problème du commis voyageur en supposons que le graphe est complet.

A

B C

D

(87)

Chapitre 5 : Programmation dynamique

diviser-pour-régner : méthode descendante

programmation dynamique : méthode ascendante + utilisation espace mémoire (afin d'éviter de calculer la même chose plus d'une fois)

Contenu

Coefficient du binôme Principe d’optimalité

Multiplication chaînée de matrices Plus courts chemins

(88)

Exemple 1 : Coefficient du binôme

Coefficient binomial

C(n,k) = C(n-1,k-1) + C(n-1,k) si 0 < k < n

= 1 autrement

fonction C(n,k)

si k=0 ou k=n alors retourner 1

sinon retourner C(n-1 , k-1) + C(n-1 , k)

(89)

) (

n

Exemple 1 : Trace de l’algorithme

Trace pour (5,2) =10

Remarques : beaucoup de valeurs C(i,j) sont calculées plusieurs fois.

Exercice : Montrer que le nombre d'appels récursifs provoqués par C(n,k) est égal à :

2 - 2

C(5,2)

C(4,1) C(4,2)

C(3,2) C(3,1)

C(3,1) C(3,0)

C(2,0) C(2,1) C(2,0) C(2,1) C(2,1) C(2,2)

C(1,0) C(1,1) C(1,0) C(1,1) C(1,0) C(1,1)

(90)

Exemple 1 : Triangle de Pascal

Exercice : Décrire cet algorithme. Montrer qu’il demande un espace dans O(k) et un temps dans O(nk) si on compte chaque addition à coût unitaire.

Exercice : Parmi les algorithmes du calcul des nombres de Fibonacci, lequel est un

0 1 2 3 4 5

...

k-1

0 1 2 3 4 5

n-1 n

k

. .

1 1 1 1 1 1

1 1

1 1

1 1

1 2

3 4

5

C(n-1,k-1) 4

10 3

6 5

C(n-1,k) C(n,k) 10

(91)

Principe d’optimalité

La programmation dynamique est souvent utilisée pour résoudre des problèmes d'optimisation qui satisfont le principe d'optimalité suivant :

Principe d'optimalité : Dans une séquence optimale de décisions ou de choix, chaque sous-séquence doit être optimale.

Exemple : le problème du plus court chemin vérifie le principe d’optimalité

Exercice : Le principe d'optimalité s'applique-t-il au problème du plus long chemin simple entre deux villes ? Un chemin simple va directement de ville en ville sans passer deux fois par la même ville (sans cycle).

(92)

Exemple 2 : Multiplication chaînée de matrices

M = M1M2...Mn

Comme la multiplication matricielle est associative M = (...((M1M2)M3) ... )Mn

= M1(M2(M3(... (Mn-1Mn) ...)))

= ((M1M2)(M3M4) ... )

= ...

Le choix d'une méthode peut influencer sur le temps de calcul.

Exercice : Montrer que le calcul de AB, où A est d'ordre pxq et B est d'ordre qxr, par la méthode directe nécessite pqr multiplications de nombres scalaires.

(93)

Exemple 2 : Application

Exemple : Soient quatre matrices A, B, C et D d'ordre (13x5), (5x89), (89,3) et (3, 34) respectivement.

Il y a cinq manières différentes de calculer ABCD :

((AB)C)D qui nécessite 10582 multiplications

(AB)(CD) " " 54201 "

(A(BC))D " " 2856 "

A((BC)D) " " 4055 "

A(B(CD)) " " 26418 "

La méthode la plus efficace est 9,5 fois plus rapide que la plus lente

(94)

Exemple 2 : Nombre de Catalan

Soit T(n) : nombre de manières différentes d'insérer des parenthèses dans M M = (M1M2...Mi) (Mi+1 .. Mn)

Nous avons T(i) manières de mettre les parenthèses dans la partie gauche de Mi et T(n-i) manières de mettre les parenthèses dans la partie droite. Par conséquent

T(n) = S1≤i≤n-1 T(i) T(n-i) et T(1) = 1

T(n) s'appelle nombre de Catalan.

Exercice : Montrer que T(n) = 1/n

T(n) 1

2 3 4 5

1 2

10

5 14 2

4862 n

)

(

2n – 1n – 1

(95)

Exemple 2 : Algorithme de programmation dynamique

Soit mij (1 ≤ i ≤ j ≤ n) la solution optimale pour la partie Mi...Mj du produit M.

La solution du problème est m1n.

Supposons que la dimension de Mi est di-1 x di pour i = 1,2,..,n.

Construisons la table mij diagonale par diagonale : la diagonale s contient l'élément mj tel que j-i = s.

Cas 1 : s = 0 ⇒ mij = 0, i = 1,2,..,n

Cas 2 : s = 1 ⇒ mi,i+1 = di-1 di di+1 , i = 1,2,..,n-1

Cas 3 : 1 < s < n ⇒ mi,i+s = min i ≤k ≤i+s-1 (mik + mk+1,i+s + di-1dkdi+s) Le troisième cas représente le fait que pour calculer (Mi Mi+1...Mi+s) on essaye toutes les possibilités(Mi...Mk)(Mk+1...Mi+s) pour en choisir la meilleure.

(96)

Exemple 2 : Trace de l’algorithme

Reprenons l'exemple précédent : d = (13,5,89,3,34) s = 1 : m12 = 5785, m23 = 1335 et m34 = 9078

s = 2 : m13 = min(m11 + m23 + d0d2d3 , m12 + m33 + d0d2d3) = min(1530 , 9256) = 1530 m24 = min(m22 + m34 + d1d2d4 , m23 + m44 + d1d3d4) = min(24208 , 1845) = 1845 s = 3 : m14 = min(m11+ m24+ d0d1d4 , m12+ m34+ d0d2d4 , m13+ m44 + d0d3d4)

= min(4055 , 54201 , 2856) = 2856

j=1 j=2 j=3 j=4

i=1 0 5785 1530 2856

i=1 0 1335 1845

i=3 0 9078

(97)

Exercices

Exercice 1 : Ecrire l'algorithme qui calcule m1n. Comment peut-on modifier l'algorithme si l'on veut savoir comment calculer M de façon optimale ? Exercice 2 : Montrer que l’algorithme ∈ θ(n3).

(98)

Exemple 3 : Plus courts chemins

Soit G = (N,A) un graphe orienté où N = {1,2,..,n}. Soit L une matrice qui donne la longueur de chaque arc. Trouvons le plus court chemin entre chaque paire de sommets.

Le principe de l'optimalité s'applique car si k est un sommet intermédiaire sur le plus court chemin entre i et j alors la portion du trajet de i à k ainsi que celle de k à j doivent aussi être optimales. A l'itération k on trouve un chemin qui ne passe que par {1,2,..,k}.

Dk[i,j] = min(Dk-1[i,j], Dk-1[i,k] + Dk-1[k,j])

Procédure Floyd (L[1 .. n,1 .. n]) : tableau [1 .. n,1 .. n]

D ← L

pour k = 1 à h faire pour i = 1 à n faire

pour j = 1 à n faire

D[i,j] ← min(D[i,j] , D[i,k] + D[k,j]) retourner D

(99)

Exemple 3 : Trace de l’algorithme

D0 = L = et D4 =

1

2 3

15 4

15 5

30

5 50 5 15

0 5 15 10 20 0 10 5 30 35 0 15 15 20 5 0 0 5 ∞ ∞

50 0 15 5 30 ∞ 0 15 15 ∞ 5 0

Références

Documents relatifs

Ce problème est résolu par programmation dynamique, avec comme variables d'état, des couples {temps, longueur) associés aux nœuds. Pour le problème classique d'un plus court

Le chemin de Mona est tracé en bleu sur le 2 ème dessin.. Le chemin d’Elio est tracé en noir sur le

Indiquer, en utilisant l’algorithme de Dijkstra, le chemin permettant à Naïma de se rendre le plus rapidement possible de son école de musique à la salle de

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

Mathias est dans sa maison et décide de rendre visite à quatre de ses amis (Julie, Léo, Fabien et Kevin) en VTT?. Dans quel ordre doit-il rencontrer ses amis pour effectuer le

une loi d’évolution décrivant le changement infinitésimal (temps continu) de l’état du système, ou une loi d’évolution donnant l’état du système au temps t+1 en fonction

• Le problème du plus court chemin consiste à déterminer le chemin de coût minimum reliant un nœud a à un nœud b.. • On peut le voir comme un problème

Le parcours en largeur donne le plus court chemin mais utilise beaucoup de m´ emoire.. Dijkstra ´ etait le parcours en largeur avec