编程解决算法问题,穷举思想轻松学

来源 :电脑报 | 被引量 : 0次 | 上传用户:huangyl1988
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  我们在数橙科学中Python的极客战记很多关卡在向孩子教学代码的同时,也是在潜移默化地训练孩子的编程思维。
  在学习「While-True」循环语句的同时,训练使用「循环思维」解决重复问题的能力:
  1.发现并拆解重复部分
  2.解决重复问题
  3.循环运行问题的解决方法
  这样,就能只用一段代码,高效地解决重复问题了。可见,在编程中,学习代码的编写只是基本,更重要的还是掌握运用代码的编程思维。
  一、农民过河问题
  在编程的数道经典算法问题中,有一个「农夫过河」问题:一个农夫带着一只狼、一只羊和一些菜过河。河边只有一条船,由于船太小,只能装下农夫和他的一样东西,在无人看管的情况下,狼要吃羊,羊要吃菜,请问农夫如何才能使三样东西平安过河。
  为了用代码解决这个问题,程序员需要利用「穷举搜索思想」,尝试所有的过河方案,直到找出正确的过河方案。
  二、士兵、食人魔和农民
  关卡地址:https://codecombat.163.com/play/level/soldier-ogre-
  and-peasant?
  关卡介绍:
  你需要使用狮鹫,把士兵、食人魔、农民,带去河的对岸,狮鹫每次只能带一个人离开,而食人魔会伤害农民,士兵会攻击食人魔,因此不要让士兵和食人魔单独留在一起,也不要让食人魔和农民单独留在一起。
  在本关,我们可以学习一下如何使用「穷举思想」解决编程问题。
  三、穷举是什么?
  穷举是什么呢?它有着一个高大上的名字,但它的本质却十分的简单朴实。
  穷举法的基本思想:根据题目的部分条件確定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。
  简单来说就是:把所有的答案都试一遍,找出正确的答案。
  非常的简单粗暴。因此,它也是编程中效率较低的一种算法。使用穷举法,通常需要三步:解析题目——优化运算过程——开始穷举。我们来试试利用穷举法解决关卡「士兵、食人魔和农民」吧!
  四、解析题目
  穷举法的第一步就是分析题目,把原本的文字题目,转化成更易于分析,简洁有逻辑的题目类型。
  (一)题目的对象
  题目看似只是三个人的过河问题,但实际上在题目里有四个人物:狮鹫、士兵、食人魔、农民。狮鹫负责帮助大家过河。
  (二)题目的条件
  (1)士兵和食人魔不能单独留在一起;
  (2)食人魔和农民也不能单独留在一起。
  也就是说,当狮鹫、士兵、食人魔待在一起的时候,也不会发生问题,因为士兵和食人魔马上就要被狮鹫运走,来不及打架。
  (三) 题目的状态
  我们需要使用狮鹫来帮助他们从右边飞到左边,因此题目具有以下几种可能发生的情况:
  1.左边有士兵、食人魔、农民、狮鹫,右边什么都没有。
  2.左边有食人魔、农民、狮鹫,右边有士兵。
  3.左边有农民、狮鹫,右边有士兵、食人魔。
  ……等等多种情况
  (四) 优雅地表示题目
  可以看到,用文字表示题目可能发生的情况,十分复杂。因此,在编程中,我们常常会用一些特定的符号来简洁地表达题目可能发生的情况。
  看看题目,人物只会有两种状态,在右边(还没过河),在左边(过河了),因此我们可以直接用0、1来表示人物的位置。
  0表示还没过河;1表示已经过河。
  那么就可以这样表示:(狮鹫、士兵、食人魔、农民)
  1. (1,1,1,1)表示所有人物都已过河,到了左边。
  2. (1,0,1,1)表示食人魔和农民过了河,士兵还没有。
  3.……等等
  用这种简洁的方式,把题目的所有情况表示出来就是:共16种状态(如图)。
  根据题目的条件,我们可知,有以下几种情况是不可取的:农民和食人魔单独在一起:(0,0,1,1)、(1,1,0,0);士兵和食人魔单独在一起:(0,1,1,0)、(1,0,0,1);还有两种隐含的不可取条件:
  只有狮鹫自己在一边:(1,0,0,0),这表示,所有人都没过河,只有狮鹫过河了,而狮鹫本来就是帮助大家过河的,不可能自己单独待在河的一边。所以这种情况是不会发生的。
  那么同理还有:(0,1,1,1)这种情况,所有人都过了河,狮鹫没有过河,这也不会发生。
  那么本题的问题就变成了:如何在符合条件的情况下,把(0,0,0,0)转化成(1,1,1,1)。
