Egyszerű programozási tételek

Hasonló dokumentumok
Rekurzív algoritmusok

Objektum Orientált Programozás VII.

Programozási tételek. PPT 2007/2008 tavasz.

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

Összetett programozási tételek

Egyszerű programozási tételek

Rendezések. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar október 24.

PROGRAMOZÁSI TÉTELEK

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

9. előadás. Programozás-elmélet. Programozási tételek Elemi prog. Sorozatszámítás Eldöntés Kiválasztás Lin. keresés Megszámolás Maximum.

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

Egyszerű programozási tételek

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Programozási segédlet

Haladó rendezések. PPT 2007/2008 tavasz.

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Hatékonyság 1. előadás

ELEMI PROGRAMOZÁSI TÉTELEK

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Algoritmizálás, adatmodellezés tanítása 2. előadás

Algoritmizálás, adatmodellezés tanítása 2. előadás

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Programozási tételek. Dr. Iványi Péter

Informatikai tehetséggondozás:

Algoritmizálás, adatmodellezés tanítása 1. előadás

23. Fa adatszerkezetek, piros-fekete fa adatszerkezet (forgatások, új elem felvétele, törlés)(shagreen)

Rendezések. Összehasonlító rendezések

Algoritmizálás, adatmodellezés tanítása 7. előadás

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Algoritmusokfelülnézetből. 1. ELŐADÁS Sapientia-EMTE

Algoritmizálás, adatmodellezés tanítása 1. előadás

A félév során előkerülő témakörök

Algoritmusok vektorokkal keresések 1

Rekurzió. (Horváth Gyula és Szlávi Péter előadásai felhasználásával)

Az összetett programozási tételek is egy tőről fakadnak

Tartalomjegyzék Algoritmusok - pszeudókód

Informatikai tehetséggondozás:

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

Algoritmizálás és adatmodellezés tanítása 2. előadás

Objektumorientált Programozás VI.

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Programozás I. 1. előadás: Algoritmusok alapjai. Sergyán Szabolcs

AAO 3. Csink László 2007

Tartalomjegyzék Algoritmusok - pszeudókód

Közismereti informatika I. 4. előadás

Algoritmusok pszeudókód... 1

Tartalom. Programozási alapismeretek. 11. előadás

Összetett programozási tételek 2.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Algoritmuselmélet 2. előadás

Adatbázis rendszerek Gy: Algoritmusok C-ben

Egyszerű programok készítése Kifejezések Bitszintű műveletek Relációs műveletek... 58

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Algoritmusok Tervezése. 6. Előadás Algoritmusok 101 Dr. Bécsi Tamás

Algoritmusok - pszeudókód... 1

2015, Diszkrét matematika

REKURZIÓ. Rekurzív: önmagát ismétlő valami (tevékenység, adatszerkezet stb.) Rekurzív függvény: függvény, amely meghívja saját magát.

Specifikáció. B logikai formula, a bemeneti feltétel, K logikai formula, a kimeneti feltétel, A az algoritmus, amelyre az állítás vonatkozik.

Algoritmusok pszeudókód... 1

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

Programozási alapismeretek 11. előadás

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Informatikai tehetséggondozás:

Babeş-Bolyai Tudományegyetem, Kolozsvár. Informatikai-matematika záróvizsga tankönyv

Programozási módszertan. Mohó algoritmusok

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

A programozás alapjai 1 Rekurzió

BABEŞ-BOLYAI TUDOMÁNYEGYETEM KOLOZSVÁR. Informatika záróvizsga tankönyv

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

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

ALGORITMUSOK ÉS PROBLÉMAOSZTÁLYOK (1. előadás)

Programoza s I. 11. elo ada s Oszd meg e s uralkodj! elvu algoritmusok. Sergya n Szabolcs

PROGRAMOZÁSMÓDSZERTAN

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Algoritmuselmélet 1. előadás

Algoritmusok és adatszerkezetek I. 4. előadás

Láncolt listák Témakörök. Lista alapfogalmak

Felvételi tematika INFORMATIKA

Dr. Schuster György február / 32

Babeş-Bolyai Tudományegyetem, Kolozsvár. Informatika záróvizsga tankönyv

Algoritmizálás és adatmodellezés tanítása 3. előadás

PROGRAMOZÁSI NYELVEK (GYAKORLAT)

Információs Technológia

