algorytmy


Kopiec (binarny) to tablicowa struktura danych, którą można traktować jako drzewo binarne, pełne na wszystkich poziomach z wyjątkiem być może najniższego, który jest wypełniony od lewej strony do pewnego miejsca.

Kopiec n-elementowy ma wysokosc 0x01 graphic

Dowód: Niech h będzie wysokością kopca. Ponieważ pełne drzewo binarne o wysokości h zawiera 0x01 graphic
elementów, więc 0x01 graphic
, stąd 0x01 graphic
, czyli 0x01 graphic
.

HEAPIFY

Poddrzewo, na którym wywołujemy HEAPIFY rekurencyjnie, ma wysokość 0x01 graphic
, stąd

0x01 graphic

Łatwo wykazać przez indukcję, że 0x01 graphic
, czyli 0x01 graphic
.

Stąd otrzymujemy, że HEAPIFY działa na drzewie rozmiaru k w pesymistycznym czasie 0x01 graphic
.

BUILD-HEAP

Ustalmy dowolny węzeł x kopca rozmiaru n i niech d oznacza jego głębokość, a h wysokość, to znaczy wysokość poddrzewa o korzeniu x. Wtedy d + h jest wysokością całego kopca, czyli 0x01 graphic
.

Dowolne drzewo binarne ma co najwyżej 0x01 graphic
węzłów o głębokości d, a zatem n-elementowy kopiec ma co najwyżej 0x01 graphic
węzłów o głębokości h.

Czas działania procedury HEAPIFY wywołanej w węźle o wysokości h wznosi O(h), a zatem pesymistyczny czas działania BUILD-HEAP dla tablicy n-elementowej szacuje się przez

0x01 graphic
0x01 graphic
.

Zauważmy, że szereg 0x01 graphic
jest zbieżny. Oznaczając przez s jego sumę otrzymujemy, że dla dowolnego n zachodzi 0x01 graphic
, czyli 0x01 graphic
.

HEAPSORT

Pesymistyczny czas działania algorytmu heapsort na tablicy n-elementowej wynosi 0x01 graphic
, ponieważ budowa kopca przez BUILD-HEAP zajmuje czas O(n), a każde z n-1 wywołań HEAPIFY zajmuje czas 0x01 graphic
, 0x01 graphic
.

Quicksort

Przypadek pesymistyczny 0x01 graphic

Przypadek optymistyczny 0x01 graphic

Związek formuły rekurencyjnej z algorytmem 0x01 graphic

przez wstawianie

0x01 graphic

przez scalanie

0x01 graphic

przez kopcowanie

0x01 graphic

quicksort

0x01 graphic

Dowolny algorytm sortujący n elementów za pomocą porównań w przypadku pesymistycznym wymaga 0x01 graphic
porównań.

Sortowanie przez zliczanie 0x01 graphic

Sortowanie pozycyjne 0x01 graphic

Sortowanie kubełkowe 0x01 graphic
- dla danych wejściowych rozmiaru n

Kolejka priorytetowa to struktura danych reprezentująca zbiór dynamiczny S, którego każdy element ma przyporządkowana wartość, zwana kluczem = 0x01 graphic
.

Typowe operacje na stosach, kolejkach i listach:

Implementacja w postaci kopca umożliwia wykonanie wszystkich operacji kolejki priorytetowej na zbiorze n-elementowym w czasie 0x01 graphic
.

Operacja INSERT i DELETE = 0x01 graphic

Operacja SEARCH - czas potrzebny na wyszukanie elementu o kluczu k zależy liniowo od długości listy.

Haszowanie

Średni czas wszystkich operacji słownikowych na tablicy z haszowaniem za pomocą łańcuchowej metody rozwiązywania kolizji wynosi 0x01 graphic
.

Haszowanie modularne 0x01 graphic

Haszowanie przez mnożenie 0x01 graphic

Adresowanie otwarte

Wszystkie elementy są przechowywane wprost w tablicy.

Jeśli 0x01 graphic
, to oczekiwana liczba sprawdzonych pozycji w czasie wyszukiwania elementu, którego nie ma w tablicy, jest nie większa niż 0x01 graphic
.

Wstawianie elementu wymaga średnio co najwyżej 0x01 graphic
sprawdzeń pozycji w tablicy.

Adresowanie liniowe - funkcja 0x01 graphic

