Logikai programozás 6..

Slides:



Advertisements
Hasonló előadás
Nevezetes algoritmusok
Advertisements

Programozási feladatok
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Programozási tételek, és „négyzetes” rendezések
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
HIKGHB Németh Gábor LUF9NV Simon Attila. A programozás alapjai előadás Híradástechnikai Tanszék.
Copyright, 2009 © Szlávi Péter A kupac és a prioritási sor típuskonstrukciók Szlávi Péter ELTE IK Média- és Oktatásinformatikai Tanszék
AVL-fa építése.
Minimális költségű feszítőfák
Erősen összefüggő komponensek meghatározása
Szélességi bejárás Párhuzamosítása.
Az összehasonlító rendezések
Programozási alapismeretek 12. előadás. ELTE  Tapasztalatok a rendezésről Tapasztalatok a rendezésről  Keresés rendezett sorozatban Keresés rendezett.
Algoritmusok Az algoritmus fogalma:
Egydimenziós tömbök. Deklarálás: var valtozónév:array[kezdőérték..végsőérték]of típus; type típusnév = array [kezdőérték..végsőérték] of típus; var valtozónév:
Programozás módszertan
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
AVL fák.
Fák, bináris fák INFOÉRA Ez így 60 perc.
Számoljuk meg rekurzív függvénnyel egy bináris fa leveleit!
Utórendezéses edényrendezés RADIX „előre”. Definíció  Az általános utórendezéses edényrendezés speciálisan r alapú d jegyű számokra felírt változata.
1 Györgyi Tamás – GYTNAAI.ELTE 2007 Április 03 Algoritmusok És Adatszerkezetek 2 Gráfalgoritmus Bellman-Ford Algoritmusa S a b d e
Nevezetes algoritmusok Beszúrás Van egy n-1 elemű rendezett tömbünk. Be akarunk szúrni egy n-edik elemet. Egyik lehetőség, hogy végigszaladunk a tömbön,
Előrendezéses edényrendezés – RADIX „vissza”
Utórendezéses edényrendezés – RADIX „előre”
Rendezési algoritmusok
Gráfelmélet: Fák.
Adatszerkezetek 1. előadás
Hierarchikus adatszerkezetek
Hierarchikus lista Kétféle értelemezése van:
V. Adatszerkezetek, kollekciók
Fák.
Gráf szélességi bejárása SzB(G,p). Tetszőleges gráf, melyben a p csúcsot választottam kiindulónak: A gráfnak megfelelő fa:
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Nevezetes algoritmusok: Fa megvalósítása Készítette: Várkonyi Tibor Zoltán.
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
Logikai programozás 5..
1 Szélességi Bejárás Györgyi Tamás – GYTNAAI.ELTE 2007 Március 22 Algoritmusok És Adatszerkezetek 2 Gráfalgoritmus S b a d e f h g c.
Logikai programozás 3.. ISMÉTLÉS Elágazás-szervezés: a/ B :- A 11, A 12, …, A 1n. B :- A 21, A 22, …, A 2k. … B :- A m1, A m2, …, A mr. b/ B :- (A 11,
Logikai programozás 6..
BINÁRIS FA Definició: A fa olyanösszefüggő gráf, amelyben nincs kör
Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT-2. kurzus 2. Előadás tartalma 1. Elemi adatok és adatszerkezetek (struktúrák)‏ 2. Az.
Logikai programozás. ISMÉTLÉS Fibonacci sorozat: a/ fibonacci(1,1). fibonacci(2,1). fibonacci(N,F) :- N > 1, N1 is N - 1, N2 is N - 2, fibonacci(N1, F1),
Feladatok (értékadás)
Bináris kereső fák Itterátorok.
Bucket sort avagy lineáris idejű rendezés. Pszeudo kód n hosszú L listára for i = 1..n If B[L[i]] != üres Akkor [L[i] Beszúrásos rendezéssel B[L[i]]-be.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Fák, bináris fák INFOÉRA Ez így 60 perc.
Algoritmusok és adatszerkezetek
Szélességi bejárás Gráf-algoritmusok Algoritmusok és adatszerkezetek II. Gergály Gábor WZBNCH1.
(Bináris) Kupac (heap) adattípus
KÉSZÍTETTE: KOVÁCSICS KRISZTIÁN
Algoritmus DAG = irányított körmentes gráf. Először ezt a tulajdonságot ellenőrizzük (mélységi bejárással), aztán rendezzük: Q: Sor adatszerkezet, kezdetben.
Gráfok ábrázolási módja Általánosságok Algoritmusok ábrázolása:
Logikai programozás 4..
Tömbök és programozási tételek
Mediánok és rendezett minták
Programozási tételek Mik is ezek?
Algoritmusok és Adatszerkezetek I.
Dinamikus adatszerkezetek
Egyenletek.
Gyorsrendezés Elemzések Változatok.
Algoritmusok és Adatszerkezetek I.
Algoritmusok Az algoritmus fogalma:
Algoritmusok és Adatszerkezetek I.
2-3-fák A 2-3-fa egy gyökeres fa az alábbi tulajdonságokkal:
Algoritmusok és Adatszerkezetek I.
Algoritmusok és Adatszerkezetek I.
Előadás másolata:

Logikai programozás 6.

LISTÁK RENDEZÉSE Buborék rendezés: buborekRendezes(Relacio, Lista, RendezettLista) :- csere(Relacio, Lista, UjLista), !, buborekRendezes(Relacio, UjLista, RendezettLista). buborekRendezes(_, RendezettLista, RendezettLista). csere(Relacio, [A,B|Lista], [B,A|Lista]) :- ellenorzes(Relacio, B, A). csere(Relacio, [A|Lista], [A|UjLista]) :- csere(Relacio, Lista, UjLista).

LISTÁK RENDEZÉSE folyt.: folyt.: ellenorzes(Relacio, A, B) :- Cel =.. [Relacio,A,B], Cel. ellenorzes(Relacio, A, B) :- Cel =.. [Relacio,A,B], Cel. Teszt: ?- buborekRendezes(<, [5,3,7,5,2,8,4,3,6], Lista). ?- buborekRendezes(@<, [tej, víz, sör, bor], Lista).

LISTÁK RENDEZÉSE Buborék rendezés probléma: Tegyük fel, hogy a 100. és 101. elemet kellett megcserélni. Ekkor 99-szer fölöslegesen hasonlítottunk, hiszen a lista eleje már rendezett. (Korábban már rendeztük.) Emiatt nagyon nagy a redundancia. Javítás: a cserével végigmegyünk a listán, és a rendezést csak akkor folytatjuk, ha a lista még nem rendezett.

LISTÁK RENDEZÉSE Buborék rendezés (hatékonyabb): buborekRendezes2(Relacio, Lista, RendezettLista) :- csere(Relacio, Lista, UjLista), Lista \= UjLista,!, buborekRendezes2(Relacio, UjLista, RendezettLista). buborekRendezes2(_, RendezettLista, RendezettLista). csere(Relacio, [A,B|Lista], [B,A|Lista]) :- ellenorzes(Relacio, B, A). csere(Relacio, [A|Lista], [A|UjLista]) :- csere(Relacio, Lista, UjLista). csere(_,[],[]).

LISTÁK RENDEZÉSE Quick sort: quicksort(_, [], []). quicksort(Relacio, [Fej|Torzs], RendezettLista) :- split(Relacio, Fej, Torzs, Bal, Jobb), quicksort(Relacio, Bal, RendezettBal), quicksort(Relacio, Jobb, RendezettJobb), append(RendezettBal, [Fej|RendezettJobb], RendezettLista).

LISTÁK RENDEZÉSE Quick sort (folyt.): split(_, _, [], [], []). split(Relacio, VagoErtek, [Fej|Torzs], [Fej|Bal], Jobb) :- ellenorzes(Relacio, Fej, VagoErtek), !, split(Relacio, VagoErtek, Torzs, Bal, Jobb). split(Relacio, VagoErtek, [Fej|Torzs], Bal, [Fej|Jobb]) :- split(Relacio, VagoErtek, Torzs, Bal, Jobb).

LISTÁK RENDEZÉSE Quick sort: Teszt: ?- quicksort(<, [5,3,7,5,2,8,4,3,6], Lista). ?- quicksort(@<, [tej, víz, sör, bor], Lista).

REKURZÍV ADATSZERKEZETEK 1. Lista lista : elem + lista szemléltetés: út egy gráfban leállás: üres lista gyökér 2. Fa fa fa

FA STRUKTÚRA Fa megadása: fa(gyökér, fa, fa) + üres Az, hogy a fa definíciójában hol van az elem (gyökér), és hol vannak a részfák, lényegtelen, csak következetesnek kell lenni. Ez milyen fa?

BINÁRIS FA Bináris fa bejárása: – Preorder – Inorder – Postorder gyökér – bal – jobb bal – gyökér – jobb bal – jobb – gyökér

BINÁRIS FA kiir(ures). kiir(fa(Elem,Bal,Jobb)) :- writeln(Elem), kiir(Bal), kiir(Jobb). Ez milyen kiírás? Inorder: kiir(ures). kiir(fa(Elem,Bal,Jobb)) :- kiir(Bal), writeln(Elem), kiir(Jobb).

BINÁRIS FA Példa: csalad(fa('Kati', fa('Barna', fa('Anna',ures,ures), fa('Bela',ures,ures) ), fa('Pali', fa('Marta',fa('Laci',ures,ures), ures), fa('Zoli', fa('Robi',ures,ures), ures) ) ) ). indit :- csalad(Fa), kiir(Fa). Mit ír ki inorder bejárással?

ügyes faépítés + megfelelő bejárás BINÁRIS FA Bináris rendezés ügyes faépítés + megfelelő bejárás Építés: A gyökértől balra az összes elem kisebb, jobbra pedig az összes elem nagyobb, mint a gyökérelem (vagy összetett elemeknél ugyanez vonatkozik a kulcsokra). Bejárás: inorder

BINÁRIS FA Faépítés: epit(Regifa,Keszfa):- read(Elem),Elem\==end_of_file, beszur(Elem,Regifa,Ujfa), epit(Ujfa, Keszfa). epit(Fa,Fa).

BINÁRIS FA beszur(Elem, ures, ) :- !. fa(Elem,ures,ures) beszur(Elem, fa(Gyoker,Bal,Jobb), ) :- Elem @< Gyoker,!, fa(Gyoker,Ujbal,Jobb) beszur(Elem,Bal,Ujbal). beszur(Elem, fa(Gyoker,Bal,Jobb), fa(Gyoker,Bal,Ujjobb)) :- beszur(Elem,Jobb,Ujjobb).

BINÁRIS FA start :- write('Beolvasando file neve: '), read(Be), see(Be), be(Fa), seen, write('Eredmeny file neve: '), read(Ered), tell(Ered), ki(Fa,'fileba'), told, writeln('Rendezve:'), ki(Fa,'kepernyore'). be(Fa):- epit(ures,Fa).

BINÁRIS FA ki(ures,_). ki(fa(Elem,Bal,Jobb), Tipus) :- ki(Bal,Tipus), ir(Elem,Tipus), ki(Jobb,Tipus). ir(Elem, 'fileba') :- writeq(Elem), writeln('.'). ir(Elem, 'kepernyore') :- writeln(Elem).

HATÉKONYSÁG Buborék rendezés: Legrosszabb eset: ?- buborekRendezes2(>, [10,9,8,7,6,5,4,3,2,1], List). Az algoritmus először a 10-et viszi a lista végére, majd a 9-et, stb. Minden esetben végig kell mennünk a listán (n elem), és n-1 összehasonlítást végezni. Így n*(n-1) összehasonlítást végzünk. Vagyis a rendezés komplexitása: O(n2). (Bizonyítható, hogy az első változaté O(n3))

HATÉKONYSÁG Split: n elemű lista esetén n-1 hasonlítás kell. Így az algoritmus komplexitása: O(n). Quick sort: Azon múlik, hogy melyik elem mentén vágtuk szét a listát.

Kiegyensúlyozott vágás HATÉKONYSÁG Quick sort: Kiegyensúlyozott vágás

Teljesen kiegyensúlyozatlan vágás HATÉKONYSÁG Quick sort: Teljesen kiegyensúlyozatlan vágás (Ha pl. az input lista már rendezett, és mindig a fej alapján vágunk.)

HATÉKONYSÁG Quick sort: Komplexitás: Kiegyensúlyozott lista esetén O(n*log(n)). Teljesen kiegyensúlyozatlan lista esetén O(n2). Bináris rendezés: Feljavítható O(n*log(n)) komplexitásra.

ELTÁNCOLT ALGORITMUSOK  https://www.youtube.com/watch?v=lyZQPjUT5B4 https://www.youtube.com/watch?v=ywWBy6J5gz8 https://www.facebook.com/AlgoRythmics