12/03/2013 PLAN DU COURS • • • • • • • • • • • • • Introduction au langage C Notions de compilation Variables, types, constantes, Tableaux, opérateurs Entrées sorties de base Structures de contrôle Algorithmes de recherche Algorithmes de Tri –Insertion-Fusion Les pointeurs Procédures et fonctions les types composés Allocation dynamique Listes Chaînées MAP - UNS 101 ALGORITHME DE RECHERCHE • Objectif : Rechercher une information dans un tableau • Méthode : séquentielle • Soit T un tableau de N éléments et val l’élément cherché • parcours du tableau à partir du premier élément (T[0]) • Arrêt quand élément trouvé ou si fin de tableau (T[n-1]) • Complexité : • linéaire de l’ordre de n. • Pire cas : parcourt de tout le tableau MAP - UNS 102 1 12/03/2013 RECHERCHE SÉQUENTIELLE Algorithme recherche_sequentielle {Recherche le premier indice où se trouve la valeur val parmi les N données du tableau tab; affiche l’indice si la valeur est trouvée. } variables : Début T [0, N-1], val entier n, val, indice : entier indice ←0 tant que ( val <> T[indice] && indice < N-1) faire indice ←indice + 1 ftq 7 si T[indice] = val alors afficher( " l'élément se trouve en : » indice); sinon afficher( « Elément non présent " ); fsi 1 15 8 2 Fin MAP - UNS 103 ALGORITHME DE RECHERCHE • Objectif : Rechercher une information dans un tableau trié • Méthode : dichotomique ou « diviser pour régner » • • • • Soit T un tableau de N éléments et val l’élément cherché T est trié Sinon effectuer un prétraitement de tri. Comparer val avec l’élément u milieu du tableau T. • Si c’est le même => trouvé • sinon on recommence sur la première moitié ou la seconde selon que val est < à valmid ou val > valmid • Arrêt quand élément trouvé ou si fin de tableau (T[indice-1]) • Complexité : • T(n) nombre d’opérations sur un tableau de taille n • T(n) satisfait l’équation de récurrence T(n) = T(n/2)+1 MAP - UNS 104 2 12/03/2013 RECHERCHE DICHOTOMIQUE Algorithme recherche_dichotomique {Recherche le premier indice où se trouve la valeur val en utilisant la stratégie diviser pour régner } variables T [0, N-1] , val entier lnf, Sup, N, Mi : entier Début Saisir (val) Inf ← 0 Sup ← N-1 Mi ← (Inf + Sup)/2 tant que ( val <> T[Mi] && Inf <= Sup) faire si val < T[Mi] alors Sup = Mid - 1 sinon Inf = Mid + 1 fsi Mi ← (Inf + Sup)/2 ftq si T[Mi] = val alors afficher( " l'élément se trouve en : » Mi); sinon afficher( « Elément non présent " ); fsi Fin MAP - UNS 105 PLAN DU COURS • • • • • • • • • • • • • Introduction au langage C Notions de compilation Variables, types, constantes, Tableaux, opérateurs Entrées sorties de base Structures de contrôle Algorithmes de recherche Algorithmes de Tri –Insertion-Fusion Les pointeurs Procédures et fonctions les types composés Allocation dynamique Listes Chaînées MAP - UNS 106 3 12/03/2013 ALGORITHMES DE TRI • Objectif : Etant donné une suite de N nombres de la ranger par ordre croissant (ou décroissant) • Différents algorithmes • Tri par sélection • Tri se fait en espace constant • Peu économe en temps (2 boucles for imbriquées ) • • • Boucle interne fait N-1 opérations Boucle externe fait N-1 à itération 1, N-2 (itération 2) … Complexité 2*(N-1)+(N-2) +(N-3) …+ 1 = (N+1)*N+N! ≈ N2 • Tri à bulles • Peu économe en temps (2 boucles for imbriquées ) • Complexité ≈ N2 • Tri rapide • Econome en temps • Complexité ≈ N*Log(N) • Algorithme récursif MAP - UNS 107 ALGORITHME DE TRI • Objectif : Etant donné une suite de N nombres de la ranger par ordre croissant (ou décroissant) • Méthode : Tri par sélection • Soit T un tableau de N éléments • Rechercher le plus petit élément parmi les N et on l’échange à la fin avec le 1er 7 8 9 2 0 • Puis recherche du plus petit parmi les N-1 éléments restant et échange avec le 2ème 0 8 9 2 7 • … parmi N-k+1 éléments restants échange avec le Kième 0 2 9 8 7 MAP - UNS 0 2 7 8 9 108 4 12/03/2013 TRI PAR SELECTION Algorithme tri_selection { Ranger par ordre croissant (ou décroissant) une suite de N nombres rangés dans un tableau T. } variables tab : Début tableau [0, N-1] de entier N, i, j, indiceMin, ValMin : entier 7 8 pour i = 0 à N-2 faire indiceMin ← i i=0 ValMin ← T[i] pour j = i +1 à N-1 faire si T[j] < ValMin alors indiceMin ← j ValMin ← T[j] fsi fpour T[indiceMin] ← T[i] { Echange des deux valeurs } T[i] ← ValMin fpour 9 2 0 8 9 i=1 7 j=1 2 j=2 j=3 j=4 indiceMin=0 ValMin=7 indiceMin=3 ValMin=2 IndiceMin=4 ValMin=0 T[0]=0 T[4]=7 MAP - UNS Fin 0 109 ALGORITHME DE TRI • Objectif : faire remonter les plus grandes valeurs en haut de tableau • Méthode : Tri à bulle • Soit T un tableau de N éléments • Comparer 1er élément avec 2ème . Si 1er >2ème , échanger les deux éléments 5 • Comparer 2ème 1 1 4 élément avec 5 4 2 3ème 2 8 . Si 2er >3ème , échanger les deux éléments 8 • … comparer N-2ième avec N-1 ième. Si N-2 ième > N-1 ième, échanger les deux éléments. 1 4 2 5 8 • Recommencer à partir du début tant que vous avez opéré au moins à un échange MAP - UNS 110 5 12/03/2013 TRI À BULLE Algorithme tri_à_bulle { faire remonter les plus grandes valeurs en haut d’un tableau T de N éléments. } variables tab : tableau [0, N-1] de entier N, i, j, temp : entier nouvel_echange : booleen Début répéter nouvel_echange ←faux pour i = 0 à N-1 faire si T[ i ] > T[i+1] alors temp ← T[ i +1] T[i+1 ] ← T[ i ] T[ i ] ← temp nouvel_echange ← vrai fsi fpour tant que nouvel_echange ==vrai Fin MAP - UNS 111 ALGORITHME D’INSERTION POSITION P • Objectif : Ajouter un élément dans un tableau trié ou pas. Insertion n’est possible que si il reste de la place dans le tableau. L’Insertion est un décalage à droite des éléments du tableau • Méthode : Insertion Soit T un tableau de taille de N éléments, On insère un élément V à un position p • Variable k positionnée en fin de tableau 5 1 4 2 8 p • Copie de T[k] dans T[k+1] tant que k>=P 5 1 4 k 2 8 p 5 1 4 k 2 2 8 4 2 8 4 2 p 5 • Qd k=p ranger la valeur v en T[k] • Incrémenter N 1 4 8 k p k 5 MAP - UNS 1 v p 8 112 6 12/03/2013 INSERTION À UNE POSITION P Algorithme INSERTION_POSITION_P { Insérer une valeur v à une position p dans un tableau T de N éléments et de taille S } Constantes S= 20 variables T : tableau [0, S-1] de entier N, p , v, : entier Début { Code d’initialisation des N éléments du tableau } Afficher (« entrez val à insérer et position p} Saisir (p); Saisir(v); si N < S alors pour k= N-1 à p pas -1 faire T[k+1] ← T[k] fpour T[p] ← v N ← N+1 sinon Afficher («Insertion impossible ») fsi MAP - UNS 113 Fin ALGORITHME D’INSERTION DANS TABLEAU TRIÉ • Objectif : Ajouter un élément dans un tableau trié ou pas. Insertion n’est possible que si il reste de la place dans le tableau. L’Insertion est un décalage à droite des éléments du tableau • Méthode : Insertion Soit T un tableau de taille de N éléments triés , On insère un élément V • Variable k positionnée en fin de tableau 1 2 4 5 8 • Copie de T[k] dans T[k+1] • tant que k>=0 && V>T[k] k 1 2 4 5 8 8 k 1 2 4 5 5 8 4 5 8 4 5 8 k • Qd T[k]<v ranger la valeur v en T[k+1] • Incrémenter N 1 2 4 k 1 MAP - UNS 2 v k 114 7 12/03/2013 INSERTION DANS UN TABLEAU TRIÉ Algorithme INSERTION_V_dans_Tableau-Trié { Insérer une valeur v à une position p dans un tableau T de N éléments et de taille S rangé par ordre croissant} Constantes S= 20 variables T : tableau [0, S-1] de entier N, p , v, : entier Début { Code d’initialisation des N éléments du tableau } Afficher (« entrez val à insérer} Saisir(v); si N < S alors tant que k>= 0 && T[k] > val faire T[k+1] ← T[k] k ← k -1 fpour T[k+1] ← v N ← N+1 sinon Afficher («Insertion impossible ») MAP - UNS 115 fsi Fin ALGORITHME DE SUPPRESSION POSITION P • Objectif : Supprimer un élément dans un tableau trié ou pas. La suppression est un décalage à gauche des éléments du tableau • Méthode : Suppression Soit T un tableau de taille de N éléments, On supprime un élément V à un position p • Variable k positionnée à p+1 5 1 4 2 8 p • Copie de T[k] dans T[k-1] tant que k<N 5 1 2 k 2 p 5 1 2 k 8 p 8 8 k • Décrémenter N MAP - UNS 8 12/03/2013 SUPPRESSION À UNE POSITION P Algorithme SUPPRESSION_POSITION_P { Supprimer l’élément à une position p dans un tableau T de N éléments et de taille S } Constantes S= 20 variables T : tableau [0, S-1] de entier N, p , v, : entier Début { Code d’initialisation des N éléments du tableau } Afficher (« entrez position p de l’élément à supprimer ») Saisir (p); pour k= p+1 à N – 1 faire T[k-1] ← T[k] fpour N ← N-1 Fin MAP - UNS 117 SUPPRESSION D’UNE VALEUR V Algorithme SUPPRESSION_VALEUR_V { Supprimer une valeur v dans un tableau T de N éléments et de taille S } variables T : tableau [0, S-1] de entier N, p=0 , v, k : entier Début { Code d’initialisation des N éléments du tableau } Afficher (« entrez la valeur à supprimer ») Saisir (v); tant que T[p] <> val && p < N-1 faire p ← p +1 ftq si T[p] == val alors pour k= p+1 à N -1 faire T[k-1] ← T[k] fpour N ← N-1 sinon Afficher (« valeur non trouvée ») fsi MAP - UNS Fin 118 9