Algorithmique Avancée exercices: “Divide and - (CUI)

publicité
Algorithmique Avancée
exercices: “Divide and Conquer”
Exercice 1
1. Coder l’algorithme de recherche MinMax “divide and conquer” vu au cours. Donner a
votre programme le comportement suivant :
– Lecture d’un entier n.
– Génération un tableau de n entiers aléatoires entre 0 et 100.
– Impression du min et le max.
2. Comparer les vitesses d’exécutions pour différents ordres de grandeur de n, en utilisant
la fonction time 1 de linux.
3. Suivre la même démarche pour l’ algorithme de tri rapide “Quicksort”.
Exercice 2
Trouver un algorithme direct pour MinMax qui exploite le fait qu’on calcule le Min et le Max
en même temps.
Montrer que sa complexité moyenne est 32 n.
Donner la complexité dans le pire des cas et dans le meilleur cas.
Exercice 3
Prouver (de façon théorique) que la procédure partition (dans l’algorithme quicksort) fonctionne.
Que se passe-t-il si on n’utilise pas des égalités strictes ?
Généraliser cette procédure si le pivot n’est pas le premier nombre de la suite.
Exercice 4
Comparer les performances des implémentations récursives et itératives de quicksort.
Exercice 5
Implémenter la version de select avec le choix des pivots basé sur la médiane des médianes.
Exercice 6
Montrer les deux points suivants :
n l−1
n
n
−
≤b c≤
l
l
l
l
1 1 1
1 1
b b b · · · b b ncc · · · ccc = 1
| 2 2 2{z 2 2}
blog2 nc
1
Pour en savoir plus sur la fonction time, utilisez les pages de manuels : man time (depuis la console).
1
Téléchargement