有序有重复、有序无重复、无序无重复、无序有重复区别详解及Python实现

这几个概念理解起来有点困难,然而他们是整个概率论的基础。理解了他们的四个的区别,对于理解高阶概率论很有帮助。
本文是在学习Vamei 概率论01 计数 基础上得到的。

  • 概率论的基础

    • 大数定律(伯努利)证明随机事件的频率可以近似于它的概率。以此,使概率称为一门可以确定研究的学问。这是概率论的确定性基石。
    • 等概率假设:在一个事件中,每种结果出现的可能是等概率的。
    • 分步:将复杂过程解析为多个步骤,在每一个步骤内部等概率。
  • 重复与有序

    • 重复:在等概率假设这一层世界起作用,如果是重复抽样,每次可能结果的数量相同,每个可能结果的概率也就相同;如果是非重复抽样,每次的可能结果数量不同,导致概率不同。
    • 有序:在分步这一层世界起作用,如果N次抽样是有序的,那就是分为N步,如果N次抽样是无序的,可以视N次抽样为一次,只是一次抽取结果中有N个元素。单纯将N次抽取结果由有序变为无序就是将可能性去除这N个结果的 N ! N! N!种可能。
  • 重复与有序在不同位面的婚姻

    • 有序有重复的从N个总数中抽取M个样本
      1. 有序。将M个样本分为M步。
      2. 有重复。M步中每一步的可能等概率的为N。
    • 有序无重复
      1. 有序。将M个样本分为M步。
      2. 无重复。M步中每一步的可能等概率不相同,每走一步,可能减少一个种类
    • 无序无重复
      1. 无序。将M个样本作为一步来看。相当于对M步那个世界的一种高级封装,将M个样本内部的顺序作为一个低级维度封装成一种可能,就是说,对N个总体种类世界里的可能性降低 M ! M! M!倍。(我也不知道这么说能否让人看明白,暂时想不到更简介的表述)。无序无重复被称为分组就在这里。

      2. 无重复。因为无序,所以看作只有一次操作,就相当于将总体的N成2,带走了其中数量为 M M M的一组。同样因为无序,剩下一组(数量为 N − M N-M NM)也看作低纬度的封装,需要去除组内部的 ( N − M ) ! (N-M)! (NM)!种可能。所以,可能性有:
        N ! ( N − M ) ! ( M ) ! \frac{N!}{(N-M)!(M)!} (NM)!(M)!N!

    • 无序有重复
      1. 无序,等同于上面。还是看作分组。

      2. 有重复。虽然还是分组,但不同于直观意义上的分组。因为**“有重复”**的存在,本质上是扩充了总量N。有重复的选取M本质是向原来的N中新加入了 M − 1 M-1 M1个元素。此时的总数是 N + M − 1 N+M-1 N+M1分成的两组的内部数量分别是:原来的 N N N,以及新加入的 M − 1 M-1 M1。此时,套用公式(1)结果就是:
        ( N + M − 1 ) ! N ! ( M − 1 ) ! \frac{(N+M-1)!}{N!(M-1)!} N!(M1)!(N+M1)!

  • Python实现

事件本质函数
有序有重复itertools.product()
有序无重复排列itertools.permutations()
无序无重复组合(内部)itertools.combinations()
无序有重复组合(外部)
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python集合是一种无序且不重复的数据结构。它们类似于列表和元组,但是不允许有重复项。集合可以用于去重、交集、并集和差集等操作。下面是Python集合的详细介绍。 1. 创建集合 可以使用大括号{}或set()函数来创建一个空集合,也可以在大括号中直接输入元素来创建集合。例如: ```python # 创建空集合 set1 = set() print(set1) # set() # 创建有元素的集合 set2 = {1, 2, 3} print(set2) # {1, 2, 3} set3 = set([4, 5, 6]) print(set3) # {4, 5, 6} ``` 2. 集合操作 可以使用以下操作符和方法来操作Python集合: - 添加元素:add()方法、update()方法 - 删除元素:remove()方法、discard()方法、pop()方法 - 清空集合:clear()方法 - 特殊操作:交集&、并集|、差集-、对称差集^ 例如: ```python # 添加元素 set1.add(1) print(set1) # {1} set1.update([2, 3]) print(set1) # {1, 2, 3} # 删除元素 set1.remove(2) print(set1) # {1, 3} set1.discard(4) # 如果元素不存在,不会报错 print(set1) # {1, 3} set1.pop() # 随机删除一个元素 print(set1) # {3} # 清空集合 set1.clear() print(set1) # set() # 特殊操作 set2 = {1, 2, 3} set3 = {3, 4, 5} print(set2 & set3) # {3},交集 print(set2 | set3) # {1, 2, 3, 4, 5},并集 print(set2 - set3) # {1, 2},差集 print(set2 ^ set3) # {1, 2, 4, 5},对称差集 ``` 3. 集合方法 Python集合还有一些常用的方法,例如: - len()方法:返回集合中元素的个数 - in关键字:判断元素是否在集合中 - issubset()方法:判断一个集合是否是另一个集合的子集 - issuperset()方法:判断一个集合是否是另一个集合的超集 - union()方法:返回两个集合的并集 - intersection()方法:返回两个集合的交集 - difference()方法:返回两个集合的差集 - symmetric_difference()方法:返回两个集合的对称差集 例如: ```python set1 = {1, 2, 3} set2 = {3, 4, 5} print(len(set1)) # 3 print(2 in set1) # True print(4 in set1) # False print(set1.issubset(set2)) # False print(set2.issuperset(set1)) # False print(set1.union(set2)) # {1, 2, 3, 4, 5} print(set1.intersection(set2)) # {3} print(set1.difference(set2)) # {1, 2} print(set1.symmetric_difference(set2)) # {1, 2, 4, 5} ``` 总之,Python集合是一种非常实用的数据结构,可以用于去重、交集、并集和差集等操作。掌握集合的使用方法可以帮助你更加高效地处理数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值