Sunteți pe pagina 1din 41

Curs 3

Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordonare ¸si generare

Octombrie 2015

Algoritmi de ordonare ¸si generare Octombrie 2015 Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Cuprins

Algoritmi de ordonare ¸si generare pentru permut˘ari cu repetit¸ie Reprezentarea binar˘a a submult¸imilor

Algoritmi de ordonare ¸si generare

Generarea rapid˘a a combin˘arilor

Coduri Gray; propert˘at¸i

Submult¸imi ordonate lexicografic

Generarea k-combin˘arilor

ordonate lexicografic Generarea k -combin˘arilor Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Permut˘ari cu repetit¸ie

r -permut˘arile cu repetit¸ie ale unui alfabet A = {a 1 , secvent¸ele ordonate de forma

unde x 1 ,

, x r A.

x 1 ,

, x r

, a n } sunt

Acela¸si simbol poate s˘a apar˘a de mai multe ori ˆın o r -permutare cu repetit¸ie

Conform regulii produsului, exist˘a n r r -permut˘ari cu repetit¸ie

produsului, exist˘a n r r -permut˘ari cu repetit¸ie Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Permut˘ari cu repetit¸ie

Algoritmi de ordonare ¸si generare ˆın ordine lexicografic˘a

r -permut˘arile cu repetit¸ie pot fi ordonate lexicografic, la fel ca ¸si

r -permut˘arile obi¸snuite. Exemplu (A = {a 1 , a 2 } cu a 1
r -permut˘arile
obi¸snuite.
Exemplu (A = {a 1 , a 2 } cu a 1 < a 2 , r = 3)
r -permutare cu repetit¸ie a lui A
rang
a 1 , a 1 , a 1
a 1 , a 1 , a 2
a 1 , a 2 , a 1
a 1 , a 2 , a 2
a 2 , a 1 , a 1
a 2 , a 1 , a 2
a 2 , a 2 , a 1
a 2 , a 2 , a 2
0
1
2
3
4
5
6
7
Definit¸ie (Ordonare lexicografic˘a)
x 1 ,
, x r < y 1 ,
, y r dac˘a exist˘a k ∈ {1,
, n} astfel ˆıncˆat x k < y k
¸si x i = y i
pentru tot¸i 1 ≤ i < k .

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea ¸si generarea r -permut˘arilor cu repetit¸ie

Observat¸ii

Fie A = {a 1 , a 2 ,

, a n } cu a 1 < a 2 <

<

a n .

Dac˘a definim index(a i ) := i 1 pentru 1 i n ¸si ˆınlocuim a i cu index(a i ) ˆın enumerarea lexicografic˘a a r -permut˘arilor, avem

r -permutare cu repetit¸ie a lui A

 

rang

a 1 ,

, a 1 , a 1 , a 1 0,

, 0, 0, 0

1

0

.

.

.

.

.

.

a 1 ,

, a 1 , a 1 , a n 0, , a 1 , a 2 , a 1 0,

, 0, 0, n , 0, 1, 0

1 1

n 1

a 1 ,

n

.

.

.

.

.

.

a 1 ,

, a 1 , a 2 , a n 0,

, 0, 1, n 1

2 n 1

.

.

.

.

.

.

Observat¸ie: r -permutarea cu repetit¸ie a indec¸silor este reprezentarea ˆın baza n a rangului.

a indec¸silor este reprezentarea ˆın baza n a rangului. Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea ¸si generarea r -permut˘arilor cu repetit¸ie

Exercit¸ii

1 S˘a se defineasc˘a un algoritm care calculeaz˘a rangul unei

r -permut˘ari cu repetit¸ie x 1 , raport cu ordinea lexicografic˘a.

, x r a lui A = {1,

, n} ˆın

2 S˘a se defineasc˘a un algoritm care calculeaz˘a r -permutarea cu

repetit¸ie a lui A = {1, ordinea lexicografic˘a.

, n} care are rangul k ˆın raport cu

3 S˘a se defineasc˘a un algoritm care calculeaz˘a r -permutarea cu repetit¸ie care urmeaz˘a imediat dup˘a r -permutarea cu repetit¸ie

x 1 ,

, x r a lui A.

-permutarea cu repetit¸ie x 1 , , x r a lui A . Curs 3 Permut˘ari

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Combin˘ari

Reprezentarea binar˘a a submult¸imilor

O r -combinare a unei mult¸imi A cu n elemente este o submult¸ime cu r

elemente a lui A.

Exist˘a o correspondent¸˘a bijectiv˘a ˆıntre ¸sirurile de n-bit¸i ¸si submult¸imile

mult¸imii A = {a 1 , a 2 ,

,

a n }:

¸sir

B A

de n-bit¸i b 0 b 1

b n1 b n2

b n1

b 0

unde b i =

1

0

dac˘a a ni B ˆın caz contrar.

submult¸imea {a ni | b i = 1} lui A

Exemplu

A = {a 1 , a 2 , a 3 , a 4 , a 5 } unde a 1 = a, a 2 = b, a 3 = c, a 4 = d, a 5 = e.

∅ ↔ 00000 {a} ↔ 00001 {b} ↔ 00010 {c} ↔ 00100 {d} ↔ 01000 {e} ↔ 10000

{a, b} ↔ 00011 {a, c} ↔ 00101 {a, d} ↔ 01001 {a, e} ↔ 10001 {b, c} ↔ 00110

{c, d, e} ↔ 11100 {b, c, d, e} ↔ 11110 {a, b, d, e} ↔ 11011 {a, c, d, e} ↔ 11101 {a, b, c, d} ↔ 01111 {a, b, c, d, e} ↔ 11111

, c , d } ↔ 01111 { a , b , c , d ,

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Calculul codific˘arii ca ¸sir binar a lunei submult¸imi

BitString(B : submultime

a

lui

A,

A:

multime ordonata {a 1 ,

int bit string [0

n

1]

for

i :=0 to

n 1 do

if

a i B then

 

bit

string [n i]

:= 1

 

else

 
 

bit

string [n i]

:= 0

return bit string

,

a n })

[ n − i ] := 0 return bit string , a n } ) Curs

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Calcului combin˘arii corespunz˘atoare unui ¸sir de n-bit¸i

