2017-10-17 48 views
-1

我有以下問題: 我有N名工人。它們中的每一個都可以分配給4個任務T1,T2,T3和T4之一。我想生成一個列表,其中包含所有這樣的分配功能:如何獲得所有可能的工作分配清單?

W1->T1, W2->T1, ... Wx->T1 
W1->T1, W2->T1, ... Wx->T2 
W1->T1, W2->T2, ... Wx->T2 
... 
W1->T4, W2->T4, ... Wx->T4 

我該怎麼做? Python或VB.NET代碼將是最好的,但任何語言都可以。

+0

歡迎來到Stack Overflow。請閱讀https://stackoverflow.com/help/how-to-ask和https://stackoverflow.com/help/mcve。您可以在您嘗試自行解決問題時立即回來,如果您的*實施*有特定問題,我們將很樂意爲您提供幫助。 –

+0

@NiallCosgrove SO具有常用鏈接Ask,Tour,MCVE和Help的捷徑。只需將它們放在方括號中['+'Tour' +']' – Plutonix

+1

@Plutonix嘿,謝謝你。會回頭看看諷刺之下的幫助;) –

回答

2

你可以這樣做:

import itertools 

def show_assignments(workers, tasks): 
    prod = itertools.product(*[range(tasks)]*workers) 
    for a in prod: 
     print(", ".join("W%d->T%d" % (w+1, t+1) for (w, t) in enumerate(a))) 

你可以調用它,例如,如:

show_assignments(5, 4) 

這將顯示結果爲:

W1->T1, W2->T1, W3->T1, W4->T1, W5->T1 
W1->T1, W2->T1, W3->T1, W4->T1, W5->T2 
... 
W1->T4, W2->T4, W3->T4, W4->T4, W5->T3 
W1->T4, W2->T4, W3->T4, W4->T4, W5->T4 
+0

它似乎可用,我喜歡它,但我不知道我是否理解正確。你能給我一個例子,我有6個工人和4個任務,所以我能理解什麼是什麼? –

+0

好吧,我更新它來產生你正在尋找的特定結果。我給出的例子有5個工人和4個任務。 –

+0

我想這就是你要找的。如果您有任何問題,請告訴我。 –

0

可以使代碼更好。但是,對於一個例子,這將工作(蟒蛇3.6)

workers = ["W1","W2","W3","W4","W5"] #workers 
tasks = ["T1","T2","T3","T4"] #tasks 
for worker in workers: 
    for task in tasks: 
     print(worker + " >> " + task) 
+0

如果我理解正確,它會生成類似於所有工作分配的清單,但不包括工作分配與其他工作分配的組合。我對嗎?如果是的話,那麼這不是我正在尋找的答案。 –

0

要生成工人的游泳池和任務的池Cartesian Product

有此標準功能: python2 python3

因此,也許你需要itertools.product(workers, tasks)

+0

根據文檔:產品('ABCD','xy') - > Ax Ay Bx By Cx Cy Dx Dy。我需要一個所有組合的分配清單,不僅包括任何工作人員的任何分配清單。它不會產生我需要的輸出。 –

相關問題