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

55
src/trie.py Normal file
View file

@ -0,0 +1,55 @@
class TrieSolmu:
def __init__(self):
self.lapset = {}
self.laskuri = 0
self.todennakoisyys = 0.0
class Trie:
def __init__(self):
self.juuri = TrieSolmu()
self.todennakoisyydet_laskettu = True
def lisaa(self, alkio):
self.todennakoisyydet_laskettu = False
solmu = self.juuri
for x in alkio:
if x not in solmu.lapset:
solmu.lapset[x] = TrieSolmu()
solmu = solmu.lapset[x]
solmu.laskuri += 1
def laske_todennakoisyydet(self):
if self.todennakoisyydet_laskettu:
return
kasiteltavat_solmut = [self.juuri]
while kasiteltavat_solmut:
solmu = kasiteltavat_solmut.pop()
summa = 0
for _, x in solmu.lapset.items():
summa += x.laskuri
kasiteltavat_solmut.append(x)
if summa:
for _, x in solmu.lapset.items():
x.todennakoisyys = x.laskuri / summa
self.todennakoisyydet_laskettu = True
def etsi_seuraavat(self, alkuosa):
if not self.todennakoisyydet_laskettu:
self.laske_todennakoisyydet
solmu = self.juuri
for x in alkuosa:
if x not in solmu.lapset:
return []
solmu = solmu.lapset[x]
vaihtoehdot = []
for x, lapsi in solmu.lapset.items():
vaihtoehdot.append((lapsi.todennakoisyys, x))
return sorted(vaihtoehdot, reverse=True)