Combination(b[0

n-1]:

sir

de

biti,

A: multime ordonata {a 1 ,

B :=

for

i :=0

to

n 1 do

if

b[i] = 1 then adauga a ni la B B

return

,

a n })

then adauga a n − i la B B return , a n } ) Curs

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea submult¸imilor folosind codific˘ari cu ¸siruri binare

Exist˘a o corespondent¸˘a bijectiv˘a ˆıntre codific˘arile cu ¸siruri binare de n-bit¸i ¸si numerele cuprinse ˆıntre 0 ¸si 2 n 1 :

n1

¸sir de n−bit¸i b[0 n − 1] → num˘arul b[i] · 2 i i=0 num˘ar
¸sir de n−bit¸i
b[0
n − 1] →
num˘arul
b[i] · 2 i
i=0
num˘ar 0 ≤ r
< 2 n →
¸sirul de n-bit¸i b[0
n − 1] unde
c i
b[i] :=
unde c i este restul ˆımp˘art¸irii lui r cu 2 i+1 .
i
2
Definit¸ie
Rangul unei submult¸imi B a mult¸imii ordonate A cu n elemente este
n−1
Rank(B, A) :=
b[i] · 2 i
i=0
unde b[0
n − 1] este codificarea cu ¸sir de n-bit¸i a lui B ca submult¸ime a
lui A.

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea submult¸imilor unei mult¸imi prin intermediul ¸sirurilor de bit¸i

Exemplu (A = {a 0 , a 1 , a 2 })

