Re[4]: Разборчивые строки
От: Кодт Россия  
Дата: 11.07.18 10:18
Оценка:
Здравствуйте, watchmaker, Вы писали:

К>>но КАЖЕТСЯ, что мы действительно имеем дело с непересекающимися классами, поэтому можем суммировать как есть.

W>Круто, но процитированные классы таки пересекаются.
W>Например, строку "ABABA" можно получить из "ABAB" добавлением "A", либо из "ABA" добавлением суффикса "BA".
W>То есть в этой уникальной строке повторяются разные подстроки: "ABABA" и "ABABA", и она оказывается посчитанной дважды.

Да, именно это у меня и вышло в брутфорсе.
Получается, что надо дробить класс Q(n) строк без повторов длины n на подклассы вида Q(n, t1,t2,...) где ti — длина паразитного повтора
Подкласс t=2
xxxABA + BA = xxxABABA
                 --==
Подкласс t=3
xxxABCA + BCA = xxxABCABCA
                   ---===
Подкласс t=4
xxxABCDA + BCDA = xxxABCDABCDA
                     ----====

Подкласс t=2,4         --==
xxxABACA + CA   = xxxABACACA
xxxABACA + BACA = xxxABACABACA
                     ----====

Подкласс t=2,5
xxxABCADA + DA
xxxABCADA + BCADA

Подкласс t=3,5
xxxABACDA + CDA
xxxABACDA + BACDA


Тогда формула будет выглядеть вот так:
Q(n) = Q(n-1)*a
     - Q(n-1)             - повторы длины 1
     - Q(n-2) + Q(n-2,2)  - поскольку мы
     - Q(n-3) + Q(n-3,2) + Q(n-3,3)
     - Q(n-4) + Q(n-4,2) + Q(n-4,3) + Q(n-4,4) - Q(n-4,2,4)
     . . .

(если ничего не путаю)

Длины паразитных повторов — это положения вхождений последней буквы, с конца.
И вот это мне очень не нравится: чтобы за ними проследить, нам придётся не расписывать формулу для каждого подкласса
Q(n,t1) = Q(n-1,t1)*a + ... — ...,
а в завуалированной форме рожать все строки. А их, понятное дело, экспонента по основанию мощности алфавита (a). (Ну, ближе к (a-1), но всё равно не сахар).
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.