• Nem Talált Eredményt

Hsnvyp{t|zlstésl{ :5 ls ˝vhkáz

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Hsnvyp{t|zlstésl{ :5 ls ˝vhkáz"

Copied!
100
0
0

Teljes szövegt

(1)

Algoritmuselmélet 3. el ˝ oadás

Katona Gyula Y.

Budapesti M ˝uszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz.

I. B. 137/b

kiskat@cs.bme.hu

2002 Február 18.

(2)

Gyorsrendezés

[C. A. R. Hoare, 1960]

oszd meg és uralkodj: véletlen s elem a tömbb ˝ol =⇒ PARTÍCIÓ(s) =⇒ s-nél kisebb elemek s . . . s s-nél nagyobb elemek

(3)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 1

Gyorsrendezés

[C. A. R. Hoare, 1960]

oszd meg és uralkodj: véletlen s elem a tömbb ˝ol =⇒ PARTÍCIÓ(s) =⇒ s-nél kisebb elemek s . . . s s-nél nagyobb elemek

GYORSREND(A[1 : n])

1. Válasszunk egy véletlen s elemet az A tömbb ˝ol.

2. PARTÍCIÓ(s); az eredmény legyen az A[1 : k], A[k + 1 : l], A[l + 1 : n]

felbontás.

3. GYORSREND(A[1 : k]); GYORSREND(A[l + 1 : n]).

(4)

A PARTÍCIÓ(s) m ˝ uködése

Legyen i := 1, j := n,

(5)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 2

A PARTÍCIÓ(s) m ˝ uködése

Legyen i := 1, j := n,

=⇒ i-t növeljük, amíg A[i] < s teljesül

(6)

A PARTÍCIÓ(s) m ˝ uködése

Legyen i := 1, j := n,

=⇒ i-t növeljük, amíg A[i] < s teljesül

=⇒ j-t csökkentjük, amíg A[j] ≥ s

=⇒

i → ← j

s-nél kisebb elemek s-nél nem kisebb elemek

(7)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 2

A PARTÍCIÓ(s) m ˝ uködése

Legyen i := 1, j := n,

=⇒ i-t növeljük, amíg A[i] < s teljesül

=⇒ j-t csökkentjük, amíg A[j] ≥ s

=⇒

i → ← j

s-nél kisebb elemek s-nél nem kisebb elemek

Ha mindkett ˝o megáll (nem lehet továbblépni), és i < j, akkor A[i] ≥ s és A[j] < s

(8)

A PARTÍCIÓ(s) m ˝ uködése

Legyen i := 1, j := n,

=⇒ i-t növeljük, amíg A[i] < s teljesül

=⇒ j-t csökkentjük, amíg A[j] ≥ s

=⇒

i → ← j

s-nél kisebb elemek s-nél nem kisebb elemek

Ha mindkett ˝o megáll (nem lehet továbblépni), és i < j, akkor A[i] ≥ s és A[j] < s =⇒

Kicseréljük A[i] és A[j] tartalmát =⇒ i := i + 1 és j := j − 1. Ha a két mutató összeér (már nem teljesül i < j), akkor s el ˝ofordulásait a fels ˝o rész elejére mozgatjuk.

(9)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 2

A PARTÍCIÓ(s) m ˝ uködése

Legyen i := 1, j := n,

=⇒ i-t növeljük, amíg A[i] < s teljesül

=⇒ j-t csökkentjük, amíg A[j] ≥ s

=⇒

i → ← j

s-nél kisebb elemek s-nél nem kisebb elemek

Ha mindkett ˝o megáll (nem lehet továbblépni), és i < j, akkor A[i] ≥ s és A[j] < s =⇒

Kicseréljük A[i] és A[j] tartalmát =⇒ i := i + 1 és j := j − 1. Ha a két mutató összeér (már nem teljesül i < j), akkor s el ˝ofordulásait a fels ˝o rész elejére mozgatjuk.

PARTÍCIÓ lépésszáma: O(n)

GYORSREND lépésszáma legrosszabb esetben: O(n2) GYORSREND lépésszáma átlagos esetben:

1, 39n log2 n + O(n) = O(n log n)

(10)

A PARTÍCIÓ(s) m ˝ uködése

Legyen i := 1, j := n,

=⇒ i-t növeljük, amíg A[i] < s teljesül

=⇒ j-t csökkentjük, amíg A[j] ≥ s

=⇒

i → ← j

s-nél kisebb elemek s-nél nem kisebb elemek

Ha mindkett ˝o megáll (nem lehet továbblépni), és i < j, akkor A[i] ≥ s és A[j] < s =⇒

Kicseréljük A[i] és A[j] tartalmát =⇒ i := i + 1 és j := j − 1. Ha a két mutató összeér (már nem teljesül i < j), akkor s el ˝ofordulásait a fels ˝o rész elejére mozgatjuk.

PARTÍCIÓ lépésszáma: O(n)

GYORSREND lépésszáma legrosszabb esetben: O(n2) GYORSREND lépésszáma átlagos esetben:

1, 39n log2 n + O(n) = O(n log n) Java animáció: Gyorsrendezés

(11)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 3

A k -adik elem kiválasztása

Els ˝o ötlet: válasszuk ki a legkisebbet, majd a maradékból a legkisebbet, stb.

=⇒ O(nk) lépés

(12)

A k -adik elem kiválasztása

Els ˝o ötlet: válasszuk ki a legkisebbet, majd a maradékból a legkisebbet, stb.

=⇒ O(nk) lépés

Második ötlet: Rendezzük az elemeket, vegyük ki a k-adikat

=⇒ O(n log2 n) lépés

(13)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 3

A k -adik elem kiválasztása

Els ˝o ötlet: válasszuk ki a legkisebbet, majd a maradékból a legkisebbet, stb.

=⇒ O(nk) lépés

Második ötlet: Rendezzük az elemeket, vegyük ki a k-adikat

=⇒ O(n log2 n) lépés

De van jobb: Tetsz ˝oleges k-ra meg lehet keresni O(n) lépésben.

(14)

Kulcsmanipulációs rendezések

Nem csak összehasonlításokat használ.

Pl. ismerjük az elemek számát, bels ˝o szerkezetét.

(15)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 4

Kulcsmanipulációs rendezések

Nem csak összehasonlításokat használ.

Pl. ismerjük az elemek számát, bels ˝o szerkezetét.

Ládarendezés (binsort)

Tudjuk, hogy A[1 : n] elemei egy m elem ˝u U halmazból kerülnek ki, pl.

∈ {1, . . . , m}

(16)

Kulcsmanipulációs rendezések

Nem csak összehasonlításokat használ.

Pl. ismerjük az elemek számát, bels ˝o szerkezetét.

Ládarendezés (binsort)

Tudjuk, hogy A[1 : n] elemei egy m elem ˝u U halmazból kerülnek ki, pl.

∈ {1, . . . , m}

=⇒ Lefoglalunk egy U elemeivel indexelt B tömböt (m db ládát), el ˝oször mind üres.

(17)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 4

Kulcsmanipulációs rendezések

Nem csak összehasonlításokat használ.

Pl. ismerjük az elemek számát, bels ˝o szerkezetét.

Ládarendezés (binsort)

Tudjuk, hogy A[1 : n] elemei egy m elem ˝u U halmazból kerülnek ki, pl.

∈ {1, . . . , m}

=⇒ Lefoglalunk egy U elemeivel indexelt B tömböt (m db ládát), el ˝oször mind üres.

els ˝o fázis =⇒ végigolvassuk az A-t, és az s = A[i] elemet a B[s] lista végére f ˝uzzük.

(18)

Kulcsmanipulációs rendezések

Nem csak összehasonlításokat használ.

Pl. ismerjük az elemek számát, bels ˝o szerkezetét.

Ládarendezés (binsort)

Tudjuk, hogy A[1 : n] elemei egy m elem ˝u U halmazból kerülnek ki, pl.

∈ {1, . . . , m}

=⇒ Lefoglalunk egy U elemeivel indexelt B tömböt (m db ládát), el ˝oször mind üres.

els ˝o fázis =⇒ végigolvassuk az A-t, és az s = A[i] elemet a B[s] lista végére f ˝uzzük.

Példa: Tegyük fel, hogy a rendezend ˝o A[1 : 7] tömb elemei 0 és 9 közötti egészek:

A : 5 3 1 5 6 9 6

(19)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 4

Kulcsmanipulációs rendezések

Nem csak összehasonlításokat használ.

Pl. ismerjük az elemek számát, bels ˝o szerkezetét.

Ládarendezés (binsort)

Tudjuk, hogy A[1 : n] elemei egy m elem ˝u U halmazból kerülnek ki, pl.

∈ {1, . . . , m}

=⇒ Lefoglalunk egy U elemeivel indexelt B tömböt (m db ládát), el ˝oször mind üres.

els ˝o fázis =⇒ végigolvassuk az A-t, és az s = A[i] elemet a B[s] lista végére f ˝uzzük.

Példa: Tegyük fel, hogy a rendezend ˝o A[1 : 7] tömb elemei 0 és 9 közötti egészek:

A : 5 3 1 5 6 9 6

B : 1 3 5 5 6 6 9

(20)

második fázis =⇒ elejét ˝ol a végéig növ ˝o sorrendben végigmegyünk B-n, és a B[i] listák tartalmát visszaírjuk A-ba.

(21)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 5

második fázis =⇒ elejét ˝ol a végéig növ ˝o sorrendben végigmegyünk B-n, és a B[i] listák tartalmát visszaírjuk A-ba.

B : 1 3 5 5 6 6 9

A : 1 3 5 5 6 6 9

(22)

második fázis =⇒ elejét ˝ol a végéig növ ˝o sorrendben végigmegyünk B-n, és a B[i] listák tartalmát visszaírjuk A-ba.

B : 1 3 5 5 6 6 9

A : 1 3 5 5 6 6 9

Lépésszám: B létrehozása O(m), els ˝o fázis O(n), második fázis O(n + m), összesen O(n + m).

(23)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 5

második fázis =⇒ elejét ˝ol a végéig növ ˝o sorrendben végigmegyünk B-n, és a B[i] listák tartalmát visszaírjuk A-ba.

B : 1 3 5 5 6 6 9

A : 1 3 5 5 6 6 9

Lépésszám: B létrehozása O(m), els ˝o fázis O(n), második fázis O(n + m), összesen O(n + m).

Ez gyorsabb, mint az általános alsó korlát, ha pl. m ≤ cn.

Java animáció: Láda rendezés

(24)

Radix rendezés

A kulcsok összetettek, több komponensb ˝ol állnak, t1 . . . tk alakú szavak, ahol a ti komponens az Li rendezett típusból való, a rendezés lexikografikus.

(25)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 6

Radix rendezés

A kulcsok összetettek, több komponensb ˝ol állnak, t1 . . . tk alakú szavak, ahol a ti komponens az Li rendezett típusból való, a rendezés lexikografikus.

Példa: Legyen (U, <) a huszadik századi dátumok összessége az id ˝orendnek megfelel ˝o rendezéssel.

(26)

Radix rendezés

A kulcsok összetettek, több komponensb ˝ol állnak, t1 . . . tk alakú szavak, ahol a ti komponens az Li rendezett típusból való, a rendezés lexikografikus.

Példa: Legyen (U, <) a huszadik századi dátumok összessége az id ˝orendnek megfelel ˝o rendezéssel.

L1 = {1900, 1901, . . . , 1999}, s1 = 100.

(27)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 6

Radix rendezés

A kulcsok összetettek, több komponensb ˝ol állnak, t1 . . . tk alakú szavak, ahol a ti komponens az Li rendezett típusból való, a rendezés lexikografikus.

Példa: Legyen (U, <) a huszadik századi dátumok összessége az id ˝orendnek megfelel ˝o rendezéssel.

L1 = {1900, 1901, . . . , 1999}, s1 = 100.

L2 = {január, február,. . ., december}, s2 = 12.

(28)

Radix rendezés

A kulcsok összetettek, több komponensb ˝ol állnak, t1 . . . tk alakú szavak, ahol a ti komponens az Li rendezett típusból való, a rendezés lexikografikus.

Példa: Legyen (U, <) a huszadik századi dátumok összessége az id ˝orendnek megfelel ˝o rendezéssel.

L1 = {1900, 1901, . . . , 1999}, s1 = 100.

L2 = {január, február,. . ., december}, s2 = 12.

L3 = {1, 2, . . . , 31}, s3 = 31.

(29)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 6

Radix rendezés

A kulcsok összetettek, több komponensb ˝ol állnak, t1 . . . tk alakú szavak, ahol a ti komponens az Li rendezett típusból való, a rendezés lexikografikus.

Példa: Legyen (U, <) a huszadik századi dátumok összessége az id ˝orendnek megfelel ˝o rendezéssel.

L1 = {1900, 1901, . . . , 1999}, s1 = 100.

L2 = {január, február,. . ., december}, s2 = 12.

L3 = {1, 2, . . . , 31}, s3 = 31.

A dátumok rendezése éppen az Li típusokból származó lexikografikus rendezés lesz.

(30)

• rendezzük a sorozatot az utolsó, a k-adik komponensek szerint ládarendezéssel

• a kapottat rendezzük a k − 1-edik komponensek szerint ládarendezéssel

• stb.

(31)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 7

• rendezzük a sorozatot az utolsó, a k-adik komponensek szerint ládarendezéssel

• a kapottat rendezzük a k − 1-edik komponensek szerint ládarendezéssel

• stb.

Fontos, hogy a ládarendezésnél, az elemeket a ládában mindig a lista végére tettük. Így ha két azonos kulcsú elem közül az egyik megel ˝ozi a másikat,

akkor a rendezés után sem változik a sorrendjük.

(32)

• rendezzük a sorozatot az utolsó, a k-adik komponensek szerint ládarendezéssel

• a kapottat rendezzük a k − 1-edik komponensek szerint ládarendezéssel

• stb.

Fontos, hogy a ládarendezésnél, az elemeket a ládában mindig a lista végére tettük. Így ha két azonos kulcsú elem közül az egyik megel ˝ozi a másikat,

akkor a rendezés után sem változik a sorrendjük.

=⇒ konzervatív rendezés

(33)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 8

Miért m ˝ uködik a radix jól?

Ha X < Y , az els ˝o i − 1 tag megegyezik, de xi < yi, akkor az i-edik komponens rendezésekor X el ˝ore kerül.

(34)

Miért m ˝ uködik a radix jól?

Ha X < Y , az els ˝o i − 1 tag megegyezik, de xi < yi, akkor az i-edik komponens rendezésekor X el ˝ore kerül.

konzervatív rendezés =⇒ kés ˝obb már nem változik a sorrendjük.

(35)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 8

Miért m ˝ uködik a radix jól?

Ha X < Y , az els ˝o i − 1 tag megegyezik, de xi < yi, akkor az i-edik komponens rendezésekor X el ˝ore kerül.

konzervatív rendezés =⇒ kés ˝obb már nem változik a sorrendjük.

Példa:

1969. jan. 18. 1969. jan. 1. 1955. dec. 18. 1955. jan. 18. 1918. dec. 18.

(36)

Miért m ˝ uködik a radix jól?

Ha X < Y , az els ˝o i − 1 tag megegyezik, de xi < yi, akkor az i-edik komponens rendezésekor X el ˝ore kerül.

konzervatív rendezés =⇒ kés ˝obb már nem változik a sorrendjük.

Példa:

1969. jan. 18. 1969. jan. 1. 1955. dec. 18. 1955. jan. 18. 1918. dec. 18.

1. 1969. jan. 1. 1969. jan. 18. 1955. dec. 18. 1955. jan. 18. 1918. dec. 18.

(37)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 8

Miért m ˝ uködik a radix jól?

Ha X < Y , az els ˝o i − 1 tag megegyezik, de xi < yi, akkor az i-edik komponens rendezésekor X el ˝ore kerül.

konzervatív rendezés =⇒ kés ˝obb már nem változik a sorrendjük.

Példa:

1969. jan. 18. 1969. jan. 1. 1955. dec. 18. 1955. jan. 18. 1918. dec. 18.

1. 1969. jan. 1. 1969. jan. 18. 1955. dec. 18. 1955. jan. 18. 1918. dec. 18.

2. 1969. jan. 1. 1969. jan. 18. 1955. jan. 18. 1955. dec. 18. 1918. dec. 18.

(38)

Miért m ˝ uködik a radix jól?

Ha X < Y , az els ˝o i − 1 tag megegyezik, de xi < yi, akkor az i-edik komponens rendezésekor X el ˝ore kerül.

konzervatív rendezés =⇒ kés ˝obb már nem változik a sorrendjük.

Példa:

1969. jan. 18. 1969. jan. 1. 1955. dec. 18. 1955. jan. 18. 1918. dec. 18.

1. 1969. jan. 1. 1969. jan. 18. 1955. dec. 18. 1955. jan. 18. 1918. dec. 18.

2. 1969. jan. 1. 1969. jan. 18. 1955. jan. 18. 1955. dec. 18. 1918. dec. 18.

3. 1918. dec. 18. 1955. jan. 18. 1955. dec. 18. 1969. jan. 1. 1969. jan. 18.

(39)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 9

Lépésszám: k ládarendezés összköltsége: O(kn + Pk

i=1 si)

(40)

Lépésszám: k ládarendezés összköltsége: O(kn + Pk

i=1 si)

Ez lehet gyorsabb az általános korlátnál

• k = állandó és si ≤ cn =⇒ O(kn + Pk

i=1 cn) = O(k(c + 1)n) = O(n).

pl. az [1, nk − 1] intervallumból való egészek rendezése

(41)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 9

Lépésszám: k ládarendezés összköltsége: O(kn + Pk

i=1 si)

Ez lehet gyorsabb az általános korlátnál

• k = állandó és si ≤ cn =⇒ O(kn + Pk

i=1 cn) = O(k(c + 1)n) = O(n).

pl. az [1, nk − 1] intervallumból való egészek rendezése

• k = log n, si = 2 =⇒ O(n log n + 2 log n) = O(n log n).

(42)

Lépésszám: k ládarendezés összköltsége: O(kn + Pk

i=1 si)

Ez lehet gyorsabb az általános korlátnál

• k = állandó és si ≤ cn =⇒ O(kn + Pk

i=1 cn) = O(k(c + 1)n) = O(n).

pl. az [1, nk − 1] intervallumból való egészek rendezése

• k = log n, si = 2 =⇒ O(n log n + 2 log n) = O(n log n).

Java animáció: Radix rendezés

(43)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 10

A Batcher-féle páros-páratlan összefésülés

Párhuzamos algoritmus, az összefésüléses rendezés egy változata.

(44)

A Batcher-féle páros-páratlan összefésülés

Párhuzamos algoritmus, az összefésüléses rendezés egy változata.

Az összefésülés lépése különböz ˝o, a többi rész ugyanaz.

(45)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 10

A Batcher-féle páros-páratlan összefésülés

Párhuzamos algoritmus, az összefésüléses rendezés egy változata.

Az összefésülés lépése különböz ˝o, a többi rész ugyanaz.

A = a1 < . . . < al és B = b1 < . . . < bm összefésülése

=⇒ C = c1 < . . . < cl+m

(46)

A Batcher-féle páros-páratlan összefésülés

Párhuzamos algoritmus, az összefésüléses rendezés egy változata.

Az összefésülés lépése különböz ˝o, a többi rész ugyanaz.

A = a1 < . . . < al és B = b1 < . . . < bm összefésülése

=⇒ C = c1 < . . . < cl+m

1. brigád: a1 < a3 < a5 < . . . és b2 < b4 < b6 < . . .

=⇒ u1 < u2 < u3 < . . .

2. brigád: a2 < a4 < a6 < . . . és b1 < b3 < b5 < . . .

=⇒ v1 < v2 < v3 < . . .

(47)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 10

A Batcher-féle páros-páratlan összefésülés

Párhuzamos algoritmus, az összefésüléses rendezés egy változata.

Az összefésülés lépése különböz ˝o, a többi rész ugyanaz.

A = a1 < . . . < al és B = b1 < . . . < bm összefésülése

=⇒ C = c1 < . . . < cl+m

1. brigád: a1 < a3 < a5 < . . . és b2 < b4 < b6 < . . .

=⇒ u1 < u2 < u3 < . . .

2. brigád: a2 < a4 < a6 < . . . és b1 < b3 < b5 < . . .

=⇒ v1 < v2 < v3 < . . .

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

(48)

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}.

(49)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 11

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

(50)

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

|{a1, . . . , as} ∩ U| = ds2e és |{b1, . . . , b2ks} ∩ U| = b2k2sc

(51)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 11

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

|{a1, . . . , as} ∩ U| = ds2e és |{b1, . . . , b2ks} ∩ U| = b2k2sc

|{a1, . . . , as} ∩ V| = bs2c és |{b1, . . . , b2ks} ∩ V| = d2k2se

(52)

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

|{a1, . . . , as} ∩ U| = ds2e és |{b1, . . . , b2ks} ∩ U| = b2k2sc

|{a1, . . . , as} ∩ V| = bs2c és |{b1, . . . , b2ks} ∩ V| = d2k2se

Mivel ds/2e + b(2k − s)/2c = bs/2c + d(2k − s)/2e beláttuk az els ˝o állítást.

(53)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 11

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

|{a1, . . . , as} ∩ U| = ds2e és |{b1, . . . , b2ks} ∩ U| = b2k2sc

|{a1, . . . , as} ∩ V| = bs2c és |{b1, . . . , b2ks} ∩ V| = d2k2se

Mivel ds/2e + b(2k − s)/2c = bs/2c + d(2k − s)/2e beláttuk az els ˝o állítást.

=⇒ {c2i1, c2i} = {ui, vi}

(54)

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

|{a1, . . . , as} ∩ U| = ds2e és |{b1, . . . , b2ks} ∩ U| = b2k2sc

|{a1, . . . , as} ∩ V| = bs2c és |{b1, . . . , b2ks} ∩ V| = d2k2se

Mivel ds/2e + b(2k − s)/2c = bs/2c + d(2k − s)/2e beláttuk az els ˝o állítást.

=⇒ {c2i1, c2i} = {ui, vi}

A tétel miatt U és V már egy párhuzamos lépésben összefésülhet ˝o.

(55)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 11

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

|{a1, . . . , as} ∩ U| = ds2e és |{b1, . . . , b2ks} ∩ U| = b2k2sc

|{a1, . . . , as} ∩ V| = bs2c és |{b1, . . . , b2ks} ∩ V| = d2k2se

Mivel ds/2e + b(2k − s)/2c = bs/2c + d(2k − s)/2e beláttuk az els ˝o állítást.

=⇒ {c2i1, c2i} = {ui, vi}

A tétel miatt U és V már egy párhuzamos lépésben összefésülhet ˝o.

A rendezés:

MSORT(A[1 : n]) :=

PM(MSORT(A[1 : dn/2e]), MSORT(A[dn/2e + 1 : n])), ahol PM a fenti párhuzamos összefésülés.

(56)

Tétel. c2i1 = min{ui, vi} és c2i = max{ui, vi} (1 ≤ i ≤ (l + m)/2).

Bizonyítás: Belátjuk, hogy

C2k := {c1, . . . , c2k} = {u1, . . . , uk} ∪ {v1, . . . , vk}. Mivel C a növekv ˝o A és B összefésülése

=⇒ C2k = {a1, . . . , as} ∪ {b1, . . . , b2ks}.

|{a1, . . . , as} ∩ U| = ds2e és |{b1, . . . , b2ks} ∩ U| = b2k2sc

|{a1, . . . , as} ∩ V| = bs2c és |{b1, . . . , b2ks} ∩ V| = d2k2se

Mivel ds/2e + b(2k − s)/2c = bs/2c + d(2k − s)/2e beláttuk az els ˝o állítást.

=⇒ {c2i1, c2i} = {ui, vi}

A tétel miatt U és V már egy párhuzamos lépésben összefésülhet ˝o.

A rendezés:

MSORT(A[1 : n]) :=

PM(MSORT(A[1 : dn/2e]), MSORT(A[dn/2e + 1 : n])), ahol PM a fenti párhuzamos összefésülés.

Párhuzamos lépésszám: O(log2n)

(57)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 12

Keres ˝ ofák

Tároljuk az U rendezett halmaz elemeit, hogy BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) hatékonyak legyenek.

(58)

Keres ˝ ofák

Tároljuk az U rendezett halmaz elemeit, hogy BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) hatékonyak legyenek.

Bináris fa bejárása

teljes fa (új def.) =⇒ az alsó szint is tele van =⇒ l szint ˝u, teljes fának 2l − 1 csúcsa van.

(59)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 12

Keres ˝ ofák

Tároljuk az U rendezett halmaz elemeit, hogy BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) hatékonyak legyenek.

