Devoir maison d`algorithmique L3 Informatique – ENS Cachan

publicité
Devoir maison d’algorithmique
L3 Informatique – ENS Cachan
Thomas Chatain
à rendre au plus tard le 2 novembre 2015
Première partie
On considère le tri d’ensembles de mots du type des mots de langue naturelle :
les mots n’ont pas tous la même longueur et on considère l’ordre alphabétique,
comme dans le dictionnaire. Cependant un mot est ici n’importe quelle suite
finie de lettres, les lettres étant choisies dans l’alphabet {a, . . . , z}. Un mot M
est représenté sous forme d’un tableau de lettres. On accède en tant constant à
la taille |M | du mot et à la ie lettre M [i].
Question 1
Définir formellement l’ordre alphabétique, puis écrire un algorithme itératif
et un algorithme récursif qui comparent deux mots et retournent <, > ou =.
Prouver leur terminaison et leur correction (preuves de Hoare). Donner leur
complexité en temps et en espace.
Question 2
Quelle est la complexité en temps d’une procédure de tri fusion d’un tableau de n mots qui utilise l’une des fonctions de comparaison de la question
précédente ? On suppose que les accès au tableau se font en temps constant,
ainsi que les opérations arithmétiques sur les entiers (pour manipuler les indices
des tableaux).
Question 3
On suppose dans cette question que tous les mots ont au moins deux lettres.
De plus, dans un dictionnaire français ou dans un texte en français, les mots
commençant par la lettre a ou c sont beaucoup plus fréquents que les mots
commençant par k ou w.
Donner un minorant du nombre de comparaisons de lettres effectuées en
moyenne par l’un des algorithmes de la question 1 lorsqu’il est appliqué sur
deux mots tirés aléatoirement et de manière indépendante, sachant que chaque
choix retourne avec probabilité pa un mot commençant par la lettre a, avec
probabilité pb un mot commençant par la lettre b. . .
1
Question 4
On tente une nouvelle procédure pour trier un tableau de n mots. Donner un
algorithme qui permute ce tableau de telle sorte que tous les mots commençant
par la lettre a se retrouvent placés en tête (mais pas forcément dans l’ordre),
suivis par tous les mots commençant par b, puis tous les mots commençant
par c. . . L’algorithme doit avoir une complexité en temps linéaire en n et doit
travailler en place.
Question 5
En répétant le principe de l’algorithme de la question précédente, proposer
un algorithme pour trier un tableau de mots. Quelle est sa complexité en temps
et en espace ?
Discuter l’efficacité de cet algorithme en comparasion avec celui de la question 2.
Peut-on utiliser cet algorithme pour trier un tableau d’entiers machine codés
chacun sur 32 bits ? Qu’en pensez-vous ?
Deuxième partie
Question 6
On considère une matrice à m lignes et n colonnes à coefficients entiers. Le jeu
consiste à se déplacer depuis la case en haut à gauche vers la case en bas à droite.
À chaque pas, on ne peut aller que vers la droite ou vers le bas. À l’arrivée, on
remporte un nombre de points égal à la somme des coefficients des cases visitées,
plus un point par changement de direction. Proposer un algorithme efficace pour
calculer le meilleur chemin et le nombre de points qu’il rapporte.
Question 7
On s’attend à ce qu’une case change de valeur. On souhaite quand même
faire le calcul avec les valeurs initiales, mais pouvoir recalculer rapidement le
nombre de points après la modification. Proposer
— une adaptation de l’algorithme précédent pour qu’il conserve des informations utiles, et
— un algorithme qui prend en entrée la matrice initiale, les coordonnées de
la case modifiée, sa nouvelle valeur et les informations conservées après
le premier calcul, et recalcule le nombre de points en temps O(d2 ) si la
case modifiée est à moins de d pas du départ ou de l’arrivée.
Question 8
On souhaite faire un voyage en voiture. Le réservoir plein nous permet de
parcourir exactement n kilomètres. Les stations-service sur la route se trouvent
aux positions a1 , a2 , . . . , ak , avec 0 ≤ ai+1 − ai ≤ n et a1 = 0. Montrer comment
minimiser le nombre d’arrêts. Démontrer la correction de votre algorithme.
2
Téléchargement