利用Python实现NFA到DFA的转化(子集法)

本文介绍了如何使用Python将不确定有穷自动机(NFA)转换为确定的有穷自动机(DFA)。通过详细阐述代码实现、测试样例和代码讲解,包括e-closure闭包、I操作以及状态矩阵的构建,展示了Python在处理此类问题时的便利性。此外,作者提及未来计划分享C语言中基于邻接表的数据结构实现。
摘要由CSDN通过智能技术生成

一.不确定有穷自动机转换成确定的有穷自动机(NFA转DFA)

1.代码实现

__author__='PythonStriker'
global NFA_StautsMatrix,DFA_StautsMatrix,StartWorld,EndWorld,\
    StatusNumber,EnterNumber,EnterWorld,NFA_StatusWorld,DFA_StatusWrold
EnterWorld = []                                                                    #输入状态
NFA_StatusWorld = []                                                               #NFA有穷状态集
DFA_StatusWrold = []                                                               #DFA有穷状态集

def main():
    EndList = []
    global NFA_StautsMatrix, DFA_StautsMatrix, StartWorld, EndWorld, \
        StatusNumber, EnterNumber, EnterWorld, NFA_StatusWorld,DFA_StatusWrold
    StartWorld = input("输入开始状态:")
    EndWorld = input("输入结束状态:")
    StatusNumber = int(input("输入状态个数:"))
    EnterNumber = int(input("状态机输入个数:"))
    print("输入不确定有穷状态机转换表:")
    NFA_StautsMatrix = [[] for _ in range(0,StatusNumber + 1)]                      #NFA状态转换表
    for row in range(0,StatusNumber + 1):                                          #存入状态转换表
        line  = input().split(' ')
        for column in range(len(line)):
            NFA_StautsMatrix[row].append(line[column])

    for enter in NFA_StautsMatrix[0]:                                              #存入输入状态
        if enter!='\\' and enter!='&':
            EnterWorld.append(enter)
    for row in range(1,StatusNumber+1):                                             #NFA有穷状态集
        NFA_StatusWorld.append(NFA_StautsMatrix[row][0])
    DFA_Start = Empty_Closure(StartWorld)                                          #DFA开始状态
    for status in DFA_StatusWrold:
        for enter in EnterWorld:
            Empty_Closure(Enter_Closure(status,enter))

    DFA_StautsMatrix = [[] for _ in range(0, len(DFA_StatusWrold) + 1)]

    for row in range(0, len(DFA_StatusWrold) + 1):
        if row == 0:
            line = "\ a b c"
            line = line.split(' ')
            for column in range(len(line)):
                DFA_StautsMatrix[row].append(line[column])
        else:
  • 9
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值