Kombinatorikai algoritmusok. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Hasonló dokumentumok
Kombinatorikai algoritmusok

Adatszerkezetek II. 10. előadás

Visszalépéses kiválogatás

Informatikai tehetséggondozás:

Algoritmizálás, adatmodellezés tanítása 7. előadás

Diszkrét matematika 1.

Diszkrét matematika 1.

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Informatikai tehetséggondozás:

Biomatematika 2 Orvosi biometria

Hatékonyság 1. előadás

Felvételi tematika INFORMATIKA

Osztályozóvizsga követelményei

Mohó stratégia. Feladat: Megoldás:

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

Visszalépéses maximumkiválasztás

HHF0CX. k darab halmaz sorbarendezésének a lehetősége k! Így adódik az alábbi képlet:

Nyugat-magyarországi Egyetem Geoinformatikai Kara. Prof. Dr. Závoti József. Matematika III. 1. MA3-1 modul. Kombinatorika

TANMENET. a matematika tantárgy tanításához 11.E osztályok számára

[Biomatematika 2] Orvosi biometria

Adatszerkezetek II. 6. előadás

Definíció n egymástól megkülönböztethető elem egy sorrendjét az n elem egy (ismétlés nélküli) permutációjának nevezzük.

Közismereti informatika I. 4. előadás

Bevezetés a matematikába (2009. ősz) 1. röpdolgozat

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Algoritmizálás, adatmodellezés tanítása 1. előadás

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Backtrack-es feladat-variációk

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmizálás, adatmodellezés tanítása 11. előadás. (Horváth Gyula előadása alapján)

Multihalmaz, intervallumhalmaz

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

2015, Diszkrét matematika

ELEMI PROGRAMOZÁSI TÉTELEK

Tanmenet a évf. fakultációs csoport MATEMATIKA tantárgyának tanításához

Matematika tanmenet 11. évfolyam (középszintű csoport)

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Számelmélet Megoldások

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

Algoritmizálás, adatmodellezés tanítása 8. előadás

Kombinatorika jegyzet és feladatgyűjtemény

NT Matematika 11. (Heuréka) Tanmenetjavaslat

Bevezetés az algebrába az egész számok

Osztályozóvizsga és javítóvizsga témakörei Matematika 9. évfolyam

Rekurzív algoritmusok

7! (7 2)! = 7! 5! = 7 6 5! 5 = = ből 4 elem A lehetőségek száma megegyezik az 5 elem negyedosztályú variációjának számával:

Diszkrét matematika I.

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny első fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Analízis előadás és gyakorlat vázlat

Feladatmegoldási stratégiák

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

4. Sorozatok. 2. Igazoljuk minél rövidebben, hogy a következő egyenlőség helyes: 100 =

Hatványozás. A hatványozás azonosságai

24. tétel. Kombinatorika. A grá fok.

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Algoritmusok és adatszerkezetek I. 1. előadás

PROGRAMOZÁSI TÉTELEK

Bevezetés az algebrába 1

Programozási tételek. Dr. Iványi Péter

Számelmélet (2017. február 8.) Bogya Norbert, Kátai-Urbán Kamilla

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Problémamegoldási stratégiák

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Informatikai tehetséggondozás:

Megoldás: Mindkét állítás hamis! Indoklás: a) Azonos alapú hatványokat úgy szorzunk, hogy a kitevőket összeadjuk. Tehát: a 3 * a 4 = a 3+4 = a 7

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Algoritmizálás, adatmodellezés 1. előadás

SZAMOKKAL Egy algoritmus generálja növekvő sorrendben, kizárólag a 3, 5 és 7 számjegyeket használva, az összes n számjegyű számot.

VÉLETLEN PERMUTÁCIÓ ELŐÁLLÍTÁSA

æ A GYAKORLAT (* feladatok nem kötelezőek)

Diszkrét matematika I.

