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

algo gen — duomenys, kuriuos galima pakartoti

Matuoti nėra ko, kol nėra duomenų. algo gen juos pagamina.

Sukurk gen.go (žr. dešinėje). Jis prideda pirmąją komandą:

algo gen [-n N] [-seed S] [-o FAILAS] [-sorted|-reverse|-shuffled] [-dup-rate R]

Pavadinimai statomi, o ne imami iš žodyno

Dvi skiemenų lentelės — 15 priebalsių ir 8 balsės — duoda 120 skiemenų. Trijų skiemenų žodis yra vienas iš 1 728 000, keturių — vienas iš 207 360 000. Dvidešimt kodo eilučių, jokio duomenų failo, ir milijonas skirtingų pavadinimų:

$ algo gen -n 1000000 -seed 1 -o m.jsonl
wrote 1000000 items to m.jsonl (seed=1, order=shuffled, dup-rate=0.00)

items=1000000 distinct=1000000 duplicate-titles=0 (0.00%)
longest shared prefix among neighbours: 11 runes  "Čėkobėču Kugū" / "Čėkobėču Kuta"

Atkreipk dėmesį į paskutinę eilutę. Kadangi lentelės mažos, pavadinimai dalijasi ilgomis pradžiomis — vienuolika bendrų raidžių. Tai nėra puošmena: 10 pamokoje paieška pagal pavadinimo pradžią būtų per lengva, jei kiekvienas pavadinimas prasidėtų kitaip.

-seed — kodėl be jo matavimai bevertis

Tas pats -seed duoda tą pačią biblioteką:

$ algo gen -n 1000 -seed 42 -o a.jsonl && algo gen -n 1000 -seed 42 -o b.jsonl
$ cmp a.jsonl b.jsonl && echo IDENTICAL
IDENTICAL

Be to du matavimai matuotų dvi skirtingas bibliotekas, ir jų skirtumas nieko nereikštų. Su juo gali pakeisti vieną dalyką — algoritmą — ir žinoti, kad pasikeitė tik jis.

-sorted — brangiausias vėliavėlė kurse

Ją rašai dabar, o atsipirks tris kartus:

  • 7 pamoka — surikiuoti duomenys yra įterpimo rikiavimo geriausias atvejis;
  • 8 pamoka — jie pat yra greitojo rikiavimo blogiausias atvejis, jei pivotą pasirinksi naiviai (O(n²));
  • 11–12 pamokos — surikiuoti duomenys paverčia dvejetainį paieškos medį paprastu sąrašu. Būtent tą 12 pamoka ir gelbsti.

Trys skirtingos pamokos, viena vėliavėlė, parašyta pirmą dieną.

-dup-rate pridės vienodų pavadinimų — jų prireiks 10 pamokoje (kolizijos) ir 8 pamokoje (rikiavimo stabilumas). Su -dup-rate 0 pavadinimai garantuotai skirtingi: generatorius perrenka sutapimus.