submult¸ime codificare binar˘a rang b 2 b 1 b 0 ∅ 000 0 {a 0
submult¸ime
codificare binar˘a
rang
b
2 b 1 b 0
000
0
{a 0 }
{a 1 }
{a 0 , a 1 }
{a 2 }
{a 0 , a 2 }
{a 1 , a 2 }
{a 0 , a 1 , a 2 }
001
1
010
2
011
3
100
4
101
5
110
6
111
7

Observat¸ie. Acest mod de enumerare a submult¸imilor unei mult¸imi de nume¸ste ordonare canonic˘a, iar ¸sirul b 2 b 1 b 0 se nume¸ste cod canonic (sau binar).

2 b 1 b 0 se nume¸ste cod canonic (sau binar). Curs 3 Permut˘ari cu repetit¸ie.

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea submult¸imilor cu ajutorul ¸sirurilor de bit¸i (2)

B ⊆ a 0 , , a n−1 n-bit¸i b[0 n − 1] pentru codificarea
B ⊆ a 0 ,
, a n−1
n-bit¸i b[0
n
− 1]
pentru codificarea binar˘a
calcul direct
n−1
b[i] · 2 i
i=0

BitString(B, A)

Rank(B, A)

n−1 b[i] · 2 i i=0 BitString ( B , A ) Rank ( B ,

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea submult¸imilor prin intermediul reprezent˘arii binare

Se d˘a o mult¸ime ordonat˘a

A = {a 0 , a 1 ,

, a n1 }, ¸si 0 r < 2 n

S˘a se determine submult¸imea B a lui A cu rangul r 0 ≤ r <
S˘a se determine submult¸imea B a lui A cu rangul r
0 ≤ r < 2 n
n-bit string encoding b[0
b[i] := c/2 i unde c := r
pentru 0 ≤ i < n
n − 1]
mod 2 i+1
Unrank(A, r )
Combination(b, A)
B := {a i | b[n − i − 1] = 1}
r ) Combination(b, A) B := {a i | b[n − i − 1] = 1}

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea submult¸imilor prin intermediul reprezent˘arii binare

Problema 1:

Se d˘a o submult¸ime B a mult¸imii ordonate A.

S˘a se determine submult¸imea lui A care urmeaz˘a dup˘a B ˆın ordonarea prin intermediul reprezent˘arii binare.

Sugestie:

algoritmii anteriori de ordonare ¸si enumerare.

Se poate defini NextBinaryRankSubset(A,B) folosind

Se poate defini NextBinaryRankSubset(A,B) folosind Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea submult¸imilor prin intermediul reprezent˘arii binare

Problema 1:

Se d˘a o submult¸ime B a mult¸imii ordonate A.

S˘a se determine submult¸imea lui A care urmeaz˘a dup˘a B ˆın ordonarea prin intermediul reprezent˘arii binare.

Sugestie:

algoritmii anteriori de ordonare ¸si enumerare.

Se poate defini NextBinaryRankSubset(A,B) folosind

Problema 2: S˘a se genereze lista tuturor submult¸imilor lui A ˆın ordinea cresc˘atoare a rangului calculat prin intermediul codific˘arii binare.

Sugestie:

Se poate folosi funct¸ia Unrank(A, r ) definit˘a anterior.

folosi funct¸ia Unrank ( A , r ) definit˘a anterior. Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari.

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea submult¸imilor cu modific˘ari minime

Coduri Grey

Frank Grey a descoperit ˆın 1953 o metod˘a de enumerare a tuturor submult¸imilor unei mult¸imi ˆıntr-o ordine ˆın care submult¸imile consecutive difer˘a prin inserarea sau ¸stergerea unui singur element.

Aceast˘a schem˘a de enumerare se nume¸ste cod Grey reflectat standard.

Exemplu

Folosind metoda lui Grey, submult¸imile of {a, b, c} sunt enumerate ˆın ordinea urm˘atoare:

{}, {c}, {b, c}, {b}, {a, b}, {a, b, c}, {a, c}, {a}

Codific˘arile ca ¸siruri binare b 0 b 1 b 2 ale acestor submult¸imi sunt:

000, 100, 110, 010, 011, 111, 101, 001

sunt: 000 , 100 , 110 , 010 , 011 , 111 , 101 , 001

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Codul Grey reflectat standard

Descriere

Se dore¸ste enumerarea submult¸imilor mult¸imii

A = {a 0 , a 1 ,

submult¸imi consecutive. Fie G n lista respectiv˘a.

Proced˘am recursiv:

, a n1 } ˆıntr-o ordine cu modific˘ari minime ˆıntre

1 Se calculeaz˘a lista G n1 a submult¸imilor lui

B = {a 1 ,

, a n1 } ˆıntr-o ordine Grey cu modific˘ari minime.

2 Fie G n1 lista obt¸int˘a prin ad˘augarea lui a 0 la fiecare element al unei copii inversate a listei G n1 .

3 G n este rezultatul concaten˘arii listei G n1 cu G

n1 .

concaten˘arii listei G n − 1 cu G n − 1 . Curs 3 Permut˘ari cu

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Propert˘at¸i ale codurilor Grey reflectate

Se presupune c˘a B este submult¸ime a mult¸imii ordonate A cu n elemente. Dac˘a

m este rangul lui B in ˆın ordinea enumer˘arii lui Grey, ¸si

m = n1

b i · 2 i

i=0

Codificarea ca ¸sir de n bit¸i a lui B este c 0 c 1

c n1

atunci

c i = (b i + b i+1 ) mod 2

Reciproc, se poate demonstra c˘a

for all 0 i < n,

unde b n = 0.

b i = (c i + c i+1 +

+

c n1 )

mod 2

pentru tot¸i 0 i < n.

c n − 1 ) mod 2 pentru tot¸i 0 ≤ i < n . Curs

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Coduri Grey

