Hakutietorakenteen perustana on aakkosjärjestykseen lajiteltu kaikki
tekstin loppuosat sisältävä taulukko
. Taulukko
ei
sisällä itse loppuosia, vaan ainoastaan viittauksia loppuosan
alkupositioon tekstissä
. Taulukon
muodostaminen käsitellään
myöhemmin.
Koska taulukko on aakkosjärjestyksessä,
siellä ovat myös kaikki samalla merkkijonolla alkavat loppuosat
peräkkäin. Näin kaikkien
:n esiintymien löytämiseksi riittää
etsiä taulukosta ensimmäinen ja viimeinen
:llä alkava loppuosa.
Tämä voidaan tehdä yksinkertaisella binäärihaulla
ajassa.
Binäärihakua voidaan tehostaa vähentämällä symbolien välisiä
vertailuja. Olkoon binäärihaarukan
vasemman reunan indeksi , vertailtavan loppuosan indeksi
ja oikean reunan indeksi
.
Merkitään merkkijonojen
ja
pisimmän yhteisen alkuosan
pituutta
:llä. Olkoon
binäärihaarukan vasemman
puolen ja
:n yhteisen alkuosan pituus
ja
vastaavasti
oikean puolen ja
:n yhteisen alkuosan pituus
.
Jokaisella binäärihaun iteraatiolla voidaan
:n ja
:n
vertailun yhteydessä laskea joko
tai
valmiiksi seuraavaa iteraatiota varten, toisen säilyessä
samana. Koska loppuosat ovat aakkosjärjestyksessä loppuosataulukon
kohdissa
,
ja
sijaitsevien loppuosien yhteisen
alkuosan pituuden täytyy olla vähintään
. Näin ollen
loppuosan
ja merkkijonon
vertailussa
voidaan ohittaa
symbolia.
Symbolien vertailuja voidaan edelleen vähentää ottamalla käyttöön
kaksi aputaulukkoa. Merkitään yhtä binäärihaun tilaa
kolmikolla . Näitä kolmikoita on täsmälleen
kappaletta (yksi jokaista binäärihaarukan mahdollista keskipistettä
kohden). Otetaan käyttöön kaksi aputaulukkoa, jotka sisältävät
binäärihaarukan keskipisteen ja reunojen pisimpien yhteisten
alkuosien pituuden:
ja
. Nämä taulukot
voidaan muodostaa triviaalisti, mutta tällöin
muodostamisen aikavaatimus on pahimmillaan
, vaikka
keskimääräinen aikavaatimus on
.
Tehokkaampi muodostusalgoritmi on esitelty artikkelissa [MM93].
Oletetaan, että
. Tällöin binäärihaun iteraatio voidaan
toteuttaa seuraavasti:
Vastaavasti toimitaan, kun . Tällä algoritmilla
yhden symbolin vertailujen lukumääräksi saadaan enintään
ja algoritmin aikavaatimukseksi
pahimmassa tapauksessa.