简析逻辑推演

论文 关键词:逻辑推演程序设计 数据结构

论文摘要:“逻辑推演”是指利用已知信息,通过分析和判断,得出未知信息的过程。 计算 机解决逻辑推演问题要依靠逻辑表达式。本文结合逻辑推演,剖析了程序设计在现实生活中的应用。[

一、 经典逻辑推演问题的引入

问题 1:从前,一个农夫带一只狼,一只羊和一颗白菜过河(注意该狼已被农夫驯服,但还是会吃羊 )。他要将所有东西安全的带到河的对岸。不幸的是河边只有一条小船 ,只能装下农夫和他的一样东西,并且农夫必须每次都随船过河,因为只有他能撑船。在无人看管的情况下狼要吃羊,羊要吃白菜,因此,农夫不能在河的某边岸上单独留下狼和羊,也不能单独留下羊和白菜。问农夫如何才能使三样东西平安过河。 ——农夫过河

问题 2:公安人员审问四名嫌疑犯。已知四人中仅有一名是窃贼还知道这四个人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题时:

甲说:“乙没有偷,是丁偷的。”

乙说:“我没有偷,是丙偷的。”

丙说:“甲没有偷,是乙偷的。”

丁说:“我没有偷。”

请根据这四人的答话判别谁是盗窃者。 ——窃贼说谎要解决上面两个问题需通过合理假设与逻辑推演将问题简化,通过正确的表达逻辑关系来驾驭程序设计。

二、逻辑推演在程序设计中的运用

1、委派任务问题

某任务需要在 a,b,c,d,e这五人中物色人员去完成,但派人受限于下列条件:

(1)若 a去,则 b跟去;(2)d,e两人中必有人去;(3)b,c两人中必有人去,但只去一人;(4)c,d两人要么都去,要么都不去;(5)若 e去,则 a,b都去。问这五个条件如何表示?

分析:求一个逻辑判断类问题的关键是写出正确的逻辑表达式。c语言中提供了丰富的算术和逻辑操作符,可以借助它们将问题化繁为简。将题设条件用程序语言描述清楚后计算机就可以依此穷举。

第一种方法

用 0和 1表示执行任务的状态 :1(去),0(不去),则

a==o或 a+b=:2 ’

d-4-e>1

b+c==l

c+d:=0或 c+d==2

e==0或 a+b+e=3

各表达式之间是“与”的关系。穷举每个人去或不去的各种可能,代入表达式中进行推理运算 ,使上述各表达式值均为真的情况就是正确结果。

第二种方法

用位操作。令 a,b,c,d,e都为逻辑型值 true或false。则 :

条件 1可以表示为:a—b,它等价于!attb。

条件 2可 以表示为 :diie。

条件 3可以表示为:(b&&!c) b&&c),推演为!b:c。

条件 4可以表示为:(!ciid)&&(clid!),更简单的形式是 c==d。

条件 5可以表示为:!eii(a&&b)。

如果将每个人的去与不去看成是 5位整数的其中 1位 ,其中 a对应最高位,e对应最低位 ,那么所有可能的调派方案为从全部不派的00000到全部派去的 11111之间变化。显然,共有 32种方案。全部遍历的循环为:for(inti_0;i<32;i++)。其中每个 i对应一个二进制数,为一种调派方案。在某一种调派方案 i中:

a为最高位(i&16)>>4或者 i>>4(将低位都挤掉 )

b为次高位 (i&8)>>3

c为中间位(i&4)>>2

d为次低位(i&2)>>l

e为最低位(i&1)

根据求解模式,把这五个条件表示成否定的形式:否定条件 1为(!aiib)=a&&b,否定条件 2为 !(djie),否定条件3为 b==c,否定条件4为 c!=d,否定条件 5为 e&&!fa&&b)。在将 a——e的式子代入条件表达式,即可编程求解。

2、窃贼说谎问题

