Vous êtes sur la page 1sur 6

Université de Yaoundé 1/Département d’Informatique INF M1/Année académique 2020-2021

INF4017 : Complexité et Algorithmique Avancée


Fiche de TD n◦ 1

Exercice 1: 12 points
1. Rappeler le principe du tri fusion et évaluer sa complexité. Quelle est la
complexité de cet algorithme si à chaque étape le vecteur à trier est divisé
en 3 puis les 3 sous-vecteurs (V1 , V2 , V3 ) une fois triés sont fusionnés en 2
temps c’est-à-dire : V ′ = V1 + V2 puis V = V ′ + V3 .
2. Soit un vecteur V de n entiers. Proposer un algorithme DPR de complexité
O(3n/2) pour déterminer le minimum et le maximum des éléments de V .
3. Un élément x est majoritaire dans un vecteur V de n éléments si son
nombre d’occurrences est supérieur à n/2. Proposer un algorithme DPR
qui retourne l’élément majoritaire d’un vecteur V de n entiers s’il existe
(l’algorithme retourne null sinon). Évaluer la complexité de l’algorithme.

Exercice 2: Tout le monde connaît la séquence de Fibonacci 1,1,2,3,5,8,13,21,...


définie par la récurrence :F (1) = 1 , F (2) = 1 et F (n) = F (n−1)+F (n−2)∀n > 2.
1. Écrire un algorithme récursif qui calcule F (n). Évaluer sa complexité.
2. Écrire un algorithme qui calcule F (n) en O(n).
3. On note V (n) = (F (n), F (n − 1))T un vecteur colonne à deux éléments et
F une matrice carrée (2 × 2). Chercher F telle que : V (n) =F×V (n − 1).
4. Montrer que la solution de cette équation de récurrence s’écrit V (n) =Fn−2 ×
V (2).
5. En déduire un algorithme de type DPR calculant F (n) pour tout n, et
prouver que sa complexité est O(log(n)) en terme de nombre d’opérations
arithmétiques.
6. Montrer par un cas particulier que cet algorithme d’élévation à la puissance
n n’est pas optimal. Prendre par exemple : n = 15.

Exercice 3: On veut effectuer le produit suivant M1 × M2 × ... × Mn où les Mi


(1 ≤ i ≤ n) sont des matrices de Li lignes et Ci colonnes de réels. On cherche un
algorithme pour déterminer le parenthèsage qui doit être utilisé pour effectuer le
plus petit nombre de multiplication de réels.
1. Soient M1 une matrice 3×4, M2 une matrice 4×6 et M3 une matrice 6×5.
Dans chacun des cas suivants, évaluer le nombre de multiplications de réels
effectué pour le calcul du produit M1 × M2 × M3 : (a) M1 × (M2 × M3 ),
(b) (M1 × M2 ) × M3 .
2. Sous quelle(s) condition(s) le produit M1 × M2 × ... × Mn peut être évalué.
3. Pourquoi le problème de détermination du meilleur parenthèsage est com-
binatoire ?

1
4. Une stratégie gloutonne est de commencer par les multiplications qui éli-
mine les grandes tailles (si l’on multiplie une matrice Li × Ci par une
matrice Lj × Cj avec Ci = Lj on obtient une matrice Li × Cj et Ci a été
éliminé). Donner un exemple qui montre que cette stratégie ne donne pas
la solution optimale.
5. Une autre stratégie gloutonne est d’effectuer les multiplications les plus
coûteuses en premier lieu ; c’est-à-dire multiplier à chaque étape les ma-
trices voisines Mi et Mj qui maximisent le nombre de multiplication Li ∗
Ci ∗ Cj . Donner un exemple qui montre que cette stratégie ne donne pas
la solution optimale.

Exercice 4: Soient n enregistrements de longueur variable stockés dans un fichier


à accès séquentiel. L’enregistrement ei est de longueur si . On suppose que le temps
d’accès au i-ème enregistrement est proportionnel à la somme des longueurs des
i premiers. Par exemple pour deux enregistrements e1 , e2 , s’ils sont stockés dans
l’ordre (e2 , e1 ), le temps d’accès à l’enregistrement e2 est c ∗ s2 , pour e1 , c’est
c ∗ (s2 + s1 ), c étant une constante.
Pn Pour chaque enregistrement i, on connaît la
fréquence d’accès, fi (on a i=1 fi = 1). Le temps moyen d’accès sera donc :

X
n X
j
M =c∗ (fσ(j) ∗ sσ(k) )
j=1 k=1

