计算机领域典型问题.ppt
《计算机领域典型问题.ppt》由会员分享,可在线阅读,更多相关《计算机领域典型问题.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、补充知识 计算机领域典型问题 在在人人类类社社会会的的发发展展过过程程中中,人人们们提提出出过过许许多多具具有有深深远远意意义义的的科科学学问问题题,其其中中对对计计算算机机学学科科一一些些分分支支领领域域的的形形成成和和发发展展起起了了重重要要的的作作用用。另另外外,在在计计算算机机学学科科的的发发展展过过程程中中,为为了了便便于于对对计计算算机机科科学学中中有有关关问问题题和和概概念念的的本本质质的的理理解解,人人们们还还给给出出了了不不少少反反映映该该学学科科某某一一方方面面本本质质特特征征的的典典型型实实例,在这里一并归于计算机学科的典型问题。例,在这里一并归于计算机学科的典型问题。计
2、计算算机机学学科科典典型型问问题题的的提提出出及及研研究究,不不仅仅有有助助于于我我们们深深刻刻地地理理解解计计算算机机学学科科,而而且且还还对对学学科科的的发发展展有有着着十十分分重重要要的推动作用。的推动作用。n下面分别对图论中有代表性的哥尼斯堡下面分别对图论中有代表性的哥尼斯堡七桥问题,算法与算法复杂性领域中有七桥问题,算法与算法复杂性领域中有代表性的汉诺(代表性的汉诺(Hanoi Hanoi)塔问题,算法)塔问题,算法复杂性中的难解性问题,证比求易算法,复杂性中的难解性问题,证比求易算法,旅行商问题与组合爆炸问题,哲学家共旅行商问题与组合爆炸问题,哲学家共餐问题餐问题,图灵测试问题,博
3、弈问题等问题图灵测试问题,博弈问题等问题及其相关内容进行分析。及其相关内容进行分析。补充知识补充知识 计算机领域典型问题计算机领域典型问题n1歌尼斯堡七桥问题与哈密尔顿回路问题歌尼斯堡七桥问题与哈密尔顿回路问题n2汉诺塔问题汉诺塔问题n3算法复杂性中的难解性问题算法复杂性中的难解性问题n4哲学家共餐问题哲学家共餐问题n5旅行商问题旅行商问题n6图灵测试问题图灵测试问题n7搏弈问题搏弈问题1 歌尼斯堡七桥问题与哈密尔顿回路问题n 1818世世纪纪中中叶叶,当当时时东东普普鲁鲁士士有有一一座座哥哥尼尼斯斯堡堡(KonigsbergKonigsberg)城城,城城中中有有一一条条贯贯穿穿全全市市的的
4、普普雷雷格格尔尔(PregolPregol)河河,河河中中央央有有座座小小岛岛,叫叫奈奈佛佛夫夫(KneiphofKneiphof)岛岛,普普雷雷格格尔尔河河的的两两条条支支流流环环绕绕其其旁旁,并并将将整整个个城城市市分分成成北北区区、东区、南区和岛区东区、南区和岛区4 4个区域,全城共有个区域,全城共有7 7座桥将座桥将4 4个城区相连起来。个城区相连起来。北区北区东区东区岛区岛区 南区南区图图1 1 哥尼斯堡七桥地理位置示意图哥尼斯堡七桥地理位置示意图n当当时时该该城城市市的的人人们们热热衷衷一一个个难难题题:一一个个人人怎怎样样不不重重复复地地走走完完七七桥桥,最最后后回回到到出出发发
5、地地点点?即即寻寻找找走走遍遍这这7 7座座桥桥,且且只只许许走走过过每每座座桥桥一一次次,最最后后又又回回到到原原出出发发点点的的路路径径。试试验验者者都都没没有有解解决决这这个个难难题题。17361736年年,瑞瑞士士数数学学家家列列昂昂纳纳德德欧欧拉拉(L.EulerL.Euler)发发表表图图论论的的首首篇篇论论文文,论论证证了了该该问问题题无无解解,即即从从一一点点出出发发不不重重复复地地走走遍遍七七桥桥,最最后后又又回回到到原原来来出出发发点点是是不不可可能能的的。他他论论证证所所用用的的图图为为图图2 2所所示示。后后人人为为了了纪纪念念数数学学家家欧欧拉拉,将将这这个个难难题题
6、称称为为“哥哥尼尼斯斯堡堡七七桥问题桥问题”。图图2 2 哥哥尼尼斯斯堡堡七七桥桥问问题题示意图示意图CBDAn为了解决哥尼斯堡七桥问题,欧拉用为了解决哥尼斯堡七桥问题,欧拉用4 4个字母个字母A A、B B、C C、D D代表代表4 4个城个城区,并用区,并用7 7条线表示条线表示7 7座桥,如图座桥,如图2 2所示。在图中,只有所示。在图中,只有4 4个点和个点和7 7条线,条线,这样做是基于该问题本质的考虑,抽象出问题最本质的东西,忽视这样做是基于该问题本质的考虑,抽象出问题最本质的东西,忽视问题非本质的东西(如桥的长度等),从而将哥尼斯堡七桥问题抽问题非本质的东西(如桥的长度等),从而
7、将哥尼斯堡七桥问题抽象成为一个数学问题,即经过图中每边一次且仅一次的回路问题了。象成为一个数学问题,即经过图中每边一次且仅一次的回路问题了。欧拉在论文中论证了这样的回路是不存在的,后来,人们把有这样欧拉在论文中论证了这样的回路是不存在的,后来,人们把有这样回路的图称为欧拉图。回路的图称为欧拉图。n将其有经过所有边的简单生成回路的图称为欧拉图将其有经过所有边的简单生成回路的图称为欧拉图n欧拉不仅给出了哥尼斯堡七桥问题的证明,还将问题进行了一般化欧拉不仅给出了哥尼斯堡七桥问题的证明,还将问题进行了一般化处理,即对给定的任意一个河道图与任意多座桥,判定可能不可处理,即对给定的任意一个河道图与任意多座
8、桥,判定可能不可能每座桥恰好走过一次,并用数学方法给出了能每座桥恰好走过一次,并用数学方法给出了3 3条判定规则:条判定规则:(1 1)如果通奇数座桥的地方不止两个,满足要求的路线是找不到)如果通奇数座桥的地方不止两个,满足要求的路线是找不到的;的;(2 2)如果只有两个地方通奇数座桥,可以从这两个地方之一出发,)如果只有两个地方通奇数座桥,可以从这两个地方之一出发,找到所要求的路线;找到所要求的路线;(3 3)如果没有一个地方是通奇数座桥的,则无论从哪里出发,所)如果没有一个地方是通奇数座桥的,则无论从哪里出发,所要求的路线都能实现。要求的路线都能实现。欧拉的论文为图论的形成奠定了基础。今天
9、,图论已广泛地应用欧拉的论文为图论的形成奠定了基础。今天,图论已广泛地应用于计算机科学、运筹学、信息论、控制论等科学之中,并已成为我们于计算机科学、运筹学、信息论、控制论等科学之中,并已成为我们对现实问题进行抽象的一个强有力的数学工具。随着计算机科学的发对现实问题进行抽象的一个强有力的数学工具。随着计算机科学的发展,图论在计算机科学中的作用越来越大,同时,图论本身也得到了展,图论在计算机科学中的作用越来越大,同时,图论本身也得到了充分的发展。充分的发展。n在图论中除了欧拉回路以外,在图论中除了欧拉回路以外,还有一个著名的还有一个著名的“哈密尔顿回哈密尔顿回路问题路问题”。十九世纪爱尔兰数。十九
10、世纪爱尔兰数学家哈密尔顿学家哈密尔顿(Hamilton)(Hamilton)发明发明了一种叫做周游世界的数学游了一种叫做周游世界的数学游戏。它的玩法是:给你一个正戏。它的玩法是:给你一个正十二面体,它有二十个顶点,十二面体,它有二十个顶点,把每个顶点看做一个城市,把把每个顶点看做一个城市,把正十二面体的三十条棱看成连正十二面体的三十条棱看成连接这些城市的路。请你找一条接这些城市的路。请你找一条从某城市出发,经过每个城市从某城市出发,经过每个城市恰好一次,并且最后回到出发恰好一次,并且最后回到出发点的路线。我们把正十二面体点的路线。我们把正十二面体投影到平面上,在图投影到平面上,在图3 3中标出
11、了中标出了一种走法,即从城市一种走法,即从城市1 1出发,经出发,经过过2 2,3 3,2020,最后回到,最后回到1 1。2019181716111213151098123146547图图3 3周游世界游戏示意图周游世界游戏示意图n “哈密尔顿回路问题哈密尔顿回路问题”与与“欧拉回路问题欧拉回路问题”看上去十分相似,然而又是完全不同的两个问题。看上去十分相似,然而又是完全不同的两个问题。“哈密尔顿回路问题哈密尔顿回路问题”是访问每个结点一次,而是访问每个结点一次,而“欧拉回路问题欧拉回路问题”是访问每条边一次。对图是访问每条边一次。对图G G是否是否存在存在“欧拉回路欧拉回路”前面已给出充分
12、必要条件,而前面已给出充分必要条件,而对图对图G G是否存在是否存在“哈密尔顿回路哈密尔顿回路”至今仍未找到满至今仍未找到满足该问题的充分必要条件。足该问题的充分必要条件。2汉诺塔问题n 传说在古代印度的贝拿勒斯神庙里安放了一块黄传说在古代印度的贝拿勒斯神庙里安放了一块黄铜座,座上竖有三根宝石柱子。在第一根宝石柱上,按照铜座,座上竖有三根宝石柱子。在第一根宝石柱上,按照从小到大、自上而下的顺序放有从小到大、自上而下的顺序放有6464个直径大小不一的金盘个直径大小不一的金盘子,形成一座金塔,如图子,形成一座金塔,如图4 44 4所示,即所谓的汉诺塔(又所示,即所谓的汉诺塔(又称梵天塔)。天神让庙
13、里的僧侣们将第一根柱子上的称梵天塔)。天神让庙里的僧侣们将第一根柱子上的6464个个盘子借助第二根柱子全部移到第三根柱子上,即将整个塔盘子借助第二根柱子全部移到第三根柱子上,即将整个塔迁移,同时定下迁移,同时定下3 3条规则:条规则:n n (1 1)每次只能移动一个盘子;)每次只能移动一个盘子;n (2 2)盘子只能在三根柱子上来回移动,不能放在他)盘子只能在三根柱子上来回移动,不能放在他处;处;n (3 3)在移动过程中,三根柱子上的盘子必须始终保)在移动过程中,三根柱子上的盘子必须始终保持大盘在下,小盘在上。图持大盘在下,小盘在上。图4 4汉诺塔问题示意图汉诺塔问题示意图6464个个盘子
14、盘子6363个盘子个盘子n 据说当这据说当这6464个盘子全部移到第三根柱子上后,世个盘子全部移到第三根柱子上后,世界末日就要到了。这就是著名的汉诺塔塔问题。界末日就要到了。这就是著名的汉诺塔塔问题。图图4 4汉诺塔问题示意图汉诺塔问题示意图64个个盘子盘子63个个盘子盘子n 用计算机求解一个实际问题,首先要从这个实际问题用计算机求解一个实际问题,首先要从这个实际问题中抽象出一个数学模型,然后设计一个解此数学模型的算中抽象出一个数学模型,然后设计一个解此数学模型的算法,最后根据算法编写程序,经过调试和运行,从而完成法,最后根据算法编写程序,经过调试和运行,从而完成该问题的求解。从实际问题抽象出
15、一个数学模型的实质,该问题的求解。从实际问题抽象出一个数学模型的实质,其实就是要用数学的方法抽取问题主要的、本质的内容,其实就是要用数学的方法抽取问题主要的、本质的内容,最终实现对该问题的正确认识。最终实现对该问题的正确认识。n 汉诺塔问题是一个典型的用递归方法来解决的问题。汉诺塔问题是一个典型的用递归方法来解决的问题。递归是计算机学科中的一个重要概念。所谓递归,就是将递归是计算机学科中的一个重要概念。所谓递归,就是将一个较大的问题归约为一个或多个子问题的求解方法。而一个较大的问题归约为一个或多个子问题的求解方法。而这些子问题比原问题简单,且在结构上与原问题相同。这些子问题比原问题简单,且在结
16、构上与原问题相同。n 根据递归方法,我们可以将根据递归方法,我们可以将6464个盘子的汉诺塔问题个盘子的汉诺塔问题转化为求解转化为求解6363个盘子的汉诺塔问题,如果个盘子的汉诺塔问题,如果6363个盘子的汉个盘子的汉诺塔问题能够解决,则可以将诺塔问题能够解决,则可以将6363个盘子先移动到第二个个盘子先移动到第二个柱子上,再将最后一个盘子直接移动到第三个柱子上,柱子上,再将最后一个盘子直接移动到第三个柱子上,最后又一次将最后又一次将6363个盘子从第二个柱子移动到第三个柱子个盘子从第二个柱子移动到第三个柱子上。上。n如图如图4 4所示,则可以解决所示,则可以解决6464个盘子的汉诺塔问题。依
17、个盘子的汉诺塔问题。依此类推,此类推,6363个盘子的汉诺塔求解问题可以转化为个盘子的汉诺塔求解问题可以转化为6262个个盘子的汉诺塔求解问题,盘子的汉诺塔求解问题,6262个盘子的汉诺塔求解问题个盘子的汉诺塔求解问题又可以转化为又可以转化为6161个盘子的汉诺塔求解问题,直到个盘子的汉诺塔求解问题,直到1 1个个盘子的汉诺塔求解问题。再由盘子的汉诺塔求解问题。再由1 1个盘子的汉诺塔的解个盘子的汉诺塔的解求出求出2 2个盘子的汉诺塔,直到解出个盘子的汉诺塔,直到解出6464个盘子的汉诺塔个盘子的汉诺塔问题。问题。按照上面的算法,按照上面的算法,n n个盘子的汉诺塔问题需要移动的盘子个盘子的汉
18、诺塔问题需要移动的盘子数是数是n-1n-1个盘子的汉诺塔问题需要移动的盘子数的个盘子的汉诺塔问题需要移动的盘子数的2 2倍加倍加1 1。于是于是 h(nh(n)=2h(n-1)+1)=2h(n-1)+1 =2(2h(n-2)+1)+1=22h(n-2)+2+1 =2(2h(n-2)+1)+1=22h(n-2)+2+1 =23h(n-3)+22+2+1 =23h(n-3)+22+2+1 =2nh(0)+2n-1+22+2+1 =2nh(0)+2n-1+22+2+1 =2n-1+22+2+1 =2n-1+22+2+1 =2n-1 =2n-1因此,要完成汉诺塔的搬迁,需要移动盘子的次数为:因此,要完
19、成汉诺塔的搬迁,需要移动盘子的次数为:264-1=18446744073709551615 264-1=18446744073709551615 如果每秒移动一次,一年有如果每秒移动一次,一年有3153600031536000秒,则僧侣们一秒,则僧侣们一刻不停地来回搬动,也需要花费大约刻不停地来回搬动,也需要花费大约58495849亿年的时间。亿年的时间。假定计算机以每秒假定计算机以每秒10001000万个盘子的速度进行搬迁,则万个盘子的速度进行搬迁,则需要花费大约需要花费大约5849058490年的时间。年的时间。3算法复杂性中的难解性问题n算法分析是计算机科学的一项主要工作。为了进行算法比
20、算法分析是计算机科学的一项主要工作。为了进行算法比较,我们必须给出算法效率的某种衡量标准。较,我们必须给出算法效率的某种衡量标准。n假设假设M M是一种算法,并设是一种算法,并设n n为输入数据的规模。实施为输入数据的规模。实施M M所占所占用的时间和空间是衡量该算法效率的两个主要指标。时间用的时间和空间是衡量该算法效率的两个主要指标。时间由由“操作操作”次数衡量。比如,对于排序和查找,我们对比次数衡量。比如,对于排序和查找,我们对比较次数计数。空间由实施该算法所需的最大内存来衡量。较次数计数。空间由实施该算法所需的最大内存来衡量。n算法算法M M的复杂性是一个函数的复杂性是一个函数(n(n)
21、,它对于输人数据的规模,它对于输人数据的规模n n给出运行该算法所需时间与所需存储空间。执行一个算法给出运行该算法所需时间与所需存储空间。执行一个算法所需存储空间通常就是数据规模的倍数。因此,除非特殊所需存储空间通常就是数据规模的倍数。因此,除非特殊情况,情况,“复杂性复杂性”将指运行算法的时间。将指运行算法的时间。对于时间复杂性函数对于时间复杂性函数(n(n)。它通常不仅仅与输入。它通常不仅仅与输入数据的规模有关,还与特定的数据有关。例如,在一篇数据的规模有关,还与特定的数据有关。例如,在一篇英文短文中查找第一次出现的英文短文中查找第一次出现的3 3个字母的单词个字母的单词W W。那么,。那
22、么,如果如果W W为定冠词为定冠词“the”the”,则,则W W很可能在短文的开头部分出很可能在短文的开头部分出现,于是现,于是(n(n)值将会比较小;如果值将会比较小;如果W W是单词是单词“axeaxe,”,则则W W甚至可能不会在短文中出现,所以甚至可能不会在短文中出现,所以(n(n)可能会很大。可能会很大。因此,考虑对于适当的情况,求出复杂性函数因此,考虑对于适当的情况,求出复杂性函数(n(n)。在复杂性理论中研究得最多的两种情况是:。在复杂性理论中研究得最多的两种情况是:(1)(1)最坏情况最坏情况 对于任何可能的输入,对于任何可能的输入,(n(n)的最大值。的最大值。(2)(2)
23、平均情况平均情况 (n(n)的期望值。的期望值。假定假定M M是一个算法,并设是一个算法,并设n n为输入数据的大小。显然为输入数据的大小。显然M M的复的复杂性杂性(n(n)随着随着n n的增大而增大。通常我们需要考察的是的增大而增大。通常我们需要考察的是(n(n)的增长率,这常常由的增长率,这常常由(n(n)与某标准函数相比较而得,与某标准函数相比较而得,例如例如 loglog2 2n nn n,n logn log2 2n n,n n2 2,n n3 3,2 2n n 等等,都可被用作为标准函数,这些函数是按其增长等等,都可被用作为标准函数,这些函数是按其增长率列出的:对数函数率列出的:
24、对数函数log2nlog2n增长最慢,指数函数增长最慢,指数函数2n2n增长最增长最快,而多项式函数快,而多项式函数ncnc的增长率随其指数的增长率随其指数c c的增大而变快。的增大而变快。将复杂性函数与一个标准函数相比较的一种方法是利将复杂性函数与一个标准函数相比较的一种方法是利用用“大大O”记号,我们给出它的定义:记号,我们给出它的定义:设设(x(x)与与g(xg(x)为定义于为定义于R R或或R R的子集上的任意两个函的子集上的任意两个函数。我们说数。我们说“(x(x)与与g(xg(x)同阶同阶”,记作,记作 (x(x)O(g(g(g(g)。如果存在实数如果存在实数k k和正常数和正常数
25、C C使得对于所有的使得对于所有的x xk k有有|(x(x)|C|)|C|g(xg(x)|)|。如如 n n2 2+n+1=O(n+n+1=O(n2 2),该表达式表示,当,该表达式表示,当n n足够大时表达式左边约足够大时表达式左边约等于等于n n2 2。常见的大常见的大O O表示形式有:表示形式有:O(1)(1)称为常数级;称为常数级;O(logn(logn)称为对数级;称为对数级;O(n(n)称为线性级;称为线性级;O(nc(nc)称为多项式级;称为多项式级;O(c(cn n)称为指数级;称为指数级;O(n(n!)!)称为阶乘级。称为阶乘级。用以上表示方法,在汉诺塔问题中,需要移动用以
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 领域 典型 问题
限制150内