1. 程式人生 > >自動機,狀態機,有限自動機,有限狀態機,有限狀態自動機,非確定下有限狀態自動,確定性有限狀態自動機的區別於聯絡

自動機,狀態機,有限自動機,有限狀態機,有限狀態自動機,非確定下有限狀態自動,確定性有限狀態自動機的區別於聯絡

這幾個概念暈了幾天了,搞明白了就來備註一下

FSM(Finite State Machine)

FAM(Finite Automata Machine)

DFA(Determinate Finite Automata)

NFA(Non-Determinate Finite Automat)

自動機:自動機是有限狀態機(FSM)的數學模型。

狀態機:我們現在所說的狀態機一般是有限狀態機(FSM)的簡稱。

有限自動機 有限自動機(Finite Automata Machine)是電腦科學的重要基石,它在軟體開發領域內通常被稱作有        限狀態機(Finite State Machine),是一種應用非常廣泛的軟體設計模式(Design Pattern)。

有限狀態機

對有限狀態機的定義:有限狀態機是具有一個基本內部記憶的抽象機器模型,定義如下

根據輸出與輸入、系統狀態的關係,有限狀態機又可分Moore型有限狀態機Mealy型有限狀態機

Moore型有限狀態機是指輸出僅與系統狀態有關,與輸入訊號無關的狀態機。優點是將輸入和輸出分隔開.

Mealy型有限狀態機是指輸出與系統狀態和輸入均有關係的有限狀態機。

為了直觀,直接用轉移圖來說明兩者的區別

轉移圖是一種有向圖,由圓表示有限狀態機的狀態,有向曲線表示系統的狀態轉移過程,有向線段的起點 表示初始的狀態,終點表示轉移後的狀態。
       

對於Mealy型有限狀態機在有向曲線段上的字元表示系統的輸入和輸出,用“/”分隔。
         對於Moore型有限狀態機,通常在狀態後標出輸出值,用“/”分隔,輸入訊號仍然在有向線段上標註。



圖1:Mealy型狀態機的轉移圖

圖1所示的有限狀態機只有一位輸入、一位輸出,兩個狀態A1A2,左側繪製的指向A1的箭頭表示系統的初始狀態為A1;在A1的上方,繪製一個起點和終點都在A1上的有向曲線,以及曲線上的標註“1/0”表示,當狀態為A1,輸入訊號為1時,有限狀態機的狀態不變,輸出為0;由A1指向A2的標註為“0/1”的箭頭表示,當系統狀態為A1,輸入為0時,系統狀態變為A2,且輸出為1。同理,由轉移圖可知,當系統處於A2狀態時,輸入為1時狀態不變,輸出為1;當輸入為0時,狀態變為A1,輸出為0。對於比較複雜的有限狀態機,在有向箭頭的標識上還可以新增字元說明。


圖2: Moore型狀態機轉移圖

2所示的Moore型有限狀態機只有一位輸入、一位輸出,兩個狀態A1A2,左側繪製的指向A1的箭頭表示系統的初始狀態為A1;標註“A1/1”表示處於狀態A1時,輸出為1;同理“A2/0”表示處於狀態A2時,系統輸出為0;在狀態A1上方繪製的起點和終點均在A1上的有向曲線,以及曲線上的標註“1”表示,當狀態為A1,輸入訊號為1時,有限狀態機的狀態不變;由A1指向A2的標註為“0”的箭頭表示,當狀態為A1,輸入為0時,有限狀態機的狀態變為A2。當有限狀態機處於A2狀態時,如果輸入為1,有限狀態機的狀態就會變為A1。 

對於這種輸出在{0,1}二值區間的Moore型有限狀態機,一般稱之為有限狀態自動機,對於有限狀態自動機還有另一種轉移圖的表示方法,即用雙圓環表示輸出為1的狀態,並稱之為接受狀態。使用這種轉移圖畫法後,圖2所示的有限狀態機可繪製為如圖3所示的轉移圖。



圖3:有限狀態自動機

有限狀態自動機(FSM "finite state machine" 或者FSA "finite state automaton" )是為研究有限記憶體的計算過程和某些語言類而抽象出的一種計算模型。有限狀態自動機擁有有限數量的狀態,每個狀態可以遷移到零個或多個狀態,輸入字串決定執行哪個狀態的遷移。有限狀態自動機可以表示為一個有向圖。有限狀態自動機是自動機理論的研究物件。