Exemplu (A = {a, b, c} cu a < b < c)

submult¸ime

rang Grey

b

0 b 1 b 2

¸sir de bit¸i

rang al lui B

B

m

astfel ˆıncˆat

m = 2

i=0 b 2i 2 i

al lui B

0 c 1 c 2

c

{} {c} {b, c} {b} {a, b} {a, b, c} {a, c} {a}

0

000

 

000

0

1

100

100

4

2

010

110

6

3

110

010

2

4

001

011

3

5

101

111

7

6

011

101

5

7

111

001

1

Se observ˘a c˘a c i = (b i + b i+1 ) mod 2 pentru tot¸i 0 i < 3, unde b 3 = 0.

2 pentru tot¸i 0 ≤ i < 3 , unde b 3 = 0 . Curs

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Exercit¸ii

1 Folosit¸i ecuat¸iile de pe slide-ul precedent ca s˘a implementat¸i metodele de ordonare RankGrey(B,A) ¸si de enumerare UnrankGrey(A,r) pentru enumerarea submult¸imilor bazat˘a pe coduri Grey.

2 S˘a se definesc˘a metoda NextGreyRankSubset(A,B) care calculeaz˘a submult¸imea lui A care urmeaz˘a imediat dup˘a submult¸imea B ˆın enumerarea submult¸imilor bazat˘a pe coduri Grey.

B ˆın enumerarea submult¸imilor bazat˘a pe coduri Grey. Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

k-combin˘ari

Generarea k-combin˘arilor

Se d˘a

o mult¸ime ordonat˘a A cu n elemente ¸si 0 k n.

S˘a se genereze toate k-combin˘arile lui A.

≤ n . S˘a se genereze toate k -combin˘arile lui A . Curs 3 Permut˘ari cu

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

k-combin˘ari

Generarea k-combin˘arilor

Se d˘a

o mult¸ime ordonat˘a A cu n elemente ¸si 0 k n.

S˘a se genereze toate k-combin˘arile lui A.

Metoda 1 (naiv˘a ¸si ineficient˘a): generare ¸si testare

1 Se genereaz˘a toate cele 2 n submult¸imi ale lui A

2 Se elimin˘a submult¸imile generate care nu au k elemente.

elimin˘a submult¸imile generate care nu au k elemente. Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

k-combin˘ari

Generarea k-combin˘arilor

Se d˘a

o mult¸ime ordonat˘a A cu n elemente ¸si 0 k n.

S˘a se genereze toate k-combin˘arile lui A.

Metoda 1 (naiv˘a ¸si ineficient˘a): generare ¸si testare

1 Se genereaz˘a toate cele 2 n submult¸imi ale lui A

2 Se elimin˘a submult¸imile generate care nu au k elemente.

Metoda 2 (recursie simpl˘a): Dac˘a A = {a} ∪ B unde a

cel mai mic element al lui A atunci

B este

1 Genereaz˘a lista L 1 a tuturor (k 1)-combin˘arilor lui B, ¸si fie L 2 lista tuturor k-combin˘arilor lui B.

2 Fie L 3 lista ce se obt¸ine ad˘augˆand a la toate elementele lui L 1 .

3 Returneaz˘a rezultatul concaten˘arii listelor L 2 ¸si L 3 .

rezultatul concaten˘arii listelor L 2 ¸si L 3 . Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Enunt¸ul problemei. Observat¸ii preliminare (1)

