计算机领域经典问题

(1)汉诺塔问题:传说越南河内某间寺院有三根银棒,第一根银棒上串64个金盘。寺院里的僧侣依照一个古老的预言,以每次只能移动一个圆盘、大盘不能叠在小盘上面的规则移动这些盘子;预言说当这些盘子移动完毕,世界就会灭亡。僧侣们需要264-1步才能完成这个任务;若他们每秒可完成一个盘子的移动,就需要5849亿年才能完成。整个宇宙现在也不过137亿年。汉诺塔问题是用递归方法求解的一个典型问题。

(2)农夫过河问题:一位农夫带着一只狼、一只羊和一筐菜,欲从河的西岸坐船到东岸,由于船太小,农夫每次只能带一样东西过河,并且没有农夫看管的话,狼会吃掉羊,羊会吃菜。设计一个方案,使农夫可以无损失的过河。

(3)八皇后问题:皇后(Queen)是国际象棋中实力最强的棋子,它可以横直斜走,且步数不限,皇后往往是棋局中制胜的决定性力量。八皇后问题则是在8*8的国际象棋上摆放八个皇后,使任意两个皇后不能处于同一行、同一列或同一斜线上,问有多少种摆法。八皇后问题是用回溯算法求解的典型案例。

(4)约瑟夫环问题:约瑟夫是犹太军队的将军,在反抗罗马的起义中,他率领的军队被击退,只剩下40余人。 罗马将军派人来劝降,约瑟夫主张投降,但他的部下都是不屈不挠的人,宁愿死也不愿意被罗马军队抓住。于是约瑟夫建议:所有人围成一个大圆圈,由第一个人开始报数,每报到第3个人该人就要自杀,然后由下一个人重新报数。约瑟夫有计划地选择了一个位置存活到了最后,并说服了另一个没死的人向罗马投降。

(5)哲学家共餐问题:有五位哲学家围坐在一张圆形餐桌旁,每人面前有一碗面,每两人之间有一只筷子,他们各自只做两件事:吃饭或思考。哲学家思考的时候就会停止吃饭,吃饭的时候就会停止思考。哲学家先拿起左手的筷子,永远在等待右手的筷子而不得(反之亦然),就产生了死锁。假设规定当哲学家等待另一只筷子超过五分钟后就放下自己手里的那一只筷子,且再等五分钟后进行下一次尝试,这个策略虽然消除了死锁(系统总会进入到下一个状态),但仍有可能发生活锁(活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试—失败—尝试—失败的过程),即如果哲学家们同时拿起左手筷子,五分钟后再同时放开筷子,进行下一次尝试,最后永远没人吃得上饭。在实际的计算机问题中,筷子可以类比成计算机的共享资源,这个问题可以用来解释死锁和资源耗尽。

(6)迷宫问题

(7)背包问题

(8)旅行商问题

(9)中国邮递员问题

(10)马踏棋盘问题

(11)图着色问题

(12)哥尼斯堡七桥问题

(13)哈密顿回路问题

(14)图灵停机问题

(15)幻方问题

(16)重叠子问题

(17)Tromino谜题:Tromino是指一个由棋盘上的三个1*1方块组成的L型骨牌。如何用Tromino覆盖一个缺少了一个方块(可以在棋盘上的任意位置)的2nx2n棋盘(n为正整数),且不能有重叠。这是一道很经典的用分治法解决的题目。

解决方法:将2nx2n的棋盘划分成四个象限,此时每个象限的大小为2(n-1)x2(n-1)。将Tromino骨牌放置在中央,其缺口朝向缺失方块的象限。然后在划分出的象限内重复前面的操作。

 

posted @ 2022-04-29 11:11  HanselHuang  阅读(1827)  评论(0编辑  收藏  举报