Jump to content

Конструкция Томпсона

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

Регулярные выражения и недетерминированные конечные автоматы являются двумя представлениями формальных языков . Например, утилиты обработки текста используют регулярные выражения для описания шаблонов расширенного поиска, но NFA лучше подходят для выполнения на компьютере. Следовательно, этот алгоритм представляет практический интерес, поскольку он может компилировать регулярные выражения в NFA. С теоретической точки зрения этот алгоритм является частью доказательства того, что они оба принимают одни и те же языки, то есть обычные языки .

NFA можно сделать детерминированным с помощью конструкции набора степеней , а затем минимизировать , чтобы получить оптимальный автомат, соответствующий данному регулярному выражению. Однако NFA также можно интерпретировать напрямую .

Чтобы решить, описывают ли два заданных регулярных выражения один и тот же язык, каждое из них можно преобразовать в эквивалентный минимальный детерминированный конечный автомат с помощью конструкции Томпсона, конструкции степенного набора и минимизации DFA . Если и только если результирующие автоматы согласны на переименование состояний, языки регулярных выражений соглашаются.

Алгоритм

[ редактировать ]

Алгоритм работает рекурсивно , разбивая выражение на составляющие его подвыражения, из которых будет построен NFA с использованием набора правил. [ 3 ] Точнее, из регулярного выражения E получен автомат A с функцией перехода [ нужны разъяснения ] учитывает следующие свойства:

  • A имеет ровно одно начальное состояние q0 , которое недоступно из любого другого состояния. То есть для любого состояния q и любой a буквы не содержит q 0 .
  • A имеет ровно одно конечное состояние qf . , которое недоступно из любого другого состояния То есть для любой а буквы .
  • Пусть c — количество конкатенаций регулярного выражения E , а s — количество символов, не считая круглых скобок, то есть | , * , а и ε . Тогда число состояний A равно 2 s c (линейно по размеру E ).
  • Число переходов, выходящих из любого состояния, не более двух.
  • Поскольку NFA m состояний и не более e переходов из каждого состояния может сопоставлять строку длины n за время O ( emn ) , NFA Томпсона может выполнять сопоставление с образцом за линейное время, предполагая алфавит фиксированного размера. [ 4 ] [ нужен лучший источник ]

Следующие правила описаны в соответствии с Aho et al. (2007), [ 1 ] п. 122. Далее N ( s ) и N ( t ) являются NFA подвыражений песок т соответственно.

Пустое выражение ε преобразуется в

в соответствии

Символ a входного алфавита преобразуется в

в соответствии

союза Выражение s | t преобразуется в

в соответствии

Состояние q переходит через ε либо в исходное состояние N ( s ) или N ( т ). Их конечные состояния становятся промежуточными состояниями всей НКА и сливаются посредством двух ε-переходов в конечное состояние НКА.

Выражение конкатенации st преобразуется в

в соответствии

Начальное состояние N ( s ) — начальное состояние всей НКА. Конечное состояние N ( s ) становится начальным состоянием N ( т ). Конечное состояние N ( t ) — конечное состояние всего NFA.

Выражение Клини звезды с * преобразуется в

в соответствии

ε-переход соединяет начальное и конечное состояние NFA с суб-NFA N ( с ) между ними. Еще один ε-переход из внутреннего финала во внутреннее начальное состояние N ( s ) допускает повторение выражения По словам звездного оператора.

  • Выражение в скобках ( s ) преобразуется в N ( с ) сам.

С помощью этих правил, используя правила пустых выражений и символов в качестве базовых случаев, можно с помощью структурной индукции доказать , что любое регулярное выражение можно преобразовать в эквивалентный NFA. [ 1 ]

Сейчас будут даны два примера: небольшой неформальный с результатом и более крупный с пошаговым применением алгоритма.

Небольшой пример

[ редактировать ]
Пример (ε|a*b) используя конструкцию Томпсона, шаг за шагом

На рисунке ниже показан результат построения Томпсона на (ε|a*b). Фиолетовый овал соответствует a , бирюзовый овал соответствует a* , зеленый овал соответствует b , оранжевый овал соответствует a*b , а синий овал соответствует ε .

Применение алгоритма

[ редактировать ]
NFA, полученный из регулярного выражения (0|(1(01*(00)*0)*1)*)*

В качестве примера на картинке показан результат алгоритма построения Томпсона по регулярному выражению (0|(1(01*(00)*0)*1)*)* который обозначает набор двоичных чисел, кратных 3:

{ ε, "0", "00", "11", "000", "011", "110", "0000", "0011", "0110", "1001", "1100", "1111" , «00000», ... }.

