FA小讲

今天得知了Riche的死讯,真的感到很震惊。又一个传奇落幕了。心有戚戚焉,我忽然觉得确实是生死无常。但是Riche已经为世界留下了Unix和C,可以这样说,只要这个世界还有一台计算机还运行着Unix,还有一个由C语言编译来的程序还在运行,Riche就永远是活生生的,他将会由他的造物彰显他的永生。

那么让我们反问一句,百年之后,有什么东西可以诉说我们曾经在这个世界存在过呢?我有个观点,正是因为一种追求永恒探索永恒的决心才使得西方在科学上追上了古代中国,最终使得西方文明成为20世纪的主流。如果没有这种对永恒的追求,那么人生百年如浮息一瞬,有何意义呢?


一、从正则表达式讲起

其实在计算机的历史上,虽然有很多的东西,但是真正伟大的不多。而正则表达式正是其中之一,有个偏激的说法,就是说从某个时期开始算起,计算机科学就只有两样东西是伟大的:Lisp和正则表达式。(很抱歉忘记这个说法的出处了,如果大家觉得它荒谬就当它玩笑吧~不过,随着连C++都开始有Lamda表达式了,Lisp的牛B可见一斑了)但无论如何正则表达式真的很伟大,如果你是一个Linux系统管理员,或者其他要在海量数据里面找出某些匹配的项目,那么相信我,不学正则你活不下去,学习正则的过程你会痛苦得想自杀但是没有正则你就已经死了。而正则表达式强大的原因,至少很大一部分,是因为它强大的数学模型(这句话有点语病)。


二、DFA的形式定义

正则表达式(大家先记住正则二字)背后的数学模型就是FA,有穷自动机(finite automaton)。

但我想大家都难以想象,正则表达式的背后居然是非常简单的数学模型,简单到什么程度呢?它的定义只有六行:

DFA是一个五元组(Q,Z,f,q0,F);

(1)Q:一个有穷集合,状态集,里面包含了DFA所有的状态;

(2)Z:一个有穷集合,字母集,DFA的所有输入都必须在Z里面;

(3)f:转移函数,它是一个单射,确定了在每个状态下DFA读入一个字母的时候转移到哪一个状态,它可以用一个矩阵来表示;

(4)q0:起始状态,它属于Q;

(5)F:接受状态集,Q的一个子集,当DFA读入一串字符Str之后,DFA所处的状态属于F,那么就说DFA接受Str。

例子:双极性码、




阅读更多
个人分类: DFA
上一篇一道整数排列题目的解决
下一篇Fedora手记(5)——Fedora15启动慢问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