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.