# Question 1 : Raisonnement par # l'absurde pour montrer que # le pic est unique. # Hypothèse : Supposons qu’il # existe deux pics p1 et p2 # avec p1 < p2. # Par définition, les valeurs # d’indice p1 à n-1 sont # décroissantes et celles # d’indice 0 à p2 sont # croissantes. Cela crée une # contradiction, car les # valeurs entre p1 et p2 # seraient à la fois # croissantes et # décroissantes. # Conclusion : L’hypothèse est # fausse, donc le pic est # unique. # Question 2 : Cas de base. # Si le tableau contient un # seul élément, cet élément est # un pic car il est plus grand # ou égal aux éléments # inexistants à gauche et à # droite. # Question 3 : Algorithme de # la fonction pic_dpr. # Entrée : un tableau tab de # n éléments, indices i (début) # et j (fin). # Cas de base : # - Si la zone est vide ou # invalide, retourner None. # - Si la zone contient un seul # élément, retourner i. # Cas récursif : # - Calculer k = (i + j) // 2. # - Si tab[k] < tab[k+1], # rechercher dans la moitié # droite. # - Sinon, rechercher dans la # moitié gauche. def pic_dpr(tab: list, i=0, j=None) -> int: '''Recherche un pic dans un tableau.''' if j is None: j = len(tab) - 1 if i > j or i < 0 or j > len(tab) - 1: return None if i == j: return i k = i + (j - i) // 2 return pic_dpr(tab, k + 1, j) if tab[k] < tab[k + 1] else pic_dpr(tab, i, k) # Question 4 : Implémentation # et tests # Tests des cas limites et des # exemples : assert pic_dpr([]) is None assert pic_dpr([2]) == 0 assert pic_dpr([1, 4, 6, 2, 0]) == 2 assert pic_dpr([1, 4, 6, 2, 0], 1, 4) == 2 # Question 5 : Complexité # À chaque appel, # l’algorithme divise la zone # à examiner par deux : # C(n) = C(n/2) + O(1). Par # résolution de la récurrence, # C(n) = O(log n).