Merkitään
:n pituista tekstin
alkuosaa
:llä. Muodostetaan
ensin loppuosapuu
. Loppuosapuu
muunnetaan loppuosapuuksi
. Näin
muunnoksen
jälkeen on loppuosapuu
muodostettu.
On-line algoritmi loppuosapuun
muodostamiseen tarjoaa
menetelmän kyseisen muunnoksen tekemiseen, kun merkki
on
tunnettu. Loppuosapuu siis muodostetaan
viittaamalla kuhunkin tekstin
merkkiin vain kerran.
Olkoon kulloinkin käsiteltävänä olevan alkuosan
:n
:n mittainen alkuosa. Samaistetaan alkuosa
loppuosapuun
alkuosaa
vastaavan polun viimeisen solmun kanssa (kuva
4). Solmut
ovat tällöin puun
kasvavia solmuja (kirjan [CR94] essential nodes);
ainoastaan solmuihin
lisätään uusia solmuja puuta
muodostettaessa. Algoritmissa alkuosat
säilytetään listassa alkuosien pituuden mukaan laskevassa järjestyksessä.
Olkoon ensimmäinen solmu listassa
, jolla on lapsisolmu
merkillä
. Tällöin puu
voidaan muodostaa lisäämällä
jokaiselle solmulle
lapsisolmu
merkillä
. Ellei solmua
löytynyt, lisätään lapsisolmu
merkillä
jokaiselle solmulle listassa
. Uusien lapsisolmujen
lisäämisen yhteydessä muodostetaan uusi lista
algoritmin iteraatiota
varten.
Listan toteutus on oleellinen algoritmin tehokkuuden
kannalta. Mikäli
toteutetaan listana, joka luodaan uudelleen
algoritmin jokaisessa iteraatiossa, on algoritmin aikavaatimus
parhaassakin tapauksessa
kaikkien luotujen listojen
pituuksien summa
eli neliöllinen. Lista
voidaan kuitenkin toteuttaa lisäämällä
jokaiseen puun solmuun, johon tullaan merkillä
, linkki
puussa seuraavaksi juurta
lähempänä olevalla tasolla olevaan solmuun, johon päästään merkillä
, tai joka on juurisolmu. Tällöin uuden listan
muodostamisessa
ei
tarvitse käydä läpi kuin ainoastaan samat solmut
,
joille luotiin uudet lapset. Näin ollen on-line algoritmin
aikavaatimus riippuu ainoastaan puuhun lisättävien uusien solmujen
lukumäärästä, jolloin kokonaisaikavaatimukseksi tulee
.
Normaalin loppuosapuun keskimääräinen koko on , mutta
pahimmassa tapauksessa se on neliöllinen. Esimerkki
tällaisesta puusta on
.