Algoritmusok és adatszerkezetek II.

Hasonló dokumentumok
Algoritmusok és adatszerkezetek II.

Algoritmusok és adatszerkezetek II.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

OOP: Java 8.Gy: Abstract osztályok, interfészek

Programozási nyelvek Java

Tuesday, March 6, 12. Hasító táblázatok

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

BME MOGI Gépészeti informatika 4.

Informatika terméktervezőknek

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Objektumorientált programozás C# nyelven III.

117. AA Megoldó Alfréd AA 117.

C# feladatok gyűjteménye

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Tervminták a valósidejű gyakorlatban

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Példa 30 14, 22 55,

Az új be- és kimenet könyvtár

Java Programozás 1. Gy: Java alapok. Ismétlés ++

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

BME MOGI Gépészeti informatika 7.

Java programozási nyelv 5. rész Osztályok III.

Programozás II. ATM példa Dr. Iványi Péter

Önszervező bináris keresőfák

OOP: Java 8.Gy: Gyakorlás

Generikus osztályok, gyűjtemények és algoritmusok

Programozási nyelvek Java

JAVA PROGRAMOZÁS 3.ELŐADÁS

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Magas szintű programozási nyelvek 2 Előadás jegyzet

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Adatszerkezet - műveletek

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java II. I A Java programozási nyelv alapelemei

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Programozási technológia

Programozás I. Első ZH segédlet

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

I. 288.: Utcai WiFi térkép

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

A C# programozási nyelv alapjai

7 7, ,22 13,22 13, ,28

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Collections. Összetett adatstruktúrák

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Osztályszintű elérés, kivételkezelés, fájlkezelés

INFORMATIKAI ALAPISMERETEK

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Java Programozás 11. Ea: MVC modell

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

10. Gráf absztrakt adattípus, gráfok ábrázolása

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Abstract osztályok és interface-ek. 7-dik gyakorlat

Szoftvertechnológia alapjai Java előadások

Rekurzió. Horváth Gyula.

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

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Programozási technológia

Programozási nyelvek Java

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Alkalmazott modul: Programozás

Objektumorientált programozás C# nyelven

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Módosítható Prioritási sor Binomiális kupaccal. Wednesday, March 21, 12

Felhasználó által definiált adattípus

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

Objektum Orientált Szoftverfejlesztés (jegyzet)

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Osztályok. 4. gyakorlat

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Kalapácsvetés 2016 szöveges

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése

3. Gyakorlat Ismerkedés a Java nyelvvel

MestInt gyakorlat visszalépéses keresés

ZH mintapélda. Feladat. Felület

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

OOP: Java 4.Gy: Java osztályok

C# osztályok. Krizsán Zoltán

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java programozási nyelv 4. rész Osztályok II.

Bánsághi Anna

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

INFORMATIKAI ALAPISMERETEK

Segédanyag: Java alkalmazások gyakorlat

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

Programozás C++ -ban 2007/4

Bánsághi Anna

Java VII. Polimorfizmus a Java nyelvben

Átírás:

Algoritmusok és adatszerkezetek II. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu

6. Ugrólista (Skiplist) Definíció. Olyan adatszerkezet, amelyre teljesül az alábbi három feltétel: 1. Minden cellának az 1. szomszéd kapcsolatát tekintve rendezett lánc. 2. Minden cella k-adik szomszédja megelőzi a láncban a k + 1-edik szomszédját. 3. Bármely x cellára ha y szomszédja x-nek, akkor minden olyan z cellának, amely a láncban x és y között van, bármely szomszédja nem y után van a láncban. 1. ábra. Az 1. rendezett lánc tulajdonság. 1 2 3 4 2. ábra. A 2. előremutató rendezési tulajdonság. x z y 3. ábra. A 3. keresztezés mentesség tulajdonság.

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x 4. ábra. Példa ugrólista. A keresztezés mentesség tulajdonság biztosítható úgy, hogy minden cellából a k-adik szintről induló él arra a cellára mutasson, amelyik tőle jobbra az első legalább k magas cella.

Adott cellából előremutató élek számát véletlen válasszuk meg, úgy hogy "jó" eloszlású legyen! n elemet (cellát) tartalmazó ugrólista esetén jelölje N(k) a k magas cellák számát és L k = N(k) n és L k = pl k 1 teljesüljön adott 1 < p < 1 valós számra. Ekkor azaz Mivel így L 1 kifejezhető L 2 -vel Továbbá i=2 1 = L 1 = 1 L i i=1 L i i=2 L i = L 2 + L 3 + = L 2 + pl 2 + p 2 L 2 + L 1 = 1 L 2 p i i=0 p i = 1 i=0 1 p Így L 1 = 1 L 2 1 p. Mivel L 2 = pl 1, azt kapjuk, hogy L 1 = 1 pl 1 1 p L 1 = 1 p