Algoritmizálás és adatmodellezés 2. előadás

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Informatikai tehetséggondozás:

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Számjegyes vagy radix rendezés

Halmaz típus Értékhalmaz:

Algoritmizálás és adatmodellezés tanítása 6. előadás

14. Mediánok és rendezett minták

2015, Diszkrét matematika

Bevezetés a programozásba I 3. gyakorlat. PLanG: Programozási tételek. Programozási tételek Algoritmusok

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Algoritmizálás, adatmodellezés 1. előadás

19. AZ ÖSSZEHASONLÍTÁSOS RENDEZÉSEK MŰVELETIGÉNYÉNEK ALSÓ KORLÁTJAI

Átírás:

Egyszerű programozási tételek Sorozatszámítás Eljárás Sorozatszámítás(N, X, S) R R 0 Ciklus i 1-től N-ig R R művelet A[i] A : számokat tartalmazó tömb N : A tömb elemszáma R : Művelet eredménye Eldöntés Eljárás Eldöntés(A, N, T, VAN) i 1 Ciklus amíg(i N) és T (A[i]) VAN (i N) A : Feldolgozandó tömg N : Tömb elemeinek száma T : Tulajdonság függvény VAN : logikai változó Kiválasztás Eljárás Kiválasztás(A, N, T, SORSZ) i 1 Ciklus amíg T (A[i]) SORSZ i Eljárás Vége A : feldolgozandó tömb N : Tömb elemeinek száma T : tulajdonság függvény SORSZ : az első T tulajdonságú elem indexe Lineáris Keresés Eljárás Keresés(A, N, T, VAN, SORSZ) i 1 Ciklus amíg(i N) és T(A[i]) VAN ( i N) Ha VAN akkor SORSZ i A : Feldolgozandó tömb N : Tömb elemeinek száma T : tulajdonság függvény VAN : Logikai változó SORSZ : első T tulajdonságú elem indexe

Megszámlálás Eljárás Megszámlálás(A, N, T, DB) DB 0 i 1 Ciklus i 1-től N-ig Ha T(A[i]) akkor Eljárás Vége A : feldolgozandó tömb N : Tömb elemeinek száma T : tulajdonság függvény DB : T tulajdonságú elemek száma Maximumkiválasztás Eljárás Maximumkiválasztás(A, N, MAX) MAX 1 Ciklus i 2-től N-ig Ha A[i] > A[MAX] akkor MAX i A : Feldolgozandó tömb N : tömb elemeinek száma MAX : maximális elme indexe Másolás Eljárás Másolás(X, N, Y) Ciklus i 1-től N-ig Y[i] művelet X[i] X : Feldolgozandó tömb N : tömb elemeinek száma Y : Eredmény tömb Kiválogatás Eljárás Kiválogatás(X, N, T, Y, DB) DB 0 Ciklus i 1-től N-ig Ha T(X[i]) akkor Y[DB] X[i] X : Feldolgozandó tömb N : Tömb elemeinek száma T : Tulajdonság függvény Y : eredmény tömb DB : Y tömbbe kiválogatott elemek száma

Szétválogatás Eljárás Szétválogatás(X, N, T, Y, DBY, Z, DBZ) DBY 0 DBZ 0 Ciklus i 1-től N-ig Ha T(X[i]) akkor DBY DBY + 1 Y[DBY] X[i] DBZ DBZ + 1 Z[DBZ] X[i] X : Feldolgozandó tömb N : Tömb elemeinek száma T : Tulajdonság függvény Y : egyik eredmény tömb DBY : X T tulajdonságú elemeinek száma Z : másik eredmény tömb DBZ : X T tulajdonságú elemeinek száma Szétválogatás egyetlen tömbbe Eljárás Szétválogatás(X, N, T, Y, DBY) DBY 0 INDZ N + 1 Ciklus i 1-től N-ig Ha T(X[i]) akkor DBY DBY + 1 Y[DBY] X[i] INDZ INDZ 1 Y[INDZ] X[i] Metszet Eljárás Metszet(X, M, Y, N, Z, DB) DB 0 Ciklus i 1-től M-ig j 1 Ciklus amíg j N és X[i] Y[j] j j + 1 Ha j N akkor ; Z[DB] X[i] X : Egyik feldolgozandó tömb M : X elemeinek száma Y : másik feldolgozandó tömb N : Y elemeinek száma Z : Eredmény tömb DB : Metszetbeli elemek száma

