Sujet 2 - Complexité - Diviser pour régner

publicité
TITRE DESSUS
1re année
F. Popineau
2016 – 2017
TITRE DESSOUS
Algorithmes IS1210 – PC 2
Contrôle destructif
Votre usine produits des objets dont vous devez mesurer la résistance à une certaine contrainte. Vous pouvez
effectuer des tests et appliquer cette contrainte avec 𝑛 paliers discrets. La distance entre deux paliers est choisie
de façon à ce qu’elle soit supérieure à la dispersion liée à la fabrication, sinon certains objets pourraient céder au
palier 𝑖 et d’autres au palier 𝑖 + 1. Vous savez qu’au dessus d’un certain palier 𝑝, 0 < 𝑝 ≤ 𝑛, tous vos objets cèderont
sous la contrainte. Votre objectif est de trouver ce palier 𝑝 avec un minimum de tests.
— Question 1
Combien faut-il de tests dans le pire cas si on ne dispose que d’un objet ?
Quelle stratégie peut-on appliquer si on a une infinité d’objets ?
Combien faut-il de tests dans le pire cas si on ne dispose que de deux objets ? Quelle est la complexité du
problème en fonction de 𝑛 dans ce cas ?
Combien faut-il de tests dans le pire cas si on ne dispose que de trois objets ?
— Question 2
Donner une relation de récurrence 𝑓(𝑘, 𝑛) pour déterminer le nombre de tests dans le pire cas avec 𝑘 objets
et 𝑛 paliers.
— Question 3
Donner un algorithme pour déterminer le nombre minimum de tests dans le pire cas à effectuer si on dispose
de 𝑘 objets et de 𝑛 paliers.
— Question 4
Quelle est la complexité 𝑇(𝑘, 𝑛) en fonction de 𝑘 et de 𝑛 de votre algorithme ? Quelle relation de récurrence
suit-elle ? Montre que l’on peut borner cette complexité par 𝑇(𝑘, 𝑛) = 𝑂(3 ).
— Question 5
Pouvez-vous améliorer votre algorithme ? Par quelle technique ? Quelle complexité atteignez vous ?
— Question 6
Programmez les algorithmes des questions 2 et 4 en Python.
TITRE DESSUS
TITRE DESSOUS
Paire des points les plus proches
On considère le problème de la recherche de la paire de points les plus proches dans l’espace à 2 dimensions :
étant donné un tableau 𝑃[1, … , 𝑛] de points où chaque 𝑃[𝑖] = (𝑥 , 𝑦 ), trouver 𝑖 et 𝑗 tels que 𝑃[𝑖] et 𝑃[𝑗] soient aussi
proches que possible selon une distance euclidienne.
— Question 1
Donner un algorithme naïf pour résoudre ce problème. Quelle est sa complexité en fonction de 𝑛 ?
On se propose de chercher si il existe un algorithme plus efficace pour résoudre ce problème.
— Question 2
Quelle méthode peut on essayer d’utiliser pour améliorer l’algorithme naïf ? Est-elle directement applicable ?
Expliquer la difficulté d’application de cette méthode.
— Question 3
À quelle condition peut-on atteindre une complexité en 𝑂(𝑛 log 𝑛) dans l’hypothèse où l’on applique la technique précédente ?
1
TITRE DESSUS
— Question 4
Prouver la condition trouvée à la question précédente.
— Question 5
Étudier les questions d’implémentation en Python : quelles sont les difficultés attendues ?
— Question 6
Qu’en est-il de l’espace à 3 dimensions ? Est-il possible d’atteindre le même temps d’exécution ?
— Question 7
Qu’en est-il des dimensions 4, 5, … ? Est-il possible d’écrire un algorithme qui prenne le nombre de dimensions 𝑑 comme paramètre d’entrée, et si oui, quelle est sa performance en fonction de 𝑛 et 𝑑 ? (Question
difficile !)
2
Téléchargement