Se presupune c˘a A = {1, 2,

ˆıncˆat x 1 < x 2 <

<

x k .

,

n} ¸si X = {x 1 , x 2 ,

, x k } ⊆ A astfel

ˆ

I: Care este rangul lui X ˆın enumerarea lexicografic˘a a k-combin˘arilor

lui A?

k-combin˘arile care apar ˆınaintea lui X ˆın ordine lexicografic˘a sunt de 2 feluri:

1 Cele care cont¸in un element mai mic decˆat x 1 .

2 Cele al c˘aror element minim este x 1 , dar restul elementelor este o

(k 1)-combinare mai mic˘a decˆat {x 2 , x 3 ,

, x k }.

mai mic˘a decˆat { x 2 , x 3 , , x k } . Curs

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Enunt¸ul problemei. Observat¸ii preliminare (1)

Se presupune c˘a A = {1, 2,

ˆıncˆat x 1 < x 2 <

<

x k .

,

n} ¸si X = {x 1 , x 2 ,

, x k } ⊆ A astfel

ˆ

I: Care este rangul lui X ˆın enumerarea lexicografic˘a a k-combin˘arilor

lui A?

k-combin˘arile care apar ˆınaintea lui X ˆın ordine lexicografic˘a sunt de 2 feluri:

1 Cele care cont¸in un element mai mic decˆat x 1 .

2 Cele al c˘aror element minim este x 1 , dar restul elementelor este o

(k 1)-combinare mai mic˘a decˆat {x 2 , x 3 ,

, x k }.

rangul lui X ˆın enumerarea lexicografic˘a a k-combin˘arilor lui A este N 1 + N 2 unde

N 1 este num˘arul k-combin˘arilor de primul fel

N 2 este num˘arul k-combin˘arilor de al doilea fel

N 2 este num˘arul k -combin˘arilor de al doilea fel Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari.

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2, Cum putem calcula N 1 ?

, n}.

A = { 1 , 2 , Cum putem calcula N 1 ? , n }

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2, Cum putem calcula N 1 ?

, n}.

Num˘arul k-combin˘arilor lui A care au pe i cel mai mic element este

lui A care au pe i cel mai mic element este Curs 3 Permut˘ari cu repetit¸ie.

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2,

Cum putem calcula N 1 ?

, n}.

Num˘arul k-combin˘arilor lui A care au pe i cel mai mic element este

ni

k1

A care au pe i cel mai mic element este n − i k − 1

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2,

Cum putem calcula N 1 ?

, n}.

Num˘arul k-combin˘arilor lui A care au pe i cel mai mic element este

ni

k1 N 1 = x 1 1

ni

k1

(regula sumei)

i=1

= x 1 − 1 n − i k − 1 (regula sumei) i =1 Curs

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2,

Cum putem calcula N 1 ?

, n}.

Num˘arul k-combin˘arilor lui A care au pe i cel mai mic element este

ni

k1 N 1 = x 1 1

k1

n1

k1 + n1

ni

k

(regula sumei)

(vezi curs 1)

i=1

S¸tim c˘a

n

k =

i k (regula sumei) (vezi curs 1) i =1 S¸tim c˘a n k = Curs 3

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2,

Cum putem calcula N 1 ?

, n}.

Num˘arul k-combin˘arilor lui A care au pe i cel mai mic element este

ni

k1 N 1 = x 1 1

k1

k1 + n1

n1

ni

k

(regula sumei)

(vezi curs 1)

i=1

S¸tim c˘a

N 1 = x 1 1

k =

n

i=1

ni+1

k

ni

k

=

k n nx 1 +1

k

Cum putem calcula N 2 ?

− n − x 1 +1 k Cum putem calcula N 2 ? Curs 3 Permut˘ari

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2,

Cum putem calcula N 1 ?

, n}.

Num˘arul k-combin˘arilor lui A care au pe i cel mai mic element este

ni

k1 N 1 = x 1 1

k1

k1 + n1

n1

ni

k

(regula sumei)

(vezi curs 1)

i=1

S¸tim c˘a

N 1 = x 1 1

k =

n

i=1

ni+1

k

ni

k

=

k n nx 1 +1

k

Cum putem calcula N 2 ?

