ε-CLOSURE(I)构造算法的程序实现 免费 编译原理 课程设计 合工大 python

本文介绍了如何使用Python处理状态机问题,通过FindClosure函数计算Z闭包,并针对多字符和非数字索引提供了解决方案。通过实例展示了如何选择功能1和2,获取不同状态的Z闭包。最后提到了可视化和更精细操作的加分点。
摘要由CSDN通过智能技术生成

课设前几题都是比较简单的,不需要怎么动脑。

这里贴一份python代码,需要注意的是默认设定以下几种情况:
1.每个状态转换集只有一个目标,也就是转换矩阵中不允许出现多个字符。
2.状态必须以数字为标号,且按顺序从0开始一直往下
以上情况是为了减少代码工作量而做的设置,但文章末尾会把解决方法给大家
那么接下来就是激动人心的贴代码时刻拉

def selection1(target):
    "这里是选择1的引导函数"
    closure=FindClosure(target);
    print('%d 的z闭包为:%s  \n' % (target, closure));
    return ;

def selection2() :
    "选择2的引导函数,用i遍历所有状态,并找出相应的z闭包"
    for i in raw_df.index :
        closure=FindClosure(i)
        print('%d 的z闭包为:%s  \n' %(i,closure));
    return ;

def FindClosure(target):
    "关键的寻找闭包函数"
    closure=[];  #用于存放寻找到的状态集
    closure.append(target);  #z闭包包括自身和经过任意条z弧能到达的状态
    while (pd.isnull(raw_df.loc[target,'z'])==False) :
        #当target 经过z弧之后有后继结点(即target有向外的z弧),则进行循环
        target=raw_df.loc[target, 'z'];#把经过z弧之后的后继节点当作新的target,继续向下寻找
        closure.append(target);#把这个新节点加入到z闭包中

    return closure;

#主函数
if __name__ == '__main__':
    print('Hello,world!');
import pandas as pd;
raw_df=pd.read_excel('datafile.xlsx');#导入表格数据
print(raw_df);#打印
sign=input('请选择要执行的功能,输入编号后按回车,1.寻找目标字符的z闭包。\n2.自动寻找所有字符的z闭包\n');
if sign == '1':#选择功能
    target=int(input('请输入要找的目标字符:\n'));#注意接受的是个字符,需要转换成int
    selection1(target);
if sign == '2':
    selection2();

这里给出开头两种情况的解决方案:
1.若转换矩阵包含多个字符,则需要在获取该格数据之后用split等函数进行分割,之后将这些分割好的字符全部加入到一个容器里面,可以用列表,字典等。然后依次从容器中取出一个字符进行闭包运算。直到容器为空,代表计算完毕,则停止。

2.用pandas的set_index()函数,设置新的索引值,新的索引值可以是各个状态,这样就可以实现abcd等索引方式,之后在代码内部修改loc相关函数即可


这个是数据表格,用Exel软件建立即可

输入输出结果:

   状态    z    a    b
0   0  4.0  NaN  NaN
1   1  NaN  3.0  NaN
2   2  5.0  NaN  NaN
3   3  NaN  2.0  NaN
4   4  1.0  4.0  4.0
5   5  6.0  5.0  5.0
6   6  NaN  NaN  NaN
请选择要执行的功能,输入编号后按回车,1.寻找目标字符的z闭包。
2.自动寻找所有字符的z闭包
2
0 的z闭包为:[0, 4.0, 1.0]  

1 的z闭包为:[1]  

2 的z闭包为:[2, 5.0, 6.0]  

3 的z闭包为:[3]  

4 的z闭包为:[4, 1.0]  

5 的z闭包为:[5, 6.0]  

6 的z闭包为:[6]  


Process finished with exit code 0

最后,可以做的更加精细,以下是加分项:

1.闭包可视化——结果自动生成图像并保存
2.根据状态矩阵自动生成nfa图像——也是可视化

The End

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值