Знайти найменший DFA, який розділяє два слова, не використовуючи грубу силу пошуку?


23

З огляду на два рядки x і y, я хочу створити DFA мінімального розміру, який приймає x і відхиляє y. Один із способів зробити це - жорстокий пошук. Ви перераховуєте DFA, починаючи з найменшого. Ви спробуйте кожен DFA, поки не знайдете той, який приймає х і відхиляє y.

Я хочу знати, чи є якийсь інший відомий спосіб пошуку або побудови DFA мінімального розміру, який приймає x і відхиляє y. Іншими словами, чи можемо ми перемогти грубі сили пошуку?

Детальніше:

(1) Я дійсно хочу, щоб алгоритм знаходив DFA мінімального розміру, а не мінімального розміру DFA.

(2) Я не просто хочу знати, наскільки великий чи малий мінімальний показник DFA.

(3) Тут я зосередився лише на тому випадку, якщо у вас були два рядки x і y.


Редагувати :

Додаткова інформація для зацікавленого читача:

Припустимо, і - двійкові рядки довжиною не більше . Відомий результат, що існує DFA, який приймає і відхиляє з максимум станами. Зауважте, що існує близько DFA з двійковим алфавітом і не більше станів. Таким чином, підхід грубої сили не вимагає від нас перерахувати через більш ніж DFA. Звідси випливає, що підхід грубої сили не міг зайняти набагато більше часу.y n x y xynxy nnnn nn nnnnn

Слайди, які мені здаються корисними: https://cs.uwaterloo.ca/~shallit/Talks/sep2.pdf


2
@ AndrásSalamon Чи все ще NP-завершений, якщо множини, які слід розрізняти, складаються лише з однієї рядка? Мені здається, що це має бути досить простежено.
mhum

6
@mhum проблема в тому, що існує багато різних регулярних мов, які розділяють два рядки - DFA мінімізація знайде найкращий автомат для будь-якої з цих мов, але не зробить нічого, щоб порівняти його з автоматами для інших роздільних мов.
Девід Еппштейн

4
Якщо і y різні довжини, при цьому більша довжина n , легко швидко знайти DFA з O ( log n ) станами, що розділяє їх: просто використовуйте цикл довжини p , де p не ділиться | х | - | у | . Знайдіть p , спробувавши 2 , 3 , 5 , для того, щоб знайти відповідний p . Якщо x і y однакової довжини, то OxynO(logn)pp|x||y|p2,3,5,pxyконструкція Робсона в папері 1996 р. дає просту машину, яку можна знайти за допомогою пошуку розміруO(n). Жодна конструкція не гарантується як найменша DFA. O(n)O(n)
Джеффрі Шалліт

3
Зауваження Шалліта, пов'язані вище, містять корисне спостереження, що найгірший випадок проблеми розділення є, коли алфавіт є двійковим: завжди можна розділити більші алфавіти на два підмножини, які все ще розрізняють два вхідні слова та шукати двійковий автомат, який обробляє літери в одному підмножині як 0, а інші в підмножині - 1. Але для пошуку мінімального відокремлюваного автомата це, мабуть, не допоможе, оскільки ви можете використовувати додаткову інформацію з оригінального алфавіту, щоб зробити краще, ніж ви могли зі зіставленням бінарного алфавіту.
Девід Еппштейн

3
особливий випадок цього іншого нещодавнього питання, коли розміри вкладених та заданих рівних 1. мінімальні кінцеві автомати, задані словами та словами . у цій відповіді перераховано деяку навчальну літературу, включаючи деяку евристику.
vzn

Відповіді:


9

Якби мені довелося це робити на практиці, я б застосував SAT solver.

Питання про те, чи існує DFA з станами, що приймає x і відхиляє y, може бути легко виражено як екземпляр SAT. Наприклад, одним із способів є наявність 2 k 2 булевих змінних: z s , b , t істинно, якщо DFA переходить зі стану s у стан t на вхідному біті b . Потім додайте деякі пропозиції, щоб переконатись, що це DFA, а також деякі змінні та пропозиції, щоб підтвердити, що він приймає x та відхиляє y .kxy2k2zs,b,tstbxy

Тепер використовуйте двійковий пошук на щоб знайти найменший k такий, що існує DFA такого роду. Виходячи з того, що я читав у працях про пов'язану проблему, я би сподівався, що це може бути досить ефективно на практиці.kk


Можливі й інші кодування цього типу SAT. Наприклад, ми можемо використовувати кодування слідів:

  • Якщо має довжину m , ви можете додати m lg k булеві змінні: нехай s 0 , s 1 , ... , s m - послідовність станів, що проходять на вході x , і представляти кожну s i, використовуючи lg k булеві змінні.xmmlgks0,s1,,smxsilgk

  • Тепер для кожного такого, що x i = x j , у вас є обмеження, що s i - 1 = s j - 1i,jxi=xj .si1=sj1si=sj

  • Далі розгорніть це на обробку : нехай t 0 , ... , t n - послідовність станів, що проходять на вході y , і представляють кожну t j, використовуючи lg k булеві змінні. Для кожного i , j такого, що y i = y j , додамо обмеження, що t i - 1 = t j - 1yt0,,tnytjlgki,jyi=yj .ti1=tj1ti=tj

  • Аналогічно, для кожного такого, що x i = y j , додаємо обмеження, що s i - 1 = t j - 1i,jxi=yj .si1=tj1si=tj

  • Обидві сліди повинні починатися з однієї і тієї ж початкової точки, тому додайте вимогу, що (WLOG можна вимагати s 0 = t 0 = 0 ).s0=t0s0=t0=0

  • k0si<k0tj<ki,j

  • xysmtn

Усі ці вимоги можуть бути кодовані як пункти SAT.

kk


3
зауважте, що насправді це буде перевершити пошук грубої сили, якщо в проблемі є певні симетрії, і вони розпізнаються вирішувачем, але наразі їх важко визначити / виділити (як для людини, так і для машини). є також новіші / пов'язані «технології» теорій модуля задоволення та програмування набору відповідей, деякі з яких мають «вбудовані» предикати графіка або можуть підтримувати їх визначення.
vzn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.