Z-funktionen af en streng er en matrix , så den er lig med længden af det længste fælles præfiks , der starter ved strengens suffiksposition og strengen selv . Konstruktionsalgoritmen blev beskrevet af Dan Gasfield i hans bog Strings, Trees and Sequences in Algorithms. Computer Science and Computational Biology” i 1997 [1] baseret på Maine og Lorenz' papir fra 1984 [2] om at finde alle tandemgentagelser i en streng.
Z -funktionen bruges i forskellige strengbehandlingsalgoritmer. Det kan især bruges til hurtigt at løse problemet med at finde en forekomst af en streng i en anden ( søg efter mønster ).
Vi gemmer indeks L og R , der angiver begyndelsen og slutningen af præfikset med den hidtil største R- værdi . Indledningsvis .
Lad os kende værdierne af Z - funktionen for positioner 1… i − 1. Lad os prøve at beregne værdien af Z - funktionen for position i . Hvis , overvej værdien af Z -funktionen for positionen . Hvis , så , da vi er i en understreng, der matcher præfikset for hele strengen. Hvis , så er det nødvendigt at beregne værdien af Z [ i ] ved en simpel løkke, der går gennem tegnene efter R , indtil der er et tegn, der ikke matcher det tilsvarende tegn fra præfikset. Derefter ændrer vi værdien af L til i og værdien af R til tallet på det sidste tegn, der matcher det tilsvarende tegn fra præfikset.
Hvis , så betragter vi værdien af Z [ i ] som en simpel løkke, der sammenligner tegnene i understrengen begyndende med det i -te tegn og de tilsvarende tegn fra præfikset. Når der er fundet en uoverensstemmelse eller slutningen af linjen nås, skal du ændre værdien af L til i og værdien af R til tallet på det sidste tegn, der matcher det tilsvarende tegn fra præfikset.
Køretiden for den algoritme, der beregner værdien af Z -funktionen af strengen S , estimeres til . Lad os bevise det.
Overvej strengens i -te karakter. I algoritmen betragtes det ikke mere end to gange: første gang, når det falder ind i segmentet, og anden gang, når man beregner Z [ i ].
Løkken behandler således ikke mere end iterationer.
1) Z - funktionen kan bruges til at søge efter et mønster T i en streng S ,
2) Ved at kende Z - funktionen af en streng, kan man entydigt gendanne denne strengs præfiks-funktion , og omvendt.
Strenge | |
---|---|
String lighedsmål | |
Understrengssøgning | |
palindromer | |
Sekvensjustering | |
Suffiksstrukturer | |
Andet |