Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i...

391
Algorytmy i struktury danych dr inż. Andrzej Zalewski www: www.ia.pw.edu.pl/~azalews2 e-mail: [email protected] konsultacje: środa godz. 12:15 – 13:00.

Transcript of Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i...

Page 1: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

dr inż. Andrzej Zalewski www: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 2: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wykład I i II.

Organizacja zajęć

Zagadnienia wprowadzające.

Złożoność obliczenia, rzędy złożoności obliczeniowej.

Page 3: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

O prowadzącym i przedmiocie

Organizacja zajęć

Algorytmy i formalizacja

Rodzaje algorytmów – różne klasyfikacje

Struktury danych i ich właściwości

Page 4: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

O prowadzącym

Zainteresowania

Inżynieria oprogramowania

Architektura oprogramowania i systemów IT

Systemy zorientowane usługowo, integracja aplikacji

Zarządzanie projektami informatycznymi

Projektowanie IT dużej skali

Metody analizy ryzyka i bezpieczeństwa

Aktualne i ostatnie pola aktywności

Publikacje i konferencje naukowe (głównie międzynarodowe)

Szefuję studiom podyplomowym „Zarządzanie zasobami IT”

Architektura oprogramowania

Ekspertyzy i opinie dla sądów i urzędów

Page 5: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Organizacja zajęć

wg strony www.

relacje wzajemne

Page 6: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

O przedmiocie

Państwa pojęcie o informatyce

(AISD(I)!)?

Badanie doświadczeń programistycznych.

Dlaczego informatyka jest dziedziną trudną –

przekleństwo nieliniowości?

Działający program jako huśtawka stojąca do

góry nogami?

Page 7: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Program przedmiotu

Wg rodzaju zadania algorytmicznego Sortowanie

Wyszukiwanie wg klucza

Wyszukiwanie tekstów

Wyszukiwanie wzorca w tekście

Kolejki priorytetowe

Algorytmy i problemy grafowe

Programowanie dynamiczne, problem najdłuższego wspólnego podciągu

Wg rodzaju struktury danych listy w tym tablice

drzewa w różnych odmianach (tudzież lasy)

tablice z kodowaniem mieszającym

kopce binarne, dwumianowe, Fibbonacciego

łańcuchy znaków (teksty)

Page 8: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Dlaczego warto się uczyć AISDI?

Każda sztuka jest bezużyteczna

/Oscar Wilde/

Cywilizacja, w której rozpoznawane są

wyłącznie wartości użytkowe, to

barbarzyństwo

/Henryk Elsenberg/

Page 9: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Pojęcie algorytmu

Źródłosłów: w średniowieczu: abacist / algorist

od nazwiska arabskiego autora traktatu o algebrze (arytmetyce) i nazwy geograficznej rejonu Jeziora Aralskiego

Znaczenie: mechaniczna procedura obliczeniowa, tzn.:

dane + reguły ich przetwarzania

informacja o modelu maszyny Turinga (Harel, str. 235) taśma (dane)

głowica (jednostka czytająco/zapisująca)

program sterujący głowicą (automat skończony)

Page 10: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyniki ankiety

Page 11: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wiek

20 lat

21 lat

22 lata

Page 12: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Jak długo posługuję się komputerem?

maks. 2 lat

6-10 lat

ponad 10-lat

Page 13: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Hobby?

Hobby

Lubię

Muszę się uczyd

Page 14: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Doświadczenie w programowaniu

<= 2 lat

3-5 lat

6-10 lat

Page 15: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Znajomość języków

programowania

0

10

20

30

40

50

60

C Pascal Java HTML/PHP

Serie1

Page 16: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i ich właściwości

Przykładowe algorytmy

Algorytm Euklidesa (gcd(a, b) = gcd (b, a mod b))

Sortowanie przez prosty wybór

Wspólna cecha algorytmów użytecznych:

iteracyjność prowadząca do osiągnięcia spodziewanego wyniku

czasem jest to rekurencyjność

Spodziewany wynik: warunki wstępne => warunki końcowe

Porównywanie algorytmów

czas wykonania – złożoność obliczeniowa

pamięć potrzebna do działania algorytmu (objętość struktur danych, na których działa algorytm)

Page 17: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Złożoność obliczeniowa

Czas działania zależy od danych

wejściowych

Algorytm Euklidesa:

jeśli a = n * b – znajduje rozwiązanie w 1 kroku

jeśli a = Fk+1, b = Fk, wymaga k – 1 wywołań

rekurencyjnych

(gcd(Fk+1, Fk) = gcd(Fk, Fk-2))

/l-by Fibb: F0= 0, F1= 1, ... Fk= Fk-1 + Fk-2/

/np. 377, 610, 987, 1597, 2584/

Page 18: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Złożoność obliczeniowa c.d.

Algorytm sortowania przez prosty wybór

a * n2 + b n + c

Notacje: (, O, ), (o, )

(g(n)) – rodzina funkcji f(n), których wzrost jest „nie szybszy i nie wolniejszy niż szybkość wzrostu funkcji g(n)”

O(g(n)) – rodzina funkcji rosnących nie szybciej niż g(n)

(g(n)) – rodzina funkcji rosnących nie wolniej niż g(n)

notacja o – zbiór funkcji pomijalnych przy g(n) dla dużych n (w granicy)

notacja (g(n)) - zbiór funkcji f(n), przy których g(n) jest pomijalna

Page 19: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie
Page 20: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Złożoność obliczeniowa

Stały Bardzo, bardzo

proste.

Złoty strzał

Logarytmiczny Bardzo proste. Divide et impera

Liniowy Proste. Przeglądanie

struktur linearnych

Wielomianowy (st.

wiel. > 1)

Łatwe, trudne i

bardzo trudne.

Ogromna

większość prakt.

Wykładniczy Bardzo, bardzo

trudne.

Przeglądanie

struktur wykładn.

Page 21: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Klasyfikacje algorytmów

Wg rodzaju rozwiązywanego problemu

Wg własności osiąganego rozwiązania

Wg zasady dążenia do rozwiązania

Page 22: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Klasyfikacja wg zadań algorytmizowalnych

Algebry liniowej

Optymalizacji

INNE

NUMERYCZNE

Gen. pseudolos.

NWWNWD

FaktoryzacjaL-by pierwsze

Arytmetyczne

Teorioliczbowe Szyfry

SEMINUMERYCZNE

Wyszukiwania Sortowania Przekszt.

Przetwarzania

strukturdanych

Sterowania Przetwarzania

obrazów

INNE

ALGORYTMY

Zemsta N. Wirtha ...

Page 23: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Klasyfikacja algorytmów

numerycznych

Algebry liniowej

Jednokryter. Wielokryter.

Wspom. decyzji

Optymalizacji Równania liniowe

R. nieliniowe

R. różniczkowe

R. r. cząstkowe

Sterowania Przetwarzania sygnałów

NUMERYCZNE

Page 24: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Klasyfikacja wg własności rozwiązania

Znajdujące rozwiązanie dokładne

założenie: jesteśmy w stanie zdefiniować je

bezpośrednio lub jego własności (częściej)

Znajdujące rozwiązanie przybliżone

Zbieżne do wyniku dokładnego

założenie jak wyżej, zbieżność trzeba wykazać

Heurystyczne (znajdują rozwiązanie, nie koniecznie

spełniające wszystkie warunki)

stosowane w „trudnych” zadaniach (np. w

problemach kombinatorycznych – układanie planu

zajęć, problem komiwojażera)

Page 25: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wg strategii dążenia do rozwiązania

Dziel i rządź

Zachłanne

Niezachłanne (rozsądne)

Losowe

Page 26: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wykład III. Algorytmy

sortowania

Tablice

Algorytmy sortowania

Page 27: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przegląd

Tablice

Ograniczenie efektywności sortowania z porównywaniem elementów

Algorytmy proste przez prosty wybór

przez wstawiania

przez prostą zamianę (bąbelkowe)

Algorytm Shella

Algorytmy asymptotycznie efektywne przez podział i scalanie (merge-sort)

przez przesiewanie przez kopiec (heap-sort)

Hoare’a – tzw. sortowanie szybkie (quick-sort)

Sortowanie w czasie liniowym przez zliczanie (count-sort)

sortowanie pozycyjne (radix-sort)

sortowanie kubełkowe (bucket-sort)

Page 28: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Tablice

T: Id –> V

Id – Indeksy – typowo: Id N (liczby

naturalne), Id Nk (dla tablicy k-wymiarowej)

V – Wartości – liczby rzeczywiste, całkowite,

znaki, łańcuchy znaków, typy złożone

(rzadziej), wskaźniki typów złożonych

Przypadki szczególne

WEKTOR: Id = {1, ..., m}, V = R

MACIERZ: Id = {1, ..., m} {1, ..., n}, V = R

Page 29: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Tablice reprezentacja

Typowo ciągły obszar pamięci potrzebny

do przechowania poszczeg. wartości

Tablice gęste

Macierze i wektory gęste

Tablice rzadkie

macierze i wektory rzadkie

różne rozwiązania

np. listy par: {(Indeks, Wartość), ....}

Page 30: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Dolne ograniczenie na czas

sortowania z porównywaniem

elementów

Page 31: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Dolne ograniczenie na czas sortowania z

porównywaniem elementów

Rozpatrzymy sortowanie ciągu 3 elementowego: {a1, a2, a3}

Tw. Powyższe drzewo decyzyjne ma wysokość nie mniejszą niż N log2 N

a1, a2

a2, a3

a1, a3

<=>

1, 2, 3

<= >

3, 1, 21, 3, 2

<= >

a1, a3

Page 32: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Dowód tw. o wysokości drzewa decyzyjnego

Liczba liści w drzewie = liczbie permutacji

elementów sortowanej tablicy i wynosi N!

Drzewo o wysokości h ma co najwyżej 2h

Zachodzi więc nierówność: N!2h, czyli:

h log2 N!,

wzór Stirlinga N! > (N / e)N, e= 2,718

h log2 (N / e)N = N log2N – N log2e

h = O(N log2 N)

Page 33: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie proste i „mniej proste”

Algorytmy sortowania prostego

przez wstawianie

przez prostą zamianę (bąbelkowe)

przez prosty wybór

Sortowanie Shella (tzw. metodą malejących

przyrostów)

Page 34: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Ciąg arytmetyczny

Sn=a1+a2+…an = n*(a1+an)/2

Page 35: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie przez prosty wybór

Przez prosty wybór

{3, 4, 2, 8, 1} => {1, 4, 2, 8, 3}

{1, 4, 2, 8, 3} => {1, 2, 4, 8, 3}

{1, 2, 4, 8, 3}

a1=1

an = n – 1

SN=n2/2 (n2)

Page 36: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Proste algorytmy sortowania

Przez wstawianie

K1: {5, 3, 4, 2, 7} => {3, 5, 4, 2, 7}

K2: {3, 5, 4, 2, 7} => {3, ..., 5, 2, 7} =>

{3, 4, 5, 2, 7}

K3: {3, 4, 5, 2, 7} => {2, 3, 4, 5, 7}

Page 37: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie bąbelkowe

Przez prostą zamianę (bąbelkowe) jeden przejazd przez tablicę(fragment)

9

5

8

7

3

1

2

6

I

9

5

8

7

3

1

2

6

II III

9

5

8

7

3

1

2

6

IV

9

5

8

7

3

1

2

6

V

9

5

8

7

3

1

2

6

Page 38: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie bąbelkowe c.d.

9

5

8

7

3

1

2

6

9

5

8

7

3

1

2

6

9

5

8

7

3

1

2

6

9

5

8

7

1

2

6

3

Page 39: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie metodą Shella Sortowanie metodą malejących przyrostów

Sortujemy kolejno grupy elementów oddalonych o {hn, hn-1, ..., h0}, gdzie h0 = 1 (koniecznie!)

{hk} – malejący ciąg przyrostów

Dobór ciągu przyrostów dowolny zakończony jedynką, ale są podobno lepsze i gorsze

Np.

{2k-1}k=n,...1

Ciąg Sedgewicka

9 * 2s – 9 * 2s/2 + 1, dla s parzystych

hs =

8 * 2s – 6 * 2(s+1)/2 + 1, dla s nieparzystych

W przykładzie przyjęto ciąg przyrostów {4, 2, 1},

Page 40: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie metodą Shella c.d.

9 5 8 7 3 12 6I

3 1 6 7 9 52 8II

3 2 6 5 8 71 9III

Czas działania trudny do oszacowania proporcjonalny do N (log2(N))2 dla pewnych {hk}

proporcjonalny do N4/3 dla ciągu Sedgewicka

Page 41: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie przez scalanie

(ang. merge-sort)

Page 42: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie przez podział i scalanie (1)

9 5 8 7 3 12 6

2 9 5 8 7 3 1 6

2 9 5 8 7 3 1 6

2 9 5 8 7 3 1 6

Rekurencyjny podział

Page 43: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie przez podział i scalanie (2)

9 5 8 7 3 12 6

1 2 3 5 6 7 8 9

2 5 8 9 1 3 6 7

2 9 5 8 3 7 1 6

Rozwiązanie rekurencji – scalanie

Jaka jest wada tej procedury – gdzie źródło poprawy efektywności?

Page 44: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zapis algorytmu

1. m-sort(i, j)

1. q=(i+j)/2

2. m-sort(i, q)

3. m-sort(q+1, j)

4. merge(i, j, q)

Page 45: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Złożoność obl. sortowania przez scalanie

wysokość drzewa: log2(N), gdzie N – liczba sortowanych

elementów

liczba porównań przy scalaniu na każdym poziomie: ~N

razem czas sortowania ~N log2(N)

9 5 8 7 3 12 6

1 2 3 5 6 7 8 9

2 5 8 9 1 3 6 7

2 9 5 8 3 7 1 6

Page 46: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowania przez przesiewanie

przez kopiec

Page 47: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Tablica jako kopiec

Kopiec: tablica o indeksach ze zbioru I={1, 2, ..., N}

dla danego i I : mamy

left(i) = T[2 * i]

right(i) = T[2 * i + 1]

parent(i) = i/2 dla i > 1

własność kopca: dla każdego iI, i>1 T[parent(i)]T[i]

wniosek: największy element jest w korzeniu!

14 8 11 4 3 9 7 2

1 2 3 4 5 6 7 8 14

8 11

4 3 9 7

2TABLICADRZEWO

T

Page 48: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przywracanie własności kopca

Warunki wejściowe, dana N-elementowa

tablica T:

left(i) i right(i) są wierzchołkami kopców,

T[i] T[left(i)] lub T[i] T[right(i)] (naruszenie

własności kopca)

Warunek wyjściowy

i jest wierzchołkiem kopca zawartego w

tablicy T

Page 49: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przywracanie własności kopca przykład

5

8 11

4 3 9 7

2

5 8 11 4 3 9 7 2

1 2 3 4 5 6 7 8

T

11

8 5

4 3 9 7

2

11 8 5 4 3 9 7 2

1 2 3 4 5 6 7 8

T

HEAPIFY(1, 8)

HEAPIFY(3, 8)

Page 50: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Budowanie kopca w tablicy

MAKEHEAP(N)

FOR i = N / 2 downto 1 HEAPIFY[i]

3

6 7

8 11 10 5

4

3 6 7 8 11 10 5 4

1 2 3 4 5 6 7 8

T

i=4

i=3

i=2

Page 51: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Heapsort (sort. przez kopcowanie)

1. Budujemy kopiec w tablicy T

2. Pierwszy (największy element kopca) zamieniamy z ostatnim.

3. Skracamy kopiec o 1

4. Przywracamy własność kopca począwszy od wierzchołka (1)

FORMALNIE:

HEAPSORT(N) MAKEHEAP(N)

FOR i=N downto 2

T[i] T[1]

HEAPIFY(1, i – 1)

Page 52: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Czas działania proc. heapsort.

nie gorzej niż:

MAKEHEAP – nie wolniej niż ~N

można pokazać, że każde z N – 1 wywołań

zajmuje ~log2(N),

RAZEM: N log2(N)

Page 53: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wykład 4. Algorytmy sortowania

Zagadnienia uzupełniające

Wstęp do wyszukiwania względem klucza

(problem słownika)

Page 54: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan

Sortowanie szybkie (Hoare’a)

Sortowanie w czasie liniowym zliczanie

pozycyjne

kubełkowe

Mono- i polimorficzne struktury danych

Listy ujęcie abstrakcyjne. Umowność pojęcia „lista”

Wstęp do problemu słownikowego –wyszukiwanie względem klucza.

Page 55: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie szybkie Hoare’a

= sortowanie przez zamianę

Page 56: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zasada konstrukcyjna

Dana jest N-elementowa tablica T o indeksach i

I = {i, i+1, ..., j – 1, j}

Podziel tablicę na dwie części, tzn. wykonaj

takie zamiany elementów w tablicy i znajdź taki

element q, by uzyskać tablicę o następujących

własnościach:

dla każdego (k = i,...q, l = q + 1, ..., j) T[k] < T[l]

