目录(点击切换)
本文节选自《计算之魂》电子版:
例题2.4八皇后问题/第2章//逆向思考一一从递推到递归//食食导:这个问题是19世纪的一位国际象棋棋手马克斯。贝瑟东(MaxBethel)提出的,讲的是在8x8格的国际象柑上摆放8个皇后,使其不会互相攻击,问有多少种摆法?9怎么摆?我们知道在国际象棋中,皇后可以吃掉同一行、同一列和同一斜线上的棋子。因此任意两个皇后都不能处了F同一行、同一列或同一斜线上。如果按照常人的思维方式,这道题应该这样解。先在第1行摆好一个棋子,它当然不会和任何棋子有)中突,然后在第2行摆一个棋子,保证它和第1个棋子没有冲突,接着摆第3行的,以此类推。图2.3所示是一种可能的摆法。图2.3一种符合象棋规则的八皇后摆放方法哪怕找个相上,这个问题比想象的复杂,似了这个问题看似并不难,因为8个皇盘摆一摆,也应该能够穷尽所有的摆法,找到所有可能的答案。但实际没有人能找到所有符合要求的摆法,大数学家高后的摆法只有4姜多种组合(即8!=40320),斯穷其一生只找到了76种方案,而全部的方案是92种。当时很多的国际象棋选手也在解这道题,但只找到20多种,远不如高斯!这可主要的原因是人类固有的递
计算之魂笔记
推思维方式,也就是从前到后、从小到大,并不适合解决这道题。今天,即使用了计算机这个辅助性工具,如果保留人们日常正向思维的做法,也很难写出这个逻辑并不复杂的问题的算法。但是如果采用递归的思路来解决这个问题,答案就非常观了。071//计算之导//八皇后问题的递归算法原理是这样的。假定棋盘上前7行已经摆好了7个皇后,它们彼此的位置不冲突。但是这7个皇后摆的位置对不对我们其实不知道,它也许是一个死胡同。那么在第8行从第1个位置到第8个位置一个一个地试验即可。如果在某一个位置,能够保证第8个皇后和前面的不冲突,那么就说明前面7个皇后的摆放位置可行,我们也就找到了相应的一种方案,这时输出结果即可。如果第8个皇后怎么也找不到合适的位置,就说明前7个皇后的位置摆错了,那么我们要重新调整第7个皇后的位置,然后再用第8个皇后来看看前7个皇后摆放得是否合适。当然你可能会问,如果第7个皇后怎么摆都无法为第8个皇后找到一个合适的位置怎么办?那就说明第6个皇后摆错了,我们需要尝试第6个皇后的新摆法。这样,这个算法不断往前回湖,回溯到棋盘上只有!个皇后时,找到第1个皇后的合适摆法。本章
计算之魂哪个app可以看
末尾附有这个算法的伪代码(附录二)。当然,在上述过程中,大部分的摆放方案不需要摆到第8个皇后时才知道此路不通,比如摆完了4个,就发现第5$个怎么摆放都不行,这时程序会让第4个皇后直接跳到下一个位置继续试验。只有极少数的方案能够一直走到底,即为第8个皇后找到一个合适的位置,这样的方案有92种,大约占了所有方案的0.2%,用今天的手机找出这92种方案,计算时间不会超过!秒。从这个例子可以看出,人类因为自身认识世界是由近及远、由小到大的,所以要走到第8层楼,先要知道如何走前7层楼,这样组合了8层的逻辑是非常复杂的,很难想清楚。但是计算机是为直接处理大规模计算设计的,它的计算能力很强,几万种情况对于它来讲一皮眼的功夫就能完成。但是,计算机本身不具有推理能力,因此需要人赋予它,这就要求程序的结构本身简单。递归算法的好处在于,它不需要总结所谓的普遍规律,只需要搞清楚如何拆解问题即可。递归算法对应的代码通常在逻辑上都非常简洁,因为我们只要定义最顶层的逻辑,而下面一层层的逻辑不过是自动复制顶层逻辑而已。这样的代码在具体实现时,会不断地自我调用,这种思想在我们人类072
计算之魂免费阅读
| 计算之魂内容概括 | 计算机之魂 |
| 计算之魂txt下载 | 计算之魂讲了什么 |
| 计算之魂和数学之美 | 吴军 计算机之魂 |
综上:计算之魂mobi值得推荐阅读

评论已关闭!