Bináris fa bejárása

teljes fa (új def.) =⇒ az alsó szint is tele van =⇒ l szint ˝u, teljes fának 2l − 1 csúcsa van.

Fa csúcsai → elem(x), bal(x), jobb(x) esetleg apa(x) és reszf a(x)

(60)

Keres ˝ ofák

Tároljuk az U rendezett halmaz elemeit, hogy BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) hatékonyak legyenek.

Bináris fa bejárása

teljes fa (új def.) =⇒ az alsó szint is tele van =⇒ l szint ˝u, teljes fának 2l − 1 csúcsa van.

Fa csúcsai → elem(x), bal(x), jobb(x) esetleg apa(x) és reszf a(x)

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

bal(jobb(x)) = y, apa(apa(y)) = x, elem(bal(x)) = ∗, reszf a(x) = 7.

(61)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 13

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

(62)

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: +

(63)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 13

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85

(64)

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96

(65)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 13

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96 INORDER: 8 ∗ 5

(66)

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96 INORDER: 8 ∗ 5 +

(67)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 13

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96 INORDER: 8 ∗ 5 + 9 − 6

(68)

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96 INORDER: 8 ∗ 5 + 9 − 6 POSTORDER: 85 ∗

(69)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 13

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96 INORDER: 8 ∗ 5 + 9 − 6 POSTORDER: 85 ∗ 96 −

