Sprawozdanie z ćw

March 20, 2018 | Author: Anonymous | Category: Inżynieria, Informatyka, Data Structures
Share Embed


Short Description

Download Sprawozdanie z ćw...

Description

Sprawozdanie z ćw. nr 2 - Wybrane złożone struktury danych Zależność czasu tworzenia od ilości elementów w strukturze Ilość elementów Czas tab. ms Czas listy ms Czas BST tr ms 5000 10 0 5 10000 21 0 10 15000 32 2 20 20000 58 0 22 25000 63 5 40 30000 60 6 50 35000 90 7 55 40000 100 9 78 45000 118 0 80 50000 132 10 80

Czas BST tb ms 4 10 10 19 17 40 42 46 50 60

Czas tworzenia struktury 140

120

czas ms

100

80

tablica lista

60

drzewo tr drzewo tb

40

20

0 5000

10000

15000

20000

25000

30000

35000

liczba elemętów

40000

45000

50000

55000

Czas wyszukiwania danych w strukturze Liczba elementów Tablica wycz.

tablica binarne lista

drzewo tr drzewo tb

5000

1516

20

640

8

6

10000

5224

30

2476

20

10

15000

11855

54

5711

30

20

20000

21660

82

10135

40

26

25000

35469

99

16244

54

42

30000

55807

122

23362

70

51

35000

85138

176

34489

100

53

40000

121233

171

41678

112

71

45000

133490

222

52391

110

82

50000

201772

210

62913

110

70

wyszukiwanie w strukturze 1000000

100000

czas ms

10000 tablica tab bin

1000

lista drzewo tr

100

drzewo tb 10

1 5000

10000 15000 20000 25000 30000 35000 40000 45000 50000 55000 liczba elementów

Wysokość drzewa binarnego Liczba elementów

drzewo tr

drzewo tb

5000

25

13

10000

34

14

15000

31

14

20000

35

15

25000

35

15

30000

37

15

35000

37

16

40000

34

16

45000

39

16

50000

36

16

Wysokosc BST 45 40 35

wysokość drzewa

30 25 drzewo tr

20

drzewo tb 15 10 5 0 0

10000

20000

30000 liczba elementów

40000

50000

60000

