Skip to content

第五章 综合练习

设计原则

本章练习遵循以下原则(参考 Ch1/Ch2):

  • 问题驱动:不只是"计算复杂度",而是"为什么这样设计"
  • 展示推理:不只给答案,还要展示思考过程
  • 多样化:包括反例、变式、边界条件
  • 开放性:有"能否改进""如果条件变化"这类问题

一、问题情境与直觉建立

1. 为什么需要回溯?

八皇后问题中,如果只用"随意放置"的方法,会遇到什么困难?用具体例子说明。

2. 剪枝的直觉

为什么 Sudoku 剪枝能将百万步优化到几十步?用类比(如修剪果树)解释。

3. A 的启发函数*

为什么好的启发函数让 A* 效率提升百倍?用 TSP 的例子说明"下界"的作用。

4. 模拟退火的温度

高温和低温分别起什么作用?用金属退火的类比解释。

5. LLM 重复输出

为什么贪心解码会导致 LLM 陷入重复输出?这与爬山法的局部最优陷阱有何相似?


二、方法应用与实现

6. 八皇后实现

完整实现八皇后求解器,统计:

  • 4 皇后有多少解?
  • 搜索过程追踪:前 3 层的搜索树

7. Sudoku 剪枝实验

对比三种剪枝策略:

  • 无剪枝:步骤数?
  • 前瞻剪枝:步骤数?
  • 约束传播:步骤数?

分析差距原因。

8. A 下界计算*

手工计算 4 城市 TSP 的 MST 下界,验证可容许性。

9. SA 参数实验

测试不同参数($T_0$、$\alpha$)对模拟退火效果的影响,记录:

  • 最优解质量
  • 收敛迭代数

10. ToT 评估函数设计

为 Game of 24 设计 ToT 的评估函数,测试:

  • 评估准确性(是否与实际效果对应)
  • 搜索效率(步骤数)

三、错误诊断与反例

11. 剪枝错误

给定一个"凭直觉剪枝"的代码,分析风险:会不会删掉合法解?

12. A 高估后果*

如果启发函数 $h(n) = 2 \times h^(n)$(高估),A 会发生什么错误?

13. SA 温度太快

如果温度调度太快($\alpha = 0.5$),模拟退火会困在哪里?

14. ToT 评估不准确

如果 ToT 的评估函数是随机评分,会发生什么?

15. 忘记 unmake_move

回溯算法中忘记"恢复决策"(unmake_move),会发生什么错误?


四、方案比较与权衡

16. DFS vs BFS vs 回溯

对比三种策略:

  • 空间复杂度
  • 适用场景
  • 为什么回溯用 DFS?

17. 剪枝策略对比

对比前瞻剪枝、最受约束、约束传播:

  • 剪枝效果
  • 计算代价
  • 适用场景

18. A vs IDA**

对比两种算法:

  • 空间峰值
  • 时间成本
  • 适用场景(大规模 vs 小规模)

19. 爬山法 vs 模拟退火

对比两种方法:

  • 解质量
  • 时间成本
  • 局部最优陷阱

20. CoT vs ToT vs GoT

对比三种 LLM 推理策略:

  • 成功率
  • 计算成本
  • 适用场景

五、变式与边界条件

21. 无约束排列生成

如果排列生成没有任何约束,回溯效率如何?分析为什么剪枝无效。

22. TSP 的松弛程度

对比三种松弛:

  • $h=0$(无松弛)
  • MST 松弛
  • 强松弛(精确估计)

分析下界质量与计算代价的权衡。

23. Sudoku 的对称性

如果 Sudoku 棋盘有对称性(如旋转对称),如何利用对称性剪枝?

24. 15-puzzle 的曼哈顿距离

为什么曼哈顿距离是可容许的?如果棋盘有障碍,曼哈顿距离是否仍可容许?

25. 自适应温度

设计一个自适应温度调度策略:根据搜索进度动态调整温度。


六、开放设计

26. 改进回溯

如果回溯太慢,如何改进?(提示:剪枝、启发函数、分支限界)

27. 剪枝设计

为排列生成问题设计一个剪枝策略,分析效果。

28. 启发函数创新

为 Sudoku 设计一个 A* 启发函数,验证可容许性。

29. 自适应剪枝

设计一个 Agent,动态选择剪枝策略:

  • 监控:搜索进度、剩余候选数
  • 决策:何时用前瞻、何时用约束传播

30. LLM 推理策略选择

设计一个 Agent,根据问题特征自动选择推理策略(CoT/ToT/GoT)。


七、综合应用

31. 课程安排问题

用回溯+剪枝解决实际问题:安排课程表(避免时间冲突)。

32. 排课 Agent

设计一个排课 Agent,组合至少两种策略(如回溯 + SA),分析效果。

33. LLM 推理优化

设计一个 Agent,检测 LLM 陷入局部最优,自动切换策略(CoT → ToT)。

34. 真实 TSP

用 A* 或 SA 解决真实城市的 TSP(如中国 10 个省会城市),对比效果。

35. NP-hard 综合挑战

选择一个 NP-hard 问题(如顶点覆盖或 SAT),设计求解器,组合至少两种策略。


八、思考题

36. 为什么回溯保证正确但不保证效率?

回溯的系统枚举保证不遗漏解(正确性),但解空间可能巨大(指数级)。效率取决于什么?

37. 剪枝会不会删掉合法解?

不会,只要剪枝条件基于"必然无解"的逻辑。用例子说明。

38. 为什么理解搜索策略能帮助理解 LLM 推理?

因为它们是同构的——同一计算思想的不同实例。分析局限性对应。

39. 如何设计好的评估函数?

从剪枝经验迁移:外部验证、部分信用、先粗略后精细。

40. 搜索策略的演进路径是什么?

从贪心到 GoT:贪心 → DFS → 回溯 → A* → SA → ToT → GoT。分析每一步的改进。


九、LLM 协同实验

41. 策略对比实验

让 LLM 用不同策略求解同一问题(如 Game of 24),记录:

  • CoT 成功率
  • ToT 成功率
  • 计算成本

42. 评估函数测试

让 LLM 自评候选思想,对比人工评分,分析准确性。

43. 温度调参实验

测试不同 Temperature(0.1、1.0、2.0)对 LLM 输出多样性的影响。

44. 故障诊断

给定 LLM 推理失败案例(如重复输出),诊断是哪种策略的局限,推荐改进。

45. 综合挑战

用 LLM 协同解决 Sudoku:

  • CoT:线性推理
  • ToT:多候选探索 对比效果。

附录:实验数据模板

剪枝效果对比

剪枝策略步骤数时间剪枝判断
无剪枝
前瞻剪枝
约束传播

A* vs 回溯

n回溯节点数A* 节点数效率倍数
8
10

SA 参数实验

T₀α最优解质量收敛迭代数
1000.9
10000.99

参考文献

  • Skiena S S. The Algorithm Design Manual[M]. 3rd ed. Springer, 2020.
  • Yao S, Yu D, Zhao J, et al. Tree of Thoughts[C]//NeurIPS. 2023.
  • Besta M, et al. Graph of Thoughts[C]//AAAI. 2024.
  • Huang J, et al. LLMs Cannot Self-Correct Reasoning[C]//ICLR. 2024.
  • Snell C, et al. Scaling LLM Test-Time Compute[J]. 2024.

新时代的算法课程