5

扑克是一种零和游戏。这意味着离开牌桌的金额等于进入牌桌的金额。我在这里提到扑克是因为我需要解决这个问题,但这个问题适用于任何零和游戏。

假设我玩扑克是为了钱。形式是现金游戏。这意味着任何人都可以在输掉所有钱后再次买入。任何人都可以用任何金额购买任意数量的商品。我根据每个玩家的买入金额分配扑克筹码。在任何时候都可以计算筹码以了解一个人欠/欠多少钱。

有两个任意假设。

1.我们不使用现金买入。我们只是将其写在纸上,并计划在比赛结束后结算(当知道输赢金额时)。

2. 没有人会充当银行 - 保留所有资金并在比赛结束后将其重新分配给获胜者

让我们看看两个示例的手动解决方案。

示例游戏

假设有 4 个玩家:用户 A、用户 B、用户 C、用户 D 和用户 E。

在游戏结束时,余额如下所示。

User A lost $30
User B lost $5
User C lost $20
User D won $42
User E won $13

解决方案 .1

我想到的第一个解决方案是:用户 A 向用户 D 发送 30 美元。

用户 B 向用户 D 发送 2 美元,用户 B 向用户 E 发送 3 美元。

用户 C 向用户 D 发送 10 美元,用户 C 向用户 E 发送 10 美元。

这解决了使用 5 笔交易的结算。

解决方案 .2

用户 B 向用户 A 发送 5 美元。

用户 A 向用户 E 发送 13 美元。

用户 A 向用户 D 发送 22 美元。

用户 C 向用户 D 发送 20 美元。

这解决了使用 4 笔交易的结算(优于解决方案 .1)。

我的问题是:如何在算法上为包含最少交易数量(最佳)的扑克游戏创建结算地图?

请注意,玩家数量的增加以及获胜者与失败者的比例发生了变化,这使得解决方案有很大差异。手动(主观地)找到一个最佳的可能非常困难。

什么是总能引导我获得最佳交易数量的通用方法?

我确信这个问题是普遍的,并且以某种方式命名,但我从未设法找到它。

4

0 回答 0