Чи є "маленькі" машини, які можуть ефективно відповідати звичайним виразам?


30

Добре відомо, що регулярний вираз можна розпізнати за недетермінованим кінцевим автоматом розміром, пропорційним регулярному виразу, або детермінованим ФА, який потенційно є експоненціально більшим. Крім того, з огляду на рядок та регулярний вираз r , NFA може перевірити приналежність у часі, пропорційному | s | | r | , і DFA може перевірити членство в часі, пропорційному | s |sr|s||r||s|. Уповільнення для NFA виникає через те, що по суті нам потрібно відстежувати набори можливих станів, в яких може знаходитися автомат, і експоненціально вибух для DFA виникає з того, що його стани є елементами набору потужностей станів NFA.

Чи можливо ефективно (тобто за часом краще, ніж , і простір, кращий за O ( 2 | r | ) ), розпізнавати регулярні вирази, якщо ми дозволимо використовувати більш потужні машини, ніж кінцеві автомати? (Наприклад, чи є приріст лаконічності в розпізнаванні звичайних мов за допомогою автоматичних автоматичних пристроїв чи лічильників?)O(|r||s|)O(2|r|)


2
Коли ви говорите, що "NFA може перевірити членство в часі, пропорційному ", ви маєте на увазі, що машина (детермінований) оперативної пам'яті, яка імітує NFA очевидним чином, займає стільки часу? Або існує якийсь інший спосіб визначити "час роботи NFA", який не посилається на іншу обчислювальну модель? (Окрім розумного, але не дуже корисного визначення, яке говорить про те, що час виконання будь-якого NFA для рядка s є | s | .)|s||r|s|s|
Radu GRIGore

Так, це правильне тлумачення мого питання.
Ніл Крішнасвамі

2
Тоді мені здається більш природним просто запитати це: чи існує алгоритм (на машині оперативної пам’яті), який вирішує, чи є рядок мовою, визначеною регулярним виразом r, який працює в o ( | s || r | ) час та o ( 2 | r | ) простір? (Особливо, якщо ви визначаєте час роботи автоматичних відкатувань також з точки зору машини оперативної пам'яті.)sro(|s||r|)o(2|r|)
Radu GRIGore

1
Я точно не розумію проблеми. Чи є вхідним рядком s та регулярним виразом r, і проблема полягає у тому, щоб визначити, чи s в мові визначено регулярним виразом r?
Робін Котарі

@Robin: так, це все. Мені хотілося б знати, чи можна зіставити регулярні вирази ефективніше, ніж кінцеві автомати, використовуючи більше обчислювальної потужності, або якщо додаткові функції (наприклад, стек, оперативна пам'ять) просто не допомагають.
Ніл Крішнасвамі

Відповіді:


20

Досить просто торгувати часом для простору, як описано нижче.

rO(rs)O(2r)

kSir/kSiAiSi02r/k1

T[i,j,c,Ai]ijk1cAiSiSjyT[i,j,c,Ai]ySjAiyc

kSiAiSici,jSjAicSjO(k2)O(sk2)

O(k22r/k)

kO(rs)O(r2s)

k


ak

@Neel: Якщо рішення Девіда найкраще, що може зробити АЗП , то стеки, лічильники тощо не допоможуть. (Але, звичайно, він давав лише верхні межі, а не нижні межі.)
Radu GRIGore

1
Наскільки я можу сказати, у моєму рішенні використовується «додаткова потужність»: вона базується на пошуку таблиць та цілочисельних індексів, чого немає в моделях DFA або NFA. Тож я не дуже розумію, як це не відповісти на цю частину питання.
Девід Еппштейн

wwlgrO(sr2)O(r/w)rwkr/wO(sr2/w2)2w

4

Це не відповідь, але занадто довго для коментаря. Я намагаюся пояснити, чому питання, поставлене, може бути важко зрозуміти.

Є два способи визначення обчислювальної складності для пристрою X .

Перший і найбільш природний спосіб - це внутрішнє . Потрібно сказати, як пристрій X використовує вхід, щоб згодом ми розглядали, як розмір n входу впливає на час роботи пристрою. Також потрібно сказати, що вважається операцією (або кроком ). Тоді ми просто даємо пристрою працювати на вході і рахувати операції.

O(f(n))f(n)

Наприклад, внутрішнє визначення NFA говорить про те, що потрібно обробити n кроків для обробки рядка довжиною n ; зовнішнє визначення, яке використовує машину оперативної пам’яті як пристрій Y, говорить про те, що найвідоміша верхня межа - це, мабуть, відповів Девід Еппштейн. (Інакше було б дивно, що (1) найкраща практична реалізація, зазначена в іншій відповіді, не використовує кращої альтернативи і (2) ніхто тут не вказував кращої альтернативи.) Зауважте також, що чітко кажучи, що ваш пристрій X є регулярним виразом , але оскільки NFA має однаковий розмір, можна сміливо брати його за пристрій X, який ви шукаєте.

Ω(f(n))

Отже, в певному сенсі найкраща відповідь, на яку можна сподіватися, - це доказ у чомусь на зразок моделі клітинного зонду, що для імітації NFA потрібно певний час. (Зверніть увагу, що якщо ви враховуєте конверсію NFA у DFA, вам потрібен час, щоб записати великий DFA, тому пам'ять не є єдиною проблемою.)


4

Навіть якщо ви вважаєте, що нічого нового чи старого не слід дізнатись про відповідність регулярного вираження, ознайомтеся з однією з найкрасивіших робіт, з якою я стикався вже давно: п’єса про регулярні висловлювання S Fischer, F Huch та T Вільке, ICFP 2010.

(MMT Chakravarty заслуговує на заслугу за рекомендацію цього документу.)

EDIT: Причина, в якій цей документ є актуальною, полягає в тому, що він описує нову методику (засновану на роботі Глушкова з 60-х років), яка уникає побудови повного NFA (не кажучи вже про DFA), відповідного RE. Те, що робиться замість цього, нагадує запуск алгоритму маркування, подібного до відомого для прийняття рішення про прийняття слова NFA на синтаксичному дереві RE. Вимірювання продуктивності показують, що це конкурентоспроможне, навіть якщо нещодавно опублікована google бібліотека re2


Гарний папір для читання !!
Hsien-Chih Chang 張顯 之

1

Погляньте на цю статтю Русса Кокса. Він описує підхід, заснований на NFA, вперше застосований Кеном Томпсоном, за допомогою якого вхідний рядок s може бути узгоджений з регулярним виразом r в часі O (| s |. C ) і простором O (| r |. D ), де c і d - константи верхньої межі. У статті також детально описано впровадження методики на C.


2
Я не переконаний, що це точний опис статті. Схоже, будується DFA з NFA за необхідності та кешувати результати. Але розмір кешу може бути експоненціальним у r.
Девід Еппштейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.