Wada - grupowanie się zajętych pozycji. Grupy zajętych pozycji pojawiają się, ponieważ pusta pozycja poprzedzona przez i zajętych pozycji jest następnie zapełniana z prawdopodobieństwem (1+i)/m. Spójne ciągi zajętych pozycji powiększają się, co powoduje wzrost średniego czasu wyszukiwania.

Adresowanie kwadratowe - funkcja 0x01 graphic

0x01 graphic
muszą być dobrane tak, żeby ciąg kontrolny każdego klucza był permutacją ciągu <0,1,…,m-1>.

Haszowanie dwukrotne - funkcja 0x01 graphic

BST jest to drzewo binarne, w którym spełniona jest własność:

- jeśli y jest węzłem znajdującym się w lewym poddrzewie węzła x, to 0x01 graphic

- jeśli y jest węzłem znajdującym się w prawym poddrzewie węzła x, to 0x01 graphic

INORDER -WALK - gwarantuje wypisanie kluczy w kolejności niemalejącej = 0x01 graphic

SEACH, MINIMUM, MAXIMUM, TREE-SUCCESSOR, PREDECESSOR, INSERT, DELETE = 0x01 graphic


Wysokość h drzewa binarnego o n węzłach spełnia nierówności: 0x01 graphic
.

Oszacowanie dolne jest osiągnięte przez drzewo prawie pełne, a oszacowanie górne przez drzewo składające się z pojedynczej ścieżki od korzenia do jedynego liścia.

Drzewo czerwono-czarne jest drzewem wyszukiwań binarnych, w którym każdy węzeł posiada dodatkowy atrybut: kolor, który może być albo czerwony, albo czarny.

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

- korzeń jest czarny

- każdy liść jest czarny

- jeśli węzeł jest czerwony, to obaj jego synowie są czarni

- każda ścieżka z ustalonego węzła do liścia ma tyle samo czarnych węzłów

Własności zakłócone przy INSERT:

- korzeń jest czarny

- jeśli węzeł jest czerwony, to obaj jego synowie są czarni

0x01 graphic
węzłów wewnętrznych

0x01 graphic
wysokość drzewa o n węzłach wewnętrznych

0x01 graphic
operacje na drzewach przy zachowaniu właściwości

ROTATE = 0x01 graphic
ponieważ każdy wiersz jest wykonywany co najwyżej raz.

Sposoby organizacji efektywnych algorytmów

Dziel i zwyciężaj - sortowanie przez scalanie, quicksort, sortowanie kubełkowe

Strategia zachłanna - kody Huffmana

Programowanie dynamiczne - NWP,

Kody prefiksowe to takie kody, w których słowo kodowe żadnego znaku nie jest prefiksem słowa kodowego innego znaku.

Drzewo binarne:

- liście drzewa odpowiadają zakodowanym znakom;

- słowo kodowe dla znaku odpowiada ścieżce od korzenia do tego znaku;

- 0 oznacza „przejście do lewego syna”, a 1 „przejście do prawego syna”.

Koszt:

Niech C oznacza zbiór wszystkich znaków (alfabet).

Mając dane drzewo T odpowiadające kodowi, łatwo jest obliczyć liczbę bitów potrzebnych do zakodowania pliku.

Dla każdego 0x01 graphic
niech f(c) oznacza liczbę wystąpień (częstość) c w pliku, a 0x01 graphic
głębokość liścia c w drzewie.

Zauważmy, że 0x01 graphic
jest również długością słowa kodowego dla c.

Liczba bitów potrzebnych do zakodowania pliku jest równa

0x01 graphic

Liczbę tę nazywamy kosztem drzewa T.

Kod prefiksowy jest optymalny, jeżeli jego koszt jest minimalny dla danego alfabetu.

Drzewo binarne nazywamy regularnym, jeżeli każdy węzeł wewnętrzny ma dwóch synów.

Drzewo binarne reprezentujące optymalny kod prefiksowy jest regularne, o ile ma przynajmniej dwa liście.

B-drzewo T jest drzewem ukorzenionym o następujących własnościach:

0x01 graphic

Dla każdego B-drzewa o 0x01 graphic
kluczach, wysokości h i minimalnym stopniu 0x01 graphic
mamy

0x01 graphic

Korzeń zawiera co najmniej jeden klucz, a wszystkie pozostałe węzły zawierają co najmniej po t-1 kluczy.

