50
Szlávi Péter [email protected] ELTE IK Média- és Oktatásinformatika Tanszék 2010 Kombinatorikai algoritmusok

Szlávi Péter [email protected] ELTE IK Média- és Oktatásinformatika Tanszék 2010

  • Upload
    kristy

  • View
    24

  • Download
    2

Embed Size (px)

DESCRIPTION

Kombinatorikai algoritmusok. Szlávi Péter [email protected] ELTE IK Média- és Oktatásinformatika Tanszék 2010. Bevezetés. 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 ) - PowerPoint PPT Presentation

Citation preview

Page 1: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Szlávi Pé[email protected]

ELTE IK Média- és Oktatásinformatika Tanszék

2010

Kombinatorikai algoritmusok

Page 2: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 2/50

Bevezetés 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 témái (SzlaviPedia) : halmazok számosságának a meghatározása halmazok (~sorozatok) felsorolása – összes

eleme halmazok (~sorozatok) valamely elemének

generálása – egy elemeszabályos sorrend szerinti i. elemadottra következő„véletlen” elem

Page 3: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 3/50

Bevezetés Tipikus témái (folytatás):

részhalmazok képzéseösszes felsorolásapartíciónálás céljából – halmazfelbontásadott tulajdonságú (pl. adott számosságú)

megadása …

Page 4: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 4/50

Amiről szó lesz – Tartalom Az összes … előállítása

Ismétlés nélküli permutációk

Ismétlés nélküli kombinációk

Részhalmazok Az i. … előállítása

Ismétlés nélküli permutáció Ismétléses variáció

Véletlen algoritmusok Véletlen permutáció –

„keverés” Véletlen kombináció

Page 5: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 5/50

Megjegyzések Az összes… :

általában csak megoldási keretül szolgál valamely konkrét feladathoz; célja: a feladatnak megfelelő szempontból való feldolgozáshoz „szolgáltatja” az elemeket. (L. később: xxxFeldolg eljárást!)

Az alaphalmaz = 1..N közötti természetes számok! Nyilvánvaló: nem jelent tényleges megszorítást!

Page 6: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 6/50

Az összes … – Permutáció Ismétlés nélküli permutációk –

A cél: N elem összes permutációjának előállítása

1 2 3 … N-1 N

1,2,3,…,N-1,N1,2,3,…,N,N-1…N,1,2,3,…,N-1…

Page 7: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 7/50

Az összes … – Permutáció Egy naiv megvalósítás:

N elem összes N-elemű ismétléses variációja + szűrés

Konstans MaxN:Egész(??) Típus TPerm=Tömb(1..MaxN:Egész)

A „főszereplő” típus defi-niálása.

Eljárás ÖsszesPermutáció(Konstans N:Egész): Konstans P1:TPerm(1,…,11,…,1) [MaxN darab 1-es] Változó permSorsz,i:Egész P:TPerm [aktuális permutáció]

A lényegi eljárás szignatúrája és lokális adatainak dekla-rálása. P1 az első permutáció.

permSorsz:=0 P:=P1; i:=N A ciklus előkészítése.

Ciklus amíg i>0 Ha PermutációE(P) akkor permSorsz:+1; PermFeldolg(P,N,permSorsz) Elágazás vége

A sorozat szűrése és a –per-mutáció esetén– feldolgozása.

Ciklus amíg i>0 és P(i)=N P(i):=1; i:-1 Ciklus vége Ha i>0 akkor P(i):+1; i:=N

A következő variáció elő-állítása

Ciklus vége Eljárás vége.

A ciklusból kiléptünk, amikor az NN…N-t is túlhaladtuk.

Ez kézenfekvő algoritmusú

Page 8: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 8/50

Az összes … – Permutáció Egy naiv megvalósítás (folytatás):

N elem összes N-elemű ismétléses variációja + szűrés

Hatékonyság: az „érdekes” elemek számaránya: N!/NN 0

Függvény PermutációE(Konstans P:TPerm):Logikai Változó i,j:Egész mégOK:Logikai

A permutáció-ságot vizsgáló függvény szignatúrája és lokális adatainak deklarációja.

i:=2; mégOK:=Igaz Ciklus amíg iN és mégOK

Van-e olyan P(i:2..N), amely előtt már volt belőle?

j:=1 Ciklus amíg j<i és P(j)P(i) j:+1 Ciklus vége mégOK:=j=i i:+1

