【问题标题】:Algorithm to evenly distribute "prizes" / no variance lottery平均分配“奖品”的算法/无差异彩票
【发布时间】:2011-04-02 01:56:38
【问题描述】:

我的问题:我想做一个“善良”的彩票过程。如果可能,该算法将平均分配奖品。这对于购买每个奖品的人来说可能被认为是不公平的,因为他会更灵活地赢得不受欢迎的奖品,但没关系,我们可以说奖品大致相同。该算法将有助于消除差异并减少赌注以赢得奖品。 (是的,无聊)

如果你能赢得奖品,我将参加N 比赛。 M的人可以为每个N买一张票。

举个例子,这里有奖品和买票的人:

Prize1=[Pete,Kim, Jim]
Prize2=[Jim, Kim]
Prize3=[Roger, Kim]
Prize4=[Jim]

有4个奖品和4个独特的名字,所以应该可以平均分配。

这个例子可能很容易解决,你应该在 15 秒内找到它,但是当 MN 增加时,情况会变得更糟。

我正在尝试制作一个通用算法,但这很难。我需要一些好的提示,甚至更好的解决方案或解决方案的链接。

【问题讨论】:

  • 您要查找的词是“奖品”,而不是“价格”,只是让您知道。让我有点困惑。
  • 那么你应该如何分配奖品?
  • 通过分配他们可以赢得的奖品,这样每个人都可以确保每个人都能赢得 x 个奖品 - 其余的必须通过随机抽奖来分配。

标签: php algorithm graph distribution


【解决方案1】:

理论:你有一个Bipartite graph。你必须找到Perfect matching。如果满足以下条件,则图中存在完美匹配:

如果存在完美匹配,您可以运行Hungarian algorithm 查找。

【讨论】:

  • 感谢您的帮助。我最终只是蛮力地强迫自己找到解决方案。 Web 服务器速度很快,m 和 n 不是那么大 :) 解决方案太糟糕了,太荒谬了,我用随机数轰炸它,直到它符合我的标准,我猜我有时间的时候会更好地编程 :-)跨度>
  • 仅供参考:如果 n > ~30,您无法使用暴力破解解决此问题。
【解决方案2】:

您想寻找工作分配算法,或者匈牙利算法,例如二分图中的加权完美匹配,或者可能是全对弗洛伊德 Warshall 算法。我的想法是这可以表示为二分图。这不是一个容易解决的任务。

【讨论】:

  • 谢谢,我同意你的观点,我想出了一个很糟糕的暴力解决方案,哈哈。高效的 CPU 让我们变得愚蠢 :D
猜你喜欢
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2021-05-06
  • 2020-12-05
  • 2011-05-07
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
相关资源
最近更新 更多