Szétválogatás a bemeneti tömbben Eljárás Szétválogatás(X, N, T, DB) E 1; U N; seged X[E] Ciklus amíg E < U Ciklu amíg E < U és (T(X[U])) U U -1 Ha E < U akkor X[E] X[U]; E E + 1; Ciklus amíg E < U és T(X[E]) E E + 1 Ha E < U akkor X[U] X[E]; U U 1 X[E] seged Ha T(X[E]) akkor DB E DB E - 1 Közös elem keresése Eljárás MetszetbeliElem(X, M, Y, N, VAN, E) i 1; VAN hamis Ciklus amíg i M és VAN j 1 Ciklus amíg j N és X[i] Y[j] j j + 1 Ha j N akkor VAN igaz; E X[i] X : egyik tömb M : X elemeinek száma Y : másik tömb elemeinek száma N : Y elemeinek száma VAN : logikai változó, pontosan akkor igaz ha a két tömbben van közös elem E : a közös elem értéke (ha van)

Egyesítés Eljárás Egyesítés(X, M, Y, N, Z, DB) Z X; DB M Ciklus j 1-től N-ig i 1 Ciklus amíg i M és X[i] Y[j] Ha i > M akkor ; Z[DB] Y[j] X : egyik bemenet M : X elemeinek száma Y : másik bemenet N : Y elemeinek száma Z : eredmény tömb DB : Unióbeli elemek száma Halmazfelsorolás készítés Eljárás HalmazfelsorolásKészítés(X, N, Z, DB) DB 0 Ciklus i 1-től N-ig j 1 Ciklus amíg j DB és X[i] Z[j] j j + 1 Ha j > DB akkor Z[DB] X[i] X : eredeti sorozat N : X elemeinek száma Z : halmazzá alakított sorozat DB : Z elemeinek száma Összefuttatás Eljárás Összefuttatás(X, M, Y, N, Z, DB) i 1 j 1; DB 0 Ciklus amíg i M és j N X[i] < Y[j] esetén Z[DB] X[i]; X[i] = Y[j] esetén Z[DB] X[i]; ; j j + 1 X[i] > Y[j] esetén Z[DB] Y[j]; j j + 1 Ciklus amíg i M ; Z[DB] X[i]; Ciklus amíg j N ; Z[DB] Y[j]; j j + 1

Összefuttatás (redezettek úniója) Ha X[M] = Y[N], akkor az utolsó két ciklusra nincs szükség. Ezt a helyzetet magunk is előidézhetjük. Eljárás Összefuttatás(X, M, Y, N, Z, DB) i 1; j 1; DB 0 X[M + 1] + ; Y[N + 1] + Ciklus amíg i < M + 1 vagy j < N + 1 X[i] < Y[j] esetén Z[DB] X[i]; X[i] = Y[j] esetén Z[DB] X[i]; ; j j + 1 X[i] > Y[j] esetén Z[DB] Y[j]; j j + 1 Ha nincs a két sorozatban azonos elem, akkor a megvalósítás még egyszerűbb Eljárás Összefuttatás(X, M, Y, N, Z, DB) i 1; j 1; DB 0 X[M +1] + ; Y[N + 1] + Ciklus amíg i < M + 1 vagy j < N + 1 Ha X[i] < Y[j] akkor Z[DB] X[i]; Z[DB] Y[j]; j j + 1

Algoritmusok összeépítése Másolás és sorozatszámítás összeépítése Eljárás Másolás_Sorozatszámítás(X, N, R) R R 0 Ciklus i 1-től N-ig R R művelet g(x[i]) X : Feldolgozandó tömb N : Tömb elemeinek száma R : Művelet eredménye Másolás és maximumkiválasztás összeépítése Eljárás Másolás_Maximumkiválasztás(N, X, MAX, MAXERT) MAX 1 MAXERT g(x[1]) Ciklus i 2-től N-ig Ha MAXERT < g(x[i]) akkor MAXERT g(x[i]) MAX i X : Feldolgozandó tömb N: Tömb elemeinek száma MAX : Maximális értékű elem indexe MAXERT: Maximális érték Megszámolás és keresés összeépítése Eljárás Megszámolás_Keresés(N, X, T, K, VAN, SORSZ) i 0; DB 0 Ciklus amíg (i < N) és (DB < K) Ha T(X[i]) akkor VAN (DB = K) Ha VAN akkor SORSZ i X : Feldolgozandó tömb N : Tömb elemeinek száma T : tulajdonság függvény K : A K-adik T tulajdonságú elemet keressük VAN : Logikai változó SORSZ : A K-adik T tulajdonságú elem indexe

