Zaawansowane struktury wyszukiwawcze

Transkrypt

Zaawansowane struktury wyszukiwawcze
Zaawansowane struktury wyszukiwawcze
Tomasz Skarżyński, PG ETI INF SEM.2 GR.6 No.131618
Struktury które miałem zaimplementować to tablica haszująca z adresowaniem otwartym
oraz drzewo czerwono-czarne.
W tablicy haszującej z adresowaniem otwartym wartości przechowuję w tablicy
wskaźników klasy przechowującej klucz, wartość i zmienną logiczną, która mówi czy element
nie został usunięty. Główna funkcja haszująca wygląda tak
(h1(klucz)+proba*h2(proba))
%SIZE.W chwili wykrycia kolizji program szuka kolejnej pozycji zwiększając próbę i w
rezultacie stosowania powyższego wzoru funkcji haszującej umieszcza element w innym
miejscu.
W drzewie czerwono-czarnym główna struktura przechowuje klucz, kolor, wartość,
głębokość poddrzewa, i wskaźniki na ojca i synów. Zgodnie z zasadą działania drzewa
czerwono-czarnego po dodaniu każdego elementu najpierw nowy element jest dodawany
jak w standardowym drzewie binarnym, tzn. mniejsze elementy do lewego syna, a większe
do prawego, a następnie następuje reorganizacja struktury.
Do testów korzystałem z danych testowych dostępnych na spoju oraz wygenerowanych
przez siebie. Do pomiaru czasu wykorzystałem bibliotekę time.h.
Wyniki testów:
Przykładowy test wejściowy zawierający tylko szukanie i wstawianie nowych pól (1500
wstawień, 500 szukań) w obu strukturach wykonywał się (z pominięciem wyświetlania) tyle
samo, tj. 10 milisekund. Dla większych danych testowych wyniki prezentowały się
następująco:
dla 200 tysięcy wstawień (przy zwiększonym rozmiarze tablicy haszującej):
Średni czas wstawień tablicy h. wyniósł 807 milisekund a drzewa 781 milisekund
Porównanie czasów dla serii pomiarów przedstawia wykres:
830
820
810
800
790
Tablica haszująca
780
770
Drzewo czerwonoczarne
760
750
740
730
1
2
3
4
5
6
7
8
9
10 11
W wypadku innych danych testowych (szukanie) pomiary również wychodziły na korzyść
drzewa.
Wnioski
Drzewo to lepsza struktura jeżeli chcemy gromadzić dużą liczbę danych. Samoorganizująca
się struktura utrzymuje dobry czas dostępu do każdego pola. Tablicy haszującej warto jednak
używać dla mniejszych danych gdyż jej implementacja jest prostsza a dla małych danych
testowych różnice nie są zauważalne.

Podobne dokumenty