(70)

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96 INORDER: 8 ∗ 5 + 9 − 6 POSTORDER: 85 ∗ 96 − +

(71)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 13

PREORDER, INORDER, POSTORDER

pre(x) in(x) post(x)

begin begin begin

látogat(x); in(bal(x)); post(bal(x));

pre(bal(x)); látogat(x); post(jobb(x));

pre(jobb(x)) in(jobb(x)) látogat(x)

end end end

C C C C C C

C C C C C C T T T T T T

+

∗ −

6 5 9

8

ha x a gyökér, y pedig a 9-es csúcs, akkor

PREORDER: + ∗ 85 − 96 INORDER: 8 ∗ 5 + 9 − 6 POSTORDER: 85 ∗ 96 − + Lépésszám: O(n)

(72)

Bináris keres ˝ ofa

Definíció (Keres ˝ofa-tulajdonság). Tetsz ˝oleges x csúcsra és az x baloldali részfájában lev ˝o y csúcsra igaz, hogy elem(y) ≤ elem(x). Hasonlóan, ha z egy csúcs az x jobb részfájából, akkor elem(x) ≤ elem(z).

(73)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 14

Bináris keres ˝ ofa

Definíció (Keres ˝ofa-tulajdonság). Tetsz ˝oleges x csúcsra és az x baloldali részfájában lev ˝o y csúcsra igaz, hogy elem(y) ≤ elem(x). Hasonlóan, ha z egy csúcs az x jobb részfájából, akkor elem(x) ≤ elem(z).

