Реферат: Генерация комбинаторных объектов

5. Для подсчета всех сгенерированных размещений используется переменная Z в процедуре WriteB.

5 Перестановки с повторениями

Перестановки с повторениями допускают повторное использование элементов. Например, пусть имеем множество, состоящее из двух символов A и двух символов B.

Тогда все перестановки с повторениями из этих символов будут таковы:

AABB ABBA BABA ABAB BAAB BBAA

В общем случае, если имеем

N1 предметов 1-го вида

N2 предметов 2-го вида

...

Nk предметов K-го вида

Общее количество перестановок может быть вычислено по формуле

N!/ (N1!*N2!*..*Nk!)

Алгоритм аналогичен генерации перестановок без повторений за исключением формирования начальной перестановки:

i=0;

Для j от 1 до k

Для m от 1 до N[j] i=i+1; B[i]=j;

Ниже приводится программа генерации перестановок с возвращениями. Количество K различных типов предметов, обозначенных латинскими буквами вводится с клавиатуры. С клавиатуры также вводятся количества NN[j] предметов каждого типа.

Сумма введенных NN[j] определяет общее количество элементов в каждой из генерируемых перестановок.

const

alphabet : string[26] = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

var

b : array [1..100] of byte;

N,i,j,k,m : byte;

NN : array [1..100] of longint;

Procedure SwapB(i,k:byte);

var x : byte;

begin

x:=B[i]; B[i]:=B[k]; B[k]:=x;

end;

К-во Просмотров: 403
Бесплатно скачать Реферат: Генерация комбинаторных объектов