N 2 este rangul lui {x 2 ,

(k 1)-combin˘arilor lui {x 1 + 1, x 1 + 2,

, x k } ˆın enumerarea lexicografic˘a a

, n 1, n}

} ˆın enumerarea lexicografic˘a a , n − 1 , n } Curs 3 Permut˘ari cu

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Observat¸ii preliminare (2)

Ipoteza:˘ A = {1, 2,

Cum putem calcula N 1 ?

, n}.

Num˘arul k-combin˘arilor lui A care au pe i cel mai mic element este

ni

k1 N 1 = x 1 1

k1

k1 + n1

n1

ni

k

(regula sumei)

(vezi curs 1)

i=1

S¸tim c˘a

N 1 = x 1 1

k =

n

i=1 ni+1

k

ni

k

=

k n nx 1 +1

k

Cum putem calcula N 2 ?

N 2 este rangul lui {x 2 ,

(k 1)-combin˘arilor lui {x 1 + 1, x 1 + 2,

N 2 se poate calcula recursiv.

, x k } ˆın enumerarea lexicografic˘a a

, n 1, n}

} ˆın enumerarea lexicografic˘a a , n − 1 , n } Curs 3 Permut˘ari cu

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Ordonarea lexicografic˘a a k-combin˘arilor

Din observat¸iile anterioare rezult˘a urm˘atoarea implementare recursiv˘a a operat¸iei de calcul al rangului:

, n}) calculeaz˘a rangul ˆın ordine , x k } a mult¸imii ordonate

