Merkkijonon z-funktio on matriisi , joka on yhtä suuri kuin pisimmän yhteisen etuliitteen pituus, joka alkaa merkkijonon päätepaikasta , ja itse merkkijono . Rakennusalgoritmin kuvaili Dan Gasfield kirjassaan Strings, Trees and Sequences in Algorithms. Computer Science and Computational Biology” vuonna 1997 [1] perustui Mainen ja Lorenzin vuoden 1984 artikkeliin [2] kaikkien tandemtoistojen löytämisestä merkkijonosta.
Z -funktiota käytetään useissa merkkijonojen käsittelyalgoritmeissa. Erityisesti sitä voidaan käyttää ratkaisemaan nopeasti ongelma, joka liittyy merkkijonon esiintymisen löytämiseen toisessa ( haku kuvion mukaan ).
Tallennamme indeksit L ja R , jotka osoittavat suurimman tähän mennessä löydetyn R -arvon etuliitteen alkua ja loppua . Aluksi .
Selvitetään Z -funktion arvot paikoille 1… i − 1. Yritetään laskea Z -funktion arvo paikalle i . Jos , harkitse paikan Z - funktion arvoa . Jos , niin , koska olemme osamerkkijonossa, joka vastaa koko merkkijonon etuliitettä. Jos , niin Z [ i ]: n arvo on laskettava yksinkertaisella silmukalla, joka kulkee R :n jälkeisten merkkien läpi, kunnes löytyy merkki, joka ei vastaa vastaavaa etuliitteen merkkiä. Tämän jälkeen muutamme L :n arvon i :ksi ja R :n arvon viimeisen merkin numeroon, joka vastaa etuliitteen vastaavaa merkkiä.
Jos , niin katsomme Z :n [ i ] arvoa yksinkertaisena silmukana, joka vertaa i :nnellä merkillä alkavan osamerkkijonon merkkejä ja vastaavia etuliitteen merkkejä. Kun ristiriita löytyy tai rivin loppu on saavutettu, muuta L : n arvo i :ksi ja R :n arvoksi sen viimeisen merkin numero, joka vastaa etuliitteen vastaavaa merkkiä.
Merkkijonon S Z -funktion arvon laskevan algoritmin ajoaika on estimoitu . Todistetaan se.
Harkitse merkkijonon i -merkkiä. Algoritmissa sitä tarkastellaan enintään kahdesti: ensimmäisen kerran, kun se osuu segmenttiin ja toisen kerran laskettaessa Z [ i ].
Siten silmukka käsittelee vain iteraatioita.
1) Z -funktiolla voidaan etsiä kuviota T merkkijonosta S ,
2) Tietäen merkkijonon Z -funktion, voidaan yksilöllisesti palauttaa tämän merkkijonon etuliitefunktio ja päinvastoin.
jouset | |
---|---|
Merkkijonojen samankaltaisuusmitat | |
Alimerkkijonohaku | |
palindromit | |
Jakson tasaus | |
Suffiksirakenteet | |
Muut |