• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            twzheng's cppblog

            『站在風口浪尖緊握住鼠標旋轉!』 http://www.cnblogs.com/twzheng

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks
            [源] http://www2.gdin.edu.cn/jkx/webstudy/bianyiyuanli/fornpage/chapter03/section3/03.3.3.htm

            不確定的有窮自動機N的確定化
              根據定義,顯然DFA是NFA的特例。對于每個NFA M,存在一個DFA M′,使得 L(M)=L(M′)。
              對于任何兩個有窮自動機M和M′,如果L(M)=L(M′),則稱M與M′是等價的。
              我們將介紹一種算法,對于給定的NFA M,構造其等價的DFA M′。
              請你注意這個結論:DFA是NFA的特例
              對每個NFA N一定存在一個DFA M,使得L(M)=L(N)。對每個NFA N存在著與之等價的DFA M。與某一NFA等價的DFA不唯一。
              在有窮自動機的理論里,有這樣的定理:設L為一個由不確定的有窮自動機接受的集合,則存在一個接受L的確定的有窮自動機。我們不對定理進行證明,只介紹一種算法(這種算法稱為子集法),將NFA轉換成接受同樣的語言的DFA。
              為什麼對DFA如此親睞呢?因為它的行為很容易用程序來模擬。
              DFA M=(K,Σ,f,S,Z)的行為的模擬程序
            程序段    K:=S;
               c:=getchar;
               while c<>eof do
                {K:=f(K,c);
                 c:=getchar;
                };
               if K is in Z then return (‘yes’)
                else return (‘no’)
              從NFA的矩陣表示中可以看出,表項通常是一個狀態(tài)的集合,而在DFA的矩陣表示中,表項是一個狀態(tài),NFA到相應的DFA的構造的基本想法是該DFA的每一個狀態(tài)對應NFA的一組狀態(tài)。該DFA使用它的狀態(tài)去記錄在NFA讀入一個輸入符號后可能達到的所有狀態(tài)。也就是說,在讀入輸入符號串a1a2…an之后,該DFA處在這樣一個狀態(tài),該狀態(tài)表示這個NFA的狀態(tài)的一個子集T,T是從NFA的開始狀態(tài)沿著某個標記為a1a2…an的路徑可以到達的那些狀態(tài)。
              為介紹算法首先定義對狀態(tài)集合I的幾個有關運算:
              1. 狀態(tài)集合I的ε-閉包,表示為ε-closure(I),定義為一狀態(tài)集,是狀態(tài)集I中的任何狀態(tài)S經任意條ε弧而能到達的狀態(tài)的集合。
              回顧在前面章節(jié)對轉換函數的擴充:如輸入字符是空串,則自動機仍停留在原來的狀態(tài)上,顯然,狀態(tài)集合I的任何狀態(tài)S都屬于ε-closure(I)。
              2. 狀態(tài)集合I的a弧轉換,表示為move(I,a),定義為狀態(tài)集合J,其中J是所有那些可從I中的某一狀態(tài)經過一條a弧而到達的狀態(tài)的全體。
              我們使用圖4.4的NFA N的狀態(tài)集合來理解上述兩個運算。
            圖 4.4 NFA N
              ε-closure(0)={0,1,2,4,7}
              即{0,1,2,4,7}中的任一狀態(tài)都是從狀態(tài)0經任意條ε弧可到達的狀態(tài),令{0,1,2,4,7}=A,則 move(A,a)={3,8},因為在狀態(tài)0,1,2,4和7中,只有狀態(tài)2和7有a弧射出,分別到達狀態(tài)3和8。
              而ε-closure({3,8})={1,2,3,4,6,7,8}。

              再看一個例子,對下圖所示NFA的狀態(tài)集合I的運算
            圖 4.5
              I={1},ε-closure(I)={1,2};
              I={5},ε-closure(I)={5,6,2};
              move({1,2},a)={5,3,4}
              ε-closure({5,3,4})={2,3,4,5,6,7,8};

              NFA確定化算法:假設NFA N=(K, ∑,f,K0,Kt)按如下辦法構造一個DFA M=(S, ∑,d,S0,St),使得L(M)=L(N):
              ① M的狀態(tài)集S由K的一些子集組成(k的子集構造算法見下頁)。用[S1 S2... Sj]表示S的元素,其中S1, S2,,... Sj是K的狀態(tài)。并且約定,狀態(tài)S1, S2,,... Sj是按某種規(guī)則排列的,即對于子集{S1, S2}={ S2, S1,}來說,S的狀態(tài)就是[S1 S2];
              ② M和N的輸入字母表是相同的,即是∑;
              ③ 轉換函數是這樣定義的:
              d([S1 S2,... Sj],a)= [R1R2... Rt] 其中 {R1,R2,... , Rt} = e-closure(move({S1, S2,,... Sj},a))
              ④ S0=e-closure(K0)為M的開始狀態(tài);
              ⑤ St={[Si Sk... Se],其中[Si Sk... Se]∈S且{Si , Sk,,... Se}∩Kt≠φ}

            構造NFA N的狀態(tài)K的子集的算法:
              假定所構造的子集族為C,即C= (T1, T2,,... TI),其中T1, T2,,... TI為狀態(tài)K的子集。
            ① 開始,令e-closure(K0)為C中唯一成員,并且它是未被標記的。
            ② while (C中存在尚未被標記的子集T)do {
              標記T;
              for 每個輸入字母a do
              {
               U:= e-closure(move(T,a));
                if U不在C中 then
                將U作為未標記的子集加在C中
              }
             }
            例題 例 3.3 應用左面的算法對圖4.4的NFA N構造子集,步驟如下:
                ① 首先計算ε-closure(0),令T0=ε-closure(0)={0,1,2,4,7},T0未被標記,它現在是子集族C的唯一成員。
              ② 標記T0;令T1=ε-closure(move(T0,a))={1,2,3,4,6,7,8},將T1加入C中,T1未被標記。
              令T2=ε-closure(move (T,b))={1,2,4,5,6,7},將T2加入C中,它未被標記。
              ③ 標記T1;計算ε-closure(move(T1,a)),結果為{1,2,3,4,6,7,8},即T1,T1已在C中。
              計算ε-closure(move(T1,b)),結果為{1,2,4,5,6,7,9},令其為T3,T3加至C中,它未被標記。
              ④ 標記T2,計算ε-closure(move(T2,a)),結果為{1,2,3,4,6,7,8},即T1,T1已在C中。
              計算ε-closure(move(T2,b)),結果為{1,2,4,5,6,7},即T2,T2已在C中。
              ⑤ 標記T3,計算ε-closure(move(T3,a)),結果為{1,2,3,4,6,7,8},即T1
              計算ε-closure(move(T3,b)),結果為{1,2,4,5,6,7,10},令其為T4,加入C中,T4未被標記。
              ⑦ 標記T4,計算ε-closure(move(T4,a)),結果為{1,2,3,4,6,7,8},即T1
              計算ε-closure(move(T4,b))結果為{1,2,4,5,6,7},即T2
              至此,算法終止共構造了五個子集:
              T0={0,1,2,4,7} T1={1,2,3,4,6,7,8}
              T2={1,2,4,5,6,7} T3={1,2,4,5,6,7,9}
              T4={1,2,4,5,6,7,10}
              那么圖4.4的NFA N構造的DFA M為
              ① S={[T0],[T1],[T2],[T3],[T4]}
              ② Σ={a,b}
              ③ D([T0],a)=[T1] D([T2],a)=[T1]
                D([T0],b)=[T2] D([T2],b)=[T2]
                D([T1],a)=[T1] D([T3],a)=[T1]
                D([T1],b)=[T3] D([T3],b)=[T4]
                D([T4],a)=[T1]
                D([T4],b)=[T2]
              ④ S0=[T0]
              ⑤ St=[T4]
              不妨將[T0],[T1],[T2],[T3],[T4]重新命名,以利于書寫,或用A,B,C,D,E或用0,1,2,3,4分別表示。若采用后者,該DFA M的狀態(tài)轉換圖如圖4.6所示。
            圖 4.6 DFA M
             
            又例:將下圖的NFA確定化
            劃分子集及重新命名:
            Ia Ib
            {i,1,2} S {1,2,3} A {1,2,4} B
            {1,2,3} A {1,2,3,5,6,f} C {1,2,4} B
            {1,2,4} B {1,2,3} A {1,2,4,5,6,f} D
            {1,2,3,5,6,f} C {1,2,3,5,6,f} C {1,2,4,6,f} E
            {1,2,4,5,6,f} D {1,2,3,6,f} F {1,2,4,5,6,f} D
            {1,2,4,6,f} E {1,2,3,6,f} F {1,2,4,5,6,f} D
            {1,2,3,6,f} F {1,2,3,5,6,f} C {1,2,4,6,f} E
            確定化后的自動機:
            posted on 2007-04-03 22:20 譚文政 閱讀(1849) 評論(1)  編輯 收藏 引用 所屬分類: 基礎知識

            評論

            # re: 不確定的有窮自動機N的確定化 2011-05-12 09:44 歸地方
            圖片失效鳥  回復  更多評論
              

            波多野结衣久久一区二区| 久久国产精品久久| 久久国产视屏| 国产精品久久久久影院嫩草 | 久久婷婷国产综合精品| 无码任你躁久久久久久老妇| 99久久精品免费看国产| 久久中文字幕一区二区| 99久久精品日本一区二区免费| 久久久久久久波多野结衣高潮 | 久久久久九九精品影院| 99久久精品费精品国产| 日韩亚洲欧美久久久www综合网| 久久国产亚洲高清观看| 69国产成人综合久久精品| 国内精品人妻无码久久久影院 | 一极黄色视频久久网站| 色欲综合久久躁天天躁| 香蕉aa三级久久毛片| 久久久久亚洲国产| 久久精品人人做人人爽电影| 亚洲第一极品精品无码久久| 久久久亚洲欧洲日产国码aⅴ| 久久国产乱子伦免费精品| 久久99精品综合国产首页| 韩国三级中文字幕hd久久精品| 亚洲国产小视频精品久久久三级 | 久久精品日日躁夜夜躁欧美| 亚洲精品美女久久777777| AV无码久久久久不卡网站下载| 欧美精品一本久久男人的天堂| 久久AⅤ人妻少妇嫩草影院| 欧美久久久久久| 久久AV高清无码| 久久e热在这里只有国产中文精品99| 久久五月精品中文字幕| 亚洲国产一成人久久精品| 亚洲一区中文字幕久久| 波多野结衣久久一区二区| 97久久超碰成人精品网站| 日日狠狠久久偷偷色综合0|