PROSIT retour Prosit Retour : Quelle galère Rôle : 1 Scribe : Mathieu S. Intendant : amandine Secrétaire : Joris Animateur : Mathieu (gné gné) Mots-clés : - Algorithme : On désigne par algorithmique ou algorithmie l’ensemble des activités logiques qui relèvent des algorithmes. Dans le cas général, l’algorithmique s’effectue au moyen de calculs. - Classeur : HS. Algorithme de Tri : En informatique ou en mathématiques, un algorithme de tri est un algorithme qui permet d'organiser une collection d'objets selon un ordre déterminé. - Automate : Un automate est un disposotif se comportant de manière automatique c’est a dire sans intervention humaine. Algorithmique Page 1 PROSIT retour - Programme informatique : Un programme informatique est une succession d'instructions exécutable par l'ordinateur. - Données : Informations utilisées par un logiciel. Elles peuvent être créées par l'utilisateur ou par le programme lui-même. Axes de recherche : Etudier les algorithmes de trie et leurs contextes Algorithme de permutation échanger(tableau T, entier i, entier j) début entier M M<-T(i) T(i)<-T(j) T(j)<-M fin Deux catégories de trie : - Elémentaire Avance Algorithmique Page 2 2 PROSIT retour Algorithme de tri à bulle tri_bulle(tableau T) debut entier longueur, i booleen inversion longueur<-taille(T) 3 faire inversion=faux pour i=0 à (longueur-1) si T(i)>T(i+1) echanger(T,i,i+1) inversion<-vrai fin si fin pour tantque inversion fin Algorithme récursif ! Algorithmique Page 3 PROSIT retour Algorithme de tri par séléction 4 tri_selection(tableau T) debut entier longueur, maxi, i longueur<-taille(T) tantque(longueur>0) faire //recherche de la position du plus grand élément dans le tableau non encore trié maxi<-0; pour i de 1 à (longueur-1) faire si T(i)>T(maxi) alors maxi<-i fin si fin pour //echange du plus grand élément avec le dernier echanger(T,maxi,longueur-1) //traitement du reste du tableau longueur<-longueur-1 fin tantque fin Algorithmique Page 4 PROSIT retour Algorithme de Tri par insertion tri_insertion(tableau T) debut entier longueur, i, memoire, compteur; booleen marqueur; 5 longueur<-taille(T) pour i=1 à (longueur-1) faire memoire<-T(i) //valeur à insérer au tour i compteur<-(i-1) faire marqueur=faux //on n'a pas fait de décalage si T(compteur)>memoire alors T(compteur+1)<-T(compteur) //décalage des plus grandes valeurs du tableau compteur<-compteur-1 marqueur=vrai //on vient de faire un décalage fin si si (compteur<0) alors //on a atteint la premiére valeur du tableau marqueur=faux //il n'y a plus de décalages possibles fin si tantque marqueur T(compteur+1)<-memoire //affectation de la valeur à insérer dans la bonne case fin pour fin Algorithmique Page 5 PROSIT retour Algorithme de tri Shell tri_shell(tableau T) début entier longueur, n, i, j, valeur; 6 longueur<-taille(T) n<-0; tantque n<longueur faire n<-(3*n+1) //calcul du plus grand décalage possible fin tantque tantque n != 0 faire //tant que le décalage possible est non nul n<-(n/3) pour i=n à longueur-1 faire valeur<-T(i) //valeur à décaler (éventuellement) j<-i tantque (j>n-1) et (T(j-n)>valeur) T(j)<-T(j-n) //décalage des valeurs avec un pas de n j<-j-n fin tantque T(j)<-valeur fin pour fin tantque fin Algorithmique Page 6 PROSIT retour Algorithme de tri fusion Le tri fusion est construit suivant la stratégie "diviser pour régner", en anglais "divide and conquer". Le principe de base de la stratégie "diviser pour régner" est que pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires. Une fois chaque petit problème résolu, il n'y a plus qu'à combiner les différentes solutions pour résoudre le problème global. La méthode "diviser pour régner" est tout à fait applicable au problème de tri : plutôt que de trier le tableau complet, il est préférable de trier deux sous tableaux de taille égale, puis de fusionner les résultats. 7 Algorithme de tri DICHOTOMIQUE Trouve une valeur pivot, ensuite il tri les valeurs de part et d’autres du pivot ! Algorithme de tri Arbre binaire Pas utilisée OSEF ! Algorithme de tri indirect Pas utilisée OSEF ! Algorithme de tri casier Que pour les entiers Algorithme de tri Batcher Trop chaud on zappe ! Algorithme de recherche Recherche linéaire ou séquentiel //plus simple, mais très long ! Fonction : Recherche_Linéaire( tableau T[], entier v) : entier debut //Sortie : 1ère position de v dans T ou (-1) si v n’est pas dans T Entier Pos <-- 0 Tant que pos < taille T et T(pos) != v faire Pos <-- pos + 1 fin tant que si pos >= taille T alors retourner -1 Algorithmique Page 7 PROSIT retour sinon retourner pos fin si fin Recherche dichotomique Le tableau doit avoir été trié !!! Divise le tableau en sous tableau ! Principe : on regarde l'élément au milieu de la liste. - si sa clé est égale à la valeur cherchée, c'est gagné - si sa clé est inférieure à la clé cherchée, il ne reste à traiter que la moitié droite de la liste - si sa clé est supérieure à la clé cherchée, il ne reste à traiter que la moitié gauche de la liste On continue ainsi la recherche en diminuant à chaque fois de moitié le nombre d'éléments de la liste restant à traiter. Remarque : cette méthode n'est pas du tout adaptée à une implémentation chaînée puisqu'il n'y a pas d'accès direct au k-ème élément. Version récursive : Fonction : Recherche (element X,liste L) : booléen début retourner Recherche-aux(X, L, 1, longueur(L)) fin Fonction : Recherche-aux(élément X, liste L, entier début, entier fin) :booléen Entier rang milieu, élément e début si début =< fin alors milieu <-(fin+début)/ 2 e <- ieme(milieu, L) si éléments_égaux(X, e) alors // on a trouve l'élément retourner VRAI sinon si element_inferieur(X, e) alors // il est peut être dans la moitie gauche retourner Recherche-aux(X,L, début ,milieu-1) sinon // il est peut être dans la moitie droite retourner Recherche-aux(X, L, milieu+1, fin) finsi finsi sinon // la liste a traiter est vide retourner FAUX finsi fin Algorithmique Page 8 8 PROSIT retour Recherche auto-adaptive //tableau trié Spécifique à un domaine On zappe ! Recherche par interpolation //tableau trié Spécifique à un domaine On zappe ! Méthode de Hachage // tableau trié Spécifique à un domaine 9 On zappe ! La théorie des automates Machine prenant en entrée des propositions quelconques et ressortant une valeur en sortie (Vrai ou Faux) en fonction de ce qu’attend la machine en sortie (évaluation). 1+1= 3 FAUX calcul (sémantique) mais VRAI syntaxiquement 1+1=2 VRAI calcul et VRAI syntaxiquement ++1+3=4 Faux syntaxiquement, VRAI calcul / ! \ A revoir les automates déterministe et non-déterministe ! / ! \ Hypothèses : Hey baby ! - Vrai. Il existe différent algorithme de tri/recherche Vrai. Il faut un tableau pour effectuer un tri/recherche (pas obligatoire !) Faux. L’algorithme de tri dépend de l’algorithme de recherche Faux. Un algo. Fonctionne comme un automate Vrai. L’algo de tri/recherche varie selon les données. La petite brise la glace. Gné ? Google ils aiment bien traduire ! oO Algorithmique Page 9