拿下技术面上传简历

你负责一个批处理集群的作业排序:单机、n 个作业,作业 i 的处理时间是 p_i,业务权重 w_i 表示它每等待一个单位时间的损失,目标是让 Σ w_i · C_i 最小(C_i 为完成时间)。同事提出按 p_i / w_i 从小到大排序依次执行。请判断这个贪心是否正确、用交换论证把它证出来;然后回答:如果作业之间有前置依赖(必须等所有前驱完成才能开始),这个排序还能不能直接用,你会怎么改。

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

面试官在考什么

考察他能否给出严格的交换论证而不是“直觉上最优”,以及能否识别贪心成立的前提(单机、无依赖、权重加性)在加上新约束后失效。

贪心证明

回答框架 · 前两步

  1. 结论:单机、无依赖下按 p_i/w_i 升序执行(Smith 规则)最优。
  2. 交换论证:考虑相邻两个作业 a、b,交换它们不影响其余作业的完成时间,只影响这两项,顺序 a→b 与 b→a 之差为 w_a·p_b − w_b·p_a,因此 p_a/w_a ≤ p_b/w_b 时 a 在前不劣;任意序列可经相邻交换变成该序且代价不增。

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

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

延伸阅读

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

同一能力域的其他题