• Nie Znaleziono Wyników

2 Dowód, »e n − 1 porówna« jest potrzebne do znajdowania minimum

N/A
N/A
Protected

Academic year: 2021

Share "2 Dowód, »e n − 1 porówna« jest potrzebne do znajdowania minimum"

Copied!
5
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 2. ¢wiczenia

2009-10-13

1 Plan zaj¦¢

• Dolna granica dla wyszukiwania minimum spo±ród n-elementów przez po- równania (argument grafowy).

• Pokaza¢, »e w pesymistycznym przypadku min musi by¢ porównywane co najmniej dlog ne razy.

• Wywnioskowa¢ st¡d, »e policzenie drugiego co do wielko±ci wymaga co najmniej n − 1 + dlog ne − 1 porówna«.

• Zaproponowa¢ algorytm na drugi co do wielko±ci w czasie z 4 i ugólni¢ go na k-ty co wielko±ci (algorytm Hadiana-Sobela).

• ShellSort: k-sortowanie zachowuje h-posortowanie, algorytm Pratta z kro- kami postaci 2p3q

• MergeSort w miejscu dla ci¡gów dªugo±ci p(n) i n − p(n)

• sortowanie ci¡gów 0-1 w miejscu i stabilnie

• optymalne sortowanie 5 elementów w modelu drzew decyzyjnych

• sortowanie permutacji (¢wiczenie ilustruj¡ce rol¦ modelu oblicze«)

2 Dowód, »e n − 1 porówna« jest potrzebne do znajdowania minimum

We¹my algorytm, A, powiedzmy, za ka»dym razem, gdy porównuje on dwa elementy, to ª¡czymy je kraw¦dzi¡. Je±li A u»yª mniej ni» n − 1 porówna«, to istniej¡ dwa elementy, które nie s¡ ze sob¡ porównywalne.

3 Optymalny algorytm do znajdowania min i max jednocze±nie

Algorytm dziel i rz¡d¹. (3dn/2e − 2 porówna«)

(2)

• for i = 1 to dn/2e do Q.push(pair(min(A[2i − 1], A[2i]), max(A[2i − 1], A[2i])))

• while |Q| > 1 do

 (a1, b1) = Q.P OP,

 (a2, b2) = Q.P OP,

 Q.P USH(min(a1, a2), max(b1, b2))

• return Q.P OP

Jest to równie» optymalna liczba porówna«. (Knuth, Tom 3, ¢wiczenie 16, strona 231). Niech (a, b, c, d) oznacza stan oblicze« algorytmu,

• a liczba elementów, które nie byªy jeszcze porównywane,

• b  liczba elementów, które byªy porównywane i nie przegraªy »adnego porównania,

• c liczba elementów, które byªy porównywane i przegraªy wszystkie po- równania,

• d  liczba elementów, które wygraªy co najmniej jedno porównanie, i przegraªy co najmniej jedno porównanie.

Dowolny algorytm zaczyna obliczenia w stanie (n, 0, 0, 0) i powinien ko«czy¢ w (0, 1, 1, n − 2)(je±li ko«czy w innym to ªatwo poda¢ kontprzykªad).

Konstrukcja przeciwnika dla algorytmu. Dla zapytania (x, y) postaci:

• (a1, a2) odpowiada a1< a2, zmiana (−2, +1, +1, 0)

• (b1, b2) odpowiada b1< b2, zmiana (0, −1, 0, +1)

• (c1, c2) odpowiada c1< c2, zmiana (0, 0, −1, +1)

• (a1, b1) odpowiada a1< b1, zmiana (−1, 0, +1, 0)

• (a1, c1) odpowiada a1> c1, zmiana (−1, +1, 0, 0)

• (a1, d1) odpowiada a1> d1, zmiana (−1, +1, 0, 0)

• (d1, d2) odpowiada d1< d2, zmiana (0, 0, 0, 0)

• (b1, c1) odpowiada b1> c1, zmiana (0, 0, 0, 0)

