我想使用Scala解决简单的资源分配问题 我现在拥有的是能够执行此任务的任务和资源列表:
val t1 = List(1, 2)
val t2 = List(2, 3, 4)
val t3 = List(0)
val t4 = List(1, 4)
其中t
只是任务而列表代表资源ID。让我们假设我可以将任务ID与资源ID结合起来:
val a1 = List((1, 1), (1, 2))
val a2 = List((2, 2), (2, 3), (2, 4))
val a3 = List((3, 0))
val a4 = List((4, 1), (4, 4))
其中a
表示特定任务的分配。
所以下一步是收集所有作业并将它们平放在一个列表中:
val assignments = List((1, 1), (1, 2), (2, 2), (2, 3), (2, 4), (3, 0), (4, 1), (4, 4))
我想要的是所有可能的组合,其中包含每个任务ID不同的分配列表。
val result1 = List((1, 1), (2, 3), (3, 0), (4, 4))
val result2 = List((1, 2), (2, 2), (3, 0), (4, 1))
...
我该怎么做?
答案 0 :(得分:2)
任务数量是否固定为4?如果是这样的话非常简单:
val t1 = List(1, 2)
val t2 = List(2, 3, 4)
val t3 = List(0)
val t4 = List(1, 4)
val as = for {
a1 ← t1
a2 ← t2
a3 ← t3
a4 ← t4
} yield List((1,a1), (2, a2), (3, a3), (4, a4))
as foreach println
输出是:
List((1,1), (2,2), (3,0), (4,1))
List((1,1), (2,2), (3,0), (4,4))
List((1,1), (2,3), (3,0), (4,1))
List((1,1), (2,3), (3,0), (4,4))
List((1,1), (2,4), (3,0), (4,1))
List((1,1), (2,4), (3,0), (4,4))
List((1,2), (2,2), (3,0), (4,1))
List((1,2), (2,2), (3,0), (4,4))
List((1,2), (2,3), (3,0), (4,1))
List((1,2), (2,3), (3,0), (4,4))
List((1,2), (2,4), (3,0), (4,1))
List((1,2), (2,4), (3,0), (4,4))