来看文章开始时提到的问题 2:用 a,b,c,d分别代表四人 ,变量的值为 1代表该人是窃贼。已知:四人中仅有一名窃贼,且这四个人中的每个人要么说真话,要么说假话,而由于甲乙丙三人都说了两句话:××没偷,××偷了”,故不论该人是否说谎,他提到的两人之中必有人是小偷。故在列条件表达式时,可以不关心谁说谎 ,谁说实话。这样 ,可以列出下列条件表达式:

甲说 :“乙没有偷,是丁偷的。”b+d=i

乙说:“我没有偷,是丙偷的。”b+c=i

丙说:“甲没有偷,是乙偷的。”a+b=i

丁说:“我没有偷。” a+b+c+d=i

其中丁只说了一句话,无法判定真假,表达式反映了四个人中仅有一名是窃贼的条件。有了条件表达式,运用程序设计中的穷举法就可以轻松求解。

3、农夫过河问题(逻辑推演方法与 bfs、dfs相结合的实例)

用一个四位二进制数来分别表示白菜、羊、狼、和农夫的过河状态0表示在原始岸边,即尚未过河 ;1表示在目的岸边,已经过河。将过河对象定义为枚举 enum类型,bitset<4>类型定义为 bitvee(这里用到了c++标准函数库 stl)。枚举类型定义过河者时,是按照白菜、羊、狼、和农夫的次序分别定义的。这种次序中前三者的顺序可以随意,但农夫farmer必须在最后,目的是便于在试探随农夫过河的对象时逐序进行所有的东西都不能带过河时,最后才选择让农夫单独过河。

enum w ader

