Podział zbioru
-
Upload
jakub-klimasz -
Category
Documents
-
view
687 -
download
2
description
Transcript of Podział zbioru
Podział zbioru, generowanie podziałów zbiorów, liczby Bella.
Podział (rozbicie, partycja) zbioru – podzielenie zbioru na niepuste i rozłączne podzbiory, które w sumie dają cały zbiór. Definicja
Niech H będzie dowolnym zbiorem. Podziałem (rozbiciem, partycją) zbioru H nazywa się rodzinę niepustych, parami rozłącznych podzbiorów zbioru H takich, że ich suma jest równa zbiorowi H. Tak więc rodzina
indeksowana jest partycją zbioru H, jeśli są spełnione następujące warunki:
•
• ,
• .
O rodzinie mówi się, że jest podziałem na | I | podzbiorów.
Przykłady:
Zbiór { 1, 2, 3 } ma 5 podziałów.
• { {1}, {2}, {3} }, • { {1, 2}, {3} }, • { {1, 3}, {2} }, • { {1}, {2, 3} },
{ {1, 2, 3} }, Zauważmy, że:
• { {}, {1,3}, {2} } nie jest podziałem (zabiera pusty zbiór) • { {1,2}, {2, 3} } nie jest podziałem ponieważ element 2 znajduje się więcej niż 1
partycji zbioru • { {1}, {2} } nie jest podziałem zbioru {1, 2, 3} ponieważ żadna z partycji nie zawiera
elementu 3; ale jest partycja zbioru{1, 2}.
II.Liczby Bella Definicja 1.
Niech Bn będzie równe liczbie wszystkich partycji zbioru n-elementowego. (Przypomnijmy, że partycją zbioru nazywamy rodzinę jego niepustych, parami rozłącznych podzbiorów, które w sumie dają cały zbiór).Korzystając z interpretacji kombinatorycznej liczb Stirlinga II rodzaju mamy:
Uwaga: Ilekroć poniżej będzie mowa o przypisywaniu ludzi do stolików lub do pokoi, to przyjmujemy, że: – osoby są rozróżnialne; – stoliki są nierozróżnialne (identyczne)
Przy założeniu, że B0 = 1 (zbiór pusty posiada dokładnie jedną partycję).
Ciąg nazywamy ciągiem liczb Bella (lub ciągiem liczb ekspotencjalnych).
Obserwacja 1. Korzystając z interpretacji kombinatorycznych liczb można udowodnić następujące interpretacje kombinatoryczne liczb Bella:
(1) Bn - liczba rozmieszczeń n różnych obiektów w co najwyżej n identycznych pudełkach. (2) Bn - liczba obsadzeń n osób dookoła co najwyżej n stolików (gdy nieważny jest sposób usadzenia osób przy stoliku). (3) Liczba naturalna będąca iloczynem n różnych liczb pierwszych może być przedstawiona w postaci iloczynu różnych czynników na Bn sposobów. (4) Bn - liczba ciągów modelowych dla słów długości n. (5) Bn - liczba różnych schematów rymowych w strofie n-wersowej. (6) Bn - liczba permutacji zbioru {1, 2, ..., n} z określonym porządkiem na wszystkich cyklach. (7) Wiadomo, że relacja równoważności dzieli zbiór, na którym jest określona na rozłączne i niepuste klasy abstrakcji. Wynika stąd i z Definicji, że Bn - liczba relacji równoważności na zbiorze n-elementowym.
Rekurencja
Rozważmy usadzenia (n + 1) osób dookoła co najwyżej (n + 1) stolików (niektóre stoliki mogą być puste). Wyróżnijmy jedną osobę, np. ostatnią. Może ona siedzieć przy stoliku z r innymi osobami (r = 0, 1, 2, ..., n), które można wybrać na
sposobów spośród innych osób. Wtedy pozostałe (n − r) osób może usiąść przy co najwyżej n stolikach na Bn−r sposobów.
Stosując zasady: mnożenia i dodawania, mamy, że:
Powyższe równanie rekurencyjne, wraz z warunkiem brzegowym: B0 = 1 stanowi kolejną definicje ciągu liczb Bella i umożliwia wypisanie tablicy ich wartości.
N Bn
0 1
1 1
2 2
3 5
4 15
5 52
6 203
7 877
8 4140
9 21147
10 115975
11 678570
12 4213597
13 190899322
14 1382958545
III.Generowanie podziałów zbioru Podziały utworzone przez program Mathematica
Użyjemy wyjaśnionego w punkcie 2 definiowania rekurencyjnego lecz bez zbędnego zagłębiania się w kod źródłowy.
BellList[1] = {{{1}}}; (* podstawowy zbiór*) BellList[n_Integer?Positive] := BellList[n] = (* cachowanie *)
Flatten[ Join[ Map[ReplaceList[#,{S__}->{S,{n}}]&, BellList[n-1]], Map[ReplaceList[#,{b___,{S__},a___}->{b,{S,n},a}]&, BellList[n-1]]], 1]
{1, 2, 3}, 5 partycji:
{1, 2, 3, 4}, 15 partycji:
{1, 2, 3, 4, 5}, 52 partycje:
{1, 2, 3, 4, 5, 6}, 203 partycji:
A partycje w postaci liczbowej które zobrazowano powyżej: BellList[2] {{1}, {2}} {{1, 2}} BellList[3] {{1}, {2}, {3}} {{1, 2}, {3}} {{1, 3}, {2}} {{1}, {2, 3}} {{1, 2, 3}} BellList[4] {{1}, {2}, {3}, {4}} {{1, 2}, {3}, {4}} {{1, 3}, {2}, {4}} {{1}, {2, 3}, {4}} {{1, 2, 3}, {4}} {{1, 4}, {2}, {3}} {{1}, {2, 4}, {3}} {{1}, {2}, {3, 4}} {{1, 2, 4}, {3}} {{1, 2}, {3, 4}} {{1, 3, 4}, {2}} {{1, 3}, {2, 4}} {{1, 4}, {2, 3}} {{1}, {2, 3, 4}} {{1, 2, 3, 4}}
Generowanie wszystkich podziałów zbioru {1,…,n} Dane:n Wyniki: Ciąg wszystkich partycji zbioru {1,…,n} w którym każdy następny podział powstaje z poprzedniego przez przeniesienie pojedynczego elementu do innego bloku.
1.begin
2.for i:=1 to n do //umieszcza i-te elementy w pierwszym bloku
3.begin BLOK[i]:=1; KIER[i]:=true
4.end;
5.NAS[1]:=0;
6.wypisz podział;
7.j:=n; //zmiennej j przypisuje element aktywny
8.while j>1 do
9.begin k:=BLOK[j];
10.if KIER[j] then //zmienna j przesuwa się do przodu
11.begin
12.if NAS[k]=0 then //numer k bloku jest ostatnim blokiem
13.begin NAS[k]:=j; POP[j]:=k; NAS[j]:=0
14.end;
15.if NAS[k]>j then //zmienna j tworzy nowy blok
16.begin POP[j]:=k; NAS[j]:=NAS[k];
17.POP[NAS[j]]:=j; NAS[k]:=j
18.end;
19.BLOK[j]:=NAS[k]
20.end;
21.else //zmienna j przesuwa się do tyłu
22.begin BLOK[j]:=POP[k];
23.if k=j then //zmienna j tworzył blok jednoelementowy
24.if NAS[k]=0 then NAS[POP[k]]:=0
25.else begin NAS[POP[k]]:=NAS[k];
26.POP[NAS[k]]:=POP[k]
27.end
28.end;
29.wypisz podział;
30.j:=n;
31.while (j>1) end
32.((KIER[j] and (BLOK[j]=j)) or (not KIER[j] and (BLOK[j]=1)))
do
33.begin KIER:= not KIER[j]; j:=j-1
34.end
35.end
36.end