有限狀態自動機是具有離散輸入和輸出的系統的一種數學模型 其主要特點有以下幾個方面: (1)系統具有有限個狀態,不同的狀態代表不同的意義。按照實際的需要,系統可以在不同的狀態下完成規定的任務。 (2)我們可以將輸入字串中出現的字元彙集在一起構成一個字母表。系統處理的所有字串都是這個字母表上的字串。 (3)系統在任何一個狀態下,從輸入字串中讀入一個字元,根據當前狀態和讀入的這個字元轉到新的狀態。 (4)系統中有一個狀態,它是系統的開始狀態。 (5)系統中還有一些狀態表示它到目前為止所讀入的字元構成的字串是語言的一個句子。 形式定義 · 定義:有限狀態自動機(FA—finite automaton)是一個五元組: – M=(Q, Σ, δ, q0, F) · 其中, – Q——狀態的非空有窮集合。∀q∈Q,q稱為M的一個狀態。 – Σ——輸入字母表。 – δ——狀態轉移函式,有時又叫作狀態轉換函式或者移動函式,δ:Q×Σ→Q,δ(q,a)=p。 – q0——M的開始狀態,也可叫作初始狀態或啟動狀態。q0∈Q。 – F——M的終止狀態集合。F被Q包含。任給q∈F,q稱為M的終止狀態。 有限狀態自動機還可以分成確定與非確定兩種。非確定有限狀態自動機可以轉化為確定有限狀態自動機。 自動機從初始狀態 q0 起,逐一讀入輸入串(由輸入字母表 Σ 的字母構成)的每一個字母,根據當前狀態、輸入字母和轉移函式 δ 決定自動機的下一步狀態;如果輸入串結束時,自動機處於終結狀態集合 F 的某一個狀態,這表示自動機接受該字串;否則自動機不接受該字串。 非確定有限狀態自動機與確定有限狀態自動機的唯一區別是它們的轉移函式不同。確定有限狀態自動機對每一個可能的輸入只有一個狀態的轉移。非確定有限狀態自動機對每一個可能的輸入可以有多個狀態轉移,接受到輸入時從這多個狀態轉移中非確定地選擇一個。

確定型有限狀態自動機:

形式化定義:

確定有限狀態自動機 clip_image001是由

  • 一個非空有限狀態的集合 Q
  • 一個輸入字母表 Σ(非空有限字元的集合)
  • 一個轉移函式 clip_image002(例如:clip_image003),每一個轉移都有確定的值
  • 一個開始狀態 clip_image004
  • 一個接受狀態的集合 clip_image005

所組成的5-元組。因此一個DFA可以寫成這樣的形式:clip_image006 。

非確定型有限狀態自動機:

形式化定義:

不確定有限狀態自動機 clip_image001是由

  • 一個非空有限狀態的集合 Q
  • 一個輸入字母表 Σ(非空有限字元的集合)
  • 一個轉移函式 clip_image002每一個轉移(一個狀態下,同一個輸入)都幾個不確定的值(次態),採取隨機轉移方式轉移到下一個狀態
  • 一個開始狀態 clip_image004
  • 一個接受狀態的集合 clip_image005

所組成的5-元組。因此一個DFA可以寫成這樣的形式:clip_image006 。

DFA與NFA的不同就是轉移函式的不同。

DFA與NFA可以相互裝換,具體如何轉換參考:

總結:我們平常說的狀態機其實就是指有限狀態自動機,有限自動機是一套自動機理論,當被用於特定的領域之後就被稱為有限狀態機,而有限狀態機的數學模型就是自動機。

狀態機是是一個概念,一個工具。我們經常採用狀態機來對事物建模,使用狀態機來建模的主要學科有:

在電腦科學中自動機用作計算機和計算過程的動態數學模型,用來研究計算機的體系結構、邏輯操作、程式設計乃至計算複雜性理論。

具體應用方面:

數位電路設計

遊戲開發

微控制器開發

設計模式之狀態機模式

狀態機工作流(基於事件轉移)

任何一個具有狀態變化的物件或事物都可以用狀態機來建模

在語言學中則把自動機作為語言識別器,用來研究各種形式語言