Par exemple pour deux enregistrements, si les enregistrements sont stockés dans
l’ordre (e2 , e1 ), le temps moyen est donc c ∗ (f2 ∗ s2 + f 1 ∗ (s2 + s1 )), soit
c(s2 + f1 ∗ s1 ). Proposer une méthode gloutonne de stockage qui donnera toujours
une temps moyen d’accès optimal. En entrée du problème on a : n le nombre
d’enregistrements, s1 , s2 , ..., sn les longueurs des enregistrements, f1 , f2 , ..., fn
les fréquences d’accès. En sortie l’algorithme doit retourner l’ordre de stockage
optimal, Pc’est-à-dire une
Pj permutation σ(1), ..., σ(n) des enregistrements telle que
n
M = c ∗ j=1 (fσ(j) ∗ k=1 sσ(k) ) soit minimal.

Exercice 5:
1. Une association cherche à assurer une permanence lors d’une journée.
Chaque adhérent donne l’intervalle de temps pour lequel il est disponible.
On suppose que l’union des intervalles de temps correspond à la journée,
i.e. qu’à tout moment un adhérent est disponible.
(a) Proposer un algorithme qui permet d’assurer la permanence en mobi-
lisant un minimum de personnes.
(b) Comment assurer la permanence en minimisant le temps maximum de
présence d’un adhérent ?
2. Pour colorier un graphe on peut utiliser les stratégies gloutonnes suivantes.
Stratégie 1 : prendre les sommets dans un ordre au hasard et leur at-
tribuer la plus petite couleur possible (en respectant les contraintes de
coloriage). Stratégie 2 : trier les sommets par degré décroissant ; prendre
les sommets dans cet ordre et leur attribuer la plus petite valeur possible.
En exhibant des contre-exemples montrer qu’aucune de ces stratégies ne
garantie l’optimum.

2
Exercice 6: On dispose de deux bases de données comportant chacune n enre-
gistrements. On suppose que chaque enregistrement est un entier et que les 2n
valeurs sont toutes distinctes. On veut déterminer l’élément médian parmi ces 2n
valeur (c’est-à-dire le n-ième plus petit élément). Pour accéder à un élément d’une
des base de donnée, il faut effectuer une requête sur la base concerné en lui four-
nissant comme paramètre un entier k ; la base de données retourne alors le k-ième
plus petit de ces éléments. Les requêtes étant coûteuses, pour résoudre le pro-
blème, on veut en effectuer le moins possible. Écrire un algorithme qui retourne
le médian des deux bases de données en effectuant au plus O(logn) requêtes.

Exercice 7: Voyageur de Commerce


Étant un graphe valué G = (V, E) . Le problème du voyageur de commerce
consiste, en partant d’un sommet donné, de trouver un cycle de poids minimum
passant par tous les sommets une et ne seule fois, et retournant au sommet
de départ. Sans perte de généralité, on identifie les n sommets par les entiers
{1, 2, ..., n} , et on suppose que le cycle commence au sommet 1. La distance
entre deux sommets i et j est notée par dij .
1. Soit donc D[i, S] la distance d’un plus court chemin partant de i , passant
par tous les points de S, une et seule fois, et se terminant au sommet 1.
Sachant que tout cycle est constitué d’une arrête {1, k} et d’un chemin
simple (partant de k et passant une et une seule fois par tous les sommets
de V − {1, k}), établir la relation qui lie D[i, S], dij et D[j, S − {j}].
2. En déduire l’équation de la solution optimale donnée par D[1, V − {1}].
3. Quelle est la valeur de D[i, ∅].
4. Quelles sont les dimensions de la table à construire pour stocker les résul-
tats des sous-problèmes ?
5. Déduire des questions précédentes un algorithme de programmation dy-
namique pour le problème du voyageur de commerce.

Exercice 8: Plus grand carré blanc


On considère le problème suivant : étant donné une image monochrome n × n,
déterminer le plus grand carré blanc, i.e. qui ne contient aucun point noir. L’on
considère comme sou-problème la détermination la taille P GCB(x, y) du plus
grand carré blanc dont le pixel en bas à droite a pour coordonnées (x, y).
L’observation suivante permet d’envisager la construction d’un algorithme de
programmation dynamique : un carré m × m de pixels C est blanc si et seulement
si
— le pixel en bas à droite de C est blanc ;
— Les trois carrés (m − 1) × (m − 1) en haut à gauche, en haut à droite et
en bas à gauche sont tous blancs.
La preuve de cette observation est donnée par la figure ci-dessous :
1. Que peut-on dire de P GCB(x, y) si le pixel (x, y) est noir ?
2. Que peut-on dire de P GCB(x, y) si (x, y) est blanc et dans la première
ligne en haut ou la première colonne à gauche un pixel est noir.
3. Que peut-on dire de P GCB(x, y) si (x, y) est blanc et ni dans la première
ligne en haut ni dans la première colonne à gauche on n’a de pixel noir.

