You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则语言星闭包NFA构造错误排查:基于定理1.49的实现问题

Kleene星闭包NFA构造错误排查

我学习了定理1.49(正则语言类在星运算下封闭)的NFA构造方法:添加一个新的既是起始又是接受的状态,通过ε转换连接到原自动机的起始状态;同时为原自动机的所有接受状态添加ε转换回新起始状态,以此识别语言的星闭包(包含空串ε)。

构造的两个星闭包NFA及测试失败情况

1. 针对1.6a的NFA构造星闭包NFA

原1.6a的NFA代码:

prob_1_6a = NFA(
    states={'0', '1', '3', '2'},
    input_symbols={'0', '1'},
    transitions={'0': {'0': {'3'}, '1': {'1'}}, '1': {'1': {'1'}, '0': {'2'}}, '2': {'0': {'2'}, '1': {'1'}}, '3': {}},
    initial_state='0',
    final_states={'2'}
)

我构造的星闭包NFA:

prob_1_10d = NFA(
    states={'0', '1', '2', '3', 'start'},  # 添加新起始状态
    input_symbols={'0', '1'},
    transitions={
        'start': {'': {'0'}},  # 从新起始状态到原起始状态的ε转换
        '0': {'0': {'3'}, '1': {'1'}, '': {'start'}},  # 添加回新起始状态的ε转换用于Kleene星
        '1': {'1': {'1'}, '0': {'2'}, '': {'start'}},  # 添加回新起始状态的ε转换用于Kleene星
        '2': {'0': {'2'}, '1': {'1'}, '': {'start'}},  # 添加回新起始状态的ε转换用于Kleene星
        '3': {'': {'start'}}  # 添加回新起始状态的ε转换用于Kleene星
    },
    initial_state='start',  # 带ε转换的新起始状态
    final_states={'start'}  # 仅新起始状态为接受状态
)

2. 针对1.6k的DFA构造星闭包NFA

原1.6k的DFA代码:

prob_1_6k = DFA(
    states={'q0', 'q1', 'q2'},
    input_symbols={'0', '1'},
    transitions={
        'q0': {'0': 'q1', '1': 'q2'},
        'q1': {'0': 'q2', '1': 'q2'},
        'q2': {'0': 'q2', '1': 'q2'}
    },
    initial_state='q0',
    final_states={'q0', 'q1'}
)

我构造的星闭包NFA:

prob_1_10e = NFA(
    states={'0', '1', '2', '3', 'start'},  # 原状态加Kleene星的新起始状态
    input_symbols={'0', '1'},
    transitions={
        'start': {'': {'0', 'start'}},  # 到原起始状态和自身的ε转换
        '0': {'0': {'3'}, '1': {'1'}, '': {'start'}},  # 到新起始状态的ε转换
        '1': {'0': {'2'}, '1': {'1'}, '': {'start'}},  # 到新起始状态的ε转换
        '2': {'0': {'2'}, '1': {'1'}, '': {'start'}},  # 到新起始状态的ε转换
        '3': {'': {'start'}}  # 到新起始状态的ε转换
    },
    initial_state='start',  # 新起始状态
    final_states={'start', '2'}  # 接受状态包含新起始状态和1.6a的原接受状态
)

自动测试失败输出

Running command: $  timeout 15 python3 unit_tests/unit_test_prob_1_10d.py
UNEXPECTED RESULT ON THESE INPUTS: ['0', '1', '00', '01', '11', '000', '001', '010', '011', '101', ...]
Test for: unit_test_prob_1_10d.py
    This test gave you 0 more points
---------------------------------------------------------------------------------------------------------------------------
Running command: $  timeout 15 python3 unit_tests/unit_test_prob_1_10e.py
UNEXPECTED RESULT ON THESE INPUTS: ['1', '01', '10', '11', '001', '010', '011', '100', '101', '110', ...]
Test for: unit_test_prob_1_10e.py
    This test gave you 0 more points

请问我在构造过程中哪里出错了?

内容的提问来源于stack exchange,提问作者DaneShuler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:05:31