kozik,projektowanie algorytm贸w,STRUKTURY贜YCH

  1. STRUKTURY DANYCH

Struktury liniowe

Tablica

Opis:

okre艣lamy zwarty obszar pami臋ci, gdzie ka偶da kom贸rka przechowuje informacje okre艣lonego typu i do ka偶dej z nich jest bezpo艣redni dost臋p poprzez jej indeks.

Budowa:

Kom贸rka: pojedyncza warto艣膰, pole dwuelementowe, struktura

Z艂o偶ono艣膰 obliczeniowa

Pobranie:

Dost臋p do okre艣lonego elementu: natychmiastowy, ze wzgl臋du na indeksowanie ka偶dej kom贸rki tablicy _ O(1).

Wyszukanie:

Wyszukanie elementu o okre艣lonej warto艣ci: w najgorszym wypadku b臋dziemy musieli odczyta膰 wszystkie n kom贸rek _ O(n).

Wstawienie:

Wstawienie nowego elementu na okre艣lon膮 pozycj臋: wstawienie nowego elementu na koniec tablicy wymaga po prostu powi臋kszenia rozmiaru tablicy o 1 i wpisania warto艣ci do ostatniej kom贸rki (zatem jest to sta艂a liczba operacji, niezale偶na od liczby element贸w, czyli O(1)), jednak wstawienie nowego elementu w 艣rodek tablicy wymaga powi臋kszenia rozmiaru tablicy o 1 oraz przesuni臋cia wszystkich element贸w le偶膮cych na prawo od wstawianego o 1 pozycj臋 w prawo, czyli w najgorszym wypadku (wstawienie elementu na pierwsz膮 pozycj臋): sta艂a liczba operacji zwi臋kszania rozmiaru tablicy + n przesuni臋膰 + 1 zapisanie= O(1) + O(n) + O(1) = O(n).

Usuni臋cie:

Usuni臋cie elementu: analogicznie do wstawiania, w najgorszym wypadku (usuni臋cie pierwszego elementu) trzeba przesun膮膰 n鈭1 element贸w o 1 pozycj臋 w lewo (n 鈭 1 operacji) i zmniejszy膰 rozmiar tablicy o 1 (sta艂a liczba operacji) _ O(n).

Lista jednokierunkowa

Opis:

jest to struktura wykorzystuj膮ca wska藕niki, gdzie ka偶da kom贸rka sk艂ada si臋 z dw贸ch p贸l

Budowa:

ka偶da kom贸rka sk艂ada si臋 z dw贸ch p贸l: pola danych (mog膮cego by膰 _ jak w przypadku tablicy _ rozbudowan膮 struktur膮) oraz wska藕nika na nast臋pny element. Ponadto, lista musi mie膰 (co najmniej) jedn膮 wyszczeg贸lnion膮 kom贸rk臋 zawieraj膮c膮 wy艂膮cznie wska藕nik na pierwszy element , tzw. g艂ow臋.

Cechy charakterystyczne:

W por贸wnaniu do tablicy, lista posiada t臋 zalet臋 , 偶e nie musi by膰 zwartym obszarem pami臋ci.

Z艂o偶ono艣膰 obliczeniowa

Pobranie:

Dost臋p do elementu: je偶eli element jest umieszczony na ko艅cu listy, to aby do niego dotrze膰, trzeba przejrze膰 wszystkie pozosta艂e n鈭1 element贸w - O(n).

Wyszukanie:

Wyszukanie elementu: jak wy偶ej _ O(n).

Wstawienie:

Wstawienie elementu: nale偶y utworzy膰 now膮 kom贸rk臋 O(1), wype艂ni膰 warto艣膰 pola danych O(1), pole wska鹿nika wype艂ni膰 warto艣ci膮 g艂owy O(1), a warto艣膰 g艂owy wype艂ni膰 warto艣ci膮 wskazuj膮c膮 na nowy element O(1) _ ca艂kowity czas omawianej operacji wynosi zatem O(1).

Usuni臋cie:

Usuni臋cie elementu: warto艣膰 wska鹿nika elementu poprzedzaj膮cego nale偶y wype艂ni膰 warto艣ci膮 wskazuj膮c膮 na element nast臋pny O(n) (trzeba ten wska-鹿nik znale鹿膰!) i usun膮膰 z pami臋ci dany element O(1) _ O(n).

Lista dwukierunkowa

Budowa:

ka偶dy element, opr贸cz warto艣ci i wska鹿nika na nast臋pny element zawiera te偶 wska鹿nik na element poprzedzaj膮cy , a opr贸cz g艂owy zawiera te偶 (cho膰 nie jest to konieczne) tzw. ogon, czyli wska鹿nik na ostatni element struktury.

Z艂o偶ono艣膰 obliczeniowa

Wyszukanie:

skraca operacje wyszukiwania elementu w najgorszym wypadku o po艂ow臋 , jednak z punktu widzenia efektywno艣ci to nadal jest z艂o偶ono艣膰 tego samego rz臋du (O(n/2) = O(n)).

Wstawienie:

Skraca w najgorszym wypadku o po艂ow臋 , jednak z punktu widzenia efektywno艣ci to nadal jest z艂o偶ono艣膰 tego samego rz臋du

(O(n/2) = O(n)).

Usuni臋cie:

Skraca w najgorszym wypadku o po艂ow臋 , jednak z punktu widzenia efektywno艣ci to nadal jest z艂o偶ono艣膰 tego samego rz臋du

(O(n/2) = O(n)).

Lista cykliczna

Budowa:

wska藕nik ostatniego elementu wskazuje na pierwszy element

Z艂o偶ono艣膰 obliczeniowa

jak wy偶ej

Lista samoorganizuj膮ca si臋

Opis:

elementy w strukturze s膮 uporz膮dkowane niemalej膮co lub nierosn膮co (wzgl臋dem warto艣ci p贸l danych).

Cechy charakterystyczne:

Korzy艣ci pojawiaj膮 si臋 w niekt贸rych szczeg贸lnych sytuacjach (gdy np. interesuj 膮 nas g艂贸wnie maksymalne / minimalne elementy).

Z艂o偶ono艣膰 obliczeniowa

Wstawienie:

operacji dodawania elementu _ nale偶y utworzy膰 now膮 kom贸rk臋 O(1), wype艂ni膰 warto艣膰 pola danych O(1), pole wska鹿nika wype艂ni膰 warto艣ci膮 wskazuj膮c膮 na element, kt贸ry ma by膰 nast臋pnikiem elementu wstawianego (trzeba znale鹿膰 warto艣膰 tego wska鹿nika, wyszukuj膮c element pierwotnie go poprzedzaj膮cy O(n)), pole wska鹿nika elementu poprzedzaj膮cego wype艂ni膰 warto艣ci膮 wskazuj膮c膮 na nowy element O(1) _ O(n).

Kolejka

Opis:

struktur膮 typu FIFO (ang. First In First Out), w kt贸rej odczyt

nast臋puje tylko z pierwszej pozycji, a wstawienie nowego elementu mo偶e nast膮pi膰 tylko na koniec struktury (za ostatni element).

Z艂o偶ono艣膰 obliczeniowa

Pobranie: Wyszukanie:

dost臋p (pobranie) oraz wstawienie nowego elementu zajmuje O(1)

Wstawienie: Usuni臋cie:

wyszukanie i usuni臋cie konkretnego elementu _ O(n).

Stos

Opis:

jest struktur膮 typu LIFO (ang. Last In First Out), czyli tak膮, w kt贸rej dost臋p (bezpo艣redni) jest tylko do pierwszego elementu, a dodanie nowego nast臋puje przed pierwszy (na pierwsz膮 pozycj臋).

Z艂o偶ono艣膰 obliczeniowa

Pobranie: Wstawienie:

tak jak w przypadku kolejki _ z艂o偶ono艣膰 operacji dost臋pu (pobrania) oraz dodania elementu wynosi O(1),

Wyszukanie: Usuni臋cie:

dla wyszukania i usuni臋cia konkretnego elementu to O(n).

Struktury nieliniowe

Drzewo ukorzenione

Opis:

Drzewo ukorzenione jest struktur膮 hierarchiczn膮,

Drzewo binarne- ka偶dy element (nie b臋d膮cy li艣ciem) posiada

co najwy偶ej dw贸ch potomk贸w. Rozpatrzmy drzewo binarne pe艂ne (li艣cie tylko w ostatnim poziomie, dok艂adnie 2 potomk贸w)

Budowa:

