Vendégkönyv - személyes honlapja
bevezetés
Ez a cikk bemutatja számos klasszikus kombinatorikai válaszfalak, mint a partíció mozhestv és számok, a végeredmény és a kombinációk, permutációk, binomiális együtthatók et al.), És az algoritmusok generálására kombinatorikus tárgyakat.
A tanuló különböző kombinatorikus tárgyak, mi, először is, mi válaszolunk számos klasszikus problémát:
1. Hány tagja áll, tanult sok?
2. Hogyan lehet átmenni a halmaz elemeit?
3. Hogyan felsorolni ezeket az elemeket? Azaz, mivel tudva az elemek száma n, és így egy lehetséges az elemek között, és a számok 1 :. N?
Mell 0-1 vektorok
Az egyszerűség kedvéért úgy, mint egy teszt készlet kombinatorikus tárgy Bm az m készlet nullák. Erre sor fog választ adni a kérdésekre.
Magától értetődik, hogy több m jelkészlet nullák tartalmazó pontosan 2m elemeket.
Ahhoz, hogy hozzon létre egy számítási eljárás, ahol az egyes lépéseket, és új, nem látott, az elem a készlet tekinthető, elegendő megjegyezni, hogy van egy összefüggés a számok 0 ... 2m # 8722; 1-es és 0-1 db vektorok. E. Elég, hogy az első szám 0 és a bináris 0, ..., 0, majd add hozzá a készüléket szimuláló azt a jelenlegi készlet, amíg eljutunk a készlet minden is.
Szintén tekinthető kizárólagosnak keresési módszert készlet tud nyújtani egy másik algoritmus minden lépésben, amely megváltoztatja az értékét csak az egyik összetevője. Az algoritmus alapja az a gondolat rekurzió.
1. Mi fix értéke nulla m-edik komponense és végiglépdelni készletek hossz m # 8722; az egyik a többi komponens.
2. értékének megváltoztatása az m-edik komponense 0-ról 1 Áthurkolt készlet hossz m # 8722; 1 fordított sorrendben.
Itt van egy táblázat, amely bemutatja felsorolásával folyamat szett hossza 4. oszlop azt jelzi, hogy hány az aktuális iteráció és a készlet oszlop - komponenseinek számát kell frissíteni.
Azt is könnyen választ arra a kérdésre, hogy hogyan felsorolni gyűjteménye készletek. Valóban, a jelenlegi készlet a készlet - bináris ábrázolása egy számot, és ez a mi beállított számot. Így tudjuk hozzárendelni az egyes sor numerikus egyenértékű.
Gray-kód
Korábban úgy gondoltuk, egy rekurzív algoritmust mellszobor 0-1 készletek. Ez az algoritmus lehetővé teszi, hogy rendezni az összes halmazok Bm úgy, hogy minden következő sor eltér az előzőtől csak egy kategóriában. Szerkesztettek az algoritmus sorozata készletek (a táblázatban megadott) nevezik Gray-kódot. Általában, n-bites Gray-kód - egy rendezett (esetleg ciklusos) szekvenciát, amely a 2n n-bites kódszavak, amelyek mindegyike különbözik a szomszédos egy ürítő.
Itt egy (ezúttal az nonrecurrent) generáló algoritmus Gray kódokat. Nézzük a bináris Gray kódját annak érdekében, n. Így, az algoritmus alkalmazható a bemeneti egyetlen n szám, amely meghatározza a sorrendben a Gray-kód. Ennek során az algoritmus, megkapjuk a szekvencia minden alcsoportjánál n elemű halmaz, ahol az egymást követő részhalmaza nyert a fenti hozzáadásával vagy eltávolításával egy elem (a lehető legkisebb változás) - Gray-kód. Ahol minden egyes alcsoport képviseli bináris szekvenciát B [1], ..., B [n].
Szürke-Generation (n)
1 i: = 1-től n-do B [i]: = 0;
2 i: = 0;
3 ismétlés
4 write (B [i], ..., B [n]);
5 i: = i + 1; p: = 1; J: = i;
6 míg j mod 2 = 0 do
7 kezdődik
8 j: = j / 2; p: = p + 1;
9 vége;
10, ha p # 8804; N, akkor a B [p]: = 1 # 8722; B [p];
11-ig p> n
A bizonyíték a helyességét az algoritmus megtalálható [1].
A kapott szekvencia részhalmaza illusztrálja egy grafikon, (n-dimenziós kocka), amelynek csúcsai megfelelnek a bináris jelsorozat n hosszúságú, és két csúcsot köti össze egy éllel, ha a megfelelő szekvenciák különböznek csak egy helyzetben. Ezután ez a szekvencia megfelel egy Hamilton út a grafikonon, t. E. Az út, amely tartalmaz minden csúcsa a grafikon csak egyszer.
Végigmegy közvetlen terméke a készletek
Ha figyelembe vesszük, bármely két A és B halmaz, akkor hívja őket közvetlenül (Descartes) terméket (A # 215; B) az A és B, a készlet minden rendezett párok (i, j), ahol i # 8712; A, j # 8712; B. teljesítmény van beállítva, ha a keletkező Descartes-szorzat készlet egyenlő a kapacitásának ezen halmazok.
Sőt, tudjuk meg a közvetlen termék bármely véges számú készletek. Például, ha figyelembe vesszük, csak egy sor példányok, a két elemből álló, 0 és 1, a közvetlen terméke m ilyen esetekben lesz több korábban rascmotrennoe Bm.
Így tartjuk a közvetlen terméke k készletek: M1 # 215; M2 # 215; ... # 215; Mk. Nyilvánvaló, hogy
| M1 # 215; M2 # 215; ... # 215; Mk | = # 8719; i # 8712; 1: k mi,
ahol mi = | Mi | - az elemek száma a készlet Mi.
Hagyja, hogy a set Mi egész számokból áll 0 és mi # 8722; 1, i # 8712; 1: k. Ezután minden egyes eleme a közvetlen terméke az M1 # 215; M2 # 215; ... # 215, a Mk ábrázolható sorozataként nem negatív egész r1, r2, ..., rk, ahol a 0 # 8804; ri
NUM (r1, r2, ..., rk) = # 8721; i = 1: k ri # 215; # 8719; j = 1: I # 8722; 1 mj.
permutációk
Permutáció n-elemű halmaz X - jelentése egy értékű függvény f: X → X. Ha, az egyszerűség kedvéért, hogy X =, lehet nevezni egy permutációja rendezett halmaza n különböző számok fekvő tartományban 1-től n (a továbbiakban látható lesz ez a helyzet).
Mi halmaza permutációk X keresztül Sn. Nyilvánvaló, hogy | Sn | = N. T. To. Az első helyen, amelyet meg lehet tenni bármennyi n lehetséges, a második - bármely n # 8722, 1 balra és így tovább, egészen az utolsó helyre, ahol tesszük az utolsó megmaradt eleme: .. Ennek eredményeképpen megkapjuk a terméket melyik lesz faktoriális n.
Tekintsük a sor Mi az előző részben. Tegyük fel, hogy Mi mindegyike fogja képviselni egy sor számok 0 és i # 8722; 1. Mi jelöljük Tn terméket n ilyen készletek. Aztán, ha lesz egy összefüggés a Sn és Tn, akkor különösen Átszámozáshoz összes permutációt Sn. Gyártunk a mechanizmus átmenet permutáció r1, ..., rn # 8712; Sn az elem t1, ..., tn # 8712; Tn. Ehhez minden i # 8712; 1: n megtalálják a pozíciószámot értékek az S i a permutációs (rs = i), és megteszi, mint ti kisebb elemek száma között i R1, ..., rs # 8722; 1. És fordítva átmenet az elemet a bankközi lehet használni, hogy a hely bármely elemének i (a legnagyobb), az egyik nagyobb, mint az elemek száma megelőzően i, és a szám maga az összegével egyenlő ti és az elemek száma, a nagy i.
Ezen kívül minden permutáció # 8712; Sn leírható egy irányított gráf a csúcsok halmaza X =, ahol az említett borda x-y, ahol f (x) = y. Egy könnyen azt mutatják, hogy egy ilyen gráf áll, számos elemi ciklus különböző készlet a pontok, amelyek kitesz egy csomó X. e. Minden permutáció tudjuk bővíteni a ciklus. Vegyük például egy permutációs F (1234567) = 7514236 és osszuk ciklusok:
generálása permutációk
Bemutatjuk néhány jelölést írásban algoritmusok. permutációja az elemek lesznek tárolva, mint a tömb elemeinek P [1], ..., P [N]. Cseréje a változók értékeit fogjuk jelölni P [i]: =: P [j]. Emlékezzünk, hogy csak azokat a permutáció halmazán megadott X =.
A forgatáson Sn kérni Iexikografikus sorrendben:
(X1, ..., xn) <(y1, …, yn) ⇔ существует k ≥ 1, такое что xk ≤ yk и xl = yl для каждого l
(X1, ..., xn) <(y1, …, yn) ⇔ существует k ≤ n, такое что xk> yk és xl = il minden egyes L> k.
Most képzeljünk el egy algoritmus generál minden permutáció antileksikograficheskom érdekében. Megjegyzendő, hogy ez egy rekurzív algoritmust.
1 eljárás REVERSE (m);
2 kezdeni i: = 1; J: = m;
3 míg a i
5 end
6 end
7. eljárás ANTYLEX (m);
8 kezdődik
9, ha m = 1, akkor
10 write (P [1], ..., P [N])
11 más
12 i: = 1-től m do
13 kezdeni ANTYLEX (m # 8722; 1);
14, ha én
16 vége
17 vége
18 vége;
19 kezdeni
20 i: = 1-től n-do P [i]: =: i;
21 ANTYLEX (n)
22 vége
Az átlagos száma átültetés tulajdonított egyes permutáció közelítőleg egyenlő 1,543, t. E. generál n! használt permutációk kb 3.077n! összehasonlítások.
Ön tud nyújtani egy gyorsabb algoritmust, amelyben az egymást követő permutációt generálja az előzőtől csak egy átültetés. Itt permutáció algoritmussal a minimális számú átültetések:
1 B eljárás (m, i);
2. kezdődik
3, ha (m mod 2 = 0), és (m> 2), akkor
4, ha i
6 mást B: = m # 8722; 1
7 vége;
8. eljárás PERM (m);
9 kezdődik
10, ha m = 1, akkor
11 write (P [1], ..., P [N])
12 más
13 i: = 1-től m do
14 kezdeni PERM (m # 8722; 1);
15, ha én
17 vége;
18 kezdeni
19 i: = 1-től n-do P [i]: =: i;
20 PERM (n)
21 vége
A bizonyíték a helyességét az algoritmus megtalálható [1].
Azonban van egy gyorsabb generáló algoritmus permutációk, épít a szekvencia permutációs, ahol minden következő képződik az előző egyetlen átültetése szomszédos elemek. Jelöljük PR [i] logikai változó információkat tartalmazó e a tételt i átadásra előre (PR [i] = true) vagy hátra. Peremennnaya C [i] megmutatja, amely a lehetséges N # 8722; i + 1-helyzetében az elem i veszi a elemek i + 1, ..., n úton van oda-vissza. Itt a kód:
1 kezdődik
2 i: = 1-től n-do
3 kezdeni P [i]: = i; C [i]: = 1; PR [i]: = true;
4 végén;
5 C [n]: = 0;
6, levelet (P [1], ..., P [N]);
7 i: = 1;
8 míg én
10 míg a C [i] = n # 8722; i + 1 do
11 kezdeni PR [i]: = nem PR [i]; C [i]: = 1;
12 Ha PR [i], akkor x: = x + 1;
13 i: = i + 1;
14 vége;
15, ha én
17, ha PR [i], majd k: = C [i] + x;
18 mást k: = N # 8722; i + 1 # 8722; C [i] + x;
19 P [K]: =: P [k + 1];
20 write (P [1], ..., P [N]);
21 C [i]: = C [i] + 1
22 vége
23 vége
24 vége
Ebben a témában megtalálható visualizers [3] és [4].
A szekvencia permutációs kapott ezt az algoritmust egy érdekes értelmezést. Így, ha figyelembe vesszük a grafikon, amelyek megfelelnek az összes permutációk VESCINE és ahol két csúcsot megfelelő permutációk f és g, vannak összekötve egy éllel, ha f g van kialakítva egyetlen átültetése szomszédos elemek, a kapott szekvencia egy Hamilton út a grafikonon. Az ábrán egy szekvenciát gráf n = 3, 4.
A probléma a minimális skalárszorzat
Perstanovki gyakran megtalálhatók a legkülönbözőbb területeken a matematika és használják a különböző feladatokat. Vegyük például a nem-algebrai felhasználása a következőképpen változik extremális problémát: adott 2m szám x1, ..., xm és y1, ..., ym, meg kell találni a partíció számok párokba (xi, yj), ahol a az összege alkotja a termékeket a számok az egyes párok lesz a legkisebb.
Könnyen azt mutatják, hogy a megoldást erre a problémára úgy érjük el, összehasonlítjuk a szekvencia a növekvő és csökkenő xi yi szekvenciát t. E. szekvenciák elrendezve az ellenkező sorrendben.
Elhelyezése és kapcsolási
Elhelyezés a n eleme m - egy rendezett (itt sorrend fontos) egy sor m különböző egész számok fekvő tartományban 1-től n (vagyis .. # 8712; X). Más szóval, Szállás - ez meg az ismétlést. Jelöljük az elemek száma révén An, m.
Annak érdekében, hogy az A értékét egy, m, be kell tartania az ugyanazon érvelést, mint abban az esetben, változatai. Akkor megkapjuk a következő eredménnyel:
Egy, m = n! # 8260; (N # 8722; m)!
Keresés és számozási juttatások általában hasonló a megfelelő műveleteket változatai. Megvitatása a fenti kérdésekre kínálnak az olvasónak, mint hasznos gyakorlat.
A kombináció elemeit n m - egy rendezetlen halmaza (több) m különböző számú tartozó beállított X jelöli a elemeinek számát kombinációk révén Cn, m.
Mivel a. Kombináció egy rendezetlen halmaza, akkor minden ilyen készülék megfelel m! Szálláshelyek (m. e. az azonos rendezett halmaza elemek). Akkor azt találjuk, hogy
Cn, m = n! # 8260; m (n # 8722; m) !!
Okozhat bizonyos tulajdonságait kombinációk:
1. Cn, m = Cn, n # 8722; m
2. Cn, m + Cn, m + 1 = Cn + 1, m + 1
3. Cn, m * Cm, k = Cn, k * Cn # 8722; k, m # 8722; k
Ezek a tulajdonságok erednek meghatározások magukat, és azonnal ellenőrizni.
Most egy algoritmussal kombinációk lexikográfiai sorrendben:
1 kezdődik
2 i: = 1 és k csinál egy [i]: = i;
3 p: = k;
4, míg p # 8804; 1 do
5 kezdődik write (A [1], ..., [K]);
6, ha a [K] = N, akkor p: = p # 8722; 1 mást p: = k;
7, ha p # 8805; 1, akkor
8 i: = k downto p csinál egy [I]: = A [p] + i # 8722; p + 1
9 end
10 vége
Elérhető megjelenítő [5] A jelen algoritmus.
Számozás kombinációkat lehet elhelyezni a tulajdonság 2) kombinációi a fenti. Ebből a célból, minden egyes kombinációja n által m n társult vektor nullák. Ebben a vektorban lenne m egységek, és a kombinációk száma meghatározza az Ezen egységek száma. Aztán ez a vektor viszont összehasonlítani a pályára, ahol az egység felel meg egy vízszintes lépések és nullák - függőleges. Ekkor a képlet a szám vyglyaet mint
NUM (b [1: n], m) = <если b[n] = 0, то num(b[1:n−1], m); если b[n] = 1, то Cn−1,m + num(b[1:n−1], m−1)>,
ahol b [1: n] - 0-1 vektor n elemek.
binomiális tétel
Ha a csomópontok a pozitív negyedben a derékszögű rács tegye útvonalak számának a származási ezeken az oldalakon, és kapcsolja be a grill úgy, hogy a származási volt a tetején, megkapjuk a Pascal háromszög:
Ezen háromszög kényelmes, hogy fontolja meg a kombinációk száma kisebb beállításokat. Továbbá, ezzel a rendszer társítva binomiális képlet:
(A + b) n = # 8721; k = 0: n Cn, kakbn # 8722; k
Ebben a képletben, a nyilvánosságra hozatal fokú algebrai binomiális együtthatók hatáskörök egybeesik a kombinációk száma. Alapján Newton képletű Cn érték, m is nevezik, mint binomiális együtthatók. Néhány érdekes tulajdonságai binomiális Newton vették figyelembe. [2]