Python實現模擬DFA演算法

2021-08-26 08:24:06 字數 1430 閱讀 7893

演算法:模擬dfa

輸入: dfa d和輸入字串x,d的初態為s0, 終態集為f。

輸出: 若d接受x,回答『yes』,否則回答『no』

# 構造dfa

class

dfa:

# 初始化dfa

def__init__

(self, s, s0, f, move):

self.s = s # 狀態集(list)

self.s0 = s0 # 初態(int)

self.f = f # 終態(int)

self.move = move # 狀態轉移函式(list套dict)

# 判斷是否接受x

defisaccept

(self,x):

print('開始判斷是否接受輸入的字串x')

for ch in x:

# 如果能轉換(判斷字典中是否存在key為'ch')

if ch in move[self.s0]:

self.s0=move[self.s0][ch]

#如果不能轉換,直接返回拒絕

else:

print('輸入被拒絕~~')

return

0#判斷是否達到終態

if self.s0==self.f:

print('輸入被接受~~')

else:

print('輸入被拒絕~~')

return

0if __name__ == '__main__':

print("---------本程式用於識別正規式為'(a|b)*abb'的字串行---------")

#手動輸入dfa元素

#s = [0, 1, 2, 3]

s = eval(input("請輸入dfa的狀態集s,輸入格式為list,如'[0, 1, 2, 3]' :"))#動態輸入成功

#s0 = 0

s0 = int(input("請輸入dfa的初態s0,如'0' :"))#動態輸入成功

#f = 3

f = int(input("請輸入dfa的終態f,如'3' :"))#動態輸入成功

#move = [, , , ]

print("請輸入dfa的狀態轉移矩陣,輸入格式為list巢狀dict,如'[, , , ]' ")

move = eval(input(":"))

#動態獲取dfa元素

d = dfa(s, s0, f, move)

while

true:

print(' ')

x = input('請輸入要識別的字串x:')#提示輸入

if x=='quit':

print('程式結束執行')

break

d.isaccept(x) # 判斷是否接受

PHP實現DFA演算法

最近專案需要用到敏感詞過濾功能,最開始想的是使用正則匹配和mysql儲存敏感詞來對敏感詞來進行過濾操作,但是這兩種方法都感覺不好。大家都知道正則效能問題一直都是乙個很大的問題,而使用mysql的話雖然可以實現,但是給資料庫增加了額外的壓力。後面經過google了解到dfa 有窮自動機 演算法可以解決...

python實現模擬退火演算法

問題 求f x 在定義域 5,8 上的最大值 原始碼 模擬退火法 import numpy as np import math 定義域x從5到8閉區間 bound 5,8 tmp 1e2 tmp min 1e 3 alpha 0.98 beta 1 def f x return math.sin x...

Java實現DFA演算法實現敏感詞過濾

在實現文字過濾的演算法中,dfa是唯一比較好的實現演算法。dfa即deterministic finite automaton,也就是確定有窮自動機,它是是通過event和當前的state得到下乙個state,即event state nextstate。下圖展示了其狀態的轉換 在這幅圖中大寫字母 ...