Maximumkiválasztás és kiválogatás összeépítése Eljárás Maximumkiválogatás(X, N, DB, Y, MAXERT) MAXERT X[1] DB 1 Y[DB] 1 Ciklus i 2-től N-ig X[i] > MAXERT esetén MAXERT X[i] DB 1 Y[DB] i X[i] = MAXERT esetén Y[DB] i X : Feldolgozandó tömb N : Tömb elemeinke száma Kimenet DB : Maximális elemek száma Y : Maximális elemek indexei MAXERT : Maximális érték Kiválogatás és sorozatszámítás összeépítése Eljárás Kiválogatás_Sorozatszámítás(X, N, T, R) R R 0 Ciklus i 1-től N-ig Ha T(X[i]) akkor R R művelet X[i] X : feldolgozandó tömb N : Tömb elemeinek száma T : Tulajdonság függvény R : Művelet eredménye Kiválogatás és Maximumkiválasztás összeépítése Eljárás Kiválogatás_Maximumkiválasztás(X, N, T, VAN, MAX, MAXERT) MAXERT - Ciklus i 1-től N-ig Ha T(X[i]) és X[i] > MAXERT akkor MAXERT X[i] MAX i VAN (MAXERT - ) X : feldolgozandó tömb N : Tömb elemeinek száma T : Tulajdonság függvény VAN : Logikai változó MAX : A maximális értékű elem indexe MAXERT : A maximális érték

Kiválogatás és Másolás összeépítése Eljárás Kiválogatás_Másolás(X, N, T, f, DB, Z) DB 0 Ciklus i 1-től N-ig Ha T(X[i]) akkor Z[DB] f(x[i]) X : feldolgozandó tömb N : Tömb elemeinek száma T : Tulajdonság függvény f : Végrehajtandó függvény DB : T tulajdonságú elemek száma Z : Feldolgozott sorozat

Rendezések Egyszerű cserés rendezés Eljárás Rendezés(N, X) Ciklus i 1-től N - 1-ig Ciklus j i + 1-től N-ig Ha X[i] > X[j] akkor Csere(X[i], X[j]) Hatékonyság Helyfoglalás: N + 1 Hasonlítások száma: N(N-1) / 2 Mozgatások száma: legalább 0, legfeljebb 3 * N(N 1) / 2 Csere megvalósítása Eljárás Csere(X[i], X[j]) TEMP X[i] X[i] X[j] X[j] TEMP Minimumkiválasztásos rendezés Eljárás Rendezés(N, X) Ciklus i 1-től N 1-ig MIN i Ciklus j i + 1-től N-ig Ha X[MIN] > X[j] akkor MIN j Csere (X[i], X[MIN]) Hatékonyság Helyfoglalás: N + 1 Hasonlítások száma: N(N - 1) / 2 Mozgatások száma: 3 * (N 1) Buborékos rendezés Eljárás Rendezés(N, X) Ciklus i N-től 2-ig -1-esével Ciklus j 1-től i - 1-ig Ha X[j] > X[j + 1] akkor Csere(X[j], X[j + 1]) Hatékonyság Helyfoglalás: N + 1 Hasonlítások száma: N(N - 1) / 2 Mozgatások száma: legalább 0, legfeljebb 3 * N(N 1) / 2

