TD d’algorithmique avancée

Programming, Math · course

Browse all programmation documents

TD d’algorithmique avanc´ee

Corrig´e du TD 1 : recherche par rang

Jean-Michel Dischler et Fr´ed´eric Vivien

Recherche du maximum

1. Concevez un algorithme de recherche du maximum dans un ensemble `a n ´el´ements (vous disposez en

tout et pour tout d’une fonction de comparaison).

Maximum(A)

max ← A[1]

pour i ← 2 `a n faire

si max ¡ A[i] alors max ← A[i]

renvoyer max

2. Quelle est la complexit´e de votre algorithme en nombre de comparaisons ?

R´eponse : n − 1.

3. Montrez qu’il est optimal.

Tout ´el´ement hormis le maximum doit avoir perdu une comparaison, sinon, on ne peut pas savoir qu’il

n’est pas le maximum. Il y a n − 1 tels ´el´ements. Tout algorithme de recherche du maximum doit donc

faire au moins n − 1 comparaisons.

Recherche du deuxi`eme plus grand ´el´ement

Nous supposerons ici que l’ensemble consid´er´e ne contient pas deux fois la mˆeme valeur.

1. Proposez un algorithme simple de recherche du deuxi`eme plus grand ´el´ement.

Deuxi`eme-Plus-Grand(A)

rang max ← 1

pour i ← 2 `a n faire si A[rang max] ¡ A[i] alors rang max ← i

si rang max (cid:54)= 1 alors rang second ← 1

sinon rang second ← 2

pour i ← 2 `a n faire si i (cid:54)= rang max et A[rang second] ¡ A[i] alors rang second ← i

renvoyer A[rang second]

2. Quel est sa complexit´e en nombre de comparaisons ?

La recherche du maximum coˆute n − 1 comparaisons. La boucle qui recherche le deuxi`eme plus grand

´el´ement une fois que le maximum a ´et´e trouv´e effectue n − 2 comparaisons. D’o`u un coˆut total de 2n − 3

comparaisons.

3. R´ecrivez votre algorithme de recherche du maximum sous la forme d’un tournoi (de tennis, de foot,

de p´etanque ou de tout autre sport). Il n’est pas n´ecessaire de formaliser l’algorithme ici, une figure

explicative sera amplement suffisante.

Les comparaisons sont organis´ees comme dans un tournoi :

– Dans une premi`ere phase, les valeurs sont compar´ees par paires. Dans chaque paire, il y a bien sˆur

un plus grand ´el´ement (le « vainqueur ») et un plus petit ´el´ement (le « vaincu »).

– Dans la deuxieme phase, les valeurs qui ´etaient plus grand ´el´ement de leur paire a la phase pr´ec´edente

sont compar´ees entres elles deux `a deux.

1

– On r´epete ce processus jusqu’au moment ou il n’y a plus qu’un plus grand ´el´ement.

Ce proc´ed´e est illustr´e par la figure 1.

9

5

9

Advertisement

3

5

8

9

3

1

2

5

6

8

9

4

Fig. 1 – M´ethode du tournoi pour la d´etermination

du maximum : A : les ´el´ements sont compar´es par

paires ; B : les plus grands ´el´ements de la phase

A sont compar´es entre eux, par paires ; C :

les

´el´ements « vainqueurs » `a la phase B sont compar´es

entre eux ; D : il ne reste plus qu’un ´el´ement, c’est

l’´el´ement maximal.

Fig. 2 – Le deuxi`eme plus grand ´el´ement a

n´ecessairement ´et´e battu par le plus grand ´el´ement

(et que par lui). Il figure donc parmi les ´el´ements

compar´es `a l’´el´ement maximal. Ces ´el´ements appa-

raissent ici sur fond noir.

4. Dans combien de comparaisons, le deuxi`eme plus grand ´el´ement de l’ensemble a-t-il ´et´e trouv´e ˆetre le

plus petit des deux ´el´ements compar´es ?

Le deuxi`eme plus grand n’est plus petit que devant le plus grand ´el´ement. Il n’a donc « perdu » que

