Négyzet nélküli szó

A négyzet nélküli szó olyan szó , amelyben  egyetlen részszó sem ismétlődik 2-szer egymás után (vagyis ez a szó nem ábrázolható yxxz -ként , ahol x , y és z néhány részszó).

A. Thu bebizonyította, hogy végtelen négyzet nélküli szavak léteznek bármely legalább 3 betűből álló ábécé felett. Az egyik legegyszerűbb példa egy végtelen négyzet nélküli szóra egy 3 betűből álló ábécé fölött úgy szerkeszthető, hogy egy szóval kezdjük , majd az "a"->"abcab", "b"- helyettesítések segítségével szót kapunk a szóból . >"acabcb", "c"- >"acbcacb" . Minden következő szó tartalmazza az előzőt, ami lehetővé teszi egy végtelen "abcabacabcbacbcacbabcabacabcb ..." szó felépítését .

A három betűből álló négyzet nélküli szavak száma az A006156 sorozatot alkotja az OEIS- ben . Exponenciálisan növekszik -tól , a kitevő pedig .

Egy szó négyszögletességének ellenőrzése

Ha van hosszú szó , akkor ellenőrizhetjük, hogy négyzetmentes-e a cselekvésekre. Ehhez létre kell hoznia egy utótagfát, és előzetes számításokat kell végeznie (lásd a legkisebb közös elődöt ), amely lehetővé teszi a legnagyobb megtalálását úgy, hogy a pozíciókból és az adatokból kiinduló hosszúságú részkarakterláncok illeszkedjenek. Egy utótagfát is készítünk, és számításokat végzünk a fordított karakterláncra, hogy megtudjuk a leghosszabb közös részkarakterlánc hosszát, amely ezekben a pozíciókban és -vel végződik.

Ezt követően a probléma rekurzív módon megoldódik. Osszuk ketté a zsinórt középen, és nézzük meg mindegyik felét. Ha ezek egyike a formájú részszót tartalmazza, akkor az eredeti karakterlánc sem négyzetmentes. Legyen a második félidő elejének helyzete. Minden hosszúság esetén keresse meg a és pozíciók közös részkarakterláncának hosszát, valamint a és pozíciókból induló , de az ellenkező irányba haladó közös részkarakterlánc hosszát. Ha , akkor a pozíciókból induló és hosszúságú részszavak egybeesnek, ami azt jelenti, hogy a szó nem négyzetmentes. Ezt követően ugyanazt az eljárást hajtjuk végre a pozíciókra és mindenre . Könnyen belátható, hogy ha egyik eljárás sem talált négyzetet, akkor a pozíció nem tartozhat egyik négyzethez sem, ami azt jelenti, hogy a szó négyzet nélküli. Mivel az előzetes számítások után a közös részkarakterlánc keresése megoldható a -ban , az algoritmusnak lépésekre lesz szüksége a pozíció ellenőrzéséhez . A rekurziót figyelembe véve megkapjuk az algoritmus teljes komplexitását .

Ez az algoritmus könnyen általánosítható tetszőleges hosszúságú ismétlődések keresésére: elegendő a feltételt egy feltételre cserélni, hogy olyan karakterláncokat keressünk, amelyek egymás után egyszer ismétlődnek.

Ha az utótagfák helyett egyszerűbb utótag tömböket használunk , és a gyakori részstring keresési algoritmus helyett egy egyszerűbb , utótagtömb felépítésének köztes eredményein alapuló algoritmust, akkor ez az algoritmus fog működni . Ez nem sokkal rosszabb, tekintettel az algoritmus jelentős egyszerűsítésére ebben az esetben.

Példák négyzet nélküli végtelen sorozatokra

Irodalom

Linkek