• 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!
2
0
0

Pełen tekst

(1)

Algorytmy i Struktury Danych, 1. ¢wiczenia

2008-10-06

1 Plan zaj¦¢

• Dolne granice dla min, min i max, second min

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«)

• Q = ∅

• 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,

1

(2)

• 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, ∗).

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.

2

Cytaty

Powiązane dokumenty