其他文献
这两天,高考成绩查询陆续开放,具体查分时间和入口可访问中国教育网(https://www.eol.cn/e_html/gk/chafen/index.shtml)。随后考生们就会面临一个世纪难题:志愿怎么填?  也许这个问题,好几万字都说不完,每个学校、每个考生都有各自的不同,这其中还得靠经验来判断。而这些当然是过来人最清楚,而且还必须是近几年刚好经历过这一流程的人。  刚好有一位来自上海交大英语
期刊
学校和单位经常要打印奖状、荣誉证书等文件,而且动辄就是几十份甚至数百份,这些文件的主题大致相同,但需要在姓名、称号等部分作出改变,常规的做法就是生成一个模板,难后逐一修改名称、称号,可这样做不仅工作量大,而且还容易发生错误,其实这种批量文件打印完全可以简单完成。  首先打开Excel电子表格并建立文件,电子表格中主要包含这些批量文件中的不同部分,如在学校的奖状打印中,可以建立班级、获奖人、获奖项目
期刊
去年OPPO首次推出的K系列成为市场上的一匹黑马,几乎没什么营销投入的情况下,却在市场上表现抢眼。此次OPPO K2首次开售2小时内,便登顶天猫平台全价位销量冠军,京东平台1000~2000元价位销量冠军。  作为K系列的第二款机型,今年OPPO在K3上明显加大了力度,各种预热和发布会造势,官方“硬核少年”的定位,意图已经很明显了:针对年轻市场推出的高性价比机型。  专为年轻人打造  所谓“拿得起
期刊
全球NAND闪存市场大环境下NAND价格依然在下滑,三星、东芝、西数、美光等公司的营收及盈利因此大受影响,而东芝位于日本四日市的NAND工厂日前出现了断电事故,此事有可能对全球NAND闪存价格产生重要影响。也就是说,全球闪存市场很可能因此变天,想要购买的朋友对于闪存的相关信息必须关注起来了。  到底谁在影响闪存价格?  在购买之前,还得了解一下目前闪存市场价格变化的根源。半导体制造工厂有其特殊性,
期刊
在日常文件编辑中,白领经常会有这样的要求:将一篇文章分成几个文件,或是将几个文件中的内容合并在一起,形成一篇文章。为达到这个目的,最简单的办法自然是新建文档,然后复制粘贴,可如果要分离或合并的文件过大,那这样操作就是個大工程,能否有其他方法来简单实现呢?  文件拆分  启动Word,打开“视图”菜单,在“视图”菜单中,选择“大纲”,进入大纲模式,随后点击需要分页的首行前的小圆点,这一行就会被选中。
期刊
天气变热后,蚊虫就开始肆虐了,前段时间师姐一直在研究怎么对付蚊子,今天师姐终于有机会来怒杀蟑螂了!如果你家也是一个蟑螂窝,那今天师姐安利的这款神药你一定要Get。  除蟑螂界的扛把子来啦  蟑螂叫小强的原因大家都知道,怎么打都打不死,据说打死一只还会留下许多蟑螂卵。所以用拖鞋踩蟑螂的小可爱们记得踩完拖地板和水冲鞋子(真skr鬼故事...),如果想彻底消灭蟑螂的尸体,只能用火烧,但这只能见到一只消灭
期刊
144Hz电竞屏这个概念对于很多朋友来说都不陌生,毕竟现在随处可见的电竞显示器广告上都会提到。不过,对于大多数玩家来说,只是听说高刷新率显示器用起来爽,但是自己没有体验过,于是就认为那只是商家的吹嘘而已。而对于发烧级玩家来讲,144Hz的游戏体验真的是用过就回不去,再要他们去适应60Hz的普通显示器简直就是折磨。那么,到底这样的游戏电脑好在哪里呢?趁着最近硬件价格走势喜人,想组装144Hz游戏电脑
期刊
江西抚州,孕育出王安石、汤显祖、曾巩等名人,美其名曰:江右古郡;  辽宁锦州,充满生活气息的海边小城,风月无边,又享有“海上锦州”的美誉。  一个历史名城,一个海岸重镇,如今却在这相距1800多公里的两地,同时上演着与其文化氛围极不相称的相同的命运浮沉挣扎故事……  王勇,土生土长的抚州人,靠一身厨艺养家,见人就笑,用浓浓的江西口音对人说:“做生意最重要的就是和气生财。”他的商铺,本在美团上订单销
期刊
现代人因工作和生活等原因,十个有九個有肩周血液循环不畅,肌肉酸痛几乎成了大家的标配。比如师妹,偶尔锻炼一下身体,第二天起来那滋味叫一个酸爽。听说德国匠心老牌Almisan艾美森有款去痛香膏,常年颈椎不适的师妹也跟风入手试了试,简直太管用了!  德国56年匠心品牌  德国艾森(ASAM)公司成立于1963年,是德国知名草本药妆制造商,距今已有56年历史,说是德国家喻户晓的品牌也不为过。而Almisa
期刊
近期重新看了一下C++,一是感觉清晰了许多,二是觉得若是换个角度看的话,会有不一样的体会,并且也容易记住C++中的一些特性。本文就试图将集合论中的相关知识引入到C++的封装、继承、多态上,让我们对它有个新的认识。  一、封装  C语言中,代码之间的关系都是函数式的调用。这里面牵扯到对数据的操作,若操作的都是局部变量,那一切都太平了。但若是几个函数操作同一个非局部变量,考虑到模块化,那么就要将变量和
期刊