Az értékelés a következők szerint történik: 0-4 elégtelen 5-6 elégséges 7 közepes 8 jó 9-10 jeles. A szóbeli vizsga várható időpontja

Osztályozó- és javítóvizsga témakörei MATEMATIKA tantárgyból 2016 / tanév

A sorozat fogalma. függvényeket sorozatoknak nevezzük. Amennyiben az értékkészlet. az értékkészlet a komplex számok halmaza, akkor komplex

Fibonacci számok. Dinamikus programozással

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

5. Rekurzió és iteráció (Rekurzív programok átírása nemrekurzívvá)

Algoritmuselmélet 2. előadás

Informatikai tehetséggondozás:

Klasszikus algebra előadás. Waldhauser Tamás április 14.

Negatív alapú számrendszerek

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

1.1. Definíció. Azt mondjuk, hogy a oszója b-nek, vagy más szóval, b osztható a-val, ha létezik olyan x Z, hogy b = ax. Ennek jelölése a b.

8. GYAKORLÓ FELADATSOR MEGOLDÁSA. (b) amelyiknek mindegyik számjegye különböző, valamint a második számjegy a 2-es?

Nagy Gábor compalg.inf.elte.hu/ nagy

1. GONDOLKODÁSI MÓDSZEREK, HALMAZOK, KOMBINATORIKA, GRÁFOK

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Kombinatorika - kidolgozott típuspéldák

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

A 2015/2016 tanévi Országos Középiskolai Tanulmányi Verseny első forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

Amortizációs költségelemzés

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Egyszerű programozási tételek

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Sorozatok határértéke SOROZAT FOGALMA, MEGADÁSA, ÁBRÁZOLÁSA; KORLÁTOS ÉS MONOTON SOROZATOK

INFORMATIKA javítókulcs 2016

SZÁMÉRTÉKEK (ÁT)KÓDOLÁSA

Átírás:

