Реферат: Комбинаторные задачи

begin for j:=1 to n do write(a[p[j]],' '); writeln end

else

begin

for j:=i+1 to n do

begin

Perm(i+1);

k:=p[i]; p[i]:=p[j]; p[j]:=k

end;

Perm(i+1);

{циклический сдвиг элементов i .. n влево}

k:=p[i];

for j:=i to n-1 do p[j]:=p[j+1];

p[n]:=k

end

end;{Perm}

begin {Permutations}

Perm(1)

end;

begin {Main}

readln(n);

for i:=1 to n do p[i]:=i;

a := p ; {массив a может быть заполнен произвольно}

Permutations(n)

end.

Заметим, что в данной программе массив p можно было и не использовать, а переставлять непосредственно элементы массива a.

Разбиения множества

Число разбиений n -элементного множества на k блоков произвольного размера, но таких, что каждый элемент множества оказывается “приписан” к одному из блоков, выражается числом Стирлинга второго рода S (n ,k ) [6,7]. Очевидно, что S (n ,k ) = 0 для k > n . Если согласиться, что существует только один способ разбиения пустого множества на нулевое число непустых частей, то S (0,0) = 1 (именно такая договоренность, как и в случае с факториалом, приводит в дальнейшем к универсальным формулам). Так как при разбиении непустого множества нужна, по крайней мере, одна часть, S (n ,0) = 0 при n > 0. Отдельно интересно также рассмотреть случай k = 2. Если непустое множество разделили на две непустые части, то в первой части может оказаться любое подмножество исходного множества, за исключением подмножеств, включающих в себя последний элемент множества, а оставшиеся элементы автоматически попадают во вторую часть. Такие подмножества можно выбрать 2n -1 – 1 способами, что и соответствует S (n ,2) при n > 0.

Для произвольного k можно рассуждать так. Последний элемент либо будет представлять из себя отдельный блок в разбиении и тогда оставшиеся элементы можно разбить уже на k – 1 частей S (n – 1,k – 1) способами, либо помещаем его в непустой блок. В последнем случае имеется kS (n – 1,k ) возможных вариантов, поскольку последний элемент мы можем добавлять в каждый блок разбиения первых n - 1элементов на k частей. Таким образом

S (n ,k ) = S (n – 1, k – 1) + kS (n – 1, k ), n > 0. (5)

Полезными могут оказаться также формулы, связывающие числа Стирлинга с биномиальными коэффициентами, определяющими число сочетаний:


К-во Просмотров: 616
Бесплатно скачать Реферат: Комбинаторные задачи