posortuj podtablice T[i, q] oraz T[q+1, j]

przez „identyczną” zamianę i podział podtablicy

Page 57: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Procedura podziału tablicy

1. Wybierz element rozdzielający x (np. 1-szy, czyli T[i])

2. Znajdź element T[l] x szukając od prawej do lewej

3. znajdź element T[k] > x szukając od lewej do prawej

4. T[l]T[k] – zamień elementy, jeśli l < k

5. kontynuuj wg p. 3 posuwając się w lewo (l) i w prawo (k)

Page 58: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Działanie funkcji podziału

PARTITION(1, 8) = 4

6 1 8 4 8 5 9 3 x=6

3 1 8 4 8 5 9 6

3 1 5 4 8 8 9 6

6 > 6

l

k

Page 59: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Procedura QUICKSORT

DANA T[i, i +1, ..., j – 1, j]

1. QUICKSORT(i, j)

2. IF i < j THEN

1. q = PARTITION(i, j)

2. QUICKSORT(i, q)

3. QUICKSORT(q + 1, j)

Page 60: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wersja randomizowana

w procedurze podziału losujemy element

rozdzialający spośród elementów z

podtablicy T[p, q]

pozwala „pokonać” posortowane

fragmenty tablic

Page 61: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy sortowania

w czasie liniowym

Page 62: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie przez zliczanie

Założenie: tablica T[1...N] zawiera liczby naturalne z przedziału [1,...,M] relacja miedzy M i N dowolna (M<N, M>N)

Algorytm: Budujemy tablicę pomocniczą: Count[M] i inicjujemy

zerami

for i=1 to N do Count[T[i]] = Count[T[i]]+1 (zliczamy)

i=1;

for j=1 to M do

while (Count[j] > 0) do Count[j] = Count[j] – 1; T[i] = j; i = i +1

Page 63: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie przez zliczanie c.d.

sortuje tablicę T w czasie (N + M)

(liczba elementów w tablicy + liczba

możliwych wartości)

Page 64: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie pozycyjne (ang. radix-sort)

Dane wejściowe dana jest tablica T[1...N][1...d] zawierająca cyfry,

które w danym wierszu interpretujemy jako liczbę d-cyfrową

najmniej znaczącą cyfrą w i-tym wierszu jest T[i][d], najbardziej – T[i][1]

Procedura sortowania pozycyjnego for i = d to 1

posortuj stabilnie wiersze tablicy T względem i-tej kolumny

Sortowanie jest stabilne, jeśli liczby o tych samych wartościach w tablicy wynikowej znajdą się w tej samej kolejności, co przed sortowaniem

Page 65: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie pozycyjne c.d.

Czas działania zależy od zastosowanego

algorytmu sortowania stabilnego

zysk daje zastosowanie sortowania przez

zliczanie: jeśli liczby należą do przedziału od

[1...M], to czas jest ~ d*(N+M)

Page 66: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie kubełkowe

Dane wejściowe: dana tablica T[1...N], T[i]<0, 1)

Algorytm B[1...N] – tablica N list

zdefiniowano funkcję insert(B[i], v), v - wartość

Algorytm for i=1 to N Insert(N * T[i], T[i])

for i=1 to N posortuj B[i]

wstaw elementy z list B[1...M] do tablicy wynikowej

Oczekiwana wartość długości list wynosi 1 (dla jednostajnego rozkładu danych), złożoność obliczeniowa sortowania ~N

Page 67: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Struktury mono- i polimorficzne

Page 68: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Struktury danych – klasyfikacja II

Wg postaci elementu podstawowego

(węzła)

monomorficzne – wszystkie węzły są identyczne

polimorficzne – węzły są obiektami klasy

„zgodnej” z pewną klasą podstawową

sposób realizacji szczegół techniczny

struktury polimorficzne są de facto realizowane jako

monomorficzne z „dowiązanymi” obiektami

polimorficznymi

Page 69: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Struktury monomorficzne

Wszystkie elementy struktury są tego

samego typu

Znak Znak Znak Znak…

Page 70: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Struktury polimorficzne

Tylko w programowaniu obiektowym

Struktura polimorficzna składa się z elementów typów (klas) zgodnych z pewnym typem (klasą) bazowym

Node

Polygon Point Line

Triangle Quadrilateral

Node

Node *next;

Page 71: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Lista polimorficzna Lista składa się z obiektów klas

wyprowadzonych (również pośrednio) ze wspólnej klasy bazowej Node

Triangle

Node *next;

... składowe

klasy Triangle

Quadrilateral

Node *next;

... składowe

klasy

Quadrilateral

Quadrilateral

Node *next;

... składowe

klasy

Quadrilateral

Zastosowanie: Lista figur wyświetlanych w oknie

Page 72: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Jakie założenie jest nierealne?

Page 73: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Listy – ujęcie abstrakcyjne

Page 74: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Jak poznać, że struktura danych to

lista?

Dana jest struktura danych S „nad” uniwersum obiektów U

Jak poznać, że to lista?

Właściwości czyniące ze struktury danych listę lista to ciąg n 0 węzłów N[1], ..., N[n]

musi istnieć funkcja element(S, idx)

powiązania wewnętrzne:

dla n>0 istnieje pierwszy i n-ty (ostatni) element funkcja podająca pierwszy i ostatni element first(S),

last(S)

jest ustalona kolejność elementów po k-tym elemencie jest element k+1, przed k-tym element k-1 funkcja succ(S, k) i pred(S, k)

Page 75: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Listy liniowe ujęcie konkretne

Tablice

Łańcuchy wskazujących się na wzajem

rekordów (struktur)

Ale także… każda inna struktura, dla

której zdefiniowano funkcję: element,

first, last, succ, pred

Page 76: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Morał

To co może stanowić listę daleko

odbiega od tego, co zwykle mamy na

myśli

Lista to pewna umowa co do sposobu

odwoływania się do danych

Page 77: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Listy – operacje

Zlokalizowanie k-tego elementu

Wstawienie nowego elementu po/przed k-tym

Usuwanie k-tego elementu

Łączenie m list w jedna

Podział listy na m list

Kopia listy

Wyznaczenie liczby elementów listy

Sortowanie elementów listy

Znajdowanie elementu o zadanej wartości

Page 78: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przykłady list liniowych

Tablice

Stos

Kolejka

Kolejka dwustronna

Listy jednokierunkowe

Listy cykliczne

Listy dwukierunkowe

Page 79: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Problem wyszukiwania

względem klucza

Page 80: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie wg klucza, problem

słownika.

Zagadnienia wstępne: konstrukcja węzła

operacje słownikowe

porządek liniowy w zbiorze kluczy i jego znaczenie

Wyszukiwanie w tablicach

Wyszukiwanie danych w drzewach wprowadzenie do drzew

drzewa binarne i drzewa wyszukiwania binarnego (ang. BST = Binary Search Tree)

problem zrównoważenia drzew binarnych

drzewa AVL, czerwono-czarne i inne drzewa wyszukiwania

Page 81: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zagadnienia wstępne (1)

Przechowywanie i wyszukiwanie danych =

podstawowa funkcja każdego systemu

informatycznego

Organizacja danych dla potrzeb wyszukiwania

dobór dynamicznej struktury danych o właściwościach

ułatwiających wyszukiwanie (np. przez odpowiednie

uporządkowanie danych)

realizacja operacji na danej strukturze

Założenia odnośnie rozważanych struktur:

węzeł = rekord {klucz, dane dodatkowe}

Page 82: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zagadnienia wstępne (2)

Klucze należą do zbioru liniowo

uporządkowanego (tzn. takiego, w

którym określony jest porządek liniowy

(zupełny))

Relacja R jest porządkiem liniowym w

zbiorze A, jeśli

R jest relacją porządku częściowego

dla każdej pary elementów

a, bA a R b lub b R a (własność

zupełności)

Page 83: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zagadnienia wstępne (3)

R jest relacją porządku częściowego w zbiorze A, jeśli jest zwrotna, antysymetryczna (a R b i b R a => a = b) i przechodnia

Trychotomia: określenie relacji porządku liniowego oznacza, że dla każdej pary elementów w zbiorze A elementy te mogą być sobie równe, a R b lub b R a (zwykle oznacza to bycie mniejszym lub większym)

Ćwiczenie: wykazać zakładając powszechne rozumienie porządku leksykograficznego, iż stanowi on porządek zupełny w zbiorze słów (łańcuchów znaków)

Page 84: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zagadnienia wstępne (4)

W konsekwencji w zbiorze kluczy mamy:

element najmniejszy

element największy

poprzednik danego elementu

następnik danego elementu

Co się dzieje kiedy na zbiorze kluczy nie

określono porządku?

Page 85: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Operacje na strukturze danych

Zapytania

Znajdź klucz

Minimum

Maksimum

Następnik

Poprzednik

Modyfikacje

Wstaw

Usuń

Złącz (niekiedy)

Zasada ogólna:

im szybsze (łatwiejsze) są zapytania, tym

wolniejsze (trudniejsze) są modyfikacje

Page 86: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zagadnienie wyszukiwania

Dana struktura S, składająca się z węzłów będących parą e=(k, d), kA /klucz, dane dodatkowe/ search(S, ks) – zwraca wskaźnik (indeks), elementu o

kluczu równym ks

succ(S, e), pred(S, e) – wskaźnik (indeks) następnika, poprzednika w danej strukturze

min(S), max(S) – zwraca wartość najmniejszego i największego klucza

extract_min(S), extract_max(S) – usuwa ze struktury element najmniejszy/największy (b. specyficzne –porównaj kopiec binarny)

Page 87: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zorientowanie struktur danych

Struktury danych dobieramy tak, by najczęstsze lub najbardziej pilne operacje były wykonywane najszybciej struktury zorientowane na wyszukiwanie wg klucza

(tablice haszujące)

struktury zorientowane na wyszukiwanie / usuwanie elementu największego lub najmniejszego (drzewa, kopce)

struktury zorientowane jednocześnie na różne operacje (drzewa)

struktury zorientowanie na scalanie

Page 88: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 89: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład V„Wyszukiwanie wg klucza”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 90: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Wyszukiwanie w tablicy nieuporządkowanej

Wyszukiwanie w tablicy uporządkowanej Wyszukiwanie binarne

Wyszukiwanie interpolacyjne

Wyszukiwanie metodą drzewa Fibbonacciego (przełożone jako dygresja na później)

Drzewa drzewa binarne

drzewa BST

drzewa zrównoważone drzewa AVL

drzewa Splay

drzewa czerwono-czarne

B-drzewa

Page 91: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie liniowe w tablicy n. uporz.

W tablicy nieuporządkowanej o N elementach

search, min, max – musimy porównać N

lub (N – 1) elementów

min + max wystarczy 3 N/2 porównań

porównujemy kolejne elementy w parach, najpierw

ze sobą potem mniejszy z zapamiętanym

najmniejszym, większy z zapamiętanym

największym (3 porównania)

Jak przyspieszyć wyszukiwanie:

przechowywać dane w sposób uporządkowany;

zrezygnować z wyszukiwania liniowego…

Page 92: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie binarne

Dana jest tablica uporządkowana T[1..N] i szukany klucz ks, niech m=1, n=N

r=(m+n)/2 - pkt. podziału przedziału (na pół)

Sprawdzamy T[ r ] < ks

jeśli spełnione – wykonujemy sprawdzenie w podtablicy T[ r .. n] (tzn. m:= (m+n)/2 ),

w przeciwnym razie w podtablicy T[ m .. r +1] (tzn. n= (m+n)/2 +1)

trzeba jeszcze dopisać warunek stopu…

Działa w czasie logarytmicznym /średnio i pesymistycznie/ (log2N)

Page 93: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie interpolacyjne

Zmieniamy sposób podziału przedziału indeksów <m, n> – próbkujemy T[r], gdzie indeks r wyznaczony proporcjonalnie do odległości ks od T[m], w przedziale km, kn

r = m + [(ks – T[l])/(T[m] – T[n]) * (n – m)]

Średnio: log log n

Pesymist: n

Kiedy? Dane rozłożone równomiernie

Page 94: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa

Page 95: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa – terminologia (1)

Drzewo wolne: spójny (z dowolnego węzła można przejść po

krawędziach do dowolnego innego), acykliczny (jasne) graf nieskierowany

Las: graf acykliczny

Drzewo ukorzenione drzewo wolne, z wyróżnionym jednym wierzchołkiem

zwanym korzeniem

Drzewo uporządkowane – gdy następniki poszczególnych węzłów są uporządkowane (wyróżniony jest 1-szy, 2-gi, 3-ci itd. następnik)

Page 96: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa – terminologia (2)

d(v) – głębokość węzła v w

drzewie – długość ścieżki od

korzenia do węzła v

h = maxvV d(v) – wysokość

drzewa

14

8 11

4 3 9 7

1 4 2 3 1 5 6 8

H=3

d=1

d=2

d=3

poprzednik

(ojciec)

synowie

(bracia)

Liście

Page 97: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa – terminologia (3)

Drzewo rzędu k – drzewo ukorzenione, w

którym węzeł ma co najwyżej k następników.

pytanie: przykład sytuacji praktycznej, kiedy rząd

drzewa nie może być a priori ograniczony?

Drzewo pełne – drzewo ukorzenione rzędu k, w

którym wszystkie liście mają tę samą

głębokość.

Drzewo binarne – drzewo rzędu 2.

Page 98: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Właściwości drzew

Drzewo rzędu k o wysokości h

maksymalna liczba liści: kh

maksymalna liczba węzłów drzewa:

k0 + k1 + ... + kh = (kh + 1 – 1) / (k – 1)

dla drzewa binarnego: (2h+1 – 1)

Drzewo pełne

drzewo pełne rzędu k o n liściach

wysokość: h = logk n (bo n = kh)

Page 99: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa binarne

Page 100: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przechodzenie drzew binarnych

preorder: Korzeń

Lewe

Prawe

inorder: Lewe

Korzeń

Prawe

postorder: Lewe

Prawe

Korzeń

K

L P

Page 101: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Porządki przechodzenia a notacje wyrażeń

y = 2 * 3 + (5 – 1) * 2

preorder:

+ * 2 3 * – 5 1 2

inorder:

2 * 3 + (5 – 1) * 2

postorder:

2 3 * 5 1 – 2 * +

+

* *

2 3 – 2

5 1

preorder i postorder – tzw.

notacja polska przed-

i przyrostkowa

Page 102: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Reprezentacje drzew binarnych

Jako struktura z dowiązaniami

Reprezentacja tablicowa (kopcowa)

Page 103: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Tablica jako drzewo binarne (tzw.

kopiec)

Kopiec: tablica o indeksach ze zbioru I={1, 2, ..., N}

dla węzła o indeksie i I : mamy

left(i) = T[2 * i]

right(i) = T[2 * i + 1]

parent(i) = i/2 dla i > 1

własność kopca: dla każdego iI, i>1 T[parent(i)]T[i]

14 8 11 4 3 9 7 2

1 2 3 4 5 6 7 8 14

8 11

4 3 9 7

2TABLICADRZEWO

T

Page 104: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa poszukiwań binarnych

(BST)

Page 105: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewo poszukiwań binarnych

2110 32

364 28

1 7

15

Drzewo binarne, węzeł standardowy

(klucz, dane dodatkowe) + wskaźnik

lewego, prawego

key(left(x))key(right(x)) /x pewien węzeł/

przykład:

Page 106: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przejście

Przejście w porządku inorder (zgodny z

porządkiem kluczy):

print(N)

if N<>NIL

print(left(N))

wypisz key(N)

print(right(N))

Page 107: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie

Search(N, k)

if N=NIL or key(N)=k return N

if k < key(N) search(left(N), k)

else search(right(N), k)

Page 108: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Min, max

znalezienie odpowiednio najbardziej

„lewego” i najbardziej „prawego” węzła

drzewa

2110 32

364 28

1 7

15

Page 109: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Następnik (poprzednik)

Jeśli right(N) <> NIL, to

następnik jest równy min(right(N))

w przeciwnym razie

następnik N jest najniższym przodkiem N, którego

lewy syn jest także przodkiem N

2110 32

364 28

1 7

15

1912

Page 110: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstawianie w BST

Znajdujemy miejsce na nowy liść zgodnie

z porządkiem wyznaczonym przez

relację ojca i dzieci

2110 32

364 28

1 7

15

1912

Page 111: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie węzła o zadanym kluczu

Liść – po prostu usuwamy

Węzeł z jednym synem – łączymy syna z ojcem

Węzeł wewnętrzny

znajdujemy następnik

usuwamy następnik zapamiętując jego wartość w węźle z

usuwanym kluczem

2110 32

4 28

1 7

15

191230

Page 112: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa zrównoważone

Page 113: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zdefiniowanie problemu równoważenia

Operacje na drzewach BST są realizowane w czasie nie gorszym niż ~ wysokości drzewa

Drzewa BST mogą rosnąć nierównomiernie lub „wyrodnieć w wyniku wstawiania/usuwania elementów”

