stringtranslate.com

Алгоритм секвитура

Секвитур (или алгоритм Невилла-Мэннинга-Виттена ) — рекурсивный алгоритм, разработанный Крейгом Невиллом-Мэннингом и Яном Х. Виттеном в 1997 году [1] , который выводит иерархическую структуру ( контекстно-свободную грамматику ) из последовательности дискретных символов. Алгоритм работает в линейном пространстве и времени. Его можно использовать в программных приложениях для сжатия данных . [2]

Ограничения

Алгоритм секвитура строит грамматику, заменяя повторяющиеся фразы в заданной последовательности новыми правилами и, таким образом, создает краткое представление последовательности. Например, если последовательность

С→абкаб,

алгоритм произведет

S→AcA, A→ab.

При сканировании входной последовательности алгоритм соблюдает два ограничения для эффективной генерации своей грамматики: уникальность диграммы и полезность правила .

Уникальность диграммы

Всякий раз, когда из последовательности сканируется новый символ, он добавляется к последнему сканированному символу для формирования новой диграммы . Если эта диграмма была сформирована ранее, то создается новое правило для замены обоих вхождений диграмм. Таким образом, это гарантирует, что ни одна диграмма не встречается в грамматике более одного раза. Например, в последовательности S→abaaba , когда первые четыре символа уже сканируются, образуются диграммы ab, ba, aa . Когда считывается пятый символ, формируется новая диграмма 'ab', которая уже существует. Таким образом, оба экземпляра 'ab' заменяются новым правилом (скажем, A) в S. Теперь грамматика становится S→AaAa, A→ab , и процесс продолжается до тех пор, пока в грамматике не останется ни одной повторяющейся диграммы.

Правило полезности

Это ограничение гарантирует, что все правила используются более одного раза в правых частях всех производных грамматики, т. е. если правило встречается только один раз, его следует удалить из грамматики, а его появление следует заменить символами, из которых оно создано. Например, в приведенном выше примере, если просканировать последний символ и применить уникальность диграммы для 'Aa', то грамматика выдаст: S→BB, A→ab, B→Aa . Теперь правило 'A' встречается только один раз в грамматике в B→Aa . Поэтому A удаляется, и в конечном итоге грамматика становится

С→ББ, Б→аба .

Это ограничение помогает сократить количество правил в грамматике.

Краткое описание метода

Алгоритм работает путем сканирования последовательности терминальных символов и построения списка всех пар символов, которые он считывал. Всякий раз, когда обнаруживается второе вхождение пары, два вхождения заменяются в последовательности изобретенным нетерминальным символом , список пар символов корректируется для соответствия новой последовательности, и сканирование продолжается. Если нетерминальный символ пары используется только в определении только что созданного символа, используемый символ заменяется его определением, а символ удаляется из определенных нетерминальных символов. После завершения сканирования преобразованная последовательность может быть интерпретирована как правило верхнего уровня в грамматике для исходной последовательности. Определения правил для нетерминальных символов, которые она содержит, можно найти в списке пар символов. Эти определения правил сами могут содержать дополнительные нетерминальные символы, определения правил которых также можно прочитать из другого места в списке пар символов. [3]

Смотрите также

Ссылки

  1. ^ Невилл-Мэннинг, К. Г.; Виттен, И. Х. (1997). «Идентификация иерархической структуры в последовательностях: алгоритм линейного времени». arXiv : cs/9709102 . Bibcode : 1997cs........9102N. {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  2. ^ Невилл-Мэннинг, К. Г.; Виттен, И. Х. (1997). «Линейное время, инкрементальный вывод иерархии для сжатия». Труды DCC '97. Конференция по сжатию данных . стр. 3–11. CiteSeerX 10.1.1.30.2305 . doi :10.1109/DCC.1997.581951. ISBN  978-0-8186-7761-8. S2CID  14324301.
  3. ^ GrammarViz 2.0 – Реализации Sequitur и параллельной Sequitur на Java, обнаружение шаблонов временных рядов на основе Sequitur

Внешние ссылки