1
0
Fork 0

Toteutettu alustava implementaatio trie-tietorakenteesta

This commit is contained in:
Vili Sinervä 2022-09-16 11:10:01 +03:00
parent 4900e16b9d
commit d6da26ea46
2 changed files with 59 additions and 2 deletions

View file

@ -1,4 +1,6 @@
# Viikkoraportti 2
Perehdyin trie-tietorakenteen teoriaan ja toteutukseen. Punnitsin eri vaihtoehtoja solmun lasten tallentamiselle. Löytämäni python-toteutukset tallensivat lapsisolmut dict-rakenteeseen, mutta se ei vaikuttanut minusta parhaalta vaihtoehdolta tässä tapauksessa. Hajautustaulun sijaan voimme käyttää suoraan taulukkoa, kunhan meillä on jokin tapa muuntaa merkit taulukon indekseiksi. Siirrän tämän laskennan tietorakenteen ulkopuolelle. Toisin sanoen opetusdatan prosessoinnissa ja markovin ketjun tulosteen tulkinnassa muunnan dataa nuoteista indekseiksi ja toisin päin. Tämän voi toteuttaa hajautustaululla tai jollakin muulla tavalla. Oleellisesti tämä tehdään kerran jokaista OPETUSDATAN nuottia kohden, eikä useita kertoja jokaista markovin ketjun iteraatiota kohden. Tietorakenteen käyttö hankaloituu, mutta mielestäni se on tässä projektissa hyväksyttävä kompromissi, sillä tavoitteena ei ole tehdä yleiseen käyttöön tarkoitettua kirjastoa, eikä python olisikaan tehokkain tapa toteuttaa sellaista. Tähän ratkaisuun toivoisin palautetta viikkopalautteessa.
Perehdyin trie-tietorakenteen teoriaan ja toteutukseen. Punnitsin eri vaihtoehtoja solmun lasten tallentamiselle. Löytämäni python-toteutukset tallensivat lapsisolmut dict-rakenteeseen. Hajautustaulun sijaan voimme käyttää suoraan taulukkoa, kunhan meillä on jokin tapa muuntaa merkit taulukon indekseiksi. Taulukon nopeus tässä tapauksessa riippuu vahvasti indeksien saamisen nopeudesta, enkä löytänyt tapaa tehdä tätä pythonissa niin, että kokonaisuus olisi nopeampi kuin hajautustaulu niillä aakkoston suuruksilla, joita tässä projektissa tullaan käyttämään. Esimerkiksi C++ tukee suoraan merkin ASCII-koodin ja kokonaislukujen välisen erotuksen laskemista, joka olisi laskennallisesti erittäin nopeaa, mutta pythonissa tähän tarvitaan ord()-funktio. Ord-funktio ja taulukko olivat testeissäni hitaampia kuin hajautustaulu. Hajautustaulun käyttäminen myös tuo helppoutta ja joustavuutta rakenteen käyttöön, sillä trie ei näin ota kantaa siihen, mitä siihen voidaan tallentaa. Tähän ratkaisuun toivoisin palautetta viikkopalautteessa.
Aikaa käytin tällä viikolla noin 3,5h.
Toinen poikkeama löytämästäni kirjallisuudesta on solmuissa oleva sanan loppua merkkaava muuttuja. Tässä käytössä en tarvitse operaatioita, jotka hyödyntäisivät tätä, ja saman toiminnon voin tarvittaessa saavuttaa tarkistamalla onko laskuri > 0.
Aikaa käytin tällä viikolla noin 4,5h.