python数据结构与算法第十七天【概率算法】

1. 古典概率

例如:麻将开始摸到的14张牌中无将的概率,两张相同的牌即为将,则有:

所有的情况:从136张牌中选出14张牌,为C136-14

无将的情况:将不同的牌分组,共有34组,依次取14张牌,第一次的取法为C34-1 * 4, 第二次的取法为C33-1 * 4

则共有(C34-1 * 4)* (C33-1 * 4)* ....  *(C21-1 * 4)= C34-14 * 4^14

则无将的概率为 C34-14 * 4^14 / C136-14

2. 从1!, 2!, 3!, 4!, 到N!中所有的数首位是1的概率, 首位是2的概率,首位是3的概率,一直到首位是9的概率

 代码实现如下:

#!/usr/bin/env python
#! _*_ coding:UTF-8 _*_

def first_number(n):
    '''首位数字'''
    while n >= 10:
        n = n / 10

    return n

def second_number(n):
    '''第二位数字'''
    while n >= 100:
        n = n / 10

    return n % 10

def third_number(n):
    '''第三位数字'''
    while n >= 1000:
        n = n / 10

    return n % 100

if __name__ == "__main__":

    # 初始化frequency列表,requency[i]代表首位为1出现的次数
    frequency = [0 for i in range(0, 10, 1)]

    i = 1

    # 进行阶乘运算,从1!, 2!,3!,一直到100!的运算
    for n in range(1, 100, 1):
        i = n * i
        m = first_number(i)
        frequency[m] = frequency[m] + 1


    print frequency

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/bat_day17/frequency_test.py
[0, 30, 18, 13, 7, 7, 7, 3, 10, 4]

Process finished with exit code 0

3. 本福特定律:

在生活中得出的数据中,首位数字为1的概率将近1/3, 是1/9的3倍

实际应用:

(1)阶乘,素数数列,斐波那契数列首位

(2)住宅地址号码,

(3)经济数据反欺诈,投票选举反欺诈

猜你喜欢

转载自www.cnblogs.com/liuzhiqaingxyz/p/9500745.html