Wysokość „zwyrodniałego” drzewa będzie większa aniżeli to konieczne z punktu widzenia liczby jego węzłów

Wprowadzić mechanizmy „kontroli” geometrii drzewa => drzewa zrównoważone (AVL, drzewa czerwono-czarne i inne)

Page 114: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Ogólna ch-ka drzew (z)równoważonych

Ograniczają różnice wysokości poddrzew

Stąd: ograniczają czas wyszukiwania w

drzewie

a więc także znajdowania min, max, succ, pred;

Koszt: większa złożoność operacji

wstawiania i usuwania oraz związany z

nim nakład czasowy

Page 115: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wykład VI.

„Drzewa zrównoważone” (c.d.)

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 116: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa AVLAVL = Adelson-Wielskij – Łandis

Page 117: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Definicja

Drzewo BST nazywamy AVL-

zrównoważonym, jeśli dla dowolnego

węzła x różnica wysokości poddrzew

zaczepionych w tym węźle nie jest

większa niż 1

Page 118: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Oznaczenie stanu zrównoważenia Wprowadzamy wskaźnik

zrównoważenia drzewa

zaczynającego się węźle

N B(N) {(0), (L), (P),

(PP), (LL)}

W implementacji

praktycznej wygodniej jest

przyjąć 0 zrównoważone,

1 i –1 odpowiednio dla

„przechyłu” w lewo lub

prawo

AB

(0)

AB

(P)

AB

(L)

Page 119: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Równoważenie (1)

Przypadek 1’ i 2’ – symetryczne – do

przećwiczenia w domu

A

C

1

0

2

h+1

h+2

h+3

A

E

1

0

2

h+1

h+2

h+3

B

Przypadek 1 Przypadek 2

(podwójny)

X

Y

X

Y

Z

DC

(PP)

(L)(P)

(PP)

Page 120: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Równoważenie (2)

Operacja tzw. lewej rotacji

A

C

1

0

2

h+1

h+2

h+3

B

Przypadek 1

X

Y

AC

1

0

2

h+1

h+2

h+3

B

X

Y

Page 121: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Równoważenie (3)

Prawa rotacja Z-Y

Lewa rotacja Z-X

A

E

1

0

2

h+1

h+2

h+3

Przypadek 2

X

Y

Z

DCA E

1

0

2

h+1

h+2

h+3

Przypadek 2

X Y

Z

DC

Page 122: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kontrola zrównoważenia – przykład

Po dodaniu 33 mamy przypadek 1

213010

13 252

21 27

45

5035

33

(0)

(0)

(0)

(0)

(P)

(0)

213010

13 252

21 27

45

5035

33

(L)

(0)

(0)

(P)

(PP)

(L)

Page 123: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kontrola zrównoważenia Propagujemy w górę drzewa informację o

urośnięciu poddrzewa B(N)=(L) + urosło L => B(N)=(LL) (!!! zrównoważ)

B(N)=(P) + urosło P => B(N)=(LL) PP (!!! zrównoważ)

B(N)=(P) + urosło L => B(N)=(0)

B(N)=(L) + urosło P => B(N)= (0)

B(N)=(0) + urosło L => B(N)= (L)

B(N)=(0) + urosło (P) => B(N)= (P)

Rozróżnienie przypadków 1 i 2: na podstawie wartości wskaźnika zrównoważenia dla

lewego lub prawego poddrzewa

różne podejścia – np. na podstawie informacji o „urośnięciu” oraz wartości wstawionego klucza

Page 124: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie

Przypadek 1: skróciło się lewe poddrzewo A – prawe poddrzewo jest zrównoważone lub

przechylone w prawo (działa rotacja w lewo)

B – prawe drzewo jest przechylone w lewo (nie działa rotacja w lewo – trzeba wyk. rotację w prawo a potem w lewo)

Przypadek 2: skróciło się prawe poddrzewo A – lewe poddrzewo jest zrównoważone lub

przechylone w lewo (działa prawa rotacja)

B – lewe poddrzewo jest przechylone w prawo (nie działa prawa rotacja, trzeba zrobić rot. lewo-prawo)

Page 125: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie

I niestety, jeśli trzeba aż do wierzchołka

Trudny przypadek – drzewo

Fibbonacciego

Page 126: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie metodą Fibbon.

Liczby Fibbonaciego F0=0, F1=1, F2=1,

Fk+1 = Fk + Fk-1, czyli F3=2, F4=3, F5=5,

F6=8, F7=13, F8=21, …

Drzewo Fibbonaciego w tablicy:

rzędu k=0, 1 po prostu 0

rzędu k>=2 korzeniem jest element Fk,

lewym poddrzewem drzewo rzędu Fk-1,

prawym poddrzewem drzewo rzędu Fk-2 z

elementami o indeksach powiększonych o FK

Page 127: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewo Fibbonacciego

k=6, F6=8

8

5 113 7 10 12

126 9 11

5 6

72

1 2

0 1

4

3 4 8 9

10

Page 128: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Poruszanie się po drzewie Fibb.

Niech i=Fk, p=Fk-1, q=Fk-2 (i – na początku

wskazuje korzeń)

Przejście do lewego poddrzewa

i = i – q (Fk=Fk-1+Fk-2 = > Fk-1=Fk – Fk-2)

(p,q) = (q, p – q) (Fk-2, Fk-3)

Przejście do prawego poddrzewa

i = i + q (zgodnie z definicją drzewa)

p = p – q /Fk-3/, q = q – p /Fk-4= Fk-2 – Fk-3/

Page 129: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wskazówki do konstrukcji algorytmu

Od tego miejsca już bardzo prosto:

zatrzymujemy się znalazłszy właściwy klucz

przy próbie przejścia w lewo zatrzymujemy

się, gdy q=0 (osiągnęliśmy F0)

przy próbie przejścia w prawo zatrzymujemy

się, gdy p=1

Page 130: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstawianie, usuwanie - wydajność

Przy wstawianiu wykonujemy maksimum

1 rotację (żeby ją zlokalizować trzeba w

najgorszym przypadku przejść całe

drzewo)

Przy usuwaniu w najgorszym przypadku

wykonujemy tyle rotacji ile wysokość

drzewa

Page 131: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa czerwono-czarne

Page 132: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewo czerwono-czarne def.

Drzewo czerwono-czarne to takie drzewo

binarne, w którym

każdy węzeł jest albo czerwony, albo czarny

każdy liść (pusty) jest czarny

jeśli węzeł jest czerwony, to obaj jego

synowie są czarni

każda ścieżka z ustalonego węzła N do liścia

ma tyle samo czarnych węzłów

Page 133: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstawianie w RB drzewie

Wstawiany węzeł kolorujemy na

czerwono:

nie narusza to warunku równości czarnych

wysokości poddrzew

może naruszać warunek, że synowie

czerwonego węzła są czarni

Definiujemy przekształcenia

Od dołu poprawiamy

Page 134: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstawianie w drzewie RB c.d.

PRZYPADEK 1(L)

a, b, g, d, e – drzewa mają czarny korzeń i taką samą czarną wysokość

Tylko przekolorowanie (!) i sprawdzamy wyżej

Czarna wysokość drzewa C się nie zmienia!

Alternatywnie B jest lewym poddrzewem A

C

A D

Ba d e

b g

C

A D

Ba d e

b g

wuj B

Page 135: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstawianie w RB-drzewie c.d.

C

A

Ba

d

b g

C

A

B

a

d

b

g

B

A C

ad

Przypadek 2(L) Przypadek 3(L)

b

g

KONIEC

wędrówki!

Page 136: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie z RB drzewa

Usunięcie węzła czerwonego – tak jak

BST

Usunięcie węzła czarnego – zaburza

własność równej czarnej wysokości

poddrzew

korygujemy drzewo

Page 137: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie z drzew RB c.d.

Przypadek 1 (L) => zamiana na

przypadek 2

B

A D

a

d z

b

g

EC

e

D

EB

e

b d

z

a

CA

g

BRAT

czerwony!

Page 138: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie z drzew RB c.d.

Przypadek 2 (L) => zamiana na przypadek 2

Jeśli B – czarne, to kontynuujemy korygowanie zaczynając od B

Jeśli B – czerwone, to koniec korekty.

B

A D

a

d z

b

g

EC

e

BRAT

czarny! B

A D

a

z

b

g

EC

e

Uwaga!

d

Page 139: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie z drzew RB c.d.

Przypadek 3 (L) => zamiana na przypadek 4

Kolor B bez zmian

B

A D

a

d z

b

g

EC

e

BRAT

czarny! B

A

Da

z

bg

E

C

e

d

Page 140: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie z drzew RB c.d.

Przypadek 4

Uwaga: kolor C bez zmian, kolor D taki, jak

B

B

A D

a

d z

b

g

EC

e

BRAT

czarny! D

EB

e

d

z

a

CA

b

Uwaga!

g

Page 141: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Narzuty czasowe

Wstawianie:

w czasie logarytmicznym (co najwyżej 2

przebiegi po drzewie), max. 2 rotacje

Usuwanie

w czasie logarytmicznym, max. 3 rotacje

Page 142: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wykład VII.

„Drzewa zrównoważone” (odc. 3)

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 143: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan

Drzewa Sleatora i Tarjana (Splay Trees)

B-drzewa i ich odmiany

Page 144: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa binarne typu „SPLAY”

Drzewa samoadaptujące się przez „przesuwanie ku wierzchołkowi”

najczęściej/ostatnio wyszukiwanych elementów

Heurystyki stopniowego przesuwania elementu

wyszukanego x ku korzeniowi przez rotację krawędzi łączącej x z parent(x)

przesuwania elementu wyszukanego do wierzchołka drzewa przez rotacje krawędzi x z parent(x) aż do samego wierzchołka drzewa

Page 145: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa binarne typu „SPLAY” c.d.

Rozwiązanie właściwe (Sleator & Tarjan, 1985)

udoskonalona II-ga z heurystyk

rozpatruje się trzy przypadki „splayingu”

Niech x oznacza węzeł, który został wyszukany

Przypadek 1. Parent(x) jest korzeniem drzewa.

wykonujemy rotację krawędzi <Parent(x), x> (lewą lub

prawą w zależności od geometrii)

Page 146: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa binarne typu „SPLAY” c.d.

Przypadek 2. x i Parent(x) są oba lewymi albo oba

prawymi dziećmi i Parent(x) nie jest korzeniem

(stosujemy pojed. rotacje)

1. rotacja krawędzi <G-Parent(x), Parent(x)>

2. rotacja krawędzi <Parent’(x), x> (zig-zig)

z

A y

xB

x

y

z

C D A B

C

D

1.

2.

Page 147: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa binarne typu „SPLAY” c.d.

Przypadek 3. x i Parent(x) są odpowiednio dzieckiem

lewym i prawym lub vice versa

1. rotacja krawędzi <Parent(x), x>

2. rotacja krawędzi <Parent’(x), x> (zig-zac)

z

A y

x D

x

z

B C

A B

y1.

2.

C D

Page 148: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa binarne typu „SPLAY” c.d.

„Splaying” powoduje, że znaleziony węzeł znajdzie się w wierzchołku drzewa, w lewym poddrzewie klucze mniejsze, w prawym większe (jak w drzewie BST)

Operacje na drzewach binarnych typu „SPLAY” wyszukiwanie

jak w drzewie BST

jeśli znajdziemy element – wykonujemy „splaying” począwszy od odnalezionego węzła, jeśli wyszukiwanie się nie powiodło – od ostatniego niepustego węzła

wstawianie klucza nie występującego w drzewie

usuwanie klucza występującego w drzewie

Page 149: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Operacje pomocnicze

łączenie drzew t1 i t2 (join) – założenie:

klucze z t1 mniejsze od kluczy z t2 wyszukujemy największy element w t1

towarzyszy temu „splaying” tak, jak przy

dowolnym wyszukiwaniu

t1 ma puste prawe poddrzewo – można

podłączyć zatem poddrzewo t2

Page 150: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

podział drzewa t na dwa drzewa t1 i t2(split), w których elementy drzewa t1 są

mniejsze od pewnej v, zaś elementów

drzewa t2 tej wartości większe

wyszukujemy v w drzewie t

wykonujemy „splaying”

wierzchołek z lewym poddrzewem to t1, t2 –

prawe poddrzewo

Operacje pomocnicze

Page 151: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstawianie

Wstawianie klucza v: dzielimy drzewo względem klucza v

(operacja split)

powstałe drzewo t1 staje się lewym poddrzewem drzewa zaczepionego w korzeniu zawierającym v, t2 zaś prawym poddrzewem

Usuwanie klucza v: wyszukujemy klucz v ze splayingiem – tj.

powodujemy przemieszczenie go do korzenia

usuwamy korzeń, łączymy dwa poddrzewa

Page 152: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Właściwości drzew typu „splay”

„Splaying” zmniejsza o połowę głębokość węzłów na ścieżce do korzenia

Drzewa „splay” są: dla dużej liczby wyszukiwań – jest ono równie jak w

dowolnym drzewie zrównoważonym

tak efektywne jak optymalne drzewa wyszukiwania;

czas dostępu do v można oszacować jako log (1 + N), gdzie N – liczba różnych kluczy wyszukiwana od czasu ostatniego dostępu do v (zbiór N+1 najczęściej wyszukiwanych elementów jest wyszukiwanych w czasie logarytmicznym), N<< liczby elementów w drzewie

Page 153: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa stopnia wyższego niż 2

2-3 drzewa

2-3-4 drzewa

B-drzewa

Page 154: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zasada konstrukcji wstawiania / usuwania.

Drzewa stopnia > 2 rosną do góry!

Faktycznie wstawiamy klucz w liściu

Strukturę drzewa korygujemy: albo w drodze od korzenia do liścia

albo w drodze od liścia do korzenia

Strategia prewencyjna przechodząc drzewo od korzenia tak je modyfikujemy, by

wstawienie/usuwanie klucza nie powodowało przepełnienia / niedopełnienia węzła (w 2-3 i 2-3-4 drzewach – pustości)

Strategia reaktywna znajdujemy właściwy liść

próbujemy umieścić/usunąć w nim klucz

w przypadku przepełnienia/niedopełnienia poprawiamy drzewo na ścieżce od liścia do korzenia

Nie w każdym przypadku działa każda strategia

Page 155: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

2-3 drzewa

Drzewa stopnia 2: każdy węzeł zawiera

co najwyżej dwa uporządkowane klucze,

wszystkie liście na tej samej głębokości

Page 156: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

2-3 drzewa c.d.

Wstawianie nowego klucza v (wiele odmian) drzewo rośnie do góry (!)

wstawiamy klucze tylko w liściach

poszukujemy miejsca na dany klucz przechodząc drzewo od korzenia do liścia (tak jak w wyszukiwaniu)

jeśli v nie mieści się w odnalezionym liściu –przebudowujemy drzewo: ustawiamy klucze wraz z vwg rosnącej kolejności i „środkowy” próbujemy umieścić w kolejnym wyższym węźle na ścieżce (i tak aż na samą górę)

nie działa wersja prewencyjna – nie da się a prioripoprawić

Page 157: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

2-3 drzewa c.d.

Usuwanie

trudno znaleźć w literaturze, ale …

łatwo wymyślić samemu

Page 158: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

2-3-4 drzewo

Własności:

wszystkie liście mają tę samą głębokość

każdy węzeł wewnętrzny może mieć 2, 3 lub

4 węzły potomne (poddrzewa)

B-drzewo o t = 2 (wg Cormen’a)

Page 159: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

B-drzewa - definicja

Węzeł x: N[x] – liczba kluczy pamiętanych w x

key1[x],...,keyn[x][x] – klucze w porządku niemalejącym

leaf[x] – pole wskazujące, czy dany węzeł jest liściem, czy węzłem wewnętrznym

węzły wewnętrzne zawierają n[x] + 1 wskaźników do synów (każdy węzeł zawiera n[x] + 1 następników)

klucze pamiętane w poddrzewach leżą w przedziałach wyznaczonych kluczami węzła

minimalny stopień drzewa t ogranicza maksymalną liczbę kluczy w danym węźle

węzeł różny od korzenia musi mieć co najmniej t – 1 kluczy

co najwyżej 2t – 1 kluczy

Page 160: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przykład B-drzewa

Wstawianie / usuwanie:

strategia prewencyjna: uniemożliwiamy

zaburzenie struktury przy wstawianiu /

usuwaniu

strategia reaktywna: gdy wystąpi zaburzenie,

to korygujemy strukturę drzewa

1 5 8 40 50

10 30

15 20 21 25

Page 161: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstawianie (t=3)

Wstawiamy tylko do liścia (!)

Przed przejściem od jednego węzł. wewn. do nast. sprawdzamy, czy węzeł nie jest pełny, jeśli jest pełny => rozbijamy – strat. prewencyjna!!!

Działa też strategia reaktywna!

10 20 30 40 50

10 20 40 50

30

5 8 40 50

10 30

15 20 25

20, 30, 10, 40, 50 ;

5, 8, 15, 25,

Page 162: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

B-drzewa usuwanie (prewencyjne)