{

cabbage,//默认为 1

goat, //默认为2

wolf, //默认为 3

farmer, //默认为 4 j;

typedef bitset<4> bitvec;

过河的对象必须与农夫在河的同一侧,设计函数 withfarmer来判断。如果当前 state下,过河对象与农夫的状态参数一致,则返回真,表示二者在河的同一侧。

此外,不论农夫每次过河带的东西如何,首先都应该判断这样过河是否安全,即在无人看管的情况下,狼和羊,羊和白菜都没有在河的同侧,函数 is_sme完成判断。当农夫与羊不在河的同侧时,羊与白菜、或羊与狼在同侧都是不安全的,返回false;其他情况则是安全的,返回true。

bool issafe(const bitvec&state)

{

,/羊吃白菜

if((state[cabbage】==state[goat])&&(state[farmer]!=state[goat])) return false;

,/狼吃羊

if((state[goat】==state[~olq)&&(state[farmer]!=state[wolq)) retum false;

//其它状态为安全状态

}

为了防止发生状态的往复,即农夫将一个东西带过去又带回来的情况发生,也为了记录过河的状态过程,对所有可能的状态进行标定。四位二进制数的所有可能状态为 16,都初始化为一1,表示过河过程中尚未出现过;随着过河过程的不断进行,它被改变为其前一状态二进制数对应的整数值。

于是,农夫过河问题经过二进制化以后,化为从初始状态 0000出发,经过~系列安全状态后,如果最后状态到达,即path[15]有前驱状态,则表示过河成功。问题求解后得到一系--进制数 ,将这一系列二进制数表示的过河状态转换为实际的过河方案即可。

三、 总结

程序设计是将人的思维转化为机器语言的过程,程序抽象程度越高,与人的思维方式就越类似。逻辑推演是建立在思维之上的,是有依据的推演,将逻辑推演的思想融人程序,在一定程度上可以实现程序的智能化。随着程序设计语言的 发展 ,逻辑推演的应用一定会越来越广。

参考 文献

[1]严蔚敏著.数据结构(c语言版)北京:清华大学出版社

[2]郭福顺著.数据结构与算法基础.辽宁:大连出版社

[3]李建学,李光元,吴春芳著.数据结构课程设计案例精编:用c/c++描述.北京:清华大学出版社

[4]钱能著.c++程序设计教程.北京:清华大学出版社

[5]c++标准模板库(stl).http://

简析逻辑推演

转载请注明出处学文网 » 简析逻辑推演

学习

浅谈学习控制

阅读(13)

【摘要】本文综述了学习控制的概念,发展历程和研究方向,并对目前学习控制的几大前沿热点加以考察,最后根据学习控制目前的运用状况探讨未来的发展趋势及方向。

学习

我的二十年

阅读(31)

本文为您介绍我的二十年,内容包括二十年小说全文阅读,我去世后的二十年全文。坦率地说,如不是在《中国残疾人》杂志上看到,我还真不知1988年3月15日这天是令所有残疾人感动的日子。我现在记下了,就终生难忘了。

学习

痕迹检验学漫谈

阅读(16)

本文为您介绍痕迹检验学漫谈,内容包括痕迹检验与侦查破案,痕迹检验学知识点总结。在刑警中有这么一群特殊的人,每当他们出现在一个犯罪现场时,总是戴着手套和口罩,他们的装备也不是先进的武器,而是一个装着各种稀奇古怪玩意儿的铁箱子,他们―

学习

广场文化范文精选

阅读(38)

本文为您介绍广场文化范文精选,内容包括村级文化娱乐广场申请报告范文,有关广场舞蹈的文章。广场文化篇1随着现代化都市广场的建立,以及乡村文化集散地式“文化广场”的形成,作为群众文化重要组成部分的广场文化也在近年应运而生,成为引导

学习

陈汉典:综艺“B咖”也有春天文

阅读(62)

本文为您介绍陈汉典:综艺“B咖”也有春天文,内容包括陈汉典爱奇艺综艺,陈汉典爱剪辑完整版。他可以是不用正眼看人的纨绔子弟陈致中,也可以是歪着嘴角发表道歉声明的陈冠希;可以是《赤壁》里那匹难产的马,也可以是用卫生纸做绷带裹满全身的

学习

经典普洱茶书

阅读(37)

本文为您介绍经典普洱茶书,内容包括普洱茶书,普洱茶鉴赏书推荐知乎。普洱茶文化热起来,是许多人、许多媒体一起努力的结果。如今,虽然网络、影视等各种立体媒体在信息传播中的势头,似乎远远压过了书籍、刊物、报纸等平面媒体,但在普洱茶文化

学习

安全生产持续稳定意见

阅读(16)

本文为您介绍安全生产持续稳定意见,内容包括安全生产持续稳定,安全生产的创新意见。一、全面落实安全生产责任

学习

音乐的精神特质

阅读(29)

本文为您介绍音乐的精神特质,内容包括音乐艺术特质,音乐作品的精神内涵。Whatisthespiritualaspectofmusic?

学习

灵魂的歌声

阅读(52)

本文为您介绍灵魂的歌声,内容包括灵魂的歌声,深入灵魂的歌声。那一日,朋友约我去听歌。我本不想去,拗不过她的盛情,还是去了。

学习

夜猫女美肌练成

阅读(16)

都市生活的女人们似乎很难保有健康的生物钟,于是都轻易的错过了肌肤修复的黄金时段,以至于白天肤色暗哑、皮肤干燥缺水,甚至不上妆。本期《凤凰生活》为无法自拔的夜猫们准备了熬夜美肌攻略,当然还是要提醒下,早点爬上床仍然是最低耗有效的护

学习

原来的味道

阅读(19)

本文为您介绍原来的味道,内容包括原来的味道文案,原有的味道完整版。早先在家掌炊也总是以擅用调料为荣的,醇厚、入味、鲜美,家里老人总吃得津津有味。后来家庭人口结构简单了,就给自己懒惰的理由,烧菜以水煮清炖为主,减少热油爆炒,一天

学习

论机会平等

阅读(14)

本文为您介绍论机会平等,内容包括机会平等的诗句,受教育机会平等。公平竞争关乎每个个体