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种情况
    
  • 相关阅读:
    UVa OJ 148 Anagram checker (回文构词检测)
    UVa OJ 134 LoglanA Logical Language (Loglan逻辑语言)
    平面内两条线段的位置关系(相交)判定与交点求解
    UVa OJ 130 Roman Roulette (罗马轮盘赌)
    UVa OJ 135 No Rectangles (没有矩形)
    混合函数继承方式构造函数
    html5基础(第一天)
    js中substr,substring,indexOf,lastIndexOf,split等的用法
    css的textindent属性实现段落第一行缩进
    普通的css普通的描边字
  • 原文地址:https://www.cnblogs.com/fonttian/p/9819784.html
Copyright © 2011-2022 走看看