400 likes | 561 Views
第 8 章 计算机领域的典型问题. 8.1 图论问题 8.2 算法复杂性问题 8.3 计算机智能问题 8.4 并发控制问题 8.5 本章小结. 8.1 图论问题. 歌尼斯堡七桥问题 哈密尔顿回路问题 中国邮路问题. 8.1.1 歌尼斯堡七桥问题. 问题描述 一个人怎样不重复地走完七座桥,最后还能回到原出发地点?. 8.1.1 歌尼斯堡七桥问题. 欧拉对 哥尼斯堡 七桥问题进行了研究 1736 年,欧拉论证了该问题无解。 从一点出发不重复地走遍 7 座桥,最后又回到原来出发点是不可能的。 欧拉对了问题进行了抽象
E N D
第8章 计算机领域的典型问题 • 8.1 图论问题 • 8.2 算法复杂性问题 • 8.3 计算机智能问题 • 8.4 并发控制问题 • 8.5 本章小结
8.1 图论问题 • 歌尼斯堡七桥问题 • 哈密尔顿回路问题 • 中国邮路问题
8.1.1 歌尼斯堡七桥问题 • 问题描述 • 一个人怎样不重复地走完七座桥,最后还能回到原出发地点?
8.1.1 歌尼斯堡七桥问题 • 欧拉对哥尼斯堡七桥问题进行了研究 • 1736年,欧拉论证了该问题无解。 • 从一点出发不重复地走遍7座桥,最后又回到原来出发点是不可能的。 • 欧拉对了问题进行了抽象 描述:用4个字母A、B、 C、D代表4个城区,并用 7条边表示7座桥。
8.1.1 歌尼斯堡七桥问题 • 欧拉的3条判定规则 • 如果通奇数座桥的地方不止两个,满足要求的路径是找不到的。 • 如果只有两个地方通奇数座桥,可以从这两个地方之一出发,找到所要求的路径。 • 如果没有一个地方是通奇数座桥的,则无论从哪里出发,所要求的路径都能实现。
8.1.1 歌尼斯堡七桥问题 • 欧拉的研究工作奠定了图论的基础 • 涉及到的后续课程。 • 离散数学。 • 数据结构。 • 应用领域。 • 计算机网络性能分析。 • 交通运输网络调度。 • 地下管网配置。 航空网络
8.1.2 哈密顿回路问题 • 问题描述(周游世界游戏) • 找一条从某个城市出发,经过每个城市恰好一次,最后回到出发地的路径。
8.1.2 哈密顿回路问题 • 哈密顿回路与欧拉回路的区别 • 哈密顿回路问题是访问每个顶点一次,而欧拉回路问题是访问每条边一次。 • 对于一个图是否存在欧拉回路,已给出充要条件;而对于一个图是否存在哈密顿回路至今仍未找到充要条件。
8.1.3 中国邮路问题 • 问题描述 • 一个邮递员应如何选择一条路线,使他能够从邮局出发,走遍他负责送信的所有街道,最后回到邮局,并且所走的路程最短。 • 归结为图论问题:给定一个连通无向图,求该图的一条经过每条边至少一次的最短回路。 • 对于欧拉图,找到一条欧拉回路即可。对于非欧拉图,才是中国邮路问题的研究重点。
8.2 算法复杂性问题 • 汉诺塔问题 • 旅行商问题 • NP完全问题
63个盘子 64个盘子 8.2.1 汉诺塔问题 • 问题描述 • 将第一根柱子上的64个盘子借助第二根柱子全部移到第三根柱子上。
8.2.1 汉诺塔问题 • 移动规则 • 每次只能移动一个盘子。 • 盘子只能在三根柱子上移动,不能放在他处。 • 在移动过程中,三根柱子上的盘子必须始终保持大盘在下,小盘在上。
从前有座山…… 从前有座山…… 从前有座山…… 8.2.1 汉诺塔问题 • 递归思想 • 将一个较大的问题的求解归约为一个或多个子问题的求解。而这些子问题比原问题简单,且在结构上与原问题相同。
8.2.1 汉诺塔问题 • 用递归方法求解 • 移动n个盘子的汉诺塔问题需要移动的盘子数是n-1个盘子的汉诺塔问题需要移动的盘子数的2倍加1。 • h(n) =2h(n-1)+1 =2(2h(n-2)+1)+1 =22h(n-2)+2+1 =23h(n-3)+22+2+1 =…… =2nh(0)+2n-1+…+22+2+1 =2n-1+…+22+2+1 =2n-1
8.2.1 汉诺塔问题 • 用递归方法求解 • 每次只能移动一个盘子,要完成汉诺塔的搬迁,需要移动盘子的次数为: 264-1=18 446 744 073 709 551 615 • 每秒移动一次,需要大约5849亿年的时间。
8.2.2旅行商问题 • 问题描述 • 一旅行商从某城市出发,必须经过每个城市且只能经过一次,最后回到原出发城市。 • 要求找到一条距离最短的路径(或费用最少的路径)。 • 原始的解决办法 • 列出每条可能的路径。 • 从中选择距离最短的路径。
8.2.2 旅行商问题 • 遇到的困难 • 城市个数较多时难以实现。 • 组合爆炸问题。 • 可行的解决办法 • 启发式算法。 • 近似算法。
8.2.3 NP完全问题 • P类问题 • 将所有可以在多项式时间内求解的问题称为P类问题。 • NP类问题 • 将所有在多项式时间内可以验证的问题称为NP类问题。 • NP完全问题 • 在NP类问题中,某些问题的复杂性与整个类的复杂性有关,如果这些问题中的任意一个能在多项式的时间内求解,则所有NP类问题都能在多项式时间内求解,这些NP类问题称为NP完全问题。
8.3 计算机智能问题 • 图灵测试 • 西尔勒中文小屋 • 博弈问题
8.3.1 图灵测试 • 机器能思维吗 ?
8.3.1 图灵测试 • 图灵测试游戏 • 游戏的参与者 • 一个男人、一个女人和一个不限性别的提问者。 • 游戏目标 • 提问者通过对其他两人的提问,来鉴别其中的男女。 • 游戏要求 • 提问者呆在与其他两个游戏者相隔离的房间里。 • 提问者和两游戏者之间通过电传打字机进行沟通。
8.3.1 图灵测试 • 图灵测试游戏 • 把游戏中的男人换成机器。 • 若提问者在与机器、女人的游戏中作出的错误判断与在男人、女人之间的游戏中作出的错误判断,其次数相同或更多,则判定这部机器能够思维。 • 根据图灵当时的预测,到2000年能有机器通过这样的测试。有人认为,在1997年战胜国际象棋大师卡斯帕罗夫的深蓝计算机可以看作通过了图灵测试。
8.3.2 西尔勒中文小屋 • 问题描述 • 西尔勒被关在一个小屋中,屋子里有序地堆放着足够的中文字符,而他对中文一窍不通。 • 屋外的人递进一串中文字符,同时还附有一本用英文编写的处理中文字符的规则,这些规则将递进来的字符和小屋中的字符之间的转换作了形式化的规定。 • 西尔勒按照规则对这些字符进行处理后,将一串新的中文字符送出屋外。
8.3.2 西尔勒中文小屋 • 问题描述 • 实际上,送进来的字符串就是屋外人提出的问题,送出去的字符串就是所提出问题的答案。但西尔勒并不清楚自己在做什么?
8.3.2 西尔勒中文小屋 • 西尔勒的观点 • 形式化的计算机仅有语法,没有语义,只是按规则办事,并不理解规则的含义及自己在做什么?机器永远也不可能代替人脑。 • 图灵的观点 • 不要求机器与人脑在内部构造上一样,只要与人脑有相同的功能就认为机器有思维。
8.3.2 西尔勒中文小屋 • 人工智能的含义 • 研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 • 人工智能研究的目标 • 使机器能够胜任一些通常需要人类智能才能完成的复杂工作。
8.3.2 西尔勒中文小屋 • 人工智能的不同观点 • 符号主义:认为人的认知基元是符号,认为人是一个物理符号系统,计算机也是一个物理符号系统,因而能够用计算机来模拟人的智能行为。 • 连接主义:认为人的思维基元是神经元,而不是符号处理过程。认为人脑不同于电脑,主张人工智能应着重于结构模拟。 • 行为主义:认为智能取决于感知和行动,提出智能行为的感知-动作模式。
8.3.2 西尔勒中文小屋 • 人工智能的展望 • 目前人们对心理学和生物学的认识还很不成熟,对人脑的结构还没有真正了解,无法建立起人脑思维完整的数学模型。 • 让计算机具有和人脑完全一样的智能,不是短期内能够实现的。 • 在相当长的时间内,只能从不同的侧面、以不同的方式让计算机具有某些类似人的智能。
8.3.3 博弈问题 • 博弈的含义 • 狭义上讲,博弈是指下棋、玩扑克牌、掷骰子等具有输赢性质的游戏。 • 广义上讲,博弈就是对策或斗智。
8.3.3 博弈问题 • 双人完备博弈 • 两位选手对垒,轮流走步,其中一方完全知道另一方已经走过的棋步以及未来可能的棋步。 • 对弈的结果要么是一方赢(另一方输),要么是和局。 • 对于任何一种双人完备博弈,都可以用一个博弈树来描述,并通过博弈树搜索策略寻找最佳解。
8.3.3 博弈问题 • 博弈树 • 博弈树类似于状态图和问题求解搜索中使用的搜索树。 • 搜索树上的一个结点对应一个棋局,树的分支表示棋的走步,根结点表示棋局的开始,叶结点表示棋局的结束。 • 博弈树是非常大的,国际象棋有10120个结点,中国象棋来有10160个结点。
8.3.3 博弈问题 • 中国象棋博弈树
8.4 并发控制问题 • 生产者-消费者问题 • 哲学家共餐问题
8.4.1 生产者-消费者问题 • 问题描述 • 有n个生产者和m个消费者,在生产者和消费者之间设置了一个能存放k个产品的货架。 • 只要货架未满,生产者pi生产的产品就可以放入货架,每次放入一个产品; • 只要货架非空,消费者cj就可以货架取走产品消费,每次取走一个。 • 所有生产者的产品生产和消费者的产品消费都可以按自己的意愿进行,即相互之间是独立的。
8.4.1 生产者-消费者问题 • 约束条件 • 不允许消费者从空货架取产品,现实中也是取不到的。 • 不允许生产者向一个已装满产品的货架中再放入产品。 • 应用背景 • 是对操作系统中并发进程同步的一种抽象描述,多个进程虽然看起来是按异步方式执行的,但相互有关的进程应有一种协调机制。
8.4.2 哲学家共餐问题 • 问题描述 • 哲学家的生活除了吃面条就是思考问题。 • 吃面条的时候需要左、右手各拿起一支筷子。 • 吃完后将筷子放回原处,继续思考问题。
8.4.2 哲学家共餐问题 • 一个哲学家的活动进程表示 • 思考问题。 • 饿了停止思考,左手拿一支筷子(拿不到就等)。 • 右手拿一支筷子(拿不到就等) 。 • 进餐。 • 放右手筷子。 • 放左手筷子。 • 重新回到思考问题状态。
8.4.2 哲学家共餐问题 • 可能出现的问题 • 当所有的哲学家都同时拿起左手筷子时,则所有的哲学家都将拿不到右手的筷子,并处于等待状态,那么哲学家都将无法进餐,最终饿死。 • 将哲学家的活动进程修改一下,变为当右手的筷子拿不到时,就放下左手的筷子。 • 可能在一个瞬间,所有的哲学家都同时拿起左手的筷子,则自然拿不到右手的筷子,于是都同时放下左手的筷子,等一会,又同时拿起左手的筷子,如此这样永远重复下去,则所有的哲学家仍然无法进餐。
8.4.2 哲学家共餐问题 • 应用背景 • 描述了多个进程以互斥方式访问有限资源的问题。 • 计算机系统不可能总是提供足够多的资源,但又想尽可能多地同时满足多个用户的使用要求。 • 研究人员已经采取了一些非常有效的方法来尽量满足多个用户对有限资源的同时访问需求,同时尽可能少地出现死锁现象的发生。
8.5 本章小结 • 歌尼斯堡七桥问题、哈密顿回路问题、中国邮路问题等问题促进了图论的产生和发展。 • 旅行商问题、汉诺塔问题有助于对算法复杂性的研究,并促使人们设计出更好的解决问题的实用算法。 • 图灵测试问题、西尔勒中文小屋问题、博弈问题能促进对人工智能的深入理解和研究。 • 生产者-消费者问题、哲学家共餐问题对于深入理解并实现并发控制是非常有益的。