Académique Documents
Professionnel Documents
Culture Documents
𝑛
𝑛(𝑛 + 1)
𝑖 = 0 + 1 + 2 + ...+ 𝑛 = 3) Gauss
2
𝑖=0
𝑎. 𝑓(𝑖) = 𝑎. 𝑓 𝑖 5) Factorisation
𝑖 𝑖
Or :
Par exemple :
σ𝑛−2
𝑖=0 𝑛 = n. σ𝑛−2
𝑖=0 1 (formule 5) = n.(n – 2 + 1) (formule 2) = n.(n – 1)
Le temps total pris par ce if est donc c fois (le résultat de ce calcul)
A.n2 + B.n + C
T(n) O(n)
2020/2021 Algorithmique - Alain Silovy 7
Exemples de complexité : n = len(ls)
def f1_variante(ls):
s = 0
i = 0
while i < len(ls) // 2: # divisé par 2
s += ls[i]
i += 1
return s
T(n) O(n)
2020/2021 Algorithmique - Alain Silovy 8
Exemples de complexité : n = len(ls)
def f2(ls):
s = 0
i = 0
while i < len(ls):
j = 0
while j < len(ls):
s += ls[i] + ls[j]
j += 1
i += 1
return s
T(n) 2
O(n )
2020/2021 Algorithmique - Alain Silovy 9
Exemples de complexité : n = len(ls)
def f3(ls):
s = 0
i = 0
j = 0 # initialization de j sortie de la boucle
while i < len(ls):
while j < len(ls):
s += ls[i] + ls[j]
j += 1
i += 1
return s
T(n) O(n)
2020/2021 Algorithmique - Alain Silovy 10
Exemples de complexité : n = len(ls)
def f4(ls):
s = 0
i = 0
while i < len(ls):
j = 0
while j < i: # i vaut n / 2 en moyenne
s += ls[i] + ls[j]
j += 1
i += 1
return s
T(n) 2
O(n )
2020/2021 Algorithmique - Alain Silovy 11
Exemples de complexité : n = len(ls)
def f5(ls):
s = 0
i = 0
while i < len(ls) and ls[i] != 0:
s += ls[i]
i += 1
return s
T(n) O(n)
(en pire cas quand ls[i] n’est jamais zéro)
T(n) O(n)
2020/2021 Algorithmique - Alain Silovy 13
Exemples de complexité : n = len(ls)
def f7(ls):
s = 0
i = len(ls) - 1
while i > 1:
s += ls[i]
i //= 2 # i divisé par 2 à chaque tour
return s
T(n) O(log n)
2020/2021 Algorithmique - Alain Silovy 14
Exemples de complexité : n = len(ls)
def f8(ls):
s = 0
i = 1
while i < len(ls):
s += ls[i]
i *= 2 # Cette fois, i multiplié par 2 à chaque tour
return s
T(n) O(log n)
2020/2021 Algorithmique - Alain Silovy 15
Exemples de complexité : n = len(ls)
def f9(ls):
s = 0
i = 0
while i < len(ls):
j = 1
while j < len(ls):
s += ls[i] + ls[j]
j *= 2
i += 1
return s
Bien sûr, trier le tableau et renvoyer tab[k] donne le résultat. Mais est-ce
vraiment nécessaire de tout trier ?
Pouvez-vous faire mieux ?
def max(ls):
if len(ls) == 0:
raise ValueError("arg is an empty sequence")
m = ls[0]
for x in ls:
if x > m:
m = x
return m
def tri_bulle(ls):
for i in range(len(ls) - 1, 0, -1):
for j in range(i):
if ls[j] > ls[j + 1]:
ls[j + 1], ls[j] = ls[j], ls[j + 1]
def tri_insertion(ls):
for i in range(1, len(ls)):
j = i
val = ls[i]
while j > 0 and val < ls[j - 1]:
ls[j] = ls[j - 1]
j -= 1
ls[j] = val