Mamy więc co najmniej 2 węzły na głębokości 1, co najmniej 2t węzłów na głębokości 2, co najmniej 0x01 graphic
węzłów na głębokości 3 itd.

0x01 graphic

0x01 graphic

Liczba dostępów do dysku w SEARCH = 0x01 graphic
, gdzie h jest wysokością B-drzewa, a n liczbą zapisanych w nim kluczy.

SEARCH = 0x01 graphic

SPLIT-CHILD = czas działania = 0x01 graphic
, ilość odwołań do dysku = 0x01 graphic

INSERT =czas działania = 0x01 graphic
, ilość odwołań do dysku = 0x01 graphic

DELETE = 0x01 graphic
, ilość odwołań do dysku = 0x01 graphic

Uzasadnienie rozbicia: Rozbicia dokonuje się względem środkowego klucza 0x01 graphic
, który jest przesuwany do ojca y. Schodząc w dół drzewa podczas szukania miejsca dla nowego klucza rozbijamy wszystkie napotkane po drodze pełne węzły. Tak więc za każdym razem kiedy rozbijamy pełny węzeł, mamy gwarancję, że jego ojciec nie jest pełny.

Analiza kosztu zamortyzowanego metodą potencjału (s 411 - print)

Na początku mamy strukturę danych 0x01 graphic
, na której chcemy wykonać n operacji. Dla każdego i=1, 2,…,n niech 0x01 graphic
oznacza faktyczny koszt i-tej operacji, a 0x01 graphic
niech będzie strukturą danych powstałą ze struktury 0x01 graphic
po wykonaniu i-tej operacji. Funkcja potencjału przyporządkowuje każdej strukturze 0x01 graphic
liczbę rzeczywistą 0x01 graphic
, nazywaną potencjałem struktury 0x01 graphic
. Koszt zamortyzowany 0x01 graphic
dla i-tej operacji względem funkcji potencjału 0x01 graphic
definiuje się jako

0x01 graphic

Kopce dwumianowe (s 454 - print)

Rodziny zbiorów rozłącznych

MAKE-SET

UNION = liczba operacji = 0x01 graphic

FIND-SET

n - liczba operacji MAKE-SET

m - łączna liczba operacji MAKE-SET, UNION i FIND-SET

0x01 graphic

Reprezentacja listowa:

MAKE-SET, FIND-SET = czas = 0x01 graphic

UNION = 0x01 graphic
, łączna liczba obiektów uaktualnionych 0x01 graphic

MAKE-SET = 0x01 graphic

Całkowity czas wykonania ciągu operacji wynosi 0x01 graphic
, czyli 0x01 graphic
, ponieważ 0x01 graphic
, a 0x01 graphic
. Średnio na każdą operację przypada więc czas 0x01 graphic
. Oznacza to, że zamortyzowany czas operacji wynosi 0x01 graphic
.

Heurystyka łączenia z wyważeniem

Dla dowolnego 0x01 graphic
po uaktualnieniu wskaźnika od x do reprezentanta 0x01 graphic
razy otrzymany zbiór liczy przynajmniej k elementów. Ponieważ największy zbiór zawiera co najmniej n elementów, wskaźnik do reprezentanta każdego obiektu był uaktualniany co najwyżej 0x01 graphic
razy we wszystkich operacjach UNION. Łączny czas uaktualniania n obiektów wynosi zatem 0x01 graphic
.

Każda operacja MAKE-SET i FIND-SET zajmuje czas 0x01 graphic
, co w sumie daje 0x01 graphic
. Łączny czas wykonania całego ciągu operacji wynosi zatem 0x01 graphic



Wyszukiwarka

Podobne podstrony:
Układy Napędowe oraz algorytmy sterowania w bioprotezach
5 Algorytmy
5 Algorytmy wyznaczania dyskretnej transformaty Fouriera (CPS)
Tętniak aorty brzusznej algorytm
Algorytmy rastrowe
Algorytmy genetyczne
Teorie algorytmow genetycznych prezentacja
Algorytmy tekstowe
Algorytmy i struktury danych Wykład 1 Reprezentacja informacji w komputerze
ALGORYTM EUKLIDESA
Algorytmy z przykladami tp 7 0
ALGORYT8
5 Algorytmy i schematy blokowe

więcej podobnych podstron