Wysokość drzewa TR jest znacząco większa od wysokości drzewa TB. Jest to spowodowane tym, że drzewo nie wywarzone tworzy się z losowo wygenerowanej tablicy A - w związku z czym możliwe jest każde ułożenie drzewa od najbardziej korzystnego - dokładnie wywarzonego (liczba elementów w prawym i lewym poddrzewie różni się o co najwyżej 1) z wysokością rzędu O(log2n) - do najmniej korzystnego - gdy wszystkie elementy będą w jednej gałęzi, czyli wysokość będzie równa n. Najmniej korzystny przypadek wystąpi, gdy dane będą posortowane rosnąco albo posortowane malejąco (co wystąpi, kiedy będziemy wprowadzać dane według tablicy B). Drzewo dokładnie wywarzone uzyskamy, gdy zastosujemy algorytm dzielenia połówkowego dla posortowanej tablicy. Powodem różnicy w wysokości między drzewami TR i TB jest inne uporządkowanie elementów w drzewie. W przypadku drzewa TR uporządkowanie jest losowe i uzyskamy wysokość rzędu od O(log2n) do O(n). W przypadku drzewa TB elementy są tak porządkowane, aby wysokość była minimalna, tj. rzędu O(log2n). Wysokość BST jest znaczącym parametrem tej struktury. Dwa zbiory z identycznymi elementami mogą stworzyć dwa drzewa różnej wysokości. Z tego względu bardziej korzystne jest drzewo dokładnie wywarzone, ponieważ jego wysokość może być znacznie mniejsza od wysokości drzewa nie wyważonego. Czas tworzenia struktury BST jest rzędu O(nlog2n). Czas wyszukiwania w drzewie jest natomiast rzędu O(h), gdzie h to wysokość drzewa. Jak widać, wyszukiwanie zdecydowanie zależy od wysokości BST. Tworzenie drzewa dokładnie wywarzonego będzie się opłacało gdy będziemy chcieli wyszukiwać dane w naszej strukturze. Wyszukiwanie wyczerpujące w tablicy B i wyszukiwanie na liście wykonują tyle samo porównań O(n). Można by się więc spodziewać, że czasy wyszukiwania będą takie same, jednak okazuje się, że istnieje różnica. Czas dostępu do wskaźników i co za tym idzie kolejnych elementów listy jest trochę mniejszy od dostępu do kolejnych pól tablicy. Dzięki temu przy dużej ilości elementów różnica w czasie jest spora. Zarówno w przypadku szukania w drzewie dokładnie wyważonym jak i szukania połówkowego w tablicy liczba operacji jest taka sama O(log2n). Różnica w czasie wynika, tak jak w punkcie poprzednim, z różnicy w czasie dostępu do danych. Największą zajętość pamięciową ma BST, ponieważ musi przechowywać dane o wartości elementów oraz adresy lewego i prawego poddrzewa. Mniej zajmuje lista - oprócz wartości elementu przechowuje adres jednego kolejnego elementu. Najmniejszą pod względem zajętości pamięciowej jest tablica, gdyż przechowuje tylko wartości kolejnych elementów. Rozmiar pojedynczego elementu tablicy to 14 bajtów(10B ponieważ wartość elementu stanowi słowo 10 literowe, po jednym bajcie na literę, typ char, 4B ponieważ używamy stringów które zawierają wskaźniki do tablicy znaków) . Rozmiar elementu listy to 18 bajtów (14 B - wartość elementu i 4 B - rozmiar wskaźnika do następnego elementu listy), a rozmiar elementu drzewa to 22 bajtów (14 B - wartość elementu i 8 B - rozmiar wskaźników do

następnych poddrzew) trzeba jednak zauważyć że wskaźnik zajmuje różne ilości pamięci w zależności od kompilatora. Drzewo BST ma i wady i zalety. Po pierwsze wymaga najwięcej pamięci z wszystkich tu omawianych struktur. Jest też najtrudniejsze w implementacji. Nie jest to najlepsza struktura, jeśli chodzi o usuwanie elementów - najgorszy jest przypadek drzewa wywarzonego, ponieważ po każdym usunięciu konieczne jest przywrócenie własności struktury, które są zaburzane. Dodawanie elementów jest prostsze, jednak znalezienie odpowiedniego miejsca wymaga wielu operacji . W BST, tak jak w liście, nie ma swobodnego dostępu do każdego elementu. Jednak drzewo ma swoje duże zalety w przypadku wyszukiwania elementów. Nie musimy szukać wśród wszystkich elementów ale wybieramy jeden podzbiór, w którym szukamy. Lista jest strukturą pośrednią między BST a tablicą. Zajmuje mniej miejsca od BST, ale więcej od tablicy. Jest łatwiejsza w implementacji od BST, ale trudniejsza od tablicy. Jest strukturą najlepszą pod względem dodawania i usuwania elementów (kolejne elementy dopisywane są na końcu listy – nie ma więc potrzeby odnajdowania właściwego miejsca; podczas usuwania elementu należy tylko zmienić wartość wskaźnika poprzedniego elementu listy). Niestety struktura ta ma najgorszy czas wyszukiwania w niej informacji. Tablica jest najłatwiejsza w implementacji i zajmuje najmniej pamięci. Wyszukiwanie w niej informacji na zasadzie połówkowej jest szybsze od szukania w liście, jednak wolniejsze od BST. Zaletą tablicy jest dostęp swobodny do każdego elementu. Podstawową wadą tablicy jest to, że w odróżnieniu do listy i drzewa, nie jest to dynamiczna struktura danych. Rozmiar tablicy trzeba zadeklarować na początku. Tak więc usuwanie i dodawanie elementów jest utrudnione.

View more...

Comments

Copyright © 2017 DOCUMEN Inc.