dans une comparaison, celle avec le plus grand ´el´ement.

5. Proposez un nouvel algorithme de recherche du deuxi`eme plus grand ´el´ement.

Le deuxi`eme plus grand ´el´ement est donc un des ´el´ements qui ont ´et´e battus par le plus grand ´el´ement.

L’algorithme a lieu en deux phases :

(a) On recherche tout d’abord le plus grand ´el´ement suivant la m´ethode du tournoi.

(b) On obtient le deuxi`eme plus grand ´el´ement en recherchant l’´el´ement maximal parmi ceux qui ont

´et´e ´elimin´es du tournoi lors d’une comparaison avec l’´el´ement maximal.

Voir la figure 2.

6. Quelle est sa complexit´e en nombre de comparaisons ?

La recherche de l’´el´ement maximal coˆute n − 1 comparaisons, comme d’habitude. Ensuite la recherche

du deuxieme plus grand ´el´ement nous coˆute m − 1 comparaisons, ou m est le nombre d’´el´ements `a qui

l’´el´ement maximal a ´et´e compar´e. Dans le pire cas 1, m est ´egal `a la hauteur de l’arbre moins 1 (un

arbre r´eduit a sa racine ´etant de hauteur un). Or un arbre binaire presque parfait a n feuilles est de

hauteur (cid:100)log2 n(cid:101). D’o`u la complexit´e :

T (n) = n + (cid:100)log2 n(cid:101) − 2

Note : cet algorithme est optimal.

Recherche du maximum et du minimum

Advertisement

Nous supposerons ici que l’ensemble consid´er´e ne contient pas deux fois la mˆeme valeur.

1. Proposez un algorithme na¨ıf de recherche du maximum et du minimum d’un ensemble de n ´el´ements.

1Quand n n’est pas une puissance de deux, la complexit´e peut varier d’une comparaison suivant la place initiale dans l’arbre

du maximum.

2

313599985526894ABCDMaximum-et-Minimum(A)

max ← A[1]

pour i ← 2 `a n faire

si max ¡ A[i] alors max ← A[i]

min ← A[1]

pour i ← 2 `a n faire

si min ¿ A[i] alors min ← A[i]

renvoyer max et min

2. Quelle est sa complexit´e en nombre de comparaisons ?

Cet algorithme effectue 2n − 2 comparaisons.

3. Proposez un algorithme plus efficace.

Indication : dans une premi`ere phase les ´el´ements sont compar´es par paire.

L’algorithme se d´ecompose en trois phases :

(a) On compare par paire les ´el´ements de l’ensemble. On met d’un cˆot´e les plus grands ´el´ements (ici

dans les cases paires du tableau) — c’est-`a-dire les ´el´ements qui sont sortis « vainqueurs » de leur

comparaison — et de l’autre les plus petits (ici dans les cases impaires).

