Cuvânt fără pătrat

Un cuvânt fără pătrat este un  cuvânt în care niciun subcuvânt nu este repetat de 2 ori la rând (adică acest cuvânt nu poate fi reprezentat ca yxxz , unde x , y și z sunt unele subcuvinte).

A. Thue a demonstrat că infinite cuvinte fără pătrate există peste orice alfabet de cel puțin 3 litere. Unul dintre cele mai simple exemple de cuvânt fără pătrat infinit peste un alfabet de 3 litere poate fi construit începând cu un cuvânt și apoi obținerea unui cuvânt din cuvânt folosind substituțiile „a”-> „abcab”, „b”- >"acabcb", "c"- >"acbcacb" . Fiecare cuvânt următor îl va conține pe cel anterior, ceea ce vă permite să construiți un cuvânt infinit „abcabacabcbacbcacbabcabacabcb ...” .

Numărul de cuvinte fără pătrat de trei litere de lungime formează secvența A006156 în OEIS . Crește exponențial de la , iar exponentul este .

Verificarea unui cuvânt pentru dreptate

Dacă există un cuvânt de lungime , atunci putem verifica dacă este fără pătrat pentru acțiuni. Pentru a face acest lucru, trebuie să construiți un arbore de sufix și să faceți calcule preliminare (a se vedea cel mai mic predecesor comun ), permițându-vă să găsiți cel mai mare astfel încât subșirurile de lungime începând de la poziții și , din date , să se potrivească. De asemenea, vom construi un arbore de sufixe și vom efectua calcule pentru șirul invers pentru a găsi lungimea celui mai lung subșir comun care se termină în aceste poziții prin și .

După aceea, problema este rezolvată recursiv. Să despărțim șirul în mijloc și să verificăm fiecare dintre jumătăți. Dacă unul dintre ele conține un subcuvânt de forma , atunci șirul original nu este nici pătrat liber. Fie poziția începutului celei de-a doua reprize. Pentru toate lungimile , găsiți lungimea subșirului comun pentru pozițiile și , precum și lungimea subșirului comun începând de la pozițiile și , dar mergând în direcția opusă. Dacă , atunci subcuvintele de lungime pornind de la poziții și coincid, ceea ce înseamnă că cuvântul nu este pătrat liber. După aceea, vom face aceeași procedură pentru posturi și pentru toate . Este ușor de observat că, dacă niciuna dintre proceduri nu a găsit un pătrat, atunci poziția nu poate aparține niciunui pătrat, ceea ce înseamnă că cuvântul este fără pătrat. Deoarece, după calcule preliminare, găsirea unui subșir comun se poate face în , algoritmul va avea nevoie de pași pentru a verifica poziția . Ținând cont de recursivitate, obținem complexitatea totală a algoritmului .

Acest algoritm poate fi generalizat cu ușurință pentru a căuta repetări de orice lungime: este suficient să înlocuiți condiția cu o condiție pentru a căuta șiruri care se repetă o dată la rând.

Dacă în loc de arbori de sufixe folosim matrice de sufixe mai simple și în loc de algoritmul comun de căutare subșiruri folosim un algoritm mai simplu bazat pe rezultate intermediare ale construirii unui tablou de sufixe, atunci acest algoritm va funcționa pentru . Acest lucru nu este cu mult mai rău, având în vedere simplificarea semnificativă a algoritmului în acest caz.

Exemple de secvențe infinite fără pătrat

Literatură

Link -uri