已阅读

编程处置算法问题,穷举思想轻松学

作者:无极4平台      来源:无极4平台      发布时间:2019-07-04
 
无极4彩官网 编程处置算法问题
 
 
 
我们在数橙科学中python的极客战记很多关卡在向孩子教学代码的同时,也是在潜移默化地锻炼孩子的编程思想。在最开端的地牢地图中,孩子需求运用“While-True”循环语句,穿过一个又一个构造反复的迷宫(图1)。
 
1.发现并拆解反复局部
 
2.处理反复问题
 
3.循环运转问题的处理办法
 
这样,就能只用一段代码,高效地处理反复问题了。可见,在编程中,无极4官网学习代码的编写只是根本,更重要的还是控制运用代码的编程思想。
 
一、农民过河问题
 
在编程的数道经典算法问题中,有一个“农夫过河”问题:一个农夫带着一只狼,一只羊和一些菜过河。河边只要一条船,由于船太小,只能装下农夫和他的一样东西,在无人看守的状况下,狼要吃羊,羊要吃菜,请问农夫如何才干使三样东西安全过河。
 
为了用代码处理这个问题,程序员需求应用“穷举搜索思想”,尝试一切的过河计划,直到找出正确的过河计划。
 
关卡引见:
 
你需求运用狮鹫,把兵士、食人魔、农民,带去河的对岸,狮鹫每次只能带一个人分开,而食人魔会伤害农民,兵士会攻击食人魔,因而不要让兵士和食人魔单独留在一同,也不要让食人魔和农民单独留在一同。
 
这一关是和“农夫过河”同类型的问题,就像一个脑筋急转弯,不用代码,用我们的聪慧,动动脑筋,应该很快就能想出解法。
 
但你能想出一种解法,假如你想找出一切的解法,是不是就有一定的难度了呢?如何更快更全地找出一切的过河办法呢?
 
在本关,我们能够学习一下如何运用“穷举思想”处理编程问题。
 
 
三、穷举是什么?
 
穷举是什么呢?它有着一个高大上的名字,但它的实质却非常的简单质朴。
 
穷举法的根本思想:依据标题的局部条件肯定答案的大致范围,并在此范围内对一切可能的状况逐一考证,直到全部状况考证终了。
 
简单来说就是:把一切的答案都试一遍,找出正确的答案。
 
十分的简单粗暴。因而,它也是编程常用中效率较低的一种算法。运用穷举法,加入无极4通常需求三步:解析标题——优化运算过程——开端穷举。我们来试试应用穷举法处理关卡“兵士,食人魔和农民”吧!
 
四、解析标题
 
穷举法的第一步就是剖析标题,把本来的文字标题,转化成更易于剖析,简约有逻辑的标题类型。
 
① 标题的对象
 
标题看似只是三个人的过河问题,但实践上在标题里有四个人物:狮鹫、兵士、食人魔、农民。狮鹫担任协助大家过河。
 
② 标题的条件
 
(1)兵士和食人魔不能单独留在一同;
 
(2)食人魔和农民也不能单独留在一同。
 
也就是说,当狮鹫、兵士、食人魔呆在一同的时分,也不会发作问题,由于兵士和食人魔马上就要被狮鹫运走,来不及打架。
 
③ 标题的状态
 
我们需求运用狮鹫来协助他们从右边飞到左边,因而标题具有以下几种可能发作的状况:
 
1.左边有兵士、食人魔、农民、狮鹫,右边什么都没有。
 
2.左边有食人魔、农民、狮鹫,右边有兵士。
 
3.左边有农民、狮鹫,右边有兵士、食人魔。
 
……等等多种状况
 
④ 文雅地表示标题
 
能够看到,用文字标识标题可能发作的状况,非常地复杂。因而,在编程中,我们常常会用一些特定的符号来简约地表达标题可能发作的状况。
 
看看标题,人物只会有两种状态,在右边(还没过河),在左边(过河了),因而我们能够直接用0、1来表示人物的位置。
 
0表示还没过河;1表示曾经过河。
 
那么就能够这样表示:(狮鹫、兵士、食人魔、农民)
 
1. (11,11)表示一切人物都已过河,到了左边。
 
2. (10,11)表示食人魔和农民过了河,兵士还没有。
 
3.……等等
 
用这种简约的方式,把标题的一切状况表示出来就是:共16种状态(图3)。
 
 
依据标题的条件,我们可知,无极4平台有以下几种状况是不可取的:农民和食人魔单独在一同:(00,11)、(11,00);兵士和食人魔单独在一同:(01,10)、(10,01);还有两种隐含的不可取条件:
 
只要狮鹫本人在一边:(10,00),这表示,一切人都没过河,只要狮鹫过河了,而狮鹫原本就是协助大家过河的,不可能本人单独呆在河的一边。所以这种状况是不会发作的。
 
那么同理还有:(01,11)这种状况,一切人都过了河,狮鹫没有过河,这也不会发作。
 
那么本题的问题就变成了:如何在契合条件的状况下,把(00,00)转化成(11,11)。