回溯 ¶
回溯法是一种搜索算法,它通过不断地选择当前状态的下一个可能状态,直到找到解决方案或者发现当前状态没有解决方案,然后回溯到上一个状态,继续搜索。但是,单纯的暴力搜索会导致时间复杂度过高,因此我们需要一些技巧来剪枝,以减少搜索空间。
八皇后问题 ¶
收费站重建问题 (The Turnpike Reconstruction Problem) ¶
给定 \(N\) 个 \(x\) 轴上的点,其坐标满足 \(x_1 < x_2 < \cdots < x_N\),假设 \(x_1 = 0\),并且给定 \(N(N-1)/2\) 个距离,求这 \(N\) 个点的坐标。
整个过程首先需要确定点的个数 \(N\),确定 \(x_1 = 0\),之后需要对整个距离集进行排序,然后由最大的距离确定 \(x_N\),然后根据第二大的距离确定 \(x_{N-1}\),以此类推。
MinMax 与 Alpha-Beta 剪枝 ¶
以井字棋为例,我们可以用一个函数来衡量某个位置的价值,如
\[
f(P) = W_{enemy} - W_{self},
\]
其中 \(W\) 指利用这个位置取得胜利的次数。人机对抗时,人类通常试图减小这个函数的值,而计算机则试图增大这个函数的值。MinMax 算法就是在这个基础上进行的。
Alpha-Beta 剪枝是 MinMax 算法的一个优化,它通过剪枝来减少搜索空间,从而提高搜索效率。其中 Alpha 剪枝是指对于 \(\min\) 结点,如果其兄弟结点的值比当前结点的值大,那么就不再搜索当前结点的子结点;Beta 剪枝是指对于 \(\max\) 结点,如果其兄弟结点的值比当前结点的值小,那么就不再搜索当前结点的子结点。