实现一个代码来模拟c中的非确定性的有限自动机

实现一个代码来模拟c中的非确定性的有限自动机,第1张

概述我正在做一个自动机理论的任务,我必须通过确定性有限自动机的过渡函数来确定一个单词是否被接受 我有这个输入文件: 6 8 0 2250 0 a0 1 a1 1 b1 2 c1 3 c3 4 d4 4 d4 5 d3aaabccccaabbbbcdcacdddddd 输入以4个整数开始,第一个是自动机的状态数,接下来是自动机的转换次数,第三个数字是初始状态,然后是最终状态数 我正在做一个自动机理论的任务,我必须通过确定性有限自动机的过渡函数来确定一个单词是否被接受

我有这个输入文件:

6 8 0 2250 0 a0 1 a1 1 b1 2 c1 3 c3 4 d4 4 d4 5 d3aaabccccaabbbbcdcacdddddd

输入以4个整数开始,第一个是自动机的状态数,接下来是自动机的转换次数,第三个数字是初始状态,然后是最终状态数.然后来到最后的状态(在这个例子中,最终的状态是2和5).

然后进入N行(N是转换次数),每个都有2个整数,一个字符I,J和C表示转换,即转换从状态i到状态J与字符C的状态.在这行后面附带一个整数S,它将包含要测试的字符串数,然后S行与相应的字符串.

该程序的输出应为:

Case #2:aaabcccc Rejectedaabbbbcdc Rejectedacdddddd Accepted

应该说String是否被接受或拒绝.到目前为止,我只用输入的方式对工作进行编码.

我不知道如何代表自动机最方便.我应该使用数组吗?对阵列应用什么逻辑?没有事先知道自动机字母表有什么办法吗?我需要一个数据结构来表示自动机吗?我有一点困扰这个任务,并希望一些想法,一些伪代码或想法来做到这一点.代码是否是另一种语言?我不想要解决方案,因为我想做我的任务,但如果我可以使用一些帮助

解决方法 我想你可以有一个转换的映射,其中tr [(i,c)] = j如果通过c从i状态转换到j状态,最后状态的数组fs [m]其中m是最终状态数以及初始状态s0的整数.

Bellow是一个具有这样性质的类的框架:

class automata{public:    automata(int start) : s0(start)    {}    voID add_Transition(int i,int j,char c) {        //...    }    voID add_final_state(int i) {        //...    }    bool valIDate_string(const std::string& str) {        //...    }private:    std::map<std::pair<int,char>,int> tr; // Transitions    std::vector<int> fs; // final states    int s0; // initial state};
总结

以上是内存溢出为你收集整理的实现一个代码来模拟c中的非确定性的有限自动机全部内容,希望文章能够帮你解决实现一个代码来模拟c中的非确定性的有限自动机所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存