4 2

13 1

6

9 8

10

(74)

Bináris keres ˝ ofa

Definíció (Keres ˝ofa-tulajdonság). Tetsz ˝oleges x csúcsra és az x baloldali részfájában lev ˝o y csúcsra igaz, hogy elem(y) ≤ elem(x). Hasonlóan, ha z egy csúcs az x jobb részfájából, akkor elem(x) ≤ elem(z).

4 2

13 1

6

9 8

10

Házi feladat: Igazoljuk, hogy egy bináris keres ˝ofa elemeit a fa inorder bejárása növekv ˝o sorrendben látogatja meg.

(75)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 14

Bináris keres ˝ ofa

Definíció (Keres ˝ofa-tulajdonság). Tetsz ˝oleges x csúcsra és az x baloldali részfájában lev ˝o y csúcsra igaz, hogy elem(y) ≤ elem(x). Hasonlóan, ha z egy csúcs az x jobb részfájából, akkor elem(x) ≤ elem(z).

4 2

13 1

6

9 8

10

Házi feladat: Igazoljuk, hogy egy bináris keres ˝ofa elemeit a fa inorder bejárása növekv ˝o sorrendben látogatja meg.

Egy kényelmes megállapodás: a továbbiakban feltesszük, hogy nincsenek ismétl ˝od ˝o elemek a keres ˝ofában.

