Python 排列組合

1.排列&組合

  • 有n個(gè)小球從中抽取m個(gè),問(wèn)有序抽取并且有重復(fù)的抽取個(gè)數(shù)為多少?

    n^m

  • 有n個(gè)小球從中抽取m個(gè),問(wèn)有序抽取并且無(wú)重復(fù)的抽取個(gè)數(shù)為多少?

    排列:A(n,m)

  • 有n個(gè)小球從中抽取m個(gè),問(wèn)無(wú)序抽取并且無(wú)重復(fù)的抽取個(gè)數(shù)為多少?

    組合:C(n,m)

  • 有n個(gè)小球從中抽取m個(gè),問(wèn)無(wú)序抽取并且有重復(fù)的抽取個(gè)數(shù)為多少?

    C(m+n-1, m)

以上四種情況均為最常見(jiàn)的排列組合,從有無(wú)順序和是否重復(fù)兩個(gè)維度進(jìn)行思考,建議理解并背誦。

2.使用Python表示排列組合

在使用python計(jì)算排列組合之前,需要計(jì)算階乘,可以有兩種方式,一是使用math庫(kù)中的factorial函數(shù),二是使用如下的遞歸函數(shù)。

def factorial(n):
    """
    計(jì)算階乘
    :param n: data
    :return:
    """
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

按照排列的公式:

def my_permutation(n, k):
    """
    計(jì)算無(wú)重復(fù)有序的排列數(shù)
    :param n: 樣本
    :param k: 抽取
    :return: 排列數(shù)
    """
    return factorial(n)//factorial(n-k)

按照組合的公式:

def my_combination(n, k):
    """
    計(jì)算無(wú)序且不重復(fù)的組合數(shù)
    :param n: 樣本
    :param k: 抽取
    :return: 組合數(shù)
    """
    return factorial(n)//(factorial(n-k)*factorial(k))

3.例題

3.1 生日問(wèn)題

假設(shè)一個(gè)班級(jí)中共有n個(gè)人,一年有365天,其中每天作為生日的概率是相等的,那么其中至少有兩個(gè)人的生日在同一天的概率是多少?

此題屬于全排列問(wèn)題,需要反向思考,寫(xiě)出公式之后直接輸入到python中計(jì)算

def birth(n):
    """
    計(jì)算至少有兩人的生日在同一天的概率
    :param n: 班級(jí)人數(shù)
    :return: 概率
    """
    return 1 - factorial(365)/(factorial(365-n)*365**n)


# prob = birth(50)
# print("{:.2f}%".format(prob*100))

3.2 大樂(lè)透問(wèn)題

大樂(lè)透的玩法是這樣的,從35個(gè)紅球中選擇5個(gè),從12個(gè)紅球中選擇2個(gè),如果全中,那就中一等獎(jiǎng)。那么請(qǐng)問(wèn),中一等獎(jiǎng)的概率是多少?

此題屬于組合問(wèn)題,中獎(jiǎng)的可能性為一種,因此分子為1,分母為所有的組合情況。

def prize():
    return 1/(my_combination(35, 12) * my_combination(12, 2))


prob = prize()
print("{:.15f}%".format(prob%100))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、破解密碼 1. 排列 代碼演示:import itertools#1。排列#從n個(gè)不同的元素中取出m(m <...
    hollow_02f9閱讀 2,309評(píng)論 0 0
  • 排列組合二項(xiàng)式練習(xí) 一、選擇題(本大題共10小題,共20.0分) 安排3名志愿者完成4項(xiàng)工作,每人至少完成1項(xiàng),每...
    7300T閱讀 2,458評(píng)論 0 4
  • 排列組合的定義 排列的定義:從n個(gè)不同元素中,任意取m個(gè)元素,m≤n且m和n都是自然數(shù),按照一定順序排成一列,叫做...
    伍帆閱讀 5,434評(píng)論 6 10
  • 有關(guān)排列組合的一道算法題 一、題目?jī)?nèi)容 廢話(huà)不多說(shuō),先上題目: 有一個(gè) n × m 的網(wǎng)格,左下角為A,右上角為B...
    與我常在Jerry閱讀 1,120評(píng)論 0 0
  • 排列組合,簡(jiǎn)單的說(shuō),就是一個(gè)計(jì)數(shù)問(wèn)題。 我們從小時(shí)候就學(xué)過(guò)數(shù)數(shù),一個(gè)蘋(píng)果,兩個(gè)蘋(píng)果,但是現(xiàn)在對(duì)于稍微復(fù)雜一點(diǎn)的計(jì)數(shù)...
    有苦向瓜訴說(shuō)閱讀 1,341評(píng)論 3 1

友情鏈接更多精彩內(nèi)容