請選擇要算的方式,並輸入種類數 n 和要選的個數 r(重新排列字串時輸入字串)。下方的數學式和輸入欄連動,直接改寫數字的部分也能計算。
目錄
這個頁面可以做什麼
- 可以計算從 \(n\) 種中、同一種可以重複選取,排出 \(r\) 個的「重複排列 \(n^{r}\)」(例:用 0~9 這 10 種數字組成的 4 位數密碼)
- 可以計算同一種可以重複選取,選出 \(r\) 個的「重複組合 \(H^{n}_{r} = C^{n+r-1}_{r}\)」(例:從 3 種果汁中買 5 瓶)
- 像「TOMATO」這樣混有相同字母的字串,有幾種重新排列的方法(不盡相異物的排列),只要輸入字串就能算出來(最多 30 個字元)
- 不知道該用 \(n^{r}\)、\(H^{n}_{r}\)、\(P^{n}_{r}\)、\(C^{n}_{r}\) 哪一個時,可以看由「要排列?只是選取?」「同一個可以重複選嗎?」決定的判斷圖
- 答案即使有幾十位數,也不會四捨五入,完整顯示每一位數;位數很多時,也會附上 \(1.2345 \times 10^{18}\) 形式的近似值
- 這個頁面還整理了用圓圈與隔板圖解重複組合的說明,以及可直接複製到 Excel、Google 試算表、Python 使用的公式
這個計算有什麼用?
用 0~9 這 10 種數字組成 4 位數密碼,同一個數字可以使用好幾次,所以有 \(10^{4} = 10{,}000\) 種。只要多 1 位數就變成 10 倍,6 位數就有 100 萬種。
可以使用英文大寫、小寫和數字共 62 種字元的密碼,8 個字元就有 \(62^{8} = 218{,}340{,}105{,}584{,}896\) 種(約 218 兆種)。「增加字元種類」和「加長」各有多大效果,可以用這個重複排列的公式來比較。
電腦只用 0 和 1 兩種來表示資訊。排 8 個的 1 位元組可以表示的模式有 \(2^{8} = 256\) 種,這就是「1 位元組有 256 階」的原因。
照片的顏色用紅、綠、藍各 8 位元表示(24 位元色),有 \(2^{24} = 16{,}777{,}216\) 種,大約 1,677 萬色。螢幕的顏色數、聲音的量化位元數、IP 位址的個數等,數位裝置「能表示的數量」都由重複排列的計算決定。
DNA 由 A、T、G、C 這 4 種鹼基組成,3 個一組(密碼子)對應構成身體的 1 個胺基酸。相同的鹼基可以連續出現,所以密碼子的種類有 \(4^{3} = 64\) 種。
身體使用的胺基酸有 20 種,2 個一組只有 \(4^{2} = 16\) 種,不夠用。「3 個一組就夠了」這個生命的機制,可以用這個重複排列的計算來確認。
從 5 種甜甜圈中,同一種可以選好幾個,裝成 10 個一盒的方法,是不考慮順序的重複組合,共有 \(H^{5}_{10} = C^{14}_{10} = 1{,}001\) 種。
計算「哪種商品各幾個」的訂貨或庫存組成也是同樣形式的計算,能用數字而不是感覺,估算多加 1 種品項時需要管理的模式會增加多少。
在棋盤狀的街道上,向右走 3 格、向上走 2 格的捷徑走法,和「右、右、右、上、上」這 5 個字的排法數相同,所以有 \(\dfrac{5!}{3!\,2!} = 10\) 種。可以直接用不盡相異物的排列。
這是估算配送路線的候選數、電路板配線模式數的基礎計算,也能用數字確認格數越多,候選就會急遽增加。
公式與圖示
符號與用語解說
符號
| \(n\) | n | 可供選取的種類數。(例:從 3 種果汁中選,\(n = 3\);用 0~9 的數字,\(n = 10\))。表示個數的字母常用 number(數)的字首 \(n\)。但只有不盡相異物的排列 \(\dfrac{n!}{p!\,q!\cdots}\) 的 \(n\) 意思不同,指要排的東西的全部個數(「TOMATO」的字母種類是 4 種,但 \(n = 6\))。 |
| \(r\) | r | 可重複選取(排列)的個數。(例:買 5 瓶果汁,\(r = 5\);4 位數密碼,\(r = 4\))。和排列、組合的符號 \(P^{n}_{r}\)、\(C^{n}_{r}\) 放在相同位置的字母。 |
| \(n!\) | n 階乘 | 從 \(n\) 到 \(1\) 的整數全部相乘的數,表示 \(n\) 個全部排成一列的排法總數。另外規定 \(0! = 1\)。(例:\(4! = 4 \times 3 \times 2 \times 1 = 24\)) |
| \({}_{n}\Pi_{r}\) | n pi r | 重複排列的符號(本頁計算結果使用的寫法)。從 \(n\) 種中可重複選取 \(r\) 個,並考慮順序排列的方法總數,值是 \(n^{r}\)。\(\Pi\) 是表示乘積的希臘字母 pi 的大寫,相當於英文 Product(積)的字首 P。台灣的課本不用這個符號,直接寫成 \(n^{r}\)。 |
| \(H^{n}_{r}\) | H n 取 r | 重複組合。從 \(n\) 種中可重複選取 \(r\) 個、不考慮順序的選法總數,值是 \(C^{n+r-1}_{r}\)。H 據說取自 homogeneous(齊次)的字首。本頁計算結果寫成 \({}_{n}\mathrm{H}_{r}\)(例:\({}_{3}\mathrm{H}_{5}\)),意思相同。 |
| \(P^{n}_{r}\) | P n 取 r | 排列。從 \(n\) 個中選 \(r\) 個依序排列的方法總數,選過的就不能再選。P 是英文 permutation(排列)的字首。 |
| \(C^{n}_{r}\) | C n 取 r | 組合。從 \(n\) 個中選 \(r\) 個的方法總數,選過的就不能再選,也不考慮順序。C 是英文 combination(組合)的字首。本頁計算結果寫成 \({}_{n}\mathrm{C}_{r}\),意思相同。 |
| \(N\) | 大寫 N | 本頁用來表示排法總數的字母(重複排列、不盡相異物的排列)。是 number(數)字首的大寫,常用來表示「想求的總數」。 |
| \(p,\ q\) | p、q | 不盡相異物的排列中,表示相同物各有幾個的字母。(例:「TOMATO」的 T 有 \(p = 2\) 個、O 有 \(q = 2\) 個、M 有 1 個、A 有 1 個)。種類有 3 種以上時,依序寫成 \(p,\ q,\ r,\ \dots\)(這個 \(r\) 和「要選的個數 \(r\)」是不同的東西)。全部加起來一定是 \(p + q + r + \cdots = n\)(要排的東西的全部個數)。 |
| \(\bigcirc\) 與 \(|\) | 圓圈、隔板 | 計算重複組合時使用的符號。○ 表示「選到的 1 個」,\(|\)(隔板)表示「種類的分界」。○○|○|○○ 就表示第 1 種選 2 個、第 2 種選 1 個、第 3 種選 2 個。 |
用語
| 方法數 | 數出所有可能的情形共有幾種的數。排列、組合、重複排列、重複組合,都是有效率地計算方法數的工具。 |
| 重複 | 同一個東西出現 2 次以上。在這個單元,是「同一個可以選 2 次以上」的意思。 |
| 重複排列 | 從 \(n\) 種中、同一種可以重複選取,選出 \(r\) 個並考慮順序排列的排法。總數是 \(n^{r}\)。 |
| 重複組合 | 從 \(n\) 種中、同一種可以重複選取,選出 \(r\) 個、不考慮順序的選法。總數是 \(H^{n}_{r} = C^{n+r-1}_{r}\)。 |
| 不盡相異物的排列 | 像「TOMATO」這樣,把混有相同物的 \(n\) 個全部排列的排法。總數是 \(\dfrac{n!}{p!\,q!\cdots}\),除以相同物之間的排法數來消去重複。 |
| 排列 | 從 \(n\) 個中選 \(r\) 個,考慮順序排成一列的排法。符號是 \(P^{n}_{r}\),選過的就不能再選。 |
| 組合 | 從 \(n\) 個中只選出 \(r\) 個、不考慮順序的選法。符號是 \(C^{n}_{r}\),選過的就不能再選。 |
| 階乘 | 把從 \(n\) 到 \(1\) 的整數全部相乘的計算。符號是 \(n!\),表示 \(n\) 個全部排列的排法總數。 |
| 隔板 | 計算重複組合時,為了表示種類的分界而放的符號 \(|\)。分出 \(n\) 種需要 \(n-1\) 根,就能換成從和 ○ 合計 \(n+r-1\) 個位置中選出 ○ 的位置的問題(隔板法)。 |
| 多項式係數 | 不盡相異物的排列總數 \(\dfrac{n!}{p!\,q!\cdots}\) 的別名。因為展開 \((a+b+c)^{n}\) 時各項的係數就是這個形式,所以這樣稱呼。 |
| 樹狀圖 | 為了不遺漏、不重複地數出方法數,用分枝的圖把所有情形寫出來的方法。重複排列相當於每個分枝都長出相同數量分枝的樹狀圖。 |
| 捷徑 | 在棋盤狀的道路上,不繞遠路到達目的地的走法(最短路徑)。向右走 \(p\) 格、向上走 \(q\) 格的捷徑走法數,可以用不盡相異物的排列 \(\dfrac{(p+q)!}{p!\,q!}\) 求出。 |
建議先了解的基礎知識
為了讓您「真正理解意義」地使用這個頁面的計算,這裡整理了建議事先理解的基礎知識。
卡住的時候,回到這裡的內容複習,是最快的捷徑。
| 乘法與除法(國小三~五年級,8~11 歲) |
|
| 指數(國中七年級~高一,12~16 歲) |
|
| 方法數與樹狀圖(國中,12~15 歲) |
|
| 階乘(高一,15~16 歲) |
|
| 排列與組合(高一,15~16 歲) |
|
用 Excel 計算的方法
| 種類數 n | 10 |
| 要排的個數 r | 4 |
| 重複排列 nʳ | =B1^B2 |
| 種類數 n | 3 |
| 要選的個數 r | 5 |
| 圓圈與隔板合計的位置數 | =B1+B2-1 |
| 重複組合 H | =COMBIN(B3,B2) |
| 全部的字母數 n(TOMATO) | 6 |
| T 的個數 | 2 |
| O 的個數 | 2 |
| M 的個數 | 1 |
| A 的個數 | 1 |
| 排法總數 N | =FACT(B1)/(FACT(B2)*FACT(B3)*FACT(B4)*FACT(B5)) |
「^」是次方的符號,FACT 計算階乘,COMBIN 計算組合(nCr),都是 Excel 的函數。
第 1 個表格是用 0~9 這 10 種數字組成 4 位數密碼的例子,B3 會顯示 10000。
第 2 個表格是從 3 種果汁中買 5 瓶的例子,B3 會顯示 7(=3+5−1),B4 會顯示 21。
第 3 個表格是把「TOMATO」重新排列的例子,B6 會顯示 180。相同字母的種類增加時,請在除數的部分再乘上 FACT。寫成 =MULTINOMIAL(B2,B3,B4,B5) 也一樣會得到 180。
另外,Excel 的數值只有 15 位有效數字,所以答案有 16 位數以上時,尾數會被捨入。
用 Google 試算表計算的方法
| 種類數 n | 10 |
| 要排的個數 r | 4 |
| 重複排列 nʳ | =B1^B2 |
| 種類數 n | 3 |
| 要選的個數 r | 5 |
| 圓圈與隔板合計的位置數 | =B1+B2-1 |
| 重複組合 H | =COMBIN(B3,B2) |
| 全部的字母數 n(TOMATO) | 6 |
| T 的個數 | 2 |
| O 的個數 | 2 |
| M 的個數 | 1 |
| A 的個數 | 1 |
| 排法總數 N | =FACT(B1)/(FACT(B2)*FACT(B3)*FACT(B4)*FACT(B5)) |
把表格整個複製、貼到 A1 儲存格,再把數值改成自己的情境即可。
用 Python 計算的方法
import math
from collections import Counter
# 1) 重複排列(從 n 種中可重複選取 r 個,並考慮順序排列)
kinds = 10 # 種類數 n(0~9 共 10 種)
picks = 4 # 要排的個數 r(4 位數)
repeated_permutations = kinds ** picks
# 2) 重複組合(從 n 種中可重複選取 r 個,不考慮順序)
juice_kinds = 3 # 種類數 n(3 種果汁)
bottles = 5 # 要選的個數 r(5 瓶)
repeated_combinations = math.comb(juice_kinds + bottles - 1, bottles)
# 3) 不盡相異物的排列(混有相同字母的字串重新排列)
word = "TOMATO"
letter_counts = Counter(word)
same_item_permutations = math.factorial(len(word))
for count in letter_counts.values():
same_item_permutations //= math.factorial(count)
print(f"重複排列(從 {kinds} 種排出 {picks} 個):{repeated_permutations}")
print(f"重複組合(從 {juice_kinds} 種選出 {bottles} 個):{repeated_combinations}")
print(f"{word} 的重新排列:{same_item_permutations}")
用 LaTeX 等數學式語言的寫法(可直接複製)
N = nʳ
N = n^{r}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<msup><mi>n</mi><mi>r</mi></msup>
</mrow>
</math>
n^r
n^r
repeatedPermutation := n^r;
repeated_permutation = n^r;
n^r
Hⁿᵣ = C(n+r−1, r)
H^{n}_{r} = C^{n+r-1}_{r} = \dfrac{(n+r-1)!}{r!\,(n-1)!}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msubsup><mi>H</mi><mi>r</mi><mi>n</mi></msubsup>
<mo>=</mo>
<msubsup>
<mi>C</mi>
<mi>r</mi>
<mrow><mi>n</mi><mo>+</mo><mi>r</mi><mo>−</mo><mn>1</mn></mrow>
</msubsup>
</mrow>
</math>
H_r^n = C_r^(n+r-1)
Binomial[n + r - 1, r]
nHr := binomial(n + r - 1, r);
nhr = nchoosek(n + r - 1, r);
H_r^n = C_r^(n+r−1) = (n+r−1)!/(r!(n−1)!)
N = n! ÷ (p! × q! × r! × ⋯)
N = \dfrac{n!}{p!\,q!\,r!\cdots}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<mfrac>
<mrow><mi>n</mi><mo>!</mo></mrow>
<mrow>
<mi>p</mi><mo>!</mo>
<mi>q</mi><mo>!</mo>
<mi>r</mi><mo>!</mo>
<mo>⋯</mo>
</mrow>
</mfrac>
</mrow>
</math>
N = (n!)/(p!q!r!cdots)
Multinomial[p, q, r]
N := factorial(n)/(factorial(p)*factorial(q)*factorial(r));
N = factorial(n)/(factorial(p)*factorial(q)*factorial(r));
N = n!/(p!q!r!⋯)
請 ChatGPT 幫忙計算的方法
你是方法數(排列、組合)的計算助理。請務必實際執行 Python 程式碼來進行下列 3 個計算,並只以執行結果的數值作為回答的依據(請不要用心算或猜測回答)。 1. 用 0~9 這 10 種數字組成 4 位數密碼,有幾種方法?(同一個數字可以使用好幾次) 2. 從 3 種果汁中買 5 瓶,同一種可以買好幾瓶,有幾種買法?(只數各買幾瓶的組合,不區分選取的順序) 3. 把「TOMATO」這 6 個字母重新排列,可以排出幾種字串? 請分別說明使用的是重複排列、重複組合、不盡相異物的排列中的哪一個、理由,以及執行結果的數值。Python 請使用 math 模組(math.comb、math.factorial)與 collections.Counter。
使用方法
-
1輸入數值在輸入欄中輸入要計算的數值
-
2計算按下「計算」按鈕
-
3查看結果計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
DataChef 的特色
不需專業知識,操作直覺又簡單
無須登錄任何個人資料
按下「下載」後自動刪除檔案
無須標註來源出處
亦無須事先取得商用授權