(76)

Naiv algoritmusok

2

4 6

1

8

9

KERES(4, S)

KERES(s,S): Összehasonlítjuk s-et S gyökerével s0-vel.

(77)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 15

Naiv algoritmusok

2

4 6

1

8

9

KERES(4, S)

KERES(s,S): Összehasonlítjuk s-et S gyökerével s0-vel.

• Ha s = s0, akkor megtaláltuk.

(78)

Naiv algoritmusok

2

4 6

1

8

9

KERES(4, S)

KERES(s,S): Összehasonlítjuk s-et S gyökerével s0-vel.

• Ha s = s0, akkor megtaláltuk.

• Ha s < s0, akkor balra megyünk tovább.

(79)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 15

Naiv algoritmusok

2

4 6

1

8

9

KERES(4, S)

KERES(s,S): Összehasonlítjuk s-et S gyökerével s0-vel.

• Ha s = s0, akkor megtaláltuk.

• Ha s < s0, akkor balra megyünk tovább.

• Ha s > s0, akkor jobbra megyünk.

(80)

Naiv algoritmusok

2

4 6

1

8

9

KERES(4, S)

KERES(s,S): Összehasonlítjuk s-et S gyökerével s0-vel.

• Ha s = s0, akkor megtaláltuk.

• Ha s < s0, akkor balra megyünk tovább.

