簡體   English   中英

我正試圖找到一個“調酒師算法”

[英]I'm trying to find a “bartender algorithm”

我正在從舊的編程競賽中解決一些示例問題。 在這個問題中,我們得到了我們有多少調酒師的信息,以及他們知道的食譜。 每個雞尾酒需要1分鍾制作,我們需要使用所有調酒師計算訂單是否可以在5分鍾內完成。

解決這個問題的關鍵是盡可能高效地分配雞尾酒。 那就是我被困住的地方,我現在的算法給那些知道最少其他食譜的調酒師下了訂單。 但當然,這還不是100%正確。 任何人都可以指出我正確的方向(或給我一個谷歌的算法名稱),這解決了這個“酒保問題”?

這可以通過流網絡解決。

  • 源有每個調酒師的邊緣,容量為5。
  • 每個調酒師都有他/她可以制作的每種飲料的邊緣,容量為5。
  • 每種飲料都有水槽邊緣,容量與訂購的數量相對應。

計算從源到接收器的最大流量 如果任何訂單仍未履行,則無法解決。

在訂單上創建雞尾酒列表,按照多少招標知道如何制作雞尾酒來排序

即訂單(2 * CocktailA,1 * CocktailB,2 * CocktailC,1 * CocktailD)

CocktailA可以通過4次招標制作(招標A,B,C,D)
CocktailA可以通過4次招標制作(招標A,B,C,D)
CocktailB可以通過3次招標(招標A,B,C)制作
CocktailC可以通過1招(招標A)
CocktailC可以通過1招(招標A)
CocktailD可以通過1招(招標B)

在該列表中向后工作,將作業分配給投標。 如果多次招標可以制作雞尾酒,那么選擇已經分配了最少工作量的雞尾酒。

雞尾酒D =投標B.
CocktailC =投標A.
CocktailC =投標A(再次)
CocktailB =投標C
CocktailA =投標D.
雞尾酒A =投標B(再次)

招標A和B都有2個工作崗位,因此訂單需要2分鍾。

這是一個頂點着色問題。 它完全類似於非常好研究的寄存器分配問題。 請參見http://en.wikipedia.org/wiki/Register_allocation 它也可以被認為是與頂點着色類似的集合覆蓋問題。

當然,在這里我們不需要找到實際的顏色,我們只需要確定其基數是否為5或更小。 如果調酒師圖表可以用5種或更少的顏色着色,那么答案是肯定的,否則不是。這是另一篇很好的論文,描述了“任務”,“天”和“機器”方面的問題: http:// www .polymtl.ca / pub / sites / lagrapheur / docs / en / documents / NotesChap7.pdf

現在,為了弄清楚這一點,圖中所謂的“色數”或“色度指數”是NP難的。 實際上,有人已經在SO上要求一個算法來找到圖的色數,但遺憾的是沒有得到很多響應,請參閱圖的色數算法?

只是環顧網絡,我確實找到了一些用於着色的代碼資源。 可以解決這個問題的一個叫做SMALLK SMALLK可以找到最多8個顏色。因為這個問題只需要5個,所以這個包可以做到。

這是大學匹配問題的變體。 飲料是學生,調酒師是大學。 反過來,這是對穩定婚姻問題的概括,這可能對你更有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM