zoukankan      html  css  js  c++  java
  • 深入浅出统计学 第六章 排列与组合

    内容简介

    本章内容主要介绍了两个基本概念,排序与组合
    其中组合是之后计算二项分布的预备知识
    对于计算而言,重点在于理解其所适应的不同情况,并记忆公式.
    两者区别(P261):
    1. 排列与顺序有关
    2. 组合与顺序无关

    或许理解其使用的不同情况还有一些困难,
    但是仅仅对于编程而言,本章内容可以说出奇的简单,我们只需要编写阶乘公式,然后组合一下就可以了

    编码

    思路

    从公式上看,组合公式不过比排列公式多了一个阶乘作为分母,而其构成则不过都是阶乘公式而已.
    因此我们先编写阶乘公式,然后进行公式拼接即可.
    这里我们给出最常用的两种阶乘公式的实现方式,在数值较小时,两者速度差异可以忽略.

    两种阶乘公式的实现

    import numpy as np
    def Factorial_Recursion(n):
            if n==1 & n==0:
                    return 1
            else:
                    return n*Factorial_Recursion(n-1)
    
    def Factorial_Loop(n):
    
        if n==1 & n==0:
            return 1
        else:
            result = n;
            for i in range(2,n):
                    result *= i
            return result
    print("5的阶乘 {0}".format(Factorial_Loop(5)))
    print("5的阶乘 {0}".format(Factorial_Recursion(5)))
    5的阶乘 120
    5的阶乘 120
    

    实现排列与组合

    为了复用代码,我们这里将组合与排列合并,并将组合视为排列的一种部分元素无顺序的特殊性情况.
    然后我们利用编写的函数计算文中258页到260页的问题:
    1. 20匹马的冠亚季军编号
    2. 20匹马的前三名编号(无视先后顺序)

    # 排列 permutation
    # 组合 combination
    def Permutation(n,r,IsCombination=False):
        if IsCombination:
            return Factorial_Loop(n)/Factorial_Loop(n-r)/Factorial_Loop(r)
        else:
            return Factorial_Loop(n)/Factorial_Loop(n-r)
    
    print("冠亚季军编号一共有{0}种情况,但是无视前后顺序的话,则有{1}种情况".format(Permutation(20,3),Permutation(20,3,IsCombination=True)))
    冠亚季军编号一共有6840.0种情况,但是无视前后顺序的话,则有1140.0种情况
    
  • 相关阅读:
    Java.io 包(字节流)
    Java 集合框架(常用数据结构)
    Java.util 包(Date 类、Calendar类、Random类)
    Java.lang 包 (包装类、String类、Math类、Class类、Object类)
    Java 多态(接口)
    maxcompute troubleshoot
    maxcompute
    文件命名
    weblogic修改ServerName
    设计模式---策略模式
  • 原文地址:https://www.cnblogs.com/fonttian/p/9819784.html
Copyright © 2011-2022 走看看