• Ha s > s0, akkor jobbra megyünk.

Ugyanezt az utat járjuk be a KERES(5, S) kapcsán, de azt nem találjuk meg.

(81)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 15

Naiv algoritmusok

2

4 6

1

8

9

KERES(4, S)

KERES(s,S): Összehasonlítjuk s-et S gyökerével s0-vel.

• Ha s = s0, akkor megtaláltuk.

• Ha s < s0, akkor balra megyünk tovább.

• Ha s > s0, akkor jobbra megyünk.

Ugyanezt az utat járjuk be a KERES(5, S) kapcsán, de azt nem találjuk meg.

Lépésszám: O(l), ahol l a fa mélysége MIN: mindig balra lépünk, amig lehet

MAX: mindig jobbra lépünk, amig lehet Lépésszám: O(l)

(82)

Naiv algoritmusok

2

4 6

1

8

9

KERES(4, S)

KERES(s,S): Összehasonlítjuk s-et S gyökerével s0-vel.

• Ha s = s0, akkor megtaláltuk.

• Ha s < s0, akkor balra megyünk tovább.

• Ha s > s0, akkor jobbra megyünk.

Ugyanezt az utat járjuk be a KERES(5, S) kapcsán, de azt nem találjuk meg.

Lépésszám: O(l), ahol l a fa mélysége MIN: mindig balra lépünk, amig lehet

