Devoir surveillé n°2 d`Informatique pour tous

publicité
Lycée Chrestien de Troyes
MP1617
DS n°2 d’Informatique pour tous
Devoir surveillé n°2 d’Informatique pour tous
Jeudi 23 mars (1h30)
• L’indentation des codes devra être soignée. On pourra tirer des traits verticaux pour indiquer
que des instructions sont regroupées dans un même bloc.
• Les codes seront commentés.
Exercice 1 − Coefficients binomiaux [D’après E3A - 1 - MP - 2015]
Écrire une fonction Binome en langage PYTHON d’argument (n, k) où :
• n et k représentent des entiers tels que 0Ã ≤!k ≤ n ;
n
qui retourne la valeur du coefficient binomial
. On produira le code le plus efficace possible.
k
Exercice 2 − Méthode des trapèzes
1. Rappeler l’aire d’un trapèze droit, en fonction de la longueur de sa base (b) et des longueurs de
ses deux hauteurs (h 1 et h 2 ).
2. Écrire fonction Trapeze en langage PYTHON d’argument (a, b, n) où :
• a et b représentent des réels tels que a < b ;
• n représente un entier naturel non nul ;
qui retourne une valeur approchée de l’intégrale
Z
I a,b :=
b
2
e −t dt
a
calculée à l’aide de la méthode des trapèzes à n pas.
3. Soit a et b des réels tels que a < b. Soit f : [a ; b] → R une fonction de classe C 2 .
¯
¯
(a) Justifier l’existence de M 2 := sup ¯ f 00 (x)¯.
x∈[a ; b]
(b) Soient α et β des réels tels que a ≤ α < β ≤ b. Démontrer la formule d’Euler-Maclaurin :
Z
β
α
f (x) dx = (β − α)
f (α) + f (β) 1
+
2
2
Z
β
α
(x − α)(x − β) f 00 (x) dx
et en déduire que :
¯Z
¯
¯
¯
Z
β
α
¯
f (α) + f (β) ¯¯ (β − α)3
f (x) dx − (β − α)
M2
¯≤
2
12
b
(c) Posons I :=
f (x) dx et T (n) la valeur approchée de I calculée à l’aide de la méthode des
a
trapèzes à n pas, où n ∈ N∗ . Démontrer qu’il existe une constante C > 0 telle que :
∀ n ∈ N∗ ,
1/2
|I − T (n) | ≤
C
n2
Lycée Chrestien de Troyes
DS n°2 d’Informatique pour tous
MP1617
Exercice 3 − Nombre d’occurences d’une valeur dans une liste
On se propose d’écrire deux versions, en langage PYTHON, de la fonction Occurence d’argument (L, x)
où :
• L représente une liste ;
• x représente une valeur ;
qui retourne le nombre d’occurences de x dans la liste L.
1. Écrire une version non récursive de la fonction Occurence.
2. Écrire une version récursive de la fonction Occurence, basée sur le principe de dichotomie :
on appelle Occurence avec deux sous-listes obtenues en coupant la première liste en deux (ou
presque), de sorte que les deux sous-listes aient des longueurs strictement plus petites que la
longueur de la première liste. On pourra faire usage du slicing.
3. Démontrer la terminaison de la fonction construite en 2. Pour cela, on pourra établir, par récurrence, que pour tout n ∈ N :
P (n) : La fonction s’arrête et renvoie un résultat pour toute liste de longueur n.
Exercice 4 − Tri rapide
On s’intéresse à une méthode de tri d’une liste d’entiers (par ordre croissant disons) : le tri rapide.
Le principe de ce tri est basé sur une stratégie de « diviser pour régner ». Il divise une collection
en deux collections de petits et grands éléments : tous les éléments de la première collection sont
inférieurs à ceux de la deuxième collection. Ce principe est ensuite ré-appliqué sur chacune des 2
sous-collections. L’algorithme s’écrit comme suit.
• Sélection d’un élément (appelé pivot) choisi arbitrairement (au début, ou à la fin, ou au milieu
ou presque, ou aléatoirement. . .) dans la liste.
• Partitionnement : on modifie la liste pour mettre tous les éléments plus petits que le pivot
devant et les plus grands derrière (le pivot devient rangé à sa position définitive).
• Rappel du tri sur les 2 parties (petits et grands) de la liste.
Pour partitionner une sous-liste :
• on place le pivot à la fin (arbitrairement), en l’échangeant avec le dernier élément de la sousliste ;
• on place tous les éléments inférieurs au pivot au début de la sous-liste ;
• on place le pivot à la fin des éléments déplacés.
1. Écrire une fonction Partitionner en langage PYTHON d’argument (L, d , p, f ) où :
• L représente une liste d’entiers ;
• d (indide de début), p (indice de pivot), f (indice de fin) représentent des indices de la liste
L vérifiant d ≤ p ≤ f ;
qui partitionne la sous liste L[d : f + 1], avec p comme indice de pivot, suivant la méthode décrite ci-dessus et qui retourne l’indice de la nouvelle position du pivot après partitionnement.
2. Écrire une fonction TriRapide en langage PYTHON d’argument (L, d , f ) où :
• L représente une liste d’entiers ;
• d (indide de début), f (indice de fin) représentent des indices de la liste L vérifiant d ≤ f ;
et qui trie la sous liste L[d : f + 1] suivant la méthode du tri rapide décrite ci-dessus.
3. Estimer le nombre d’affectations et de comparaisons nécessaires pour le tri rapide dans le pire
des cas.
4. Que dire du coût mémoire pour le tri rapide ?
5. Présenter une autre méthode de tri rencontrée cette année. On attend non seulement un nom,
mais aussi une esquisse d’algorithme.
2/2
Téléchargement