Kombinatorikai algoritmusok (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Kombinatorikai algoritmusok A kombinatorika: egy véges halmaz elemeinek valamilyen szabály alapján történő csoportosításával, kiválasztásával, sorrendbe rakásával foglalkozik (Wikipedia) Tipikus kombinatorikai feladatok: részhalmazok képzése összes felsorolása partícionálás céljából halmazfelbontás adott tulajdonságú (pl. adott számosságú) megadása Zsakó László: Kombinatorika 2018. 02. 23. 15:00 2/54

Kombinatorikai algoritmusok Tipikus kombinatorikai feladatok: halmazok számosságának a meghatározása halmazok (~sorozatok) felsorolása összes eleme halmazok (~sorozatok) valamely elemének generálása egy eleme szabályos sorrend szerinti i. elem adottra következő, előző véletlen elem Zsakó László: Kombinatorika 2018. 02. 23. 15:00 3/54

Kombinatorikai algoritmusok Kombinatorikai feladattípusok: permutációk (ismétlés nélküli, ismétléses) kombinációk (ismétlés nélküli, ismétléses) variációk (ismétlés nélküli, ismétléses) részhalmazok diszjunkt felbontások (N elemű halmaz diszjunkt felbontásai K halmazra, vagy természetes számra: N=x 1 + x k, ahol x i 0) partíciók (N elemű halmaz diszjunkt felbontásai, vagy természetes számra: N=x 1 + x m, ahol x i >0) Zsakó László: Kombinatorika 2018. 02. 23. 15:00 4/54

Ismétlés nélküli kombinációk Ismert képlet: Kombinatorikai algoritmusok az elemszám kiszámítása N K K! Rekurzív definíció 1: N elemből K elem választása az első elemet választjuk, majd még N-1 elemből választunk K-1 elemet. vagy az első elemet nem választjuk és a maradék N-1 elemből választunk K elemet. B(N,K)=B(N-1,K-1)+B(N-1,K). N! N K! K N N 1... 1 K 1... 1 N K N K 1... 1 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 5/54

az elemszám kiszámítása Ismétlés nélküli kombinációk B(N,K): Ha K=0 vagy K=N akkor B:=1 különben B:=B(N-1,K-1)+B(N-1,K) Függvény vége. De táblázatkitöltéssel hatékonyabb! Binom(N,K): Szélek feltöltése Ciklus i=1-től N-ig Ciklus j=1-től i-ig B(i,j):=B(i-1,j-1)+B(i-1,j) Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 6/54

az elemszám kiszámítása Ismétlés nélküli kombinációk Rekurzív definíció 2: N elemből K elem választása először kiválasztunk K-1 elemet, majd a maradék N-K+1 elemből kell egyet választani (de így minden kombináció pontosan K-féleképpen áll elő), tehát jön még egy K-val osztás B(N,K)=B(N,K-1)*(N-K+1)/K Zsakó László: Kombinatorika 2018. 02. 23. 15:00 7/54

az elemszám kiszámítása Ismétlés nélküli kombinációk B(N,K): Ha K=0 akkor B:=1 különben B:=B(N,K-1)*(N-K+1)/K Függvény vége. Táblázatkitöltéssel lényegében nem hatékonyabb! Binom(N,K): B(0):=1 Ciklus i=1-től N-ig B(i):=B(i-1)*(N-i+1)/i Függvény vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 8/54

az elemszám kiszámítása Elsőfajú Euler számok E(n,k) az első n természetes szám azon permutációi száma, ahol pontosan k emelkedés van (emelkedés van az i-edik helyen, ha x i <x i+1 ). n-1 elem összes olyan permutációja, ahol pontosan k növekedés van: az n-edik számot a sorozat elejére vagy egy emelkedésbe tesszük; n-1 elem összes olyan permutációja, ahol pontosan k-1 emelkedés van: n-edik elemet a sorozat végére vagy egy nem emelkedő helyre tesszük. E n, k k 1 E n 1, k n k E n 1, k 1 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 9/54

az elemszám kiszámítása Másodfajú Euler számok E(n,k) az {1,1,2,2,,n,n} sorozat olyan permutációi száma, amelyekben tetszőleges m szám két előfordulása között csak náluk nagyobb szám fordulhat elő és pontosan k emelkedő részsorozata van. Vegyük észre, hogy amikor áttérünk n-1-ről n-re, akkor a két n-edik számot csak egymás mellé szúrhatjuk be! Zsakó László: Kombinatorika 2018. 02. 23. 15:00 10/54

az elemszám kiszámítása Másodfajú Euler számok n-1 elem összes olyan permutációja, ahol pontosan k növekedés van: az n-edik számpárt a sorozat elejére vagy egy emelkedésbe tesszük; n-1 elem összes olyan permutációja, ahol pontosan k-1 emelkedés van: n-edik számpárt a sorozat végére vagy egy nem emelkedő helyre tesszük (ebből 2*n-1-k van). E n, k k 1 E n, k 1 2n 1 k E n 1, k 1 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 11/54

az elemszám kiszámítása n\k 0 1 2 3 4 5 6 7 0 1 1 1 0 2 1 2 0 3 1 8 6 0 4 1 22 58 24 0 5 1 52 328 444 120 0 6 1 114 1452 4400 3708 720 0 7 1 240 5610 32120 58140 33984 5040 0 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 12/54

az elemszám kiszámítása Ismétlés nélküli permutációk száma megszorítással minden elem a sorszám szerinti helyétől legfeljebb egyet távolodhat el Amikor a permutációk előállításában az I. elemnél tartunk, akkor két döntési lehetőségünk van: az I marad a helyén, majd permutációk I+1-től, az I+1 és az I helyet cserél, majd permutációk I+2-től. Permszám(X,n): Ha n<2 akkor Permszám:=n különben Permszám:=Permszám(n-1)+ Permszám(n-2) Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 13/54

az összes előállítása Összes ismétlés nélküli permutáció Backtrack: i (1 i n): j (1 j<i): X j X i Összes ismétlés nélküli kombináció Backtrack: i (1 i k): j (1 j<i): X j <X i Összes ismétléses kombináció Backtrack: i (1 i k): j (1 j<i): X j X i Összes partíció Olyan K-jegyű számok, ahol a számjegyek összege pontosan N. Összes diszjunkt felbontás N felbontása pozitív (>0) számok összegére. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 14/54

az összes előállítása Összes ismétlés nélküli permutáció 1 2 3 N-1 N 1,2,3,,N-1,N 1,2,3,,N,N-1 N,1,2,3,,N-1 N,N-1,,3,2,1 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 15/54

az összes előállítása Összes ismétlés nélküli permutáció ciklussal Permutációk(N): i:=1; X():=(0,,0) Ciklus amíg i 0 és i N Ha vanjóeset(i,van,j) akkor X(i):=j Ha i<n akkor i:=i+1 különben Kiír: X; X(i):=0; i:=i-1 különben X(i):=0; i:=i-1 Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 16/54

az összes előállítása Összes ismétlés nélküli permutáció ciklussal vanjóeset(i,van,j): j:=x(i)+1 Ciklus amíg j N és rossz(i,j) j:=j+1 van:=j N Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 17/54

az összes előállítása Összes ismétlés nélküli permutáció ciklussal rossz(i,j): k:=1 Ciklus amíg k<i és j X(k) k:=k+1 rossz:=k<i Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 18/54

az összes előállítása Összes ismétlés nélküli permutáció rekurzív backtrack Az összes olyan szám-n-es előállítása visszalépéses kereséssel, ahol i j x i x j Perm(i,n,X,db,Y): Ha i=n+1 akkor db:=db+1; Y(db):=X különben Ciklus j=1-től n-ig Ha nem Rossz(i,j) akkor X(i):=j; Perm(i+1,n,X,Db,Y) Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 19/54

az összes előállítása Összes ismétlés nélküli permutáció rekurzív backtrack Rossz(i,j): k:=1 Ciklus amíg k<i és X(k) j k:=k+1 Rossz:=(k<i) Függvény vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 20/54

az összes előállítása Összes ismétlés nélküli permutáció rekurzívan Ha N-1 elem összes permutációja kész, akkor szúrjuk be az N-et minden lehetséges helyre, mindegyikbe! Permutáció(x,i,n): Ha i>n akkor Ki: x különben x(i):=i; Permutáció(x,i+1,n) Ciklus j=i-1-től 1-ig -1-esével Csere(x(j),x(j+1)) Permutáció(x,i+1,n) Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 21/54

az összes előállítása Összes ismétlés nélküli permutáció megszorítással Az 1,,n sorozat összes olyan permutációját állítsuk elő, ahol minden elem maximum 1 hellyel mozdul el a helyéről, azaz i-1 X(i) i+1! A backtrack-es megoldást könnyű módosítani: Ciklus j=1-től n-ig helyett Ciklus j=i-1-től i+1-ig kell a programba! A rekurzív megoldást ezzel szemben újra kell gondolni! Zsakó László: Kombinatorika 2018. 02. 23. 15:00 22/54

az összes előállítása Összes ismétlés nélküli permutáció megszorítással Amikor a permutációk előállításában az I. elemnél tartunk, akkor két döntési lehetőségünk van: az I marad a helyén, majd permutációk I+1-től, az I+1 és az I helyet cserél, majd permutációk I+2-től. Permutáció(X,i,n): Ha i>n akkor Ki: X különben X(i):=i; Permutációk(X,i+1,n) Ha i<n akkor X(i):=i+1; X(i+1):=i Permutációk(X,i+2,n) Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 23/54

Feladat: Az összes permutáció alkalmazása Jól ismert fejtörő, amelyben egy aritmetikai művelet kapcsol egybe szavakat. A feladat az, hogy a szavak egyes betűinek feleltessünk meg egy számjegyet úgy, hogy a művelet helyes eredményt szolgáltasson a szavakon. Pl. SEND + MORE = MONEY. Megoldás: A szavakban előforduló jelekhez (SENDMORY) keressük a 0..9 számjegyek egyértelmű hozzárendelését. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 24/54

Az összes permutáció alkalmazása 1. megoldási ötlet ( algebrai hozzáállás ): D+E=Y, N+R=E, M=1 D+E=10+Y, N+R+1=E, M=1 2. megoldási ötlet: Az összes permutáció algoritmusára építünk. A Jó eljárás ellenőrzi a permutáció a feladat szempontjából való helyességét, és gondoskodik az esetleges megoldás gyűjtéséről vagy kiírásáról. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 25/54

Az összes permutáció alkalmazása A megfelelőség a (*) SEND + MORE MONEY = 0 egyenletre. Ha 'S X(1) értékű, akkor a (*)-ban X(1) *1000-rel van jelen; 'E' X(2) értékű, akkor X(2)*(100+1-10)=X(2)*91-gyel; 'N' X(3) értékű, akkor X(3)*(10-100)= X(3)*(-90)-nel; 'D' X(4) értékű, akkor X(4)*(1)-gyel; 'M' X(5) értékű, akkor X(5)*(1000-10000)=X(5)*(-9000)-rel; 'O' X(6) értékű, akkor X(6)*(100-1000)= X(6)*(-900)-zal; 'R' X(7) értékű, akkor X(7)*10-zel; 'Y' X(8) értékű, akkor X(8)*(-1)-gyel van jelen. továbbá az S és az M betűhöz nem rendelhetünk nullát, azaz X(1) 0 és X(5) 0! Zsakó László: Kombinatorika 2018. 02. 23. 15:00 26/54

Az összes permutáció alkalmazása Megoldás(i,n,X,db,Y): Ha i=n+1 és jó(x) akkor db:=db+1; Y(db):=X különben Ciklus j=0-tól 9-ig Ha nem Rossz(i,j) akkor X(i):=j; Megoldás(i+1,n,X,Db,Y) Eljárás vége. jó(x): jó:=(x(1) *1000+X(2)*91+X(3)*(-90)+X(4)*1+X(5)*(-9000)+ X(6)*(-900)+X(7)*10+X(8)*(-1)=0 és X(1) 0 és X(5) 0) Függvény vége. Ha a konstansokat egy Z vektorban tárolnánk, akkor a Jó függvényben X és Z skaláris szorzatát kellene kiszámolnunk. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 27/54

Összes részhalmaz az összes előállítása Feleltessük meg a részhalmazokat kettes számrendszerbeli számoknak: {} 0...0000 {1} 0...0001 {2} 0...0010 {1,2} 0...0011 {3} 0...0100 {1,3} 0...0101 {2,3} 0...0110 {1,2,3} 0...0111 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 28/54

az összes előállítása Összes részhalmaz (kettes számrendszerbeli számként) Részhalmazok(n,Y): Ciklus i=0-tól 2 n -1-ig k:=i Ciklus j=1-től n-ig X(j):=k mod 2; k:=k div 2 Y(i+1):=X Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 29/54

az összes előállítása Összes részhalmaz (részhalmazként) Részhalmazok(n,Y): Ciklus i=0-tól 2 n -1-ig X.db:=0 Ciklus j=1-től n-ig Ha k mod 2=1 akkor X.db:=X.db+1; X.t(X.db):=j k:=k div 2 Y(i+1):=X Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 30/54

Összes ismétléses variáció Feleltessük meg a variációkat N alapú számrendszerbeli K jegyű számoknak! 1,...,1,1 0...0000 1,...,1,2 0...0001 1,...,1,n 0...001(n-1) 1,...,2,1 0...0010 1,...,2,n n,...,n,n az összes előállítása 0...001(n-1) (n-1)...(n-1) Zsakó László: Kombinatorika 2018. 02. 23. 15:00 31/54

az összes előállítása Összes ismétléses variáció Variációk(n,k,Y): Ciklus i=0-tól n k -1-ig m:=i Ciklus j=1-től n-ig X(j):=m mod n; m:=m div n Y(i+1):=X Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 32/54

Összes partíció Az N számot bontsuk fel az összes lehetséges módon K nemnegatív szám összegére! Felbontás(N): Kombinatorikai algoritmusok az összes előállítása X N X i, ahol X i 0 sorozatok halmaza, amelyek összege éppen N. A megoldások alakja: 1,x,,x 2,x,,x N,x,,x, azaz olyan X Zsakó László: Kombinatorika 2018. 02. 23. 15:00 33/54

az összes előállítása Összes partíció Felbontás(n,k,i,db,Y): Ciklus j=1-től n-1-ig X(i):=j; Felbontás(n-X(i),i+1) X(i):=n; X(i+1..k):=0 db:=db+1; Y(db):=X Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 34/54

Összes partíció Az N számot bontsuk fel az összes lehetséges módon K monoton csökkenő sorrendű nemnegatív szám összegére! Felbontás(N): Kombinatorikai algoritmusok az összes előállítása X N X i, ahol X i 0, azaz olyan X sorozatok halmaza, amelyek összege éppen N és. A megoldások alakja: 1,x,,x 2,x,,x N,x,,x X i X i 1 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 35/54

az összes előállítása Összes partíció Felbontás(n,k,i,db,Y): Ciklus j=1-től min(n-1,x(i-1))-ig X(i):=j; Felbontás(n-X(i),i+1) Ha X(i-1) n akkor X(i):=n; X(i+1..k):=0 db:=db+1; Y(db):=X Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 36/54

I-edik permutáció az I. előállítása Vegyük pl. a minimum-kiválasztásos rendezést! Jelentse F(j) a j-edik lépésbeli csere távolságát! Az F vektor alapján az eredeti sorrend visszaállítható! Minden i természetes számhoz (0 i<n!) különböző F vektor tartozik, az i szám felírása faktoriális számrendszerben. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 37/54

Rendezés Kombinatorikai algoritmusok az I. előállítása Rendezés(n): Ciklusi=1-től n-ig min:=i Ciklus j=i+1-től n-ig Ha X(j)<X(min) akkor min:=j Csere(X(i),X(min)); Táv(i):=min-i Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 38/54

az I. előállítása Rendezés: a Táv vektor alapján az eredeti sorrend visszaállítható Rendezés vissza(n): Ciklus j=n-1-től 1-ig -1-esével Csere(x(j),x(j+Táv(j))) Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 39/54

A Táv vektor elemei: Táv(n-1) {0,1} Táv(n-2) {0,1,2} Táv(1) {0,1,,n-1} az I. előállítása Ez egy olyan n-1 számjegyből álló szám, amelynek helyiértékenként más a számrendszer alapszáma faktoriális számrendszer. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 40/54

Az i-edik permutáció: az I. előállítása Az i felírása faktoriális számrendszerben, majd cserék. Permutáció(i,n): x:=(1,2,...,n); K:=2 Ciklus j=n-1-től 1-ig -1-esével t:=i mod K; i:=i div K Csere(x(j),x(j+t-1)) K:=K+1 Eljárás vége. Probléma: nem lexikografikus sorrend! Zsakó László: Kombinatorika 2018. 02. 23. 15:00 41/54

Az i-edik permutáció: az I. előállítása Tudjuk, hogy pontosan (n-1)! 1-gyel, 2-vel,... kezdődő permutáció van. Permutáció(i,n): x:=(1,2,...,n); i:=i-1; m:=n-1 Ciklus j=1-től n-1-ig k:=i div fakt(m); i:=i mod fakt(m) Eltol(j,k); m:=m-1 Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 42/54

Az i-edik permutáció, amelyben minden elem legfeljebb eggyel mozdulhatott el: Permutáció(i,n): m:=n-1; j:=1; Ciklus amíg j<n Ha i<fib(m) akkor x(j):=j; m:=m-1; j:=j+1 különben i:=i-fib(m); x(j):=j+1; x(j+1):=j m:=m-2; j:=j+2 Eljárás vége. az I. előállítása Tudjuk, hogy pontosan Fib(n-1) (1)-gyel, illetve Fib(n-2) (2,1)-gyel,... kezdődő ilyen permutáció van. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 43/54

az I. előállítása Az i-edik ismétléses variáció: Az i felírása K alapú számrendszerben. Variáció(i,n,k): ciklus j=n-től 1-ig -1-esével x(j):=i mod k; i:=i div k ciklus vége Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 44/54

Az i-edik részhalmaz: az I. előállítása Az i felírása kettes számrendszerben. Részhalmaz(i,n): ciklus j=n-től 1-ig -1-esével x(j):=i mod 2; i:=i div 2 ciklus vége Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 45/54

Következő permutáció a következő előállítása X 1, X i, X i+1, X n rákövetkezője, ha X i+1, X n monoton csökkenő és X i <X i+1 : X 1, X i-1, a régi X i -nél nagyobbak közül a legkisebb, majd a többiek monoton növekvően. Példa: X X X 4 7 5 3 X X X 5 3 4 7 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 46/54

Következő permutáció a következő előállítása Következő(P): i:=n Ciklus amíg i>0 és P(i)<P(i-1) S(i):=P(i); i:=i-1 Ha i>0 akkor Zsakó László: Kombinatorika 2018. 02. 23. 15:00 47/54

Kombinatorikai algoritmusok a következő előállítása Ha i>0 akkor j:=n Ciklus amíg P(j)<P(i) j:=j-1 S(j):=P(i); P(i):=P(j); j:=n Ciklus amíg i<n i:=i+1; P(i):=S(j); j:=j-1 Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 48/54

Előző permutáció a következő előállítása X 1, X i, X i+1, X n rákövetkezője, ha X i+1, X n monoton növekvő és X i >X i+1 : X 1, X i-1, a régi X i -nél kisebbek közül a legnagyobb, majd a többiek monoton csökkenően. Példa: X X X 5 3 4 7 X X X 4 7 5 3 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 49/54

Előző permutáció a következő előállítása Következő(P): i:=n Ciklus amíg i>0 és P(i)>P(i-1) S(i):=P(i); i:=i-1 Ha i>0 akkor Zsakó László: Kombinatorika 2018. 02. 23. 15:00 50/54

Kombinatorikai algoritmusok a következő előállítása Ha i>0 akkor j:=n Ciklus amíg P(j)>P(i) j:=j-1 S(j):=P(i); P(i):=P(j); j:=n Ciklus amíg i<n i:=i+1; P(i):=S(j); j:=j-1 Eljárás vége. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 51/54

HALADÓ!!!!! Kombinatorikai algoritmusok A binomiális együtthatók felhasználhatók számok speciális számrendszerben, az un. binomiális számrendszerben való felírására. Rögzített m esetén minden nemnegatív n szám egyértelműen felírható az alábbi formában: n a 1 1 a2 2 am... m 0 1 2 a a... a m, ahol. Zsakó László: Kombinatorika 2018. 02. 23. 15:00 52/54

Kombinatorikai algoritmusok HALADÓ!!!!! A Zeckendorf tétel alapján minden természetes szám egyértelműen előállítható Fibonacci számok összegeként úgy, hogy n F F... k 1 k ahol i 1 i r : k i k i 1 2, és k r 2. A Fibonacci számokat az alábbi képlettel számolhatjuk: F k F k 2 F k r 0 ha k 0 1 ha k 1 1 Fk 2 ha k 1 Zsakó László: Kombinatorika 2018. 02. 23. 15:00 53/54

Kombinatorikai algoritmusok előadás vége