[英]What is the algorithm for generating a random Deterministic Finite Automata?
DFA必須具有以下四個屬性:
DFA有N個節點
每個節點有2個傳出轉換。
每個節點都可以從每個其他節點到達。
從所有可能性中選擇DFA具有完全均勻的隨機性
這是我到目前為止:
但是,這是算法不正確。 考慮圖表,其中節點1有兩個連接到節點2(反之亦然),而節點3有兩個連接到節點4(反之亦然)。 這就是:
1 <==> 2
3 <==> 4
其中,通過<==>我的意思是兩種方式的兩個傳出連接(所以總共4個連接)。 這似乎形成了兩個派系,這意味着並非每個州都可以從其他所有州獲得。
有誰知道如何完成算法? 或者,有沒有人知道另一種算法? 我似乎模糊地回憶起可以使用二叉樹來構造它,但我不確定。
強連接是一個困難的約束。 讓我們生成均勻的隨機投射過渡函數,然后使用例如Tarjan的線性時間SCC算法對它們進行測試,直到得到一個強連接的算法。 這個過程有正確的分布,但不清楚它是否有效; 我的研究人員的直覺是,強連通性的極限概率小於1但大於0,這意味着只有O(1)迭代在期望中是必要的。
生成滿射過渡函數本身就是不平凡的。 不幸的是,如果沒有這種限制,每個州都有一個進入過渡的指數不可能。 使用此問題的答案中描述的算法來采樣{(1,a),(1,b),(2,a),(2,b),...,(N,a)的均勻隨機分區, (N,b)}有N個部分。 隨機置換節點並將它們分配給零件。
例如,設N = 3並假設隨機分區為
{{(1, a), (2, a), (3, b)}, {(2, b)}, {(1, b), (3, a)}}.
我們選擇隨機置換2,3,1並導出轉移函數
(1, a) |-> 2
(1, b) |-> 1
(2, a) |-> 2
(2, b) |-> 3
(3, a) |-> 1
(3, b) |-> 2
有一個預期的運行時間O(n ^ {3/2})算法。
如果生成具有m個頂點的均勻隨機有向圖,使得每個頂點具有k個標記的外弧(k-out有向圖),那么該有向圖中最大SCC(強連通分量)的大小約為c_k m,其中c_k是常數,取決於k。 實際上,這個SCC的大小恰好是c_k m(四舍五入為整數)的概率約為1 / \\ sqrt {m}。
因此,您可以生成大小為n / c_k的均勻隨機2-out圖,並檢查最大SCC的大小。 如果它的大小不完全是n,那么再試一次直到成功。 預期的試驗次數是\\ sqrt {n}。 生成每個有向圖應該在O(n)時間內完成。 因此總的來說算法預期運行時間為O(n ^ {3/2})。 有關詳細信息,請參閱此文章 。
在下文中,我將使用圖論的基本術語。
你可以:
結果將滿足所有三個要求。
以下參考文獻似乎與您的問題相關:
F. Bassino,J。David和C. Nicaud,可能不完全確定性自動機的計數和隨機生成, 純數學和應用 19 (2-3)(2009)1-16。
F. Bassino和C. Nicaud。 可訪問自動機的枚舉和隨機生成。 理論值。 比較。 SC。 。 381 (2007)86-104。
只需保持一組可以訪問的節點。 一旦他們都可以到達,填寫空白。
Start with a set of N nodes called A.
Choose a node from A and put it in set B.
While there are nodes left in set A
Choose a node x from set A
Choose a node y from set B with less than two outgoing transitions.
Choose a node z from set B
Add a transition from y to x.
Add a transition from x to z
Move x to set B
For each node n in B
While n has less than two outgoing transitions
Choose a node m in B
Add a transition from n to m
Choose a node to be the start node.
Choose some number of nodes to be accepting nodes.
集合B中的每個節點都可以到達集合B中的每個節點。只要可以從集合B中的節點到達節點並且該節點可以到達集合B中的節點,就可以將其添加到集合中。
我能想到的最簡單的方法是(統一)生成一個隨機DFA,每個節點有N
節點和兩個傳出邊,忽略其他約束,然后扔掉任何沒有強連接的(這很容易使用一個強連通分量算法)。 在沒有可達性約束的情況下,生成統一的DFA應該是直截了當的。 在性能方面可能存在問題的一件事是,在找到具有可達性屬性的DFA之前,您需要跳過多少個DFA。 但是,您應該首先嘗試此算法,並查看它最終需要多長時間才能生成可接受的DFA。
我們可以從N和2N之間的隨機數量的狀態N1開始。
假設初始狀態為狀態編號1.對於每個狀態,對於輸入字母表中的每個字符,我們生成隨機轉換(在1和N1之間)。
我們從初始狀態開始采用connex自動機。 我們檢查狀態的數量,經過幾次嘗試,我們得到一個N狀態。
如果我們也希望最小的自動機,那么只保留最終狀態的分配,但是隨機分配也很有可能獲得最小的自動機。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.