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 交易获得平等。
这确实是一个幼稚的解决方案,根据启发式方法,最富有的人最有机会提供东西以换取他需要的商品。复杂性很高,但是对于有序列表,它应该可以针对您指定的数字进行管理。