第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。

Slides:



Advertisements
Similar presentations
主要内容 Java 的常用包 Java 的常用包 “ == ” 和 “ equals ” 的用法 “ == ” 和 “ equals ” 的用法 基本数据类型与引用类型 基本数据类型与引用类型 String 和 StringBuffer String 和 StringBuffer 对象的克隆( clone.
Advertisements

1 門市服務丙級技術士 技能檢定介紹 門市服務丙級技術士報告注意事項 證照名稱:門市服務丙級技術士 發照單位:行政院勞工委員會 有效期限:終生有效 考照時間:每年一次,皆為第一梯次 1. 簡章與報名書表發售時間:每年 1 月 2. 報名時間:每年 1 月。 3. 學科考試時間:每年 3.
单元二:面向对象程序设计 任务二:借书卡程序设计.
第三讲 面向对象(上).
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
生源地助学贷款系统还款功能优化说明 评审三局 2015年5月.
项目7 面向对象高级.
项目6 通用堆栈.
第二框 信用工具和外汇.
二、信用工具和外汇.
为您扬帆,助您远航! 徽商银行特色新产品介绍. 为您扬帆,助您远航! 徽商银行特色新产品介绍.
2013年生源地贷款工作回顾及下一步工作思路 2013年11月.
银联代付产品.
公务卡使用说明.
術科測試解析 第二站 櫃檯作業 (瑋博POS系統).
财务知识培训 杨 秀 玲 2014年10月.
银联代收产品.
時間:102年9月18日(星期三) 地點:國立臺灣師範大學綜合大樓509國際會議廳
四資二甲 第三週作業 物件導向程式設計.
法律修养专题 对应教材的第七、八章内容 及第五、六章法律部分内容.
第一章会计技能的内容 1.1会计技能的重要性.
MVC Servlet与MVC设计模式.
东南大学 数字迎新的探索 东南大学 网络与信息中心 张月琳.
新时期下的财政票据管理 省非税局票据管理处 陈奕晶.
102學年度預算編製說明會 主辦單位:會計室 102/02/22.
第三方支付风生水起,多路大佬竞角逐 第三方支付为互联网企业带来的巨大利益,各路势力目前 正争相获取第三方支付牌照,但第三方支付平台跑路、盗 刷等问题频出,使得行业未来发展受到挑战,那么未来第 三方支付将走向如何? 对此,九次方大数据结合网络舆情,对第三方支付行业进 行了梳理,您会发现: 1、央行发放支付牌照政策收紧,新增获得第三方支付牌照的企业数量骤降.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
小学生游戏.
第二章 JAVA语言基础.
第一单元 生活与消费 第一课 神奇的货币 第二课时 信用工具和外汇 建行龙卡 工行 牡丹卡 农行 金穗卡.
類別與物件 Class & Object.
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
AOP实践 演讲人:陈思荣.
第9章 单例模式 Website:
第9课 北美大陆上的新体制 导入新课 新课教学 课堂小结 知识结构 巩固练习
Signutil.
CHAPTER 9 建構方法 ROBERT.
第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
哈夫曼编码.
程式設計實作.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
五、链 表 1、单链表 2、双向链表 3、链表应用.
动态规划(Dynamic Programming)
Php class 組員: 賴羿陵 林昱廷 莊正暉 張雅晴
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
C/C++/Java 哪些值不是头等程序对象
Chapter 5 Recursion.
简单工厂模式.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
C#程序设计基础 $3 成员、变量和常量.
第二章 Java基本语法 讲师:复凡.
第五次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
第二章 Java语法基础.
門市服務丙級技術士技能術科檢定程序 第一崗位 (30%) 筆試類型(22.5%) 1.服務品質~30題 2.危機處理~30題 50分鐘
Review 1~3.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第五次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。
第二章 Java基本语法 讲师:复凡.
第6單元 6-1 類別的繼承 (Class Inheritance) 6-2 抽象類別 (Abstract Class)
假代购诈骗钱 P2P网络非法集资洗钱 虚开增值税发票洗钱 非法经营POS机套现 被第三方支付平台骗取资金 买卖信用卡洗钱
所得稅法第14條、第126條修正條文 薪資所得計算方式二擇一 定額減除 特定費用減除 維持現行薪資所得特別扣除額20萬元減除方式
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
104 四技二專甄選入學 簡章解析 輔導室 何乙娟.
第二章 Java基础语法 北京传智播客教育
第6章 继承和多态 伍孝金
Summary
Presentation transcript:

第四次课后作业 1 问题描述: 将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。 规则集包含两部分:计算从指定位置开始的所有合法移动,以及每次移动的结果位置。 给出表示谜题的抽象类,其中的类型参数P和M表示位置类和移动类。 public interface Puzzle<P, M> { P initialPosition(); boolean isGoal(P position); Set<M> legalMoves(P position); P move(P position, M move); }

Node代表通过一系列的移动到达的一个位置,其中保存了到达该位置的移动以及前一个Node。只要沿着Node链接逐步回溯,就可以重新构建出达到当前位置的移动序列。 @Immutable static class Node<P, M> { final P pos; final M move; final Node<P, M> prev; Node(P pos, M move, Node<P, M> prev) { this.pos = pos; this.move = move; this.prev = prev; } List<M> asMoveList() { List<M> solution = new LinkedList<M>(); for (Node<P, M> n = this; n.move != null; n = n.prev) solution.add(0, n.move); return solution;

给出谜题框架的串行解决方案SequentialPuzzleSolver,它在谜题空间中执行深度优先搜索,当找到解答方案(不一定是最短的解决方案)后结束搜索。 public class SequentialPuzzleSolver<P, M> { private final Puzzle<P, M> puzzle; private final Set<P> seen = new HashSet<P>(); public SequentialPuzzleSolver(Puzzle<P, M> puzzle) { this.puzzle = puzzle; } public List<M> solve() { P pos = puzzle.initialPosition(); return search(new PuzzleNode<P, M>(pos, null, null));

private List<M> search(PuzzleNode<P, M> node) { if (!seen.contains(node.pos)) { seen.add(node.pos); if (puzzle.isGoal(node.pos)) return node.asMoveList(); for (M move : puzzle.legalMoves(node.pos)) { P pos = puzzle.move(node.pos, move); PuzzleNode<P, M> child = new PuzzleNode<P, M>(pos, move, node); List<M> result = search(child); if (result != null) return result; } return null;

2 作业要求: 利用并发性修改解决方案,将给出的串行方案修改为并行,可以以并行方式来计算下一步移动以及目标条件,因为计算某次移动的过程在很大程度上与计算其他移动的过程是相互独立的。