Javított buborékos rendezés Eljárás Rendezés(N, X) i N Ciklus amíg i 2 CS 0 Ciklus j 1-től i 1-ig Ha X[j] > X[j + 1] akkor Csere(X[j], X[j + 1] CS j i CS Hatékonyság Helyfoglalás: N + 1 Hasonlítások száma: legalább: N 1 legfeljebb: N(N - 1) / 2 Mozgatások száma: legalább 0, legfeljebb 3 * N(N 1) / 2 Beillesztéses rendezés Eljárás Rendezés(N, X) Ciklus i 2-től N-ig j i 1 Ciklus amíg j > 0 és X[j] > X[j + 1] Csere (X[j], X[j + 1]) j j 1 Hatékonyság Helyfoglalás: N + 1 Hasonlítások száma: legalább: N 1 legfeljebb: N(N - 1) / 2 Mozgatások száma: legalább 0, legfeljebb 3 * N(N 1) / 2 Javított Beillesztéses rendezés Eljárás Rendezés(N, X) Ciklus i 2-től N-ig j i 1 Y X[i] Ciklus amíg j > 0 és X[j] > Y X[j + 1] X[j] j j 1 X[j + 1] Y Hatékonyság Helyfoglalás: N + 1 Hasonlítások száma: legalább: N 1 legfeljebb: N(N - 1) / 2 Mozgatások száma: legalább 2 * (N - 1) legfeljebb 2 * (N 1) + N(N 1) / 2

Rendezés Shell módszerrel Eljárás rendezés(n, X) L L 0 Ciklus amíg L 1 Ciklus K L + 1-től 2L-ig Ciklus i K-tól N-ig L-esével j i L Y X[i] Ciklus amíg j 0 és X[j] > Y X[j + L] X[j] j j L X[j + L] Y L Következő(L) Rendezés Shell módszerrel módosított Eljárás Rendezés(N, X) L L 0 Ciklus amíg L 1 Ciklus i L + 1-től N-ig j i L Y X[i] Ciklus amíg j > 0 és X[j] > Y X[j + L] X[j] j j L X[j + L] Y L Következő(L)

Rekurzív algoritmusok Faktoriális Függvény fakt(n) Ha N = 0, akkor return(1) return(n * fakt(n - 1)) Függvény vége Fibonacci Függvény Fib(N) Ha N 1 akkor return(1) return(fib(n 1) + Fib(N - 2)) Függvény vége Binomális együtthatók Függvény Bin(N, K) Ha (K = 0) vagy (K = N) akkor return(1) return(bin(n 1, K) + Bin(N 1, K 1)) Szöveg megfordítás Függvény Fordítás(X, N) Ha N > 1 akkor return(fordítás(x[2..n], N 1) + X[1]) Függvény vége

Palindrom Függvény Palindrom_e(X, N) Ha N 1 akkor return(igaz) Ha X[1] = X[N] akkor return(palindrom_e(x[2..n 1], N - 2)) return(hamis) Függvény vége Hatványozás Függvény Hatvány(a, n) Ha n = 0 akkor return(1) Ha n páros, akkor return(hatvány(a, n/2)* Hatvány(a, n/2)) return(hatvány(a, (n - 1)/2) * Hatvány(a, (n - 1)/2) * a) Függvény vége Hanoi tornyai Eljárás Hanoi(N, Forras, Cel, Seged) Ha N > 0 akkor Hanoi(N 1, Forras, Seged, Cel) Ki: N, Forras, Cel Hanoi(N 1, Seged, Cel, Forras)

Programozási tételek rekurzív megvalósítása Sorozatszámítás Függvény Sorozatszámítás(A, N) Ha N = 0 akkor return(r 0 ) return(a[n] művelet Sorozatszámítás(A[1..N - 1],N - 1)) Függvény vége Megszámlálás Függvény Megszámlálás(A, N, T) Ha N = 1 akkor Ha T(A[N]) akkor return(1) return(0) Ha T(A[N]) akkor return(1 + Megszámlálás(A, N - 1, T)) return(megszálálás(a, N - 1, T)) Függvény vége Maximumkiválasztás Függvény Maximumkiválasztás(A, N) Ha N = 1 akkor return(n) eddigimax Maximumkiválasztás(A, N 1) Ha A[N] > A[eddigiMax] akkor return(n) return(eddigimax) Függvény vége

Lineáris keresés Függvény Keresés(X, E, U, Y) Ha E > U akkor return(0) Ha X[E] = Y akkor return(e) return(keresés(x, E + 1, U, Y) Függvény vége

Keresések, halmazok, halmazműveletek Lineáris keresés Eljárás LineárisKeresés(X, N, Y, VAN, SORSZ) i 1 Ciklus amíg (i N) és X[i] Y) VAN (i N) Ha VAN akkor SORSZ i -Minimális lépésszám: 1 -Maximális lépésszám: N (Ezt kapjuk minden olyan esetben is, ha Y nincs benne a sorozatban!) -Az átlagos futási idő: O(N) -Ezért hívjuk lineáris keresésnek Lineáris keresés (rekurziv megvalósítás) Függvény Keresés(X, E, U, Y) Ha E > U akkor return(0) Ha X[E] = Y akkor return(e) return(keresés(x, E + 1, U, Y) Függvény vége Keresés rendezett sorozatban Eljárás LineárisKeresés(X, N, Y, VAN, SORSZ) i 1 Ciklus amíg (i N) és (X[i] < Y) VAN (i N) és (X[i] = Y) Ha VAN akkor SORSZ i -Minimális lépésszám: (Akkor is előállhat ez ha Y nincs benne a sorozatban!) -Maximális lépésszám: N -Átlagos lépésszám: (Nem függ attól, hogy Y benne van-e a sorozatban!)

Logaritmikus keresés Függvény Keresés(X, E, U, Y) Ha E > U akkor return(0) K [ (E + U)/2 ] X[K] = Y esetén return(k) X[K] < Y esetén return(keresés(x, K + 1, U, Y) X[K] > Y esetén return(keresés(x, E, K 1, Y) Függvény vége [ ] az egészrész függvényt jelöli Logaritmikus keresés Iteratív megoldás Eljárás LogaritmikusKeresés(X, N, Y, VAN, SORSZ) E 1; U N Ciklus K [ (E + U)/2 ] Y < X[K] esetén U K 1 Y > X[K] esetén E K + 1 Amíg (E U) és (X[K] Y) VAN (E U) Ha VAN akkor SORSZ K -Minimális lépésszám: 1 (ha a középső elem az Y) -Maximális lépésszám: [1 + log 2 N] -Átlagos lépésszám: [log 2 N] -Így már érthető, honnan kapta a nevét az eljárás -Van, aki felezéses- vagy bináris keresésnek hívja az eljárást az alapütlet miatt. [ ] az egészrész függvényt jelöli [ ] az egészrész függvényt jelöli

Eldöntés felezéses módszerrel Eljárás Eldöntés(X, N, Y, VAN) E 1; U N Ciklus K [ (E + U)/2 ] Y < X[K] esetén U K 1 Y > X[K] esetén E K + 1 Amíg (E U) és (X[K] Y) VAN (E U) Kiválasztás felezéses módszerrel Eljárás Kiválasztás(X, N, Y, SORSZ) E 1; U N Ciklus K [ (E + U)/2 ] Y < X[K] esetén U K 1 Y > X[K] esetén E K + 1 Amíg(E U) és (X[K] Y) SORSZ K

Kiválogatás felezéses módszerrel Eljárás Kiválogatás(X, N, Y, VAN, E, U) E 1; U N Ciklus K [ (E + U)/2 ] Y < X[K] esetén U K 1 Y > X[K] esetén E K + 1 Amíg (E U) és (X[K] Y) VAN (E U) Ha VAN akkor E K Ciklus amíg (E > 1) és (X[E 1] = Y) E E 1 U K Ciklus amíg (U < N) és (X[U + 1] =Y) U U + 1 Halmaz: halmaznak tekintünk egy olyan (növekvő módon) rendezett tömböt, melynek minden eleme különböző. Halmaz létrehozása Eljárás HalmazLétrehozás(X, N, M) j 1 Ciklus i 1-től N-ig Ha X[i] X[j] akkor j j + 1 X[j] X[i] M j Halmaz-e? Eljárás Halmaz_e(N, X, L) i 2 Ciklus amíg (i N) és (X[i] X[i 1]) L (i > N) N elemű rendezett tömb (X) M elemű halmaz (X) N (legalább kettő) elemű rendezett tömb L logikai változó

Tartalmazás A logaritmikus keresésből származtatott Eldöntést kell alkalmazni. Eljárás Eldöntés(X, N, Y, VAN) E 1; U N Ciklus K [ (E + U)/2 ] Y < X[K] esetén U K 1 Y > X[K] esetén E K + 1 Amíg (E U) és (X[K] Y) VAN (E U) Részhalmaz A B, ha A minden eleme a B-nek is eleme. Eljárás Részhalmaz(X, M, Y, N, L) i 1; j 1 Ciklus amíg (i M) és (j N) és (X[i] Y[j]) Ha X[i] = Y[j] akkor j j + 1 L (i > M) Unió A U B = {x x A vagy x B} Eljárás Összefuttatás(X, M, Y, N, DB, Z) i 1; j 1; DB 0 X[M + 1] + ; Y[N + 1] + Ciklus amíg (i < M + 1) vagy (j < N + 1) X[i] < Y[j] esetén Z[DB] X[i]; X[i] = Y[j] esetén Z[DB] X[i]; ; j j + 1 X[i] > Y[j] esetén Z[DB] Y[j]; j j + 1

Metszet A B = x x A és x B} Eljárás Metszet(X, M, Y, N, DB, Z) i 1; j 1; DB 0 Ciklus amíg (i M) és j N) X[i] < Y[j] esetén X[i] > Y[j] esetén j j + 1 X[i] = Y[j] esetén Z[DB] X[i] ; j j + 1 Különbség A \ B = {x x A és x B} Eljárás különbség(x, M, Y, N, DB, Z) i 1; j 1; DB 0 Ciklus amíg (i M) és (j N) X[i] < Y[j] esetén Z[DB] X[i] X[i] > Y[j] esetén j j + 1 X[i] = Y[j] esetén ; j j + 1 Ciklus amíg (i M) ; Z[DB] X[i]; Ciklus amíg

Szimmetrikus differencia A B = (A\B) (B\A) Eljárás SzimmetrikusDifferencia(X, M, Y, N, DB, Z) i 1; j 1; DB 0 Ciklus amíg (i M) és (j N) X[i] < Y[j] esetén Z[DB] X[i] X[i] > Y[j] esetén Z[DB] Y[j] j j + 1 X[i] = Y[j] esetén ; j j + 1 Ciklus amíg (i M) ; Z[DB] X[i]; Ciklus amíg (j N) ; Z[DB] Y[j]; j j + 1

Oszd meg és uralkodj elv A megoldandó proplémát felosztjuk kisebb részeladatokra Az egyes részfeladatokat rekurzív módon megoldjuk A részfeladatok megoldásait egyesítjük Maximumkiválasztás X tömb, N X elemszáma X elemeinek maximuma Függvény FelezőMaximumkiválaszt(X, N) Ha N = 1 akkor return(x[1]) K [N/2] BalMax FelezőMaximumkiválaszt(X[1..K],K) JobbMax FelezőMaximumkiválaszt(X[K + 1..N],N - K) Ha BalMax JobbMax akkor return(balmax) return(jobbmax) Függvény vége k-adik legkisebb elem keresése Függvény KiválasztK-adik(X, E, U, k) Ha E = U akkor return X[E] Szétválogat(X, E, U, K) k = K esetén return X[K] k < K esetén KiválasztK-adik(X, E, K 1, k) k > K esetén KiválasztK-adik(X, K + 1, U, k K) Függvény vége -Az ismertetett algoritmus átlagos esetében O(N)-es, de legrosszabb esetben O(N logn)-es

Merge sort Eljárás Merge-sort(X, E, U) Ha E < U akkor K Merge-sort(X, E, K) Merge-sort(X, K + 1, U) Merge(X, E, K, U) Az algoritus futási ideje: O(N * logn)-es A megvalósításthoz szükségünk van segédtömbökre, így nagyméretű tömbök esetén helyfoglalás szempontjából nem hatékony Eljárás Merge(X, E, K, U) N 1 K E + 1; N 2 U K Ciklus i 1-től N 1 -ig L[i] X[E + i 1] Ciklus j 1-től N 2 -ig R[j] X[K + j] L[N 1 + 1] + ; R[N 2 + 1] + i 1; j 1 Ciklus k E-től U-ig Ha L[i] R[j] akkor X[k] L[i] X[k] R[j] j j + 1

Quicksort (rekurzív) Eljárás Quick(X, E, U) Szétválogat(X, E, U, K) Ha K E > 1 akkor Quick(X, E, K 1) Ha U K > 1 akkor Quick(X, K + 1, U) Eljárás Szétválogat(X, E, U, K) K E; L U; A X[K] Ciklus amíg K < L Ciklus amíg (K < L) és (X[L] A) L L 1 Ha K < L akkor X[K] X[L]; K K + 1 Ciklus amíg (K < L) és (X[K] A) K K + 1 Ha K < L akkor X[L] X[K]; L L 1 X[K] A -A Quicksort-nál alkalmazott Szétválogat metódus mindig a vizsgált résztömb első eleméhez viszonyítva válogatja két részre a résztömböt. -Emiatt pl. eleve rendezett tömb esetén az algoritmus futási ideje O(N 2 )-es, míg átlagos esetben csak O(N* logn)-es. Javíthatunk az algoritmuson, ha véletlenszerűen jelöljük ki, hogy melyik legyen az az elem a vizsgált résztömbből, amelyhez viszonyítva szétválogatjuk a résztömb elemeit.