Qual è un buon algoritmo per generare DFA casuali?


9

Sto generando DFA casuali per testare un algoritmo di riduzione DFA su di essi.

L'algoritmo che sto usando in questo momento è il seguente: per ogni stato , per ogni simbolo dell'alfabeto , aggiungi a uno stato casuale. Ogni stato ha la stessa probabilità di diventare uno stato finale.qcδ(q,c)

È un buon metodo per generare DFA imparziali? Inoltre, questo algoritmo non genera un DFA trim (un DFA senza stati obsoleti), quindi mi chiedo se esiste un modo migliore di generare DFA casuali che possa in qualche modo garantire che sia trim?


2
Non esiste una distribuzione naturale di DFA casuali, quindi dipende da te. Cosa vuoi realizzare?
Yuval Filmus,

Sto generando DFA casuali per testare un algoritmo di riduzione DFA su di essi.
Duncan,

Forse vuoi iniziare da un piccolo set di DFA minimi e farli saltare in aria? In questo modo sai che la minimizzazione arriva effettivamente al giusto risultato.
adrianN,

ti chiedi, stai testando un algoritmo di riduzione non ottimale o sta trovando il DFA ottimale minimo unico?
vzn,

2
Se stai generando strutture di dati per i test, l'imparzialità non è importante. L'importante è avere buone probabilità di innescare comportamenti interessanti. Per fare un'analogia, quando testate un algoritmo geometrico, dovete assicurarvi che alcuni dei vostri test avranno tre punti allineati e altre cose che non si verificherebbero mai in una distribuzione casuale.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


6

Guarda [1] e la discussione nella Sezione 4, Generazione di automi casuali. Il documento confronta diversi algoritmi di minimizzazione di DFA. Viene utilizzato un generatore casuale uniforme che produce rappresentazioni di stringhe canoniche di DFA completi con stati e simboli k . Discutono anche altri metodi.nk


[1] Almeida, M., Moreira, N., & Reis, R. (2007). Sulle prestazioni degli algoritmi di minimizzazione degli automi. Logica e teoria degli algoritmi, 3.


Che cosa significa "rappresentazioni di stringhe canoniche"?
Duncan,

Σ

4

Dovresti dare un'occhiata alla homepage di Cyril Nicaud . In particolare, i seguenti riferimenti sono rilevanti per la tua domanda:

F. Bassino, J. David e C. Nicaud, Enumerazione e generazione casuale di automi deterministici eventualmente incompleti, Pure Mathematics and Applications 19 (2-3) (2009) 1-16.

F. Bassino e C. Nicaud. Enumerazione e generazione casuale di automi accessibili. Theor. Comp. Sc. . 381 (2007) 86-104.


3

Esistono algoritmi per generare casualmente DFA fino a una permutazione http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz .

Ma nel documento sopra è anche menzionato che quasi tutti i DFA sono già minimi. I DFA non minimi sono come numeri primi ... ce ne sono solo alcuni. E se usi questo algoritmo per testare l'algoritmo di minimizzazione sarà come se stessi testando un algoritmo su numero primo con un semplice generatore di numeri casuali. Per avere DFA più minimi, è possibile modificare l'algoritmo aggiungendo uno stato sink e reindirizzare una percentuale importante delle transizioni a questo stato sink.

Ma dal mio punto di vista, se vuoi testare la rapidità della tua implementazione, confrontala con ciò per cui vuoi usarla: con set di parole casuali o REGEX casuali, crea un NFA o un DFA e quindi minimizza il DFA risultante .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.