我的问题: 我有 n 个“项目”要放在一个整数轴上。每个项目都包含多个位置选择,表示为整数的封闭区间。这些间隔可以有一些重叠的元素。目标是在 int 轴上找到一个不重叠的位置(如果有的话),并且具有最大的间隔邻接数。
上面使用的术语的更多细节: 1)重叠:区间 [1, 4] 和 [3, 6] 有两个重叠的元素 {3} 和 {4};区间 [2, 5] 和 [6, 10] 不重叠。2)区间邻接:区间[a,b]和[b+1,c]称为相邻。此示例的区间邻接数为 1。n 项的最大可能区间邻接数为 n-1,当放置使 n 个区间成对相邻时会发生这种情况。
示例: 有 3 个项目;他们的安置选择列在这里
item1 has 2 choices: [1, 4], [2, 5]
item2 has 3 choices: [5, 8], [9, 11], [16, 18]
item3 has 2 choices: [3, 5], [13, 15]
一种可行的安置是
[1, 4](item1), [5, 8](item2), [13, 15](item3)
另外两个可行的位置是
[1, 4](item1), [16, 18](item2), [13, 15](item3);
和
[2, 5](item1), [16, 18](item2), [13, 15](item3).
此示例中的所有这三个位置都是最佳的。区间邻接数为 1。
我的问题: 有没有比枚举所有可能性更好的方法?我只能想到如果一个项目的区间选择与另一个项目的所有选择重叠,那么可以排除这个选择。欢迎任何想法:)