Знайти найменший 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 n √n √nn n √n n √nnnn

Слайди, які мені здаються корисними: 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(log⁡n)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 ⌉ булеві змінні.xmmlg⁡ks0,s1,…,smxsi⌈lg⁡k⌉

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

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

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

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

  • k0≤si<k0≤tj<ki,j

  • xysm≠tn

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

kk


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