我有一個計算問題,其中有一組標籤可以只給出一次,還有一些項目每個都有一組他們可以接受的標籤。我需要以這樣的方式分配標籤,即每當遇到問題的解決方案時,每個項目都會獲得標籤。用於解決與重疊選項衝突的算法
舉一個具體的例子,如果我有這樣的詞典:
options = {
'a': [1],
'b': [2, 3],
'c': [1, 2]
}
..then的解決辦法是:
{'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
解決方案,但我更喜歡有效的實現。有沒有可能適用於這個問題的已知算法?
如果有多個解決方案,就像如果你有選項= {'a':[1,2],'b':[2,3],'c':[1,2])是解決方案,則{'a':[1,2] ,'b':3,'c':[1,2]}還是你想得到一組解決方案? – MaSp
只是一個解決方案。這個問題的範圍是避免不完整的解決方案,而不是列舉所有的可能性。 – lyschoening