(b) On recherche le minimum parmi tous les plus petits ´el´ements (si on a un nombre impair d’´el´ements,

il ne faut pas oublier le ne ´el´ement qui n’a ´et´e compar´e avec personne dans la premi`ere phase).

(c) On recherche le maximum parmi tous les plus grands ´el´ements.

Maximum-et-Minimum(A)

Pour i ← 1 `a n − 1 faire par pas de 2

si A[i] > A[i + 1] alors ´echanger A[i] et A[i + 1]

min ← A[1]

Pour i ← 3 `a n faire par pas de 2

si A[i] < min alors min ← A[i]

max ← A[2]

Pour i ← 4 `a n faire par pas de 2

si A[i] > max alors max ← A[i]

si n est impair alors si A[n] > max alors max ← A[n]

renvoyer max et min

4. Quelle est sa complexit´e en nombre de comparaisons ?

Regardons ind´ependamment le coˆut des trois phases :

n

2 (cid:5)

paires, on effectue donc

(a) On peut former

n

2 (cid:5)

(cid:4)

(cid:4)

Advertisement

comparaisons.

n

2 (cid:7)

(cid:6)

comparaisons.

(b) Parmi n ´el´ements on a

´el´ements de rangs impairs. Dans cette phase on effectue donc

− 1

n

2 (cid:7)

(cid:6)

(c) Ici aussi on effectue aussi

D’o`u une complexit´e totale en :

− 1 comparaisons.

n

2 (cid:7)

(cid:6)

T (n) = (cid:106)

n

2 (cid:107) + 2 (cid:16)(cid:108)

n

2 (cid:109)

− 1(cid:17) = n + (cid:108)

n

2 (cid:109)

− 2

5. Montrez que cet algorithme est optimal.

Indication : on appelle unit´e d’information :

– l’information « l’´el´ement x ne peut pas ˆetre le plus grand ´el´ement » ;

– l’information « l’´el´ement x ne peut pas ˆetre le plus petit ´el´ement ».

(a) Quel est le nombre minimal d’unit´es d’information qu’un algorithme de recherche du maximum

et du minimum doit produire pour nous garantir la validit´e de son r´esultat ?

3

Pour ˆetre sˆur qu’un ´el´ement est bien le maximum (respectivement le minimum) il faut que l’on

sache que les n − 1 autres ne peuvent pas ˆetre le maximum (respectivement le minimum) ce qui

repr´esente n − 1 unit´es d’informations. L’algorithme doit donc produire au moins 2n − 2 unit´es

d’information.

(b) Combien d’unit´es d’information sont produites par la comparaison de deux ´el´ements (distinguez

des cas, suivant que l’on a ou non des unit´es d’informations sur ces valeurs).

i. Si on n’a d’unit´es d’information pour aucun des deux ´el´ements, la comparaison nous fait

gagner deux unit´es d’information : le plus petit des deux ne peut pas ˆetre le maximum, ni le

plus grand le minimum.

ii. Si on a la mˆeme unit´e d’information pour les deux ´el´ements (par exemple, aucun des deux

ne peut ˆetre le plus grand), la comparaison nous procure une unit´e d’information (dans notre

exemple, le plus grand des deux ne peut pas ˆetre le plus petit).

Advertisement

iii. Si on a une unit´e d’information pour chacun des deux ´el´ements, mais des unit´es de type

diff´erent : si celui qui peut ˆetre le minimum est plus grand que celui qui peut ˆetre le maximum,

on gagne deux unit´es d’information, et sinon z´ero.

iv. Si on a une unit´e d’information pour un des ´el´ements (par exemple, ne peut pas ˆetre le plus

petit) et z´ero pour l’autre, la comparaison peut nous donner une unit´e d’information (celui sans

information est plus petit que l’autre dans notre exemple et il ne peut pas ˆetre le maximum)

ou deux (celui sans information est plus grand, ne peut donc plus ˆetre le minimum, et l’autre

ne peut plus ˆetre le maximum).

v. Si on a deux unit´es d’information pour un des ´el´ements et z´ero pour l’autre, la comparaison

nous donne une unit´e d’information (par exemple, si l’´el´ement sans information est plus

grand, il ne peut plus ˆetre le minimum).

(c) Concluez.

Il nous faut donc 2n − 2 unit´es d’information pour pouvoir conclure. Les comparaisons de type

n

5(b)i nous donnent toujours deux unit´es d’information chacune, or on peut au plus effectuer

2 (cid:5)

comparaisons de ce type (autant que l’on peut former de paires). Les autres comparaisons nous

donnent, dans le pire des cas, une seule unit´e d’information chacune. Donc il nous faudra au

moins effectuer 2n − 2 − 2

− 2 telles comparaisons. Dans le pire des cas, il nous

n

2 (cid:5)(cid:1)

faudra donc effectuer au moins :

n

2 (cid:7)

= 2

(cid:0)(cid:4)

(cid:6)

(cid:4)

n

2 (cid:107) + 2 (cid:108)

n

2 (cid:109)

(cid:106)

− 2 = n + (cid:108)

n

2 (cid:109)

− 2

comparaisons, d’o`u l’optimalit´e de notre algorithme !

4