ElKamina和Tyler Durden的答案很體面,但他們似乎沒有考慮到Kuriso想要進行1-1交易,人們可能有多種商品和多種商品單位。我有一個天真的解決方案。
我覺得原來的例子是有點過於簡單,所以讓我們再看一個:
c1 c2 c3 c4
A 5 0 1 0
B 0 1 0 1
C 0 6 2 0
其中A,B,C是人,C1,C2,C3,C4的商品。
首先,讓我們來計算理想的分佈,這是很容易做到:對每一種商品,通過的人數劃分的東西的總和,四捨五入,和每個人都得到的是:
c1 c2 c3 c4
A 1 2 1 0
B 1 2 1 0
C 1 2 1 0
現在讓我們來定義一個WANT函數,表示人X需要進入理想位置多少東西c:WANT(X,c)= IDEAL(c) - Xc。
c1 c2 c3 c4 sum
A -4 2 0 0 -2
B 1 1 1 0 3
C 1 -4 -1 0 -4
讓我們列出按他們的需求總和排序的人員。讓我們把最富有的人,最低要求的人,在這種情況下,C,讓我們試着滿足他的需要,把他與最想提供他最想要的商品的人相匹配。如果他們可以交易,很好,如果沒有,繼續直到我們找到一場比賽(最終保證一場比賽)。在這個例子中,C需要c1;提供最多c1的是A,對商品進行迭代,我們發現A需要c2,C有剩餘c2,所以他們交換它們。更新他們在列表中的位置,或者如果他們不再有任何需要,請將其刪除。迭代這個,直到沒有人需要。這將不會產生正確的平均分配,但是可以達到1等於1的交易。
這確實是一個天真的解決方案,啓發式說明最富有的人最有機會提供東西來換取他需要的商品。複雜度很高,但對於有序列表,它應該可以管理您指定的數字。
這不就是今年諾貝爾經濟學獎的主題嗎? :) – 2013-03-05 22:14:44