演算法:模擬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。下圖展示了其狀態的轉換 在這幅圖中大寫字母 ...