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
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/Top Related