Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0000a652.doc
Скачиваний:
96
Добавлен:
28.02.2016
Размер:
1.14 Mб
Скачать

3.9. Разбиения чисел

Под разбиением числа n понимается его представление в виде

n = x1 + x2 +…+ xk, (xi > 0 — целое).

Суммы считаются эквивалентными, если они отличаются лишь порядком слагаемых.

Поскольку порядок слагаемых несущественен, можно считать, что

x1 x2 …xk.

Число разбиений числа n на k слагаемых будем обоз­начать P(n, k), а число всех разбиений — через P(n).

Очевидно, что

P(n) = kn = 1 P(n, k), n > 0. (3.36)

Рассмотрим пример. Пусть необходимо получить все разбиения числа n = 7. Это возможно сделать различными способами, показанными на рисунке 3.8.

k Разбиения n P(n,k)

1 7 1

2 6 1 3

5 2

4 3

3 5 1 1 4

4 2 1

3 3 1

3 2 2

4 4 1 1 1 3

3 2 1 1

2 2 2 1

5 3 1 1 1 1 2

2 2 1 1 1

6 2 1 1 1 1 1 1

7 1 1 1 1 1 1 1 1

Рисунок 3.8

Разложение P(n) в сумму P(n, k) делает наглядной структуру разбиений числа n, однако, вычисление значений P(n) непосредственно по формуле (3.36) может вызвать затруднения, поскольку сами значения P(n, k) заранее, как правило, не известны.

Для подсчета P(n) удобно воспользоваться функцией Q(m, n), значением которой является число способов пред­ставления целого m в виде суммы, при условии, что каждое слагаемое не превосходит n. Число разбиений целого n рав­но Q(n, n) = P(n).

Теорема 3.8 Пусть Q(m, n) — функция, значением которой является число способов представления цело­го m в виде суммы, при условии, что каждое слагаемое не превосходит n. Тогда функция Q(m, n) удовлетво­ряет следующему рекурсивному определению:

Q(m, n) = [(m = 1)  (n = 1)  1,

(m < n)  Q(m, m - 1),

(m = n)  1+ Q(m, m - 1),

(m > n)  Q(m, n-1) + Q(m - n, n)]. (3.37)

Доказательство. Такое определение функции Q вытекает из следующих рекурсивных рассуждений.

  • Если n = 1, то Q(m, 1) = 1 поскольку существует толь­ко одно разбиение числа m, в котором наи­боль­шее слагаемое есть единица.

  • Если m = 1, то Q(1, n) = 1 так как существует только одно разбиение целого числа 1, независимо от величины n как наибольшего слагаемого.

  • Если m < n, то Q(m, n) = Q(m, m) означает, что ни­какое разбиение m не может содержать слагаемого n, большего m.

  • Если n = m, то Q(m, m) = 1 + Q(m, m -1) определяет существование только одного разбиения m, со слагаемым равным m; при этом все другие разбиения имеют наибольшее слагаемое nm -1.

  • Если m > n, то Q(m, n) = Q(m, n -1) + Q(m - n, n) — поскольку любое разбиение m с наибольшим сла­гаемым меньшим или равным n или не содержит n в качес­тве слагаемого — в этом случае данное раз­биение также входит в число Q(m, n-1) или содер­жит n — при этом остальные слагаемые образуют разбиение числа m - n.

Доказательство окончено.

При исследовании свойств чисел P(n), могут также оказаться полезными диаграммы Феррерса. Диаграмма Фер­рерса состоит из k строк, соответствующих слагаемым раз­биения, причем i‑тая строка содержит последовательность из xi точек.

Например, разлагая 7 на четыре слагаемых, имеем одну из диаграмм Феррерса (рисунок 3.9).

Каждому разбиению, изображенному диаграммой Фер­рерса соответствует сопряженное разбиение, которое полу­чается заменой строк столбцами (рисунок 3.10).

  

 

k  7 = 3+2+1+1

Рисунок 3.9

Непосредственно из определения диаграммы Феррерса следует, что число разбиений числа n на k слагаемых равно числу разбиений числа n с наибольшим слагаемым равным k.

k

   

  7 = 4 + 2 + 1

Рисунок 3.10

Некоторые другие полезные утверждения, основанные на построении диаграмм Феррерса приведены в [3].

Получим алгоритм генерирования всех разбиений чис­ла n.

Пусть n = a1 + a2 +…+ ak. Обозначим sn такое, что

ai +1+1+…+1 , если k > j,

s = k - j

ai в противном случае,

где i = max(m: am > 1), j = ai - 1.

Для построения этого алгоритма достаточно заметить, что разбиение s, непосредственно следующее за s, имеет вид

s = 1 s / j j + (s mod j),

где символами « s/j »обозначено наибольшее целое не превосходящее s / j.

При этом все элементы разбиения n: a1, a2,…, ai-1 являются общими как для s, так и для s.

Инициация алгоритма осуществляется значениями i = 1, ai = n, j = n - 1, k = 1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]