Əməliyyatları saymaq alqoritmin mürəkkəbliyini kodu işə salmadan təyin etməyin əsas üsuludur. Burada saniyələr yox, giriş ölçüsü n böyüdükcə əsas əməliyyatların sayının necə artdığı vacibdir. Bir neçə sadə qaydanı bilsəniz, əksər funksiyaların Big-O qiymətini bir neçə saniyəyə tapa bilərsiniz.
Əsas qayda: sabit qiymətləri atın
Təyinat, müqayisə, hesab əməliyyatı, indeksə görə müraciət O(1) sayılır. Sabit vuruğu və aşağı tərtibli hədləri atırıq: 3n + 7 yazılışı O(n), n^2/2 + 5n isə O(n^2) olur.
Qayda 1: ardıcıl bloklar toplanır
Bir-birinin ardınca gələn hissələrin qiymətləri toplanır, nəticədə ən böyüyü qalır. n addımlıq dövrdən sonra n * n addımlıq dövr gəlirsə, cəmi n + n^2 olur və bu O(n^2) deməkdir.
def steps_sequential(n):
ops = 0
for _ in range(n):
ops += 1
for _ in range(n):
for _ in range(n):
ops += 1
return ops
for n in (10, 100, 1000):
print(n, steps_sequential(n))