83
Algoritmuselmélet 2. el ˝ oadás Katona Gyula Y. Budapesti M ˝ uszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b [email protected] 2002 Február 12.

Algoritmuselmélet 2. eloadáskiskat/algel/pp2elo.pdfALGORITMUSELMÉLET 2. ELOADÁS˝ 4 Alsó becslés összehasonlítás alapú rendezésre Ugyanaz, mintha Bar Kochba-ban kellene

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • Algoritmuselmélet 2. el őadás

    Katona Gyula Y.Budapesti Műszaki és Gazdaságtudományi Egyetem

    Számítástudományi Tsz.I. B. 137/b

    [email protected]

    2002 Február 12.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 1

    Buborék-rendezés

    Input: A[1 : n] (rendezetlen) tömbHa valamely i-re A[i] > A[i+ 1], akkor a két cella tartalmát kicseréljük. Atömb elejéről indulva a cserélgetve eljutunk a tömb végéig.

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 1

    Buborék-rendezés

    Input: A[1 : n] (rendezetlen) tömbHa valamely i-re A[i] > A[i+ 1], akkor a két cella tartalmát kicseréljük. Atömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor alegnagyobb elem A[n]-ben van.

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 1

    Buborék-rendezés

    Input: A[1 : n] (rendezetlen) tömbHa valamely i-re A[i] > A[i+ 1], akkor a két cella tartalmát kicseréljük. Atömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor alegnagyobb elem A[n]-ben van. Ismételjük ezt az A[1 : n− 1] tömbre, majdaz A[1 : n− 2] tömbre, stb.

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 1

    Buborék-rendezés

    Input: A[1 : n] (rendezetlen) tömbHa valamely i-re A[i] > A[i+ 1], akkor a két cella tartalmát kicseréljük. Atömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor alegnagyobb elem A[n]-ben van. Ismételjük ezt az A[1 : n− 1] tömbre, majdaz A[1 : n− 2] tömbre, stb.procedure buborék(* az A[1 : n] tömböt nem csökkenően rendezi *)for (j = n− 1, j > 0, j := j − 1) do

    for (i = 1, i ≤ j, i := i+ 1) do{ ha A[i+ 1] < A[i], akkor cseréljük ki őket.}

    összehasonlítások száma: n− 1 + n− 2 + . . .+ 1 = n(n−1)2

    cserék száma: n(n−1)2

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 1

    Buborék-rendezés

    Input: A[1 : n] (rendezetlen) tömbHa valamely i-re A[i] > A[i+ 1], akkor a két cella tartalmát kicseréljük. Atömb elejéről indulva a cserélgetve eljutunk a tömb végéig. Ekkor alegnagyobb elem A[n]-ben van. Ismételjük ezt az A[1 : n− 1] tömbre, majdaz A[1 : n− 2] tömbre, stb.procedure buborék(* az A[1 : n] tömböt nem csökkenően rendezi *)for (j = n− 1, j > 0, j := j − 1) do

    for (i = 1, i ≤ j, i := i+ 1) do{ ha A[i+ 1] < A[i], akkor cseréljük ki őket.}

    összehasonlítások száma: n− 1 + n− 2 + . . .+ 1 = n(n−1)2

    cserék száma: n(n−1)2

    Java animáció: Buborék rendezés

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 2

    Beszúrásos rendezés

    Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemetA[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 2

    Beszúrásos rendezés

    Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemetA[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb.

    lineáris bináris

    összehasonlításn(n− 1)

    2

    n−1∑k=1

    dlog2(k + 1)e

  • ALGORITMUSELMÉLET 2. ELŐADÁS 2

    Beszúrásos rendezés

    Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemetA[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb.

    lineáris bináris

    összehasonlításn(n− 1)

    2

    n−1∑k=1

    dlog2(k + 1)e

    mozgatás(n+ 2)(n− 1)

    2

    (n+ 2)(n− 1)2

  • ALGORITMUSELMÉLET 2. ELŐADÁS 2

    Beszúrásos rendezés

    Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemetA[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb.

    lineáris bináris

    összehasonlításn(n− 1)

    2

    n−1∑k=1

    dlog2(k + 1)e

    mozgatás(n+ 2)(n− 1)

    2

    (n+ 2)(n− 1)2

    átlagos összehasonlításn(n− 1)

    4

    n−1∑k=1

    dlog2(n+ 1)e

  • ALGORITMUSELMÉLET 2. ELŐADÁS 2

    Beszúrásos rendezés

    Ha az A[1 : k] résztömb már rendezett, akkor szúrjuk be a következő elemetA[k + 1]-et lineáris vagy bináris kereséssel, majd a következőt ebbe, stb.

    lineáris bináris

    összehasonlításn(n− 1)

    2

    n−1∑k=1

    dlog2(k + 1)e

    mozgatás(n+ 2)(n− 1)

    2

    (n+ 2)(n− 1)2

    átlagos összehasonlításn(n− 1)

    4

    n−1∑k=1

    dlog2(n+ 1)e

    átlagos mozgatásn2

    4

    n2

    4

  • ALGORITMUSELMÉLET 2. ELŐADÁS 3

    Bináris beszúrásos rendezés lépésszáma

    K := dlog2 2e+ dlog2 3e+ . . .+ dlog2 ne ≤ ndlog2 ne

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 3

    Bináris beszúrásos rendezés lépésszáma

    K := dlog2 2e+ dlog2 3e+ . . .+ dlog2 ne ≤ ndlog2 ne

    Jobb becslés: használjuk fel, hogy dlog2 ke ≤ 1 + log2 k

    K < n− 1 + log2 2 + . . .+ log2 n = n− 1 + log2(n!)

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 3

    Bináris beszúrásos rendezés lépésszáma

    K := dlog2 2e+ dlog2 3e+ . . .+ dlog2 ne ≤ ndlog2 ne

    Jobb becslés: használjuk fel, hogy dlog2 ke ≤ 1 + log2 k

    K < n− 1 + log2 2 + . . .+ log2 n = n− 1 + log2(n!)

    Felhasználva a Stirling formulát: n! ∼ (n/e)n√

    2πn kapjuk, hogy

    log2 n! ∼ n(log2 n− log2 e) +1

    2log2 n+ log2

    √2π ≤ n(log2 n− 1, 442)

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 3

    Bináris beszúrásos rendezés lépésszáma

    K := dlog2 2e+ dlog2 3e+ . . .+ dlog2 ne ≤ ndlog2 ne

    Jobb becslés: használjuk fel, hogy dlog2 ke ≤ 1 + log2 k

    K < n− 1 + log2 2 + . . .+ log2 n = n− 1 + log2(n!)

    Felhasználva a Stirling formulát: n! ∼ (n/e)n√

    2πn kapjuk, hogy

    log2 n! ∼ n(log2 n− log2 e) +1

    2log2 n+ log2

    √2π ≤ n(log2 n− 1, 442)

    Ezért K ≤ n(log2 n− 0, 442) elég nagy n-re.

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 3

    Bináris beszúrásos rendezés lépésszáma

    K := dlog2 2e+ dlog2 3e+ . . .+ dlog2 ne ≤ ndlog2 ne

    Jobb becslés: használjuk fel, hogy dlog2 ke ≤ 1 + log2 k

    K < n− 1 + log2 2 + . . .+ log2 n = n− 1 + log2(n!)

    Felhasználva a Stirling formulát: n! ∼ (n/e)n√

    2πn kapjuk, hogy

    log2 n! ∼ n(log2 n− log2 e) +1

    2log2 n+ log2

    √2π ≤ n(log2 n− 1, 442)

    Ezért K ≤ n(log2 n− 0, 442) elég nagy n-re.Java animáció: Beszúrásos rendezés

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 4

    Alsó becslés összehasonlítás alapú rendezésre

    Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyiksorrendje (permutációja) az igazi sorrend.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 4

    Alsó becslés összehasonlítás alapú rendezésre

    Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyiksorrendje (permutációja) az igazi sorrend.Kezdetben n! lehetséges sorrend jön szóba.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 4

    Alsó becslés összehasonlítás alapú rendezésre

    Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyiksorrendje (permutációja) az igazi sorrend.Kezdetben n! lehetséges sorrend jön szóba.Két elemet összehasonlítva, a válasz két részre osztja a sorrendeket. Ha pl.azt kapjuk, hogy x < y, akkor az olyan sorrendek, amikben x hátrébb vany-nál, már nem jönnek szóba.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 4

    Alsó becslés összehasonlítás alapú rendezésre

    Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyiksorrendje (permutációja) az igazi sorrend.Kezdetben n! lehetséges sorrend jön szóba.Két elemet összehasonlítva, a válasz két részre osztja a sorrendeket. Ha pl.azt kapjuk, hogy x < y, akkor az olyan sorrendek, amikben x hátrébb vany-nál, már nem jönnek szóba.Ha az ellenség megint úgy válaszol, hogy minél több sorrend maradjon meg,akkor k kérdés után még szóba jön n!2k sorrend.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 4

    Alsó becslés összehasonlítás alapú rendezésre

    Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyiksorrendje (permutációja) az igazi sorrend.Kezdetben n! lehetséges sorrend jön szóba.Két elemet összehasonlítva, a válasz két részre osztja a sorrendeket. Ha pl.azt kapjuk, hogy x < y, akkor az olyan sorrendek, amikben x hátrébb vany-nál, már nem jönnek szóba.Ha az ellenség megint úgy válaszol, hogy minél több sorrend maradjon meg,akkor k kérdés után még szóba jön n!2k sorrend.Ha n!2k > 1 nem tudjuk megadni a rendezést. =⇒

    Tétel . Minden összehasonlítás alapú rendező módszer n elemrendezésekor legalább log2(n!) összehasonlítást használ.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 5

    Összefésüléses rendezés

    Összefésülés (MERGE):

    Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba valórendezése:

  • ALGORITMUSELMÉLET 2. ELŐADÁS 5

    Összefésüléses rendezés

    Összefésülés (MERGE):

    Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba valórendezése:A[1 : k] és B[1 : l] rendezett tömbök =⇒ C[1 : k + l] rendezett tömb

  • ALGORITMUSELMÉLET 2. ELŐADÁS 5

    Összefésüléses rendezés

    Összefésülés (MERGE):

    Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba valórendezése:A[1 : k] és B[1 : l] rendezett tömbök =⇒ C[1 : k + l] rendezett tömbNyilván C[1] = min{A[1], B[1]}, pl. A[1],

  • ALGORITMUSELMÉLET 2. ELŐADÁS 5

    Összefésüléses rendezés

    Összefésülés (MERGE):

    Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba valórendezése:A[1 : k] és B[1 : l] rendezett tömbök =⇒ C[1 : k + l] rendezett tömbNyilván C[1] = min{A[1], B[1]}, pl. A[1],ezt rakjuk át C-be és töröljük A-ból.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 5

    Összefésüléses rendezés

    Összefésülés (MERGE):

    Két már rendezett sorozat (tömb, lista, stb.) tartalmának egy sorozatba valórendezése:A[1 : k] és B[1 : l] rendezett tömbök =⇒ C[1 : k + l] rendezett tömbNyilván C[1] = min{A[1], B[1]}, pl. A[1],ezt rakjuk át C-be és töröljük A-ból.C[2] = min{A[2], B[1]}, stb.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 18

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,15, 20, 31 16, 18 12, 13

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,15, 20, 31 16, 18 12, 1320, 31 16, 18 12, 13, 15

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,15, 20, 31 16, 18 12, 1320, 31 16, 18 12, 13, 1520, 31 18 12, 13, 15, 16

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,15, 20, 31 16, 18 12, 1320, 31 16, 18 12, 13, 1520, 31 18 12, 13, 15, 1620, 31 12, 13, 15, 16, 18

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,15, 20, 31 16, 18 12, 1320, 31 16, 18 12, 13, 1520, 31 18 12, 13, 15, 1620, 31 12, 13, 15, 16, 1831 12, 13, 15, 16, 18, 20

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,15, 20, 31 16, 18 12, 1320, 31 16, 18 12, 13, 1520, 31 18 12, 13, 15, 1620, 31 12, 13, 15, 16, 1831 12, 13, 15, 16, 18, 20

    12, 13, 15, 16, 18, 20, 31

  • ALGORITMUSELMÉLET 2. ELŐADÁS 6

    Példa

    A B C

    12, 15, 20, 31 13, 16, 1815, 20, 31 13, 16, 18 12,15, 20, 31 16, 18 12, 1320, 31 16, 18 12, 13, 1520, 31 18 12, 13, 15, 1620, 31 12, 13, 15, 16, 1831 12, 13, 15, 16, 18, 20

    12, 13, 15, 16, 18, 20, 31

    összehasonlítások száma: k + l− 1, ahol k, l a két tömb hossza

  • ALGORITMUSELMÉLET 2. ELŐADÁS 7

    Összefésüléses rendezés

    Alapötlet: Rendezzük külön a tömb első felét, majd a második felét, végülfésüljük össze.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 7

    Összefésüléses rendezés

    Alapötlet: Rendezzük külön a tömb első felét, majd a második felét, végülfésüljük össze.Ezt csináljuk rekurzívan.

    MSORT(A[1 : n]) :=

    MERGE(MSORT(A[1 : dn/2e]),MSORT(A[dn/2e+ 1 : n])).

    Hogy elvarrjuk a rekurzió alját, legyen MSORT(A[i, i]) az üres utasítás.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    T (n) ≤ n− 1 + 2T (n/2),

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    T (n) ≤ n− 1 + 2T (n/2),

    T (n) ≤ n− 1 + 2(n/2− 1 + 2T (n/4)) = n− 1 + 2(n/2− 1) + 4T (n/4).

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    T (n) ≤ n− 1 + 2T (n/2),

    T (n) ≤ n− 1 + 2(n/2− 1 + 2T (n/4)) = n− 1 + 2(n/2− 1) + 4T (n/4).

    T (n) ≤ n−1+2(n/2−1)+4(n/4−1)+· · ·+2k−1(n/2k−1−1) ≤ ndlog2 ne.

    Felhasználva, hogy T (1) = 0.

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    T (n) ≤ n− 1 + 2T (n/2),

    T (n) ≤ n− 1 + 2(n/2− 1 + 2T (n/4)) = n− 1 + 2(n/2− 1) + 4T (n/4).

    T (n) ≤ n−1+2(n/2−1)+4(n/4−1)+· · ·+2k−1(n/2k−1−1) ≤ ndlog2 ne.

    Felhasználva, hogy T (1) = 0.

    Az összefésüléses rendezés konstans szorzó erejéig optimális.

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    T (n) ≤ n− 1 + 2T (n/2),

    T (n) ≤ n− 1 + 2(n/2− 1 + 2T (n/4)) = n− 1 + 2(n/2− 1) + 4T (n/4).

    T (n) ≤ n−1+2(n/2−1)+4(n/4−1)+· · ·+2k−1(n/2k−1−1) ≤ ndlog2 ne.

    Felhasználva, hogy T (1) = 0.

    Az összefésüléses rendezés konstans szorzó erejéig optimális.

    Mozgatások száma: 2ndlog2 ne

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    T (n) ≤ n− 1 + 2T (n/2),

    T (n) ≤ n− 1 + 2(n/2− 1 + 2T (n/4)) = n− 1 + 2(n/2− 1) + 4T (n/4).

    T (n) ≤ n−1+2(n/2−1)+4(n/4−1)+· · ·+2k−1(n/2k−1−1) ≤ ndlog2 ne.

    Felhasználva, hogy T (1) = 0.

    Az összefésüléses rendezés konstans szorzó erejéig optimális.

    Mozgatások száma: 2ndlog2 neTárigény: 2n cella (bonyolultabban megcsinálva elég n+ konst.)

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 8

    Összehasonlítások száma

    Jelöljük T (n)-el a lépésszámot n hosszú tömb rendezésekor. Azegyszerűség kedvéért tegyük fel, hogy n = 2k.

    T (n) ≤ n− 1 + 2T (n/2),

    T (n) ≤ n− 1 + 2(n/2− 1 + 2T (n/4)) = n− 1 + 2(n/2− 1) + 4T (n/4).

    T (n) ≤ n−1+2(n/2−1)+4(n/4−1)+· · ·+2k−1(n/2k−1−1) ≤ ndlog2 ne.

    Felhasználva, hogy T (1) = 0.

    Az összefésüléses rendezés konstans szorzó erejéig optimális.

    Mozgatások száma: 2ndlog2 neTárigény: 2n cella (bonyolultabban megcsinálva elég n+ konst.)

    Java animáció: Összefésüléses rendezés

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 9

    Kupac adatszerkezet

    Egy (U,

  • ALGORITMUSELMÉLET 2. ELŐADÁS 9

    Kupac adatszerkezet

    Egy (U,

  • ALGORITMUSELMÉLET 2. ELŐADÁS 9

    Kupac adatszerkezet

    Egy (U,

  • ALGORITMUSELMÉLET 2. ELŐADÁS 9

    Kupac adatszerkezet

    Egy (U,

  • ALGORITMUSELMÉLET 2. ELŐADÁS 9

    Kupac adatszerkezet

    Egy (U,

  • ALGORITMUSELMÉLET 2. ELŐADÁS 10

    Bináris fa ábrázolása tömbbel

    A fa csúcsai az A[1 : n] tömb elemei.Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i+ 1].

  • ALGORITMUSELMÉLET 2. ELŐADÁS 10

    Bináris fa ábrázolása tömbbel

    A fa csúcsai az A[1 : n] tömb elemei.Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i+ 1].=⇒ A[j] csúcs apja A[bj/2c]

  • ALGORITMUSELMÉLET 2. ELŐADÁS 10

    Bináris fa ábrázolása tömbbel

    A fa csúcsai az A[1 : n] tömb elemei.Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i+ 1].=⇒ A[j] csúcs apja A[bj/2c]

    4

    59

    8

    2

    6

    6

    2 4 6 8 5 9 6

  • ALGORITMUSELMÉLET 2. ELŐADÁS 10

    Bináris fa ábrázolása tömbbel

    A fa csúcsai az A[1 : n] tömb elemei.Az A[i] csúcs bal fia A[2i], a jobb fia pedig A[2i+ 1].=⇒ A[j] csúcs apja A[bj/2c]

    4

    59

    8

    2

    6

    6

    2 4 6 8 5 9 6

  • ALGORITMUSELMÉLET 2. ELŐADÁS 11

    Kupac tulajdonság: apa < fia

  • ALGORITMUSELMÉLET 2. ELŐADÁS 12

    Kupacépítés

    f f21

    a

    c

    b

    f1 és f2 kupacok

  • ALGORITMUSELMÉLET 2. ELŐADÁS 12

    Kupacépítés

    f f21

    a

    c

    b

    f1 és f2 kupacok

    felszivárog(f){ Ha min{a, b} < c, akkor min{a, b} ésc helyet cserélHa a c elem a-val cserélt helyet,akkor felszivárog(f1), ha b-vel, akkorfelszivárog(f2) }

  • ALGORITMUSELMÉLET 2. ELŐADÁS 12

    Kupacépítés

    f f21

    a

    c

    b

    f1 és f2 kupacok

    felszivárog(f){ Ha min{a, b} < c, akkor min{a, b} ésc helyet cserélHa a c elem a-val cserélt helyet,akkor felszivárog(f1), ha b-vel, akkorfelszivárog(f2) }

    c addig megy lefelé, amig sérti a kupactulajdonságot.Lépésszám: Ha l a fa szintjeinek száma,akkor ≤ l − 1 csere és ≤ 2(l − 1)összehasonlítás

  • ALGORITMUSELMÉLET 2. ELŐADÁS 12

    Kupacépítés

    f f21

    a

    c

    b

    f1 és f2 kupacok

    felszivárog(f){ Ha min{a, b} < c, akkor min{a, b} ésc helyet cserélHa a c elem a-val cserélt helyet,akkor felszivárog(f1), ha b-vel, akkorfelszivárog(f2) }

    c addig megy lefelé, amig sérti a kupactulajdonságot.Lépésszám: Ha l a fa szintjeinek száma,akkor ≤ l − 1 csere és ≤ 2(l − 1)összehasonlítás

    kupacépítés(f){ Az f fa v csúcsaira lentről felfelé, jobbról balra felszivárog(v). }

  • ALGORITMUSELMÉLET 2. ELŐADÁS 13

    Kupacépítés költsége

    Bináris fában:

    1. szint: 1 pont

    2. szint: 2 pont

    3. szint: 22 pont

    ...

    l-edik szint: > 1 és ≤ 2l−1 pont

  • ALGORITMUSELMÉLET 2. ELŐADÁS 13

    Kupacépítés költsége

    Bináris fában:

    1. szint: 1 pont

    2. szint: 2 pont

    3. szint: 22 pont

    ...

    l-edik szint: > 1 és ≤ 2l−1 pont

    =⇒ n ≥ 1 +∑l−2i=0 2

    i = 2l−1 =⇒ l ≥ 1 + log2 n

  • ALGORITMUSELMÉLET 2. ELŐADÁS 13

    Kupacépítés költsége

    Bináris fában:

    1. szint: 1 pont

    2. szint: 2 pont

    3. szint: 22 pont

    ...

    l-edik szint: > 1 és ≤ 2l−1 pont

    =⇒ n ≥ 1 +∑l−2i=0 2

    i = 2l−1 =⇒ l ≥ 1 + log2 n

    Az i-edik szinten levő v csúcsra felszivárog(v) költsége legfeljebb l− i csereés legfeljebb 2(l− i) összehasonlítás.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 13

    Kupacépítés költsége

    Bináris fában:

    1. szint: 1 pont

    2. szint: 2 pont

    3. szint: 22 pont

    ...

    l-edik szint: > 1 és ≤ 2l−1 pont

    =⇒ n ≥ 1 +∑l−2i=0 2

    i = 2l−1 =⇒ l ≥ 1 + log2 n

    Az i-edik szinten levő v csúcsra felszivárog(v) költsége legfeljebb l− i csereés legfeljebb 2(l− i) összehasonlítás.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 14

    A cserék száma ezért összesen legfeljebb∑li=1(l− i)2i−1.

    j = l− i (azaz i = l− j) helyettesítéssel

  • ALGORITMUSELMÉLET 2. ELŐADÁS 14

    A cserék száma ezért összesen legfeljebb∑li=1(l− i)2i−1.

    j = l− i (azaz i = l− j) helyettesítéssel

    l−1∑j=0

    j2l−j−1 = 2l−1l−1∑j=0

    j/2j < 2l ≤ 2n.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 14

    A cserék száma ezért összesen legfeljebb∑li=1(l− i)2i−1.

    j = l− i (azaz i = l− j) helyettesítéssel

    l−1∑j=0

    j2l−j−1 = 2l−1l−1∑j=0

    j/2j < 2l ≤ 2n.

    1/21/4 1/41/8 1/8 1/8

    ...1

    2l−11

    2l−11

    2l−1 . . .1

    2l−1

    < 1 < 1/2 < 1/4 · · · < 12l−1

  • ALGORITMUSELMÉLET 2. ELŐADÁS 14

    A cserék száma ezért összesen legfeljebb∑li=1(l− i)2i−1.

    j = l− i (azaz i = l− j) helyettesítéssel

    l−1∑j=0

    j2l−j−1 = 2l−1l−1∑j=0

    j/2j < 2l ≤ 2n.

    1/21/4 1/41/8 1/8 1/8

    ...1

    2l−11

    2l−11

    2l−1 . . .1

    2l−1

    < 1 < 1/2 < 1/4 · · · < 12l−1

    Tétel . Kupacépítés költsége: O(n)

  • ALGORITMUSELMÉLET 2. ELŐADÁS 14

    A cserék száma ezért összesen legfeljebb∑li=1(l− i)2i−1.

    j = l− i (azaz i = l− j) helyettesítéssel

    l−1∑j=0

    j2l−j−1 = 2l−1l−1∑j=0

    j/2j < 2l ≤ 2n.

    1/21/4 1/41/8 1/8 1/8

    ...1

    2l−11

    2l−11

    2l−1 . . .1

    2l−1

    < 1 < 1/2 < 1/4 · · · < 12l−1

    Tétel . Kupacépítés költsége: O(n)

  • ALGORITMUSELMÉLET 2. ELŐADÁS 15

    MINTÖR

    A minimális elem az f gyökérben van, ezt töröljük.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 15

    MINTÖR

    A minimális elem az f gyökérben van, ezt töröljük.A f -be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f).

  • ALGORITMUSELMÉLET 2. ELŐADÁS 15

    MINTÖR

    A minimális elem az f gyökérben van, ezt töröljük.A f -be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f).

    59

    4

    2

    8

    6

  • ALGORITMUSELMÉLET 2. ELŐADÁS 15

    MINTÖR

    A minimális elem az f gyökérben van, ezt töröljük.A f -be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f).

    59

    4

    2

    8

    6

    2

    4

    5

    9

    8

    6

  • ALGORITMUSELMÉLET 2. ELŐADÁS 15

    MINTÖR

    A minimális elem az f gyökérben van, ezt töröljük.A f -be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f).

    59

    4

    2

    8

    6

    2

    4

    5

    9

    8

    6

    2

    5

    98

    4

    6

  • ALGORITMUSELMÉLET 2. ELŐADÁS 15

    MINTÖR

    A minimális elem az f gyökérben van, ezt töröljük.A f -be tesszük a fa utolsó szintjének jobb szélső elemét, majd felszivárog(f).

    59

    4

    2

    8

    6

    2

    4

    5

    9

    8

    6

    2

    5

    98

    4

    6

    Költség: O(l) = O(log2 n)

  • ALGORITMUSELMÉLET 2. ELŐADÁS 16

    BESZÚR

    Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet.Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával.

  • ALGORITMUSELMÉLET 2. ELŐADÁS 16

    BESZÚR

    Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet.Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával.

    59

    4

    2

    81

    6

  • ALGORITMUSELMÉLET 2. ELŐADÁS 16

    BESZÚR

    Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet.Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával.

    59

    4

    2

    81

    6

    5 9

    4

    2

    8 6

    1

  • ALGORITMUSELMÉLET 2. ELŐADÁS 16

    BESZÚR

    Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet.Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával.

    59

    4

    2

    81

    6

    5 9

    4

    2

    8 6

    1 59

    4

    86

    1

    2

  • ALGORITMUSELMÉLET 2. ELŐADÁS 16

    BESZÚR

    Új levelet adunk a fához (ügyelve a teljességre), ide tesszük az s elemet.Ezután s-et mozgatjuk felfelé, mindig összehasonlítjuk az apjával.

    59

    4

    2

    81

    6

    5 9

    4

    2

    8 6

    1 59

    4

    86

    1

    2

    Költség: O(l) = O(log2 n)

  • ALGORITMUSELMÉLET 2. ELŐADÁS 17

    A kupacos rendezés

    Először kupacot építünk, utána n darab MINTÖR adja nem csökkenősorrendben az elemeket.[J. W. J. Williams és R. W. Floyd, 1964]

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 17

    A kupacos rendezés

    Először kupacot építünk, utána n darab MINTÖR adja nem csökkenősorrendben az elemeket.[J. W. J. Williams és R. W. Floyd, 1964]

    Költség: O(n) + O(n log2 n) = O(n log2 n)

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 17

    A kupacos rendezés

    Először kupacot építünk, utána n darab MINTÖR adja nem csökkenősorrendben az elemeket.[J. W. J. Williams és R. W. Floyd, 1964]

    Költség: O(n) + O(n log2 n) = O(n log2 n)

    Legjobb ismert rendező algoritmus.Pontos implementációval:2nblog2 nc+ 3n (összehasonlítások száma) és nblog2 nc+ 2, 5n (cserékszáma).

    http://www.cs.bme.hu/~gsala/alg_anims/

  • ALGORITMUSELMÉLET 2. ELŐADÁS 17

    A kupacos rendezés

    Először kupacot építünk, utána n darab MINTÖR adja nem csökkenősorrendben az elemeket.[J. W. J. Williams és R. W. Floyd, 1964]

    Költség: O(n) + O(n log2 n) = O(n log2 n)

    Legjobb ismert rendező algoritmus.Pontos implementációval:2nblog2 nc+ 3n (összehasonlítások száma) és nblog2 nc+ 2, 5n (cserékszáma).

    Java animáció: Kupacos rendezés

    http://www.cs.bme.hu/~gsala/alg_anims/