Niech x oznacza węzeł, z którego usuwamy klucz k

Procedura rekurencyjna (uwaga: przed wywołaniem gwarantujemy, że liść (z wyjątkiem korzenia) ma co najmniej tkluczy) [strategia prewencyjna!]

1. x – jest liściem i zawiera k

2. x – jest węzłem wewnętrznym i zawiera k

3. x – jest węzłem wewnętrznym i nie zawiera k

Page 163: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

B-drzewa usuwanie c.d.1. [w liściu] Usuń k z liścia x

2. [w węźle wewn.]

a. jeśli y jest synem poprzedzającym x (co do wartości klucza) i

ma co najmniej t kluczy, to wyznacz następnik succ(k),

nadpisz nim k oraz rekurencyjnie usuń succ(k) z y;

b. jw. tylko y jest synem następującym po x (względem klucza

k)

c. następnik i poprzednik mają po t – 1 kluczy – scal, tj.

przenieś klucze z poprzednika do następnika i usuń k z x;

3. [nie w węźle wewn.] Wyznacz węzeł z, rozpocz.

poddrzewo, które może zawierać k - usuń rekurencyjnie k

z tego poddrzewa, jeśli z zawiera t – 1 elementów –

popraw drzewo [c.d.n]

Page 164: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie c.d. 3a) jeden z braci z (ozn. v) ma t kluczy (lub

więcej) – przenieś odp. klucz z x do z oraz z

v do x

3b) obaj sąsiedni bracia z mają t – 1 kluczy

– połącz i przesuń w środek nowego węzła

klucz rozdzielający z x

Page 165: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Usuwanie – przypadki 3a i 3b.

1 5 8 40 50

10 30

15 20

zv

1 5 40 50

8 30

10 15 20

zv

x x

1 5 8 10 15 40 50

30

1 5 8 15 40 50

30

del(20)

del(10)

Page 166: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład VIII „B-drzewa, dożynki,

statystyki pozycyjne, hashing”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 167: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Statystyki pozycyjne – problem

wyboru

Page 168: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Stat. pozycyjne – definicja zadania

Dany jest n-elementowy zbiór. Znaleźć i-ty

najmniejszy element

Przykłady:

min – 1’szy

max – n’ty

środkowy – mediana element (n+1)/2 ‘y lub

(n+1)/2 ‘y

Rozwiązanie intuicyjne:

sortujemy zbiór, sprawdzenie statystyki pozycyjnej

(dowolnej!) w czasie stałym (dla tablicy)

Page 169: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Rozwiązanie efektywne

Modyfikujemy sort. szybkie

proc. randomized-partition(A, p, r) można

nieco zmodyfikować, tak by dzieliła tablicę na

A[p…q-1], A[q+1…r], odp <= i > od el.

rozdziel i A[q] – element rozdzielający

Jak to zrobić?

Tym samym mamy 3 przypadki:

A[q] – jest szukaną i-tą statystyką

i-ta statyst. jest w lewej podtablicy A[p…q-1]

i-ta statyst. jest w prawej podtab. A[q+1…r]

Page 170: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Tablice z mieszaniem

(haszowanie, pamięć

rozproszona)

Page 171: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie – pomysł i problem

Zamiast porównywać wyszukiwany klucz, z kluczami w tablicy /drzewie (itp.)/ znajdujemy pozycję w tablicy na podstawie samej wartości klucza, tzn.

dana jest funkcja H(k): K –> I, gdzie:

K – zbiór kluczy,

I – zbiór indeksów

zauważmy, że zwykle: |K| >> |I|

szansa: wyszukiwanie/wstawianie/usuwanie w czasie stałym (!)

jeśli wyznaczenie H(k) nie jest „czasochłonne” obliczeniowo

K – zwykle zbiór liczb naturalnych

Page 172: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie – pomysł c.d.

Problem: kolizja

prawdopodobieństwo, że H(k)=H(k’), dla k

k’ /tzw. kolizja/ jest znaczące

paradoks dnia urodzin – prawd. kolizji daty

urodzin |I|=365, dla liczby ludzi |K|>= 23 jest

większe niż 50%!

Page 173: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Funkcje haszujące – wymagane właściwości

Równomierne rozrzucanie:

dla losowo wybranego klucza każda pozycja w

indeksie jest jednakowo prawdopodobna niezależnie

od odwzorowania innych kluczy

„Całkowite wypełnianie” zbioru I

W ogólności dobór funkcji haszującej zależy od

właściwości zbioru kluczy

np. dla k<0,1) [klucze – liczby rzeczywiste], H(k)=k

m, gdzie, |I| = m, haszuje równomiernie po tablicy m-

elementowej

Typowo: I = N

Page 174: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie

Dla kluczy nie całkowitoliczbowych –przekształcamy klucz w liczbę naturalną dla ciągów znaków: H(k) = (h1(c1) + h2(c2) + ...) mod m,

h1, h2 ... – pewna funkcja mieszająca

dla ciągów składających się z kilku liczb sklejamy poszczególne fragmenty klucza korzystając z operacji mod w lub xor

traktujemy tekst lub jego fragment jako liczbę w określonym systemie pozycyjnym – np. ab – w systemie 24-kowym...

Dalej na wykładzie rozważamy już tylko kluczebędące liczbami naturalnymi

Page 175: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Funkcje mieszające – haszowanie modularne

H(k) = k mod m /k – klucz

całkowitoliczbowy/

problem dobór m:

dobre m – liczba pierwsza,

m parzyste – zły wybór – miesza po połowie

przestrzeni 0...m (k – parzyste => H(k) –

parzyste, k – nie parzyste => H(k) nieparzyste)

m – 2k – obcięcie klucza do k najmniej

znaczących bitów klucza

Ogólnej reguły niema!

Page 176: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie przez mnożenie

H(k) = m (k A mod 1) x mod 1 – ułamkowa część x

A (0,1),

m – wielkość tablicy (chętnie 2p)

m – mało istotne – działa dla dowolnego

m

Page 177: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie – rozwiązywanie kolizji

metoda łańcuchowa

tablica jest de facto tablicą wskaźników –

normalnie wskazuje zero lub jeden element,

w przypadku kolizji dodajemy następne

elementy do tak zaczętych list

oczekiwana złożoność obliczeniowa przy

n<m : O(1)!

ile pesymistyczna?

Page 178: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie – rozwiązywanie kolizji

adresowanie otwarte

istota pomysłu: w przypadku kolizji sprawdzamy inne miejsce w tabeli, itd. aż do znalezienia wolnego miejsca

problem w usuwaniu….

trzeba oznaczać miejsca wolne, ale kiedyś zajęte

– stosujemy funkcję H(k, i), gdzie i – numer próby wyszukania/wstawienia

liniowe: próbkujemy kolejno: H(k), H(k) –1, H(k) – 2 itd. jeśli dotrzemy do pustego miejsca nie znalazłszy wcześniej klucza – klucza nie ma w tablicy – możemy wstawić nowy klucz lub stwierdzić brak klucza szukanego – H(k, i) = (H’(k) + i) mod m

haszowanie kwadratowe H(k, i)=(H’(k)+c1i+c2i2) mod m, i –

numer próby, c1, c2 – stałe całkowite;

Page 179: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie otwarte, podwójne

Z podwójnym haszowaniem H(k, i) = (h1(k)+ i*h2(k)) mod m; i – numer

próby

h1 – zwykła modularna funkcja haszująca

h2 – określa przyrost (o tyle skaczemy w kolejnych próbach znalezienia miejsca – i=0, 1, 2, 3, …)

h2 – dobrana tak, by przeglądać całą tablicę

h2 względnie pierwsze z m (m – liczba pierwsza) /war. przeglądania całej tablicy!!!/

Page 180: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie podwójne

Rozwiązanie przykładowe:

H1(k) = k mod m

H2(k) = 1 + (k mod (m – 1))

H(k, i) = {k mod m + i * (1 + (k mod (m – 1)))}

mod m

Page 181: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie - efektywność

Generalnie: średni czas wyszukiwania dla wypełnienia tablicy n/m<100% - jest stały

W metodzie łańcuchowej średni czas wyszukiwania

~ 1 + (n / m) – niepowodzenie

~ 1 + (n / m)/2 – powodzenie

W haszowaniu liniowym średni czas wyszukiwania:

½ + 1/(2*(1 – n/m)2) – niepowodzenie

½ + 1/(2*(1 – n/m)) – powodzenie

W haszowaniu podwójnym średni czas wyszukiwania

– 1/(1 – n/m) – niepowodzenie

–[1/(n/m)]*ln(1 – n/m) - powodzenie

Page 182: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

ZAJĘCIA ZASTĘPCZE,

???,

???

Page 183: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie uniwersalne(***)

Sytuacja: mamy haszowanie z łańcuchowym rozwiązywaniem

kolizji

Problem – złośliwy przeciwnik może nauczyć się funkcji haszującej

i złośliwe podawać wartości

Inaczej – mamy zbiór wartości, które chcemy wprowadzić do

tablicy haszującej

Rozwiązanie: losujemy funkcję haszującą ze zdefiniowanej rodziny

funkcji

Zapewniając, ze funkcja haszująca jest losowana z pewnego

„dobrego” zbioru funkcji gwarantujemy, że średni czas ciągu n

operacji jest liniowy względem n, tzn. czas pojedynczej operacji

jest stały

Haszowanie uniwersalne

„Dobry” zbiór funkcji – rodzina uniwersalna funkcji haszujących

Page 184: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie uniwersalne(***)

Rozwiązanie: losujemy funkcję haszującą ze

zdefiniowanej rodziny funkcji

Zapewniając, ze funkcja haszująca jest losowana z

pewnego „dobrego” zbioru funkcji gwarantujemy, że

średni czas ciągu n operacji jest liniowy względem

n, tzn. czas pojedynczej operacji jest stały

Haszowanie uniwersalne

„Dobry” zbiór funkcji – rodzina uniwersalna funkcji

haszujących

Page 185: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie uniwersalne

Rodzina uniwersalna funkcji haszujących rodzina H* = { h: H –> I} , że

liczba funkcji h w H* odwzorowujących dowolną parę różnych kluczy p i q w ten sam indeks tj. takich, że H(p)=H(q) jest nie większa niż |H*|/m, m=|I| (!)

uwaga H* liczniejsze od m (!)

mamy zatem do wyboru: |H*| funkcji, z czego |H*|/m dają kolizję, zatem, jeśli losowo wybieramy jedną H, to:

prawd. kolizji między k a l wynosi 1/m

w konsekwencji: czas wykonania serii wstawień i usunięć jest liniowy

Page 186: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Rodzina uniwersalna funkcji haszujących

Niech p – liczba pierwsza większa od największego „haszowanego” klucza

niech a{0, 1, …, p – 1} , b{1, 2, …, p –1}

ha,b(k)= ((a*k+b) mod p) mod m, p>m

ciekawe: m dowolna liczba, nie koniecznie pierwsza (m – liczba indeksów w tablicy)

Ha,b,= {ha, b} – jest rodziną uniwersalną (Cormen, str. 234, 235), |{ha, b}| = p*(p –1)

Page 187: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie doskonałe

Cel: dany jest statyczny zbiór danych. Należy zdefiniować

sposób wyszukiwania kluczy w czasie stałym.

Def. Haszowanie jest doskonałe, jeśli w pesymistycznym przypadku wymaga stałej liczby odwołań do tablicy

Rozwiązanie: analog do rozwiązywania kolizji łańcuchowo:

zamiast tworzyć listę elementów odwzorowywanych na dany indeks i tworzymy dodatkowe tablice z haszowaniem, starannie dobierając funkcje Hj

Page 188: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie doskonałe – konstrukcja rozwiązania

I poziom – rozrzucamy m kluczy w n miejsc za pomocą funkcji haszującej h„starannie” wybranej z uniwersalnej rodziny funkcji haszujących

II poziom – nj – liczba kluczy k, dla których H(k)=j; budujemy dodatkową tablicę haszującą dla

poszcz. j, gdzie mj = nj2

stosujemy starannie dobrane funkcje haszującą hj

Page 189: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie doskonałe

Lemat: jeśli n kluczy zapamiętujemy w tablicy o n2

elementów za pomocą funkcji haszującej losowo

wybranej z rodziny uniwersalnej funkcji

haszujących to prawdopodobieństwo jakiejkolwiek

kolizji jest mniejsze niż ½.

Dowód: wartość oczekiwana liczby kolizji:

newton(n, 2) / n2 < ½

W haszowaniu uniwersalnym w tablicy o n2 elementach

prawdopodobieństwo kolizji na parze różnych kluczy p i

q wynosi 1/n2

Pr(X>t) <= E[X]/t /wykorzystano nierówność Markowa,

dla t=1/

Page 190: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie doskonałe

Własność ta pozwala dla małych

zbiorów pozwala znaleźć funkcję

haszującą na tablicy o wymiarze n2,

dla większych wymaga haszowania 2

poziomowego

Znalezienie funkcji haszującej bez

kolizji wymaga „kilku prób” – funkcję

losujemy! /tak jak przy rzucie monetą

wyrzucenie orła/

Page 191: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie doskonałe – dobór funkcji

m = n – liczba kluczy

h1 – wybieramy z rodziny: Hp, m, gdzie p liczba pierwsza większa od dowolnej wartości klucza

hj – wybieramy z rodziny Hp, mj , gdzie mj – kwadrat liczby kluczy kolidujących na indeksie j Dlaczego? Por. poprzednie slajdy

Page 192: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Haszowanie doskonałe

Co z pamięcią?

okazuje się, że jeśli m=n, to wart.

oczekiwana sumy długości tablic drugiego

poziomu nie jest większa niż 2n

prawdopodobieństwo, że tablice 2 poziomu

zajmą więcej niż 4n<1/2

Page 193: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec - haszowania

Page 194: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład IX, „Kolejki priorytetowe i

kopce”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 195: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Dożynki – B-drzewa a drzewa czerwono-

czarne

Kopce / kolejki priorytetowe

Definicja

Kopce binarne

Kopca złączalne

Kopce dwumianowe

Kopce Fibbonacciego

Page 196: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Czasy operacji w B-drzewach

Na dyskach przechowujemy węzły B-drzewa

Operacji dyskowych tyle ile wysokość drzewa

Obliczeń tyle ile wyszukanie w węźle razy liczba przeszukiwanych węzłów Pesymistycznie wysokość drzewa logt N i liczba

odwiedzonych węzłów

Wyszukiwanie

w węzłach (liniowe dla małych t (rzędu t) lub binarne dla dużych t (log2t))

Wstawianie, usuwanie (zawierają wyszukiwanie i tego samego rzędu są ich pesymistyczne czasy)

Page 197: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Odmiany i modyfikacje B-drzew

Rekordy przechowujemy tylko w liściach,

przy wstawianiu, co najwyżej

„bąbelkujemy” w górę klucze (B+ drzewa)

liście wiążemy ze sobą sekwencyjnie –

mamy plik uporządkowany względem klucza,

który możemy przeglądać sekwencyjnie lub

swobodnie (przez B-drzewo)

Page 198: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Odmiany i modyfikacje B-drzew [c.d.]

B*-tree – utrzymujemy zapełnienie węzłów na poziomie 2/3, zamiast podziałów węzłów – dopóki można przesuwamy klucze z pełnego do niepełnego brata zamieniając węzeł rozdzielający

W efekcie (tu zakładamy, że pełny jest lewy węzeł o mkluczach oraz liczba kluczy w prawym bracie wynosi n < m – 1 [sens przenoszenia]): w lewym mamy (m+n) / 2 kluczy

w prawym mamy (m+n) / 2 kluczy (w tym klucz rozdzielający rodzica)

kluczem rozdzielającym staje się klucz K (m+n) / 2 + 1

Jeśli prawy brat jest pełny, to dzielimy na trzy, dwa klucze trafiają do rodzica (każdy nowy węzeł zawiera po ok. 2/3 kluczy)

Page 199: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Odmiany i modyfikacje B-drzew [c.d.]

Najczęściej odwiedzane strony (węzły)

zapamiętujemy w pamięci podręcznej przy braku pamięci usuwamy najdawniej

używaną stronę

usuwaną z pamięci stronę zapisujemy na dysku

pozwala ograniczyć liczbę operacji dyskowych

Page 200: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wykorzystanie B-drzew

System plików Macintosha

B*-tree

developer.apple.com/documentation/mac/Fil

es/Files-104.html

Page 201: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

RB drzewa i B-drzewa

X, Y, Z X

ba

Y

dg

Z

X, Y

ba dg

Y

ba

X gba g

X

Y

b

a

g

X

ba

X

a b

P.1.

P.2

P.3RB drzewo == B-drzewo

stopnia 2

Page 202: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

RB drzewa i B-drzewa c.d.

F, P, Z P

F Z

P.1.

F, K Z

P

ins(„K”)

P

K Z

F

Page 203: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

RB drzewa i B-drzewa c.d.ins(„N”)

F, K, N Z

PP

K Z

F N

