隐含表的化简
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程实现隐含表的化简
论文摘要:
理鉴于隐含表的化简步骤比较繁琐,而又有一定规律可循,我们可以用计算机编程实现隐含表的化简,可以分别从输入,处理,输出三个方面考虑。此次研究可以使用不同的语言实现,这里以c++为例,来实现隐含表的化简。
关键字:隐含表化简编程
引言:
为了合理经济地实现同步时序电路的设计,应将状态转换表中的状态减少到最少,求取最简状态转换表。如果状态转换表中的次态和输出都是确定的,没有任意值,这种状态转换表被称为完全给定状态转换表;状态转换表中的次态和输出中含有任意值时被称为不完全给定状态转换表。
正文:
对简单的状态转换表可以采用观察法简化,但对较复杂的状态转换表应当采用隐含表法进行状态简化。隐含表法是一种系统的比较方法,更适合于软件编程实现这里用c++来实现隐含表的简化。
1.输入
首先,若要计算机进行分析化简,首要的任务是将隐含表的信息存入计算机。我打算用数组存储隐含表信息。
存储用数组类型的选择:
由于隐含表的状态有三种:等价,不等价,隐含条件。最常用的是int整型存储,然而,不能将隐含条件的具体内容存进去。若用char字符类型,每次只
能存储一个字符,也不能将类似于AF的条件输入。可以考虑三维char数组,既二维字符串数组,这样存储空间够大,然而输入时结束回车必须控制好,数据提取转换也比较麻烦,但应该可以实现。本人认为还可以选择用两个数组,int 和三维char数组同时使用,只讲隐含条件存入char数组,其他等价为1,不等价为0,隐含条件为2,存入int类型数组,用到2时到char数组中提取。
但是,为减少数据转换量,降低程序复杂度,本人还是选择比较简便的一种方法,只用一个int类型数组,然后让用户转换输入模式,输入隐含条件的时候,分别用1-9代替A-I(如AF,输入16)。此种方法有一个极大的弊端,即处理状态个数只能为9,但由于时间原因,请允许我这样简化。
2.数据处理
循环次数:
存入的数据需要计算机的处理,显而易见,隐含表中最麻烦的便是隐含条件的处理。
如图所示,图中若要判断AG 中的隐含条件DGAF,则必须判断 AF 和DG ,
若要判断DG ,则必须判断AF 和BG 。由于不知道这些隐含条件的顺序,所以循环次数不能定,但是为必须保证工作顺利完成,必须考虑循环次数需要最多的情况,即有几个隐含条件就循环几次。循环次数的增多必然会造成程序效率的降低,但是暂时想不到比较好的算法。所以先这样设计。
数据处理:
由于有循环次数的保证,所以对隐含条件的判断向前追溯一次即可,即如上图,判断AG 中的隐含条件DGAF ,只判断AF 和DG 即可。首先把隐含条件分离出来,由于输入时存储为二位或者四位整数,则只需简单的求模,除法分离。然后再以分离出的隐含条件来判断此处的等价条件。
3.输出
输出就简单多了,只需讲for 循环更改后的隐含表按输入顺序输出即可。
输出的时候,等价的两个条件输出为1,不等价的输出为0。如图所示
A B C D E F G B C D E F G H BD AF DG AF AF DF AF BC AF DF BC BD BG AF DG AF BC
DF
由书上的例子可以判定,输出正确。
4.改进
此程序最大的缺点便是处理状态数太少,其他的方法在输入部分已经介绍,便是用int数组和char类型数组组合的方法,当然,为了节省存储空间,还可以使用链表的方法,这些都是比较使用的方法,可以进行改进。
然而,为保证每个隐含条件都被判断到,如此多的循环次数直接导致效率很低,可以找到其他方法。如在第一次循环的时候,遇到隐含条件则向前追溯,如AG->DG->BG,知道BG的等价条件可以判断,几下向前追溯的次数,最后比较追溯次数,讲最多的次数作为循环次数,这样可能效率更高,但是思考有点麻烦,不过应该是可以实现的。
结论:
隐含表的化简可以以编程的方法实现,利用计算机辅助进行学习,能更高效的完成一些任务。我认为可以将实验设计更多的方面可以以计算机辅助的方法实现,这样更容易理解数据具体处理的过程,也更容易学到更多的东西。