3
4. Déduire des questions précédentes un algorithme de programmation dy-
namique pour le problème du plus grand carré blanc.

Exercice 9: On dispose d’un tableau d’entiers relatifs de taille n. On cherche à


déterminer la suite d’entrées consécutives du tableau dont la somme est maximale.
Par exemple, pour le tableau T = [5, 15, −30, 10, −5, 40, 10], la somme maximale
est 55 (somme des éléments [10, −5, 40, 10]). Dans un premier temps, on s’intéresse
uniquement à la valeur de la somme de cette sous-séquence.
1. Quelle est la sous-structure optimale dont on a besoin pour résoudre ce
problème ?
2. Caractériser (par une équation) cette sous-structure optimale.
3. En déduire la valeur de la somme maximale.
4. Écrire un algorithme de programmation dynamique pour calculer cette
somme.
5. Quelle est la complexité de cet algorithme ?
6. Modifier l’algorithme pour qu’il renvoie également les indices de début et
de fin de la somme. Sa complexité est-elle modifiée ?

Exercice 10: Soit s[1...n] un chaîne de caractères sans aucun espace (ex : Ilé-
taitunefoisuneprincesse...). On cherche à savoir si cette chaîne correspond à un
texte lisible dont on aurait effacé les espaces et le cas échéant, on veut pouvoir
reconstituer ce texte. Pour cela, on dispose d’un dictionnaire un peu particulier :
il s’agit d’une fonction qui, étant donné une chaîne de caractères t quelconque,
renvoie V RAI si t représente un mot correct et F AUX sinon. Dans un premier
temps, on cherche uniquement à savoir si s correspond à un texte valide.
1. Quelle est la sous-structure optimale dont on a besoin pour résoudre ce
problème ?
2. Caractériser (par une équation) cette sous-structure optimale.
3. Comment détermine-t-on si s correspond à un texte correct ?
4. Écrire un algorithme de programmation dynamique pour le faire.
5. Quelle est la complexité de cet algorithme ?
6. Modifier l’algorithme pour qu’il renvoie également les positions des es-
paces. Sa complexité est-elle modifiée ?

Exercice 11: On veut construire une tour la plus haute possible à partir de
différentes briques. On dispose de n types de briques et d’un nombre illimité de
briques de chaque type. Chaque brique de type i est un parallélépipède de taille
(xi , yi , zi ) et peut être orientée dans tous les sens, deux dimensions formant la base

4
et la troisième dimension formant la hauteur. Dans la construction de la tour,
une brique ne peut être placée au dessus d’une autre que si les deux dimensions
de la base de la brique du dessus sont strictement inférieures aux dimensions de
la base de la brique du dessous. Proposer un algorithme efficace pour construire
une tour de hauteur maximale.

Exercice 12: Soient x et y deux mots sur un alphabet, de longueurs respectives


m et n.On note d(x, y) le nombre minimal d’insertions ou de suppressions de
caractères pour passer de x à y. L’entier d(x, y) est appelé distance d’édition
entre les mots x et y. Par exemple, on peut passer de mines à mimes des deux
manières suivantes :
— mines → mies (suppression) → mimes (insertion)
— mines → mins (suppression) → mimns (insertion) → mimens (insertion)
→ mimes (suppression)

La première solution nécessite 2 insertions/suppressions, la seconde 4. Dans cet


exemple, d(mines, mimes) = 2.

On définit aussi la distance d’édition comme le nombre minimal d’insertions,