В верхней правой части показана логическая структура (синтаксическое дерево) выражения с знаком "." обозначающий конкатенацию (предполагается, что она имеет переменную арность); подвыражения называются а - q для справочных целей. В левой части показан недетерминированный конечный автомат, полученный в результате алгоритма Томпсона, с вход и состояние выхода каждого подвыражения, окрашенного в цвет пурпурный и голубой соответственно. Метка перехода ε в качестве метки перехода опущена для ясности — немаркированные переходы на самом деле являются переходами ε. Состояние входа и выхода, соответствующее корневому выражению q — стартовое и приемное состояние автомата соответственно.

Шаги алгоритма следующие:

вопрос : начните конвертировать выражение звезды Клини (0|(1(01*(00)*0)*1)*)*
б : начать конвертировать выражение объединения 0|(1(01*(00)*0)*1)*
а : конвертировать символ 0
п : начните конвертировать выражение звезды Клини (1(01*(00)*0)*1)*
д : начать преобразование выражения конкатенации 1(01*(00)*0)*1
с : конвертировать символ 1
н : начните конвертировать выражение звезды Клини (01*(00)*0)*
ж : начать преобразование выражения конкатенации 01*(00)*0
и : конвертировать символ 0
ч : начните конвертировать выражение звезды Клини 1*
г : конвертировать символ 1
ч : закончил преобразование выражения звезды Клини 1*
л : начните конвертировать выражение звезды Клини (00)*
Дж : начать преобразование выражения конкатенации 00
я : конвертировать символ 0
к : конвертировать символ 0
Дж : завершено преобразование выражения конкатенации 00
л : закончил преобразование выражения звезды Клини (00)*
м : конвертировать символ 0
ж : завершено преобразование выражения конкатенации 01*(00)*0
н : закончил преобразование выражения звезды Клини (01*(00)*0)*
о : конвертировать символ 1
д : завершено преобразование выражения конкатенации 1(01*(00)*0)*1
п : закончил преобразование выражения звезды Клини (1(01*(00)*0)*1)*
б : завершено преобразование выражения объединения 0|(1(01*(00)*0)*1)*
вопрос : закончил преобразование выражения звезды Клини (0|(1(01*(00)*0)*1)*)*

Эквивалентный минимальный детерминированный автомат показан ниже.

Связь с другими алгоритмами

[ редактировать ]

Томпсона — один из нескольких алгоритмов построения NFA из регулярных выражений; [ 5 ] более ранний алгоритм был предложен Макнотоном и Ямадой. [ 6 ] В отличие от конструкции Томпсона, алгоритм Клини преобразует конечный автомат в регулярное выражение.

Алгоритм построения Глушкова аналогичен конструкции Томпсона, если исключить ε-переходы.

  1. ^ Jump up to: а б с Альфред Вайно Ахо ; Моника С. Лам ; Рави Сетхи ; Джеффри Д. Уллман (2007). «3.7.4 Построение NFA из регулярного выражения» (печать) . Составители: принципы, методы и инструменты (2-е изд.). Бостон, Массачусетс, США: Пирсон Аддисон-Уэсли. п. 159–163 . ISBN  9780321486813 .
  2. ^ Лауден, Кеннет К. (1997). «2.4.1 От регулярного выражения к NFA» (печать) . Конструкция компилятора: Принципы и практика (3-е изд.). 20 Park Plaza Boston, MA 02116-4324, США: Издательская компания PWS. стр. 64–69. ISBN  978-0-534-93972-4 . {{cite book}}: CS1 maint: местоположение ( ссылка )
  3. ^ Кен Томпсон (июнь 1968 г.). «Техника программирования: Алгоритм поиска по регулярным выражениям» . Коммуникации АКМ . 11 (6): 419–422. дои : 10.1145/363347.363387 . S2CID   21260384 .
  4. ^ Син, Гуанмин. «Минимизированный Томпсон NFA» (PDF) .
  5. ^ Уотсон, Брюс В. (1995). Таксономия алгоритмов построения конечных автоматов (PDF) (Технический отчет). Эйндховенский технологический университет . Отчет по информатике 93/43.
  6. ^ Р. Макнотон, Х. Ямада (март 1960 г.). «Регулярные выражения и графы состояний для автоматов». Транзакции IEEE на электронных компьютерах . 9 (1): 39–47. дои : 10.1109/TEC.1960.5221603 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 031552b2c03ce29bc2ef0959db3bf0c8__1720803300
URL1:https://arc.ask3.ru/arc/aa/03/c8/031552b2c03ce29bc2ef0959db3bf0c8.html
Заголовок, (Title) документа по адресу, URL1:
Thompson's construction - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)