Az i. valamelyik előzőnek a duplikátuma-e?

Ciklus vége PermutációE:=mégOK Függvény vége.

Page 9: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 9/50

Az összes … – Permutáció Egy backtrack alapú megvalósítás:

A legfelsőbb szint:

Eljárás ÖsszesPermutáció(Konstans N:Egész): Konstans X0:TPerm(0,…,0) [MaxN darab 0-ás] Típus TKeresett=Rekord(van:Logikai; melyik:Egész) Változó i:Egész X:TPerm [aktuális permutáció] ker:TKeresett permSorsz:Egész …

A lényegi eljárás fejsora és lokális adatainak deklarációja.A permSorsz változó kódolásánál ügyelni kell arra, hogy viszonylag nagy egész számok fognak belekerülni.

Page 10: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 10/50

Az összes … – Permutáció Egy backtrack alapú megvalósítás (folytatás):

A legfelsőbb szint (folytatás):

… permSorsz:=0 i:=1; X:=X0 Ciklus amíg i1

A megszokott backtrack ciklus inicializáló része. A permSorsz a „kiválogatásos” variációhoz tartozik.

Ha i>N akkor permSorsz:+1 PermFeldolg(X,N,permSorsz) i:-1 Elágazás vége

Ha összeállt egy helyes permutá-ció, akkor következhet a feldolgozása (pl. a megjegyzése, most a PermFeldolg eljárás hívása).

ker:=JóElem(i) Ha ker.van akkor X(i):=ker.melyik; i:+1 különben X(i):=0; i:-1 Elágazás vége

Továbblépünk a következő permu-táció felé, vagy visszalépünk a backtrack logikája szerint.

Ciklus vége Eljárás vége.

Page 11: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 11/50

Az összes … – Permutáció Egy backtrack alapú megvalósítás

(folytatás): A JóElem fv:

A LehetségesE fv:

Függvény JóElem(Konstans i:Egész):TKeresett Változó j:Egész j:=X(i)+1 Ciklus amíg jN és nem LehetségesE(i,j) j:+1 Ciklus vége JóElem.van:=jN Ha JóElem.van akkor JóElem.melyik:=j Függvény vége.

Függvény LehetségesE(Konstans i,j:Egész):Logikai Változó k:Egész k:=1 Ciklus amíg k<i és X(k)j k:+1 Ciklus vége LehetségesE:=k=i Függvény vége.

Page 12: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 12/50

Az összes … – Permutáció Egy rekurzív megvalósítás:

Algoritmus:

Konstans [globális] P0:TPerm(0,…,00,…,0) [MaxN darab 0-ás] Változó [globális] permSorsz:Egész

Globálisan deklarált permSorsz a végeredmény szempontjából, a P0 az „indulás” szempontjából fontos.

Eljárás ÖsszesPermutáció(Konstans aktP:TPerm, i,n:Egész): Változó j:Egész P:TPerm(aktP) [kezdőértékadás] Ha i>n akkor permSorsz:+1; PermFeldolg(P,n,permSorsz)

Az aktP n-ed rendű permutációjából kiindulva, generáljuk a következő i. komponensét.

Nincs n-nél nagyobb komponens, elkészült a permutáció, feldolgozható.

különben P(i):=i; ÖsszesPermutációk(P,i+1,n) Ciklus j=i-1-től 1-ig -1-esével Csere(P,j,j+1); ÖsszesPermutáció(P,i+1,n) Ciklus vége Elágazás végeEljárás vége.

Még nincs kész. Generáljuk az összes olyant, amelyek i. komponense i, majd cserékkel permutáljuk a kezdő-szeleteket, és a hozzájuk tartozó összes permutációt generáljuk.

… permSorsz:=0; ÖsszesPermutáció(P0,1,N) … Az elindulás…

Page 13: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 13/50

Az összes … – Permutáció Egy feladat:

Jól ismert fejtörő, amelyben egy aritmetikai művelet kapcsol egybe szavakat. A feladat az, hogy a szavak egyes betűinek feletessü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 0..9 számjegyek egyértelmű hozzárendelését.

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

… … és még és még sok hasonló sok hasonló egyenletrenegyenletren

dszerdszer

Page 14: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 14/50

Az összes … – Permutáció 2. megoldási ötlet:

Az összes permutáció algoritmusára építünk. A PermFeldolg eljárás ellenőrzi a permutáció –a

feladat szem-pontjából való– helyességét, és gondoskodik az esetleges megol-dás gyűjtéséről vagy kiírásáról.

A megfelelőség: a (*) SEND + MORE – MONEY = 0 egyenletre

Ha 'S' s értékű, akkor a (*)-ban s*1000-rel van jelen; 'E' e értékű, akkor e*(100+1-10)=e*91-gyel; 'N' n értékű, akkor n*(10-100)=n*(-90)-nel; 'D' d értékű, akkor d*(1)-gyel; 'M' m értékű, akkor m*(1000-10000)=m*(-9000)-rel; 'O' o értékű, akkor o*(100-1000)=o*(-900)-zal; 'R' r értékű, akkor r*(10)=r*(10)-zel; 'Y' y értékű, akkor y*(-1)-gyel van jelen.

Page 15: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 15/50

Az összes … – Kombináció Ismétlés nélküli kombinációk –

A cél: N elem összes KK-elemű kombinációjának előállítása

1 2 3 … K-1 K

1,2,3,…,K-1,K1,2,3,…,K-

1,K+1+1……1,2,3,…,K-1,NN

1 2 3 … K-1 K

1,2,3,…,KK,K+1+1

1,2,3,…,K,K+2+2

…1,2,3,…K,NN

1 2 … K

N-K+1N-K+1,N-N-K+2,+2,…,N…,N

Page 16: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 16/50

Az összes … – Kombináció A backtrack alapú megvalósítás:

Egy(etlen) probléma: a csak az elemek sorrendjében különböző K-asakat egyszer szabad figyelembe venni

Megoldás (backtrack-es alapon): csak rendezett sorozatokat generálunk legfelsőbb szinten lényegi változás alig van:

az azonosítókat értelemszerűen átírjuk; az eljárás fejsora bővül a K paraméterrel; a TKomb típus most is MaxN elemű, de csak az első K elemére lesz szükség; a KombFeldolg eljárásnak átadjuk a K paramétert is…

Page 17: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 17/50

Az összes … – Kombináció A backtrack alapú megvalósítás (folytatás):

„érdemi” módosítás a K-ad osztályúság felismerése: A legfelsőbb szint:

Eljárás ÖsszesKombináció(Konstans N,K:Egész):

Konstans X0:TKomb(0,…,0) Típus TKeresett=Rekord(van:Logikai; melyik:Egész) Változó i:Egész X:TKomb [aktuális kombináció] ker:TKeresett kombSorsz:Egész

A lényegi eljárás fejsora és lokális adatainak deklarációja. A kombSorsz változó kódolásánál ügyelni kell arra, hogy viszonylag nagy egész számok fognak belekerülni.

Page 18: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 18/50

Az összes … – Kombináció A backtrack alapú megvalósítás (folytatás):

A legfelsőbb szint (folytatás):

kombSorsz:=0 i:=1; X:=X0 Ciklus amíg i1

A megszokott backtrack ciklus inicia-lizáló része. A kombSorsz a „kiváloga-

tásos” változathoz tartozik. Ha i>K akkor kombSorsz:+1 KombFeldolg(X,N,K,kombSorsz) i:-1 Elágazás vége

Ha összeállt egy helyes kombináció, akkor következhet a feldolgozása (pl. a megjegyzése, most a KombFeldolg eljárás hívása).

ker:=JóElem(i) Ha ker.van akkor X(i):=ker.melyik; i:+1 különben X(i):=0; i:-1 Elágazás vége

Tovább lépünk a következő kombi-náció felé, a backtrack logikája szerint.

Ciklus vége Eljárás vége.

Page 19: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 19/50

Az összes … – Kombináció A backtrack alapú megvalósítás (folytatás):

A JóElem fv:változatlan, bár optimalizálható a szigorúan növekedés feltétel figyelembe vételével

A LehetségesE fv:döntse el, hogy választható-e (azaz egyedi-e és növekvő-e) az i. elemként kijelölt j érték”

Függvény LehetségesE(Konstans i,j:Egész):Logikai LehetségesE:=X(i-1)<j Függvény vége.

Page 20: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 20/50

Az összes … – Részhalmaz A cél: N elem összes részhalmazainak az

előállítása

1. megoldásötlet:

Kapcsolat:N-elemű halmaz K-elemű részhalmazai N elem K-ad osztályú kombinációk

Algoritmus: előző kombinációkat előállító backtrack-es változat

Ábrázolás:az első 0-ig tartó (kezdő) részsorozat (a 0 illegális érték!);pl. (0,…,0) ~ üres (rész)halmaz; (1,2,…,N,0,…) ~ a „teli”…

Page 21: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 21/50

Az összes … – Részhalmaz Az algoritmus:

Eljárás ÖsszesRészhalmaz(Konstans N:Egész): … Változó K:Egész rhk:TRészHalmazok kombSorsz:Egész [részhalmaz-sorszám] …

A lényegi eljárás fejsora és lokális adatainak deklarációja.Az rhk-ban gyüjtjük a részhalma-zokat.

Eljárás ÖsszesKombináció(Konstans N,K:Egész): … Eljárás vége.

Ez a lokális eljárás előállítja N elem összes K-elemű részhalmazát. A kombSorsz-ot nem ő inicializálja.

rhk(1):=X0 [üres halmaz] kombSorsz:=1 Ciklus K=1-től N-1-ig ÖsszesKombináció(N,K) Ciklus vége rhk(kombSorsz):=(1,2,…,N,0,…) [„teli” halmaz] Eljárás vége.

Első az üres részhalmaz.A kombSorsz inicializálása utánmegszervezi minden K-ra a K-elemű részhalmazok generálását.Végül a „teli” részhalmaz. A „0,…” je-lentése: MaxN-ig kiegészítendő.

Probléma:

a K-eleműek képzése során minden K-nál kisebb elemszámú részsorozat újrakészül – hatékonyság!

Page 22: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 22/50

Az összes … – Részhalmaz A probléma „lágy” megoldása:

az N-elemű „részsorozat” előállítása közben, „bal-kézről” létrejövő kezdő részsorozatokat menetköz-ben gyártjuk;ügyelni kell arra, hogy mikor „kiáltunk ki” egy kezdő részsorozatot részhalmaznak: csak „előrefelé” hala-dáskor (visszalépéskor nem lehet!)

Page 23: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 23/50

Az összes … – Részhalmaz 2. megoldásötlet:

Ábrázolás:THalmaz=Tömb(1..N:Logikai)

h:THalmaz h(i)=Igaz az i. elem a h-nak eleme

vagyTHalmaz = Egész

Igaz=1 / Hamis=0 N jegyű bináris szám[0..2N–1]h:THalmaz

(h Div 2i-1) Mod 2=1 az i. elem a h-nak eleme

Page 24: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 24/50

Az összes … – Részhalmaz 2. megoldásötlet (folytatás):

Algoritmus:Felsorolni 0..2N-1 számot, azaz N elem összes ismétléses variációját.

Furcsaság (?):1. megoldás: N elem összes ismétlés nélküli

kombináció-ja(ra építettük)

2. megoldás: 2 elem összes ismétléses variációja

Emlékeztető: = 2N KN

Page 25: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 25/50

Az i. … előállítása Feladatspecialitás: olyankor lehet az i.

előállítására szükség, amikor a programban az i „hektikusan” változik. Máskülönben az összes előállítása a „sza-bályosan” következőket szolgáltatná a feladathoz.

Page 26: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 26/50

Az i. … előállítása Egy naiv megoldás:

Módosítsuk az összes …-t előállító algoritmust úgy, hogy az i.-hez érve álljon le; s adja vissza az utolsót (tárolni nem is

muszáj) Probléma: hatékonyság – minduntalan 1.-

től újrakezdi

Page 27: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 27/50

Az i. … – Permutáció Ismétlés nélküli permutációk –

A cél: az i. permutáció előállítása

Page 28: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 28/50

Az i. … – Permutáció Hogyan sorszámozzunk?

Elvárás a permutációindexszel szemben:(PI1) PermIndex: Perm[1..N!],

ahol Perm[1..N]N, pPerm: HalmazFelsorolás(p)

(PI2) PermIndex bijekció

Kiszámítási ötlet: a permutációhoz rendeljünk olyan értéket, amely kifejezi a „távolságát” a rendezettől…pl. egy rendezés során az egyes elemeinek a helyre ugrásakor „megtett távolságokkal” fejezzük ki.Egyértelműség:

PQPerm különbözőek a cserékben

szereplő indexpárok

Page 29: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 29/50

