Maple :: kombinatoryka

> with(combinat);

Warning, the protected name Chi has been redefined and unprotected
[Chi, bell, binomial, cartprod, character, choose, composition, conjpart,

    decodepart, encodepart, fibonacci, firstpart, graycode, inttovec, lastpart,

    multinomial, nextpart, numbcomb, numbcomp, numbpart, numbperm, partition,

    permute, powerset, prevpart, randcomb, randpart, randperm, setpartition,

    stirling1, stirling2, subsets, vectoint]

Symbol Newton’a

Polecenie binomial(n,k) oblicza wartość symbolu Newton’a:

> binomial(13,10);

                                      286
> binomial(z+2,z-2);

                            binomial(z + 2, z - 2)
> expand(binomial(z+2,z-2));

                           4         3         2
                     1/24 z  + 1/12 z  - 1/24 z  - 1/12 z

Permutacje bez powtórzeń

Możliwe permutacje bez powtórzeń zbioru n-elementowego otrzymuje się przy pomocy funkcji permute(n):

> permute(4);

[[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3],

    [1, 4, 3, 2], [2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1],

    [2, 4, 1, 3], [2, 4, 3, 1], [3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4],

    [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1], [4, 1, 2, 3], [4, 1, 3, 2],

    [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]]

> permute({a,b,c,d});

[[c, b, a, d], [c, b, d, a], [c, a, b, d], [c, a, d, b], [c, d, b, a],

    [c, d, a, b], [b, c, a, d], [b, c, d, a], [b, a, c, d], [b, a, d, c],

    [b, d, c, a], [b, d, a, c], [a, c, b, d], [a, c, d, b], [a, b, c, d],

    [a, b, d, c], [a, d, c, b], [a, d, b, c], [d, c, b, a], [d, c, a, b],

    [d, b, c, a], [d, b, a, c], [d, a, c, b], [d, a, b, c]]

Ilość możliwych permutacji bez powtórzeń Zbioru n-elementowego (tj. n!) zwraca funkcja numbperm(n)

> numbperm(4);

                                      24
> numbperm({a,b,c,d});

                                      24

Permutacje z powtórzeniami

Ilość możliwych permutacji z powtórzeniami elementów zbioru n-elemetowego, gdzie elementy powtarzają się k₁, k₂… razy, oraz k₁+k₂+… = n zwraca funkcja multinomial(n,k1,k2,...,kn):

> multinomial(26,6,6,2,2,3,7);

                               6431499730656000

Wariacje bez powtórzeń

Możliwe k-elementowe wariacje bez powtórzeń elementów zbioru n-elementowego można otrzymać przy użyciu funkcji permute(n,k):

> permute(4,2);

[[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 4], [3, 1], [3, 2], [3, 4],

    [4, 1], [4, 2], [4, 3]]

> permute({a,b,c,d},2);

[[c, b], [c, a], [c, d], [b, c], [b, a], [b, d], [a, c], [a, b], [a, d],

    [d, c], [d, b], [d, a]]

Ilość możliwych wariacji bez powtórzeń zwraca funkcja numbperm(n,k):

> numbperm(4,2);

                                      12
> numbperm({a,b,c,d},2);

                                      12

Kombinacje

Kombinacje k-elementowe

Możliwe k-elementowe kombinacje zbioru n-elementowego można otrzymać przy pomocy funkcji choose(n,k):

> choose(4,2);

               [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

> choose({a,b,c,d},2);

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

Ilość możliwych k-elementowych kombinacji zbioru n-elementowego zwraca funkcja numbcomb(n,k):

> numbcomb(4,2);

                                       6
> numbcomb({a,b,c,d},2);

                                       6

Wszystkie możliwe kombinacje

W celu wypisania wszystkich możliwych k-elementowych kombinacji zbioru n-elementowego, gdzie k = 0, 1, … n należy zastosować funkcję choose(n):

> choose(4);

[[], [1], [2], [3], [4], [1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4],

    [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4], [1, 2, 3, 4]]

> choose({a,b,c,d});

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

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

Ilość możliwych k-elementowych kombinacji zbioru n-elementowego, gdzie k = 1, 2, … n zwraca funkcja numbcomb(n):

> numbcomb(4);

                                      16
> numbcomb({a,b,c,d});

                                      16

Kombinacje liczb naturalnych

Funkcja composition(m,n) wypisuje wszystkie n-elementowe listy liczb naturalnych, których suma równa jest m:

> composition(6,3);

{[4, 1, 1], [3, 2, 1], [2, 3, 1], [1, 4, 1], [3, 1, 2], [2, 2, 2], [1, 3, 2],

    [2, 1, 3], [1, 2, 3], [1, 1, 4]}

O ilości zwracanych list dowiemy się po użyciu polecenia numbcomp(m,n):

> numbcomp(6,3);

                                      10

W połączeniu z poleceniem wykonywania sekwencyjnego seq funkcja composition może być użyta do znalezienia wszystkich możliwych sum liczb naturalnych nie większych niż zadana liczba naturalna, na przykład:

> seq(composition(5,i),i=1..5);

{[5]}, {[4, 1], [3, 2], [2, 3], [1, 4]},

    {[3, 1, 1], [2, 2, 1], [1, 3, 1], [2, 1, 2], [1, 2, 2], [1, 1, 3]},

    {[2, 1, 1, 1], [1, 2, 1, 1], [1, 1, 2, 1], [1, 1, 1, 2]},

    {[1, 1, 1, 1, 1]}

Jednakże zauważamy, że takie postępowanie w wyniku daje powtarzające się odpowiedzi (na przykład [2,1,2] oraz [1,2,2]). Aby wypisać niepowtarzające się rozkłady liczby naturalnej n na sumę liczba naturalnych należy użyć funkcji partition(n):

> partition(5);

  [[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 2, 2], [1, 1, 3], [2, 3], [1, 4], [5]]

O ilości zwracanych list dowiemy się po użyciu polecenia numbpart(n):

> numbpart(5);

                                       7