【发布时间】:2020-07-16 07:18:46
【问题描述】:
有什么办法可以删除最小的重叠圆,得到最大的不重叠圆?
问题说明:
我想删除重叠的圆圈,但保持结果最大。对于上面的问题,结果应该是这样的:
我尝试通过创建每个圆组合然后计算相交和不相交的数量来对其进行硬编码。但是,这需要的时间太长。这类问题有什么快速的解决方法吗?
【问题讨论】:
-
我在这里找到了解决方案,cs.stackexchange.com/questions/35876/…,有人可以解释一下吗?
-
D.W.的答案在您提供的链接上确实是解决它的好方法。变量
x_i有一个二进制值:0 是未选中的圆,1 是选中的圆。您想最大化所选圆圈的数量,因此最大化总和x_1+...+x_n。约束确保不能同时选择两个重叠的圆。这类整数线性规划问题有现成的最小化器 -
你可以看看this tutorial。纸浆似乎可以完成这项工作
-
目前我还在学习回溯,然后我将学习 ILP。这是因为我不是cs背景,所以我不知道这种编程方式。谢谢罗曼,我以后会用源码学习。
标签: python circle-pack