• (b1, d1) odpowiada b1> d1, zmiana (0, 0, 0, 0)

• (c1, d1) odpowiada c1< d1, zmiana (0, 0, 0, 0)

Dowolny algorytm musi zada¢ co najmniej dn/2e zapyta« typu (a, ∗), aby zmniejszy¢ licznik a o n, a co za tym idzie liczniki b i c zostan¡ sumarycznie zwi¦kszone o n. ›eby zmniejszy¢ liczniki b i c o n−2 nale»y wykona¢ co najmniej n − 2zapyta« typu (b|c, ∗).

(3)

4 Optymalne znajdowanie drugiego co wielko±ci elementu

• budujemy drzewo turniejowe (porównujemy s¡siednie elementy, dalej prze- chodzi wygrany)  ten krok zabiera n − 1 porówna«,

• niech S zbiór elementów które przegraªy z liderem, |S| = dlog ne

• wybierz lidera w±ród elementów S  ten krok zabiera |S|−1 = dlog ne−1 porówna«.

• razem n + dlog ne − 2

Dowód, »e algorytm jest optymalny. Knuth, tom III, 5.3.3. strona 221.

5 Optymalne sortowanie 5ciu elementów

Niech A = (a, b, c, d, e).

• compare(a, b), (niech a < b)

• compare(c, d), (niech c < d)

• compare(a, c), (niech a < c)

• teraz wkªadamy, e pomi¦dzy a, c, d,

if (e > c) then compare(e, a) else compare(e, d)

• mo»emy otrzyma¢ jeden z nast¦puj¡cych posetów:

ka»dy z nich mo»na posortowa¢ u»ywaj¡c 2 porówna«.

6 Sortowanie metod¡ Shella, dowody

Lemat 1 Niech m, n, r b¦d¡ nieujemnymi liczba caªkowitymi i niech (x1, . . . , xm+r) oraz (y1, . . . , yn+r)b¦d¡ dowolnymi ci¡gami liczbowymi takimi, »e yi≤ xm+idla 1 ≤ i ≤ r. Je±li elementy x oraz y posortujemy niezale»nie tak, »e x1 ≤ . . . ≤ xm+r oraz y1≤ . . . ≤ yn+r to nadal b¦dziemy mieli yi≤ xm+i dla 1 ≤ i ≤ r.

Po posortowaniu element xm+ijest wi¦kszy b¡d¹ równy od co najmniej m+i elementów z x, w±ród nich jest co najmniej i elementów które przed sortowaniem byªy na pozycjach m, . . . , m + r, ka»dy z tych elementów ma w±ród y element od którego jest wi¦kszy, st¡d xm+ijest wi¦kszy b¡d¹ równy od i najmniejszych elementów y.

(4)

Lemat 2 Je±li tablica jest h posortowana i k posortujemy, to nadal b¦dzie h posortowana.

Niech ai i ai+h elementy które po sortowaniu nie s¡ h posortowane. Niech Y ci¡g zawieraj¡cy ai, ai+k, ai+2k, . . .. Niech X ci¡g zawieraj¡cy ai+h, ai+h+k, ai+h+2k, . . .. Po k posortowaniu ci¡gi Y i X s¡ uporz¡dkowane, z poprzedniego

lematu mamy jednak, »e ai≤ ai+h sprzeczno±¢. qued

Lemat 3 Liczba porówna« wymagana przy h posortowaniu tablicy rozmiaru n wynosi O(n2/h).

Mamy h ci¡gów, ka»dy o dªugo±ci n/h  st¡d caªkowity czas wynosi h ·

n2/h2= n2/h. qued

Lemat 4 Liczba porówna« wymagana przy hiposortowaniu tablicy rozmiaru n, która jest hi+1 i hi+2 posortowana wynosi O(nhi+1hi+2/hi)(przy zaªo»eniu, »e hi+1 i hi+2 s¡ wzgl¦dnie pierwsze)

TODOTrzeba pokaza¢, »e je±li ci¡g jest hi+1 i hi+2 posortowany, to je±li k ≥