Az i. … – Permutáció Sorszámozáshoz:

a rendezés i. lépésekor végrehajtott csere-beli „távolság” a sorszám i. „tagja”

mivel a rendezés során egyre kisebbek (-: vagy

nagyobbak :-) az ugrások (N–1,…,1,0), és hézagmentesen kell az 1..N! intervallumot

kitölteniezért

faktoriális alapú számrendszert kell alkalmazni:

(Fakt2Dec1) Fakt2Dec(sN...s2s1):=1+

(Fakt2Dec2) si[0..i–1] i[1...N].

N

1ii!is

Page 30: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 30/50

Az i. … – Permutáció PermutációIndex függvény:

A minimum kiválasztásos rendezésből indulunk ki.

A keresett index mellett (okulásul) előállítjuk a faktoriális alapú számrendszerbeli alakját is (ez persze „élvezhető” eredményt N<10-re ad).

Változó [globális] permInd_Fakt:Szöveg

Ez a változó fogja tartalmazni az éppen generált permutáció indexé-nek faktoriális számrendszerbeli alakját. Nem tüntettük föl a paramé-terlistában, hanem „orvul”, globá-lisan elérhető adatként deklaráltuk.

Függvény PermIndex_MKR(Változó P:TPerm; Konstans N:Egész):Egész Változó i,j,mini:Egész pI:Egész

A minimum kiválasztásos rendezés (MKR) végrehajtása közben képez-zük a P permutáció pI indexét.„Balkézről” megadjuk a faktoriális számrendszerbeli alakját is.

Page 31: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 31/50

Az i. … – Permutáció PermutációIndex függvény (folytatás):

permInd_Fakt:='' pI:=0 Ciklus i=1-től N-1-ig mini:=i Ciklus j=i+1-től N-ig Ha P(j)<P(mini) akkor mini:=j Ciklus vége Csere(P(i),P(mini)) pI:=pI*(N-i+1)+(mini-i) permInd_Fakt:=permInd_Fakt+ Karakter(mini-i+48) Ciklus vége

A minimum kiválasztásos rendezés szokásos algoritmusa a permutáció-indexet előállító betétekkel megspé-kelve.Figyeljük meg, miként veszi figyelem-be az adott helyi értéknél alkalmazan-dó számrendszer-alapot! (Horner-elrendezés)

permInd_Fakt:=permInd_Fakt+'1' PermIndex_MKR:=pI+1 Függvény vége.

A végső értékadás gondoskodik arról, hogy a permutációindex 1-gyel, nem 0-val kezdődjék; és a faktoriális szám-rendszer definíciójának (és a céljaink-nak) megfelelően 1-re végződjék.

Page 32: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 32/50

Az i. … – Permutáció PermutációIndex függvény (folytatás):

Egy példafutás N=4-re:

Vegye észre:bijektivitást és a nem rendezéstartóságot!

Page 33: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 33/50

Az i. … – Permutáció Az i. permutáció függvény:

Az előbb alkalmazott számjegysorozattá alakítást kell most csupán „visszafelé” végrehajtanunk. Függvény Index2Perm(Konstans pI:Egész):TPerm

Változó i,j,k,t:Egész x:TPerm

x:=P1; i:=pI-1 [sorszám-korrekció: 10]k:=2Ciklus j=N-1-től 1-ig -1-esével t:=i Mod k; i:=i Div k; Csere(x(j),x(j+t)) k:+1Ciklus végeIndex2Perm:=x

Függvény vége.

Page 34: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 34/50

Az i. … – Variáció Ismétléses variáció –

A cél: az i. ismétléses variáció előállítása

Page 35: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 35/50

Az i. … – Variáció Sorszámozás:

egyszerű, hiszen tekinthetjük a sorozatokat egy N-alapú számrendszerben felírt K-jegyű számnak:

a vK.. v2v1=11..1N-től a wK..w2w1=NN..NN-ig. (IVI1) IsmVarIndex: N*NN[1..NK];(IVI2) IsmVarIndex bijekció az N-elemű K-hosszúságú

sorozatok halmaza és a [1..NK] között;(IVI3) IsmVarIndex((VN,VN-1,…,V2,V1),N,K):=

–v,

ahol v:= –1=(NK–1)/(N–1)–1

K

1j

1jj NV

K

1j

1jN1

Page 36: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 36/50

