Õppetund
Teooria — Prefiksipuu sammhaaval
Prefiksipuu ehk trie salvestab sõnade hulga puuna, kus igale eri prefiksile vastab üks sõlm. Juur tähistab tühja prefiksit ja iga serv kannab üht tähte. Teel juurest sõlmeni saadaksegi selle sõlme prefiks. Sõlm on märgitud, kui tema prefiks on terviklik salvestatud sõna. Ühesuguse algusega sõnad jagavad ühisele algusele vastavat teed. Otsing järgib sõna tähti juurest alates; prefiksiotsing jõuab prefiksi sõlmeni ja leiab kõik märgitud sõlmed selle all. Edward Fredkin andis sellele andmestruktuurile nime 1960. aastal, võttes selle sõnast retrieval, ning mõtles seda hääldada nagu inglise sõna tree.
Mida iga sümbol tähendab
W- sõnade arv loendis
L- tähtede arv kõigis sõnades kokku
N- sõlmede arv ilma juureta, iga eri prefiksi kohta üks
- Eeldab
- Kasutatakse väiketähti a kuni z, iga täht võtab ühe baidi ja viidad on 64-bitised. Kummagi andmestruktuuri puhul ei arvestata joondustäidet ega mäluhalduri lisakulu. Kahendotsingul loetakse iga võrreldud tähepaar ning võrdlus peatub esimese erineva paari juures. Sõna lõppu jõudmine lisakulu ei tekita. Paisktabelis pole ühtegi kollisiooni: see on tema jaoks parim juht. 18-baidise sõlme alamsõlmed on tähestikulises järjekorras, nii et nende läbivaatus peatub kohe, kui otsitavast tähest möödutakse.
Ülesanne täielikult lahendatud
-
Kui palju ühiseid algusi on vaja, et prefiksipuu võtaks vähem ruumi? 4 sammu
Vajuta Pikad sõnad: 85 tähte mahuvad 21 sõlme ja kolmveerand tähtedest on ühised, kuid 18-baidiste sõlmedega prefiksipuu võtab ikka 396 baiti loendi 157 vastu. Kui loendi kõik sõnad on k tähe pikkused, saab prefiksipuu suurima eelise siis, kui loendis on kõik võimalikud sellised sõnad. Milline on vähim k, mille korral võtab prefiksipuu siin kasutatud baidiarvestuse järgi vähem ruumi kui tavaline loend?
-
Siin on 21 sõlme ja juur: 22 × 18 = 396 baiti. Loendis on 85 tähte ning iga 8 sõna kohta lõpumärgi bait ja 8-baidine viit: 85 + 9 × 8 = 157.
-
Kõiki k-tähelisi sõnesid on 26k, igaühes k tähte. Seega võtab loend (k + 9) × 26k baiti.
-
Prefiksipuus on vaja sõlme iga 1 kuni k tähe pikkuse sõne jaoks: 26 + 26² + … + 26k. See summa on pisut väiksem kui 26/25 × 26k. Koos juurega ja 18-ga korrutades võtab prefiksipuu veidi alla 18,72 × 26k baidi.
-
Loend võtab seega rohkem ruumi, kui k + 9 ületab 18,72. Esimest korda juhtub see väärtusel k = 10. Kui k = 9, on prefiksipuu loendist 4,0% suurem; kui k = 10, on see 1,5% väiksem.
Vastus
10 tähte, kui loendis on kõik 2610 võimalikku sõnet ehk umbes 1,4 × 1014 sõna. 209-baidiste sõlmede korral peab sama arvutuse järgi k + 9 ületama ligikaudu 217; selleks peavad sõnad olema 209 tähe pikkused.
-
Õpitee
Mida andmestruktuur võimaldab odavalt teha
Allikad (3)
- The name, its origin in "retrieval", and Fredkin's intended pronunciation, quoted in the definition: Paul E. Black, "trie", in Dictionary of Algorithms and Data Structures [online], Paul E. Black, ed., NIST, entry modified 12 February 2019.
- The paper that named the structure: Edward Fredkin, "Trie memory," Communications of the ACM 3(9), September 1960, pp. 490–499.
- The earlier description of searching on letter-by-letter keys: René de la Briandais, "File searching using variable length keys," Papers presented at the Western Joint Computer Conference, San Francisco, 3–5 March 1959, pp. 295–298.