您還沒有真正問過問題。如果您有針對特定任務的特定question(但仍然提供總體目標),您將獲得更多更好的幫助。這個問題的範圍應該很窄(例如不是「我如何實施FSA?」)。
至於如何表示一個FSA(這似乎是你有什麼困難),請繼續閱讀。
開始考慮一個有限狀態機的定義:它是一個字母Σ,一組狀態第,開始狀態小號,一組狀態一個和過渡功能的接受δ從一個國家和一個符號到一個國家。您必須能夠從輸入中確定這些屬性。轉換函數無法訪問的任何狀態都可以被刪除以產生等效的FSM。狀態和字母表的最小集合因此隱含在轉換函數中;您可以通過在輸入中不要求使用Σ或S,使您的FSM更易於使用(並且難以實施,但難度更大)。
您不需要對輸入使用的狀態使用相同的表示。只要你有一個從整數到字符串和字符串到整數的映射,你可以使用無符號整數作爲你的內部表示,這樣你就可以在內部表示和外部表示之間進行轉換。這樣,您的轉換函數可以作爲一個數組存儲,所以轉換步驟可以在不變的時間內執行。
更簡單的方法是使用外部表示法作爲內部表示法。使用這個選項,轉換函數將被存儲爲從字符串和符號到字符串的映射。考慮到大多數地圖數據結構的性能,轉換步驟可能是O(log(| S | + |Σ|))。如果符號表示爲整數(例如char
s),則可以將轉換函數表示爲從字符串到字符串數組的映射,給出O(log(| S |))性能。
在FSM的圖形視圖之後建模的另一個選項是爲狀態創建一個類。一個國家有一個名稱(外部表示)。各國負責過渡;發送一個符號到一個狀態並取回另一個狀態。
將該組狀態存儲爲從名稱到狀態的映射。
你走了,三個不同的地方開始,每個地方都有不同的方式來表示國家。
什麼是輸入格式?在繼續之前,它需要有明確的定義。 – outis
你能描述一下你輸入文件的格式嗎? – poundifdef
......更重要的是,你將如何表達「每個州應該做什麼的定義」?你應該提供更多關於你需要做什麼的信息。 –