Zielony Smok - logo witryny

Partycje

Partycja liczby n jest przedstawieniem liczby n jako sumy liczb naturalnych.

Na ogół rozważa się trzy zagadnienia:

  • n jako suma dokładnie k liczb naturalnych
  • n jako suma co najwyżej k liczb naturalnych
  • n jako suma liczb naturalnych

Pytamy o liczbę partycji.

n jako suma dokładnie k liczb naturalnych

, czyli

przy czym wiadomo, że:

, czyli

, czyli

, czyli , jeżeli

, czyli

Zadanie:

Na ile sposobów możemy przedstawić liczbę 4 jako sumę 3 liczb naturalnych.

Rozwiązanie:

n=4, k=3

p(1, 1) = 1

p(1, 2) = p(0, 1) + p(1, 1) = 0 + 1 = 1

p(2, 3) = p(1, 2) + p(2, 1) = 1 + 0 = 1

p(3, 4) = p(2, 3) + p(3, 1) = 1 + 0 = 1

1 sposób

Wynik: 1

Sprawdzenie

4 da się zapisać jako suma trzech liczb tylko w jeden sposób: 1 + 1 + 2.

Jest to sposób identyczny z Rozmieszczeniem 1 (R000), o którym napiszę wkrótce.

Tabela partycji

Tab. 1

k\n n=1 2 3 4 5 6 7 8 9 10
k=1 1 1 1 1 1 1 1 1 1 1
2   1 1 2 2 3 3 4 4 5
3     1 1 2 3 4 5 7 8
4       1 1 2 3 5 6 9
5         1 1 2 3 5 7
6           1 1 2 3 5
7             1 1 2 3
8               1 1 2
9                 1 1
10                   1
p(n) 1 2 3 5 7 11 15 22 30 42

Jeśli weźmiemy n=7, k=2, to z tabeli odczytamy, że liczba 7 da się przedstawić jako suma 2 liczb naturalnych na 3 różne sposoby (1+6, 2+5, 3+4).

n jako suma co najwyżej k liczb naturalnych

Przykład

Na ile sposobów możemy przedstawić liczbę 4 jako sumę co najwyżej 3 liczb naturalnych?

Rozwiązanie

Korzystamy z powyższej tabeli. Sumujemy wyniki z kolumny n = 4 dla k = 1, k = 2 i k = 3

1 + 2 + 1 = 4

Sprawdzenie

4
3 + 1
2 + 2
2 + 1 + 1

n jako suma liczb naturalnych

gdzie

, czyli

Zadanie:

Na ile sposobów można zapisać liczbę naturalną (np. 4) jako sumę liczb naturalnych, czyli ile istnieje partycji liczby n?

Rozwiązanie:

n=4, k=4

p(1, 1) = 1

 

p(1, 2) = p(0, 1) + p(1, 1) = 0 + 1 = 1

p(2, 2) = p(1, 1) + p(2, 0) = 1 + 0 = 1

 

p(1, 3) = p(0, 2) + p(1, 2) = 0 + 1 = 1

p(2, 3) = p(1, 2) + p(2, 1) = 1 + 0 = 1

p(3, 3) = p(2, 2) + p(3, 0) = 1 + 0 = 1

 

p(1, 4) = p(0, 3) + p(1, 3) = 0 + 1 = 1

p(2, 4) = p(1, 3) + p(2, 2) = 1 + 1 = 2

p(3, 4) = p(2, 3) + p(3, 1) = 1 + 0 = 1

p(4, 4) = p(3, 3) + p(4, 0) = 1 = 0 = 1

Sumujemy p(1, 4) do p (4, 4) = 1 + 2 + 1 + 1 = 5 sposobów

Sprawdzamy

4

3 + 1

2 + 2

2 + 1 + 1

1 +1 + 1 + 1

Jest to sposób identyczny z Rozmieszczeniem 2 (R001), o którym napiszę wkrótce.

Pzykład 2

Jeżeli spojrzymy na ‘podstawę’ kolumny dla n = 7 w powyższej tabeli zobaczymy liczbę 15, co oznacza, że liczbę 7 można przedstawić jako sumę liczb naturalnych na 15 sposobów:

1,1,1,1,1,1,1
2,1,1,1,1,1
2,2,1,1,1
2,2,2,1
3,1,1,1,1
3,2,1,1
3,2,2
3,3,1
4,1,1,1
4,2,1
4,3
5,2
5,1,1
6,1
7

Kontynuacja tabeli:

n 11 12 13 14 15 16 17 18 19 20
p(n) 56 77 101 135 176 231 297 385 490 627

Wiadomo, że jeśli k = 2, to liczba partycji

gdzie oznacza zaokrąglenie do dołu

A oto liczba partycji dla następnych liczb:

n:
21: 792
22: 1002
23: 1255
24: 1575
25: 1958
26: 2436
27: 3010
28: 3718
29: 4565
30: 5604
31: 6842
32: 8349
33: 10143
34: 12310
35: 14883
36: 17977
37: 21637
38: 26015
39: 31185
40: 37338
41: 44583
42: 53174
43: 63261
44: 75175
45: 89134
46: 105558
47: 124754
48: 147273
49: 173525
50: 204226
51: 239943
52: 281589
53: 329931
54: 386155
55: 451276
56: 526823
57: 614154
58: 715220
59: 831820
60: 966467
61: 1121505
62: 1300156
63: 1505499
64: 1741630
65: 2012558
66: 2323520
67: 2679689
68: 3087735
69: 3554345
70: 4087968
71: 4697205
72: 5392783
73: 6185689
74: 7089500
75: 8118264
76: 9289091
77: 10619863
78: 12132164
79: 13848650
80: 15796476
81: 18004327
82: 20506255
83: 23338469
84: 26543660
85: 30167357
86: 34262962
87: 38887673
88: 44108109
89: 49995925
90: 56634173
91: 64112359
92: 72533807
93: 82010177
94: 92669720
95: 104651419
96: 118114304
97: 133230930
98: 150198136
99: 169229875
100: 190569292

Liczbę partycji dla dużych n można obliczyć używając wzoru:

Kody

Kody do obliczeń w języku JavaScript możesz znaleźć w książce Matematyka dla programistów JavaScript.

Kody do obliczeń w języku Java możesz znaleźć w książce Matematyka dla programistów Java.