MAX: mindig jobbra lépünk, amig lehet Lépésszám: O(l)

TÓLIG(a, b, S): KERES(a, S) =⇒ INORDER a-tól b-ig Lépésszám: O(n)

(83)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 16

Naiv BESZÚR

BESZÚR(s, S): KERES(s, S)-sel megkeressük hova kerülne és új levelet adunk hozzá, pl. BESZÚR(3, S):

(84)

Naiv BESZÚR

BESZÚR(s, S): KERES(s, S)-sel megkeressük hova kerülne és új levelet adunk hozzá, pl. BESZÚR(3, S):

4 2

6

1

8 9

=⇒

(85)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 16

Naiv BESZÚR

BESZÚR(s, S): KERES(s, S)-sel megkeressük hova kerülne és új levelet adunk hozzá, pl. BESZÚR(3, S):

4 2

6

1

8 9

=⇒

4 2

3 1

6

8

9

(86)

Naiv BESZÚR

BESZÚR(s, S): KERES(s, S)-sel megkeressük hova kerülne és új levelet adunk hozzá, pl. BESZÚR(3, S):

4 2

6

1

8 9

=⇒

4 2

3 1

6

8 9

Lépésszám: O(l)

(87)

ALGORITMUSELMÉLET 3. EL ˝OADÁS 17

