【发布时间】:2014-03-31 01:57:37
【问题描述】:
这是一个有点奇怪的要求,请耐心等待。
我有两个值 X 和 Y,它们来自三个可能的范围列表。一个列表是 X 值的范围,一个列表是 Y 值的范围,最后一个列表是 X 和 Y 值组合的范围。
我需要做的是找到所有可能的解决方案。
一个例子可能会让事情更清楚吗?
X 范围
答:11-13; 乙:14-16; C:17-19; D:20-22。
Y 范围
答:11-28; B:29-46; C:47-64。
X、Y 范围
答:6-7、6-14; B:8-9、15-23; C:10-11、24-32。
X = 25,Y = 67
所以一种解决方案是:
- X 范围 = B,X = 14
- Y 范围 = B,Y = 35
- X、Y 范围 = C、X、Y = 11、32
另一种解决方案是:
- X 范围 = B,X = 15
- Y 范围 = B,Y = 43
- X、Y 范围 = C、X、Y = 10、24
我目前的解决方案是将三个范围放入列表中,然后使用蛮力尝试每一个组合,拒绝任何没有给出正确答案的组合。这意味着绝大多数解决方案都会产生无效的结果。
考虑到浪费的努力,这实际上表现得还不错。问题是我需要让这个列表比我的示例更长,并且可能跨越多个变量。
我的蛮力解决方案将适用于更复杂的要求,但它开始变得非常缓慢。
有没有更优雅的方法来解决这个问题?
【问题讨论】:
-
排序范围是否会有所帮助,也许是低限,这样您就可以提前退出循环?
-
是的,这会有所帮助,而且我可能还可以做其他事情来使蛮力解决方案更有效地工作。但是,我真的希望我在这里缺少一些东西,并且有一种从根本上更好的方法来做到这一点。
-
所以你首先建立列表的所有组合,然后拒绝错误的答案?你能把这些步骤倒过来吗?