拿下技术面上传简历

有一个构建流水线排序服务:n 个编译单元要排成一个执行序列,先执行 i 再执行 j 的切换代价是 c[i][j](非负、不对称),目标是序列总代价最小。团队用状态压缩 DP:dp[mask][i] 表示已执行集合为 mask、最后一个执行 i 的最小代价,n=20 时跑得很好。现在业务要求支持 n=26,且允许结果比最优差不超过 3%。请判断原方案还能不能用,说明你会怎么改,以及你怎么向业务解释这个取舍。

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

面试官在考什么

考察他对 2^n 状态空间的内存和访存特性的直觉,以及能否用可量化的近似方案回应业务诉求,而不是死磕精确解。

状态压缩

回答框架 · 前两步

  1. 状态数 2^n × n:n=20 约 2e7,n=26 约 1.7e9;即使每状态只存 4 字节也是 GB 级,单机放不下。
  2. 转移每个状态要枚举下一个 j,整体 O(2^n · n^2),n=26 时约 4e10,时间和内存双双不成立。

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

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

延伸阅读

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

同一能力域的其他题