Vous êtes sur la page 1sur 2

IUT des Pays de lAdour - RT2

Informatique - Module IC2 - Algorithmique Avance

Langage C
Sujet 00b : Recherche, insertion, suppression et fusion dans les tableaux

Recherche dun lment dans un tableau non tri

Dans cette premire partie, nous ne faisons aucune hypothse quant lordre des valeurs dans le tableau
( non tri). Pour rechercher un lment dans un tel tableau, il ny a que la mthode "brutale", cest--dire
parcourir tout le tableau jusqu trouver la valeur. Si on arrive la fin du tableau, cest quelle ny apparat
pas.
1. Ecrire la fonction RechElt(N,Tab,Val) qui retourne le rang de la premire occurence de la valeur relle
Val dans le tableau Tab (contenant N valeurs significatives), ou -1 si Val est absente.
2. Ecrire la fonction RechOcc(N,Tab,ID,Val) qui retourne le rang de la premire occurence de la valeur
relle Val dans le tableau Tab considr partir du rang ID (ou -1 si Val est absente).
3. Ecrire la fonction NbOcc(N,Tab,Val) qui retourne le nombre doccurences de la valeur Val dans le
tableau Tab.

Recherche dun lment dans un tableau tri (par dichotomie)

Le principe de cette mthode de recherche dune valeur Val dans un tableau consiste profiter du fait
que celui-ci est dj tri. Puisque le tableau Tab est tri, la comparaison de Val avec un lment quelconque
de Tab permet dliminer une partie du tableau o la recherche sera inutile. Par exemple, si nous avons
Val<Tab[10], il est inutile de rechercher Val parmi les valeurs Tab[i] avec i>10 puisque toutes ces valeurs
sont elles-mmes suprieures Tab[10] (cf. tableau tri). Nous pouvons ensuite continuer la recherche sur
la partie restante du tableau.
Tout sous-tableau de recherche sera dtermin par ses indices extrmes qui permettront de calculer lindice
du milieu (de ce sous-tableau). La comparaison se fera sur la valeur de cet lment mdian et permettra de
dterminer un nouveau sous-tableau rduit pour la recherche. En prenant le milieu, nous supprimons chaque
itration la moiti des valeurs restant tester. Si nous avons N valeurs dans le tableau initial, il nous suffira
de faire plus ou moins log2 (N ) tests pour savoir si notre valeur est prsente ou non. Par exemple, si N=1024,
alors 10 tests seulement seront ncessaires ( comparer aux N tests de lexercice prcdent avec un tableau
non tri si la valeur ny apparat pas).
4. Ecrire la fonction Dichot(N,Tab,Val) qui retourne le rang de la premire occurence de la valeur relle
Val dans le tableau Tab (contenant N valeurs significatives), ou -1 si Val est absente.

Insertion dun lment dans un tableau tri

Nous supposons que le tableau Tab est tri par ordre croissant. Lobjectif est dinsrer une nouvelle
valeur Val dans le tableau Tab tout en le conservant ordonn. Les probabilits font que cette valeur devra

gnralement tre insre au milieu des autres valeurs. Du coup, il faudra procder des dcalages de manire
"lui faire de la place".
La mthode consiste, en partant du dernier lment du tableau (donc la valeur maximale, puisque le
tableau est tri), comparer Val chaque lment de Tab. Dans le cas o Val est infrieure llment
courant, on dcale celui-ci dune position "vers la droite". Dans le cas contraire, on effectue linsertion en
plaant Val dans la dernire position libre et on arrte le processus.
5. Ecrire la fonction Inserer(N,Tab,Val) qui insre llment Val sa bonne place dans le tableau
ordonn Tab et met jour N (et oui, on a une valeur de plus. . .).

Suppression dun lment dans un tableau tri


6. Ecrire la fonction Supprimer(N,Tab,Rang) qui supprime llment prsent la position Rang, restructure Tab par un dcalage vers la gauche et met jour N.

Fusion de deux tableaux tris

Maintenant que vous tes expriments dans la manipulation de tableaux, nous allons faire un peu plus
compliqu. Dans cet exercice, nous considrons deux tableaux tris Tab1 et Tab2 contenant respectivement
N1 et N2 valeurs relles. Nous voulons regrouper toutes ces valeurs dans un troisime tableau Tab qui devra
lui aussi tre tri. Nous ne vous donnons aucune indication quant la mthode utiliser. Cest vous de
rflchir et de nous en fournir une (pense intelligemment).
7. Ecrire la fonction Fusionner(N1,Tab1,N2,Tab2,N,Tab) qui regroupe toutes les valeurs de Tab1 et
Tab2 dans le tableau Tab et met jour N (normalement N = N 1 + N 2 . . .).
8. Ecrire la fonction FusionnerFiltrer(N1,Tab1,N2,Tab2,N,Tab) qui regroupe toutes les valeurs de Tab1
et Tab2 dans le tableau Tab en supprimant tous les doublons. Autrement dit, si une valeur apparat
plusieurs fois dans Tab1 et/ou Tab2, elle ne devra apparatre quune seule fois dans Tab. Cette fonction
devra galement mettre jour N (normalement N N 1 + N 2 . . .).

Oprations ensemblistes

Si vous en arrivez l avant la fin du TP, voici quelques ides de travail supplmentaires pour vous entraner
plutt que daller surfer sur internet !
Supposons que nous ayons deux tableaux tris Tab1 et Tab2 contenant respectivement N1 et N2 valeurs
relles. Nous voulons crire plusieurs fonctions prenant ces deux tableaux en paramtre pour en gnrer un
troisime qui contiendra, selon la fonction, lunion, lintersection, la diffrence des deux premiers.
9. T ab = T ab1 T ab2
Ecrire la fonction Union(N1,Tab1,N2,Tab2,N,Tab) qui calcule dans Tab lunion
des ensembles de valeurs Tab1 et Tab2 (et met jour N. . .).
10. T ab = T ab1 T ab2
Ecrire la fonction Intersection(N1,Tab1,N2,Tab2,N,Tab) qui calcule dans
Tab lintersection des ensembles de valeurs Tab1 et Tab2 (et met jour N. . .).
11. T ab = T ab1 T ab2
Ecrire la fonction Difference(N1,Tab1,N2,Tab2,N,Tab) qui calcule dans Tab
la diffrence des ensembles de valeurs Tab1 et Tab2 (et met jour N. . .).

Vous aimerez peut-être aussi