A maximális toronymagasság: L(n)? Az a legkisebb k, amelyre p k n 1, azaz n ( 1 p )k, tehát Hogyan biztosítható ilyen eloszlás? L(n) = log 1/p n private byte randomlevel() { //új toronymagasság véletlen generálása byte i=0; while (i<=magas && Math.random()<prob ) i++; return i;

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x

Fej Lab 4 3 2 1 b c e f g h j k l m n o p q r x

11 10 9 8 7 6 5 4 3 2 1 U[11]............... x y............ U[10] U[9] U[8] U[7] U[6] U[5] U[4] U[3] P U[2] U[1] Q 5. ábra. Ugrólista bővítése.

11 10 9 8 7 6 5 4 3 2 1 U[11]............... x y............ U[10] U[9] U[8] U[7] U[6] U[5] U[4] U[3] P U[2] U[1] Q 6. ábra. Törlés ugrólistából.

public class ULista<E extends Comparable<E>> implements Iterable<E>{ private static final int MaxSzint=32; public UListaPont<E> fej, lab; // protected byte magas; //a legmagasabb torony magassága private double prob=0.5;//küszöb a véletlen toronymagasság generálásához private boolean multi=true;//többszösös elem megengedett-e public static class UListaPont<E extends Comparable<E>>{ private E elem; public UListaPont<E>[] csat; UListaPont(E x, int m){ csat=new UListaPont[m+1]; this.elem=x;

public UListaPont<E> PKeres(E x) { // UListaPont<E> p = fej; // lab.elem=x; for (int i=magas; i>=0; i--) // while (p.csat[i].elem.compareto(x)<0 ) p = p.csat[i]; // p = p.csat[0]; // if ((p!= lab) && p.elem.equals(x)) return p; // else return null; // public E Keres(E x){ // UListaPont<E> p = PKeres(x); // if (p!= null) return p.elem; // else return null; //

public boolean Bovit(E x) { // byte ujszint = randomlevel(); // UListaPont<E> p = fej; // UListaPont<E> q = fej; // lab.elem=x; for (int i=magas; i>=0; i--) {// q=p.csat[i]; while ( q.elem.compareto(x)<0 ){ p = q; q = p.csat[i]; lab.csat[i] = p; if (!multi && q!=lab && q.elem.equals(x)){ return false; else{

UListaPont<E> ujp = new UListaPont<E>(x, ujszint); if (ujszint > magas) { magas=ujszint; lab.csat[ujszint]=fej; for (int i=0; i<=ujszint; i++) { // p=lab.csat[i]; ujp.csat[i]=p.csat[i]; p.csat[i] = ujp; // return true;

public boolean Torol(E x){ UListaPont<E> p = fej; UListaPont<E> q = null; lab.elem=x; for (int i=magas; i>=0; i--) {// q=p.csat[i]; while ( q.elem.compareto(x)<0 ){ p = q; q = p.csat[i]; lab.csat[i] = p; if (q==lab q.elem.compareto(x)!=0 ) return false;

int i=0; while (true){ lab.csat[i].csat[i]=q.csat[i]; i++; if (i>magas lab.csat[i].csat[i]!=q) break; q=null; while (magas>=0 && fej.csat[magas]==lab) magas--; return true; //Torol

public ULista<E> Vag(E x){ UListaPont<E> ujfej=new UListaPont<E>(null, MaxSzint); UListaPont<E> ujlab=new UListaPont<E>(null, MaxSzint); ULista<E> UL2=new ULista<E>(); for (int i=0; i<=maxszint; i++) ujfej.csat[i]=fej.csat[i]; UListaPont<E> p = fej; // UListaPont<E> q = fej; // lab.elem=x; byte magas1=0; for (byte i=magas; i>=0; i--) {// q=p.csat[i]; while ( q.elem.compareto(x)<0 ){ p = q; q = p.csat[i]; ujfej.csat[i]=q; p.csat[i]=ujlab; if (p!=fej && magas1==0) magas1=i;

for (int i=magas1+1; i<=maxszint; i++) fej.csat[i]=ujlab; magas=magas1; UL2.lab=lab; UL2.fej=ujfej; magas1=maxszint; while (magas1>0 && ujfej.csat[magas1]==lab) magas1--; UL2.magas=magas1; this.lab=ujlab; return UL2;

public void Egyesit(ULista<E> U2){ if (U2.Min()==null) return; if (Min()==null){ fej=u2.fej; lab=u2.lab; magas=u2.magas; U2.Uresit(); return; multi=u2.multi; if ( Max().compareTo(U2.Min())>=0 ) throw new RuntimeException("A két halmaz nem erősen diszjunkt"); byte ujmagas= (magas<u2.magas)? U2.magas : magas; for (byte i=maxszint; i>magas; i--) fej.csat[i]=u2.fej.csat[i]; UListaPont<E> p = fej; for (byte i=magas; i>=0; i--){ while (p.csat[i]!=lab) p=p.csat[i]; p.csat[i]=u2.fej.csat[i]; magas=ujmagas; lab=u2.lab; U2.Uresit(); return;

A KERES BOVIT TOROL algoritmusok futási idejének várható értéke: L(n) p + 1 (1 p) = log 1/p n + 1 p (1 p) = O(lgn)