A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege...

43
1 A PROGAMOZÁS ALAPJAI 1 9. előadás Vitéz András egyetemi adjunktus BME Híradástechnikai Tanszék [email protected] 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 i n n a s 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 i n n a s 1 1 1 1 1 n a s n a s n n n , , Rekurzió

Transcript of A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege...

Page 1: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

1

A PROGAMOZÁS ALAPJAI 1

9. előadás

Vitéz Andrásegyetemi adjunktus

BME Híradástechnikai Tanszék

[email protected]

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ó

Page 2: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 3: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 4: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 5: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 6: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 7: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 8: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 9: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 10: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 11: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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ó

Page 12: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 13: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 14: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 15: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 16: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 17: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 18: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 19: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 20: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 21: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 22: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 23: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 24: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 25: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 26: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 27: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 28: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 29: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 30: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 31: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 32: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 33: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 34: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 35: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 36: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 37: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 38: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 39: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 40: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 41: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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)

É

Page 42: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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

Page 43: A PROGAMOZÁS ALAPJAI 1 - BME-HITvitez/Progalap1/2012tavasz/Ea/ea09.pdf · Pl.: sorozatok összege Definíció: Rekurzív definíció: ...

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