在神經生理學中把自動機定義為神經網路動態模型,用來研究神經生理活動和思維規律,探索人腦的機制。

在生物學中有人把自動機作為生命體的生長髮育模型,研究新陳代謝和遺傳變異。在數學中則用自動機定義可計算函式,研究各種演算法。


看到一句話"根本沒有輸出函式的有限狀態機叫做半自動機轉移系統",那麼按照有限狀態自動機的定義沒有輸出函式難道就是半自動機嗎。

相關推薦

自動機狀態有限自動機有限狀態有限狀態自動機確定有限狀態自動確定性有限狀態自動機區別聯絡

這幾個概念暈了幾天了,搞明白了就來備註一下 FSM(Finite State Machine) FAM(Finite Automata Machine) DFA(Determinate Finite Automata) NFA(Non-Determinate Finite

相關性、因果性之間的區別聯絡以及為什麼說相關性不是因果性?

1. 相關性是什麼? 0x1:相關性的定義 X和癌症有關,Y和中風有關,Z和心臟病發作有關。這三句話描述了三個相關性,告訴我們彼此的兩個現象是相關的,卻沒說它們是如何關聯在一起的。 兩個變數相關的基本意思是,一個變數發生的變化與另一個變數發生的變化是隨時間同步關聯的。比如: 孩子們的身高和年齡相關,因為隨著

VMware12提示 已將該虛擬配置為使用 64 位客戶操作系統。但是無法執行 64 位操作。

http 操作 技術分享 步驟 啟動 如果 sdn 重啟 cpu VMware12提示 已將該虛擬機配置為使用 64 位客戶機操作系統。但是,無法執行 64 位操作。 此主機支持 Intel VT-x,但 Intel VT-x 處於禁用狀態 解決辦法: 下

VMware12提示 已將該虛擬配置為使用 64 位客戶操作系統。但是無法執行 64 位操作

一個 電腦 war 虛擬 客戶機 enter bio file cpu VMware12提示 已將該虛擬機配置為使用 64 位客戶機操作系統。但是,無法執行 64 位操作。 此主機支持 Intel VT-x,但 Intel VT-x 處於禁用狀態 解決辦法: 下載Leo

獲取本的ip地址(排除虛擬藍牙等ip)

運行 exception play pla 過濾 contains network localhost static 項目中遇到了要獲取本地ip的需求,網上查找資料遇到很多坑,很多Java獲取本機ip地址的方法要麽是根本獲取不到,要麽是獲取的有問題。 網上常見的方法如下 I

Linux安裝配置 http 修改本中http伺服器主頁自定義顯示內容。

HTTP(Hyper Text Transfer Protocol) 超文字傳輸協議,位於osi模型中的應用層。               安裝:可以使用yum等多種方式安裝,最方便的自然是yum安裝(Redhat需

確定有限狀態自動機的構建-NFA的定義和實現

保留版權,轉載需註明出處(http://blog.csdn.net/panjunbiao)。 非確定有限狀態自動機(Nondeterministic Finite Automata,NFA)由以下元素組成: 一個有限的狀態集合S 一個輸入符號集合Sigma,並且架設空字元eps

C1.18 sm.sw.eb 程式成果展示配合一點硬體改造可全軟體控制重啟、刷_20160329_七俠鎮莫尛貝

C1.18 sm.sw.eb 程式成果展示,配合一點硬體改造,可全軟體控制重啟、刷機_20160329_七俠鎮莫尛貝   哈哈哈居然被刪了. 請看路標: https://blog.csdn.net/kimqcn4/article/details/51006268 h

C++ 只要一句輸入重定向。講講程式設計競賽本除錯技巧

喜歡程式設計的一定希望參加ACM吧。幾乎所有的ACM教材都有講到輸入流的重定向,不過提到只需一句就能重定向的書還真不多。還有重定向的注意事項。好久沒寫C++程式的,為了打打Code Jam的醬油,今天練習了一下。結果就因為這個重定向問題浪費的一天的時間,還以為是演算法寫錯了呢

Linux作業系統部署Jenkins環境資料遷移(備部署)以及主從節點的配置

         本文所闡述的,均是在Linux作業系統下部署Jenkins環境,採用的解決方案是,使用Tomcat、Jenkins.war包和maven,以及利用Nginx做Tomcat的反向代理來實現Jenkins的CI/CD。

Linux如何用/proc命令查詢程序狀態資訊——當前目錄記憶體佔用描述符等

參加阿里的面試,問到一個問題,如何在Linux下使用命令列查詢程序的狀態資訊,比如程序的當前目錄,程序的記憶體佔用等情況。當時的第一反應是使用top命令能夠得到所有的程序資訊。但是面試官好像不是很滿意,因此我回去之後查閱了相關的資料,發現可能他想問的/proc目錄,我這裡整

oracle 雙熱備oracle dataguard 和oracle rac的區別聯絡

Data Guard 是Oracle的遠端複製技術,它有物理和邏輯之分,但是總的來說,它需要在異地有一套獨立的系統,這是兩套硬體配置可以不同的系統,但是這兩套系統的軟體結構保持一致,包括軟體的版本,目錄儲存結構,以及資料的同步(其實也不是實時同步的),這兩套系統之間只要網路是通的就可以了,是一種異地容災的解

如何在 linux 主機執行 nginx在本機上執行 jettylinux 上的 nginx 反向代理到本 jetty

一 背景 在本地執行jetty,有時候需要檢視請求資料以後,看一下響應的狀態碼,日誌等。那麼需要在linux主機上執行nginx,在本機上執行jetty,也就是將linux上的nginx反向代理到本機的jetty.那麼在nginx上需要如何進行配置呢?如何切換host呢?二

【已解決】Android studio中ADB啟動失敗導致找不到虛擬機器或真

adb server version (31) doesn't match this client (36); killing... error: could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: 通常每個套接字

搭建tomcat伺服器目標可通過外網ip訪問本

最近學習了一些微信的開發者方面的東西,申請了一個阿里雲,因為一些原因,不能在阿里雲直接佈置伺服器,只能通過遠端控制主機來佈置,雖然我也不明白為什麼我一個前端要去弄那些,但是也算收穫一些東西了。記錄一下。 以下主要內容有:  1 . 如何把tomcat從localhost

單片學習方法總結給初學者分享如何怎樣學習單片

怎樣 實驗 ESS [] 獲得 知識 最快 差異 而且 從剛開始接觸單片機,到現在已經有3年的時間了,在這期間學習和使用了51單片機、飛思卡爾單片機,LPC2138,PIC16F887等系列的單片機,每接觸一款單片機,都會經歷熟悉其基本開發,然後將其用於項目中的過程,

業餘時間折騰了個微信小程式版本的街遊戲模擬器(吾愛街8090後的童年回憶歡迎大家體驗

好多年沒來部落格園了,有段時間想玩街機遊戲,發現都需要下載安裝,現在小程式這麼流行,是不是可以整合到小程式裡(無需下載,線上玩),出於這想法,就業餘時間折騰了下,分享給大家,偶爾可以回味暢玩下。 中間遇到了不少坑(就不具體說了),總算還是堅持下來了,還有很多細節有待優化,這裡得感謝各位模擬器前輩及大神們打下的

Android PullToRefresh 拉刷新上拉很多其它支持ScrollViewListView可方便拓展GridViewWebView等

包含 ict 重置 refresh 分享 .com img tar fcm 在寫著東西之前。從網上找到非常多這方面的源代碼,可是基本沒有找到愜意的。包含在GitHub上的比較有名的Android-PullToRefresh-master。思來想去還是自己寫吧。當然當中借

uploadify在chrome初始化失敗在Firefox卻可以原因探析

報錯 logs .com log 其他 原因 初始化 -1 參考 如果沒有報錯,在其他瀏覽器下沒問題,那就只有一種可能:瀏覽器flash加載失敗,解決辦法是,更改瀏覽器對站點flash的設置。參考下圖: uploadify在chrome下初始化失敗,在Firefox下卻

改進Vim體驗:在插入模式移動光標我不要用方向鍵!alt快捷鍵使用技巧!

targe 判斷 映射 tar 什麽 nbsp .vimrc 一次 time 改進Vim體驗:在插入模式下移動光標,我不要用方向鍵!alt快捷鍵使用技巧! 大家都知道,我們在插入模式下編輯代碼的時候 若想寫完這一部分後,移動到鄰近的一部分,如下一個單詞的後面,是很復雜的