FI102426B - Menetelmä muistin toteuttamiseksi - Google Patents

Menetelmä muistin toteuttamiseksi Download PDF

Info

Publication number
FI102426B
FI102426B FI971067A FI971067A FI102426B FI 102426 B FI102426 B FI 102426B FI 971067 A FI971067 A FI 971067A FI 971067 A FI971067 A FI 971067A FI 102426 B FI102426 B FI 102426B
Authority
FI
Finland
Prior art keywords
node
nodes
bits
address
compressed
Prior art date
Application number
FI971067A
Other languages
English (en)
Swedish (sv)
Other versions
FI971067A0 (fi
FI102426B1 (fi
FI971067A (fi
Inventor
Matti Tikkanen
Jukka-Pekka Iivonen
Original Assignee
Nokia Telecommunications Oy
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nokia Telecommunications Oy filed Critical Nokia Telecommunications Oy
Priority to FI971067A priority Critical patent/FI102426B1/fi
Publication of FI971067A0 publication Critical patent/FI971067A0/fi
Priority to PCT/FI1998/000192 priority patent/WO1998041933A1/fi
Priority to AU66240/98A priority patent/AU6624098A/en
Priority to EP98908123A priority patent/EP0976066A1/en
Publication of FI971067A publication Critical patent/FI971067A/fi
Application granted granted Critical
Publication of FI102426B publication Critical patent/FI102426B/fi
Publication of FI102426B1 publication Critical patent/FI102426B1/fi
Priority to US09/389,574 priority patent/US6505206B1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/953Organization of data
    • Y10S707/956Hierarchical
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

, 102426
Menetelmä muistin toteuttamiseksi
Keksinnön ala
Keksintö liittyy yleisesti assosiatiivisen muistin toteuttamiseen, erityi-5 sesti digitaaliseen trie-rakenteeseen perustuvan assosiatiivisen muistin toteuttamiseen. Keksinnön mukainen ratkaisu on tarkoitettu käytettäväksi lähinnä keskusmuistitietokantojen yhteydessä ja sitä voidaan käyttää kaikkien digitaaliseen trie-rakenteeseen perustuvien muistien yhteydessä.
10 Keksinnön tausta
Keksinnön mukainen periaate pohjautuu sinänsä tunnettuun yksiulotteiseen hakemistorakenteeseen, jota kutsutaan nimellä digitaalinen trie (engl. digital trie, sana “trie” tulee englannin kielen sanasta “retrieval”). Digitaalisia trie-rakenteita voidaan toteuttaa kahden tyyppisinä: sellaisina, joissa on 15 sankoja (bucket trie) ja sellaisina, joissa ei ole sankoja.
Sangollinen digitaalinen trie-rakenne on puumainen rakenne, jossa on kahdenlaisia solmuja: sankoja ja trie-solmuja. Sangoksi kutsutaan tässä vaiheessa tietorakennetta, joka sisältää joukon tietoyksikköjä tai joukon osoittimia tietoyksiköihin tai joukon hakuavain/osoitin-pareja (joukkoon voi kuulua 20 vain yksi tietoyksikkö, yksi osoitin tai yksi avain/osoitin-pari). Trie-solmu on puolestaan hakua ohjaava taulukko, jonka koko on kaksi potenssiin k (2k) alkiota. Jos trie-solmun alkio on käytössä, se osoittaa joko hakemistopuun seuraavalla tasolla olevaan trie-solmuun tai sankoon. Muutoin alkio on vapaa (tyhjä).
25 Tietokantaan kohdistuva haku etenee tutkimalla hakuavainta (joka on esim. matkaviestinverkon tai puhelinkeskuksen tilaajatietokannan tapauksessa tyypillisesti se binääriluku, joka vastaa tilaajan puhelinnumeroa) k bittiä kerrallaan. Tutkittavat bitit valitaan, siten, että rakenteen ylimmällä tasolla (ensimmäisessä trie-solmussa) tutkitaan k:ta eniten vasemmalla olevia bittiä, 30 rakenteen toisella tasolla vasemmalta lukien seuraavia k.ta bittiä, jne. Tutkittavat bitit tulkitaan etumerkittömänä kaksijärjestelmän lukuna, jota käytetään suoraan trie-solmun sisältämän alkiotaulukon indeksinä, joka osoittaa tietyn alkion taulukosta. Jos indeksin mukainen alkio ei ole käytössä, haku päättyy epäonnistuneena. Jos alkio osoittaa seuraavalla tasolla olevaan trie-solmuun, 35 siellä tutkitaan edellä kuvatulla tavalla k:ta seuraavaa bittiä, jotka on irrotettu - ♦ 2 102426 hakuavaimesta. Vertailun perusteella haaraudutaan trie-solmussa edelleen joko seuraavalla tasolla olevaan trie-solmuun tai sankoon. Jos alkio osoittaa avaimen sisältävään sankoon, talletettua avainta verrataan hakuavaimeen. Koko hakuavaimen vertailu tapahtuu siten vasta haun saavuttaessa sangon.
5 Avainten ollessa samat haku on onnistunut, ja haluttu tietoyksikkö saadaan sangon osoittimen osoittamasta muistiosoitteesta. Avainten ollessa erisuuret haku päättyy epäonnistuneena.
Sangottomassa trie-rakenteessa ei ole sankoja, vaan viittaus tietoyksikköön tapahtuu puumaisessa hierarkiassa alimmalla tasolla olevasta trie-10 solmusta, jota kutsutaan lehtisolmuksi. Sangoista poiketen sangottoman rakenteen lehtisolmut eivät voi sisältää tietoyksikköjä, vaan ainoastaan osoittimia tietoyksiköihin. Myös sangollisessa rakenteessa on lehtisolmuja, joten trie-solmuista lehtisolmuja ovat sellaiset solmut, jotka sisältävät ainakin yhden osoittimen sankoon (sangollinen rakenne) tai tietoyksikköön (sangoton raken-15 ne). Trien muut solmut ovat sisäsolmuja. Trie-solmut voivat siis olla joko si-säsolmuja tai lehtisolmuja. Sankojen avulla saadaan hakemistorakenteen muokkaustarvetta lykättyä ajallisesti, koska sankoihin saadaan mahtumaan paljon osoittimia/tietoyksiköitä ennen kuin kyseinen tarve syntyy.
Keksinnön mukaista ratkaisua voidaan soveltaa sekä sangolliseen 20 että sangottomaan rakenteeseen. Jatkossa käytetään kuitenkin esimerkkeinä sangollisia rakenteita.
Kuviossa 1 on esitetty esimerkki digitaalisesta trie-rakenteesta, jossa avaimen pituus on 4 bittiä ja k=2, jolloin siis kussakin trie-solmussa on 22=4 alkiota ja kullakin tasolla tutkitaan kahta avaimesta irrotettua bittiä. Sankoja on 25 merkitty viitemerkeillä A, B, C, D...H...M, N, O ja P. Sanko on siis sellainen solmu, josta ei enää osoiteta puun alemmalle tasolle. Trie-solmuja on kuviossa 1 merkitty viitemerkeillä IN1 ...IN5 ja trie-solmun alkioita viitemerkeillä NE.
Kuvion 1 mukaisessa esimerkkitapauksessa ovat esitettyjen sankojen hakuavaimet seuraavat: A=0000, B=0001, C=0010,..., H=0111,... ja 30 P=1111. Kuhunkin sankoon on tässä tapauksessa talletettu osoitin siihen tietokannan SD muistipaikkaan, josta varsinainen data, esim. kyseisen tilaajan puhelinnumero sekä muut kyseistä tilaajaa koskevat tiedot löytyvät. Tietokannassa voi varsinainen tilaajadata olla talletettuna esim. peräkkäis-tiedostoksi kuviossa esitettyyn tapaan. Esim. tietueen H hakuavaimen perus-35 teella tapahtuu haku irrottamalla hakuavaimesta ensin kaksi vasem- 3 102426 manpuoleisinta bittiä (01) ja tulkitsemalla ne, jolloin päädytään solmun IN1 toiseen alkioon, joka sisältää osoittimien seuraavatla tasolla olevaan solmuun IN3. Tällä tasolla irrotetaan hakuavaimesta seuraavat kaksi bittiä (11), jolloin päädytään ko. solmun neljänteen alkioon, joka osoittaa tietueeseen H.
5 Osoittimien asemesta sanko voi sisältää (hakuavaimen lisäksi) varsi naisen datatietueen (josta käytetään myös yleisempää nimitystä tietoyksikkö). Näin ollen esim. tilaajaa A koskevat tiedot (kuvio 1) voivat olla sangossa A, tilaajaa B koskevat tiedot sangossa B, jne. Assosiatiivisen muistin ensimmäisessä suoritusmuodossa sankoon on siis talletettu avain-osoitin-pari ja toises-10 sa suoritusmuodossa avain ja varsinainen data, joskaan avain ei ole välttämätön.
Hakuavain voi olla myös moniulotteinen. Toisin sanoen, hakuavain voi koostua useasta attribuutista (esim. tilaajan sukunimi ja yksi tai useampi etunimi). Tällainen moniulotteinen trie-rakenne on kuvattu kansainvälisessä 15 patenttihakemuksessa PCT/FI95/00319 (julkaisunumero WO 95/34155). Kyseisessä rakenteessa suoritetaan osoitelaskentaa siten, että kustakin dimensiosta valitaan, muista dimensioista riippumatta, kerrallaan tietty ennalta määrätty lukumäärä bittejä. Trie-rakenteen yksittäisen solmun kullekin dimensiolle asetetaan siis kiinteä, muista dimensioista riippumaton raja määräämällä 20 etukäteen kussakin dimensiossa tutkittavien hakuavainbittien lukumäärä. Tällaisella rakenteella saadaan muistipiirien tarve pieneksi silloin, kun hakua-vainten arvojen jakaumat ovat etukäteen tiedossa, jolloin rakenne voidaan toteuttaa staattisena.
Mikäli halutaan saada mahdollisuus muokata rakennetta kulloisenkin 25 avainjakauman mukaan tehokkuudeltaan ja muistinkulutukseltaan mahdollisimman optimaaliseksi, on solmujen kokojen muututtava dynaamisesti avain-jakauman muuttuessa. Avainjakauman ollessa tasainen voidaan solmukokoja kasvattaa, jotta rakenteesta saadaan matalampi. Epätasaisilla avainjakaumilla, joiden yhteydessä muistinkulutus nousee ongelmaksi dynaamisia solmukokoja 30 käyttävissä muistirakenteissa, voidaan puolestaan pitää solmukoot pienenä, jolloin saadaan paikallisesti tasaisempi avainjakauma ja sitä kautta pienempi muistinkulutus. Solmukokojen dynaamiset muutokset edellyttävät osoitelas-kennan toteuttamista siten, että digitaalisen trie-rakenteen muodostaman puumaisen hierarkian kussakin solmussa valitaan solmukohtainen lukumäärä 35 bittejä käytettyjen hakuavaimien muodostamasta bittijonosta.
4 102426
Valinta kiinteän solmukoon ja dynaamisesti muuttuvan solmukoon välillä riippuu mm. siitä, minkälaiseen sovellukseen muisti on tarkoitettu, esim. mikä on tietokantaan tehtävien hakujen, lisäysten ja poistojen määrä ja mitkä ovat kyseisten operaatioiden suhteelliset osuudet.
5 Riippumatta siitä, käytetäänkö muistissa kiinteää vai muuttuvaa sol- mukokoa, on digitaaliseen trie-rakenteeseen perustuvissa muisteissa kuitenkin ongelmana se, kuinka rakenteeseen väistämättä syntyvä tyhjä tila saadaan mallinnettua niin, että muistinkulutus saadaan mahdollisimman alhaiseksi ja muistin tehokkuus (muistioperaatioiden nopeus) mahdollisimman hyväksi.
10
Keksinnön yhteenveto
Keksinnön tarkoituksena on saada aikaan ratkaisu edellä kuvattuun ongelmaan. Tämä päämäärä saavutetaan menetelmällä, joka on määritelty itsenäisissä patenttivaatimuksissa. Näistä ensimmäinen kuvaa rakennetta, 15 jossa käytetään sankoja ja toinen rakennetta, jossa ei käytetä sankoja.
Keksinnön perusajatuksena on kompressoida digitaalisen trie-rakenteen sellaiset solmut, jotka muodostavat vain yhden polun alaspäin puumaisessa hierarkiassa. Tällaiseen kompressoituun solmuun talletetaan se tieto, joka tarvitaan rakenteessa etenemiseen ja solmujen uudelleen muodos-20 tamiseen, ilman, että kuitenkaan tarvitaan muistitilaa alkiotauluko(i)lle.
Keksinnön mukaisen ratkaisun ansiosta pystytään trie-rakenteeseen jäävä tyhjä tila mallintamaan siten, että rakenteen muistinkulutus saadaan pysymään pienenä niin tasaisten kuin epätasaistenkin avainjakaumien yhteydessä. Lisäksi ratkaisu mahdollistaa laskenta-aikaa vaativien muistiviittausten 25 minimoinnin, minkä ansiosta muistin tehokkuus (nopeus) saadaan mahdollisimman hyväksi.
Keksinnön erään erittäin edullisen toteutustavan mukaisesti kukin peräkkäisten kompressoitujen solmujen muodostama ketju korvataan yhdellä *· kokoavalla solmulla. Tällä tavoin saadaan eliminoitua rajoitetusta sanan pituu- 30 desta aiheutuvat peräkkäisten kompressoitujen solmujen muodostamat ketjut. Ketjujen eliminointi parantaa edelleen muistin tehokkuutta ja pienentää muistitilan tarvetta.
Keksinnön mukainen ratkaisu takaa myös joukko-operaatioiden tehokkaan toteutuksen, koska rakenne on järjestyksen säilyttävä digitaalinen 35 trie.
s 102426
Kuvioluettelo
Seuraavassa keksintöä ja sen edullisia toteutustapoja kuvataan tarkemmin viitaten oheisten piirustusten mukaisiin esimerkkeihin, joissa 5 kuvio 1 havainnollistaa yksiulotteisen digitaalisen trie-rakenteen käyttöä puhelinkeskuksen tilaajatietojen ylläpitämisessä, kuvio 2 esittää erästä moniulotteista trie-rakennetta, kuvio 3 esittää erästä keksinnön mukaista muistirakennetta, kuvio 4 havainnollistaa osoitelaskennan toteuttamista eräässä kek-10 sinnön mukaisessa muistissa, kuvio 5 havainnollistaa muistin trie-solmun rakennetta, kun muistissa käytetään muuttuvaa solmukokoa, kuviot 6a ja 6b havainnollistavat kompressoidun solmun muodosta-misperiaatetta, 15 kuviot 7a ja 7b esittävät erästä esimerkkiä muistirakenteen ylläpidos ta, kuvio 8 havainnollistaa muistissa käytettävän kompressoidun solmun rakennetta, kuvio 9a havainnollistaa käytetyn sananpituuden aiheuttamaan rajoi-20 tusta solmujen yhdistämiselle, kuvio 9b esittää kuvion 9a solmuketjusta muodostettavan kokoavan solmun rakennetta, ja kuvio 10 esittää erästä keksinnön mukaista muistijärjestelyä lohko-kaaviotasolla.
25
Keksinnön yksityiskohtainen kuvaus
Kuten edellä mainittiin, toteutetaan trie-rakenne esillä olevassa keksinnössä moniulotteisena (yleisesti ottaen n-ulotteisena). Tällainen moniulot-teinen rakenne on muutoin aivan samanlainen kuin alussa kuvattu yksiulottei-30 nen rakenne, mutta trie-solmun sisältämä alkiotaulukko on moniulotteinen. Kuviossa 2 on esitetty esimerkkinä kaksiulotteinen 2z*21-rakenne, jossa alkiotau-lukossa on toisessa dimensiossa neljä alkiota ja toisessa dimensiossa kaksi alkiota. Trie-solmun alkioista osoitettuja sankoja on kuviossa merkitty ympyröillä. Osoitelaskenta tapahtuu moniulotteisessa tapauksessa samalla peri-35 aatteella kuin yksiulotteisessa tapauksessa. Peruserona on kuitenkin se, että 6 102426 yhden alkiotaulukkoindeksin sijaan lasketaankin indeksi jokaiselle alkiotaulu-kon dimensiolle (n kappaletta). Kullakin dimensiolla on tällöin oma haku-avainavaruutensa {0, 12VL1}(Vj on hakuavaimen pituus bitteinä kussakin dimensiossa ja i e {1,...n}).
5 Trie-solmun koko kunkin dimension suunnassa on 2k| alkiota ja trie- solmun alkioiden kokonaislukumäärä S on myös kakkosen potenssi: S = Y\2k'= 2k'x2kzx2k,x...= 2N (1)
Trie-solmun, jolla on n kappaletta dimensioita, kaikki alkiot voidaan siten osoittaa n kappaleella kokonaislukuja (n>2), joista kukin voi saada arvon, 10 joka on välillä {0,1...2ki-1}. Etukäteen kiinteäksi määrätty parametri on siis hakuavaimen kokonaispituus kussakin dimensiossa. Mikäli esim. hakuavaimen yhdessä dimensiossa on korkeintaan 256 attribuuttia (esim. etunimeä), on hakuavaimen kokonaispituus 8 bittiä.
Kuviossa 3 on esitetty esimerkkinä erästä keksinnön mukaisen 15 muistin hakemistorakenteessa käytettävää solmua N10, kun käytettävä haku-avain on kolmiulotteinen. Ensimmäisen dimension (x) suunnassa trie-solmussa on 2Z=4 alkiota, toisen dimension (y) suunnassa 21=2 alkiota ja kolmannen dimension (z) suunnassa 23=8 alkiota, jolloin trie-solmussa on yhteensä 26=64 alkioita, jotka on numeroitu välillä 0...63.
20 Koska käytännön laitteiden (esim. tietokonelaitteiden) muistiavaruus on yksiulotteinen, moniulotteinen taulukko linearisoidaan eli muunnetaan yksiulotteiseksi osoitelaskentaprosessissa (eli edettäessä hakemistopuussa). Li-.· nearisointi on aritmeettinen operaatio, jonka voi tehdä kaikenkokoisille tau lukoille. Näin ollen ei ole väliä, katsotaanko trie-solmut tai niiden alkiotaulukot 25 yksi- vai moniulotteisiksi, koska moniulotteiset taulukot linearisoidaan joka tapauksessa yksiulotteisiksi.
Linearisoinnissa taulukon alkiot numeroidaan nollasta alkaen (aivan kuin on esitetty kuviossa 3), jolloin viimeisen alkion numero on yhtä pienempi \ kuin kaikkien ulottuvuuksien kokojen tulo. Alkion numero on summa jokaisen 30 koordinaatin (esim. kolmiulotteisessa tapauksessa x-, y- ja z-koordinaatit) ja sitä edeltävien dimensioiden kokojen tuloista. Näin laskettua numeroa käytetään suoraan yksiulotteisen taulukon indeksinä.
Kuviossa 3 esitetyn trie-solmun tapauksessa lasketaan alkion nume-.. ro VAn edellä esitetyn mukaisesti kaavalla: 35 VAn= x+yx4+zx4x2 (2) 7 102426 missä X€{0,1,2,3}, ye{0,1} ja ze{0,1,2,3,4,5,6,7}. Esim. alkiolle 54 saadaan näin sen koordinaateista (2,1,6): 2+1x4+6x4x2=2+4+48=54.
Linearisoitaessa n-ulotteisen trie-rakenteen trie-solmun (n-ulotteista) alkiotaulukkoa jokaisen dimension koko on edellä esitetyn mukaisesti 2kj, 5 missä kj on ko. dimension kerralla tutkittavien bittien lukumäärä. Jos viitemer-killä as merkitään dimension mukaista koordinaattia (je{0,1,2...n}), linearisointi voidaan kirjoittaa muotoon: n j~ l *' , .
Σβ>Π2 J- aj ε|θ,1,2,...,2^ -1|λ&0 = 0 (3) 1 /*0 10 Linearisointi voidaan toteuttaa suorittamalla kaavan (3) mukainen kertolasku, mutta on kuitenkin edullista suorittaa linearisointi muodostamalla hakuavainbiteistä jollakin sinänsä tunnetulla tavalla bittijono, jota vastaava luku ilmoittaa sen alkion, jonka sisällön perusteella hakemistopuussa edetään. Tällaista linearisointitapaa kutsutaan bittilimitykseksi. Bittilimitys on tehok-15 kaampi (nopeampi) kuin kaavan (3) mukainen kertolasku, koska bittilimitystä käytettäessä kertolaskut muuttuvat yhteenlaskuiksi ja bittisiirroiksi, jotka ovat nopeampia suorittaa.
Yleisin tapa bittilimityksen toteuttamiseksi on ns. z-järjestys. Toinen mahdollinen bittilimitystapa rivijärjestys. Esillä olevassa keksinnössä on edul-20 lista käyttää rivijärjestystä, koska sillä saavutetaan tehokkain osoitelaskenta muistihauissa, mutta mitä tahansa tunnettua bittilimitystapaa voidaan käyttää, kunhan samaa bittilimitystapaa käytetään rakenteen kaikissa solmuissa.
Kuviossa 4 on havainnollistettu erästä esimerkkiä keksinnön mukaisessa trie-rakenteessa suoritettavasta osoitelaskennasta. Kuviossa on oletet-25 tu, että muistissa käytetään dynaamisesti muuttuvia solmukokoja ja että avaruuden ulotteisuus on 3 (dimensiot x, y ja z). Lisäksi on oletettu, että hakuavain ax dimension x suunnassa on ax = 011011, hakuavain ay dimension y suunnassa ay = 110100 ja hakuavain az dimension z suunnassa on az = 101010. Hakuavaimet on merkitty kuvioon allekkain.
30 Trie-rakenteen solmuissa yksiulotteisen alkiotaulukon indeksin muodostavat bitit on esitetty yhtenäisillä viivoilla esitetyissä kehyksissä. Nämä kehykset kuvaavat siis sitä, kuinka globaali hakuavain jaetaan paikallisiksi hakuavaimiksi (aikiotaulukkoindekseiksi), joista kutakin käytetään trie-rakenteen yhdessä solmussa. Kaikki yhtenäisillä viivoilla esitetyt kehykset 3 102426 koskevat ensimmäistä bittilimitystapaa eli z-järjestystä. Rakenteen solmuja on merkitty etenemisjärjestyksessä viitemerkeillä N1...N7. Ensimmäisessä (ylimmällä tasolla olevassa) solmussa (N1) käytetään vain yhtä bittiä, joka on dimension x hakuavaimen vasemmanpuoleisin bitti (joka on looginen nolla).
5 Tämän jälkeen siirrytään nuolen mukaisesti seuraavaan solmuun (N2), jossa paikallisen hakuavaimen muodostavien bittien lukumäärä on kaksi. Nämä ovat hakuavaimen ay vasemmanpuoleisin bitti ja hakuavaimen az vasemmanpuoleisin bitti. Bittien jäijestys on z-järjestyksessä aina esitetyn mukainen, toisin sanoen ensin otetaan ensimmäisen dimension ensimmäinen bitti, sen jälkeen 10 toisen dimension ensimmäinen bitti, sen jälkeen kolmannen dimension ensimmäinen bitti, jne. Viimeisen dimension ensimmäisen bitin jälkeen otetaan toiset bitit eri dimensioista, ensimmäisestä dimensiosta alkaen. Tällä tavoin saadaan seuraavat solmukohtaiset alkiotaulukkoindeksit: 0 (solmu N1), 11 (solmu N2), 110 (solmu N3), 10 (solmu N4), 1010 (solmu N5), 10 (solmu N6) 15 ja 1100 (solmu N7).
Vaihtoehtoisesti voidaan muistissa käyttää jotakin muuta tunnettua bittilimitystapaa, esim. rivijärjestystä. Kuviossa 4 on katkoviivoilla piirretyillä kehyksillä ja niihin liittyvillä nuolilla havainnollistettu alkiotaulukkoindeksin muodostusta solmussa N5, kun muistissa käytetään bittilimitystä rivijärjestyk-20 sessä. Kuvion esimerkissä oletetaan lisäksi, että eteneminen on suoritettu solmuissa N1...N4 niin pitkälle, että ensimmäinen solmussa N5 tutkittava bitti on dimension z suuntaisen hakuavaimen vasemmalta lukien kolmas bitti. Rivijärjestystä käytettäessä poimitaan kunkin dimension kaikki bitit kerralla.
Rivijärjestystä käytettäessä lasketaan solmussa ensin se minimäärä 25 bittejä, joka eri dimensioiden hakuavaimista otetaan. Tämä saadaan jakamalla solmussa tutkittavien bittien lukumäärä dimensioiden lukumäärällä ja pyöristämällä saatu tulos alaspäin lähimpään kokonaislukuun. Tässä esimerkkitapauksessa on solmussa N5 tutkittavien bittien lukumäärä neljä ja dimensioiden lukumäärä puolestaan kolme, jolloin minimimääräksi saadaan yksi (eli kunkin 30 dimension hakuavaimesta on otettava vähintään yksi bitti). Tämän jälkeen on vielä laskettava, kuinka monta lisäbittiä on otettava eri dimensioiden hakuavaimista. Lisäbittien lukumäärä A saadaan kaavasta A= k mod n, missä k on solmussa tutkittavien bittien lukumäärä ja n on dimensioiden lukumäärä. Tässä esimerkkitapauksessa saadaan siis A= 4 mod 3 = 1. Lopputulos 1 tarkoittaa 35 siis, että on otettava 1 lisäbitti. Lisäbittien ottaminen aloitetaan aina ensimmäi- 9 102426 sestä tutkittavasta dimensiosta. Tässä esimerkkitapauksessa otetaan siis 1 lisäbitti dimension z hakuavaimesta. Mikäli lopputulos olisi ollut kaksi, olisi otettu yksi lisäbitti dimension z hakuavaimesta ja yksi lisäbitti dimension x hakuavaimesta.
5 Tässä esimerkkitapauksessa otetaan siis 1 bitti jokaisen dimension hakuavaimesta ja lisäksi yksi bitti dimension z hakuavaimesta. Koska rivijär-jestystä käytettäessä poimitaan kunkin dimension kaikki bitit kerralla, poimitaan ensin kaikki dimensiosta z otettavat bitit (10), sen jälkeen kaikki dimension x hakuavaimesta käytettävät bitit (0) ja viimeisenä kaikki dimension y ha-10 kuavaimesta poimittavat bitit (1). Rivijärjestystä käytettäessä saadaan näin ollen solmun N5 alkiotaulukkoindeksiksi bittijono 1001, joka on esitetty kuvion 4 alalaidassa.
Koska osoitelaskenta suoritetaan keksinnön mukaisessa muistissa käyttäen sinänsä tunnettua bittilimitystä, ei osoitelaskentaa kuvata tämän 15 enempää.
Koska bittien järjestys kussakin solmussa muodostettavassa paikallisessa hakuavaimessa (alkiotaulukkoindeksissä) on vakio, on kussakin solmussa suoritettavassa bittijonon muodostuksessa tiedettävä ainoastaan käytettävien bittien lukumäärä. Tämä tieto on talletettu kuhunkin solmuun. Tämän 20 lisäksi kussakin tavallisessa trie-solmussa on oltava ainoastaan alkiotaulukko. Kuviossa 5 on havainnollistettu tavallisen trie-solmun rakennetta, kun käytetään dynaamisesti muuttuvaa solmukokoa. Minimikokoonpanossaan solmu käsittää siis ainoastaan kaksi osaa: kentän, joka kertoo solmussa tutkittavien bittien lukumäärän (viitenumero 51) ja alkiotaulukon (viitenumero 52), jossa 25 olevien alkioiden lukumäärä vastaa jotakin kakkosen potenssia. Hakemistopuussa etenemiseksi on tutkittavien bittien lukumäärän lisäksi tiedettävä kunkin solmun tyyppi. Tämä tieto voidaan tallettaa hakemistorakenteessa esim. kuhunkin solmuun tai solmun «äsolmun osoittimeen. Osoittimen kahdella “ylimääräisellä” bitillä (a ja b, kuvio 5) voidaan koodata osoittimeen tieto siitä, 30 onko kysymyksessä nollaosoitin (tyhjä alkio) vai osoittaako osoitin tavalliseen trie-solmuun, sankoon vai kompressoituun trie-solmuun (jota kuvataan jäljempänä). Koodaus voi olla esim. kuviossa esitetyn kaltainen.
Sangottoman rakenteen tapauksessa talletetaan muistiin tieto siitä, osoittaako osoitin kompressoimattomaan solmuun, kompressoituun solmuun 35 vai tietoyksikköön.
10 102426
Mikäli muistissa käytetään kiinteää solmukokoa, ei solmuun tarvitse tallettaa tutkittavien bittien lukumäärää. Tässä tapauksessa solmussa ei siis välttämättä ole muuta kuin alkiotaulukko.
Muistitilan minimoimiseksi ja muistin tehokkuuden parantamiseksi 5 muodostetaan trie-rakenteen solmuista tietyissä tapauksissa kompressoituja solmuja. Mikäli tavallisella trie-solmulla on vain yksi lapsi, tarkoittaa tämä sitä, että ko. trie-solmun kautta kulkee vain yksi polku alaspäin puussa. Sellainen trie-solmu, joka sisältää vain yhden osoittimen (polun alaspäin) korvataan keksinnön mukaisesti kompressoidulla solmulla, jossa kerrotaan kyseisellä 10 polulla tutkittujen bittien lukumäärä ja laskettu taulukkoindeksin arvo. Koska tarvittavan muistitilan kannalta on edullista muodostaa yhden lapsen trie-solmuista kompressoituja solmuja koko muistirakenteessa, tarkoittaa kompressointi myös sitä, että muistirakenteen tavallisilla (ei-kompressoiduilla) trie-solmuilla ylläpidetään aina vähintään kaksi lasta, eli yksittäisestä (tavallisesta) 15 trie-solmusta on osoittimet ainakin kahteen eri alemman tason solmuun (lapsisolmuun). Kompressoitu solmu korvaa yhden tai useamman peräkkäisen sisäsolmun, joilla kaikilla on yksi lapsi, joten edellä mainittu yksi lapsi ei voi olla sanko (eikä lehti rakenteessa, jossa sankoja ei ole). Lapsisolmun on siis oltava tavallinen trie-solmu, jotta kompressointi voidaan tehdä. Muistitilan optimoinnin 20 kannalta on siis edullista ylläpitää myös sankoa edeltävillä trie-solmuilla aina vähintään kaksi lasta (eli jos sankoa edeltää kokoa kaksi oleva trie-solmu, ko. trie-solmulla on aina kaksi lasta).
Keksinnön mukaisessa muistissa on siis kahdenlaisia trie-solmuja: tavallisia trie-solmuja, jotka sisältävät kuvion 5 mukaisesti alkiotaulukon ja 25 kompressoituja solmuja, joita kuvataan seuraavassa.
Kuvioissa 6a ja 6b on havainnollistettu kompressoidun solmun muodostamisperiaatetta. Yksinkertaisuuden vuoksi kaikkien solmujen on oletettu olevan kokoa kaksi. Kuviossa 6a on esitetty kuudesta solmusta muodostuva trie-rakenne, jossa on viiden ylimmäisen solmun osalta vain yksi 30 polku. Tämä viiden solmun trie-rakenne voidaan korvata yhdellä alkiotaulukol-la, joka on esitetty kuviossa 6b. Koska rakenteessa on näiden solmujen osalta vain yksi polku, on taulukosta käytössä vain yksi alkio, joka on tässä esimerkkitapauksessa alkio 18, joka on ympyröity kuviossa (18=01010, kun bitit otetaan rivijärjestyksessä, eli ensin x-bitit ja sen jälkeen y-bitit). Näin ollen trie-35 rakenne voidaan viiden ylimmän solmun osalta korvata kompressoidulla soi- 11 102426 multa, johon on talletettu tutkittavien bittien lukumäärä (5) ja taulukkoindeksin arvo (18).
Kuvioissa 7a ja 7b on esitetty erästä paikallista ylläpitoesimerkkiä, kun tietoyksikköjä ja niitä vastaavia avaimia poistetaan tietokannasta. Kuvios-5 sa 7a on esitetty alkutilanne, jossa muistirakenne käsittää trie-solmut N111...N113ja sangot L2...L4. Tämän jälkeen muistista poistetaan sanko L2 ja sen sisältämä osoitin/tietue, jolloin solmut N111 ja N112 voidaan korvata kompressoidulla solmulla CN, jossa kerrotaan solmun sisältämän osoittimen indeksi ja niiden bittien lukumäärä, jotka on tutkittu sillä polulla, jonka komp-10 ressoitu solmu korvaa. Kompressoitu solmu on siis periaatteessa samanlainen kuin tavallinen trie-solmu, mutta sen sijaan, että talletettaisiin koko iso alkio-taulukko, jossa on vain yksi osoitin, talletetaanko kyseisen osoittimen indeksi ja polulla tutkittavien bittien lukumäärä. Näin ollen syntyy kuvion 7b mukainen kompressoitu solmu CN, jossa on kerrottu kyseisellä polulla tutkittavien bittien 15 lukumäärä (3) ja kyseistä osoitinta vastaava indeksi (101=5, kun käytetään bittilimitystä rivijäijestyksessä). Kompressoidussa solmussa on siis virtuaalinen taulukko, joka korvaa polulla olleen, yhden tai useamman solmutaulukon sisältämän informaation. Mikäli kompressoitu solmu korvaa useita tavallisia trie-solmuja, on kompressoidussa solmussa ilmoitettava tutkittavien bittien 20 lukumäärä yhtä suuri kuin korvatuissa solmuissa tutkittavien bittien lukumäärien summa.
Kuviossa 8 on havainnollistettu kompressoidun solmun rakennetta. Solmun minimikokoonpanoon kuuluu 3 osaa: kenttä 120, joka kertoo tutkittavi-en bittien lukumäärän, kenttä 121, johon on talletettu taulukkoindeksin arvo ja 25 kenttä 122, johon on talletettu osoitin lapsisolmuun. Kompressoidussa solmussa tarvitaan em. tiedot siksi, että haku voisi jatkua myös kompressoidun solmun kohdalla oikealla arvolla ja että solmun uudelleenmuokkaus onnistuisi muistirakenteen muutosten yhteydessä. (Ilman tietoa tutkittavien bittien lukumäärästä ei hakuavaimesta voida laskea taulukkoindeksin arvoa ja toisaalta 30 ilman taulukkoindeksin arvoa ei laskettua arvoa voitaisi verrata solmuun talletettuun arvoon.)
Mikäli kompressoidussa solmussa tapahtuu lisäyksen yhteydessä yhteentörmäys eli kompressoituun solmuun tuleekin uusi osoitin, tutkitaan, kuinka mones bitti erottaa alkuperäisen osoittimen indeksin ja uuden osoitti-35 men indeksin. Tämän mukaan luodaan alkuperäisen kompressoidun solmun 12 102426 korvaava rakenne, jossa uusi kompressoitu solmu sisältää indeksin bittien lukumäärän siltä osin kuin yhteisiä bittejä on. Lisäksi rakenteeseen syntyy yksi tai useampi trie-solmu niitä bittejä vastaaville kohdille, joiden osalta indeksit eroavat toisistaan.
5 Mikäli kompressoitua solmua edeltää yksi tai useampi kompressoitu solmu tai trie-solmuketju, joka muodostaa vain yhden polun, on muistitilan tarpeen ja muistin tehokkuuden kannalta edelleen edullista yhdistää kyseisiä solmuja. Muistin tehokkuuden kannalta on edelleen edullista suorittaa solmujen yhdistäminen niin, että vain ketjun viimeisenä (alimpana) olevassa komp-10 ressoidussa solmussa tutkittavien bittien lukumäärä on pienempi kuin käytetyn tietokoneen käyttämä sananpituus. Toisin sanoen, solmuja yhdistetään niin, että tutkittavien bittien lukumäärä saadaan kussakin kompressoidussa solmussa mahdollisimman suureksi. Esim. kolme peräkkäistä kompressoitua solmua, joissa tutkittavien bittien lukumäärät ovat 5, 10 ja 15 voidaan yhdistää 15 yhdeksi kompressoiduksi solmuksi, jossa tutkittavien bittien lukumäärä on 30. Vastaavasti esim. kolme peräkkäistä kompressoitua solmua (tai kolme peräkkäistä tavallista trie-solmua, jotka virittävät vain yhden polun), joissa tutkittavien bittien lukumäärät ovat 10, 10 ja 15 voidaan yhdistää kahdeksi kompressoiduksi solmuksi, joissa tutkittavien bittien lukumäärät ovat 32 ja 3, kun käy-20 tetty sananpituus on 32. Mahdollisimman moneen kompressoituun solmuun pyritään siis saamaan tietokoneen sananpituutta vastaava määrä tutkittavia bittejä, ja mahdolliset “ylimääräiset” bitit jätetään hierarkiassa alimpana olevaan kompressoituun solmuun.
Kompressoituja solmuja ei kuitenkaan voida yhdistää niin, että yhdessä 25 solmussa tutkittavien bittien lukumäärä olisi suurempi kuin käytetyn tietokoneen sananpituus. Erityisesti useampiulotteisissa (n>3) tapauksissa on havaittu olevan tavallista, että peräkkäisiä yhden lapsen sisältäviä solmuja on niin monta, että polkua ei voida esittää yhdellä kompressoidulla solmulla. Niinpä hakupolku tai sen osa korvautuu usean peräkkäisen kompressoidun solmun 30 muodostamalla ketjulla, jossa muissa paitsi viimeisessä solmussa on tutkittavien bittien lukumäärä sama kuin bittien lukumäärä sanassa, esim. Intel-arkkitehtuurissa 32, ja viimeisessä solmussa pienempi tai yhtä suuri kuin bittien lukumäärä sanassa.
Tällaista tilannetta on havainnollistettu kuviossa 9a, jossa on esitetty 35 kolme peräkkäistä kompressoitua solmua CN1...CN3. Solmuissa tutkittavien 13 102426 bittien lukumääriä on merkitty viitemerkeillä b, b’ ja b” ja solmujen sisältämien taulukkoindeksien arvoja vastaavasti viitemerkeillä i, i’ ja i”. Kahdessa ylimmässä solmussa on tutkittavien bittien lukumäärällä maksimiarvonsa (olettaen, että käytetään 32-bittistä tietokonearkkitehtuuria).
5 Rajoitetun sananpituuden aiheuttamasta, useiden peräkkäisten komp ressoitujen solmujen muodostamasta ketjusta on edullista muodostaa yksi ko. kompressoidut solmut kokoava solmu. Tämä kokoava solmu muodostetaan siten, että kokoavan solmun osoitin asetetaan osoittamaan ko. ketjussa viimeisenä olevan kompressoidun solmun lapsisolmuun, kokoavan solmun tutkitta-10 vien bittien lukumääräksi B asetetaan ketjussa olevien kompressoitujen solmujen tutkittavien bittien lukumäärien summa ja bittilimityksellä tuotetut tauluk-koindeksit (eli hakusanat) asetetaan solmussa sijaitsevaan listaan tai taulukkoon T siinä järjestyksessä, missä ne esiintyvät peräkkäisissä kompressoiduissa solmuissa. Kokoavasta solmusta tulee näin ollen kuvion 9b mukainen 15 solmu CN4, jossa on kolme osaa: kenttä 130, joka sisältää osoittimen mainittuun alemman tason solmuun, kenttä 131, joka sisältää tutkittavien bittien lukumäärän B (em. summan) ja lista tai taulukko T, joka sisältää peräkkäin bittilimityksellä tuotetut taulukkoindeksit. Tämä kolmas osa on siis kooltaan muuttuva. Kuvion esimerkissä indeksien lukumäärä on kolme, koska kuvion 9a 20 esimerkissä on kolme peräkkäistä solmua.
Taulukon T alkioiden (eli indeksien) lukumäärä EN saadaan selville tutkittavien bittien lukumäärästä B seuraavasti: , BIW, jos B MOD W = 0 EN = \ lB/W]+\,josBMODW*0 missä L J on floor-funktio, joka poistaa luvusta desimaalit, W on käytetyn 25 sanan pituus, esim. 32 ja MOD viittaa modulo-aritmetiikkaan. Kokoavaan solmuun ei siis tarvitse tallettaa indeksien lukumäärää erillisenä tietona, vaan se saadaan selville tutkittavien bittien lukumäärän perusteella.
Taulukossa viimeisenä olevan indeksin laskennassa tarvittava bittien lukumäärä B’ (jota on kuviossa merkitty viitemerkillä b"), joka ei välttämättä ole 30 yhtä suuri kuin sanan pituus, saadaan seuraavasti: , W,josBMODW = 0 5' = ί B MODW, jos B MODW * 0
Muodostamalla useasta peräkkäisestä kompressoidusta solmusta ko- 14 102426 koava solmu saadaan muistiviittauksien (osoittimien) lukumäärä entistä pienemmäksi. Nykyisessä tietokonearkkitehtuurissa, jossa on useampitasoisia cache-muisteja, vaativat muistiviittaukset suhteellisen paljon laskenta-aikaa, joten laskenta-aika saadaan näin ollen pienemmäksi. Samalla poistuu muisti-5 tilan tarve osoittimien osalta.
Kompressoitujen solmujen avulla pystytään muistintarvetta minimoimaan tehokkaasti erityisesti epätasaisten avainjakaumien yhteydessä, koska kompression avulla pystytään rakenteen syvyyttä kasvattamaan paikallisesti mielivaltaisen suureksi ilman, että tilantarve kasvaa. Paitsi epätasaisten 10 avainjakaumien yhteydessä, syntyy yhden lapsen sisältäviä solmuja myös tasaisten avainjakaumien yhteydessä, kun rakenteen ulotteisuus on riittävän suuri.
Kuten edellä jo epäsuorasti mainittiin, keksinnön mukaisessa muistissa sankoa ei voi edeltää kompressoitu solmu vaan sangon isäsolmuna on 15 aina joko tavallinen trie-solmu tai tyhjä alkio. Kompressoitu solmu ei siis voi osoittaa sankoon, vaan se osoittaa aina joko toiseen kompressoituun solmuun tai tavalliseen trie-solmuun. Tyhjällä alkiolla tarkoitetaan sitä, että jos tietueiden kokonaislukumäärä on pienempi kuin sankoon mahtuvien osoittimi-en/tietueiden lukumäärä, ei puumaista rakennetta vielä tarvita, vaan raken-20 teessä tullaan toimeen yhdellä sangolla (jolloin ko. solmua edeltää käsitteellisesti tyhjä alkio). Tällä tavoin on edullista menetellä muistin käyttöönoton alkuvaiheessa. Puumaista rakennetta kannattaa siis lähteä kasvattamaan vasta sitten, kun se on välttämätöntä.
Muistissa suoritettavat haut, lisäykset ja poistot suoritetaan muissa 25 suhteissa sinänsä tunnetulla tavalla. Tämän suhteen viitataan esim. alussa mainittuun kansainväliseen patenttihakemukseen, jossa kuvataan esim. lisäysten yhteydessä tapahtuvia törmäystilanteita tarkemmin. Tavanomaisten tuhoavien päivitysten asemesta-muistissa voidaan käyttää myös tunnettuja funktionaalisia päivityksiä, jotka toteutetaan tunnetulla tekniikalla kopioimalla 30 polku juuresta sankoihin.
Kuten alussa jo mainittiin, edellä kuvattu kompressointiperiaate koskee myös sangotonta trie-rakennetta. Tällöin sankoa vastaa tietoyksikkö (johon sangottoman rakenteen lehtisolmu osoittaa).
Kuviossa 10 on esitetty erästä keksinnön mukaista muistia lohkokaa-35 viotasolla. Kutakin dimensiota varten on oma tulorekisteri, joten tulorekisterejä 15 102426 on siis yhteensä n kappaletta. Näihin tulorekistereihin, joita on merkitty vii-temerkeillä R^.R,,, talletetaan kunkin dimension hakuavain, kukin omaan rekisteriinsä. Tulorekisterit on kytketty rekisteriin TR, johon muodostetaan edellä kuvattu hakusana käytetyn bittilimitysmenetelmän mukaisesti. Rekisteri 5 TR on kytketty summaimen S kautta muistin MEM osoitesisäänmenoon. Muistin ulostulo on puolestaan kytketty osoiterekisterille AR, jonka ulostulo on puolestaan kytketty summaimelle S. Aluksi luetaan jokaisesta rekisteristä valitut bitit oikeaan järjestykseen yhteisrekisteriin TR. Osoiterekisteriin AR on aluksi talletettu ensimmäisen trie-solmun aloitusosoite, jolloin tähän osoittee-10 seen summataan summaimessa S se osoite, joka saadaan offset-osoitteena rekisteriltä TR. Tämä osoite syötetään muistin MEM osoitesisäänmenoon, jolloin muistin dataulostulosta saadaan seuraavan trie-solmun aloitusosoite, joka kirjoitetaan osoiterekisteriin AR siellä olleen edellisen osoitteen päälle. Tämän jälkeen ladataan tulorekistereistä jälleen seuraavaksi valittavat bitit oikeaan jär-15 jestykseen yhteisrekisteriin TR ja näin saatu taulukko-osoite summataan ko. taulukon (eli trie-solmun) aloitusosoitteeseen, joka saadaan osoiterekisteristä AR. Tämä osoite syötetään jälleen muistin MEM osoitesisäänmenoon, jolloin muistin dataulostulosta saadaan seuraavan solmun aloitusosoite. Edellä kuvattuja menettelyä toistetaan kunnes on edetty haluttuun pisteeseen asti ja 20 voidaan suorittaa talletus tai lukea haluttu tietue.
Ohjauslogiikka CL huolehtii kompressoinnista sekä siitä, että kussakin solmussa otetaan rekistereistä oikea määrä bittejä. Mikäli muistissa käytetään dynaamisesti muuttuvia solmukokoja, ohjauslogiikka huolehtii lisäksi solmuko- t kojen ylläpidosta.
25 Osoitelaskennan nopeuteen voidaan vaikuttaa sillä, minkälainen laitetoteutus valitaan. Koska eteneminen tapahtuu edellä esitettyjen bitti-manipulaatioiden avulla, voidaan osoitelaskentaa nopeuttaa siirtymällä yhden prosessorin käytöstä moniprosessoriympäristöön, jossa suoritetaan rinnak-kaista prosessointia. Moniprosessoriympäristölle vaihtoehtoinen toteutustapa 30 on ASIC-piiri.
Vaikka keksintöä on edellä selostettu viitaten oheisten piirustusten mukaisiin esimerkkeihin, on selvää, ettei keksintö ole rajoittunut siihen, vaan sitä voidaan muunnella oheisissa patenttivaatimuksissa esitetyn keksinnöllisen ajatuksen puitteissa. Kompressointi voidaan esim. toteuttaa esim. vain osassa 35 muistia. Rakenne voidaan toteuttaa myös vaihtuvan mittaisille avaimille. Kuten 1β 102426 alussa jo mainittiin, ratkaisua voidaan soveltaa riippumatta siitä, käytetäänkö muistissa kiinteää vai muuttuvaa solmukokoa. Näin ollen, kun oheisissa vaatimuksissa todetaan, että solmussa valitaan tietty lukumäärä bittejä käytettyjen hakuavaimien muodostamasta bittijonosta, on sen ymmärrettävä kattavan 5 molemmat vaihtoehdot. Osoitelaskenta voi myös jatkua vielä sangossakin, edellyttäen, että bittejä on vielä tutkimatta. Alussa esitettyä sangon määritelmää onkin laajennettava siten, että sanko on tietorakenne, joka voi sisältää myös toisen trie-rakenteen. Useita keksinnön mukaisia hakemistorakenteita voidaan siis linkittää peräkkäin siten, että sankoon on talletettu toinen hake-10 mistorakenne (eli toinen trie-rakenne) tai sangon tai lehden sisältämä osoitin osoittaa toiseen hakemistorakenteeseen. Viittaus sangosta tai lehdestä tapahtuu suoraan seuraavan hakemistorakenteen juurisolmuun. Yleisesti ottaen voidaan todeta, että sanko sisältää ainakin yhden elementin siten, että yksittäisen elementin tyyppi on valittu joukosta, joka käsittää tietoyksikön, osoitti-15 men talletettuun tietoyksikköön, osoittimen toiseen hakemistorakenteeseen ja toisen hakemistorakenteen. Sankojen tarkempi toteutus riippuu sovelluksesta. Useissa tapauksissa kaikki sangoissa olevat elementit voivat esim. olla samaa tyyppiä, joka on joko tietoyksikkö tai osoitin tietoyksikköön. Sen sijaan esim. sovelluksessa, jossa muistiin talletetaan merkkijonoja sangossa voi olla ele-20 menttipareja siten, että sangon kaikki parit ovat joko osoitin tietoyksik-köön/osoitin hakemistorakenteeseen -pareja tai tietoyksikkö/osoitin hakemisto-rakenteeseen -pareja tai tietoyksikkö/hakemistorakenne -pareja. Tällöin voidaan esim. merkkijonon etuosa (prefix) tallettaa tietoyksikköön ja jatkaa hakua tietoyksikköä vastaavaan pariin kuuluvasta hakemistorakenteesta.

Claims (14)

1. Menetelmä muistin toteuttamiseksi, johon muistiin tieto talletetaan tietoyksikköinä, joista jokaiselle varataan muistissa oma muistitilansa, jonka 5 menetelmän mukaisesti - muisti toteutetaan hakemistorakenteena, joka muodostuu puumaisesta hierarkiasta, jossa on useilla eri hierarkiatasoilla olevia solmuja, jolloin yksittäinen solmu voi olla (i) trie-solmu, joka käsittää taulukon, jonka yksittäinen alkio voi sisältää puumaisessa hierarkiassa alempana olevan solmun 10 osoitteen ja jonka yksittäinen alkio voi myös olla tyhjä, jossa taulukossa olevien alkioiden lukumäärä vastaa jotakin kakkosen potenssia, tai (ii) sanko, joka sisältää ainakin yhden elementin siten, että sangon yksittäisen elementin tyyppi on valittu joukosta, joka käsittää tietoyksikön, osoittimen talletettuun tietoyksikköön, osoittimen toisen hakemistorakenteen solmuun ja toisen ha-15 kemistorakenteen, - hakemistorakenteessa suoritetaan osoitelaskentaa siten, että - (a) valitaan puumaisessa hierarkiassa ylimmällä tasolla olevassa solmussa tietty lukumäärä bittejä käytettyjen hakuavaimien muodostamasta bittijonosta, muodostetaan valituista biteistä hakusana, jonka perusteella 20 haetaan kyseisessä solmussa seuraavan solmun osoite ja edetään mainittuun solmuun, - (b) valitaan käytettyjen hakuavaimien muodostaman bittijonon vielä valitsematta olevien bittien joukosta tietty lukumäärä bittejä ja muodostetaan valituista biteistä hakusana, jonka avulla haetaan jälleen uuden, alem- 25 maila tasolla olevan solmun osoite sen solmun taulukosta, johon on edetty, - toistetaan askelta (b) kunnes päästään tyhjään alkioon tai kunnes uuden, alemmalla tasolla olevan solmun osoite on sangon osoite, tunnettu siitä, että - « ainakin osassa hakemistorakennetta korvataan keskenään peräk-30 käisten trie-solmujen joukkoja kompressoiduilla solmuilla siten, että yksittäinen joukko, joka muodostuu keskenään peräkkäisistä trie-solmuista, joista jokaisesta on ainoastaan yksi osoite alemman tason trie-solmuun, korvataan kompressoidulla solmulla (CN), johon talletetaan osoite siihen solmuun, johon korvattavassa joukossa alimpana oleva solmu osoittaa, tieto sen hakusanan 35 arvosta, jolla mainittu osoite löytyy sekä tieto niiden bittien kokonaislukumää- 18 102426 rästä, joista korvattavassa joukossa muodostetaan hakusanat.
2. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että korvausta suoritetaan koko hakemistorakenteessa siten, että kaikki mainitut joukot korvataan kompressoiduilla solmuilla.
3. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että korvaus suoritetaan myös joukolle, johon kuuluu vain yksi trie-solmu, jolloin talletettava bittien kokonaislukumäärä vastaa niiden bittien lukumäärää, joista mainitussa trie-solmussa muodostetaan hakusana.
4. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, 10 että hakemistorakenteeseen muodostetaan useita peräkkäisiä kompressoituja solmuja siten, että ainakin ylimmällä tasolla olevaan kompressoituun solmuun kerätään käytettyä sanan pituutta vastaava lukumäärä tutkittavia hakuavain-bittejä.
5. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, 15 että useita peräkkäisiä kompressoituja solmuja yhdistetään yhdeksi uudeksi kompressoiduksi solmuksi, jolloin uuteen solmuun talletetaan bittien lukumääräksi yhdistettävistä solmuista saatujen lukumäärien summa.
6. Patenttivaatimuksen 4 mukainen menetelmä, tunnettu siitä, että sellaisten peräkkäisten kompressoitujen solmujen muodostama ketju, 20 jossa ainakin kahdessa ylimmäisessä solmussa tutkittavien bittien lukumäärä vastaa käytettyä sanan pituutta korvataan yhdellä kokoavalla solmulla (CN4), joka sisältää: - osoitteen siihen solmuun, johon ketjussa alimpana oleva solmu sisältää osoitteen, 25. ketjun solmuista saadun tutkittavien bittien lukumäärän summan, ja - peräkkäisjärjestyksessä ketjun solmujen sisältämät hakusana-arvot.
7. Patenttivaatimuksen 1 mukainen menetelmä, tunnettu siitä, että muistin kaikissa kompressoimattomissa trie-solmuissa ylläpidetään vä- < hintään kaksi osoitetta alemman tason solmuun.
8. Menetelmä muistin toteuttamiseksi, johon muistiin tieto talletetaan tietoyksikköinä, joista jokaiselle varataan muistissa oma muistitilansa, jonka menetelmän mukaisesti - muisti toteutetaan hakemistorakenteena, joka muodostuu puumaisesta hierarkiasta, jossa on useilla eri hierarkiatasoilla olevia solmuja, jolloin 35 yksittäinen solmu voi olla (i) sisäsolmu, joka käsittää taulukon, jonka yksittä)- 19 102426 nen alkio voi sisältää puumaisessa hierarkiassa alempana olevan solmun osoitteen ja jonka yksittäinen alkio voi myös olla tyhjä, jossa taulukossa olevien alkioiden lukumäärä vastaa jotakin kakkosen potenssia, tai (ii) lehti, joka sisältää ainakin yhden elementin, jonka tyyppi on yksi joukosta, joka käsittää 5 osoittimen talletettuun tietoyksikköön ja osoittimen toisen hakemistorakenteen solmuun, - hakemistorakenteessa suoritetaan osoitelaskentaa siten, että - (a) valitaan puumaisessa hierarkiassa ylimmällä tasolla olevassa solmussa tietty lukumäärä bittejä käytettyjen hakuavaimien muodostamasta 10 bittijonosta, muodostetaan' valituista biteistä hakusana, jonka perusteella haetaan kyseisessä solmussa seuraavan solmun osoite ja edetään mainittuun solmuun, - (b) valitaan käytettyjen hakuavaimien muodostaman bittijonon vielä valitsematta olevien bittien joukosta tietty lukumäärä bittejä ja muodoste- 15 taan valituista biteistä hakusana, jonka avulla haetaan jälleen uuden, alemmalla tasolla olevan solmun osoite sen solmun taulukosta, johon on edetty, - toistetaan askelta (b) kunnes päästään tyhjään alkioon tai kunnes uuden, alemmalla tasolla olevan solmun osoite on lehden osoite, tunnettu siitä, että 20 ainakin osassa hakemistorakennetta korvataan keskenään peräk käisten sisäsolmujen joukkoja kompressoiduilla solmuilla siten, että yksittäinen joukko, joka muodostuu keskenään peräkkäisistä sisäsolmuista, joista jokaisesta on ainoastaan yksi osoite alemman tason sisäsolmuun, korvataan komp-ressoidulla solmulla (CN), johon talletetaan osoite siihen solmuun, johon 25 korvattavassa joukossa alimpana oleva solmu osoittaa, tieto sen hakusanan arvosta, jolla mainittu osoite löytyy sekä tieto niiden bittien kokonaislukumäärästä, joista korvattavassa joukossa muodostetaan hakusanat.
9. Patenttivaatimuksen-8 mukainen menetelmä, tunnettu siitä, t että korvausta suoritetaan koko hakemistorakenteessa siten, että kaikki mai- 30 nitut joukot korvataan kompressoiduilla solmuilla.
10. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, että korvaus suoritetaan myös joukolle, johon kuuluu vain yksi sisäsolmu, jolloin talletettava bittien kokonaislukumäärä vastaa niiden bittien lukumäärää, joista mainitussa sisäsolmussa muodostetaan hakusana.
11. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, 20 102426 että hakemistorakenteeseen muodostetaan useita peräkkäisiä kompressoituja solmuja siten, että ainakin ylimmällä tasolla olevaan kompressoituun solmuun kerätään käytettyä sanan pituutta vastaava lukumäärä tutkittavia hakuavain-bittejä.
12. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, että useita peräkkäisiä kompressoituja solmuja yhdistetään yhdeksi uudeksi kompressoiduksi solmuksi, jolloin uuteen solmuun talletetaan bittien lukumääräksi yhdistettävistä solmuista saatujen lukumäärien summa.
13. Patenttivaatimuksen 11 mukainen menetelmä, tunnettu siitä, 10 että sellaisten peräkkäisten kompressoitujen solmujen muodostama ketju, jossa ainakin kahdessa ylimmäisessä solmussa tutkittavien bittien lukumäärä vastaa käytettyä sanan pituutta korvataan yhdellä kokoavalla solmulla (CN4), joka sisältää: - osoitteen siihen solmuun, johon ketjussa alimpana oleva solmu 15 sisältää osoitteen, - ketjun solmuista saadun tutkittavien bittien lukumäärän summan, ja - peräkkäisjärjestyksessä ketjun solmujen sisältämät hakusana-arvot.
14. Patenttivaatimuksen 8 mukainen menetelmä, tunnettu siitä, että muistin kaikissa kompressoimattomissa sisäsolmuissa ylläpidetään vä- 20 hintään kaksi osoitetta alemman tason solmuun. t » 102426
FI971067A 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi FI102426B1 (fi)

Priority Applications (5)

Application Number Priority Date Filing Date Title
FI971067A FI102426B1 (fi) 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi
PCT/FI1998/000192 WO1998041933A1 (fi) 1997-03-14 1998-03-04 Method for implementing a memory
AU66240/98A AU6624098A (en) 1997-03-14 1998-03-04 Method for implementing an associative memory based on a digital trie structure
EP98908123A EP0976066A1 (en) 1997-03-14 1998-03-04 Method for implementing an associative memory based on a digital trie structure
US09/389,574 US6505206B1 (en) 1997-03-14 1999-09-03 Method for implementing an associative memory based on a digital trie structure

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FI971067A FI102426B1 (fi) 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi
FI971067 1997-03-14

Publications (4)

Publication Number Publication Date
FI971067A0 FI971067A0 (fi) 1997-03-14
FI971067A FI971067A (fi) 1998-09-15
FI102426B true FI102426B (fi) 1998-11-30
FI102426B1 FI102426B1 (fi) 1998-11-30

Family

ID=8548389

Family Applications (1)

Application Number Title Priority Date Filing Date
FI971067A FI102426B1 (fi) 1997-03-14 1997-03-14 Menetelmä muistin toteuttamiseksi

Country Status (5)

Country Link
US (1) US6505206B1 (fi)
EP (1) EP0976066A1 (fi)
AU (1) AU6624098A (fi)
FI (1) FI102426B1 (fi)
WO (1) WO1998041933A1 (fi)

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FI991261A (fi) 1999-06-02 2000-12-03 Nokia Networks Oy Trie-rakenteeseen perustuva funktionaalinen muisti
FI991262A (fi) * 1999-06-02 2000-12-03 Nokia Networks Oy Digitaaliseen trie-rakenteeseen perustuva muisti
GB2367917A (en) 2000-10-12 2002-04-17 Qas Systems Ltd Retrieving data representing a postal address from a database of postal addresses using a trie structure
US6563439B1 (en) * 2000-10-31 2003-05-13 Intel Corporation Method of performing Huffman decoding
US6735595B2 (en) 2000-11-29 2004-05-11 Hewlett-Packard Development Company, L.P. Data structure and storage and retrieval method supporting ordinality based searching and data retrieval
US6671694B2 (en) * 2001-06-04 2003-12-30 Hewlett-Packard Development Company, L.P. System for and method of cache-efficient digital tree with rich pointers
US6654760B2 (en) * 2001-06-04 2003-11-25 Hewlett-Packard Development Company, L.P. System and method of providing a cache-efficient, hybrid, compressed digital tree with wide dynamic ranges and simple interface requiring no configuration or tuning
US6785687B2 (en) 2001-06-04 2004-08-31 Hewlett-Packard Development Company, L.P. System for and method of efficient, expandable storage and retrieval of small datasets
US6816856B2 (en) * 2001-06-04 2004-11-09 Hewlett-Packard Development Company, L.P. System for and method of data compression in a valueless digital tree representing a bitset
US6807618B1 (en) * 2001-08-08 2004-10-19 Emc Corporation Address translation
JP2004164318A (ja) * 2002-11-13 2004-06-10 Hitachi Ltd バックアップデータの世代管理方法およびこの方法に用いる記憶制御装置
DE10329680A1 (de) * 2003-07-01 2005-02-10 Universität Stuttgart Prozessorarchitektur für exakte Zeigeridentifizierung
US8180802B2 (en) * 2003-09-30 2012-05-15 International Business Machines Corporation Extensible decimal identification system for ordered nodes
WO2005052812A1 (fr) * 2003-10-28 2005-06-09 France Telecom Dispositif de memoire de type trie avec mecanisme de compression
US7634500B1 (en) 2003-11-03 2009-12-15 Netlogic Microsystems, Inc. Multiple string searching using content addressable memory
US8356021B2 (en) * 2005-03-11 2013-01-15 Ross Neil Williams Method and apparatus for indexing in a reduced-redundancy storage system
US8051252B2 (en) * 2005-03-11 2011-11-01 Ross Neil Williams Method and apparatus for detecting the presence of subblocks in a reduced-redundancy storage system
US7814129B2 (en) * 2005-03-11 2010-10-12 Ross Neil Williams Method and apparatus for storing data with reduced redundancy using data clusters
US7565380B1 (en) * 2005-03-24 2009-07-21 Netlogic Microsystems, Inc. Memory optimized pattern searching
US7908242B1 (en) 2005-04-11 2011-03-15 Experian Information Solutions, Inc. Systems and methods for optimizing database queries
US7353332B2 (en) * 2005-10-11 2008-04-01 Integrated Device Technology, Inc. Switching circuit implementing variable string matching
US8005759B2 (en) 2006-08-17 2011-08-23 Experian Information Solutions, Inc. System and method for providing a score for a used vehicle
US7783654B1 (en) 2006-09-19 2010-08-24 Netlogic Microsystems, Inc. Multiple string searching using content addressable memory
US7912865B2 (en) 2006-09-26 2011-03-22 Experian Marketing Solutions, Inc. System and method for linking multiple entities in a business database
US8036979B1 (en) 2006-10-05 2011-10-11 Experian Information Solutions, Inc. System and method for generating a finance attribute from tradeline data
US7676444B1 (en) 2007-01-18 2010-03-09 Netlogic Microsystems, Inc. Iterative compare operations using next success size bitmap
JP4402120B2 (ja) * 2007-01-24 2010-01-20 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
US8606666B1 (en) 2007-01-31 2013-12-10 Experian Information Solutions, Inc. System and method for providing an aggregation tool
US8285656B1 (en) 2007-03-30 2012-10-09 Consumerinfo.Com, Inc. Systems and methods for data verification
US20080288527A1 (en) * 2007-05-16 2008-11-20 Yahoo! Inc. User interface for graphically representing groups of data
US8122056B2 (en) 2007-05-17 2012-02-21 Yahoo! Inc. Interactive aggregation of data on a scatter plot
US7756900B2 (en) * 2007-05-22 2010-07-13 Yahoo!, Inc. Visual interface to indicate custom binning of items
US7739229B2 (en) 2007-05-22 2010-06-15 Yahoo! Inc. Exporting aggregated and un-aggregated data
WO2008147918A2 (en) 2007-05-25 2008-12-04 Experian Information Solutions, Inc. System and method for automated detection of never-pay data sets
US9690820B1 (en) 2007-09-27 2017-06-27 Experian Information Solutions, Inc. Database system for triggering event notifications based on updates to database records
US8312033B1 (en) 2008-06-26 2012-11-13 Experian Marketing Solutions, Inc. Systems and methods for providing an integrated identifier
US8874663B2 (en) * 2009-08-28 2014-10-28 Facebook, Inc. Comparing similarity between documents for filtering unwanted documents
US9152727B1 (en) 2010-08-23 2015-10-06 Experian Marketing Solutions, Inc. Systems and methods for processing consumer information for targeted marketing applications
US9147042B1 (en) 2010-11-22 2015-09-29 Experian Information Solutions, Inc. Systems and methods for data verification
US9483606B1 (en) 2011-07-08 2016-11-01 Consumerinfo.Com, Inc. Lifescore
US9853959B1 (en) 2012-05-07 2017-12-26 Consumerinfo.Com, Inc. Storage and maintenance of personal data
US9378304B2 (en) * 2013-01-16 2016-06-28 Google Inc. Searchable, mutable data structure
US9697263B1 (en) 2013-03-04 2017-07-04 Experian Information Solutions, Inc. Consumer data request fulfillment system
US10102536B1 (en) 2013-11-15 2018-10-16 Experian Information Solutions, Inc. Micro-geographic aggregation system
US9529851B1 (en) 2013-12-02 2016-12-27 Experian Information Solutions, Inc. Server architecture for electronic data quality processing
US10262362B1 (en) 2014-02-14 2019-04-16 Experian Information Solutions, Inc. Automatic generation of code for attributes
US9576030B1 (en) 2014-05-07 2017-02-21 Consumerinfo.Com, Inc. Keeping up with the joneses
US10445152B1 (en) 2014-12-19 2019-10-15 Experian Information Solutions, Inc. Systems and methods for dynamic report generation based on automatic modeling of complex data structures
WO2018039377A1 (en) 2016-08-24 2018-03-01 Experian Information Solutions, Inc. Disambiguation and authentication of device users
CN110383319B (zh) 2017-01-31 2023-05-26 益百利信息解决方案公司 大规模异构数据摄取和用户解析
US11093450B2 (en) * 2017-09-27 2021-08-17 Vmware, Inc. Auto-tuned write-optimized key-value store
CN108319667B (zh) * 2018-01-22 2021-03-05 上海星合网络科技有限公司 多维的知识体系展示方法和装置
US11204905B2 (en) * 2018-06-27 2021-12-21 Datastax, Inc. Trie-based indices for databases
US10963434B1 (en) 2018-09-07 2021-03-30 Experian Information Solutions, Inc. Data architecture for supporting multiple search models
US11941065B1 (en) 2019-09-13 2024-03-26 Experian Information Solutions, Inc. Single identifier platform for storing entity data
US11880377B1 (en) 2021-03-26 2024-01-23 Experian Information Solutions, Inc. Systems and methods for entity resolution

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2001390C (en) 1988-12-19 1997-12-30 Ming-Chien Shan View composition in a data-base management system
AU620994B2 (en) 1989-07-12 1992-02-27 Digital Equipment Corporation Compressed prefix matching database searching
US5276868A (en) * 1990-05-23 1994-01-04 Digital Equipment Corp. Method and apparatus for pointer compression in structured databases
US5319777A (en) 1990-10-16 1994-06-07 Sinper Corporation System and method for storing and retrieving information from a multidimensional array
CA2117846C (en) * 1993-10-20 2001-02-20 Allen Reiter Computer method and storage structure for storing and accessing multidimensional data
ATE210856T1 (de) * 1994-06-06 2001-12-15 Nokia Networks Oy Verfahren zum daten speichern und daten wiederfinden und eine speicheranordnung
US5787430A (en) * 1994-06-30 1998-07-28 International Business Machines Corporation Variable length data sequence backtracking a trie structure
JP3152868B2 (ja) * 1994-11-16 2001-04-03 富士通株式会社 検索装置および辞書/テキスト検索方法
US6115716A (en) * 1997-03-14 2000-09-05 Nokia Telecommunications Oy Method for implementing an associative memory based on a digital trie structure

Also Published As

Publication number Publication date
EP0976066A1 (en) 2000-02-02
WO1998041933A8 (fi) 1999-06-03
US6505206B1 (en) 2003-01-07
AU6624098A (en) 1998-10-12
FI971067A0 (fi) 1997-03-14
FI102426B1 (fi) 1998-11-30
WO1998041933A1 (fi) 1998-09-24
FI971067A (fi) 1998-09-15

Similar Documents

Publication Publication Date Title
FI102426B (fi) Menetelmä muistin toteuttamiseksi
FI102424B (fi) Menetelmä muistin toteuttamiseksi
FI102425B (fi) Menetelmä muistin toteuttamiseksi
US6631419B1 (en) Method and apparatus for high-speed longest prefix and masked prefix table search
EP3596629B1 (en) Efficient use of trie data structure in databases
US6115716A (en) Method for implementing an associative memory based on a digital trie structure
Hagerup et al. Deterministic dictionaries
Raman Priority queues: Small, monotone and trans-dichotomous
Waldvogel et al. Scalable high-speed prefix matching
US5848416A (en) Method and apparatus for storing and retrieving data and a memory arrangement
Andersson Sublogarithmic searching without multiplications
Abraham et al. On space-stretch trade-offs: Lower bounds
Ružić Constructing efficient dictionaries in close to sorting time
Hett et al. MORE: an alternative implementation of BDD packages by multi-operand synthesis
Blandford et al. An experimental analysis of a compact graph representation
Mishra et al. PETCAM—A power efficient TCAM architecture for forwarding tables
Han Improved fast integer sorting in linear space
Jansson et al. Linked dynamic tries with applications to LZ-compression in sublinear time and space
Nekrich Orthogonal range searching in linear and almost-linear space
Chien et al. Geometric BWT: compressed text indexing via sparse suffixes and range searching
Wagner Embedding arbitrary binary trees in a hypercube
Fischer et al. Practical evaluation of lempel-Ziv-78 and lempel-ziv-welch tries
Park et al. An efficient IP address lookup algorithm based on a small balanced tree using entry reduction
Franceschini et al. Optimal cache-oblivious implicit dictionaries
Geissmann et al. Cache oblivious minimum cut

Legal Events

Date Code Title Description
MA Patent expired