Code前端首页关于Code前端联系我们

Python算法学习:启发式算法

terry 2年前 (2023-09-27) 阅读数 74 #数据结构与算法

启发式算法也称为回溯算法。这实际上是一个类似枚举的试图查找的过程。它主要是在搜索过程中寻找问题的解决方案。当确定不再满足求解条件时。 ,只需“回滚”并尝试另一条路线。回溯法是一种根据优化条件向前搜索以达到目标的优化搜索方法。但当你研究到了某一步,意识到原来的选择不是最优的,或者无法达到目标时,你就会退一步,决定另一种选择。这种不起作用时返回并重试的技术就是回滚方法,某种状态下满足回滚条件的点称为“回滚点”。许多复杂、大规模的问题都可以使用回溯法,被誉为“解决问题的通用方法”。 ?

2。定义一个易于搜索的解空间结构,使得整个解空间可以很容易地通过回溯方法搜索到。

3。首先对解空间进行深度搜索,并在搜索过程中使用剪枝函数来避免无效搜索。

确定解空间的组织结构后,回溯法从初始节点(根节点)开始,对整个解空间进行深度搜索。该初始节点成为活动节点,也成为当前扩展节点。在当前扩展节点,找到向纵的深度方向并移动到新节点。这个新节点成为新的活动节点并成为当前的扩展节点。如果当前扩展节点无法在深度方向上移动,则当前扩展节点成为死节点。这时,你需要向后移动(返回)到最近的滑动节点,并使该滑动节点成为当前的扩展节点。这样,回溯方法就递归地搜索解空间,直到找到所需的解或者解空间中没有存活节点为止。

基本思路可以概括为:从一条路往前走,能进就进,不能就退,再尝试另一条路,直到走出来。

2.八皇后问题

问题描述:

将八个皇后放在8*8的棋盘上,使它们不能互相攻击,也就是说任意两个皇后不能在同一行或同一列,我同意用对角线问有多少种放置方法?

救援代码:

1234567891011121314151617181920212223242526272829303132 n = int() 输入())x = []#一解 #检测冲突:判断x[k]是否与之前的冲突x[0]~x[k-1]d一致ef 冲突(k): 全局 x 1对于 在范围(k):#前一个 x[0]~x[k-1] 的转换 if x [i] = x[k] abs(x[i]- x[k]) abs(i- k):
1234567891011121314151617181920212223242526272829303132返回1返回 False #使用子集树模板 def queen(s ):全球 n n:      X.append(x[:])#保存最下面一行的解超出 : . i 范围(n): #遍历n~n- 1列如果不是 冲突:#修剪 +)                                                      show(x):  全局 n 对于 范围(n): 打印 ('.'*(x[i])'Q''+'。' *(n- x[i]-1))#测试()))打印(X[-1] ,'\n')打印 ((X[-1 ],) . 子集存储行时的当前解序号为最大值,不满足则遍历n~n。 -1列,最后用Q代表皇后实现可视化,最后输出数据集查看。

3.迷宫问题

问题描述:

你知道走出迷宫的路,你就要找到出去的路,如果有这样的路,写出它的路径。

穿越迷宫的过程发生在九个方格的网格中,可以向上、下、左、右、左上、左下、右上、右下八个方向移动。

代码如下:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 导入 p打印,复制=#迷宫(1为迷宫)墙,0是路径)#迷宫=[[1,1,1,1,1,1,1111],[0,0,1,0,1,1,1,101] ,       [1, 1, 0, 1, 0, 1, 1011]、 [1, 0, 1, 1, 1, 0, 0, 1, 1, 1], [1] 、10011011]、 [1, 1 ] 、 01111101]、   [1,0]、10011110]、 [1, 1 ] 、1101111]]m、n =8, 10 # 8行10列 输入 = (1, 0)#迷宫入口=路径 =[输入] # 解(路径) 路径 = [] # 一组解决方案 # 运动方向 ( 8) 顺时针:S、EN、V、ES、J、Z、Z、Z)方向 = [(-1, 0), ( - 1, 1), (0, 1), (1, 1), (1, 0), (1, - 1), (0, -1), (-1, -1)]# 冲突检测def 冲突(nx, ny):全局 m,n,迷宫#是在迷宫里吗是否可以穿越  0

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门