您好、欢迎来到现金彩票网!
当前位置:秒速快三开奖 > 双连通度 >

15 Puzzle(15 数码IDA 及 N 数码的 有解无解的判读)

发布时间:2019-05-20 11:45 来源:未知 编辑:admin

  题意:给你一行16个数,四行四列,让你看看经过多少步变为 题意上给出的固定的 目标状态;

  思路:刚开始 刚开始我没有学 IDA*时,我觉着 用 bfs()用康拓展开式,或用 map标记状态;但是想想 一定超时,因为有16! 种状态,把很多必要的状态都 存上了,不是超时,就是 内存超限;

  下面介绍一下: IDA*  迭代加深搜索(ID-DFS),其实先估算一个 从起始状态 到 目标状态的 最小距离 limit ,一般会有函数

  当前状态v下 到 目标状态 的估算函数d(v) + h*(v) =limit, 一般情况下, d(v) 为从起始状态到达当前状态所递归调用的深度;  h*(v) 表示从当前v状态到 目标状态的 最小距离(估算值),limit 为当前 从起始状态到目标状态的 最小距离(估算值),要是找不到的话,一直枚举limit,让 limit  加 1,再从头再找,直到 达到目标状态,第一次找到 目标状态就是最优解,因为我们是枚举的 limit ,一次找到当然是最优解;

  在这道题中可能有人会问 limit每次加1,都要从头再搜,这难道不更耗时时吗,还有就是在代码中,根本就都没有判重状态, 就是因为这道题 判重不易,所以选择了 IDA*(迭代加深搜索),当limit小的时候,因为limit的限制,所以能搜到的状态数不会太多,还有这道题 会有 16! 种状态,你要是用 map 判重,log N 的复杂度,16! 为一个  以2开头的十四位数字,是 2的40次方大的数,要查询大约 40次左右,而 IDA* 就算是不判重,是因为我们考虑搜索树中的一个节点,如果它(假设我们做一个简单的剪枝、拒绝反着走到达当前状态的最后一步)被再次搜到,就意味着它至少又转了四下。也就是说一个点至多被搜504≈13

  ,即其常数约为13!也就是说这其实是比用平衡树判重快得多的。但是ID-A*是不能像A*一样每次取出预估最优的状态的,它只能通过调整上下来解决这个问题;这跟DFS与ID-DFS的区别还不一样,因为在一个预估较劣的状态可能会达到一个预估较优的状态。

  先介绍一下逆序数:在一列数中,每个数前面有几个比自己大的数,就是这个数的逆序数,这一列数的逆序数就是这一列数的逆序数的总和;

  当N为奇数时, 当 两个N数码的逆序数 奇偶性相同时,可以互达,否则不行;

  当N为偶数时,当 两个N数码的奇偶性相同的线所在行的差值 k,k也必须是偶数时,才能互达;

  当两个N数码的奇偶性不同时,那么两个N数码中的0所在行的差值 k,k也必须是奇数时,才能互达;

  为什么呢:因为当0左右移动时,这个N数码的逆序数是不变的, 当上下移动时,当N为奇数时,上下移动时,中间有N-1个数,N-1 为偶数,那么整个N数码的逆序数只会有两种可能 加减一个偶数;举例说明:(当N为3时,N-1为2,当0上下移动时,中间的两个数的逆序数 有三种可能,同时加 1 或同时减1 ,或 一个加1,一个减1,这三种情况都使得总体的逆序数 增加或减少偶数个,所以不管 上下移几次,总体的逆序数的奇偶性是不变得)。当N为偶数时,上下移动时,中间有N-1个数,N-1为奇数,上下移动一次整个N数码的逆序数只会有 加上或减去一个奇数;举例说明:(当N为4时,N-1为3,当0上下移动时,中间的3个数的逆序数有四种情况,0个增加1、3个减少1,1个增加1、2个减少1,2个增加1,1个减少1,3个增加1、0个减少1,这四种情况全部都是 使全部的逆序数增加或减去 一个奇数),有了这个分析上的结论就好理解了

  在写这个代码时,还有注意3点:找逆序数时不能算0的 逆序数;  找曼哈顿距离时,不能算0的曼哈顿距离; 在搜索时,一定要注意不能回搜;

  一、问题描述15数码问题同八数码问题,是人工智能中一个很典型的智力问题。15数码问题是在4×4方格盘上,放有15个数码,剩下一个位置为空(方便起见,用0表示空),每一空格其上下左右的数码可移至空格。本...博文来自:xxy_的博客

  IDA*算法是A*算法和迭代加深算法的结合.A*算法需要维护open表和close表,以及排序选择最小代价的结点内存空间消耗过多。IDA*的答题思路是。首先根据最初的数码表510...博文来自:Triple-L

  给你一个n(ngt;1)行m(mgt;1)列的矩阵,由1,2。。。。。。n*m这n*m个数组成。通过一系列的操作,使得矩阵变成初始状态(即逆序数为0的状态)。拼图游戏里面,n*m对...博文来自:sandman_13的博客

  照上一个题八数码修改来的,只是十五数码和八数码判断是否有解的方法不同,八数码0的移动不影响其余7个数字逆序数的奇偶性,而十五数码0的左右移动不影响其余15个数逆序数的奇偶性(顺序不变),但上下移动改变...博文来自:yan_____的专栏

  15数码问题是人工智能中的一个经典问题。所谓的15数码问题:就是在一个4*4的16宫格棋盘上,摆放有15个将牌,每一个都刻有1-15中的某一个数码。棋盘中留有一个空格,允许其周围的某一个将牌向空格移动...博文来自:Blue2Te

  在《15迷问题的证明(15puzzle)》一文中,我对15迷问题做了较为详尽的描述,并证明了什么样的初态可以达到目标状态。在这篇文章里我将进一步证明可达到目标状态的初始态状态空间为16!/2,并会使...博文来自:MindHawk

  IDA*算法问题描述从A点到B点的最短路径,每段路径值不小于0。特点带启发式的有限制的深度优先搜索,本质是在启发式限制下以不同的深度进行dfs。...博文来自:小虎 的博客

  IDA*算法,ID(IterativeDeepening)指的是迭代加深.它的思想是重复进行限制最大深度的深度优先搜索(此限制从某个最小值遍历到最大值),也成为深度受限搜索.一般情况下,为了提高搜索速...博文来自:姬小野的博客

  A*A*算法是基础的启发式算法,常使用“估价函数”减少选择来用于优化搜索的速度。对于当前的状态,我们知道当前已经用了的代价,那么我们可以设计一个估价函数fff来估计未来的状态,当前代价+未来代价作...博文来自:私は Mocha!!

  15数码问题1878年,美国最伟大的谜题专家SamLoyd发明了15数码谜题。这个谜题由一个正方形盒子和15个编号为1,2,...,15的正方形滑块组成,每个滑块的边长是盒子边长的1/4,因此可以把...博文来自:jiyanfeng1的专栏

  ava.util包提供了Date类来封装当前的日期和时间。Date类提供两个构造函数来实例化Date对象。第一个构造函数使用当前日期和时间来初始化对象。Date()第二个构造函数接收一个参数,该参数是...博文来自:bigbighenry的博客

  A*和IDA*听起来高大上简单来说就是搜索的一个优化,通过一个估值函数让搜索不往不必要的地方发展A*是用在BFS上的IDA*是用在DFS上的A*=优先队列+估价函数IDA=迭代加深+估价函数如果当前深...博文来自:sslz_fsy的博客

  本人大一,今年2017最后一天,准备做点这学期学的算法一点总结,当做复习吧。一周前看见了贪吃蛇AI算法,受到震撼于是就把以前的win32贪吃蛇加了个AI实现,让我这个渣渣写了好几天才完工,终于能吃完全...博文来自:贯穿真Sh的博客

  这是一种很奇特的算法。。当然理解了以后就不那么奇特了。。直接看题:  在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。...博文来自:的博客

  因为A*卡了一天QAQ那么,A*是什么呢?A*A*是对于bfs的优化,启发式搜索。例如下图:不错,在这张图上,小人去找电脑,用bfs的话:黄色就是bfs的搜索范围。。。不要问我为什么选黄色Dij不会打...博文来自:滑呀滑呀滑呀滑稽

  今天学习了IDA*算法,在这里总结一下:IDA*算法是A*算法和迭代加深算法的结合。迭代加深算法是在dfs搜索算法的基础上逐步加深搜索的深度,它避免了广度优先搜索占用搜索空间太大的缺点,也减少了深度优...博文来自:如果这是你所爱的,要坚持,并踏实。

  终于,在学习了完深搜和广搜、Dijkstra、二叉堆和优先队列以及A*算法之后,可以看一下IDA*算法了。因为求解4x4的拼图游戏所要搜素的节点数很大,所以应该采用IDA*算法,而3x3的拼图游戏则可...博文来自:Its just a matter of time.

  迭代加深搜索迭代加深搜索,实质上是限定下界的深度优先搜索。即首先允许深度优先搜索K层,若没有发现可行解,再将K+1后重复以上步骤搜索(即深度优先搜索k+1层),直到搜索到可行解。在迭代加深搜索的算法中...博文来自:WilliamSun0122的博客

  例题骑士精神Description在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐...博文来自:A1847225889的博客

  迭代加深:通过单纯的深度优先搜索无法找出初始状态到最终状态的最短路径,但是重复进行限制最大深度的深度优先搜索(深度受限搜索)却可以。简单来说,就是在循环执行深度受限搜索的过程中逐步增加限制值limit...博文来自:肘子的博客

  A*算法(A-Star)为了赋予计算机“智慧”,我们必须更有智慧(:-P),计算机可以通过一个“估价函数”确定一个状态的“前途”的量,人呢……必须找到这个估价函数。通常,估价函数计为f^(n),f^中...博文来自:kaqiur

  预先:IDA*首先你需要了解什么是A*算法(一种利用启发信息的有信息式搜索),它本身就是是对一致代价搜索的一种改进,这里不做过多的阐述。过渡:迭代加深(限制深度优先搜索的层数)为什么存在?减小原先BF...博文来自:qinziqiao的博客

  广度搜索十五数码基本上在17-18步之后就很难求出结果了……各种内存被耗尽…… SO,请问: (1)十五数码问题的最优算法是什么? (2)最优的算法可以在普通内存和CPU条件下秒解十五数码问题吗?……论坛

  我个人对这个搜索的理解就是以BFS的思想写DFS。具体来说就是,首先深度优先搜索k层,若没有找到可行解,再深度优先搜索k+1层,直到找到可行解为止。由于深度是从小到大逐渐增大的,所以当搜索到结果时可以...博文来自:hzaukotete的博客

  (有任何问题欢迎留言或私聊题目一:埃及分数题目链接及相关信息见于:Lrj的《算法竞赛入门经典》第二版P206题意:在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理数。例如,2/3=1...博文来自:Cwolf9

  省选的收获暗金学会了A*啦啦啦;我在第一天学了A*;然后回家颓废之余思考思考;又问了van爷一些小问题;然后就...博文来自:我怎么这么菜的呢

  刚刚学IDA*,再来写一遍八数码问题。又一次见证了别人家的代码和自己的代码的差距。别人家的链接:函数自己一开始写的是不在正确...博文来自:Sky

  搞了这么久发现自己到现在还不会启发式搜索ヾ(。`Д´。)所以今天正好趁着搜索练习题的风去搞了启发式搜索A*搜索算法,俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于...博文来自:CreationAugust is 14 years old forever

  题意:给一个由(n+1)*n*2根火柴棒构成的边长为n正方形,每根火柴棒都有编号,已经删去了k根火柴棒,问至少再删多少根火柴棒可以破坏掉所有正方形。【刘汝佳:《算法竞赛入门经典(第二版)》P213】【...博文来自:Sky

  对于空格(0)的左移/右移操作,对应序列不变(逆序数也就不变) 对于空格(0)的上移/下移操作,相当于序列的某个数字前移/后移两位,该序列的逆序数奇偶性不变。 所以求初始状态与目标状态的逆序数可作出判...博文来自:YouthDance

  IDA*算法是A*算法和迭代加深ID算法的结合,先搜录相关资料如下[1] 搜索算法:IDA*算法,这是对IDA*算法的一个解释和学习笔记博文来自:Coding for Dreams

  题意:你有一间矩形的屋子,屋子的地面上铺着正方形的地板,共有H行W列。经过长时间的使用,一些地板损坏了。而你又没有钱将整间屋子的地板都换成新的,所以你决定用一些地毯将损坏的地毯盖起来。然而,你需要遵守...博文来自:Sky

  本篇文章主要受到了“华都烟梦”同学的启发,看了他的博客和代码之后,我自己研究了很久,后来发现了一种时间上比较能够接受的方法,实现了这个拼图的机器求解。详细参见:博文来自:bywuu的专栏

  最近做了很多这方面的题,看了很多前辈们的资料。逐渐对这些算法有了一些理解。Dijkstra算法就是传统的求最短路算法。每次维护一个堆,记录未找到与源点之间最短路的点,然后不断从中取出最小的点,出堆,然...博文来自:1292765944的专栏

  因为公司有个项目有webapp的需求,在前期准备的期间考虑过使用ionic,毕竟该项目web端的框架使用的是Angular,项目组的人也都比较熟悉,但是我们毕竟只是做个移动的网页,不想用ionic那么...博文来自:zhangl的博客

  Arduino环境下开发NodeMCU(ESP8266)   以前用过ESP8266,只是一些简单的应用。将ESP8266与单片机相连,使用AT指令进行串口通信,从而达到发送信息、接收信息一些目...博文来自:Little_Body的博客

  用以前以前写过的自定义课表软件 ,Android 自定义View课程表表格 原生View截图合成分享的图片 看到的是图片只显示到11节处,下面的没有...博文来自:ShallCheek

  上一篇博客介绍了如何解决Fragment重叠的问题,有需要的同学可以看一下,底部有demo下载。 直通车:完美解决Fragment重叠本篇博客我们来说一下怎么让fragment重新加载布局资源文件。...博文来自:喻志强的博客

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  卷积的概念       线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。做法很简单。首先,我们有一个二维的滤波器矩阵和一个要处理的二维图像。然后,对于图像的每一...博文来自:HAHA的专栏

  tableView中添加按钮触发不了点击事件的解决办法博文来自:CN_DS的博客

  公司产品之前使用xmpp作为底层库,之前同事编译自己的sdk静态库想生成.a库,但是各种编译问题(其实耐心修改配置都能解决),但是从百度找到方案用framework可以解决,所以最终使用的是frame...博文来自:mingming24的专栏

  java.lang.NoClassDefFoundError错误产生的原因: NoClassDefFoundError错误产生的原因是:JVM在编译的时候能找到调用方法或静态变量所在的类,但在运行的时...博文来自:追着梦跑的博客

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...博文来自:Marswill

  花了几天,终于把matlab版的人脸检测运行成功了,虽然正确率不是很高,看着各种论文上的人脸检测正确率都出奇的高,我是不怎么相信的,有的论文连基于平均脸的人脸检测正确率都能达到98%,汗啊~~  也许...博文来自:海海人生

  阅读内容为:FX系列微型可编程控制器用户手册(通讯篇)中计算机链接功能章节。 采用本方法通信,pc端的实现,其实就是,把操作按照协议(2种)翻译成相应的字符串,通过串口发送给plc。 编写一应用程...博文来自:pengjc2001的博客

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  前言:       博主在自主学习粒子滤波的过程中,看了很多文献或博客,不知道是看文献时粗心大意还是悟性太低,看着那么多公式,总是无法把握住粒子滤波的思路,也无法将理论和实践对应起来。比如:理论推导过...博文来自:知行合一

  自己整理编写的逻辑回归模板,作为学习笔记记录分享。数据集用的是14个自变量Xi,一个因变量Y的australian数据集。 1. 测试集和训练集3、7分组 australian ...博文来自:Tiaaaaa的博客

  E. Bus Video System(找刚开始车上,满足的人数,好题,细节多)阅读数

http://cellmall.net/shuangliantongdu/61.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有