Tavs šīs stundas izaicinājums: Tu proti uzrakstīt kodu, kas strādā, bet vai tas strādā labi? Šodien mēs iemācīsimies skatīties uz kodu kā profesionāli inženieri, izmantojot Big O notāciju, lai paredzētu programmas uzvedību, kad tai jāapstrādā nevis desmit, bet desmit miljoni datu vienību.
SR 2.4.16. (Skolēns novērtē algoritmu sarežģītību un efektivitāti dažādos izpildes apstākļos)saraksts[0]).for cikls.for cikli.cd Tema7_Algoritmini big_o.py; code big_o.pyPierādīsim, ka O(1) darbības prasa vienādu laiku neatkarīgi no datu apjoma.
big_o.py importē time bibliotēku.iegut_pirmo(dati), kas atgriež saraksta elementu ar indeksu [0].
import time
def iegut_pirmo(dati):
return dati[0]
mazs_saraksts = list(range(10))
liels_saraksts = list(range(10000000))
# Mērām mazam
sakums = time.time()
iegut_pirmo(mazs_saraksts)
laiks_mazam = time.time() - sakums
# Mērām lielam
sakums = time.time()
iegut_pirmo(liels_saraksts)
laiks_lielam = time.time() - sakums
print(f"O(1) laiks mazam sarakstam: {laiks_mazam:.7f}s")
print(f"O(1) laiks milzīgam sarakstam: {laiks_lielam:.7f}s")
Apskatīsim, cik reāli soļus dators veic atkarībā no uzrakstīto ciklu daudzuma.
soli_n = 0 un soli_n2 = 0.for ciklu no 0 līdz 100, kas katrā solī palielina soli_n par 1.soli_n2 par 1.
elementu_skaits = 100
soli_n = 0
# O(n) - Lineārs algoritms
for i in range(elementu_skaits):
soli_n += 1
soli_n2 = 0
# O(n^2) - Kvadrātisks algoritms
for i in range(elementu_skaits):
for j in range(elementu_skaits):
soli_n2 += 1
print(f"Datu apjoms: {elementu_skaits}")
print(f"O(n) soļu skaits: {soli_n}")
print(f"O(n^2) soļu skaits: {soli_n2}")
Tavs uzdevums kā inženierim ir nolasīt kodu un uzreiz saprast tā sarežģītību.
#), kurā norādi tās Big O notāciju (piem., O(1), O(n), O(n²)).
# 1. Analīze
# Tava atbilde: O(...) jo ...
def dzes_pedejo(dati):
dati.pop()
# 2. Analīze
# Tava atbilde: O(...) jo ...
def aprekinat_kopejo_rezultatu(punkti):
summa = 0
for punkts in punkti:
summa += punkts
return summa
# 3. Analīze
# Tava atbilde: O(...) jo ...
def meklet_dublikatus(dati):
for i in dati:
for j in dati:
if i == j:
print("Atrasts dublikāts!")