suppressions ou substitutions. On peut aussi donner des coûts différents à chaque
opération.La distance d’édition est utilisée dans de nombreux contextes (par
exemple les correcteurs d’orthographe des logiciels de traitement de texte).
1. Montrez que d établit bien une distance entre mots.
2. Montrez que |m − n| ≤ d(x, y) ≤ m + n.
3. Pour i ∈ {0, 1, 2, ..., m} et j ∈ {0, 1, 2, ..., n}, on note xi et yj les préfixes
de x et y de longueurs respectives i et j, avec la convention x0 = y0 = ǫ,
où ǫ est le mot vide. Quelles sont les valeurs de d(xi , y0 ) et d(x0 , yj ) ?
4. Soient i ∈ {1, ..., m} et j ∈ 1, ..., n. Montrez que : d(xi , yj ) = min {d(xi− , yj−1)+
2δi,j , d(xi−1 , yj ) + 1, d(xi , yj−1) + 1} où δi,j vaut 0 si la i-ème lettre de x et
la j-ème lettre de y sont identiques, et 1 sinon.
5. Estimez la complexité de l’algorithme récursif implémentant directement
l’équation précédente. On pourra raisonner sur deux mots de même lon-
gueur n. Remarquez que dans cet algorithme les mêmes calculs sont faits
plusieurs fois.
6. Déduisez de l’équation précédente un algorithme de calcul de d(x, y) tel
que le nombre d’opérations et l’occupation mémoire soient en O(mn).
7. Calculez d(ingenieur, igneneur).
8. Trouvez une suite d’opérations réalisant le nombre minimal d’opérations
dans le cas précédent.

Exercice 13: Vous avez décidé d’ouvrir une fabrique de bonbons. Vous envisagez
de produire deux types de bonbons :A et B, les deux composé uniquement de
sucre, de noix et de chocolat.A l’heure actuelle, vous avez en stock 100 kg de
sucre, 20 kg de noix, et 30 kg de chocolat. Le mélange utilisé pour faire B doit
contenir au moins 20% de noix. Le mélange utilisé pour préparer A doit contenir
au moins 10% de noix et 10% de chocolat. Chaque kilo de B peut être vendu

5
pour 25O Fcfa, et chaque kilo de A pour 200 Fcfa. Formuler un PL qui vous
permettra de maximiser vos revenus de vente. Rédiger en forme standard et en
forme canonique.

Exercice 14: Un fabricant de raquettes de tennis fait un bénéfice de 800 Fcfa sur
chaque raquette ordinaire et de 1500 Fcfa sur chaque grande raquette. Pour satis-
faire à la demande des vendeurs, la production journalière de raquettes ordinaires
devrait se situer entre 30 et 80, et la production journalière de grandes raquettes
entre 10 et 30. Pour maintenir une bonne qualité, le nombre de raquettes pro-
duites ne devrait dépasser 80 par jour. Combien de raquettes de chaque type
faudrait-il fabriquer quotidiennement pour réaliser un bénéfice maximum ?

Exercice 15: Un investisseur a deux activités d’épargne A et B au début d’une


période de 5 ans. Chaque Fcfa nvesti en A au début d’une année rapporte 1.40
Fcfa (soit un profit de 0.40 Fcfa) au bout de 2 ans, qu’il peut aussitôt réinvestir.
Chaque Fcfa investi en B au début d’une année rapporte 1.70 Fcfa au bout de 3
ans. Deux autres actions C et D peuvent être envisagées à l’avenir. Chaque Fcfa
investi en C au début de la seconde année rapporte 1.90 Fcfa à la fin de l’année
5. Pour l’action D, 1 Fcfa investi au début de l’année 5 rapporte 1.30 Fcfa à la
fin de cette même année. L’épargnant commence la période avec 60000 Fcfa et
souhaite connaître un plan d’épargne qui maximise la somme totale accumulée en
début de sixième année. Formuler ce problème comme un programme linéaire.

Exercice 16: Une usine peut fabriquer cinq produits P1 , P2 , P3 , P4 et P5 . L’usine


possède deux zones de travail : la zone A1 d’atelier et la zone A2 d’assemblage. Le
temps requis pour traiter une unité de produit Pj dans la zone de travail Ai est
pij (en heures), pour i = 1, 2 et j = 1, ..., 5. La capacité hebdomadaire (en heures)
de la zone de travail Ai est Ci . La société peut vendre tout ce qu’elle produit de Pj
au profit sj , pour j = 1, ..., 5. Le directeur de l’usine pense régulièrement à écrire
un programme linéaire pour maximiser ses profits, mais ne l’a jamais fait pour la
raison suivante : de l’expérience passée, il a observé que l’usine fonctionne mieux
quand au plus deux produits sont fabriqués ‘a la fois. Il croit que s’il utilise
la programmation linéaire, la solution optimale consistera ‘a produire tous les
cinq produits. Etes-vous d’accord avec lui ? Expliquez, en vous servant de vos
connaissances en programmation linéaire ?

Vous aimerez peut-être aussi