
算法
曼车斯基
这个作者很懒,什么都没留下…
展开
-
A* 算法求解八数码问题
前面见过宽度优先搜索和深度优先搜索求解八数码问题。那两个方法都是盲目搜索。今天看启发式搜索。A算法: 利用评价函数来选择下一个节点。 图引用自 -北京联合大学 彭涛老师在 中国慕课的 《人工智能概论》。估价函数没有定论,可以有不同方法。 这里采用处在错误位置的数字的数量。代码在: github一组测试数据的 执行搜索的过程如下:A* 算法 (宽度优先)求解八数码问题========== 宽度优先求解八数码问题,搜索过程是 ==========[[2 0 3..原创 2022-04-02 22:17:17 · 10451 阅读 · 0 评论 -
深度优先搜索求解八数码问题
'''宽度优先算法求解八数码问题;'''import numpy as npclass State: ''' 状态图 ''' def __init__(self, state, directionFlag=None, parent=None): self.state = state # 当前状态 self.depth = parent.depth + 1 if parent is not None else 0 ...原创 2022-03-21 20:03:17 · 12761 阅读 · 1 评论 -
八数码问题的广度优先搜索
3×3九宫棋盘,放置数码为1-8的8个棋牌,剩下一个空格,只能通过棋牌向空格的移动来改变棋盘的布局。要求:根据给定的初始状态和目标状态,空格只能上下左右4个方向移动,一次只能移动一个格子,如何才能从初始状态到达目标状态,找到合法的走步序列。'''宽度优先算法求解八数码问题;'''import numpy as npclass State: ''' 状态图 ''' def __init__(self, state, directionFlag=None...原创 2022-03-20 14:11:47 · 1878 阅读 · 0 评论 -
宽度优先算法求解八数码问题
8-puzzle problem3×3九宫棋盘,放置数码为1-8的8个棋牌,剩下一个空格,只能通过棋牌向空格的移动来改变棋盘的布局。要求:根据给定的初始状态和目标状态,空格只能上下左右4个方向移动,一次只能移动一个格子,如何才能从初始状态到达目标状态,找到合法的走步序列。原则:优先扩展深度浅的节点思路:从根节点(起始节点)开始按层进行搜索,即按层来扩展节点。按层扩展节点指前一层的节点扩展完毕后才进行下一层节点的扩展,依次迭代,直到到达目标节点为止。->空格的移动...原创 2022-03-16 14:04:50 · 1443 阅读 · 0 评论 -
动态规划法解0-1背包问题
0-1背包问题:有一个贼在偷窃一家商店时,发现有n件物品,第i件物品价值vi,重wi。他希望带走的东西越值钱越好,但他的背包中至多只能装下C的东西。应该带走哪几样东西,使得装入背包的物品价值最大?这个问题之所以称为0-1背包,是因为每件物品或被带走;或被留下;小偷不能只带走某个物品的一部分或带走同一物品两次。动态规划法解题的步骤:1. 找出最优解的性质;2. 递归地定义最优值;3....原创 2019-02-16 21:48:11 · 611 阅读 · 0 评论 -
快速排序
快速排序是基于分治策略的一种排序算法。基本思想是对输入的数组z[left, right] 按以下2个步骤进行排序:1)分解: 以 a[left] 为基准元素,将a[left,right] 划分为3段, a[left, q-1], a[q], a[q+1, right], 使得a[left, q-1]中的任何元素都小于等于a[q], a[q+1, right]中任何元素都大于等于 a[q]; ...原创 2019-01-13 16:47:00 · 268 阅读 · 0 评论 -
优先队列式分支限界法解0-1背包问题
0-1 背包问题的描述在上一篇《回溯法解0-1背包问题》中已有说明。现在采用优先队列式分支限界法来求解;1. 优先队列中节点i的优先级由该节点的上界函数bound计算出的值upperprofit给出。该上界函数与回溯法中计算方法一致。子集树中以i结点为跟的子树的任一节点的上界不会超过i节点的上界。《算法设计与分析》P171给出的算法存在几个老问题:1)数组索引不采用从0开始的编...原创 2019-01-13 11:29:06 · 7445 阅读 · 0 评论 -
回溯法解0-1背包问题。
0-1背包问题:有一个贼在偷窃一家商店时,发现有n件物品,第i件物品价值vi,重wi。他希望带走的东西越值钱越好,但他的背包中至多只能装下C的东西。应该带走哪几样东西,使得装入背包的物品价值最大?这个问题之所以称为0-1背包,是因为每件物品或被带走;或被留下;小偷不能只带走某个物品的一部分或带走同一物品两次。《算法设计与分析》P133给出的算法并不完整,不利于通过代码来辅助理解该算法的基本思想...原创 2019-01-07 21:25:09 · 776 阅读 · 0 评论 -
Dijkstra贪心算法求单源最短路径
给定一个带权有向图G=(V,E),其中每条边的权是一个非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到其他所有各顶点的最短路径长度。这里的长度就是指路上各边权之和。Dijkstra算法是解单源最短路径的贪心算法。《算法设计与分析》一书中给出的代码存在问题,其中一个明显的错误就是用==对浮点数进行相等判断。对书中的代码进行修订后实现如下:public static void...原创 2019-01-06 15:00:29 · 2477 阅读 · 10 评论 -
优先队列式分支限界法 解装载问题
继续学习装载问题上一篇我们学习了用队列式分支限界法求解,这一次采用优先队列式分支限界法来求解。有一批共n个集装箱要装上2艘载重量分别为c1,c2的轮船,其中集装箱i的重量为wi,且要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。可证明,采用如下策略可以得到一个最优装载方案:先尽可能的将第一艘船装满,其次将剩余的集装箱装到第二艘船上。其实质是要求第一艘船的最优装载。 其解...原创 2018-12-28 15:29:53 · 6411 阅读 · 0 评论 -
队列式分支限界法 解装载问题
装载问题有一批共n个集装箱要装上2艘载重量分别为c1,c2的轮船,其中集装箱i的重量为wi,且要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。可证明,采用如下策略可以得到一个最优装载方案:先尽可能的将第一艘船装满,其次将剩余的集装箱装到第二艘船上。其实质是要求第一艘船的最优装载。 其解空间树是一棵子集树。《算法设计与分析》-王晓东著 一书P159中给出的java算法是...原创 2018-12-27 20:48:12 · 4614 阅读 · 0 评论