拿下技术面上传简历

有 n 个城市(n ≤ 18),任意两城之间的距离 d[i][j] 已知,求从 0 号城市出发、每个城市恰好经过一次、最后回到 0 号城市的最短回路。你用 f[mask][i] 来做:(1) mask 和 i 分别表示什么,mask 的第 k 位为 1 代表什么?(2) 写出状态转移,特别是怎么枚举"下一步要去哪"。 (3) 状态数和总时间复杂度分别是多少,n 取到多少时这个做法就基本不能用了?

数据结构与算法动态规划与贪心校招知识点 1 个

面试官在考什么

判断候选人是否真正理解"用一个整数的二进制位表示集合"这个核心思想,以及是否具备估算状态规模、知道算法适用边界的能力。

状态压缩

回答框架 · 前两步

  1. mask 是一个 0 到 2^n - 1 的整数,第 k 位为 1 表示城市 k 已经访问过,用整数的位当集合用。
  2. f[mask][i] 表示"已经访问的城市集合是 mask、当前停在城市 i"的最小路径长度;初始 f[1<<0][0] = 0,其余为无穷大。

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

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

延伸阅读

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

同一能力域的其他题