Tema
/
Algoritmai ir duomenų struktūros GO
Pamoka 11 / 15 Dvejetainiai medžiai ir BST ~50 min
Teorija

Klausimas, kurio 10 pamoka neatsakė

Dešimta pamoka baigėsi klausimu, į kurį tavo indeksas neatsakė: pateik biblioteką abėcėlės tvarka. Kibirų tvarka nieko nereiškė, o abėcėlinį sąrašą teko gauti surikiavus visus 1 000 raktų.

Štai tas pats klausimas, užduotas medžiui:

$ algo gen -n 1000 -seed 3
$ algo alpha -n 6 -from Bam -to Bat
the first 6 titles, walked out of the tree:
  Bagogū Guže
  Bamežanė Pako
  Bamila
  Basėrūno
  Batalu
  Batėvovu Sūvi

1000 keys in order, 0 comparisons, 0s
min "Bagogū Guže", max "Žūčibužu Kėpo"

range [Bam .. Bat]: 3 titles, 11 nodes visited out of 1000
  Bamežanė Pako
  Bamila
  Basėrūno

Tie patys šeši pavadinimai. Ta pati biblioteka, tas pats sėklos numeris.

Bet dešimtoje pamokoje jie kainavo viso 1 000 raktų rikiavimą, o čia — 0 palyginimų. Ne mažiau; nė vieno.

Kodėl nulis

Nes nieko nereikėjo rikiuoti. Medis niekada nelaikė raktų kita tvarka.

Maišos lentelė tvarką sunaikino — tai buvo jos darbas, todėl grandinėlės ir liko trumpos. Medis tvarką laiko savo sandaroje: kiekvieno mazgo kairėje guli mažesni raktai, dešinėje — didesni. Perėjus medį „kairė, aš, dešinė" tvarka, raktai išeina didėjimo tvarka, nes kitokios tvarkos juose ir nebuvo.

Rikiavimo funkcija čia neiškviesta. Tik apeita struktūra.

Ir viskas, ko dešimta pamoka negalėjo

Prisimeni tą lentelę? Štai ji dar kartą, su antru stulpeliu:

klausimas maišos lentelė medis
ar yra „Bamila"? 1.3 palyginimo ~16 palyginimų
kokia pirma abėcėlėje? tik surikiavus viską Min() — ėjimas kairėn
kurios prasideda „Ba"? tik peržiūrėjus viską rėžio užklausa
kokios 20 eina po „Bamila"? nėra tokios sąvokos apėjimo tęsinys
kokia knyga prieš šitą? nėra tokios sąvokos pirmtakas medyje
aukščiausias įvertinimas? tik peržiūrėjus viską Max() — ėjimas dešinėn

Atkreipk dėmesį į rėžio užklausą aukščiau: 11 aplankytų mazgų iš 1 000. Medis neapėjo bibliotekos — jis nusileido iki srities ir praleido pomedžius, kuriuose atsakymo būti negalėjo.

Ir atkreipk dėmesį į pirmą eilutę. Medis pralaimi. 16 palyginimų prieš 1.3 — dvylika kartų daugiau tam vieninteliam klausimui, kurį maišos lentelė moka.

Tai ne pralaimėjimas ir ne pergalė. Tai antroji sandorio pusė, ir penktame žingsnyje sumokėsi už ją tiksliais skaičiais.

Spėk prieš skaitydamas toliau

Ir dar viena — ta, dėl kurios pamoka baigsis neužrišta.

Pirmoje pamokoje pasidarei vėliavėlę -sorted. Septintoje ji davė įterpimo rikiavimui geriausią atvejį. Aštuntoje quicksort'ui — blogiausią.

Ką ji padarys medžiui: palengvins darbą ar apsunkins?

Užsirašyk atsakymą. Septintame žingsnyje pamatuosi.