ka偶dy element posiada element(y) podrz臋dny(e) i/lub element nadrz臋dny. Element nadrz臋dny nazywa si臋 rodzicem, a podrz臋dny potomkiem. Wymogiem drzewa jest to, 偶e ka偶dy element mo偶e posiada膰 co najwy偶ej jednego rodzica i (w og贸lno艣ci) dowoln膮 liczb臋 potomk贸w (_ 0). W drzewie wyr贸偶niony jest element zwany korzeniem, kt贸ry nie posiada rodzica (istnieje dok艂adnie jeden taki element). Z kolei elementy nie posiadaj膮ce potomk贸w zwane s膮 li艣ciami.

Cechy charakterystyczne:

Wychodz膮c od spostrze偶enia, 偶e w ka偶dym kolejnym poziomie drzewa jest dwa razy wi臋cej element贸w ni偶 w poprzednim, liczb臋 wszystkich element贸w mo偶na wyznaczy膰 jako sum臋 nast. ci膮gu geometrycznego, a0=1, q=2: 20 + 21 + 22 + . . . + 2k鈭1 = 2k 鈭 1= =n. Korzystaj膮c teraz z definicji logarytmu otrzymamy:

k = log2(n + 1), a zatem k = O(log n).

Kopiec

Opis:

takie drzewo binarne (prawie) pe艂ne , w kt贸rym warto艣膰 rodzica jest zawsze nie mniejsza (nie wi臋ksza) od obu potomk贸w (w przypadku elementu bn/2c i nieparzystej liczby element贸w _ od jedynego potomka).

Cechy charakterystyczne:

w korzeniu mamy zawsze element maksymalny (minimalny).

Bior膮c pod uwag臋 powy偶sze, utworzenie poprawnego kopca ze zbioru n losowych warto艣ci sprowadza si臋 do n-krotnego wykonania operacji wstawienia elementu _ O(n log n).

Z艂o偶ono艣膰 obliczeniowa

Pobranie:

Dost臋p do elementu: w kopcu mamy dost臋p tylko do korzenia O(1).

Wstawienie:

Wstawienie elementu: nowy element wstawiamy na koniec struktury i zamieniamy go z rodzicem dop贸ki rodzic jest mniejszy od wstawionego elementu _ O(log n).

Usuni臋cie:

Usuni臋cie (pobranie) elementu: procedura pobrania (pierwszego) elementu wymaga, po odczytaniu go z korzenia, przywr贸cenia w艂a艣ciwo艣ci kopca. Polega to na tym, 偶e ostatni element ze struktury wstawiamy do korzenia (w miejsce pobranego elementu) i sukcesywnie zamieniamy go z wi臋kszym z potomk贸w dop贸ki ten potomek jest wi臋kszy od zamienianego elementu. Zatem w najgorszym wypadku wykonamy O(log n) takich zamian, co stanowi z艂o偶ono艣膰 obliczeniow膮 ca艂ej procedury.

Drzewo poszukiwa艅 binarnych

Opis:

(ang. Binary Search Tree, czyli drzewo BST), w kt贸rym dla ka偶dego w臋z艂a, x, musi by膰 spe艂niony nast臋puj膮cy warunek:

warto艣膰 ka偶dego elementu le偶膮cego w lewym poddrzewie w臋z艂a

x jest nie wi臋ksza ni偶 warto艣膰 w臋z艂a x, natomiast warto艣膰 ka偶dego elementu le偶膮cego w prawym poddrzewie w臋z艂a x jest nie mniejsza ni偶 warto艣膰 tego w臋z艂a.

Budowa:

wr贸膰my uwag臋, 偶e drzewo BST nie musi by膰 pe艂ne . Zatem jego liczba poziom贸w, k, mo偶e by膰 wi臋ksza ni偶 log n (maksymalnie mo偶e wynosi膰 n). Mo偶na jednak wykaza膰, 偶e 艣rednia warto艣膰 k dla losowo zbudowanego drzewa wynosi O(log n).

Z艂o偶ono艣膰 obliczeniowa

Wyszukanie:

Dosy膰 艂atwo doj艣膰 do tego, 偶e wyszukanie elementu mo偶na wykona膰 w czasie O(k) (zaczynamy w korzeniu i schodzimy pojedyncz膮 艣cie偶k膮 w d贸艂).

Wstawienie: Usuni臋cie:

