【发布时间】:2011-12-12 19:09:53
【问题描述】:
这是基于我读到的一篇关于大型软件公司提出的难题和面试问题的文章,但它有一个转折点......
一般问题:
在电影院中让人们直接坐在朋友旁边而不是敌人旁边的算法是什么。
技术问题:
给定一个 N × M 网格,用 N * M - 1 个项目填充网格。每个项目对于其他 N * M - 2 个项目都有一个关联布尔值。在 N 的每一行中,直接位于其他项目旁边的项目应该与其他项目具有正关联值。然而,列并不重要,即一个项目可以是它前面的项目的“敌人”。 注意:如果项目 A 对 B 具有正关联值,则这意味着 B 对 A 也具有正关联值。对于负关联值也一样。保证一个项目与至少一个其他项目具有正相关性。 另外,您可以在开始将它们放入网格之前访问所有项目及其关联值。
评论:
从昨天开始我一直在研究这个问题并思考它,从我发现它让我想起了 bin packing problem 并添加了一些要求。在一些空闲时间我试图实现它,但是一大群“敌人”坐在一起。我确信大多数情况下至少需要一对敌人并排坐着,但我的解决方案远非最佳。它实际上看起来好像我刚刚随机化了它。
就我的实现而言,我设置了 N = 10,M = 10,项目数 = 99,并且每个项目都有一个大小为 99 的数组,其中每个项目都有一个随机布尔值,表示友谊对应的项目编号。这意味着每个项目都有一个与他们自己对应的友谊值,我只是忽略了这个值。
我计划稍后再重新实现它,我将发布代码。谁能想出一个“好”的方法来减少敌人之间的座位冲突?
【问题讨论】:
-
它让我想起了电子元件的布局算法。我希望对其进行几次尝试,然后进行某种判断算法来选择“最佳”算法。这是我解决“放置”问题的一般方法,它非常适合迭代计算解决方案,而不是直接数值公式。
-
我认为是 .. 如果安德斯克想要手表让他坐在柱子后面或戴大帽子的人后面,因为它太冷而拒绝摘下它。
-
好无聊!让人们坐在座位上以最大化敌人之间的战斗会更令人兴奋。
-
这绝对是 NP-Hard,所以 - 这类问题没有已知的多项式解决方案,您是否也在寻找证明?或者您是否知道这一事实并在这些范围内寻找解决方案?你目前最好的解决方案是什么?
-
这个问题可能会在Mathematics 或Comp Sci Theory 找到更好的归宿,因为它与编程无关。
标签: algorithm language-agnostic multidimensional-array