算法的乐趣 · 第十三节
《算法的乐趣》第十三节
当候选解之间存在关联时,无法预先确定全部状态,只能从初始状态出发,依据状态间的演化关系逐步扩展,最终形成一棵状态树,或用图来组织解空间。
当候选解之间存在关联时,无法预先确定全部状态,只能从初始状态出发,依据状态间的演化关系逐步扩展,最终形成一棵状态树,或用图来组织解空间。
穷举解空间的策略即搜索算法的设计策略,常用盲目搜索(广度优先、深度优先)和启发式搜索(利用状态分布、评估函数、贪婪策略等信息引导)。为加快求解,常配合剪枝:判定某状态不可能产生最优解即停止该分支,或对重复出现的状态计算校验值以避免死循环;也可限制搜索深度,但可能错过最优解。当问题规模过大无法完整搜索时,需设定收敛原则,找到较好解即返回。
书中以字符方程 WWWDOT-GOOGLE=DOTCOM 为例:9 个字母各代表 0~9 中互不相同的数字,首位不能为 0,共约 362 万种组合。算法用递归逐个为字母分配数字,对首位为 0 的情况剪枝,判断次数降至约 254 万,最终求得两组合法解。本章总结指出,算法设计思想应灵活运用,不可生搬硬套。