Vous êtes sur la page 1sur 2

INFO306 : Algorithmique et Complexité – Techniques avancées de

conception des algorithmes


Fiche de TD N° 1
Exercice 1 : Traitement des chaines de caractères
Ecrire et évaluer un algorithme naïf qui permet de vérifier si une chaine de caractère ch1 est une sous
chaine de ch2. L‟algorithme doit retourner toutes les indices de ch2 où débute ch1.
On considère une file constituée de caractères qui valent „a‟ ou „b‟, et terminée par „.‟
1. Donner l‟automate (tous les éléments) qui traite les caractères de la file et atteint un état de
satisfaction lorsqu‟il rencontre pour la première fois la chaîne „ababa‟
2. en notant w1w2…wm la chaîne à reconnaître, si on note qi, l‟état atteint après reconnaissance
du préfixe w1w2…wi de w1w2…wm
a) Comment sera noté l‟état initial ?
b) Vers quel état aller si à partir de qi, on lit wi+1 ?
3. Montrer que si à partir de qi, on lit un caractère x différent de wi+1, alors il faut aller dans
l‟état j, tel que w1w2…wj est le plus grand préfixe de w1w2…wix qui est aussi suffixe de
w1w2…wix.
4. Si l‟on travaille modulo q = 11, Exécuter l‟algorithme de Rabin-Karp et dire combien de fois
il manquera son coup quand il recherchera la chaîne de caractères P = 26 dans le texte T =
3141592653589793 ?

Exercice 2
Vous vous trouvez devant un paysan devant se rendre en ville pour vendre. Ce paysan dispose d‟un
ensemble de marchandises qu‟il aimerait emporter avec lui afin de vendre et résoudre ses problèmes.
Chaque marchandise a un poids et a une valeur. Sachant que ce paysan ne peut pas transporter avec lui
plus d‟un certain poids (25Kg par exemple), il aimerait également avoir le plus grand gain possible.
(a) Transformer le problème de ce paysan en un problème algorithmique connu et donner sa définition
formelle.
(b) Donner deux versions de ce problème, et décrire chacune d‟elles.
(c) Pour chacune des versions (question précédentes), donner un algorithme glouton pour la résoudre.

Exercice 3
Dans un gymnase doivent se dérouler une série d‟épreuves. Les épreuves ne sont pas seulement
caractérisées par leurs durées : chaque épreuve est caractérisée par une date de début di et une date de
fin fi. On souhaite “caser” le plus possible d‟épreuves, deux épreuves ne pouvant avoir lieu en même
temps (leurs intervalles de temps doivent être disjoints).
Glouton 1. On trie les épreuves par durée croissante, on choisit la plus courte, puis la plus courte parmi
celles qui lui sont compatibles, puis . . . Ce choix mène-t-il au déroulement d‟un nombre d‟épreuves
maximal ?
Glouton 2. On trie les événements par dates de commencement croissantes et on gloutonne : on choisit
l‟événement commençant le plus tôt, puis le plus tôt parmi les événements compatibles. Ce choix
mène-t-il au déroulement d‟un nombre d‟épreuves maximal ?
Glouton 3. On trie cette fois les événements par nombre d‟intersections croissant : on choisit d‟abord
celui qui intersecte le moins d‟événements, puis. . . Ce choix mène-t-il au déroulement d‟un nombre
d‟épreuves maximal ?
Glouton 4. On trie les événements par dates de fin croissantes et on gloutonne : on choisit l‟épreuve se
terminant au plus tôt, puis l‟épreuve se terminant au plus tôt parmi celles qui sont compatibles à la
première. . . Ce choix mène-t-il au déroulement d‟un nombre d‟épreuves maximal ?

Exercice 4 : Pièces de monnaies + algorithme glouton


On considère le problème où l'on doit rendre la monnaie pour x euros avec le moins possible de pièces
de monnaies.
1. On a des pièces de 1, 2, 5, 10. Ecrire l'algorithme glouton qui donne une solution optimale
2. On dispose d'un ensemble de pièces c0; c1; c2; … ; ck pour c > 1, et k≥ 1. écrire l'algorithme
glouton qui donne la solution optimale.
3. Donner un ensemble de pièces tel que l'algorithme glouton ne retourne pas une solution
optimale.
4. Donner un ensemble de pièces tel que l'algorithme glouton ne trouve pas de solution.
5. Donne un algorithme qui retourne une solution optimale pour n'importe quel ensemble de
pièces.

Exercice 5
Étant donné un ensemble de n nombres, répartissez les en 2 sous-ensembles tels que la somme des
éléments du premier soit égal à la somme des éléments du second.
1. Proposez des algorithmes gloutons pour résoudre ce problème.
2. Appliquez les aux ensembles suivants : {2; 10; 3; 8; 5; 7; 9; 5; 3; 2} et {771; 121; 281; 854;
885; 734; 486; 1003; 83; 62}

Exercice 6 : codage de Huffman + algorithme glouton


Le codage d‟une chaine de caractères par la méthode de Huffman peut être à longueur fixe ou à
longueur variable. Le principe repose sur la création d'un arbre composé de nœuds où les feuilles
représentent les caractères composant la chaine. Soit à coder la chaine CH = « RECOMPENSER LE
TRAVAIL ».

1. Pour le codage à longueur à fixe, l‟arbre ne peut pas être construit. Il suffit de trouver une
configuration binaire pour chaque caractère. Ecrire un algorithme qui prend en entrée une
chaine de caractères et met en sortie le codage (Huffman) des caractères de cette chaine. Quels
sont les codes des caractères de CH ?
2. Pour le codage à longueur variable, il faut construire l‟arbre de Huffman par une technique
gloutonne.
a. Ecrire une procédure qui prend en entrée une chaine de caractères, et construit l‟arbre de
Huffman pour le codage de ses caractères. Appliquer cet algorithme pour construire
l‟arbre de codage de la chaine CH.
NB : utiliser les opérations écrites pour la file de priorité
b. Ecrire une procédure qui prend en entrée un arbre de Huffman, et affiche le code de
chaque caractère. Donner le code de chaque caractère de CH.
c. Donner la formule permettant de calculer la taille de l‟espace occupé par le code de
Huffman d‟une chaine de caractères
d. Le codage de Huffman est préfixe, écrire l‟algorithme qui permet faire l‟inverse du codage
(à partir du code binaire de Huffman de la chaine et du code de chaque caractère)

Comparer les deux approches (à longueur fixe et à longueur variable) en temps de construction du
code et en espace mémoire.

Vous aimerez peut-être aussi