Який хороший алгоритм для генерування випадкових DFA?


9

Я генерую випадкові DFA для тестування алгоритму зменшення DFA на них.

Алгоритм, який я зараз використовую, такий: для кожного стану , для кожного символу в алфавіті додайте до деякого випадкового стану. Кожна держава має однакову ймовірність стати кінцевим станом.qcδ(q,c)

Це хороший метод створення об'єктивних DFA? Крім того, цей алгоритм не генерує обробну DFA (DFA без застарілих станів), тому мені цікаво, чи існує кращий спосіб генерації випадкових DFA, який може якось забезпечити його обрізку?


2
Немає природного розподілу випадкових DFA, тож саме вам. Що ви хочете досягти?
Yuval Filmus

Я генерую випадкові DFA для тестування алгоритму зменшення DFA на них.
Дункан

Можливо, ви хочете почати з невеликого набору мінімальних DFA і підірвати їх? Таким чином ви знаєте, що мінімізація насправді досягає правильного результату.
adrianN

цікаво, ви протестуєте алгоритм неаптимального зменшення чи знаходить унікальний мінімальний оптимальний показник DFA?
vzn

2
Якщо ви генеруєте структуру даних для тестування, неупередженість не важлива. Важливо - мати хороший шанс викликати цікаве поведінку. Для проведення аналогії, коли ви тестуєте геометричний алгоритм, вам потрібно переконатися, що деякі ваші тести будуть вирівняні трьома точками та інші речі, які ніколи не відбудуться при випадковому розподілі.
Жил "ТАК - перестань бути злим"

Відповіді:


6

Перегляньте [1] та обговорення у розділі 4, Генерація випадкових автоматів. У папері орієнтовані різні алгоритми мінімізації DFA. Використовується рівномірний випадковий генератор, який виробляє канонічні рядкові подання повних DFA з станами та символами. Вони також обговорюють інші методи.nk


[1] Альмейда, М., Морейра, Н., Рейс, Р. (2007). Про продуктивність алгоритмів мінімізації автоматизованих систем. Логіка та теорія алгоритмів, 3.


Що означає "канонічні рядкові представлення"?
Дункан

@drowse Канонічний порядок визначається на наборі станів шляхом проходження автомата впоперек, вибираючи на кожному вузлі вихідний, використовуючи (загальний) порядок . Перегляньте посилання у статті. Σ
Juho

4

Подивіться домашню сторінку Кирила Ніко . Зокрема, для вашого питання стосуються наступних посилань:

Ф. Бассіно, Дж. Девід та К. Ніко, Перерахування та випадкове генерування можливо неповних детермінованих автоматів, Чиста математика та програми 19 (2-3) (2009) 1-16.

Ф. Бассіно та К. Ніко. Перерахування та випадкове генерування доступних автоматів. Теорія. Склад. Sc. . 381 (2007) 86–104.


3

Існують алгоритми випадкового генерування DFA до перестановки http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz .

Але, у вищенаведеному документі також зазначається, що майже всі DFA вже мінімальні. Не мінімальні DFA - це як прості числа ... їх небагато. І якщо ви використовуєте цей алгоритм для тестування алгоритму мінімізації, це буде, як якщо б ви тестували алгоритм на просте число за допомогою простого генератора випадкових чисел. Щоб мати більше не мінімальних DFA, ви можете змінити алгоритм, додавши стан мийки та перенаправити важливий відсоток переходів до цього стану мийки.

Але, з моєї точки зору, якщо ви хочете перевірити швидкість вашої реалізації, перевірте це, для чого ви хочете його використовувати: зі випадковими наборами слів або випадковим REGEX, створіть NFA або DFA, а потім мінімізуйте отриманий DFA .


2

одна природна стратегія - розглянути DFA як графік, і тоді існує багато "природних" і високо вивчених випадкових розподілів графіків, найпростіший, мабуть, Ердос-Реній . у такому випадку ви розглядаєте всі стани DFA як вузли графіка та вибираєте деякий фіксований відсоток усіх можливих ребер (переходи DFA). Більш складні дистрибуції, які значно вивчаються в більш пізню епоху, - це невеликі світові графіки. для стратегії, яку ви згадуєте у своєму запитанні, ви, мабуть, вибираєте спеціальний випадок де - кількість вузлів на графіку. однак ваша стратегія, ні Ердос-Реній, не гарантують, що всі стани в DFA пов'язані [природне обмеження для додавання].p=1/nn



Після редагування, інший спосіб бачити DFA - це набір трійки, що визначають ребра де - вершина 1, вершина 2, а - символ переходу, і будь-який підмножина з них можна вибрати для визначення a DFA. (v1,b,v2)v1v2b
vzn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.