首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算两组列表之间的数字匹配概率?(python)

如何计算两组列表之间的数字匹配概率?(python)
EN

Stack Overflow用户
提问于 2020-12-07 20:40:49
回答 1查看 763关注 0票数 0

我正在尝试用我选择的6种元素的优惠券从1到10来制作一个彩票计划(为了这个例子,我将数字改为简单)。下面的脚本在1到10的范围内生成随机的6个数字元素,它找到它们之间和我的优惠券之间的交集,但是我想要计算(比率)的概率,例如,生成的随机数之间和我的优惠券之间的4个匹配数。有什么想法吗?

代码语言:javascript
复制
import random
from collections import Counter
mc = [9, 6, 5, 4, 8, 1]
mycoupon = set(mc)
for _ in range(100):
    r = random.sample(range(1, 10), 6)
    draws = set(r)
    
    cc = Counter(mycoupon)
    dc = Counter(r)
    common = cc.keys() & dc.keys()
    counts = 0
    for cel in common:
        counts += min(cc[cel], dc[cel])

    print("My coupon: ", mycoupon)
    print("Draw: ", draws)
    print("Matches: ", counts)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-07 21:15:11

这实际上是一个概率问题,而不是一个编程问题。但不用担心,概率是很酷的。

因此,在您的示例中,一个票证上有6个元素。假设每个元素上的可能值为N(在您的示例中为N=10)。

我假定,对于每个元素,所有N值都是相等的。我还假设每个元素的值是独立于其他元素选择的。这意味着N^6中的每一张可能的票都是相同的。

这意味着我们可以根据满足条件的票数来计算某些条件发生的可能性。例如,匹配所有6个号码的票证的概率是1/ N^ 6,因为只有一张票证匹配所有6。

如果你想要找到匹配4个号码的概率,我们只需要计算与4个元素完全匹配的票的数量。我们可以通过考虑这个生成门票的过程来计算它们:

  • 首先,选择匹配的4个元素,将它们设置为等于真值。
  • 然后选择其余元素的值,将其设置为除匹配值以外的任何值。

此过程可以生成任何匹配的票证,确切地说是4个元素。它不能生成超过4个元素匹配的票证。因此,如果我们计算出这个过程可以选择多少张票,那就是匹配4个元素的票的数量。

第一步有6选择4 = 15种可能的选择。第二步有(N1)^2可能的结果(N1,因为我们不能选择正确的值)。

因此,在概率为15 * (N-1)^2 / N^6的情况下,与4/6完全匹配的票数为15 *(N1)^2。在N=10示例中,为15 * 9^2 / 10^6 = 0.001215。

在长度为T的票的一般情况下,如果您希望精确匹配k个元素,每个元素都达到N,则概率应为(T选择k) *(N-1)^(T.)/ N^T。

用Python编写的最方便的方法可能是按写的方式计算,计算匹配票的数量,然后除以N^T。这是因为Python (至少Python 3,不知道Python 2)将自动切换到使用大数来处理大整数,所以您不必担心精度的损失或溢出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65189039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档