首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定性有限自动机的实现

确定性有限自动机的实现
EN

Stack Overflow用户
提问于 2022-02-22 22:28:22
回答 1查看 259关注 0票数 0

我需要构建一个状态机,并编写一个控制程序来识别一组0和1字符串,在这些字符串中,每出现一次都有三个零。下面是我的代码,它不能正常工作。我将非常感谢你的建议

代码语言:javascript
复制
Z = ["0", "1"]
Q = ["A", "B"]
S = "A"
F = "B"

def delta(s, z):
    i = Q.index(s)
    j = Z.index(z)
    matrix = [["A", "B"], ["B", "A"]]
    return matrix[i][j]

chain = "1000110110101"
transitions = ""

for char in range(len(chain)):
    if char == 0:
        transitions += S
        s = delta(S, chain[char])
    else:
        s = delta(s, chain[char])
    transitions += s

if transitions != "":
    print("The sequence of transitions of a finite automaton:", transitions)
    if transitions[-1] == F:
        print("Chain ", chain, "is allowed automaton, because the latter is the allowable state ", F)
    else:
        print("Chain ", chain, " is rejected by the automaton, so its final state is an inadmissible state", S)
else:
    print("The chain is empty.")
EN

回答 1

Stack Overflow用户

发布于 2022-02-22 23:03:24

您可能还没有被介绍到类,但我肯定会推荐使用他们的DFAs。

代码语言:javascript
复制
class binaryNode:
    def __init__(self):
        self.zero = self
        self.one = self
        self.isAccept = True
    def process(self,char):
        if char == "0":
            return self.zero
        if char == "1":
            return self.one

#Define Nodes
start = binaryNode()
one = binaryNode()
firstZero = binaryNode()
secondZero = binaryNode()
thirdZero = binaryNode()
trailingZero = binaryNode()
reject = binaryNode()

#Define Edges
start.one = one
one.one = reject
one.zero = firstZero
firstZero.zero = secondZero
firstZero.one = reject
secondZero.zero = thirdZero
secondZero.one = reject
thirdZero.one = one
thirdZero.zero = trailingZero
trailingZero.one = reject

#Set Accept (or in this case reject) state
reject.isAccept = False

def process(chain,node):
    for char in chain:
        node = node.process(char)
    return node.isAccept

tests = ["0000",
         "01000100",
         "0100010001000100",
         "0100001",
         "100101",
         "10001",
         "10000"]

for chain in tests:
    print(chain)
    print(process(chain,start))
    print()

我解释了你的“识别一组0和1的字符串,其中一次发生之间有三个零”,重点是在so 100000000次传递和100次之间,因为没有第二个1来满足“中间”方面,但也许我误解了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71229102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档