从代表性示例学习正则表达式
1. 正则表达式类的定义
我们要定义算法学习的正则表达式类 R,它包含所有循环深度为 2 的强左对齐无歧义 ∗ 表达式。实际上,每个无歧义 ∗ 表达式都等价于某个强左对齐 ∗ 表达式,并且有如下定理:
- 定理 1 :每个(循环深度为 2 的)无歧义 ∗ 表达式都等价于某个(循环深度为 2 的)强左对齐无歧义 ∗ 表达式。
基于此定理可知,语言类 {L|L = L(R),其中 R ∈ R} 是由无歧义 ∗ 表达式(循环深度至多为 2)表示的所有语言类,记为 L。
强左对齐表达式的定义可以扩展到任意循环深度的 ∗ 表达式,相应地,我们的算法也可扩展用于学习任意循环深度的无歧义强左对齐 ∗ 表达式。但要实现这种扩展,需要重新定义 LSHIFT2 过程,使其适用于任意深度的循环。不过,这样的过程会复杂得多,涉及自身和其他定义过程的多次递归调用。例如,对于深度为 3 的表达式 ab(((ab)∗cdab)∗eab)∗,应用 LSHIFT2(.,2) 到前缀 ab 后的循环,得到 ((ab(ab)∗cd)∗abe)∗ab,它与原表达式等价且保持无歧义,但并非(强)左对齐。要使其左对齐,(ab)∗ 循环需左对齐,一般情况下这可能涉及对上述定义过程的多次(递归)调用,使整个过程变得混乱,且不清楚这对算法正确性的影响。
2. 学习模型
我们定义了一个算法学习模型,旨在证明类 L 可以在多项式时间内学习。该学习模型基于 D. Angluin 引入的主动学习模型。在这个模型中,学习者向神谕(或教师)询问关于要学习的概念(语言)的问题,并得到(正确的)答案。最自然的查询类型是成员查询:学习者询
超级会员免费看
订阅专栏 解锁全文
1884

被折叠的 条评论
为什么被折叠?



