Qu'est ce qu'un maximum ?☘
Définition☘
On appelle maximum d'un ensemble \mathcal{E} de nombres une valeur v telle que:
- v\in\mathcal{E}
- Pour toute valeur w\in\mathcal{E}: w \leqslant v.
Remarque☘
On peut plus généralement parler d'élément maximum sur un ensemble d'éléments \mathcal{E} pour lesquels on aura défini un critère de "comparaison".
Par exemple, on peut travailler sur un ensemble de mots, un mot étant inférieur à un autre s'il est placé avant lui dans un dictionnaire (ordre alphabétique).
Exercice☘
On définit la fonction python suivante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def f(tab, v): """ tab est une liste d'entiers. v est un entier. """ for x in tab: if v < x: return False return True # Exemple d'utilisation L = [3, 2, 8, 1, 7] print(f(L, 8)) |
Soit L une liste d'entiers et v un entier. Sachant que f(L,v) vaut True, peut-on en déduire que v est une valeur maximale de la liste L ? Si oui, justifier. Si non, définir une fonction g, utilisant la fonction f, prenant les mêmes paramètres que f et telle que:
g(tab, v) == True
si et seulement si v est une valeur maximale de tab.
Une réponse
Lorsque f(L,v) vaut True, on a la garantie que v est un majorant de la liste, c'est à dire une valeur supérieure ou égale à chacune des valeurs de la liste.
Mais v n'est pas nécessairement une valeur maximale de la liste L car la valeur
v n'est pas nécessairement présente dans la liste. Par exemple, avec L = [3, 2, 8, 1, 7]
,
f(L, 9)
a pour
valeur True, alors que 9 n'est pas dans la liste L
Une proposition pour la fonction g:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | def f(tab, v): for x in tab: if v < x: return False return True def g(tab,v): return f(tab,v) and v in L # Exemple d'utilisation L = [3, 2, 8, 1, 7] print(g(L, 8)) # affiche True print(g(L, 9)) # affiche False |
Plus concis
On peut condenser le code précédent en utilisant all:
1 2 3 4 5 6 7 8 9 10 11 12 | def est_max(tab,v): """ list * int -> bool La fonction renvoie True si v est élément max de la liste tab, et renvoie False sinon. """ return v in L and all(x <= v for x in tab) # Exemple d'utilisation L = [3, 2, 8, 1, 7] print(est_max(L, 8)) # affiche True print(est_max(L, 9)) # affiche False |