将相同的项目放入匿名桶后可能的分布及其概率

时间:2016-06-19 02:51:53

标签: algorithm probability distribution combinatorics

道歉,如果在其他地方很容易找到答案。我的数学和统计数据很弱,因此我甚至不知道我正在尝试做什么的搜索术语。 。

我有 b 匿名无法区分的存储桶,我将 i 相同的项目放入其中。我想知道所有可能的分布及其概率。例如,如果我有3个桶和3个项目,我想要的答案是:

  • [3,0,0] - > 1/9
  • [2,1,0] - > 6/9
  • [1,1,1] - > 2/9

请注意,这些存储桶是匿名的,因此我希望将相同的发行版组合起来,就像我上面所做的那样。例如,[2,1,0]案例实际上是[2,1,0],[0,2,1]等案例的总和。

另外,我有最大桶大小的约束。例如,3个球,3个桶,bucketsize = 2应返回:

  • [2,1,0] prob = 7/9
  • [1,1,1] prob = 2/9

可以看到概率树:

Insert item 1 into [0,0,0] -> [1,0,0] p=1  
Insert item 2 into [1,0,0] -> [2,0,0] p=1/3 OR [1,1,0] 2/3  
Insert item 3 into [2,0,0] -> [2,1,0] p=1.0   
Insert item 3 into [1,1,0] -> [2,1,0] p=2/3 OR [1,1,1] p=1/3  

So state [2,1,0] has two paths to it: 1/3*1 AND 2/3*2/3 = 7/9  
So state [1,1,1] has one path  to it: 2/3 * 1/3 = 2/9

以下是每种概率的另一种观点: bins_and_balls http://bents.us/Pictures/bins_balls.png

非常感谢您阅读我的问题以及您可以提供的任何帮助。我没有在https://stats.stackexchange.com/上交叉发布此内容,但如果人们认为它在那里更好,那么我会将其删除并重新发布。

更新

评论中有一些关于某些算法正确性的讨论。为了帮助验证,我编写了以下模拟器:

#! /usr/bin/env python

from __future__ import division
import random

def simulate(num_bucks,items,bsize,iterations=50000):
  perms = dict()
  for n in range(iterations):
    buckets = [0] * num_bucks 
    for i in range(items):
      while True:
        b = random.randint(0,num_bucks-1)
        if buckets[b] < bsize:
          break  # kludge, loop until we find an unfilled bucket 
      buckets[b] +=1
    buckets.sort()
    buckets = tuple(reversed(buckets))
    try:
      perms[buckets]['count'] += 1
    except KeyError:
      perms[buckets] = {'perm' : buckets, 'count' : 1}

  for perm in perms.values(): 
    perm['prob'] = perm['count'] / iterations
  return perms


def main():
  perms =    simulate(num_bucks=3,items=3,bsize=2)
  for perm in perms.values():
    print perm

if __name__ == "__main__":
    main()

其中有3个桶,3个球,2个桶的输出,如:

(1, 1, 1) 0.22394
(2, 1, 0) 0.77606

1 个答案:

答案 0 :(得分:0)

更新

我刚刚意识到你可能无法使用我原来的建议来获得更大的n和r值。至少,不是没有一些修改。例如,如果你将4个项目放入5个桶中,你可以拥有(其中包括):

cadena = cadena.replace("|", "")

所以&#34; n选择r&#34;下面描述的技巧不起作用,因为有两种不同的方法只能使用两个桶。

原始答案

这是一个选择r&#34;问题。组合

对于{3,1,0,0,0} {2,2,0,0,0} 案例,您要问&#34;我可以从一组四个中选择一个项目有多少种不同的方法?&#34;答案是四。如果集合包含数字1,2,3,4,那么您的组合为{3,0,0,0}

对于{1},{2},{3},{4}案例,您要问有多少种不同的方式从四个中选择两个项目。答案是六:{2,1,0,0}

对于{1,2},{1,3},{1,4},{2,3},{2,4},{3,4}案例,答案是九。我不会列举它们。

&#34; n选择r&#34;计算是{1,1,1,0}

有关详细信息,请参阅http://www.calculatorsoup.com/calculators/discretemathematics/combinations.php