【问题标题】:Myhill-Nerode theorem matrix to automataMyhill-Nerode 定理矩阵到自动机
【发布时间】:2015-05-01 14:53:49
【问题描述】:

我已经在 C++ 中成功实现了 Myhill-Nerode 定理。当它完成最小化给定自动机时,会给出一个矩阵作为答案。

使用此页面上的自动机:http://web.stcloudstate.edu/pkjha/CSCI502/Minimize.html,我得到了最终矩阵(这是给定矩阵的完整矩阵,而不是下三角):

- x x x x x x x x 
x - - x x x x x x 
x - - x x x x x x 
x x x - - - - x x 
x x x - - - - x x 
x x x - - - - x x 
x x x - - - - x x 
x x x x x x x - - 
x x x x x x x - -

表示第1,2,4和8行都是不同的状态,第(1),(2,3),(4,5,6,7)和(8,9)行可以分组进入相同的状态。

我正在使用一个类来根据这个结构来表示自动机的每个状态:

class state{
    public:
        string state_name;        
        vector<string> transitions; 
        bool final;                
        bool start;            
    public:
        state(string,vector<string>,bool,bool);
};

其中,状态名称是我当前状态的名称(A,B,C,D,state1,...),transitions 是一个字符串向量,其中包含我的自动机可以进入的每个状态的名称,final 是一个布尔值,指示我的状态是否为接受状态,start 是一个布尔值,指示我的状态是否为开始状态。

例如,对于给定自动机的节点 q0,其结构类似于:

state_name: q0
transitions: (q1,q2) <- always following the alphabet order
final: false
start: true

我的问题是:我需要按照给定的结构将此矩阵转换为自动机结构。我可以轻松识别开始/最终状态,因为我拥有原始自动机信息,并且可以轻松识别每个组。

我在矩阵中无法弄清楚的是组之间的转换。有什么建议吗?

【问题讨论】:

    标签: c++ automata dfa


    【解决方案1】:

    每个州都是某个组的成员,对于每个组,您都有一个组中的州列表。要找到组 G1 的转换,请选择组中的状态 S1 之一,获取 S1 的转换,并为每个目标状态 S2 找到相应的组 G2。您获得的所有 G2 的集合构成了 G1 的转换。 (注意,因为G1中的所有状态都是等价的,所以只需要考虑一个代表状态S1。)

    【讨论】:

    • 那么,首先我将创建所有组,然后我将获取属于该组的状态之一并检查其转换,这些转换将成为整个组的转换?
    • 是的。请注意,如果一个状态转换到两个不同的状态,结果证明它们是等效的,那么这两个状态将在同一个组中。因此,如果您只是列出与目标状态相对应的组,您可能会在列表中得到重复的组。
    猜你喜欢
    • 2021-05-31
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2012-10-15
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多