td06 Complexite
td06 Complexite
td06 Complexite
P YTHON P YTHON
def machin(n): def bidule(n):
for i in range(n): for i in range(n):
print(i) for j in range(i + 1, n):
for j in range(n): print(i, j)
print(j)
P YTHON P YTHON
def truc(n): def chose(n):
for i in range(n): for i in range(2, n - 2):
for j in range(n): for j in range(i - 2, i + 3):
print(i, j) print(i, j)
http://cpge.info 1
Lycée Carnot — 2019-2020 Informatique MPSI
3. On suppose que L1 et L2 sont des listes de tailles respectives n1 et n2 . Pour chaque opération
1
suivante, décrire succinctement l’algorithme qui pourrait être implémenté en P YTHON et
en donner la complexité.
a) L1 + L2 b) L1.extend(L2) c) L1[i:j]
P YTHON
def creation_naive(n):
L = []
for _ in range(n):
L = L + [0]
# %timeit creation_naive(10 ** 5)
# 28.8 s ± 293 ms per loop
def creation_avec_append(n):
L = []
for _ in range(n):
L.append(0)
# %timeit creation_avec_append(10 ** 5)
# 11.5 ms ± 85.7 µs per loop
P YTHON
def est_fibo(k):
"""Vérifie si un entier k est un nombre de Fibonacci."""
# On a f n + 1 ≥ n pour n ≥ 0, donc si un nombre
# de fibonacci f n convient, alors 0 ≤ n ≤ k + 1
nombres_de_fibonnaci = []
for i in range(k + 2):
nombres_de_fibonnaci.append(fibo(i))
for i in range(k + 2):
if k in nombres_de_fibonnaci:
return True
return False
http://cpge.info 2
Lycée Carnot — 2019-2020 Informatique MPSI
E XERCICE 7 Neufs
On considère la fonction neufs ci-dessous, qui prend en argument un entier n > 0.
P YTHON
def neufs(n):
chiffres = []
while n > 0:
chiffres.append(n % 10)
n = n // 10
res = 0
for k in range(len(chiffres)):
i = k
while i < len(chiffres) and chiffres[i] == 9:
i += 1
res = max(res, i - k)
return res
http://cpge.info 3
Lycée Carnot — 2019-2020 Informatique MPSI
2. Donner la complexité temporelle de cette fonction dans le meilleur cas, que l’on précisera.
3. Montrer que la complexité temporelle dans le pire cas est en O(n).
Cette borne n’est cependant pas très serrée. On peut dire beaucoup mieux.
n
4. Montrer par récurrence sur k ∈ N qu’après k itérations de la boucle, f − d < .
2k
5. En déduire que la complexité dans le pire cas est en fait en O(log n).
6. Identifier un pire cas et montrer que cette borne est serrée et que la complexité dans le pire
cas est en Θ(log n).
def tri_selection(tab):
"""Tri un tableau par la méthode du tri par selection."""
for i in range(len(tab)):
echange(tab, i, indice_min(tab, i))
def tri_insertion(tab):
"""Tri un tableau par la méthode du tri par insertion."""
for i in range(len(tab)):
insere(tab, i)
http://cpge.info 4