Az i. … – Variáció Az i. variáció függvény:

Az előbbi inverzét kell megvalósítanunk. Konstans

MaxN:Egész(?)Típus TIsmVar=Tömb(1..MaxN:Egész)

Függvény Index2IsmVar(Konstans i,N,K:Egész):TIsmVar Változó ii,j:Egész x:TIsmVar

ii:=i-1 [korrekció az 1-gyel kezdődő sorszámozás miatt] Ciklus j=K-tól 1-ig -1-esével x(j):=(ii Mod N)+1; ii:=ii Div N Ciklus vége Index2IsmVar:=xFüggvény vége.

Page 37: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 37/50

Véletlen algoritmusok … olyan algoritmusok, amelyben

fő szerepet kap a véletlenszám-generátor, és valamilyen tulajdonságú halmaz/sorozat

generálása a cél

Page 38: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 38/50

Véletlen algoritmusok Jelölések, megállapodások:

X – sorozat; X’’ – az X sorozat algoritmus végrehajtás utáni értéke

P(X’k=Xj) – annak a valószínűsége, hogy az X’k Xj lesz i,jN, [0,1]R VéletlenSzám(i..j) – (egyenletes) véletlen egész szám

[i,j] VéletlenSzám – (egyenletes) véletlen valós szám

[0,1)R Egyenletesség:

F1.P(VéletlenSzám(i..j)=k)=P(VéletlenSzám(i..j)=m)k,m[i..j]

F2. P(VéletlenSzám<)=

függvények

függvények

Page 39: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 39/50

Véletlen … – Permutáció Véletlen (ismétlés nélküli) permutáció –

„keverés” A cél: X(1..N) elemek egy véletlen permutációjának előállítása

Feltételezés: HalmazFelsorolás(X) teljesülése;Pl. X(i)=i (i=1..N)

Page 40: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 40/50

Véletlen … – Permutáció Megoldás:

Egy meglepő gondolat:Mivel a rendezési algoritmusok egy rendezetlenből rendezettet permutálnak, ezért építsük valamely rendező algoritmusra az „inverz-műveletet” (a keverést) is.

P1. algoritmus (minimum kiválasztásos rendezés

alapján):Permutálás („Keverés”) Rendezés

Ciklus i=1-től N-1-ig j:=VéletlenSzám(i..N) Csere(X(i),X(j))Ciklus vége

Ciklus i=1-től N-1-ig j:=MinIndex(i..N) Csere(X(i),X(j))Ciklus vége

Page 41: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 41/50

Véletlen … – Permutáció

Feltétel: Xi≠Xj i≠j, vagyis ha

HalmazFelsorolás(X)=Igaz.

Feltétel: Xi≠Xj i≠j, vagyis ha

HalmazFelsorolás(X)=Igaz.

Az algoritmus elemzése:P1-1. Állítás:

Az algoritmus a bemeneti sorozat egy permutációját állítja elő.

P1-2. Állítás:Az X’ minden elemében az X bármely eleme azonos eséllyel lesz az algoritmus végrehajtása után: P(X’i=Xk)=1/N i,k[1..N].

P1-3. Állítás:Az algoritmus azonos eséllyel állítja elő az X1..N elemek tetszőleges permutációját.Permutálás („Keverés”) Rendezés

Ciklus i=1-től N-1-ig j:=VéletlenSzám(i..N) Csere(X(i),X(j))Ciklus vége

Ciklus i=1-től N-1-ig j:=MinIndex(i..N) Csere(X(i),X(j))Ciklus vége

Page 42: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 42/50

Véletlen … – Permutáció Gyakorlat:

Írjunk programot, amely az előbbi eljárással előállít szá-mos permutációt, s eközben számolja, hogy az éppen generált permutáció hányadszorra jött ki. Azt várjuk, hogy minden permutációra ez kb. azonos érték lesz.

Probléma: a számláló tömb N!N! méretű (hatékonyság)

Megoldása: a P1-2. állításra hivatkozással elegendő azt számlálni, hogy az egyes elemek gyanánt hányszor fordult elő egy-egy érték, azaz elég egy NNNN-es mátrix.

Page 43: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 43/50

Véletlen … – Permutáció Gyakorlat (folytatás):

