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