簡體   English   中英

DFA到正則表達式時間復雜度

[英]DFA to regular expression time complexity

我正在研究Ullman等人在“自動機理論,語言和計算導論”第2版第151頁中將DFA轉換為正則表達式的時間復雜度分析。 該方法有時被稱為傳遞閉包方法 我不明白他們是如何在O((n ^ 3)*(4 ^ n))時間復雜度中提出4 ^ n表達式的。

我理解4 ^ n表達式關於空間復雜度,但是,關於時間復雜度,似乎我們使用先前迭代的結果在每次迭代時僅對每對狀態執行四次恆定時間操作。 我究竟缺少什么?

這是對未使用正確數據結構的算法復雜性的粗略約束。 我不認為除了作者顯然不關心在這里進行優化之外還有很多解釋,可能是因為他們的主要觀點是正則表達式至少與DFA一樣具有表現力,並且因為他們認為優化這種指數是沒有意義的時間算法。

每個n次迭代有三個嵌套循環; 在外環的迭代k期間構造的正則表達式具有大小O(4 ^ k),因為它們是由在前一次迭代期間構造的至多四個正則表達式構造的。 如果算法復制這些子表達式並且我們高估了在所有迭代時在O(4 ^ n)處綁定的正則表達式大小,那么我們得到O(n ^ 3 4 ^ n)。

顯然我們可以做得更好。 在不消除復制的情況下,通過適當地界定幾何和,我們可以得到O(sum_ {k = 1} ^ nn ^ 2 4 ^ k)= O(n ^ 2(n + 4 ^ n))。 此外,正如您所指出的,我們根本不需要復制,除非在最后我們同意templatetypedef必須完全寫出輸出,給出O(n ^ 3)的運行時間以准備常規表達式和O(4 ^ n)寫出來。 此版本的空間復雜性等於時間復雜度。

我想你的疑問是關於N 3時間復雜度。

讓我們假設R ij k表示將自動機從狀態q i轉換q j而不經過任何高於q k的狀態的所有字符串的集合。

那么R ij k的迭代公式如下所示,

R ij k = R ik k-1 (R kk k-1* R kj k-1 + R ij k-1

該技術類似於全對最短路徑問題。 唯一的區別是我們正在采用正則表達式的聯合和連接而不是總結距離。 全對最短路徑問題的時間復雜度為n 3 因此,我們可以預期DFARegular Expression轉換具有相同的復雜性。 同樣的方法也可用於將NFAε-NFA轉換為相應的正則表達式。

transitive closure approach的主要問題是它創建了非常大的正則表達式。 如此大的長度是由於連接術語的重復結合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM