三路模型求解经典回溯问题

来源 :读天下 | 被引量 : 0次 | 上传用户:chengjiangjie
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:算法设计本是一个自由灵活的思维过程,但是,在算法设计过程中我们会发现,问题可以分类,同类问题的解决方法是类似的。于是,可以对处理类似问题的算法进行归纳,得到解决这一类问题的算法的模式,使用模式可以加快算法设计的过程,提高算法正确率。
  关键词:回溯问题;三路模型;汉诺塔
  
  一、 回溯问题与三路模型
  回溯问题是常见的一类问题,这种问题的解有很多个,我们需要去发现它的所有的解或者是最优解。解决回溯问题的基本思路就是按一定路径尝试去搜索所有的解,在搜索过程中发现再往前不可能得到这个问题的解,则放弃这条路径并退回上一个步骤继续下一条路径的搜索。处理回溯问题的方法很多,比如递归法、堆栈法、计数法等。
  三路模型是堆栈法的一种实现方式,但是将问题的求解过程进行了简化和规范,使问题的解决更加简单。三路模型将每一次处理过程归纳为三个操作,它们分别是入栈、出栈和检查栈顶的操作。操作过程如下图所示:
  
  图1 三路模型示意图
  每一次进入循环体之后,首先检查当前状态是否是需要的解,如果是需要的解,则输出结果。状态检查完毕之后就有三个路径可选。一是入栈,即再次加入新的信息,继续往前搜索解;二是出栈,即回溯,倒回到上一个步骤,另外寻找求解路径;三是修改栈顶,相当于先出栈再入栈。可以证明这三个操作是完备的,不会遗漏问题的解。在求解具体问题的时候,只需要思考什么情况下入栈、出栈和修改栈顶即可。
  二、 0~1背包问题
  (一)问题描述
  有一些物品,每个物品有自己的重量和价值,现有一背包用来装这些物品,但是背包能承受的重量有限,求这个背包能装下的物品的最大价值。
  (二)三路法求解思路
  给每一个物品编号,按编号从小到大的顺序将其放入到背包中,为了保证求解过程中不重复,这里规定新装物品的编号只能比背包中已有物品的编号大。
  首先是检查操作,只要包里所装物品的总重量没有超标,且其总价值比前一次的最大价值大,则这是一个解。接下来分析三条路径。
  1. 入栈,在此处表示可以继续往背包里面添加物品。
  出栈条件:在总的重量没有超过背包能够承受的总重量,而且还有可以选择的物品则可以入栈。
  出栈操作:装入新的物品,并在装物品的时候需要累加本次装入物品的重量和价值。
  2. 出栈,即本次装载失败,拿出最后装入的物品。
  条件:只有在最后裝入的物品是编号最大的物品时才出栈。
  操作:在出栈的同时,减去拿出物品的重量和价值,同时意味着再前一次选择的物品已经不能得到新的解了,于是,还需要通过修改栈顶数据的方法,将其修改为它的下一个物品,具体操作参见“修改栈顶”。
  3. 修改栈顶,即拿出最后选择的物品,并将其下一个物品放入背包中。
  条件:背包中的物品重量总和超重,且最后加入的物品不是最后一个物品。
  操作:从背包中拿出最后一次放入的物品,从总重中减去其重量,从总价值中减去其价值,然后加入其下一个物品,累加重量和价值。
  三、 汉诺塔
  (一)问题描述
  在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置若干个金盘。把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。
  (二)三路法求解思路
  假设有n个盘子,总的求解思路是先将n-1个盘子按照题目要求通过C从A移到B,然后将A上最大的盘子移动到C,最后,再将B上的n-1个盘子按规则通过A移动到C。
  为了便于表述,将A称为源,将B称为中介,C称为目的。堆栈的每一个元素为一个记录,记录着每一次的移盘任务信息,任务信息包括源、中介、目的和盘子数量四个项目。
  首先是检查操作,当移盘任务的数量为1的时候,我们可以直接移盘,即从源移动到目的。接下来分析三条路径。
  1. 入栈,即启动新的移盘任务。
  条件:盘子数量大于1的时候,需要继续加入子任务来完成这个任务。
  操作:新建一个任务记录,该任务记录的源为最后任务的源,中介为最后任务的目的,目的为最后任务的中介,数量比最后一次移盘任务的数量少1。
  2. 出栈,即该移盘任务已完成,撤销任务记录。
  条件:当移动任务的盘子数量为1时,才表示该任务被执行。
  操作:撤销最后一次记录,对栈顶进行修改,修改过程见下文分析。
  3. 修改栈顶,即更改当前任务信息。
  条件:上一次任务是出栈操作且还有移动任务没有完成。
  操作:将其前一次任务的盘子从源移动到目的,将其源改为其中介,将其中介改为其源,盘子数量减1。
  四、 八皇后问题
  (一)问题描述
  在一个国际象棋的棋盘上放置8个皇后,使它们相互之间不能攻击,即任意两个皇后不能在同一行、同一列、同一对角线和同一反对角线上。
  (二)三路法求解思路
  堆栈的第i个元素表示皇后在这一行上的位置,即列数。从第一行开始,依次为每一行的皇后选择位置。
  首先是检查,检查目前已放置的皇后是否符合题目的要求。接下来分析三个路径。
  1. 入栈,即往棋盘放入皇后。
  条件:满足题目要求,而且皇后数量小于8。
  操作:在该行上为皇后选择位置,放入皇后。
  2. 出栈,即取出该行上的皇后。
  条件:皇后已移到了该行的最后一列,而且当前不是在第一行上。
  操作:拿出在该行上的皇后,并退回到上一行。
  3. 修改栈顶,即将最后放入的皇后从所在行的位置移到下一列。
  条件:皇后不在该行的最后一列。
  操作:将皇后从所在行的位置移到下一列。
  三路模型用规范的方式来分析回溯问题,使其处理过程更加清晰简单,重点放到了每一路的条件和操作上,只要分析清楚了各路径的条件和操作,就能保证结果的正确性。但是,在实际问题处理中,这三条路径的关系还是有很大的区别,这也是容易导致错误的地方,需要谨慎对待。
