题
我的编码一个棋盘游戏那里有一袋能件。每个回合中,球员去除随机选择件从袋根据某些规则。
对于我的执行,它可以更容易分裂的袋子最初进入水池,用于一个或更多的玩家。这些池会随机选择,但现在不同的球员会被挑选从不同的袋子。这是任何不同吗?
如果一个玩家的袋跑了出来,更多的是随机的混洗到它从一般的库存。
解决方案
因此,只要:
- 该分区进入"池"的袋子是随机的
- 分配的玩家一定池的袋子是随机的
- 游戏就是这样,绘制的项目由球员都有效地从袋(永远不会回到袋或任何其他的袋子,为的持续时间当前的游戏)
- 球员们都不是认知的内容 任何 的包包
这两种方法("原始"有一个很大的共同的袋,"修改"一个游泳池袋每个球员都同等有关的概率。
它只是变得有点棘手对游戏结束时,当一些球员的袋都是空的。公平的来让我们从挑选的100%的项目仍然在发挥作用,因此,他们既挑选从其袋,他们挑选和[盲目的,当然,]选择一个项目从所述的袋子。
这个问题的说明的一个有趣的特点的概率是 概率是相对于数量的知识一个具有有关情况.例如游戏主机的可能知道,"池"袋分配到说放X并不包括任何说一个字母"a"(想着拼字游戏),但只要没有球员知道这个(并且只要该分区进入池袋是完全随机),比赛仍然是公平的,并且播放器"X"仍然要假定他/她可能撞的"一个"下一个时间一个字母是绘, 是一样的,如果所有剩余的信件被提供给他/她。
编辑:
不承受的数学有效性的断言,即这两种程序都是完全相等, 感觉 是一个重要因素, 在游戏,包括一个机会部件(特别是如果游戏,也包括金钱的成分)。为了避免的愤怒玩家谁不明白这个公平,你可以坚持原来的过程...
其他提示
根据游戏规则,@ mjv是对的,初始随机分割不会影响概率。这类似于一个游戏,其中n个玩家从面朝下的牌组依次抽牌:牌组的初始随机分组是随机分成“袋子”。每个球员的牌数。
但是如果你在每次抽奖后替换项目,那么只要有一个或多个包就无所谓了。对于一个包,任何特定项目最终将由具有相同概率的任何玩家绘制。对于许多行李,该物品只能由最初放入行李的玩家绘制。
弹出软件级别,如果游戏需要一个包,我建议只是这样编程:它应该不比n包更难,你不必证明新游戏相当于旧的。
我的直觉告诉我,将随机的事物集合划分为较小的随机子集将保持同样随机...如果玩家从大型游泳池或较小游泳池中选择(无论如何,将其自身投入到大一点)
对于一个游戏,它足够随机恕我直言!
取决于安全性的重要程度,它可能没问题(如果涉及到金钱(您或他们),请不要这样做)。从一个无知的球员的角度来看,我并不完全确定它会不那么随意。
a)不要指望他们无知,你的程序可能被破解然后他们会知道会有什么东西出现
b)以不引入漏洞的方式填充行李是非常棘手的。例如,让我们采用天真的算法,即随机选择一个并将其放入第一个桶中,将其取出,然后对第二个桶执行相同操作,依此类推。你只是确保如果有N个棋子,第一个玩家有1 / N的概率选择一个给定的棋子,第二个玩家有1 /(N-1),第三个玩家有1 /(N-3)和等等。然后玩家可以分析已经玩过的棋子,以便弄清楚其他玩家持有某些棋子的概率。
我 THINK 以下算法可能效果更好,但几乎所有人在第一次提出新算法时都会出现概率错误。不要使用它,只要明白可能涵盖我所谈到的安全漏洞:
- 创建N个有序项目的列表并实例化P个玩家
- 为每位玩家随机(替换)标记1 / P项目
- 重复此操作,直到所有N个项目都被标记并且相同 标记为每个玩家的项目数量(注意:根据N和P,可能需要比你可能生存的时间长得多)
- 将适当的项目放入播放器的存储桶中并随机重新排列(不要使用地方交换算法) 醇>
即使这样,在所有这些之后,你仍然可能会有一个漏洞让某人知道漏洞中的内容。坚持使用组合游泳池,随机选择仍然很棘手,但它会让你的生活更轻松。
编辑:我知道这种声音听起来有些生涩。对于那些可能会在上下文中阅读并尝试其中一些算法的人来说,我大部分都包含了大胆的内容。我真的很希望你: - )
编辑2:在进一步考虑时,我认为按顺序挑选的问题可能会减少让玩家首先轮流进行。如果规则已经存在,那可能无关紧要。