Département d’Informatique -------------– Faculté des Sciences –------------------------ UFAS1
Algorithmique Avancée et Complexité
Série 02 Exercice 01 : Quicksort revisité Donnez une exécution de l’algorithme Quicksort sur la liste L = (14,11,7,5,41,9,2,11,6,3) Ecrire une procédure de partition partition(A, p, r) d’un tableau A [1...n] sur place en prenant comme pivot le dernier élément de A ; p et r sont les bornes du tableau A. Estimer sa complexité. Exécuter votre procédure sur la liste L. Exercice 02 Soit deux matrices X et Y de taille NxN; Pour calculer le produit XY on commence par partitionner les deux matrices en 9 blocs de taille N/3xN/3. Donnez la relation de récurrence qui définit la complexité de cette méthode et la résoudre. Exercice 03 : Plus Grande Somme Soit une liste L de n entiers relatifs. On cherche une sous-liste de L dont la somme des éléments soit maximale. 𝒋 Autrement dit, on cherche un couple d’entiers i et j, 1 ≤ i ≤ j ≤ n tel que PGS= ∑𝒌=𝒊 𝑨[𝒌]soit maximale. Exemple dans la liste L= (2, -3, 2,-1, 10, -5, 4) l’intervalle de la plus grande somme PGS = 11 est définie par début = 3 et fin = 5.
Proposez un algorithme itératif simple qui calcule le PGS. Calculer sa complexité.
Proposez un algorithme plus efficace en (n2). Exercice 04 : Elément majoritaire On appelle élément majoritaire d’une liste l’élément dont le nombre d’occurrences est strictement supérieur à la moitié de la taille de la liste, s’il existe. Par exemple 5 est l’élément majoritaire de la liste L=(12,5,7,5,9,5,5) Écrivez un algorithme Occurences(L,X) qui renvoie le nombre d’occurrences de la valeur X dans la liste L. Quelle est complexité de votre algorithme ? Utilisez Occurences(L,X) pour écrire un algorithme Majoritaire(L) qui renvoie l’élément majoritaire de la liste L s’il existe et 0 sinon. Quelle est la complexité de votre algorithme ? Donner un autre algorithme récursif basé sur un découpage de L en deux listes de même taille. Quelle est sa complexité ? Exercice 05 : string matching Soit un texte T[1..n] et un motif P[1..m] ; les éléments de T et P sont des caractères d’un alphabet Σ. Le problème « string matching » consiste à déterminer toutes les occurrences du motif P dans le texte T. Exemple motif P = ABABC sujet T= ABABABCCABCABABCA. Ce problème trouve de nombreuses applications dans les éditeurs de texte. Construire un algorithme qui résout ce problème. Déterminer la complexité de votre algorithme en fonction de la taille du motif m et du sujet n. Exercice 06 : Plus court chemin On considère le graphe G=(V,E,w) sans cycle, orienté et valué ci-dessous. Exécuter l’algorithme du plus court chemin en utilisant le paradigme de programmation dynamique défini par l’algorithme récursif : δ(s,s) = 0 et δ(s, v) = Min{ δ(s,u) + w(u,v)} ; (u,v) ϵ E
Exercice 07 Appliquer l’algorithme qui calcule la plus longue séquence palindromique vue en cours au mot CHARACTER.