其他文献
基于2.55 GHz城市微蜂窝场景多输入多输出(MIMO,multiple-input multiple-output)信道实测数据,研究了三维宽带无线信道的时变特性,利用SAGE(space-alternating generalized expectation-maximization)算法提取多径参数,包括水平、垂直面的电波离开角和电波到达角,采用双向匹配算法识别并跟踪多径,建立了多径的"生
为开发低盐快速腌制陇西腊肉,实验以配料中盐含量、腌制方式、干燥方式为因素,以产品感官得分、嫩度和色度为指标,优化陇西腊肉生产工艺。结果发现:湿腌比干腌更利于发色;冷
目的比较开胸术后不同镇痛方法的镇痛效果。方法 90例开胸术患者 ,随机分成术后应用止痛药 (A组 )、硬膜外置管给药 (B组 )及肋间神经冷冻止痛 (C组 ) 3组 ,比较 3组术后镇痛
中华中医药学会:你会中会报[2009]043号文收悉。经研究,同意创办《中医临床研究》杂志,新编国内统一连续出版物号为:CNl1—5895/R,半月刊,大16开,国内外公开发行,由中国科学技术协会主
青少年作为新一代国家的希望,他们的健康成长对于国家和社会的发展来讲,是非常重要的,也是目前社会各界广泛关注的。由于人本身的复杂性,他是在人的生理性、心理性、社会性相
沉积体系域是地质学中十分重要的理论,也是地质中比较常见的地质类型,对石油地质中的沉积体系域进行了分析与研究,首先分析了沉积体系域的类型、特征,然后阐述了沉积体系域的
形成具有全球影响力城市群的过程,本质上就是特定地区通过提升全球价值链上的高度,建设超级产业集群的过程。长三角经过近三十年的一体化发展,已逐渐形成了全球性城市群的雏
选取新疆伊宁市汉语幼儿园维吾尔、哈萨克族儿童共257名,由儿童所在班级老师运用经过修订的“儿童入学准备状况教师评定表”对其发展水平进行团体评定,并给对应的儿童家长发放
小型农田水利工程的设计,决定着农田水利设施后续的施工及应用成果,特别是在当前的时代发展趋势下,城市范围的不断拓展,使得农耕空间受到了挤压,为了保证达成农业发展目标,更