RankKSubset({x 1 ,

, x k }, { ,

lexicografic˘a a k-combin˘arii {x 1 ,

{ , + 1,

, n 1, n}. Se presupune c˘a x 1 < x 2 <

<

x k .

RankKSubset({x 1 ,

, x k },

if

(n

= k

or

k =0)

return 0, p := x 1 + 1

 

if

(k = 1)

 
 

return

p 1

{ , + 1,

, n})

else

return

k n np+1

k

+ RankKSubset({x 2 ,

, x k }, {x 1 + 1, , n})
, x k }, {x 1
+ 1,
, n})

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea lexicografic˘a a k-combin˘arilor

Enunt¸ul problemei. Observat¸ii preliminare

Ipoteze:

A = {1, 2,

submult¸imea lui A cu rangul m ˆın enumerarea lexicografic˘a a tuturor k-combin˘arilor lui A. [Ret¸inem c˘a 0 m < k .]

< x k este

,

n} ¸si X = {x 1 , x 2 ,

, x k } cu x 1 < x 2 <

n

ˆ

I:

Care sunt valorile lui x 1 , x 2 ,

, x k ?

Care sunt valorile lui x 1 , x 2 , , x k ? Curs 3

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea lexicografic˘a a k-combin˘arilor

Enunt¸ul problemei. Observat¸ii preliminare

1 Num˘arul total al k-combin˘arilor lui A care cont¸in un element < x 1 este

x 1 1

i=1

n

k

1 i =

n n x 1 + 1

k

k

m.

(1)

unde k1 este num˘arul k-combin˘arilor ˆın care cel mai mic element este

i ∈ {1,

lexicografic mai mici decˆat X , care are rangul m.

ni

, x 1 1}. Acest num˘ar este m fiindc˘a toate aceste k-combin˘ari sunt

este ≤ m fiindc˘a toate aceste k -combin˘ari sunt Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea lexicografic˘a a k-combin˘arilor

Enunt¸ul problemei. Observat¸ii preliminare

1 Num˘arul total al k-combin˘arilor lui A care cont¸in un element < x 1 este

x 1 1

i=1

n

k

1 i =

n n x 1 + 1

k

k

m.

(1)

unde k1 este num˘arul k-combin˘arilor ˆın care cel mai mic element este

i ∈ {1,

lexicografic mai mici decˆat X , care are rangul m.

ni

, x 1 1}. Acest num˘ar este m fiindc˘a toate aceste k-combin˘ari sunt

2 Num˘arul total al k-combin˘arilor lui A care cont¸in un element x 1 este

x

1

i=1

n

k

1 i =

n n x 1

k

k

> m.

(2)

unde k1 este num˘arul k-combin˘arilor ˆın care cel mai mic element este

i ∈ {1,

rangul lui X (care este m), ¸si toate k-combin˘arile cu un astfel de rang i cont¸in

, x 1 }. Acest num˘ar este > m deoarece sunt m + 1 ˆıntregi i ˆıntre 0 ¸si

ni

un element x 1 .

i ˆıntre 0 ¸si n − i un element ≤ x 1 . Curs 3 Permut˘ari

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea lexicografic˘a a k-combin˘arilor

Enunt¸ul problemei. Observat¸ii preliminare

1

2

Num˘arul total al k-combin˘arilor lui A care cont¸in un element < x 1 este

x 1 1

i=1

n

k

1 i =

n n x 1 + 1

k

k

m.

(1)

unde k1 este num˘arul k-combin˘arilor ˆın care cel mai mic element este

i ∈ {1,

lexicografic mai mici decˆat X , care are rangul m.

Num˘arul total al k-combin˘arilor lui A care cont¸in un element x 1 este

ni

, x 1 1}. Acest num˘ar este m fiindc˘a toate aceste k-combin˘ari sunt

x

1

i=1

n

k

1 i =

n n x 1

k

k

> m.

(2)

unde k1 este num˘arul k-combin˘arilor ˆın care cel mai mic element este

i ∈ {1,

rangul lui X (care este m), ¸si toate k-combin˘arile cu un astfel de rang i cont¸in

, x 1 }. Acest num˘ar este > m deoarece sunt m + 1 ˆıntregi i ˆıntre 0 ¸si

ni

un element x 1 .

putem folosi (1) ¸si (2) ca s˘a afl˘am x 1 :

k n − n−x 1 +1 k n − n−x 1 ≤ m < k
k n − n−x 1 +1
k n − n−x 1
≤ m <
k
k

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea lexicografic˘a a k-combin˘arilor

Enunt¸ul problemei. Observat¸ii preliminare

1

2

Num˘arul total al k-combin˘arilor lui A care cont¸in un element < x 1 este

x 1 1

i=1

n

k

1 i =

n n x 1 + 1

k

k

m.

(1)

unde k1 este num˘arul k-combin˘arilor ˆın care cel mai mic element este

i ∈ {1,

lexicografic mai mici decˆat X , care are rangul m.

Num˘arul total al k-combin˘arilor lui A care cont¸in un element x 1 este

ni

, x 1 1}. Acest num˘ar este m fiindc˘a toate aceste k-combin˘ari sunt

x

1

i=1

n

k

1 i =

n n x 1

k

k

> m.

(2)

unde k1 este num˘arul k-combin˘arilor ˆın care cel mai mic element este

i ∈ {1,

rangul lui X (care este m), ¸si toate k-combin˘arile cu un astfel de rang i cont¸in

, x 1 }. Acest num˘ar este > m deoarece sunt m + 1 ˆıntregi i ˆıntre 0 ¸si

ni

un element x 1 .

putem folosi (1) ¸si (2) ca s˘a afl˘am x 1 :

k n nx 1 +1

k

m <

k n nx 1

k

Celelalte elemente x 2 ,

, x k se pot determina recursiv.

elemente x 2 , , x k se pot determina recursiv. Curs 3 Permut˘ari cu repetit¸ie.

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Enumerarea lexicografic˘a a k-combin˘arilor

UnrankKSubset(m, k, {a 1 ,

{x 1 ,

Se presupune c˘a x 1 <

, a n }) produce k-combinarea

, x k } cu rangul m a lui {a 1 ,

, a n } ˆın ordine lexicografic˘a. < a n .

< x k ¸si a 1 <

UnrankKSubset(m, k, {a 1 ,

if

(k

= 1)

, a n })

return a k+1

(m = 0)

return {a 1 ,

else if

else

,

a m }

u :=

i := 1

n k

i

while k < u m i ++ x1:=n (i 1)

return

{a ni+1 } ∪ UnrankKSubset(m u + nx1+1 , k 1,{a ni+2 ,

k

,

a n })

, k − 1 , { a n − i + 2 , k , a

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon

Bibliografie

S. Pemmaraju, S. Skiena. Combinatorics and Graph Theory with Mathematica. Section 2.3: Combinations. Cambridge University Press. 2003.

Section 2.3: Combinations. Cambridge University Press. 2003. Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi

Curs 3 Permut˘ari cu repetit¸ie. Combin˘ari. Algoritmi de ordon