ins(„G”)

F, G Z

K PP

K Z

F NN

G

Page 204: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kolejki priorytetowe

Page 205: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopce złączalne – definicja

Operacje na kopcach złączalnych (ang. Heap)

Insert(H, x) – wstawienie elementu x o kluczu key[x]

Minimum(H) – zwraca wskaźnik najmniejszego

elementu w kopcu H

Extract-Min(H) – usuwa z kopca H węzeł o

minimalnym kluczu

Union(H1, H2) – łączy kopce H1 i H2 w jeden kopiec

Decrease-Key(H, x, k) – zmienia wartość klucza

key[x] na k<= key[x]

Delete(H, x) – usuwa węzeł x z kopca H

Page 206: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec binarny

Insert(H, x) – wstawiamy „na koniec” i przesuwamy w góre (czas log)

Minimum(H) – jasne (wierzchołek) (czas stały)

Extract-Min(H) – zamieniamy wierzchołek z ostatnim węzłem (czas log)

Union(H1, H2) – budujemy nową tablicę i robimy z niej kopiec (czas liniowy)

Decrease-Key(H, x, k) – przesuwamy po kopcu w górę (czas log)

Delete(H, x) – (czas log)

Page 207: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopce dwumianowe

Page 208: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopce dwumianowe – definicja

Kopiec dwumianowy H jest zbiorem

drzew dwumianownych o nast.

właściwościach:

key[x]key[parent[x]] /klucz w węźle jest nie

mniejszy niż klucz ojca – własność kopca/

dla każdego stopnia d 0 istnieje w kopcu co

najwyżej jedno drzewo dwumianowe

Page 209: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa dwumianowe – def. i przykład

Bk-1

Bk-1

B0

B1 B2 B3

Definicja

Przykład

B0

Page 210: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa dwumianowe – właściwości

Jeśli Bk jest drzewem dwumianowym, to:

zawiera ono 2k węzłów;

ma wysokość k;

dokładnie symb_newt(k, i) (ka nad i) węzłów

znajduje się na głębokości i

jeśli synów korzenia ponumerujemy od k – 1

do 0, to węzły te są korzeniami drzew Bk-1,

Bk-2, ..., B0 /z definicji/

Page 211: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy właściwości

Kopiec dwumianowy, w którym

najwyższy stopień drzewa wynosi d

zawiera co najwyżej (2d+1 – 1) elementów

Odwrotnie: liczba drzew w kopcu

dwumianowym o n elementach jest nie

większa niż log2 n + 1 (ile bitów

potrzeba by zapisać n)

Page 212: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy jako struktura danych

Drzewa dwumianowe zapamiętujemy zgodnie

z regułą: na lewo syn, na prawo bracia (węzły

na tym samym poziomie tworzą listę)

x=(key, parent, child, sibling, degree)

child – wskazuje skrajnie lewego syna węzła x

sibling – wskazuje brata z prawej strony węzła x

degree – liczba synów węzła x

Lista korzeni drzew jest uporządkowana wg

stopnia (rosnąco)

Page 213: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy - przykład

35

10 15

57

26

12 11

6

19

18 17

1Head(H)

Page 214: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy – operacje

Minimum(H) przeglądamy listę korzeni drzew od x=head(H),

kolejno przez x=sibling(x), do końca listy korzeni –złożoność proporcjon. do liczby drzew w kopcu

Union(H1, H2) /łączenie dwóch kopców/ pomysł (pierwsze przybliżenie):

drzewa o tych samych stopniach w obu kopcach łączymy w nowe drzewo dwumianowe w wyniku połączenia drzew Bk powstaje drzewo Bk+1,

które może powstać z drzewa Bk, które trzeba będzie połączyć z innym drzewem Bk

drzewa o różnych stopniach dodajemy do listy drzew (w odpowiednim miejscu)

Page 215: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy – łączenie Łączenie – szczegóły:

łączymy listy korzeni obu kopców H1 i H2, tak by na nowo powstałej liście korzeni stopnie drzew zaczynających się w nich były ułożone niemalejąco

w wyniku utworzenia listy i wcześniejszego łączenia drzew mogą wystąpić następuj. sytuacje (x – oznacza badany korzeń):

1. x i sibling[x] mają różne stopnie => zostawiamy je na liście, przesuwamy x na sibling[x]

2. x jest pierwszym z trzech korzeni o tym samym stopniu (możliwe tylko w wyniku wcześniejszego połączenia drzew) => przesuwamy x jak w przypadku 1 /skąd ten przypadek/

3. x jest pierwszym z dwóch korzeni o równych stopniach łączymy drzewa zaczynające się w x i w sibling[x], przy czym korzeniem nowego drzewa zostaje x jeśli key[x] < key[sibling[x]] lub sibling[x] w innym razie

Page 216: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy – łączenie

Uwaga: łączenie kopców działa w czasie

proporcjonalnym do liczby drzew w obu

kopcach

Page 217: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy – wstawianie,

usuwanie najmn.

Wstawianie /Insert(H, x)/

tworzymy kopiec H1 – jednoelementowy zawierający x

scalamy z kopcem H: Union(H1, H)

Extract-Min(H) /usuwanie najmn. elem./

znajdujemy korzeń x o najmniejszym key[x]

usuwamy korzeń z listy korzeni

odwracamy kolejność dzieci węzła x i tworzymy z niej

kopiec H1

Union(H, H1) /uwaga: H ma usunięte drzewo, które

zawierało korzeń/

Page 218: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy –

zmniejszanie wart. klucza

Decrease-key(H, x, k) /uwaga key[x]>k/

jeśli zmniejszony klucz k jest mniejszy od

key[parent[x]], to zamieniamy dane x i parent[x]

przesuwamy x:=parent[x] itd.

Procedura analogiczna do przesiewania w

kopcu binarnym

Delete(H, x) /usuwanie/

Decrease-key(H, x, -)

Extract_min(H)

Page 219: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec dwumianowy – złożoność /

czasy operacji

Insert(H, x) – ~log2(n)

Minimum(H) – max. log2 n + 1 /l-ba

sprawdzeń

Extract-Min(H) – ~log2(n) (znalezienie min,

odwrócenie listy korzeni i złączenie)

Union(H1, H2) – ~(log2(n1) + log2(n2))

Decrease-Key(H, x, k) – co najwyżej log2 n

/głębokość drzewa/

Delete(H, x) – ~log2(n)

Page 220: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopce Fibbonacciego

Page 221: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopce Fibbonacciego

Rozluźniamy warunki dla kopca dwumianowego:

lista korzeni nieuporządkowana wzgl. stopnia

kopiec składa się w przybliżeniu (z wyjątkiem niektórych przypadków) z nieuporządkowanych drzew dwumianowych – jeśli stopień korzenia wynosi k>0, to drzewo Uk składa się z dwóch nieuporządkowanych drzew dwumianowych Uk-1 w których jedno jest dowolnym synem drugiego

synowie korzenia drzewa Uk tworzą cykliczną nieuporządkowaną listę korzeni drzew Uk-1, ..., U0

dzieci danego węzła tworzą listę cykliczną,

Uwaga: brak uporządkowania i cykliczność pozwalają wykonać operacje łączenia list i usunięcia elementu z listy w czasie stałym!

Page 222: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopce Fibbonacciego

Składowe węzła:

x=(key, left, right, parent, degree, mark)

left i right – służą do budowy listy cyklicznej

degree – liczba dzieci węzła

mark – czy węzeł stracił syna od ostatniej chwili,

kiedy sam został synem innego węzła /tzw. węzeł

zaznaczony/

Składowe opisujące kopiec:

H=(min, n)

min – wskazuje najmniejszy element w kopcu

(zapewnia dostęp do listy korzeni)

n – liczba węzłów w kopcu H

Page 223: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec Fibbonacciego – przykład

6

19

18 17

1

26

126

Head(H)

39

28 20

Page 224: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. - operacje

Porządkowanie struktury odkładamy na

później (tu: do operacji: Extract-min),

większość operacji pogłębia chaos

Wstawianie /Insert(H, x)/:

tworzymy jednoelementową listę cykliczną

zawierającą x;

dodajemy ją do cyklicznej listy korzeni

aktualizujemy min[H] oraz n[H]

Page 225: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. – operacje c.d.

Min(H) – trywialne

Union(H1, H2) łączymy listy korzeni kopców H1 i H2;

ustal nowe min[H] oraz n[H]

Wszystkie powyższe operacje działają w czasie stałym (same przypisania, żadnych iteracji)!!!!

Opeacje: Extract-min, Decrease-Key oraz Delete-Key – skomplikowane

Page 226: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. – usuwanie najmn.

Extract-Min(H) – ogólnie: znajdujemy węzeł minimalny

usuwamy węzeł minimalny z listy korzeni, listę korzeni poddrzew drzewa minimalnego wstawiamy do listy korzeni

w liście korzeni łączymy korzenie tego samego stopnia czyniąc węzeł x synem węzła y, gdy key[x] > key[y], operację tę kontynuujemy dopóty, dopóki na liście korzeni są tylko korzenie różnych stopni (pole degree)

Page 227: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. – scalanie drzew

Scalanie wykonujemy po usunięciu elementu

minimalnego i wstawieniu odp. poddrzew do

listy korzeni kopca

Na czym polega trudność:

Lista cykliczna korzeni nie jest uporządkowana

względem stopnia

Lista cykliczna korzeni może zawierać wiele drzew

tego samego stopnia (np. w wyniku scalenia lub

wstawiania – stopień 1)

Efektywna realizacja operacji scalania …

Page 228: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. – scalanie szczegóły

Rozwiązanie: budujemy tablicę A[0...max_deg(n[H])) wskaźników

korzeni

max_deg(n)=lgf n, f=(1 + sqrt(5))/2 (wsp. złotego podziału)

inicjujemy wskaźnikami pustymi

przeszukujemy listę korzeni drzew kopca (x – kolejny korzeń, d[x] jego stopień )

A[d] jest puste, to przypisujemy mu wskazanie na x

w przeciwnym razie łączymy A[d] z x w zależności od wartości key[x] i key[A[d]], „zerujemy” przypisanie A[d], adres korzenia powstałego drzewa zapamiętujemy w A[d+1]

z wpisów w tablicy A tworzymy listę korzeni i ustalamy wskaźnik min[H] itp.

Page 229: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. – zmniejszanie wartości klucza

decrease-key(H, x, k): /kkey[x]/ (!)

Dwa przypadki:

nowa wartość klucza nie narusza porządku w kopcu => struktura bez zmian

jeśli narusza: „wprowadzamy kontrolowany bałagan”

zasadniczo: odcinamy x od jego ojca (wraz z całym poddrzewem) i dodajemy do listy korzeni

(*) odcinając węzeł sprawdzamy, czy ojciec był zaznaczony, jeśli nie był – zaznaczamy i koniec, jeśli był –odcinamy i dodajemy do listy korzeni i idziemy dalej w górę drzewa

danemu węzłowi można „bezkarnie” odciąć tylko jedno poddrzewo

jeśli x stało się w pewnym momencie korzeniem, to jest „odznaczane”

przypadki brzegowe:

x jest korzeniem – nie trzeba nic zmieniać (poza max[H])

Page 230: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. – usuwanie węzła

Delete(H, x)

Decrease-Key(H, x, -)

Extract-Min(H)

Tak jak w kopcach dwumianowych (!)

Page 231: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec Fibb. – czasy operacji

stały: min, union

O(D(n)) – extract min

decrease-key – czas stały

delete – O(D(n))

D(n) lgf n

Page 232: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Porównanie kopców

Operacja K. binarny

cz. pesymist.

K. dwumian.

cz. pesym.

K. Fibb

cz. zamort.

Insert (lg n) O(lg n) (1)

Min (1) O(lg n) (1)

Extract-min (lg n) (lg n) O(lg n)

Union (n) O(lg n) (1)

Decrease-key (lg n) (lg n) (1)

Delete (lg n) (lg n) O(lg n)

Page 233: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 234: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład X, XIWprowadzenie do algorytmów grafowych.

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 235: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan do końca semestru

Algorytmy grafowe cz. I

Algorytm grafowe cz. II

Programowanie dynamiczne i metody

zachłanne

Algorytmy tekstowe – rewizyta

Page 236: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Uwagi o reprezentacji grafów

Podstawowe algorytmy grafowe

Problem minimalnego drzewa

rozpinającego graf:

algorytmy Prima i Kruskala

Problem najkrótszej ścieżki

algorytmy Dijkstry i Bellmana-Forda

Page 237: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Reprezentacja grafów

Macierz połączeń n na n, gdzie n – liczba

wierzchołków

Listy sąsiedztwa – dla każdego

wierzchołka v lista wierzchołków, do

których można przejść z v

Page 238: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Grafy – implem. listowa

__

1

2

3

4

5

1

2

3

4

5

3 5 x

1 5 x4

tablica lub lista

wierzchołków

lista wierz.

osiągalnych

bezpośred.

z 1 węzła

Page 239: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przeszukiwanie wszerz

Idea: zaczynamy od wybranego wierzchołka

początkowego

z każdego wierzchołka odwiedzamy kolejno wszystkie dostępne (idziemy wszerz!), a nie odwiedzone do tej pory wierzchołki; robimy tak dopóki jest jeszcze jakiś nie odwiedzony wierzchołek

Problem: jak zapobiec powtórnemu odwiedzaniu wierzchołków?

Page 240: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przeszukiwanie wszerz - szczegóły

Rozwiązanie:

początkowo wierzchołki kolorujemy na biało;

wierzchołki dopiero co odwiedzone

kolorujemy na szaro,

wierzchołki, z których odwiedzono już

wszystkich sąsiadów kolorujemy na czarno

(ta zmiana jest właściwie bez znaczenia)

Page 241: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przeszukiwanie wszerz – algor.

Wierzchołki grafu są na początku koloru

białego, wierzchołek początkowy s koloru

szarego

Wstawiamy s do kolejki

Pętla trwająca dopóki kolejka wierzchołków jest

nie pusta:

wyjmujemy wierzchołek u z kolejki,

wszystkie białe wierzchołki v osiągalne z u

zaznaczamy na szaro, parent(v)=u, wstawiamy v do

kolejki

Usuwamy u z kolejki i kolorujemy na czarno

Page 242: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Właściwości algorytmu i rozwiązania

Algorytm znajduje najkrótsze ścieżki, w sensie

liczby pokonywanych krawędzi, między s a

dowolnym węzłem

obserwacja ilustrująca powyższą własność: węzły

położone bliżej od s znajdują się (są umieszczane) w

kolejce przed, tymi które są położone dalej

użycie kolejki FIFO jest obligatoryjne!

Czas działania: inicjacja (V), przeszukiwanie E –

czas proporcj. do |V| + |E|

Page 243: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przeszukiwanie w głąb

Idea:

z każdego wierzchołka idziemy do

następnego itd. najdalej, jak się da, dbając

by nie odwiedzać odwiedzonych wcześniej

wierzchołków

gdy nie mamy dokąd pójść (wszyscy sąsiedzi

zostali odwiedzeni) wracamy do wierzchołka,

z którego przeszliśmy do danego i

poszukujemy „otwartych” dróg

Page 244: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przeszukiwanie w głąb – szczegóły

Wierzchołki grafu kolorujemy na biało, zerujemy wskaźniki poprzedników w ścieżce przeszukiwania (parent) i wskaźniki czasu d i f

time:=0 // zmienna globalna

Dla każdego białego wierzchołka v aplikujemy procedurę visit(u) zmień kolor u na szary, time:=time+1; d(u)=time

dla każdego białego wierzchołka v połączonego z wierz. u,

parent(v)=u; wywołaj rekurenc. visit(v)

pokoloruj u na czarno, time:=time+1

f(u)=time

Page 245: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przeszukiwanie w głąb - właściwości

Procedurę można zrealizować z

wykorzystaniem stosu (nie jest to zupełnie

oczywiste)

W efekcie, traktując początek odwiedzin jako otwarcie

nawiasów, a koniec jako zakończenie otrzymujemy

poprawne wyrażenie nawiasowe

Można pokazać, że przedziały <d(u), f(u)> oraz <d(v),

f(v)> są albo całkowicie rozłączne, albo całkowicie

zawierają się w sobie dla dowolnej pary wierzchołków

Czas: prop. do |V| + |E|

Page 246: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie topologiczne

Zadanie: dany jest acykliczny graf

skierowany, wierzchołki grafu należy

uporządkować (tzn. określić wartości

całkowite f(v) dla każdego wierzchołka v),

tak że jeśli krawędź (u, v) należy do

grafu, to wierzchołek u występuje przed v

(tzn. f(u) < f(v))

Page 247: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie topologiczne – algorytm

//modyfikacja przeglądania w głąb

przeglądaj w głąb wyznaczając f(v), jak

tylko v zostanie całkowicie przetworzony

wstaw go na początek listy

wynik – lista wierzchołków

Page 248: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie topologiczne - zastosowania

Typowe:

grafy reprezentujące kolejne etapy

przedsięwzięcia są acykliczne jeśli

