Firkantløst ord

Et firkantfrit ord er et  ord , hvor intet underord gentages 2 gange i træk (det vil sige, at dette ord ikke kan repræsenteres som yxxz , hvor x , y og z er nogle underord).

A. Thue beviste, at uendelige firkantede frie ord eksisterer over ethvert alfabet på mindst 3 bogstaver. Et af de enkleste eksempler på et uendeligt firkant-frit ord over et alfabet på 3 bogstaver kan konstrueres ved at starte med et ord og derefter få et ord fra ordet ved at bruge substitutionerne "a"->"abcab", "b"- >"acabcb", "c"- >"acbcacb" . Hvert næste ord vil indeholde det forrige, hvilket giver dig mulighed for at bygge et uendeligt ord "abcabacabcbacbcacbabcabacabcb ..." .

Antallet af kvadratfrie ord med tre længdebogstaver danner sekvensen A006156 i OEIS . Den vokser eksponentielt fra , og eksponenten er .

Kontrol af et ord for kvadratisk

Hvis der er et ord af længde , så kan vi tjekke, om det er firkantfrit for handlinger. For at gøre dette skal du bygge et suffikstræ og foretage foreløbige beregninger (se den mindste almindelige forgænger ), så du kan finde den største , således at delstrenge med længde startende fra positioner og ud fra data matcher. Vi vil også bygge et suffikstræ og udføre beregninger for den omvendte streng for at finde længden af ​​den længste fælles understreng, der ender i disse positioner med og .

Herefter løses problemet rekursivt. Lad os flække snoren på midten og tjekke hver af halvdelene. Hvis en af ​​dem indeholder et underord af formen , så er den oprindelige streng heller ikke firkantfri. Lad være positionen i begyndelsen af ​​anden halvleg. For alle længder skal du finde længden af ​​den fælles understreng for positioner og , samt længden af ​​den fælles understreng, der starter ved positioner og , men går i den modsatte retning. Hvis , så falder underordene med længde , der starter fra positionerne og sammen, hvilket betyder, at ordet ikke er firkantfrit. Derefter vil vi gøre den samme procedure for stillinger og for alle . Det er let at se, at hvis ingen af ​​procedurerne fandt en firkant, så kan positionen ikke tilhøre nogen firkant, hvilket betyder, at ordet er firkantløst. Da man efter foreløbige beregninger kan finde en fælles understreng i , vil algoritmen have brug for trin for at kontrollere positionen . Under hensyntagen til rekursion opnår vi den samlede kompleksitet af algoritmen .

Denne algoritme kan let generaliseres til at søge efter gentagelser af enhver længde: det er nok at erstatte betingelsen med en betingelse for at søge efter strenge, der gentages én gang i træk.

Hvis vi i stedet for suffikstræer bruger simplere suffiksarrays og i stedet for den almindelige substring-søgealgoritme bruger vi en enklere algoritme baseret på mellemresultater ved at konstruere et suffiksarray, så vil denne algoritme fungere for . Dette er ikke meget værre i betragtning af den betydelige forenkling af algoritmen i dette tilfælde.

Eksempler på firkantfri uendelige sekvenser

Litteratur

Links