Generuję losowe DFA, aby przetestować na nich algorytm redukcji DFA.
Algorytm, którego teraz używam, jest następujący: dla każdego stanu , dla każdego symbolu w alfabecie dodaj do jakiegoś losowego stanu. Każde państwo ma takie samo prawdopodobieństwo, że stanie się stanem końcowym.
Czy to dobra metoda generowania obiektywnych DFA? Ponadto ten algorytm nie generuje przycinanego DFA (DFA bez przestarzałych stanów), więc zastanawiam się, czy istnieje lepszy sposób generowania losowych DFA, który może w jakiś sposób zapewnić, że jest przycięty?
Odpowiedzi:
Sprawdź [1] i dyskusję w rozdziale 4, Generowanie losowych automatów. Papierowe testy porównują różne algorytmy minimalizacji DFA. Zastosowano jednolity generator losowy, który wytwarza kanoniczne reprezentacje ciągów kompletnych DFA z stanów i symboli. Omawiają także inne metody.n k
[1] Almeida, M., Moreira, N., i Reis, R. (2007). Na wydajność algorytmów minimalizacji automatów. Logika i teoria algorytmów, 3.
źródło
Powinieneś spojrzeć na stronę domową Cyrila Nicauda . W szczególności następujące pytania dotyczą twojego pytania:
F. Bassino, J. David i C. Nicaud, Wyliczenie i losowe generowanie prawdopodobnie niekompletnych automatów deterministycznych, Pure Mathematics and Applications 19 (2-3) (2009) 1-16.
F. Bassino i C. Nicaud. Wyliczanie i losowe generowanie dostępnych automatów. Teoria Komp. Sc. . 381 (2007) 86–104.
źródło
Istnieją algorytmy losowego generowania DFA aż do permutacji http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz .
Jednak w powyższym artykule wspomniano również, że prawie wszystkie DFA są już minimalne. Nie minimalne DFA są jak liczby pierwsze ... jest ich tylko kilka. A jeśli użyjesz tego algorytmu do przetestowania algorytmu minimalizacji, będzie to tak, jakbyś testował algorytm na liczbie pierwszej za pomocą prostego generatora liczb losowych. Aby mieć więcej niż minimalne DFA, możesz zmienić algorytm, dodając stan ujścia i przekierowując ważny procent przejść do tego stanu ujścia.
Ale z mojego punktu widzenia, jeśli chcesz przetestować szybkość swojej implementacji, sprawdź to, do czego chcesz go użyć: z losowymi zestawami słów lub losowymi REGEX, utwórz NFA lub DFA, a następnie zminimalizuj wynikowy DFA .
źródło
jedną naturalną strategią jest traktowanie DFA jako wykresu, a następnie istnieje wiele „naturalnych” i dobrze zbadanych losowych rozkładów grafów, najprostszym jest prawdopodobnie Erdos-Renyi . w takim przypadku traktujesz wszystkie stany DFA jako węzły wykresu i wybiera się stały procent wszystkich możliwych krawędzi (przejść DFA). bardziej wyrafinowane rozkłady, które są badane znacznie w najnowszej erze, to małe wykresy świata . w przypadku strategii wymienionej w pytaniu najwyraźniej wybierasz przypadek szczególnyp = 1 / n gdzie n to liczba węzłów na wykresie. jednak twoja strategia, ani Erdos-Renyi, nie gwarantuje, że wszystkie stany w DFA są połączone [naturalne ograniczenie, które należy dodać].
źródło