A megoldás legfelsőbb szintje:Eljárás PermutacióVezérlés: Változó i:Egész PermInic Ciklus i=1-től 2*Fakt(N)-ig VéletlenPermutáció PermÉrtékelés Ciklus vége GyakoriságMegjelenítés('Permutációk')Eljárás vége.

Page 44: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 44/50

Véletlen … – Permutáció Gyakorlat (folytatás):

A VéletlenPermutáció eljárás:Eljárás VéletlenPermutáció: Változó i,j:Egész Ciklus i=1-től N-1-ig j:=Random(N-i+1)+i Csere(p(i),p(j)) Ciklus végeEljárás vége.

Eljárás Csere(Változó x,y:Egész): …Eljárás vége.

A PermÉrtékelés eljárás:Eljárás PermÉrtékelés: Változó i:Egész Ciklus i=1-től N-ig gy(p(i),i):+1 Ciklus vége Eljárás vége.

Permutálás („Keverés”)

Ciklus i=1-től N-1-ig j:=VéletlenSzám(i..N) Csere(X(i),X(j))Ciklus vége

Page 45: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 45/50

Véletlen … – Permutáció Gyakorlat (folytatás):

Egy futási eredmény:

A generált permutációkban 1. helyen az 1 (X1) 1452-ször, … a 7. helyen ugyanő 1377-szer fordult elő, … a 7 (X7) az 1. helyen 1405-ször, … a 7. helyen ugyanő

1440-szer.Ellenőrizhető, hogy mind a sor-, mind az

oszlopösszegek 10080 (=2*N!), aminek az az oka, hogy 2*N! darab véletlen permutációt generáltunk a

programmal.

Page 46: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 46/50

Véletlen … – Kombináció Véletlen (ismétlés nélküli) kombináció –

A cél: X(1..N) elemek egy véletlen, K-ad osztályú kombinációjának előállítása

Feltételezés: HalmazFelsorolás(X) teljesülése;Pl. X(i)=i (i=1..N)

Page 47: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 47/50

Véletlen – Kombináció Megoldás:

K0. algoritmus:Db:=0Ciklus i=1-től N-ig Ha VéletlenSzám<K/N akkor Db:+1; Y(Db):=X(i)Ciklus vége

Probléma: az algoritmusban K/N eséllyel kerül be egy elem, de az össz elemszám össz elemszám (Db) eltérheteltérhet az elvárt K-tólK-tól. M(Db)=K, D2(Db)=N*K/N*(1-K/N)=K-K2/N

Page 48: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 48/50

Véletlen – Kombináció Megoldás (folytatás):

K1. algoritmus:Db:=0Ciklus i=1-től N-ig Ha VéletlenSzám<(K-Db)/(N+1-i) akkor Db:+1; Y(Db):=X(i)Ciklus vége

Megjegyzés: Az algoritmus kiküszöböli az előbbi hibáját. Azt az elvet alkalmazza, hogy figyeli a még beveendő elemek számát, és garantálja, hogy éppen annyi kerüljön be.

Page 49: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 49/50

Véletlen – Kombináció Megoldás (folytatás):

K2. algoritmus:Ciklus i=1-től K-ig Y(i):=X(i)Ciklus végeCiklus i=K+1-tól N-ig Ha VéletlenSzám<K/i akkor j:=VéletlenSzám(1..K); Y(j):=X(i)Ciklus vége

A K2 algoritmus elemzése:K2-1. Állítás:

A K2. algoritmus az X(1..N) elemek egy K-ad osztályú kombinációját eredményezi.

K2-2. Állítás: A K2. algoritmus végrehajtása utáni Y-ra igaz, hogy Y bármely eleme helyén X bármely eleme azonos eséllyel (K/N) előfordulhat.

K2-3. Állítás: A K2. algoritmus azonos eséllyel állítja elő az {1..N} számok tetszőleges K-ad osztályú kombinációját.

Page 50: Szlávi Péter szlavip@elte.hu ELTE IK Média- és Oktatásinformatika Tanszék 2010

Kombinatorikus algoritmusok

2010 Szlávi: Kombinatorikus algoritmusok 50/50

Véletlen – Kombináció Gyakorlat:

Írjunk programot (vagy folytassuk az előbbit), amely a K2. eljárással előállít számos kombinációt, s eközben számolja, hogy az éppen generált hányadszorra jött ki. Azt várjuk, hogy minden kombinációra ez kb. azonos érték lesz.

Egy futási eredmény (N=7, K=4):