Algoritmul Sequitur (sau algoritmul Neville-Manning ) este un algoritm recursiv dezvoltat de Craig Neville-Manning și Ian Witten în 1997 [1] . Algoritmul creează o structură ierarhică ( gramatică fără context ) dintr-o secvență de caractere discrete. Algoritmul funcționează în spațiu liniar în timp liniar. Poate fi folosit în aplicații de compresie a datelor [2] .
Algoritmul Sequitur construiește o gramatică prin înlocuirea unei noi reguli cu fraze repetate într-o anumită secvență și, prin urmare, oferă o scurtă reprezentare a secvenței. De exemplu, dacă secvența este
S→abcab,algoritmul dă
S→AcA, A→ab.Când se uită la un șir de intrare, algoritmul urmează două reguli pentru generarea eficientă a gramaticii: unicitatea unei perechi de caractere și utilizarea regulii .
Când un caracter nou este selectat din secvență, acesta este adăugat la ultimul caracter selectat și se formează o nouă pereche de caractere . Dacă o astfel de pereche a fost formată înainte, este generată o nouă regulă pentru a înlocui ambele apariții ale perechilor de caractere.
Acest lucru asigură că perechea apare cel mult o dată în gramatică. De exemplu, în secvența S→abaaba, după vizualizarea primelor patru caractere, se formează perechi ab, ba, aa . Când este selectat al cincilea caracter, noua pereche „ab” a fost deja formată. Prin urmare, ambele perechi de „ab” sunt înlocuite în S cu o nouă regulă (să zicem, A). Acum gramatica devine S→AaAa, A→ab și procesul continuă până când nu mai există perechi duplicate.
Această restricție asigură că toate regulile sunt folosite de mai multe ori în părțile corecte ale gramaticii. Adică, dacă o regulă apare o singură dată, aceasta ar trebui eliminată din gramatică și trebuie făcută înlocuirea corespunzătoare. De exemplu, în exemplul de mai sus, dacă se caută ultimul caracter și se aplică regula unicității pentru „Aa”, atunci gramatica va produce S→BB, A→ab, B→Aa . Acum regula „A” apare o singură dată în B→Aa . Deci A este eliminat și în cele din urmă gramatica devine S→BB, B→aba .
Această restricție vă permite să reduceți numărul de reguli din gramatică.
Algoritmul funcționează prin analizarea secvenței de caractere terminale și construirea unei liste cu toate perechile de caractere citite. Când perechea apare a doua oară, ambele perechi sunt înlocuite cu caracterul non-terminal creat , lista de perechi de caractere este actualizată pentru a se potrivi cu noua secvență și navigarea continuă. Dacă perechile de simboluri non-terminale apar numai în definiția simbolului nou creată, simbolul este înlocuit cu definiția sa și eliminat din lista simbolurilor non-terminale. Când scanarea este finalizată, secvența transformată poate fi interpretată ca regula de nivel superior în gramatică pentru secvența originală. Definițiile regulilor pentru simbolurile non-terminale pot fi găsite în lista de perechi. Aceste definiții de reguli pot conține ele însele simboluri suplimentare non-terminale, ale căror definiții pot fi găsite în aceeași listă de perechi [3] .
de compresie | Metode|||||||
---|---|---|---|---|---|---|---|
Teorie |
| ||||||
Fara pierderi |
| ||||||
Audio |
| ||||||
Imagini |
| ||||||
Video |
|