Tema
/
Algoritmai ir duomenų struktūros GO
Pamoka 1 / 15 Įvadas ir sudėtingumas — Big-O ~55 min
Kodas

Įrašas — ir kodėl du laukai turi rėžius

Pradedam nuo įrašo tipo. Jis atrodo nuobodžiai — keturi laukai — bet du iš jų turi rėžius, ir tie rėžiai yra sprendimas, o ne atsitiktinumas.

Susikurk projektą:

mkdir algo && cd algo
go mod init algo

go mod init sukuria go.mod. Jo neredaguosi ranka — Go tvarko jį pats.

Tada item.go (žr. dešinėje).

Kodėl Year ir Rating turi rėžius

Title ir Artist yra eilutės — jos gali būti bet kokios. Year ir Rating negali: metai yra tarp 1900 ir 2030, įvertinimas — tarp 0 ir 100.

Tai atrodo kaip smulkmena. Nėra.

Rikiavimas, kurį parašysi 7 ir 8 pamokose, lygina elementus tarpusavyje. Toks rikiavimas veikia su bet kuo, ką gali palyginti — ir greičiausias įmanomas jo variantas yra O(n log n).

9 pamokos rikiavimas nelygina nieko. Jis veikia greičiau — O(n) — bet tik tada, kai iš anksto žinai reikšmių rėžius, nes jam reikia po vieną „kibirą" kiekvienai galimai reikšmei. 131 metai ir 101 įvertinimas — tiek kibirų paruošti lengva. Pavadinimams — neįmanoma.

Todėl šie du laukai turi rėžius jau dabar, aštuoniomis pamokomis anksčiau, negu jų prireiks. Tai vienintelis sprendimas šioje pamokoje, kurio vėliau nebus galima pakeisti neperrašius duomenų.

Spąstai

ID yra atskiras nuo pozicijos masyve. Kai 7 pamokoje surikiuosi biblioteką, įrašai pasikeis vietomis — bet ID liks prilipęs prie savo įrašo. Niekada nenaudok indekso kaip identifikatoriaus.