a progamozÁs alapjai 1 - bme-hitvitez/progalap1/2012tavasz/ea/ea09.pdf · pl.: sorozatok összege...
TRANSCRIPT
1
A PROGAMOZÁS ALAPJAI 1
9. előadás
Vitéz Andrásegyetemi adjunktus
BME Híradástechnikai Tanszék
2012. április 3.A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Miről lesz ma szó?
Rekurzió• Rekurzió fogalma• Rekurzióval kezelhető problémák
– sorozat összeg számítása, gyorsrendezés (quicksort)• Rekurzió megvalósítása• Rekurzió és ciklus kapcsolata
– Fibonacci számsorozat, Hanoi tornyai • Fák, mint rekurzív adatszerkezetek• Bináris fa
– rendezőfa» felépítése, beszúrás, törlés» bejárása (inorder, preorder, posztorder)
– dekódoló fa• Adatszerkezetek áttekintése
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Matematikából ismerős
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Matematikából ismerős
Pl.: sorozatok összege
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Matematikából ismerős
Pl.: sorozatok összege
Definíció:
n
inn as
1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Matematikából ismerős
Pl.: sorozatok összege
Definíció:
Rekurzív definíció:
n
inn as
1
1
1
1
1
nas
nas
nnn ,
,
Rekurzió
2
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Matematikából ismerős
Pl.: sorozatok összege
Definíció:
Rekurzív definíció:
n
inn as
1
1
1
1
1
nas
nas
nnn ,
,
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Írjunk függvényt a kiszámításához!
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Írjunk függvényt a kiszámításához!
Legyen például 12 nan
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Írjunk függvényt a kiszámításához!
Legyen például
a(int k){return 2*k-1;}
12 nan
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Írjunk függvényt a kiszámításához!
Legyen például
a(int k){return 2*k-1;}
s(int n){int i,o=0;for(i=1;i<n+1;i++)o+=a(n);return o;
}
12 nan
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Most kódoljuk a rekurzív változatot!
Rekurzió
3
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Most kódoljuk a rekurzív változatot!
a(int k){return 2*k-1;}
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Most kódoljuk a rekurzív változatot!
a(int k){return 2*k-1;}
s(int n){return n==1?a(1):s(n-1)+a(n);
}
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Most kódoljuk a rekurzív változatot!
a(int k){return 2*k-1;}
s(int n){return n==1?a(1):s(n-1)+a(n);
}
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
Rekurzió
4
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = s1 + a2
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = s1 + a2
s1 = a1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = s1 + a2
s1 = a1
a1 = 2·1 - 1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = s1 + a2
s1 = a1
a1 = 1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = s1 + a2
s1 = a1
1
Rekurzió
5
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = s1 + a2
s1 = 1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = s1 + a2
1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = 1 + a2
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = 1 + a2
a2 = 2·2 - 1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = 1 + a2
a2 = 3
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = 1 + a2
3
Rekurzió
6
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = 1 + 3
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
s2 = 4
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = s2 + a3
4
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = 4 + a3
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = 4 + a3
a3 = 2·3 - 1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = 4 + a3
a3 = 5
Rekurzió
7
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = 4 + a3
5
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = 4 + 5
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
s3 = 9
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = s3 + a4
9
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = 9 + a4
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = 9 + a4
a4 = 2·4 - 1
Rekurzió
8
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = 9 + a4
a4 = 7
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = 9 + a4
7
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = 9 + 7
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
s4 = 16
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = s4 + a5
16
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = 16 + a5
Rekurzió
9
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = 16 + a5
a5 = 2·5 - 1
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = 16 + a5
a5 = 9
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = 16 + a5
9
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = 16 + 9
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
s5 = 25
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mi történik, amikor kiszámítjuk s5-öt?
25
Rekurzió
10
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Közvetlen rekurzió:
egy szegmens hivatkozikönmagára
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Közvetett rekurzió:
szegmensek egymásra hivatkozásaibankör van
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió célja:
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió célja:
A feladat méretének,vagy bonyolultságánakcsökkentéseegy kezelhető szintig.
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió kritikus pontja:
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió kritikus pontja:
A leállás feltételénekteljesülésétminden esetbenbiztosítani kell.
Rekurzió
11
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió nagy előnye
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió nagy előnyeaz elegancia
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió nagy előnyeaz elegancia
Néhány sorban,könnyen érthetőkódot írhatunk.
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió nagy hátránya
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió nagy hátrányaa csábítás
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A rekurzió nagy hátrányaa csábítás
Akkor is használjuk,ha kevéssé hatékony,sőt pazarló.
Rekurzió
12
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mikor ne használjunk rekurziót?
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mikor ne használjunk rekurziót?
Ha az eredmény zárt alakban is előállítható.
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mikor ne használjunk rekurziót?
Ha az eredmény zárt alakban is előállítható.Pl.: számtani sorozat n-edik eleme
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mikor ne használjunk rekurziót?
Ha az eredmény zárt alakban is előállítható.Pl.: számtani sorozat n-edik eleme
Ha a feladat ciklusszervezéssel iskönnyen megoldható.
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mikor ne használjunk rekurziót?
Ha az eredmény zárt alakban is előállítható.Pl.: számtani sorozat n-edik eleme
Ha a feladat ciklusszervezéssel iskönnyen megoldható.
Pl.: faktoriális számítás
Rekurzió
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy hatékony rekurzív rendező algoritmus:
Rekurzió alkalmazása
13
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy hatékony rekurzív rendező algoritmus:gyorsrendezés
(quick sort)
Rekurzió alkalmazása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy hatékony rekurzív rendező algoritmus:gyorsrendezés
(quick sort)
Alapgondolata:
Rekurzió alkalmazása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy hatékony rekurzív rendező algoritmus:gyorsrendezés
(quick sort)
Alapgondolata:Válasszuk szét a tömb elemeita mediánnál kisebb, és annálnagyobb kulcsúakra!
Rekurzió alkalmazása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy hatékony rekurzív rendező algoritmus:gyorsrendezés
(quick sort)
Alapgondolata:Válasszuk szét a tömb elemeita mediánnál kisebb, és annálnagyobb kulcsúakra!A két felet rendezzük ugyanígy!
Rekurzió alkalmazása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Helyben szétválogatási feladat
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Helyben szétválogatási feladatMár tanultuk a vektoralgoritmusoknál!
Gyorsrendezés
14
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Helyben szétválogatási feladatMár tanultuk a vektoralgoritmusoknál!
A vektor elemei közül vegyük előreazokat, amelyek rendelkeznek egyadott tulajdonsággal!
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Helyben szétválogatási feladatMár tanultuk a vektoralgoritmusoknál!
A vektor elemei közül vegyük előreazokat, amelyek rendelkeznek egyadott tulajdonsággal! A vektor végén helyezzük el azokat azelemeket, amelyek nem rendelkeznekaz adott tulajdonsággal.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Helyben szétválogatási feladatMár tanultuk a vektoralgoritmusoknál!
A vektor elemei közül vegyük előreazokat, amelyek rendelkeznek egyadott tulajdonsággal! A vektor végén helyezzük el azokat azelemeket, amelyek nem rendelkeznekaz adott tulajdonsággal.A két csoporton belül a sorrendneknincs jelentősége.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy lehetséges megoldás:
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy lehetséges megoldás:(ha biztosan van ilyen is, olyan is)
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy lehetséges megoldás:(ha biztosan van ilyen is, olyan is)
Induljunk el előről, és keressük meg az elsőolyan elemet, amely hátulra való!
Gyorsrendezés
15
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy lehetséges megoldás:(ha biztosan van ilyen is, olyan is)
Induljunk el előről, és keressük meg az elsőolyan elemet, amely hátulra való!
Induljunk el hátulról, és keressük meg az elsőolyan elemet, amely előre való!
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy lehetséges megoldás:(ha biztosan van ilyen is, olyan is)
Induljunk el előről, és keressük meg az elsőolyan elemet, amely hátulra való!
Induljunk el hátulról, és keressük meg az elsőolyan elemet, amely előre való!
Ha még nem értünk a vizsgálat végére,cseréljük meg a két elemet, ésfolytassuk a keresést újra előről hátra!
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Kéket keresünk elöl
Piros TOVÁBB
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Kéket keresünk elöl
Kék ÁLLJ, folytatás hátul
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Pirosat keresünk hátul
Kék TOVÁBB
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Pirosat keresünk hátul
Piros ÁLLJ, vizsgálat jön
Gyorsrendezés
16
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Vizsgáljuk, hogy végeztünk-e
Jelzők jó sorrendben CSERE, folytatás elöl
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Kéket keresünk elöl
Kék ÁLLJ, folytatás hátul
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Pirosat keresünk hátul
Piros ÁLLJ, vizsgálat jön
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Vizsgáljuk, hogy végeztünk-e
Jelzők jó sorrendben CSERE, folytatás elöl
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Kéket keresünk elöl
Piros TOVÁBB
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Kéket keresünk elöl
Kék ÁLLJ, folytatás hátul
Gyorsrendezés
17
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Pirosat keresünk hátul
Kék TOVÁBB
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Pirosat keresünk hátul
Kék TOVÁBB
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Pirosat keresünk hátul
Kék TOVÁBB
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Pirosat keresünk hátul
Piros ÁLLJ, vizsgálat jön
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Vizsgáljuk, hogy végeztünk-e
Jelzők kifordultak SZÉTVÁLOGATVA!
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan lesz ebből gyorsrendezés?
Gyorsrendezés
18
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan lesz ebből gyorsrendezés?
A tulajdonság legyen az,hogy az elem kulcsakisebb a mediánénál
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan lesz ebből gyorsrendezés?
A tulajdonság legyen az,hogy az elem kulcsakisebb a mediánénál
(a medián középső elem)(nem az átlag!)
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
1 3 4 5 6 8 10 25 28
Az átlaghoz legközelebb eső elem
Medián elem
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan találhatjuk meg a medián elemet?(a vektor végigolvasása nélkül)
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan találhatjuk meg a medián elemet?(a vektor végigolvasása nélkül)
Sajnos, SEHOGY!
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan becsülhetjük meg a medián elemet?
Gyorsrendezés
19
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan becsülhetjük meg a medián elemet?
Minden jó lehet, aminél van kisebb,és van nagyobb kulcsú elem.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan becsülhetjük meg a medián elemet?
Minden jó lehet, aminél van kisebb,és van nagyobb kulcsú elem.
Mi csak a vektor két szélét látjuk.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan becsülhetjük meg a medián elemet?
Minden jó lehet, aminél van kisebb,és van nagyobb kulcsú elem.
Mi csak a vektor két szélét látjuk.
Használjuk ezek átlagát!
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan becsülhetjük meg a medián elemet?
Minden jó lehet, aminél van kisebb,és van nagyobb kulcsú elem.
Mi csak a vektor két szélét látjuk.
Használjuk ezek átlagát!
Esetleg torzítsuk egy kicsit, hogy valóban vágjon.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan áll le a rekurzió?
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan áll le a rekurzió?
A rendezendő szakaszokhossza egyre csökken.
Gyorsrendezés
20
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan áll le a rekurzió?
A rendezendő szakaszokhossza egyre csökken.
Ha szerencsénk van,minden lépésben feleződik.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan áll le a rekurzió?
A rendezendő szakaszokhossza egyre csökken.
Ha szerencsénk van,minden lépésben feleződik.
Végül 1-elemű szakaszainkmaradnak, ami mindig rendezett.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mennyi a várható lépésszám?
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mennyi a várható lépésszám?
Minden finomításkor a teljes vektortvégig kell olvasni, kivéve az egyhosszúságú szakaszokat.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mennyi a várható lépésszám?
Minden finomításkor a teljes vektortvégig kell olvasni, kivéve az egyhosszúságú szakaszokat.
Erre log2N-szer van szükség.
Gyorsrendezés
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mennyi a várható lépésszám?
Minden finomításkor a teljes vektortvégig kell olvasni, kivéve az egyhosszúságú szakaszokat.
Erre log2N-szer van szükség.
Tehát a várható lépésszám N•log2N
Gyorsrendezés
21
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan lehet megvalósítania rekurziót?
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan lehet megvalósítani, hogy a függvénynek egyszerre több példánya éljen?
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Minden példánynak saját lokális változóivannak a szegmens mezőben (stack frame).
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Mit kell tudnia a függvényről a fordítóprogramnak, hogy meg tudja hívni?
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
azonosítójáta megvalósító szubrutin címét
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
paraméterezésétaz átadandó paraméterek típusát
Rekurzió megvalósítása
22
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Ez képezi a függvény deklarációját
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A közvetlen rekurzióhoz ez több mint elég!
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
De mi a helyzet a közvetett rekurzióval?
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Ez a„tyúk vagy a tojás”
esete!
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Megoldás:
Válasszuk szét a függvénydeklarációját
ésdefinícióját!
Rekurzió megvalósítása
23
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A függvények tetszőleges sorrendben hívhatják egymást,ha a fejléceket kigyűjtjük,és a kód elejére írjuk.
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A függvények tetszőleges sorrendben hívhatják egymást,ha a fejléceket kigyűjtjük,és a kód elejére írjuk.
Jó szokás egy fájlba írni,és #include direktívávalhivatkozni rá.
Rekurzió megvalósítása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Minden ciklus megvalósíthatórekurzióval.
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Minden ciklus megvalósíthatórekurzióval.
Minden rekurzió megvalósíthatóciklussal és segédváltozókkal.
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Minden ciklus megvalósítható rekurzióval.
A
C
B
Vége
A
B
C
Vége
A
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Minden rekurzió megvalósíthatóciklussal és segédváltozókkal.
A rekurzió és a ciklus kapcsolata
24
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Minden rekurzió megvalósíthatóciklussal és segédváltozókkal.
A megoldásra rátalálninéha nem könnyű feladat!
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Minden rekurzió megvalósíthatóciklussal és segédváltozókkal.
A megoldásra rátalálninéha nem könnyű feladat!
Lássunk példát erre is, arra is!
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy könnyű probléma:
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy könnyű probléma:
A Fibonacci számsorozat
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy könnyű probléma:
A Fibonacci számsorozat
1 1 2 3 5 8 13 21 34 55 …
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy könnyű probléma:
A Fibonacci számsorozat
1 1 2 3 5 8 13 21 34 55 …
A sorozat harmadik elemétől kezdveminden elem az előző kettő összege.
A rekurzió és a ciklus kapcsolata
25
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Rekurzív megvalósításFibonacci számsorozat
fibo_r(unsigned n){if (n<2) return n;return fibo_r(n-2) + fibo_r(n-1);
}
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Megvalósítás ciklussalFibonacci számsorozat
fibo_c(unsigned n){int regi=0,uj=1,seged;for(n--;n;n--){
seged=uj; uj+=regi; regi=seged;
}return uj;
}
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy nehéz probléma:
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy nehéz probléma:
Hanoi tornyai
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy nehéz probléma:
Hanoi tornyai
A MESE
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy nehéz probléma:
Hanoi tornyai
A rekurzió és a ciklus kapcsolata
26
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy nehéz probléma:
Hanoi tornyai
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy nehéz probléma:
Hanoi tornyai
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Egy nehéz probléma:
Hanoi tornyai
A rekurzió és a ciklus kapcsolata
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Rekurzív megvalósításHanoi tornyai
void hanoi_r(int hanyat,char honnan,char hova){char seged='A'+'B'+'C'-honnan-hova;if (hanyat>1) hanoi_r(hanyat-1,honnan,seged);printf("%c -> %c\n",honnan,hova);if (hanyat>1) hanoi_r(hanyat-1,seged,hova);
}
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Megvalósítás ciklussalHanoi tornyai
void hanoi_c(int hanyat,char honnan,char hova){int i,j,k,n,p,q,r;char a[3];a[0]=honnan;a[1]=hanyat&1?hova:'A'+'B'+'C'-honnan-hova;a[2]=hanyat&1?'A'+'B'+'C'-honnan-hova:hova;n=1<<hanyat;for(q=0,i=1;i<n;i++){
if(i&1){p=q;q=(p+1)%3;r=3-p-q;printf("%c -> %c\n",a[p],a[q]);
}else{for(j=k=1;!(i&j);j<<=1,k=1-k);
if(k)printf("%c -> %c\n",a[r],a[p]);else printf("%c -> %c\n",a[p],a[r]);
}}
}A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
K-ágú fa:
Minden csomópontból legfeljebb K él indul ki.
Rekurzív adatszerkezetek
27
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
K = 1
egyirányban láncolt lista
Rekurzív adatszerkezetek
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A fák tipikusan rekurzív adatszerkezetek
Rekurzív adatszerkezetek
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A fák tipikusan rekurzív adatszerkezetek
Rekurzív adatszerkezetek
Például:
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A fák tipikusan rekurzív adatszerkezetek
Rekurzív adatszerkezetek
Például: (ha megengedjük az üres lista fogalmát)
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
A fák tipikusan rekurzív adatszerkezetek
Rekurzív adatszerkezetek
Például: (ha megengedjük az üres lista fogalmát)
A lista egy olyan adatszerkezet,amelyben a listafejet egy lista követi.
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
K = 2
bináris fa
Rekurzív adatszerkezetek
28
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa definíciója:
Rekurzív adatszerkezetek
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa definíciója:
Olyan bináris fa, amelybenminden lokális gyökérelembaloldali részfájában csaka lokális gyökér kulcsánálkisebb kucsú elemek vannak.
Rekurzív adatszerkezetek
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa definíciója:
Olyan bináris fa, amelybenminden lokális gyökérelembaloldali részfájában csaka lokális gyökér kulcsánálkisebb kucsú elemek vannak.
A jobboldali részfában csaka lokális gyökér kulcsánálnagyobb kulcsú elemek vannak.
Rekurzív adatszerkezetek
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Beszúrás:
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Beszúrás:
Megkeressük, hol lenne az elem helye,és oda akasztjuk.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Beszúrás:
Megkeressük, hol lenne az elem helye,és oda akasztjuk.
Ez nem rekurzió!
Bináris fa
29
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Beszúrás:
Megkeressük, hol lenne az elem helye,és oda akasztjuk.
Ez nem rekurzió!
A kialakuló szerkezet az elemekérkezési sorrendjétől függ!
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
342
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2
49
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
Bináris fa
30
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16
41
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
Bináris fa
31
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
42
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
42
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
42
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
42
29
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
29 42
Bináris fa
32
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
29 42
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
29 42
9
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
5
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
5
Bináris fa
33
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
5
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
5
10
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
5 10
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
34
2 49
16 41
9 29 42
5 10
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa inorder bejárása
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa inorder bejárása
Alapgondolata:
Bináris fa
34
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa inorder bejárása
Alapgondolata:Járjuk be a baloldali részfát, ha van!
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa inorder bejárása
Alapgondolata:Járjuk be a baloldali részfát, ha van!Dolgozzuk fel a lokális gyökérelemet!
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa inorder bejárása
Alapgondolata:Járjuk be a baloldali részfát, ha van!Dolgozzuk fel a lokális gyökérelemet!Járjuk be a jobboldali részfát, ha van!
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan áll le a rekurzió?
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan áll le a rekurzió?
A levélelemekneknincsenek oldalsó részfái,
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Hogyan áll le a rekurzió?
A levélelemekneknincsenek oldalsó részfái, sőt a csomópontok közöttis lehetnek olyanok,amelyeknek csak egy van.
Bináris fa
35
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- preorder
(gyökér – bal gyerek – jobb gyerek)mentés - visszaállítás
1
52
7643
Bináris fa bejárása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- inorder
(bal gyerek – gyökér – jobb gyerek)rendezés
4
62
7531
Bináris fa bejárása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- posztorder
(bal gyerek – jobb gyerek – gyökér)képlet kiértékelése
7
63
5421
Bináris fa bejárása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
typedef … adat;typedef stuct fa {
adat a;struct fa *b,*j;} faelem;
void feldolgoz (adat d){…
}
Bináris fa bejárása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- preorder
void bejar(faelem *p) void bejar(faelem *p) { {if (p) feldolgoz(p->a);
{ if (p->b) bejar(p->b); feldolgoz(p->a); if (p->j) bejar(p->j); bejar(p->b); } bejar(p->j);
}}
Bináris fa bejárása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- inorder
void bejar(faelem *p) void bejar(faelem *p) { {if (p) if (p->b) bejar(p->b);
{ feldolgoz(p->a); bejar(p->b); if (p->j) bejar(p->j); feldolgoz(p->a); } bejar(p->j);
}}
Bináris fa bejárása
36
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- posztorder
void bejar(faelem *p) void bejar(faelem *p) { {if (p) if (p->b) bejar(p->b);
{ if (p->j) bejar(p->j); bejar(p->b); feldolgoz(p->a); bejar(p->j); } feldolgoz(p->a);
}}
Bináris fa bejárása
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Komplex mintapélda#include <stdio.h>#include <stdlib.h>
typedef struct x{int a;struct x *b,*j;
}faelem,*famut;
void bejar(famut p){if(p){
bejar(p->b);printf("%4d",p->a);bejar(p->j);
}}∑ ∑ ∑
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Komplex mintapélda#include <stdio.h>#include <stdlib.h>
typedef struct x{int a;struct x *b,*j;
}faelem,*famut;∑ ∑ ∑
void beszur_rek(int d,famut*p){if(!*p){
*p=calloc(1,sizeof(faelem));(*p)->a=d;
}else
d<(*p)->a? beszur_rek(d,(&(*p)->b)): beszur_rek(d,(&(*p)->j));
}∑ ∑ ∑
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Komplex mintapélda#include <stdio.h>#include <stdlib.h>
typedef struct x{int a;struct x *b,*j;
}faelem,*famut;∑ ∑ ∑
void beszur_cik(int d,famut*p){while(*p)
p=d<(*p)->a?&((*p)->b):&((*p)->j);*p=calloc(1,sizeof(faelem));(*p)->a=d;
}∑ ∑ ∑
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Komplex mintapélda#include <stdio.h>#include <stdlib.h>
typedef struct x{int a;struct x *b,*j;
}faelem,*famut;∑ ∑ ∑
int main(){int i,t[10]={34,2,49,16,41,42,29,9,5,10};famut q1=0,q2=0;for(i=0;i<10;i++)beszur_rek(t[i],&q1);for(i=0;i<10;i++)beszur_cik(t[i],&q2);bejar(q1); printf("\n");bejar(q2); printf("\n");return 0;
}
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Törlés:
Az eddigi módszerek nem alkalmazhatók!
Bináris fa
37
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Törlés:
Az eddigi módszerek nem alkalmazhatók!
A kiiktatott elemet nem lehet kifűzni, ha két részfa lóg rajta.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Törlés:
Az eddigi módszerek nem alkalmazhatók!
A kiiktatott elemet nem lehet kifűzni, ha két részfa lóg rajta.
Ha csak az egyik oldali részfa létezik, a probléma nem jelentkezik.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Megoldás a definíció alapján:
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Megoldás a definíció alapján:
Az egyik (pl. a jobboldali) részfátgyökéreleménél fogva felvisszüka törölt elem helyére.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Megoldás a definíció alapján:
Az egyik (pl. a jobboldali) részfátgyökéreleménél fogva felvisszüka törölt elem helyére.
A másik (tehát baloldali) részfátfelakasztjuk az előbbi részfa leg-baloldalibb elemének bal oldalára.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
38
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
10
2
7
1 3
8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
10
2
7
1 3
8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
10
2
7
1 3
8
Bináris fa
39
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
10
2
7
1 3
8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa célja:
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa célja:
Gyors visszakeresést tesz lehetővé.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Bináris rendezőfa célja:
Gyors visszakeresést tesz lehetővé.
Logaritmikus keresés lehetséges,de csak ha a fa kiegyensúlyozott.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Elem törlése a kiegyensúlyozottságotkevésbé rontó algoritmussal:
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Elem törlése a kiegyensúlyozottságotkevésbé rontó algoritmussal:
Az egyik, (például a jobboldali) részfa másikoldali legszélső elemét (tehát a legbaloldalibbat)írjuk be a törölni kívánt elem helyére.
Bináris fa
40
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Elem törlése a kiegyensúlyozottságotkevésbé rontó algoritmussal:
Az egyik, (például a jobboldali) részfa másikoldali legszélső elemét (tehát a legbaloldalibbat)írjuk be a törölni kívánt elem helyére.
Ezután úgy kell eljárni, mintha ez utóbbielemet akarnánk törölni,
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Elem törlése a kiegyensúlyozottságotkevésbé rontó algoritmussal:
Az egyik, (például a jobboldali) részfa másikoldali legszélső elemét (tehát a legbaloldalibbat)írjuk be a törölni kívánt elem helyére.
Ezután úgy kell eljárni, mintha ez utóbbielemet akarnánk törölni, csakhogy ennekbiztosan nincs legalább az egyik oldalirészfája (esetünkben baloldali részfája),így rekurzió nem alakul ki.
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
5
6
9
4 10
2 7
1 3 8
Bináris fa
41
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
6
9
5 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
6
9
5 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
6
9
5 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
6
9
5 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
6
9
5 10
2 7
1 3 8
Bináris fa
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
Dekódoló fa
H V F Ü L Ä P J B X C Y Z Q Ö
Á
S U R W D K G O
I A N M
E T
Morse kód:(részlet)
É
42
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- fordítási időben ismert méretű,
- homogén
- lineáris
- elemei közvetlenül címezhetők
Adatszerkezetek áttekintése
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- fordítási időben ismert méretű,
- homogén
- lineáris
- elemei közvetlenül címezhetők
TÖMB
Adatszerkezetek áttekintése
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- futási időben megismert méretű,
- homogén
- lineáris
- elemei közvetlenül címezhetők
Adatszerkezetek áttekintése
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- futási időben megismert méretű,
- homogén
- lineáris
- elemei közvetlenül címezhetők
DINAMIKUS TÖMB
Adatszerkezetek áttekintése
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- futási időben változó méretű,
- homogén
- lineáris
- elemei szekvenciálisan elérhetők
Adatszerkezetek áttekintése
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- futási időben változó méretű,
- homogén
- lineáris
- elemei szekvenciálisan elérhetők
LÁNCOLT LISTA
Adatszerkezetek áttekintése
43
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- futási időben változó méretű,
- lehet inhomogén
- elágazó, hierarchikus
- elemei pointereken lépkedve érhetők el
Adatszerkezetek áttekintése
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem
- futási időben változó méretű,
- lehet inhomogén
- elágazó, hierarchikus
- elemei pointereken lépkedve érhetők el
EGYEDI KIALAKÍTÁSÚ DINAMIKUS ADAT
Adatszerkezetek áttekintése
Innen folytatjuk a jövő héten ...
KÖSZÖNÖM A FIGYELMET!
A programozás alapjai 1 9. előadás
© Vitéz András, Dr. Zsóka Zoltán, Híradástechnikai Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem