【发布时间】:2011-11-29 16:17:06
【问题描述】:
这个问题是在一次采访中问我的,很尴尬地暴露了我在动态规划方面的不足。如果有人能帮我破解这个,我将不胜感激。此外,如果您可以在设计解决方案的过程中解释您的思维过程,这对我(和其他人)将非常有帮助,因为当我看到使用动态编程范式但难以实现的解决方案时,我似乎能够理解和我自己的一样。
事不宜迟,下面是我被问到的问题。
给定一个整数i,并在实线上设置k点x1,x2,...xk中的X,从集合X中选择i点,以便使用动态规划最小化从X 中的每个点到i 中的点的距离总和。
【问题讨论】:
-
你知道,除非这份工作是专门针对运筹学工作的,否则我觉得这是一个不合格的面试问题。也就是说,应该轻轻而坚定地握住面试官的手,感谢他们,并解释说,在面试中使用这种愚蠢的问题证明他们不是一个应该被雇用的地方。
-
我们是否从 X 中删除了 I 中的点?因为如果没有,我不确定我是否看到了问题的重点。
-
@IgnacioVazquez-Abrams 没关系,因为我没有,那么总和将为 0。问题的关键是选择一个具有固定大小的子集,以便每个子集的距离总和X 中指向集合的点是最小的,并且您以类似于背包的方式接近它
-
这里有一个提示。尝试解决这个相关但更容易看到的问题。给定一个整数 i 和实线上有 k 个点的集合 X,从集合 X 中选择 I 个点,以使 X 中的每个点到 I 中的点的右距离最小。正确的距离(a, b) = b - a if b > a,否则为无穷大。
-
这听起来像是谷歌要求的工作,实际上主要涉及将网络元素向左或向右移动几个像素。查理是对的。
标签: algorithm dynamic-programming