Детёныши ВП

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Детёныши ВП » Комбинаторика » Перестановка с повторением


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

Сообщений 1 страница 4 из 4

1

Перестановки из n элементов с повторениями – это перестановки  из n элементов, в каждую из которых входят n1 элементов 1-го типа, n2 элементов 2-го типа…, nm элементов m-го типа, где n1+n2+n +…+nm=n.

Pn(n1, n2, … nm) = n!/n1*n2*…*nm

Если m=3, b=’xyz’, kp=[2, 3, 2], ( в массиве kp записано сколько раз повторятся i-той букве как написано в примере)  то перестановки с повторениями будут такими:

01122233 => xxyyyzz
01122323 => xxyyzyz
01122332 => xxyyzzy
01123223 => xxyzyyz
01123232 => xxyzyzy

03322211 => zzyyyxx

Словесный алгоритм тот же, что и в обычных перестановках.

P.S. Спасибо Барбаре за теорию

Код:
var b:string; p,kp:array [0..255] of integer; n,i,j,d,k,l,s:longint;
  begin
   readln(b); 
    n:=length(b);
    for i:=1 to n do read(kp[i]);
    
     p[0]:=0;
    for i:=1 to n do 
     for j:=1 to kp[i] do 
       begin
        l:=l+1;
        p[l]:=i;
       end; 
   
   n:=l;
    while p[0]=0 do
     Begin

       for i:=1 to n do write(b[p[i]]);
         writeln;
         s:=s+1;
       
       j:=n;
        while p[j-1]>=p[j] do j:=j-1;
       
       k:=n;
        while p[j-1]>=p[k] do k:=k-1;
       
       d:=p[k];
       p[k]:=p[j-1];
       p[j-1]:=d;
       
       for i:=j to (n+j-1)div 2 do 
        begin
        d:=p[i];
        p[i]:=p[n-i+j];
        p[n-i+j]:=d;
        end;
    end;
    writeln(s);
 end.

0

2

саня пишы теорию

0

3

я не Саня, но напишу.

Перестановки из n элементов с повторениями – это перестановки  из n элементов, в каждую из которых входят n1 элементов 1-го типа, n2 элементов 2-го типа…, nm элементов m-го типа, где n1+n2+n +…+nm=n.

Pn(n1, n2, … nm) = n!/n1*n2*…*nm

Если m=3, b=’xyz’, kp=[2, 3, 2], то перестановки с повторениями будут такими:

01122233 => xxyyyzz
01122323 => xxyyzyz
01122332 => xxyyzzy
01123223 => xxyzyyz
01123232 => xxyzyzy

03322211 => zzyyyxx

Словесный алгоритм тот же, что и в обычных перестановках.

0

4

Спасибо Барбара , а то саня совсем разленился

0


Вы здесь » Детёныши ВП » Комбинаторика » Перестановка с повторением