Курсовая работа: Некоторые способы разбиения множеств
pred[j]:=k;
sled[j]:=0
end;
if sled[k]>j then begin {j образует новый блок }
pred[j]:=k; {все блоки справа от блока с номером k содержат элементы, большие j . Отсюда следует, что j образует новый одноэлементный блок }
sled[j]:=sled[k];
pred[sled[j]]:=j;
sled[k]:=j
end;
blok[j]:=sled[k] {переносим наш элемент в активный блок с номером k }
end
else begin {j движется назад }
blok[j]:=pred[k]; { помещаем j в предыдущий блок }
if k=j then if sled[k]=0 then sled[pred[k]]:=0 else begin
sled[pred[k]]:=sled[k];
pred[sled[k]]:=pred[k]
end
end;
write_razbienie;
j:=n;
while(j>1)and
((wper[j]and(blok[j]=j))or(not wper[j]and(blok[j]=1))) do begin
wper[j]:=not wper[j];
dec(j)
end
end
end.
Количество всех разбиений можно посчитать используя числа Белла и рекуррентную формулу (5).
Генерирование всех понятий
Для реализации данной задачи на Pascal’е вводим следующие типы данных и переменных: