Stundas uzdevums: Tu proti rakstīt kārtošanas un meklēšanas algoritmus no nulles, kas palīdz saprast loģiku. Taču profesionālā izstrādē prioritāte ir koda efektivitāte un izpildes ātrums. Šajā stundā pētīsim, kāpēc Python iebūvētās funkcijas ātrdarbībā pārspēj mūsu pašu rakstīto kodu un kāpēc tās ir nozares standarts.
SR 2.4.19. (Tu izmanto gatavus algoritmus tipveida uzdevumu risēšanai)70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
min() un max() funkcijas:
sorted() un Timsort:
cd Tema7_Algoritmini iebuvetas_funkcijas.py; code iebuvetas_funkcijas.pyAtradīsim vājāko un spēcīgāko ienaidnieku datu masīvā, izmantojot vienas rindas iebūvētās komandas.
main.py failā un palaid no termināļa.ienaidnieku_hp = [45, 12, 89, 3, 99, 21, 50, 77, 8, 34]
vajakais = min(ienaidnieku_hp)
stiprakais = max(ienaidnieku_hp)
print(f"Vājākais ienaidnieks: {vajakais} HP")
print(f"Spēcīgākais ienaidnieks: {stiprakais} HP")
Pārbaudīsim praksē apgalvojumu, ka iebūvētais "C" kods ir ātrāks par tīru Python kodu, pat ja abiem ir lineāra sarežģītība O(n).
punkti, gajiens, atbilde, rezultats vai parbauda_ievadi().import time
lieli_dati = list(range(5000000))
# 1. Mūsu pašu rakstītais O(n) cikls
sakums_savs = time.time()
lielakais_savs = lieli_dati[0]
for skaitlis in lieli_dati:
if skaitlis > lielakais_savs:
lielakais_savs = skaitlis
laiks_savs = time.time() - sakums_savs
# 2. Python iebūvētā O(n) funkcija
sakums_ieb = time.time()
lielakais_ieb = max(lieli_dati)
laiks_ieb = time.time() - sakums_ieb
print(f"Paša rakstīts cikls aizņēma: {laiks_savs:.5f}s")
print(f"Iebūvētā max() funkcija aizņēma: {laiks_ieb:.5f}s")
Ja pie O(n) atšķirība ir mērāma sekundes simtdaļās, kas notiks, ja salīdzināsim mūsu O(n²) Bubble Sort ar Python iebūvēto O(n log n) Timsort algoritmu?
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.