Naiv TÖRÖL

• TÖRÖL(s, S): Ha s levél, akkor trivi, pl. TÖRÖL(3, S):

4 2

3 1

6 8

9 =⇒

(88)

Naiv TÖRÖL

• TÖRÖL(s, S): Ha s levél, akkor trivi, pl. TÖRÖL(3, S):

4 2

3 1

6 8

9 =⇒ 2

1 4

6 8

9

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Legyen szabad reménylenünk (Waldapfel bizonyára velem tart), hogy ez a felfogás meg fog változni, De nagyon szükségesnek tar- tanám ehhez, hogy az Altalános Utasítások, melyhez

tanévben az általános iskolai tanulók száma 741,5 ezer fő, az érintett korosztály fogyásából adódóan 3800 fővel kevesebb, mint egy évvel korábban.. Az

Az akciókutatás korai időszakában megindult társadalmi tanuláshoz képest a szervezeti tanulás lényege, hogy a szervezet tagjainak olyan társas tanulása zajlik, ami nem

Az olyan tartalmak, amelyek ugyan számos vita tárgyát képezik, de a multikulturális pedagógia alapvető alkotóelemei, mint például a kölcsönösség, az interakció, a

Nagy József, Józsa Krisztián, Vidákovich Tibor és Fazekasné Fenyvesi Margit (2004): Az elemi alapkész- ségek fejlődése 4–8 éves életkorban. Mozaik

Az n pontú AVL-fából való naiv törlés után legfeljebb 1.44 log 2 n (szimpla vagy dupla) forgatás helyreállítja az AVL-tulajdonságot.. Nem bizonyítjuk, a módszer hasonló, de

• Ez az átírás azért is jó, mert egy kapcsolatot majd úgyis valahogy így tudunk kezelni a fizikai megvalósításban: a kapcsolat egy eleme egy három mutatóból álló tömb

Így ha két azonos kulcsú elem közül az egyik megel ˝ozi a másikat,.. akkor a rendezés után sem változik