Operacje wstawiania i usuwania r贸wnie偶 zajmuj膮 O(k) operacji (zasada wstawiania podobna jak przy wyszukiwaniu, usuwania nieco bardziej skomplikowana

Drzewo czerwono-czarne

Opis:

S膮 to takie drzewa BST, w kt贸rych ka偶dy w臋ze艂 posiada dodatkowy parametr - kolor, mog膮cy przyjmowa膰 dwie warto艣ci : czerwony lub czarny.

Dodatkowo, musz膮 by膰 spe艂nione nast臋puj膮ce warunki:

鈥 ka偶dy li艣膰 (NIL) musi by膰 czarny,

鈥 oba w臋z艂y potomne w臋z艂a czerwonego musz膮 by膰 czarne,

鈥 wszystkie 艣cie偶ki z danego w臋z艂a do li艣ci maj膮 tyle samo czarnych w臋z艂贸w.

Budowa:

Dzi臋ki temu ka偶da 艣cie偶ka w drzewie jest co najwy偶ej dwa razy d艂u偶sza ni偶 dowolna inna, co zapewnia, 偶e drzewo jest w przybli偶eniu zr贸wnowa偶one, a jego wysoko艣膰 wynosi O(log n).

Tablice haszuj膮ce

Opis:

S艂u偶膮 one do efektywnego realizowania operacji s艂ownikowych (wstawianie, wyszukiwanie, usuwanie).

Budowa:

Oczywi艣cie efektywno艣膰 tablicy haszuj膮cej 艣ci艣le zale偶y od czasu wyliczania funkcji haszujacej. Najlepiej, aby by艂o to O(1). Prostym przyk艂adem takiej funkcji mo偶e by膰 h(k) = k mod m.

Inn膮 wa偶n膮 cech膮, jak膮 powinna posiada膰 dobra funkcja haszuj膮ca, jest r贸wnomierne haszowanie, tzn. losowo wybrana warto艣膰 ma by膰 z jednakowym prawdopodobie艅stwem odwzorowywana na ka偶d膮 z m pozycji.

Kolejka i Stos s膮 strukturami o specyficznych zastosowaniach i tylko dzi臋ki na艂o偶onym ograniczeniom posiadaj膮 korzystniejsze czasy dost臋pu lub wstawiania elementu (w stosunku do Tablicy i Listy).

鈥 Kopiec ma korzystne czasy wstawiania i usuwania element贸w w stosunku do pozosta艂ych struktur (wprawdzie czasy wstawiania dla Listy, Kolejki i Stosu s膮 szybsze, jednak suma czas贸w wstawiania i usuwania jest mniejsza w艂a艣nie dla Kopca).

鈥 Kopiec nie jest dobr膮 struktur膮 do wyszukiwania element贸w.


Wyszukiwarka

Podobne podstrony:
kozik,projektowanie algorytm贸w,ALGORYTMY PRZYBLI呕ONE
k balinska projektowanie algorytmow i struktur danych
kozik,projektowanie algorytm贸w,TEORIA Z艁O呕ONO艢CI OBLICZENIOWEJ
kozik,projektowanie algorytm贸w,ALGORYTMY SORTOWANIA
kozik,projektowanie algorytm贸w,TEORIA GRAF脫W
kozik,projektowanie algorytm贸w,METODY SZTUCZNEJ INTELIGENCJI
kozik,projektowanie algorytm贸w,Zastosowanie algorytmu metaheurystycznego do rozwi膮zywania problemu n
Algorytmy i struktury danych Wyk艂ad 1 Reprezentacja informacji w komputerze
Algorytmy i struktury danych Wyk艂ad 3 i 4 Tablice, rekordy i zbiory
Algorytmy i struktury danych, AiSD C Lista04
Algorytmy i struktury danych 08 Algorytmy geometryczne
Instrukcja IEF Algorytmy i struktury danych lab2
Algorytmy, struktury danych i techniki programowania wydanie 3
Algorytmy i struktury danych 1
艢ciaga sortowania, algorytmy i struktury danych
ukl 74xx, Informatyka PWr, Algorytmy i Struktury Danych, Architektura System贸w Komputerowych, Archit
cw 0 1, pwr, informatyka i zarz膮dzanie, Informatyka, algorytmy i struktury danych

wi臋cej podobnych podstron