przedsięwzięcie ma początek i koniec

można w ten sposób wyznaczyć kolejność

czynności

Page 249: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Problem minimalnego drzewa rozpinającego

Minimum Spanning Tree

Szukamy takiego, spójnego,

acyklicznego podzbioru krawędzi, że:

suma wag tych krawędzi jest najmniejsza z

możliwych

Page 250: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zastosowania ST

rozwiązywanie pętli w warstwy łącza

danych sieci komputerowych

SW

SW

SW

SW

Page 251: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Kruskala

„Hodowanie lasu”

A = zbiór pusty

dla każdego wierzchołka v grafu G

Make-Set(v)

dla kolejnych krawędzi (u, v) w kolejności

niemalejących wag (kolejka priorytetowa(?))

jeżeli Find-Set(u) <> Find-Set(v) // czy krawędź

należy do tego samego drzewa

A = A {(u, v)}

Union(u, v)

wynik zawarty w zbiorze A

Page 252: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Struktury danych dla zbiorów

rozłącznych

Page 253: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Struktury danych dla zbiorów

rozłącznych

Dana jest rodzina rozłącznych zbiorów {S1, S2, ..., Sk}

Reprezentant – element zbioru Si

reprezentujący ten zbiór, pytając dwukrotnie powinniśmy otrzymywać tą samą odpowiedź

Operacje: Make-Set(x) tworzy zbiór o jedynym elem. x

Union(x, y) – suma zbiorów zawierających x i y(usuwa oba z rodziny, wstawia ich sumę)

Find-Set(x) – zwraca wskaźnik reprezentanta zbioru zawierającego x

Page 254: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Reprezentacje: listowa

Listowa:

pierwszy element listy – reprezentant

każdy element ma wskaźnik następnika oraz reprezentanta

Operacja Find-Set, Make-Set w czasie stałym

Operacje scalania: łączymy listy, uaktualniamy wskaźniki

(na nowego reprezentanta!) – czas liniowy

Page 255: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Reprezentacje: las drzew rozłącznych

Każde drzewo reprezentuje jeden zbiór

Każdy element zawiera jedynie wskaźnik do swego ojca

Korzeń zawiera reprezentanta, wskaźnik ojca wskazuje na niego samego

Operacje: Make-set – czas stały,

Find-set – spacer aż do korzenia, w niekorzystnym przypadku czas liniowy

Union – operacja scalania zamienia wskaźnik ojca w jednym z drzew na korzeń drugiego drzewa

Page 256: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Las drzew rozłącznych c.d.

Wersja podstawowa daje pesymistyczny czas liniowy

Łączenie wg rangi lub liczby elementów (Diks)–przyłączamy mniejsze do większego lub niższe do wyższego

find-set(x) z kompresją ścieżki: wszystkie wierzchołki na drodze od x do reprezentanta zbioru przepinamy do tego reprezentanta (deklarujemy go jako ojca każdego z tych wierz.)

czas wykonania ciągu m operacji na n elem. rodzinie – ca. liniowy względem m (stały wzgl. n– b. wolno rosnący wzgl. n)

Page 257: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przykład zastosowania

Podział grafu nieskierowanego na spójne

składowe:

utwórz rodzinę jednoelementowych zbiorów

zawierających poszczeg. wierzchołki grafu

dla każdej krawędzi (u, v)

jeśli Find-Set(u) <> Find-Set(v) //jest połączenie

Union(u, v)

Page 258: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Kruskala

„Hodowanie lasu”

A = zbiór pusty

dla każdego wierzchołka v grafu G

Make-Set(v)

dla kolejnych krawędzi (u, v) w kolejności

niemalejących wag (kolejka priorytetowa(?))

jeżeli Find-Set(u) <> Find-Set(v) // czy krawędź

należy do tego samego drzewa

A = A {(u, v)}

Union(u, v)

wynik zawarty w zbiorze A

Page 259: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Prima

Badanie kosztu połączenia przekroju

grafu (węzły grafu dzielimy na podzbiory

Q oraz V – Q), do V – Q stopniowo

dodajemy kolejne węzły, przez które

przechodzi drzewo rozpinające

wybór węzła – najniższy koszt połączenia

między węzłami wchodzącymi w skład

drzewa (V – Q) a pozostałą częścią

przekroju: Q.

Page 260: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Prima – szczegóły

Prima(G, r) // r – węzeł początkowy, przyjm. arbitralnie ładujemy wszystkie węzły do kolejki Q, key(Q)=,

dla r przypisujemy key[r]=0 (żeby określić co wyjmujemy)

dopóki Q niepusta => u=Extract-Min(Q)

dla każdego v takiego, że istnieje krawędź (v, u) jeśli v jest w Q (tzn. nie ma jej jeszcze w drzewie) i waga

krawędzi (v, u) < key(v)

zaktualizuj wartość klucza w kolejce

wskaż u jako potencjalnego ojca v w drzewie

W kolejce na początku stoją wierzchołki, które mają połączenie z już odkrytym drzewem

Page 261: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Prima a kopce (!)

Do realizacji możemy użyć kopca binarnego utworzenie kolejki: Build-heap – czas proporcjonalny

do |V|

pętla główna |V| razy

każde Extract-Min – proporcj. do log2 |V|, łącznie |V| log2 |V|

wyszukiwanie sąsiednich krawędzi: łącznie 2|V|

badanie przynależności do Q –w czasie stałym (znacznik)

zmiana wartości klucz – Decrease-Key – log2 |V|

razem: proporcj. do (|V|log2|V| + E log2|V|)

Page 262: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Prima a kopca c.d.

Dla kopca Fibbonacciego

zysk na Decrease-Key – czas stały

daje to czas proporcj. do E + |V| log2 |V|

Page 263: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Problem najkrótszej ścieżki

Ścieżką w grafie nazywamy ciąg węzłów

tego grafu p=(v1, v2, ..., vk) //warunek

połączenia

Wagą ścieżki p jest suma wag krawędzi

tworzących tę ścieżkę

Page 264: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Dijkstry

Prawie identycznie jak algorytm Prima tylko dla

grafu skierowanego o wagach nieujemnych ...

no i z tzw. relaksacją

czynności wstępne: dla wszystkich wierzchołków d[v]

= (estymata odległości od wybranego wierzchołka

s), p[v]=nil (wskaźnik poprzednika na ścieżce), d[s]=0

(źródło)

relaksacja krawędzi (u, v):

stwierdza, czy przechodząc przez wierzchołek u

można znaleźć krótszą ścieżkę do v, a jeśli tak, to

aktualizowane jest d[v] i p(v)

Page 265: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Dijkstry – relaksacja

Relax(u, v) jeżeli d[v] > d[u] + w(u, v) wtedy

d[v] = d[u] + w(u, v)

Dijkstra(s) czynności wstępne, S – zbiór pusty, do kolejki

priorytetowej Q (uwaga! – klucz – d(v)) wstawiamy wszystkie węzły grafu

dopóki kolejka priorytetowa Q nie pusta u=Extract-Min(Q)

S = S {u}

dla każdego wierzchołka v sąsiadującego z u Relax(u, v) // wyznacz nowe estymaty odległości od s

Page 266: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Dijkstry – implem.

Kolejka Q jako

lista liniowa – daje czas działania algorytmu

rzędu |V|2

dla grafów rzadkich – kopiec binarny, czas

działania (|V|+|E|) log |V| (relaksacja jako

Decrease-Key)

kopiec Fibbonacciego – |E|log|V| + |E|

Page 267: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Belmana-Forda

Procedura

Wykonaj czynności wstępne (jak w alg.

Dijkstry)

wykonaj |V| – 1 razy

relaksację wszystkich krawędzi grafu

sprawdź czy nie ma cyklu o ujemnej wadze:

jeśli d(v) > d(u) + w(u, v), to jest cykl o ujemnej

wadze [sprzeczny wynik obliczeń – krócej jest

do v przez u, niż to co oszacowano!]

Page 268: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Belmana-Forda

Działa w czasie prop. do (V * E)

Wyjaśnienie konstrukcji skąd taka liczba iteracji?:

rozważmy graf składający się z N węzłów, każdy jest następnikiem poprzedniego węzła (szereg) i rozważmy działanie algorytmu

zapewnienie propagacji informacji od źródła

Algorytm ma wersję równoległą stanowi podstawę protokołu routingu RIP

podstawowego w sieciach TCP/IP

Page 269: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 270: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład XII„Wyszukiwanie wzorców w tekście”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 271: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Drzewa zrównoważone

algorytm naiwny

algorytm Rabina-Karpa

algorytm z wykorzystaniem automatu

alg. Knutha-Morrisa-Pratta (KMP)

alg. Boyer’a-Moore’a (B&M)

Page 272: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie wzorca

w tekście

Page 273: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sformułowanie problemu

Dany jest:

n, m – naturalne, n >> m

T[1…n] – łańcuch znaków

P[1…m] – wzorzec szukany w T

Zadanie, znaleźć takie przesunięcie

s{0, 1, ..., n – m + 1} wzorca, że:

P[1...m] = T[1+s ... s + m]

„przesunięty o s wzorzec pasuje do tekstu”

Page 274: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm naiwny

Sprawdzamy warunek

P[1...m]=T[s+1...s+m], dla s=0...n – m + 1

W pesymistycznym przypadku czas jest

proporcjonalny do (n – m+1)*m

T=aaaaaaaaaaaaaaaaaaaaa, W=aaaab

Wada:

nie korzystamy z informacji o tekście

uzyskanej przy sprawdzaniu dla

poprzedniego s.

Page 275: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Rabina-Karpa

Idea:

ograniczamy liczbę porównań całego wzorca

do przypadków „bardziej” prawdopodobnych

Realizacja:

traktujemy W jako liczbę w (dla uproszczenia

zakładamy tu, że alfabet A={0, 1, 2, ..., 9})

wszystkie badane podsłowa zapisujemy jako

liczbę ts=10m * T[s+1]+10m-1 * T[s+2] + .... +

10 * T[s+m-1] + T[s+m]

_, _, _ s+1, s+2, ..., s+m- s+m, s+m+1, _

Page 276: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Rabina-Karpa

ts=10m-1 * T[s+1]+10m-2 * T[s+2] + .... + 10

* T[s+m-1] + T[s+m]

_, _, _ s+1, s+2, ..., s+m- s+m, s+m+1, _

_, _, _ s+1, s+2, ..., s+m- s+m, s+m+1, _

ts+1=10m-1 * T[s+2]+10m-2 * T[s+3] + .... + 10 *

T[s+m] + T[s+m+1] = ts * 10 – 10m * T[s+1] +

T[s+m+1]

możemy liczyć ts+1 na podstawie ts przy

małym nakładzie obliczeń.

Page 277: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Rabina-Karpa

s jest prawidłowym przesunięciem, jeśli

ts=w

Jeśli

w możemy obliczyć w czasie prop. do m

(liczymy raz, najefektywniej schematem

Hornera)

wszystkie wartości ts w łącznym czasie

proporcjonalnym do n, to cała złożoność

zamknie się czasem proporcjonalnym do n +

m

Page 278: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Rabina-Karpa

Problem: w i ts mogą być duże!

Rozwiązanie: operacje wykonujemy mod q, gdzie q dobiera się tak, że 10q mieści się w słowie komputera, ogólnie dla d-elementowego alfabetu d*q winno mieścić się w słowie maszyny

Problem: ts =mod q w nie implikuje T[s+1...s+m] = W[1...m] – liczby mogą być kongruentne (?) (przystają, tzn. mają tą samą resztę z dzielenia)

Rozwiązanie: dla ts=w – sprawdzamy, sprawdzeń nie będzie „dużo”, jeśli q jest odpowiednio duże!!!

Czas działania: proporcj. do m + n + czas na weryfikację błędnych strzałów

Page 279: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Rabina-Karpa

Można przyjąć, że liczba błędnych

strzałów nie przekracza n/q (1/q –

prawdopodobieństwo, że ts przystaje do

w mod q)

Czas oczekiwany jest proporcjonalny do

n + m

Page 280: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy wysz. wzorca + automaty

skończone

Pomysł:

budujemy automat rozpoznający wzorzec

zbudowany automat „karmimy” tekstem –

każdy znak jest wtedy badany jeden raz =>

czas proporcjonalny do N

problem:

czas zbudowania automatu

Page 281: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Automaty skończone

M = (S, s0, SA, A, d):

S – zbiór stanów

s0 – stan początkowy

SA – zbiór stanów akceptujących

A – alfabet wejściowy

d: A S S – funkcja przejść

Page 282: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Automat rozp. wzorzec przykład

W = abab

0 321a b a

4b

a

a

Pominięto: linie

prowadzące z powrotem

do stanu 0

automat nie zawsze jest łatwo skonstruować

(powroty w różne miejsca):

bacabacaba

konstrukcja winna polegać na określeniu

sposobu powrotu

Page 283: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm wykorzystujący automat

S = 0; /stan początkowy/

dla i=1...n

S= d(T[i], S)

jeżeli S=m /stan końcowy/ => znaleziono

wzorzec – wypisz przesunięcie s = i – m

Page 284: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Budowa automatu skończonego rozpozn.

wzorzec

W naszym przypadków składowe automatu definiujemy następująco: S={0, ..., m} /liczba zaakceptowanych

znaków/;

d(a, s) = (Wsa), aA, Ws – s znakowy przedrostek (prefiks) wzorca

(x) = max{k: suffix(Wk,x)}, ozn. to, że wartością funkcji jest długość najdł. prefiksu (przedrostka) wzorca, który jest także sufiksem x

np. W=aca, (acabaca)=3, (acbac)=2,

Page 285: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Automaty skończ. rozp. wzorzec

W=bacabacaca

d(b, 4) = 5 długość najdłuższego prefiksu

W będącego jednocześnie przyrostkiem

{b b} lub {ba b} {bac b} {baca b}

{bacabb}... /W4=baca/ {baca b}

d(b, 8) = 5, długość najdłuższego prefiksu

W, będącego przyrostkiem bacabacab

/bacab/

Page 286: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Szkic algorytmu /z definicji automatu/

przeglądamy wszystkie stany s={0...m}, w stanach s dla wszystkich znaków alfabetu {A, ..., Z}

wejściowego, badamy

długość najdłuższych przedrostków wzorca będących przyrostkami {Ws a}

dla małych wzorców czas budowy automatu nie jest wielkim problemem (czas proporcjonalny do m3*|A|)

jak rozwiązać problem budowy automatu dla dłuższych wzorców – algorytm Knutha-Morrisa-Pratta.

Page 287: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm KMP i B&M

Idea:1. Wróćmy do algorytmu naiwnego

2. KMP: w każdym przesunięciu wykonujmy dokładnie tyle porównań tekstu ze wzorcem ile naprawdę potrzeba (wyeliminujmy porównania „beznadziejne”)

3. B&M: badajmy tylko takie przesunięcia, które naprawdę coś rokują, skaczmy po tekście pomijając miejsca, do których na pewno wzorzec nie pasuje

Page 288: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

ALGORYTM

KNUTHA-MORRISA-PRATTA

Page 289: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm KMP – szkic (wreszcie)

Dana jest funkcja (j), j=1...m wskazująca, jakie przesunięcia wzorca warto sprawdzić, gdy W[j+1] różne od T[i] (kolejny znak wzorca nie zgadza się z kolejnym znakiem tekstu);

Algorytm KMP niech i i j zmienne takie, że: ostatnie j znaków wzorca

zgadza się z tekstem aż do i-tego jego znaku tekstu T;

dla każdego i

jeśli następny znak wzorca W[j+1] nie pasuje do T[i], to badamy, czy pasuje do wzorca przesuniętego o j:=(j), jeśli nie – powtarzamy j:=(j), aż j = 0 (nie ma czego szukać, trzeba badać następny znak tekstu);

jeśli pasuje – zwiększamy j i testujemy następny znak.

Rysunek!

abaababa

Page 290: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Co to jest funkcja ( )?

(q), określającą maksymalną długość

prefiksu Wq, która jest jednocześnie jego

sufiksem:

(q)={max k: k<q i Pk sufiksem Pq},

(1)=0

przewaga funkcji prefiksowej nad funkcją

przejść automatu: łatwo i szybko się ją

wyznacza...

Page 291: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm KMP

Dla wzorca W=„baababab”, mamy:

(8)=0 (W8=„baababab”, Wk,max= „”)

(7)=2 (W7=„baababa”, Wk,max= „ba”)

(6)=0 (W6=„baabab”, Wk,max= „”)

(5)=2 (W5=„baaba”, Wk,max= „ba”)

....

Dla wzorca W = „bababababa”, dla

wzorca W=„aaaaaaaaaaaaaaa”

Page 292: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm KMP – budowa funkcji prefiksowej

Znajdowanie (q)

(1)=0, k=0

dla q=2,...,m

dopóki k>0 i W[k+1] W[q] (1)

k:= (k)

jeżeli W[k+1] = W[q] wtedy k=k+1 (2)

(q)=k (3)

Page 293: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm KMP - efektywność

