【发布时间】:2014-03-19 15:41:37
【问题描述】:
我有一个计算问题,我有一组可以只赠送一次的标签,以及许多项目,每个项目都有一组他们可以接受的可能的标签选择。我需要以这样一种方式分配标签,即只要有问题的解决方案,每个项目都会获得一个标签。
举个具体的例子,如果我有这样的字典:
options = {
'a': [1],
'b': [2, 3],
'c': [1, 2]
}
..那么解决方案是:
{'a': 1, 'b': 3, 'c': 2}
我还需要能够扩展问题以处理多个约束,例如
[1], ['A', 'B'] # -> (1, A) or (1, B)
[1, 2, 3], ['A', 'C'] # -> (3, C)
[1, 2], ['A', 'C'] # -> (2, A) or (2, B)
我已经尝试为简单的情况提出基于优先级队列的可行解决方案,但是由于多个约束而完全崩溃。我可以使用itertools.permutations 强制解决方案,但我更喜欢高效的实现。是否有任何已知的算法可能适用于这个问题?
【问题讨论】:
-
如果有多个解决方案,比如你有 options = {'a': [1,2],'b': [2, 3],'c': [1, 2 ]),然后是解决方案 {'a': [1,2], 'b': 3, 'c': [1,2]} 还是你想得到一组所有的解决方案?
-
只有一种解决方案。这个问题的范围是避免不完整的解决方案,而不是列举所有的可能性。
标签: python algorithm constraint-programming