希赛考试网
首页 > 软考 > 软件设计师

构造正规式的dfa:1(1010*|1(010)*1)*0

希赛网 2024-01-11 15:15:13

正则表达式(regular expression)是用于描述字符串的形式语言,它能够精确地匹配字符串中的某些模式,尤其在文本处理、数据挖掘和自然语言处理等方面,正则表达式是十分重要的一种工具。而正则表达式的求解,需要建立特定的自动机或有限状态机(finite state machine),尤其需要构造正则表达式的有限状态自动机(finite state automaton,FSA),即 DFA(deterministic finite automaton)。

本文将以正则表达式“1(1010*|1(010)*1)*0”为样例,分析如何构造该正则表达式的DFA。

从正则表达式到NFA

首先,根据正则表达式“1(1010*|1(010)*1)*0”,可知该表达式描述了一个包含“1”和“0”两种字符的字符串的模式,其中,“1”和“0”均不可少。同时,正则表达式中包含了“*”和“|”等特定的符号,需要将其转换为对应的操作。因此,我们可以采用正则表达式到NFA的转换过程来获得该正则表达式的DFA。

首先,使用Thompson算法(Thompson's construction algorithm)将正则表达式转换为NFA,其中每个状态节点都对应一个状态,包括起始状态S和终止状态F。具体过程如下:

1. 为每个字符构建一个基本块(basic block),即单个字符对应的自动机,表示该字符可以直接转换到下一个状态。

2. 对于正则表达式中的“|”操作符,构建两个基本块,并分别代表或运算的两个部分。

3. 对于正则表达式中的“*”操作符,构建两个基本块,并分别代表闭包内部的运算和循环操作。

4. 将不同的基本块连接到一起,形成一个完整的自动机。

最终得到的NFA如下图所示:

![image.png](https://cdn.nlark.com/yuque/0/2021/png/15590808/1627823645467-c1d83bca-a6bf-4806-bb60-9f872161471a.png#align=left&display=inline&height=327&margin=%5Bobject%20Object%5D&name=image.png&originHeight=327&originWidth=630&size=14947&status=done&style=none&width=630)

从NFA到DFA

虽然NFA描述了正则表达式的模式,但是对于最终的匹配结果,还需要将NFA转换为DFA,以便快速地进行匹配查找。通过子集构造算法(subset construction algorithm),可以将任意的NFA转换为等价的DFA。DFA(Deterministic Finite Automaton)是一种更为精简的自动机,每个状态只有一个转换关系,具有确定性。

子集构造过程如下:

1. 将NFA的起始状态集合作为DFA的起始状态。

2. 对于NFA中的每个状态S和每个输入符号a,求出从状态S出发、通过输入符号a所能到达的状态集合T。

3. 将T作为DFA中的一个新状态,并与上一步所求出的状态形成转换关系,即DFA中的一个转移。

4. 重复上述步骤,直到所有状态都能够被遍历到。

最终得到的DFA如下图所示:

![image.png](https://cdn.nlark.com/yuque/0/2021/png/15590808/1627823867100-c3b2991b-c707-4144-b0b8-30b15d6b06c7.png#align=left&display=inline&height=390&margin=%5Bobject%20Object%5D&name=image.png&originHeight=390&originWidth=736&size=19517&status=done&style=none&width=736)

DFA的应用

得到了正则表达式的DFA之后,就可以使用该自动机进行字符串的匹配了。具体流程如下:

1. 从DFA的起始状态开始,依次读入输入字符串中的字符。

2. 每次输入一个字符后,将当前状态转换为下一个状态。

3. 如果在任何时刻,自动机到达了终止状态,则表示输入的字符串匹配成功。

通过该方式,可以快速准确地匹配各种符合正则表达式规则的输入串。因此,正则表达式的DFA在文本处理、数据挖掘、自然语言处理等领域具有广泛的应用。

扫码领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件