Czas działania nie gorszy niż

proporcjonalny do n + m (!!!)

W dalszym ciągu wiele testów

wykonujemy bez potrzeby – np.

W=„abababab”, gdy porównując tekst ze

wzorcem w tekście spotkamy literę „c”

(można by przesunąć się w tekście o tyle liter

ile do tego momentu rozpoznaliśmy znaków

wzorca)

=>algorytm B&M

Page 294: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

ALGORYTM

BOYER’A-MOORE’A

Page 295: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm B&M

Badamy przesunięcia s od 0 do n – m

porównujemy tekst ze wzorcem (od końca wzorca do jego początku!), aż okaże się, że są identyczne (koniec), lub spotkamy różnicę, a wtedy

przeskakujemy do przesunięcia

s = s + max ( g[j], j – [T[s+j]] ), gdzie j pozycja we wzorcu pierwszego nie pasującego znaku

– skok wyznaczony heurystyką niezgodności

g – skok wyznaczany heurystyką „dobrego sufiksu”

Page 296: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Alg. B&M – heurystyka niezgodności

Przypadek, w którym spotykamy znak nie

należący do wzorca

Ogólnie: niech 0k m będzie

największym indeksem takim, że T[s + j]

= W[k], jeśli takie k istnieje, w

przeciwnym razie przyjmujemy k=0 =>

wtedy możemy przesunąć wzorzec o j –

k

Page 297: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Alg. B&M – heurystyka niezgodności

: A {1...m} – określa ostatnie

wystąpienie (pozycję ost. wyst.)

poszczególnych znaków alfabetu we

wzorcu, jeśli znak c nie występuje (c)=0

powoduje takie przesunięcie wzorca, że

niepasujący znak w tekście jest

zestawiany ze znakiem wzorca lub

wzorzec jest przesuwany poza ostatnio

sprawdzane okno

Page 298: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm B&M – heurystyka dobregu sufiksu

g : {1...m} {1...m – 1}

A)

T =a l e b a l a m a l a p a l a

W=a l e m a l a b a l a

a l e m a l a b a l a

B)

T = a l a b a l a b a l a

W= b a l a a l a b a l a

Page 299: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 300: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład XIII„Paradygmat programowania dynamicznego”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 301: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Epilog wykładu o wprowadzenia do

algorytmów grafowych

Kolejna klasyfikacja algorytmów

Programowanie dynamiczne i strategia

zachłanna

Przykłady zadań o strukturze

„programowania dynamicznego”

Page 302: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Inne problemy grafowe

Zadanie maksymalnego przepływu

Kolorowanie grafu

Page 303: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kolejna klasyfikacja algorytmów

Algorytmy kombinatoryczne a. sortowania

a. wyszukiwanie

itp. itd.

Algorytmy decyzyjne (optymalizacyjne) a. szukające w zbiorze rozwiązań

rozwiązania najlepszego

a. grafowe – minimalne drzewo rozpinające, najkrótsza ścieżka, maksymalny przepływ

inne…

Page 304: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Rozwiązywanie problemów optymalizacyjnych

Przechodzenie zbioru możliwych

rozwiązań

Stopniowe budowanie rozwiązania

Pewien wskaźnik oceniający dane

rozwiązanie

długość

koszt

waga ścieżki / drzewa rozpinającego

wartość funkcji

Page 305: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Pewna własność najkrótszej ścieżki…

Jeśli najkrótsza ścieżka z węzła A do H, to: ABCDEFGH,

to podścieżki ABCDEFG (*)

ABCDEF

… (**)

ABC

są też najkrótszymi ścieżkami

dowód: 1) (*) jest najkrótsza i 2) istnieje krótsza podścieżka (**), tzn. (*) nie jest najkrótsza (reductio ad absurdum)

Page 306: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zasada optymalności Belmana

Każde podrozwiązanie rozwiązania optymalnego jest także rozwiązaniem optymalnym Konieczny jest wskaźnik F pozwalający porównać

rozwiązania, co więcej F(Sk+1) musi być „etapowo” separowalny, tj. zależy bezpośrednio od wyniku z poprzedniego etapu i na jego podstawie można go wyznaczyć

Budowa algorytmu: zadanie: znajdź rozwiązanie problemu PN

rozwiąż podproblem P0 –> S(P0)

mając dane S(P0) wyznacz rozwiązanie problemu S(P1)

itd. aż do S(PN)

Page 307: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm Belmana-Forda - wyjaśniony

Zadanie: w grafie (V, E) znajdź

najkrótsze ścieżki z węzła początkowego

v0

Obserwacja: maksymalna długość

pojedynczej najkrótszej ścieżki to |V| – 1

Wskaźnik pozwalający porównywać

rozwiązania – odległość d(v) /F/

Page 308: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm B-F - wyjaśniony

Niech dk(v) oznacza długość najkrótszej, co najwyżej k-krawędziowej ścieżki z v0 do v

Wyznaczenie dk+1(v) sprawdzamy, czy ścieżka dłuższa o 1 krawędź, tj. przechodząca przez u i krawędź (u, v) nie jest krótsza tzn. wykonujemy relaksację:

jeśli dk(v) > dk(u) + w(u, v), to dk+1(v) = dk(u) + w(u, v), w przec. razie dk+1(v)=dk(v) /zależność rekurencyjna/

najprościej sprawdzić to dla wszystkich krawędzi /czyli możliwych ścieżek allternatywnych/ to otrzymamy kompletne dk+1(u)

Zacznijmy od podzadania P1: wyznacz odległości poszczególnych węzłów grafu do węzła v0 przy założeniu, że ścieżka obejmuje co najwyżej 1 krawędź (ozn. d1(v))

Kiedy i dlaczego to działa?

Jeśli dk(v) – optymalne, w szczególności d1(v) – optymalne w podanym sensie!

Page 309: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm B-F

d0(v)=niesk., dla v<>v0

Dla k = 1 do |V| – 1

wyznacz dk(v) na pods. dk-1(v) // tzn. wykonaj relaksację wszystkich krawędzi

grafu

Page 310: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Najkrótsze ścieżki między wszystkimi

parami węzłów

Rozwiązanie najprostsze – rozwinięcie

alg. B-F

Dane: W={wij} macierz incydencji z

wagami, N – liczba wierzchołków

l(m)ij najmniejsza waga (koszt) ścieżki

i–>j zawierającej co najwyżej m krawędzi

(macierz najkrótszych odległości)

Jak wyznaczyć l(m) na podst. l(m-1)?

Page 311: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Najkrótsze ścieżki N x N…

(A)

l(m)ij = l(m-1)

ij, jeśli ścieżki nie można poprawić

przeglądając wszystkie poprzedniki wierzchołka j

(zakładając ścieżkę i –> k –> j, gdzie u – poprzednik

wierzchołka j zgodnie z macierzą incydencji W)

lub (B)

l(m)ij = mink=1…N (l(m-1)

ik+wkj)

Zapis łączny: l(m)ij = min( (A), (B) )

Bardzo podobne do Alg. B-F.

Page 312: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Najkrótsze ścieżki N x N…

Algorytm: l(1)

ij=wij

Wyznacz macierze l(m), dla m=1…N – 1 // N

Czyniąc to w nast. sposób:

dla każdego (i, j) // *N2

l(m+1)ij = nieskończ.

dla k=1…N // *N

sprawdź kolejne możliwe przejścia przez sąsiadów j

l(m+1) = min (l(m)ij, l

(m)ik + wkj)

Złożoność N4

Page 313: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Najkrótsze ścieżki N x N

Jak przyspieszyć algorytm?

Wyznaczanie [l(m)] na podstawie [l(m-1)]

ma te same własności co mnożenie

macierzy (min=+, + = *)

Mamy więc de facto

L(N-1) = W(N-1) , gdzie L(K-1) = L(K), dla K>=N

Możemy więc wyznaczyć L2 -> L4 -> L/N/

Mnożeń jest wtedy de facto log2(N-1)-1

Page 314: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Alg. Floyda-Warshalla

Początkowa macierz przybliżeń

minimalnych odl. między węzłami

l(0)ij = wij

Wybieramy kolejno węzły k od 1 do N

sprawdzamy, czy droga z i do j nie jest

krótsza przez ten właśnie k

l(k)ij = min(l(k)

ij, lik(k-1)+l(k-1)

kj)

Złożoność N3

Page 315: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Inne problemy o strukturze progr. dynamicznego

Najdłuższy wspólny podciąg

Optymalne nawiasowanie

Optymalne drzewo poszukiwań

binarnych

Page 316: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Najdłuższy wspólny podciąg

Niech X={x1, …, xM} – dany ciąg

Def. Ciąg Z={z1, …, zK} jest podciągiem X,

jeśli istnieje taki ściśle rosnący ciąg indeksów,

{i1, …, iK}, że zij=xj.

Np. X = ALAMAKOTA, Z = LMKT

/podciąg,ciąg indeksów {2, 4, 6, 8}/

Page 317: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sformułowanie zadania

Zadanie:

Dane są dwa ciągi:

X={x1, …, xM}, Y={y1, …, yN}

Należy znaleźć taki ciąg Z={z1, …, zK} ,

że jest on najdłuższym podciągiem ciągu

X i Y, tj. K – największe z możliwych

/NWP/

Wskaźnik oceny rozwiązania (F) –

długość ciągu (liczba elementów)

Page 318: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zależności „belmanowskie”

Niech: Xi – ciąg składający się z pierwszych i wyrazów ciągu

X; analogicznie Yi;

Z ={z1, …, zK} – najdłuższy wspólny podciąg X i Y; analogicznie Zi

Zachodzą następujące właściwości: X={x1, …, xM},

Y={y1, …, yN}

Z={z1, …, zK}

jeśli xM=yN, to ZK-1 jest NWP XM-1 i YN-1

jeśli xM<>yN i xM<>zK, to Z jest NWP XM-1 i Y

jeśli xM<>yN i yN<>zK, to Z jest NWP X, YN-1

Page 319: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Ilustracja

Przypadek I

X={ALABAM}, Y={BALALAM}, Z={ALAAM}

X’={ALABA}, Y’={BALALA}, Z’={ALAA}

Przypadek 2.

X={ALABAM}, Y={BALALA}, Z={ALAA}

X’={ALABA}, Y={BALALA}, Z={ALAA}

Przypadek 3 /symetrycznie/

Page 320: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Rekurencyjna zależność na długość

NWP

c[i, j] długość NWP ciągów Xi, Yj

Zależność:

c[i,j]=0 dla i=0 lub j=0

c[i,j]=c[i-1, j-1]+1 jeśli i,j>0, xi=yj (*)

c[i,j]=max (c[i, j – 1] /a/, c[i – 1, j] /b/), jeśli i,j>0,

xi<>yj (**)

Page 321: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm - szkic

c[i, 0]=0, c[0,j]=0, i=1…M, j=1…N

Wyznaczamy długość najdł. wsp.

podciągów ciągów

X1 i Y1, …,YN

X2 i Y1, …, YN

XM i Y1, …, YN

korzystając z zależności rekurencyjnej

Page 322: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 323: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład XIV „Wyszukiwanie pozycyjne”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 324: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Wyszukiwanie pozycyjne

Drzewa pozycyjne (Radix Search Tree)

Drzewa Trie

Drzewa PATRICIA

Page 325: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Założenia ogólne

Klucze są słowami, wektorami o

określonej długości (zwykle znanej z

góry!) nad pewnym alfabetem (zwykle

{0,1})

Page 326: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa Radix Search Tree (RST)

Jak w drzewie BST, tyle że kierujemy się kolejnymi bitami (od najstarszego do najmłodszego)

Sprawdzamy wartość klucza przy każdym przejściu!

0 1

0 1

0 0 1

0 1

0 0

0111

0100

0010

0001

0110

1001

1010 1110

1101

Page 327: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa RST

Wyszukiwanie i wstawienie analogicznie

jak w BST

Usuwanie – można zastąpić dowolnym

liściem z poddrzewa zaczynającego się

w węźle zawierającego usuwany klucz

Page 328: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa [re]trie[ve]

Drzewo trie, to drzewo, w którym każdy

węzeł jest stopnia równego liczbie

znaków alfabetu

Ścieżki od korzenia do liścia odpowiadają

słowom

Puste liście oznaczają koniec wyrazu lub

brak elementu w drzewie

Page 329: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa trie c.d. dąb,

dom,

domy,

bam,

bom,

bomy

d b

ą o

b m

y

a o

m m

y

Page 330: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa trie – wady i zalety

Dobre do reprezentacji słownika („gęsty zbiór słów”)

Wada – marnotrawstwo pamięci dla zbiorów „rzadkich” (pusta tablica wskaźników poddrzew)

Rozwiązanie drzewa PATRICIA – trieskompresowane – dobre dla zbiorów rzadkich łatwe do przedstawienia tylko drzewa binarne

istota pomysłu: zapamiętujemy w drzewie informację o nr kolejnym bitu (znaku) wyróżniającego elementy w danym poddrzewie, szukając klucza sprawdzamy kolejne bity wskazywane danymi z węzła drzewa

Page 331: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa PATRICIA (wersja

binarna)

Węzeł x = (b(x), K(x)) drzewa, składa się z: b(x) – nr sprawdzanego bitu

K(x) – klucz zapamiętany przy tworzeniu węzła x

powiązania:

left(x), right(x) – wskazuje na lewy i prawy następnik – dwa warianty:

w przód ozn. szukany węzeł znajduje się gdzieś w poddrzewie

wstecz / do siebie: szukany ciąg albo jest przechowywany we wskazywanym węźle, albo go nie ma w drzewie.

Page 332: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewo PATRICIA - przykład-1, 00000 -1, 00000

1, 01000

2, 00100

-1, 00000

1, 01000

puste

jednoelementowe

3, 01010

4, 01011

0,1000001111

gdzie?

Page 333: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa PATRICIA – wyszukiwanie1. Dla danego węzła x weź k(x)-ty bit szukanego

klucza

2. Jeśli sprawdzany bit jest zero to przejdź do węzła wskaz. left(x), jeśli jeden, to do wskaz. right(x)

3. Jeśli przejście w przód, to powtórz p. 2 dla nowego węzła

4. Jeśli przejście wstecz lub do samego siebie, to porównaj szukany ciąg z ciągiem zawartym w węźle (tym, do którego przeszliśmy) – jeśli jest identyczny to sukces, jeśli różny, to nie ma go w drzewie! KONIEC

Page 334: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewa PATRICIA – wstawianie

Szkic algorytmu Przeprowadź wyszukiwanie wg wstawianego klucza –

> węzeł x.

porównaj key(x) z kluczem wstawianym => wyznacz pierwszy bit i, na którym key(x) różni się od k.

przejdź drzewo od wierzchołka aż do miejsca, gdzie ma się znaleźć nowy klucz, przechodząc po węzłach zgodnie z wartościami poszcz. jego bitów – miejsce to znajduje się albo „na końcu” drzewa, albo między węzłami p i q, dla których b(p) <i <b(q)) w miejscu, gdzie

dołącz tworząc właściwe połączenia...

Page 335: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Egzamin

Egzamin 1 zadanie 10 pkt = maks. 10 pkt

2 zadania po 5 pkt = maks. 10 pkt

15 krótkich pytań po 2 pkt = maks. 15 pkt

Razem: maks. 50 punktów

Page 336: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec wykładu!

Udanych wakacji!

Page 337: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Omówienie kollokwium

Przegląd materiału

Page 338: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kollokwium

1. Podać przykłady rodzin funkcji, które nie są Q(n3), a jest: a) O(n3), b) W(n3).

2. Czy można zapisać algorytm działający w czasie wykładniczym jedynie za pomocą skończonej instrukcji pętli iterujących po pewnych podzbiorach zbioru liczb całkowitych?

3. Czy zastąpienie w algorytmie Shella sortowania przez wstawienia sortowaniem szybkim może przyspieszyć działanie algorytmu w sensie średnim?

4. Spośród wszystkich algorytmów sortowania omawianych na wykładzie wskaż te, których czas działania jest deterministyczny, tj. nie zależy od danych wejściowych.

5. Korzystając z metody splayingu zaproponuj efektywną metodę łączenia drzew BST.

6. Dany jest wzorzec W=”abbaabbbaabb”. Jakie kolejne przesunięcia zgodnie z heurystyką dobrego sufiksu należy rozpatrywać wyszukując algorytmem Boyer’a-Moore’a.

Page 339: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kollokwium c.d.

7. Dana jest funkcja hashująca postaci H(n) = m log 224. Jest ona wykorzystywana do przechowania danych stanowiących losowe elementy ciągu nk = 4 * k2 + 13. Załóżmy, że kolizje są rozwiązywane metodą łańcuchową, a do tablicy wstawiono 22400 elementów. Jaka jest w tej tablicy minimalna długość łańcucha „kolidujących” elementów. Ile minimalnie elementów będzie kolidować na danej wartości funkcji haszującej?

8. Dana jest funkcja prefiksowa [1...8]={0, 0, 0, 1, 2, 3, 0, 0} wyznaczona dla pewnego łańcucha znaków. Jaki najdłuższy fragment tego wzorca może składać się z powtarzających się tych samych liter?

