一些經典的排列問題

2022-05-01 07:42:15 字數 2769 閱讀 6002

組合數學的研究物件中,根據有無順序,一般分為排列問題和組合問題。排列與組合的根本區別在於前者與元素的順序有關,後者與元素的順序無關。

在排列與組合的問題中,經常會出現計數問題,解決計數問題的思路一般有以下三種:

1.只取要的。即把各種符合條件的情形列舉出來,再利用加法原理求和;2.先全部取,再減去不要的。即把所有可能的情形列舉出來,再減去不符合條件的情形;3.先取後排。即先把各步中符合條件的排列或組合計算出來,再根據乘法原理求積 or dp.

排列數的定義:

從n個元素的集合s中,有序地選出r個元素,r ≤ n,叫做s的乙個r排列,排列總數記作p(n,r).根據乘法原理,

p(n,r)=n*(n-1)*(n-2)*......*(n-r+1) = n! / (n-r)!特別地p(n,n) = n!

簡單排列的分類:

從n個不同元素中可以重複地選取出m個元素的排列,叫做相異元素可重複排列.其排列方案數為n^m種.如果在n個元素中,有n1個元素彼此相同,有n2個元素彼此相同......又有nm個元素彼此相同,並且n1+n2+......+nm=n,則這n個元素的全排列叫做不全相異元素的全排列.想要計算這種情況下的排列數p,那麼這種情況下的排列中相同的元素是可以任意交換順序的,也就是說每一種元素可以交換的順序數為ni!  所有元素可以交換的順序數*p就是全排列數,全排列數是不考慮元素的重複而只考慮元素的下標的,所以可以得到公式:

p = n!/(n1!*n2*......*nm!).如果n1+n2+......+nm=r,那麼從n個元素中選r個的方案數p=p(n,r)/(n1!*n2!*......*nm!).

例1:將1、2、3、4、5五個數進行排列,要求4一定要排在2的前面。問有多少種排法.

分析:採用解決計數問題的第乙個方法.因為1,3,5這3個數不受限制,可以任意排列,所以先對1,3,5做全排列,排列數為3!再來考慮2,4怎麼放.先放4,4對應的有4個位置可以放,從前往後每個位置2分別有4,3,2,1個位置可以放,根據乘法原理,方案數為1*4+1*3+1*2+1*1=10.最後的解為3!*10.

例2:有3個相同的黃球、2個相同的藍球、4個相同的白球排成一排,問有多少種不同的排法?

分析:公式,p = p(10,4) / (2! * 1! * 1!)種.

例3:把兩個紅球、乙個藍球、乙個白球放到10個編號不同的盒子中去,每個盒子最多放1個球,有多少種放法?

分析:每個盒子最多放1個求,盒子是不同的,那麼就要取4個盒子來放球,不同盒子放什麼球是有區別的,與元素的順序有關,那麼根據不全相異的選排列公式,p=p(10,4)/(2!*1!*1!)種.這種問題既跟盒子的編號有關,也跟球的顏色有關,先取的p(10,4)是取4個盒子根據不同的順序排列,因為盒子的順序是變化的,放球的順序是怎麼樣的就無所謂了,如果又乘乙個p(4,4),那麼球和盒子就分別變換順序,導致重複統計,所以只需乙個p(10,4)就好了.最後除以會重複統計的方案數就是答案了.

錯位排列:

對於乙個排列(a1,a2......an),任意乙個位置i上的數不是ai,那麼這個排列就是乙個錯位排列,設dn表示的錯位排列的個數,那麼dn = n! * (1 - 1/1! + 1/2! - 1/3! + 1/4! -...(-1)^n/n!).公式的推導可以採用解決計數問題的第二種方法.全排列的數量為n!設ai是在的所有排列中第i個位置上的元素恰好是i的左右排列組成的集合,|ai| = (n-1)!,因為乙個元素固定了,剩下的元素就可以隨便排列了.那麼|ai ∩ aj| = (n-2)!若有k個a取交集,集合的大小為(n-k)!.用總的排列數減去不滿足要求的排列數,根據容斥原理,先減去有1位滿足要求的,再加上有2位滿足要求的,再減去有3位滿足要求的......根據之前推導出的公式,有1位滿足要求的方案數是c(n,1)*(n-1)!,有k位滿足要求的方案數是c(n,k)*(n-k)!那麼dn = n! - c(n,1)*(n-1)! + c(n,2)*(n-2)! - c(n,3)*(n-3)! + c(n,4)*(n-4)......變形一下,就能得到一開始的那個公式了.

例4:書架上有6本書,編號分別為1~6,取出來再放回去,要求每本書都不在原來的位置上,有多少種排法?

分析:錯位排列問題.如果不知道公式可以先打個表找找規律:f(1) = 0,f(2) = 1,f(3) = 2,f(4) = 9,f(5) = 44,f(6) = 265.可以發現:

f(n) = (n-1) * (f(n-1) + f(n-2))

圓排列:

從n個不同元素中選出r個元素,不分首尾地圍成乙個圓圈的排列叫做圓排列,其排列方案數為p(n,r)/r,如果r=n,則有n!/n = (n-1)!種.

為什麼是這樣的呢?考慮r=n的情況.如果是一條鏈上的排列,那麼方案數很顯然就是n!,放在環上,環可以從任意乙個地方斷掉成為一條鏈,那麼第乙個數不論放在哪乙個位置,都可以從那個位置破環成鏈,放在鏈上,第乙個數就必須放在首位置上.其餘的數可以隨意排列,就得到了上面這個公式.

例5:有男女各5人,其中3對是夫妻,沿10個位置的圓桌就座,若每隊夫妻都要坐在相鄰的位置,問有多少種坐法?

分析:和上面的球裝箱差不多.每個人是有差別的,圓桌在位次上也是有差別的.如果把其中的3對夫妻綁在一起變成1個人,那麼原來10個位置的圓桌就變成了7個位置,7個位置上的圓排列數是6!,接下來再來考慮每對夫妻的座次情況,每一對夫妻都有兩種情況,要麼是丈夫在左,要麼是妻子在左,3對夫妻就有2^3種情況,總方案數就是6!*2^3.幾個東西互相有約束,那麼可以先作為乙個整體,求出方案數,再在整體中求出方案數,這樣就能在沒有約束的情況下求方案數.需要注意的是作為整體後,一些相應的條件也要改變,比如這道題中位置數量.

如何生成全排列?

stl中的next_permutation函式就可以很高效地實現.不停地呼叫next_permutation(a + 1,a + 1 + n)就能生成全排列.

一些經典的容斥問題

求三角形的個數比較簡單。首先全集是 binom 然後考慮補集,補集就是三點共線的點對。所以我們可以列舉每乙個點,然後為了避免算重,我們接下來只考慮標號比當前點小的點。接著就進行極角排序,這樣就可以統計出當前點所在的所有直線以及直線上的點的個數。設某直線上有 m 個點,那麼答案就減去 binom 即可...

排列組合問題的一些整理

加法原理是分類計數原理,常用於排列組合中,具體是指 做一件事情,完成它有n類方式,第一類方式有m1種方法,第二類方式有m2種方法,第n類方式有mn種方法,那麼完成這件事情共有m1 m2 mn種方法。做一件事,完成它需要分成n個步驟,做第一 步有m1種不同的方法,做第二步有m2種不同的方法,做第n步有...

一些簡單的排列組合問題

排列及計算公式 從n個不同元素中,任取m m n 個元素按照一定的順序排成一列,叫做從n個不同元素中取出m個元素的乙個排列 從n個不同元素中取出m m n 個元素的所有排列的個數,叫做從n個不同元素中取出m個元素的排列數,用符號 a n,m 表示或 p n,m 表示。a n,m n n 1 n 2 ...