Seuls les questions demandant le développement des algorithmes qui n’ont pas été vus en
cours sont corrigés
Question 1 : Tri
Nous avons besoin d’une procédure effectuant des permutations des éléments d’un tableau
des entiers. Après son exécution le i-ème élément du tableau se trouve à la place du j-ème
élément et inversement.
Procédure échanger (ref t : tableau [1..N] des entiers, val i,j, : entiers)
Code
Procédure tri-select-ind-iter(ref tab: tableau [1..N] des entiers, ref ind : tableau [1..N]des
entiers)
Var i,j,k : entiers
Début
Pour i :=1 à n faire
ind[i]=i
FinPour
i:=1
Tant que i<N faire
j:=i;
Pour k:=i+1 à n faire {boucle de recherche de min }
Si tab[ind[k]]<tab[ind[j]]
j:=k
FinSi
FinPour
échanger(ind, j,i);
i:=i+1;
FinTantque
Fin tri-select-iter-ind
La complexité de cet algorithme est quadratique : θ(N2).
En effet, pour rechercher le minimum dans la partie non-triée du tableau à la première
itération il est nécessaire d’effectuer N-1 comparaisons, à la deuxième itération – N-2 etc..
T ( N ) = N − 1 + N − 2 + ... + 1 = N ( N − 1) / 2
2.3. En utilisant le parcours de l’arbre en ordre préfixe, écrivez une fonction récursive de
calcul de la profondeur d’un sommet n en langage ExAlgo.
La signature de la fonction est :
Code en ExAlgo
Début
Si n = r
alors
retourner prof
sinon
nbfils = NombreFils(r)
Si nbfils = 0
alors
retourner –1 ; { Traitement terminal }
sinon
Pour i = 1, …, nbfils faire
k = ProfondeurAux(Ième(ListeFils(r), i), n, prof +
1)
Si k ≠ -1
alors retourner k
Fin Si
Fin Pour
retourner –1 ; { Nécessaire si le sommet n n’est pas dans l’arbre
}
Fin Si
Fin Si
Fin ProfondeurAux