9. Usuń z drzewa AVL klucz 5.

10. Traktując drzewa z zadania 9 jako drzewo BST – usunąć zeń klucze: 25, 35 (kolejno). Operacje wykonywać w konsekwentny sposób.

Page 340: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przegląd tematyki

Złożoność obliczeniowa

Sortowanie

Wyszukiwanie tablice

drzewa BST, drzewa zrównoważone, B-drzewa, drzewa BST ze splayingiem

Statystyki pozycyjne

Wyszukiwanie wzorca w tekście

Kolejki priorytetowe

Grafy i podstawowe algorytmy grafowe

Programowanie dynamiczne

Page 341: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład XIV„Uzupełnienia”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 342: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przykłady zadań

Problem A

Problem B

Problem F

Problem G

Zadanie 17

Page 343: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

KONIEC WYKŁADÓW!

Page 344: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Jak scharakteryzować algorytm?

Dane wejściowe, dane wyjściowe (wyniki)

(1) Warunki narzucone na dane wejściowe

(2) Warunki narzucone na dane wyjściowe

Poprawność: wykonanie algorytmu na danych wejściowych

spełniających (1) daje dane wyjściowe spełniające (2)

dla algorytmów iteracyjnych, przybliżonych –zbieżność: wykonywanie algorytmu w nieskończoność na danych wejściowych spełn. (1) prowadzi (zbiega) do wyniku spełniającego (2)

Niekiedy ocena poprawności jest subiektywna

Page 345: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Przykład

Rozwiązanie równania kwadratowego:

Dane wejściowe: a, b, c – liczby rzeczywiste

Dane wyjściowe:

x1, x2 – liczby rzeczywiste, takie, że: a*x2 + b*x

+ c = 0, dla x=x1 lub x=x2

status – {0, 1, 2} – oznacza liczbę rzeczywistych

pierwiastków równania

Page 346: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Sortowanie tablic

(tzw. sortowanie wewnętrzne)

Dane wejściowe: ciąg n rekordów (tablicę): T={R1, ..., Rn},

każdy z rekordów Ri zawiera klucz Ki

Dane wyjściowe permutacja P rekordów taka, że

Kp(i) <= Kp(j) dla każdego i < j

P(i) – określa pozycję i-tego elementu z tablicy posortowanej w tablicy T

ewentualnie: tablica otrzymana w wyniku zastosowania permutacji

Page 347: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy sortowania

SORTOWANIE Z BEZPOŚREDNIM PORÓWNANIEM ELEMENTÓW (KLUCZY)

1. Sortowanie przez proste wstawianie

2. Sortowanie przez proste wybieranie

3. Sortowanie przez zamianę (tzw. bąbelkowe)

4. Sortowanie metodą malejących przyrostów (tzw. metoda Shella)

5. Sortowanie przez łączenie (ang. merge sort)

6. Sortowanie przez kopcowanie (ang. heapsort)

7. Sortowanie przez podział (tzw. sortowanie szybkie)

Page 348: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy sortowania c.d.

SORTOWANIE W CZASIE LINIOWYM

(BEZ PORÓWNYWANIA ELEMENTÓW)

Sortowanie przez zliczanie

Sortowanie pozycyjne (ang. radix sort)

Sortowanie kubełkowe (ang. bucket sort)

Page 349: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Proste algorytmy sortowania

Przez wstawianie

K1: {5, 3, 4, 2, 7} => {3, 5, 4, 2, 7}

K2: {3, 5, 4, 2, 7} => {3, ..., 5, 2, 7} =>

{3, 4, 5, 2, 7}

K3: {3, 4, 5, 2, 7} => {2, 3, 4, 5, 7}

Przez zamianę (bąbelkowe)

I1: {5, 3, 4, 2, 7} => 2 < 7 {5, 3, 4, 2, 7} => nie

2 < 4 {5, 3, 2, 4, 7} => 2 < 3 {5, 2, 3, 4, 7} =>

{2, 5, 3, 4, 7}

Page 350: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Proste algorytmy sortowania

Przez prosty wybór

{3, 4, 2, 8, 1} => {1, 4, 2, 8, 3}

{1, 4, 2, 8, 3} => {1, 2, 4, 8, 3}

{1, 2, 4, 8, 3}

Page 351: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Na następnym wykładzie

Tablicowe reprezentacje drzew i lasów

Binarne drzewa poszukiwań i proste

operacje na drzewach

Drzewa AVL.

Page 352: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Reprezentacja drzew w postaci

drzew binarnych

Z lewej dziecko z prawej rodzeństwo

ojciec

syn 1 syn 2 syn 3

wn1 wn2 wn3 wn5wn4

prwn

ojciec

syn 1 syn 2 syn 3

wn1 wn2 wn3 wn5wn4

prwn

Page 353: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Tablicowe reprezentacje drzew i

lasów

Jako struktura z dowiązanymi

elementami

Tablicowo w porządku przedrostkowym

(preorder)

A B CL DL E F GL HL IL

możemy się pozbyć

wskaźnika na lewe poddrzewo

A

B E

C D F I

G H

Page 354: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wesołych świąt!

Page 355: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład VIII„Drzewa czerwono-czarne i B-drzewa”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 356: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Dokończenie tematu drzew AVL

Wstawianie i usuwanie w drzewach

czerwono-czarnych

B-drzewa

B-drzewa a drzewa czerwono-czarne

Page 357: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 358: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Czasy operacji na B-drzewach

B-drzewa – kontynuacja

Udoskonalenia B-drzew

B-drzewa a drzewa czerwono-czarne

Tablice hashujące

Wyszukiwanie cyfrowe - Drzewa Trie

Page 359: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 360: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład X„Wyszukiwanie wzorców”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 361: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Plan wykładu

Drzewa PATRICIA

Algorytmy wyszukiwania wzorca

naiwny

Rabina-Karpa

z wykorzystaniem automatów skończonych

Page 362: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wyszukiwanie wzorca – zadanie

Dane są ciągi T[1...n] oraz W[1...m],

m<<n

Elementy tablic T i W należą do alfabetu

A (zbiór znaków)

Szukamy takiego s, dla którego

T[1+s...s+m]=W[1...m] (T[s+j]=W[j],

j=1...m) – począwszy do s+1 znaku aż do

s+m’ego występuje w tekście ciąg

wzorca

Page 363: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec

Page 364: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kopiec F. – skąd nazwa

Można pokazać, że:

Fk+2+ fk f - współcz. złotego podziału (1 + sqrt(5))/2,

Fk+2 – k + 2 liczba Fibbonacciego

stopień i-tego w kolejności węzła przyłączonego przy

scalaniu do danego węzła x jest i – 2

liczba węzłów w poddrzewie o korzeniu x i stopniu k –

size(x) spełnia warunek:

size(x) Fk+2 fk

Stąd: maksymalny stopień dowolnego węzła w n

węzłowym kopcu jest ograniczony przez k lgf n

Page 365: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Informacja o sortowaniu

zewnętrznym

Page 366: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wstęp do sortowania zewnętrz.

Sytuacja problemowa: Mamy posortować plik N rekordów podczas,

gdy N/k mieści się w pamięci

Rozwiązanie: podział pliku na k podplików,

sortowanie wewnętrzne każdego z podplików

scalanie zewnętrzne podplików

O czasie operacji decyduje czas odczytu danych z taśmy...

Page 367: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Metody ze scalaniem

Scalanie dwuwejściowe, zrównoważone – przykład

pamięć 100 rekordów, do posortowania 500

bierzemy cztery taśmy

T1: R1...R100, R201...R300. R401...R500

T2: R101...R200, R301...R400

--------------------

--------------------

T1: R1...R400

T2: R401...R500

T3: Pusta

T4: Pusta

----------------------

T3: R1...R200, R401, ..., R500

T4: R201...R400

Łącznie czytamy 3 razy te same rekordy, czyli razem 1500.

przewij

a-my

Page 368: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Uogólnienie: scalanie zrównoważone

Lewa pula taśm:

T1

...

TP

Prawa pula taśm:

TP+1

...

TT

Dane jest TP taśm, wybieramy P < T

Rozrzucamy posortowane podpliki równomiernie po pulach

Scalamy P-wejściowo z Lewej Puli w Prawą

oraz (T – P)-wejściowo z Prawej Puli w Lewą

Page 369: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Inne rozwiązania

Scalanie wielofazowe

Scalanie kaskadowe

Scalanie wielofazowe z cofaniem taśmy

Page 370: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Rodzina uniwersalna funkcji haszujących

Rodzina funkcji Ha,b(k) jest rodziną uniweralną funkcji haszujących

Wyjaśnienie (szkic dowodu): q=(a*k1 + b) mod p i r=(a*k2 + b) mod p są różne dla

k1<>k2 /sprawdzić q – r/

prawdopodobieństwo kolizji – to prawdopod., że qmod m = r mod m (q i r kongruentne)

dla danego q z pozostałych p – 1 liczba możliwych wartości prawd., że q i r kongruentne wynosi: p/m -1 <= (p -1)/m

co daje prawdopodobieństwo kolizji wynoszące 1/m.

dla |R| funkcji haszujących dwa różne klucze w to samo miejsce wynosi zatem |R|/m.

Page 371: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Wybór w pesym. czasie liniowym

Szkic pomysłu wyznaczamy medianę median dla n/5 -

sortując elementy w podtablicach

wyznaczamy medianę median dla kolejnych grup 5 elementowych /mediany tworzą kolejną tablicę, którą sortujemy i wyzn. med./

dzielimy tablicę wzgl. mediany median x, k-indeks el. rozdziel.

szukamy rekurencyjnie w lewej lub prawej podtablicy lub kończymy rekur. i=k

Page 372: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Drzewo Fibbonacciego20

10 415 17 30 52

6214 25 44

13 16

183

1 4

0 2

7

6 8 22 26

35

Page 373: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kollokwium c.d.

1. Jak wpłynie zastąpienie w algorytmie Shella sortowania przez wstawianie sortowaniem bąbelkowym na czas działania tego algorytmu?

2. Spośród wszystkich algorytmów sortowania omawianych na wykładzie wskaż te, których czas działania jest tym gorszy im bardziej uporządkowane są dane wejściowe.

3. Do drzewa AVL wstaw klucz 16.

4. Podać przykład łańcucha 12 znaków, dla którego funkcja prefiksowa ma następujące wartości [1...12], gdzie M-długość wzorca: {0, 0, 0, 0, 1, 2, 3, 0, 1, 2, 0, 1).

5. Dana jest funkcja prefiksowa [1...8]={0, 0, 0, 1, 2, 3, 0, 0}. Ile znaków musi co najmniej zawierać alfabet, nad którym zbudowany może być łańcuch, o takiej właśnie funkcji prefiksowej zakładając, że w łańcuchu co najmniej raz użyto każdego ze znaków alfabetu?

6. Traktując drzewo z zadania jako drzewo BST usunąć zeń klucze 25 i 15 (kolejno). Operacje wykonywać w konsekwentny sposób.

Page 374: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Kollokwium c.d.

7. Dana jest funkcja hashująca postaci H(n) = m log 96. Jest ona wykorzystywana do przechowania danych stanowiących losowe elementy ciągu nk = (4k+3)2. Załóżmy, że kolizje są rozwiązywane metodą łańcuchową, a do tablicy wstawiono 9600 elementów. Jaka jest w tej tablicy minimalna długość łańcucha „kolidujących” elementów. Ile minimalnie elementów będzie kolidować na danej wartości funkcji haszującej?

8. Dana jest macierz trójkątna ANxN. Jaka jest złożoność obliczeniowa algorytmu w zależności od N wyznaczania rozwiązania układu równań A x = b, gdzie A i b są dane a priori?

9. Podać przykłady rodzin funkcji, które nie są Q(log(n)), a jest: a) O(log(n)), b) W(log(n)).

10. Rozważmy konstrukcję hipotetycznego algorytmu działającego w czasie nk. Naszkicuj jego strukturę (przykładową).

Page 375: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm

rand-select(A, p, r, i)

if p=r then return A[p] //znaleziono

q=rand.-partition(A, p, r)

k=q – p + 1

if i=k then return A[q] //znaleziono

if i<k then rand-select(A, p, q – 1, i) /lewa

podt.

else rand-select(A, q+1, r, i – k)

Page 376: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytm - właściwości

Co ciekawe – średni czas działania –

liniowy!

intuicja: badamy tylko 1 z dwóch 2 drzew

rekurencji

możemy jednak przeciąć rekurencję już na

samym początku:

przyp. szukaną statystyką element rozdzielający

Page 377: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład VII „Drzewa zrównoważone c.d.”

„Tablice z haszowaniem, statystyki pozycyjne”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 378: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie
Page 379: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Macierze – porówn. reprezent.

Tablicowa brak narzutu na

wyszukiwanie

prosta implementacja podstawowych operacji

duża zajętość pamięci, nieopłacalna przy małych wypełnieniach

opłacalna dla „niezbyt” dużych macierzy lub macierzy o wysokim stopniu wypełnienia

Listowa

wprowadzają dodatkowy

narzut na wyszukanie

relewantnych elementów

bardziej skomplikowana

implementacja

podstawowych operacji

oszczędność pamięci przy

dużych wymiarach

opłacalność poniżej

pewnego progu

wypełnienia zwykle dla b.

dużych macierzy

Page 380: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Implementacje list liniowych

Tablicowe

z dowiązaną treścią

Z dowiązanymi węzłami następnymi

oczywiste (w przypadku wszystkich

wymienionych struktur)

tablicowe (nie zupełnie oczywiste)

Page 381: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Implementacje tablicowe (1)

Stos

Kolejka

1 2 3 4 5 6 7 8 9 10 11 12 13tablica

13-elem.

elem.

usuwany

początek koniec

tu wstawiamy

kolejny elementstąd usuwamy

kolejny element

Page 382: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Implementacje tablicowe (2)

Lista

jeśli chcemy wstawić daną między 7 a 8 element,

to ....

1 2 3 4 5 6 7 8 9 10 11 12 13tablica

13-elem.

początek listy ostatni element

Page 383: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Impl. tablicowe vs. z dowiązaniami

Tablicowe

Zalety

łatwość

przeszukiwania

łatwość znalezienia

i-tego elementu

Wady

konieczność kontroli

zakresu

trudność wstawiania

„w środek”

ograniczona liczba

węzłów

Z dowiązaniami

Zalety

łatwość

przeszukiwania

łatwość wstawiania

w środek

„dowolna” liczba

węzłów

Wady

utrudnione

znalezienie i-tego

elementu

Page 384: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Algorytmy i struktury danych

wykład VI

„Drzewa zrównoważone”

dr inż. Andrzej Zalewskiwww: www.ia.pw.edu.pl/~azalews2

e-mail: [email protected]

konsultacje: środa godz. 12:15 – 13:00.

Page 385: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Grafy – rodzaje implementacji

Graf G = (V, E) /vertices & edges/

Macierzowa

M(i, j) = 1, jeśli istnieje krawędź z

wierzchołka i do j Dominuje w zastosowaniach matematycznych

Listowa

lista wierzchołków + dla każdego wierzchołka

tzw. lista sąsiedztwa (wyjaśnienie nast. slajd)

Page 386: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Grafy – implem. listowa

__

1

2

3

4

5

1

2

3

4

5

3 5 x

1 5 x4

tablica lub lista

wierzchołków

lista wierz.

osiągalnych

bezpośred.

z 1 węzła

Page 387: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zastosowania list

Page 388: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zastosowania kolejek System asynchronicznego przekazywania danych

(poleceń)

Zastosowanie:

komunikacja międzyprocesowa w systemach operacyjnych;

buforowanie ramek / pakietów w urządzeniach sieciowych,

buforowanie danych z urządzeń wejściowych

szeregowanie operacji o tym samym priorytecie (np. zapytań do systemów zarządzania bazami danych)

Klient 1

Klient 2

Klient n

serwer

2

Z

1

Z

2

Z

3....

serwer

1

serwer

m

...

Page 389: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zastosowania kolejek c.d.

Kolejka priorytetowa

każdy element opatrzony jest atrybutem

określającym priorytet obsłużenia danego

elementu

najpierw brane są elementy o najwyższym

priorytecie (wg kolejności wstawienia)

Zastosowanie:

priorytetowe szeregowanie zadań w

systemach operacyjnych

Page 390: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Zastosowania stosów

Zapamiętywanie stanu rejestrów przy skoku do podprogramu

Przekazanie argumentów podprogramu (funkcji)

Przetwarzanie struktur z elementami otwierającymi i zamykającymi (np. parowanie nawiasów)

Przetwarzanie wyrażeń arytmetycznych i algebraicznych (będzie dalej)

Page 391: Algorytmy i struktury danych wykład I - ia.pw.edu.plazalews2/files/aisdi2011.pdf · Algorytmy i struktury danych ... Czas działania proc. heapsort. nie gorzej niż: MAKEHEAP –nie

Koniec