Java

回溯算法——对解空间(搜索树)的一种策略搜索(深度优先搜索)

2017-12-17  本文已影响0人  王侦

目录

1.回溯算法

1.1 回溯算法简介

1.2 一般回溯方法

1)一般回溯方法概念
一般回溯方法应用到一类搜索问题中,这类问题的解由满足事先定义好的某个约束的向量(x1, x2, ..., xi)组成。这里i是0到n之间的某个整数,其中n是一个取决于问题阐述的常量。
1-1) 对于一些问题,i是固定不变的
例如三着色和八皇后问题

1-2) 另一些问题中,i对于不同的解可能有所不同(可转换为统一的长度)

2)一般回溯方法的描述

3)(获得一个解)回溯算法的伪代码描述

1)递归形式


递归回溯算法

2)迭代形式


迭代回溯算法

2.收费公路重建问题(通过考虑最大值策略,对可能性空间Xi进行了大幅度裁剪)

2.1 问题描述

根据N(N-1)/2个形如|xi - xj|(i≠j)的距离,重新构造这N个点集。
在物理学和分子生物学中都有应用。
重建问题没有人能够给出一个算法保证在多项式时间内完成计算。在最坏情形下可能要花费指数时间。

2.2 一个例子

D是距离集合,并设|D| = N(N-1)/2。
D = {1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 5, 6, 7, 8, 10}
可知N = 6.

收费公路重建问题的决策树

2.3 收费公路重建算法

算法的核心思路:

驱动代码
回溯步骤

2.4 算法分析

可以将D作为平衡二叉查找树保存(代码需要修改)。如果从未回溯,那么最多有O(N2)涉及到对D(平衡二叉查找树)的查找和删除操作。因此,在没有回溯的情况下,运行时间为O(N2logN)。

3.博弈

3.1 问题描述

3.2 极小极大策略


(draw在英语表示和棋)

3.3 极小极大策略用于更复杂的游戏——西洋跳棋、国际象棋

3.4 α-β裁剪

3.4.1 博弈树(game tree)

3.4.2 α裁剪

3.4.3 β裁剪

4.三着色问题

4.1 问题描述

4.2 问题求解

回溯法求解三着色问题

回溯法的基本特征:

4.2.1 递归算法(假设顶点集合是{1, 2, ..., n})

4.2.3 迭代算法

4.2.4 时间复杂度

最坏情况下生成了O(3n)个结点,对于每个结点,都需要O(n)的时间来检查。因此,最坏情况为O(n3n)。

5.八皇后问题

5.1 问题描述

5.2 考虑4皇后问题的解法

5.2.1 解空间——搜索空间

5.2.2 回溯法求解


回溯法求解4皇后问题的搜素树

6.哈密尔顿回路问题

6.1 问题描述

6.2 问题求解

回溯法步骤:

6.3 一个示例

上一篇 下一篇

猜你喜欢

热点阅读