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

Pratybos

Penkios užduotys. Kiekviena — viena funkcija tavo algo projekte. Sprendimų nerodom; rodom, ką turi gauti.

Visos naudoja *metrics.Counter ir visos turi būti determinuotos: tas pats iškvietimas — tas pats skaičius.


1. LinearFindAll(items []Item, artist string, c *metrics.Counter) []int

Grąžina visų įrašų, kurių Artist sutampa, indeksus.

Kiek palyginimų sunaudoja? Palygink su LinearFind. Kodėl skaičius nepriklauso nuo to, kiek atitikmenų rado?


2. MinRating(items []Item, c *metrics.Counter) (Item, bool)

Grąžina prasčiausiai įvertintą įrašą. false, jei biblioteka tuščia.

Skaičiuok palyginimus tarp įvertinimų. n įrašų bibliotekoje turi gautis tiksliai n−1. Jei gauni n — lygini pirmą elementą su pačiu savimi.


3. CountInYearRange(items []Item, from, to int, c *metrics.Counter) int

Kiek įrašų patenka į metų intervalą (imtinai).

Skaičiuok kiekvieną intervalo tikrinimą. Ar gali atsakyti neperžiūrėjęs visų įrašų? Užsirašyk atsakymą — 6 ir 11 pamokose jis pasikeis.


4. Verify(items []Item) error

Patikrina, kad kiekvieno įrašo Year ir Rating telpa į rėžius, ir grąžina klaidą su pirmo netinkamo įrašo ID.

Paleisk su savo sugeneruota biblioteka. Tada sugadink vieną eilutę library.jsonl ranka ir paleisk dar kartą.


5. AverageComparisons(items []Item, seed int64, trials int) float64

Atsitiktinai renka trials pavadinimų iš pačios bibliotekos, ieško kiekvieno ir grąžina vidutinį palyginimų skaičių.

Su 1000 įrašų ir pakankamai bandymų turi gauti apie 500 — tai ir yra vidutinis atvejis, apie kurį kalbėjom. Patikrink.

Tada padaryk tą patį su pavadinimais, kurių bibliotekoje nėra. Ką gauni ir kodėl skiriasi?