hi+1hi+2, to ai≤ ai+k. qued

Lemat 5 Dla ci¡gu h = {2i− 1 : i ∈ N } algorytm ShellSort ma zªo»ono±¢

O(n√ n).

(Knuth, tom III, strona 95)

Niech Bi koszt itej fazy, t = dlog ne. Dla pierwszy t/2 przebiegów h ≥ sqrtn, poniewa» koszt jednej fazy jest ograniczona przez O(n2/h) st¡d suma- ryczny koszt jest rz¦du O(n1.5). Dla pozostaªych przebiegów mo»emy skorzysta¢

z poprzedniego lematu, koszt pojedynczej fazy jest równy Bi = O(nhi+2hi+1/hi),

wi¦c sumaryczny koszt tych faz jest równie» rz¦du O(n1.5). qued

Lemat 6 Dla ci¡gu h = {2i3j : i, j ∈ N } algorytm ShellSort ma zªo»ono±¢

O(n log2n).

Wszystkich faz algorytmu jest O((log n)2). Trzeba pokaza¢, »e ka»da z nich zajmuje O(n) czasu. Obserwacja  je±li ci¡g jest 2 i 3 uporz¡dkowany, to jego 1posortowanie wymaga O(n) czasu. Analogicznie je±li ci¡g jest 2i i 3i posorto-

wany to jego i posortowanie wymaga O(n). qued

(5)

7 Algorytm generowania kroków postaci 2

p

3

q

on- line

Algorytm 1: GenSequence() h = emptyHeap(); seq = ∅ ;

1

h.add(1); ;

2

while true do

3

x = h.extractM in();

4

seq.add(x);

5

h.add(3 · x);

6

if h mod 3 6= 0 then

7

h.add(2 · x);

8

8 Sortowanie ci¡gu 01

Stabilne sortowanie tablicy 0/1 w miejscu.

Rozwi¡zanie O(n log n):

Algorytm 2: Sort01()

/* merge(l, m, r)  scala dwa ci¡gi (l..m − 1) i (m..r) postaci

01 w jeden ciag (l, r) */

for i = 0 to dlog ne do

1

b = 2i; j = 1;

2 while j < n do

3

merge(j, j + b, j + 2 · b − 1);

4

j = j + 2 · b;

5

9 Scalanie w miejscu dla ci¡gów dªugo±ci √ n i n − √

n

Algorytm 3: Merge(A)

Dana jest tablica A zawieraj¡ca dwa uporz¡dkowane rosn¡co ci¡gi:

1

1..n −√

ni n −√

n + 1..n. ;

Posortuj (u»ywaj¡c alg. insertion sort) ci¡g n − 2√

n + 1..n;

2 Scal ci¡g 1..n − 2√

ni n − 2√

n + 1..n −√

nu»ywaj¡c obszaru

3

n −√

n + 1..njako bufor ;

Posortuj (u»ywaj¡c alg. insertion sort) ci¡g n −√

n + 1..n;

4

Cytaty

Powiązane dokumenty

4 Optymalny algorytm do znajdowania min i max jednocześnie. Algorytm dziel

Posortuj

[r]

Kolosalna stołówka rwlect

Copyright © 2019 Pixel Graphic™ | All Rights Reserved | Designed by Pixel Graphic™.. Liczba osiem symbolizuje siły materialne, służące człowiekowi w zrealizowaniu jego

Dostawy materiałów eksploatacyjnych przeznaczonych do urządzeń drukujących, do siedziby Centrum Pomocy Społecznej Dzielnicy Śródmieście im. Andrzeja

Przebieg wizytacji, mimo wyżej wspomnianych odmienności dotyczących kwestii zwierzch- nictwa nad klasztorami, nie różnił się od tych, jakie przeprowadzano w zgromadzeniach w innych

Zawiera dane dotyczące posiadacza: imię (imiona), nazwisko, obywatelstwo oraz numer PESEL.. Zawiera też inne dane