拿下技术面上传简历

TSP 精确求解,n=22,边权为非负整数且最大边权不超过 1000。要在 64MB 内存、2 秒内跑完。Held-Karp 的 dp[mask][last] 直接开是 2^n*n 个 int,约 368MB。你会怎么设计状态和遍历顺序把峰值内存降下来?如果 n 改成 30,你还会坚持精确 DP 吗?

数据结构与算法动态规划与贪心3-5 年知识点 1 个

面试官在考什么

判断候选人是否理解状态压缩 DP 的状态数和内存量级,能否用分层遍历、压缩存储做工程取舍,并知道 NP-hard 问题的边界。

状态压缩

回答框架 · 前两步

  1. Held-Karp 状态:dp[mask][last] 表示从起点出发、经过 mask 中所有点且最后停在 last 的最短距离,转移 dp[mask|1<<j][j]=min(dp[mask][last]+w[last][j])。
  2. 按 popcount 分层,只保留上一层和当前层,峰值约 C(n, n/2)*n 而非 2^n*n;时间仍 O(n^2 2^n)。

还有 3 条答案要点、 3 层追问、 6 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题