Zadania
Transkrypt
Zadania
AAL G.Blinowski - zadania Zadanie 1.1 Tablice mieszające (hash-tables) z listami Przedmiotem analizy jest tablica mieszająca: tablica przechowuje rekordy zawierające napisy. Długość tablicy jest ograniczona arbitralnie przez pewną stałą K. Dla danego napisu s obliczamy k=M(s) i umieszczamy strukturę reprezentującą napis w tablicy mieszającej: H[k]. W przypadku kolizji funkcji mieszającej reprezentujące napis s struktury danych zapisywane są w liście dwukierunkowej, której głowa to H[k]. Przedmiotem implementacji powinno być: dodanie, usunięcie i enumeracja elementów w H[]. Wybór funkcji M(s) do decyzji projektanta. Testy przeprowadzić dla: (1) listy słów języka polskiego (2) sztucznie wygenerowanych słów, generator ma posługiwać się tablicą prawdopodobieńst wystąpienia par liter (spacja, kropka, przecinek, itp. traktowane są jako litera - "koniec słowa"). Zadanie 1.2 Tablice mieszające (hash-tables) z rekalkulacją indeksu Przedmiotem analizy jest tablica mieszająca: tablica przechowuje rekordy zawierające napisy. Długość tablicy jest ograniczona arbitralnie przez pewną stałą K. Dla danego napisu s obliczamy k=M(s,0) i umieszczamy strukturę reprezentującą napis w tablicy mieszającej: H[k]. W przypadku kolizji funkcji mieszającej obliczamy k1 = M(s, 1), w przypadku kolejnej kolizji k2 = M(s,2), itp. - aż do skutku, tj. do znalezienia wolnego miejsca w H[] (lub błędu - zapełnienia H[]). Przedmiotem implementacji powinno być: dodanie, usunięcie i enumeracja elementów w H[]. Wybór funkcji M(s,i) do decyzji projektanta. Testy przeprowadzić dla: (1) listy słów języka polskiego (2) sztucznie wygenerowanych słów, generator ma posługiwać się tablicą prawdopodobieńst wystąpienia par liter (spacja, kropka, przecinek, itp traktowane sa jako "litera " - "koniec słowa"). Uwaga - dozwolone wartości K mogą być zależne od przyjętego algorytmu obliczania M() Zadanie 1.3 Tablice mieszające (hash-tables) z różnymi funkcjami rozpraszania Przedmiotem analizy jest tablica mieszająca: tablica przechowuje rekordy zawierające napisy. Długość tablicy jest ograniczona arbitralnie przez pewną stałą K. Dla danego napisu s obliczamy k=M(s) i umieszczamy strukturę reprezentującą napis w tablicy mieszającej: H[k]. W przypadku kolizji funkcji mieszającej reprezentujące napis s struktury danych zapisywane są w liście dwukierunkowej, której głowa to H[k]. Przedmiotem implementacji powinno być: dodanie, usunięcie i enumeracja elementów w H[]. Wybór funkcji M(s) do decyzji projektanta, należy przetestować 3 różne funkcje, dla każdej przeprowadzić analizę, itp. Testy przeprowadzić dla wystarczająco dużego zbioru słów lub zwrotów (można użyć dowolnego wystarczająco urozmaiconego tekstu zaczerpniętego z internetu). Uwaga - dozwolone wartości K mogą być zależne od przyjętego algorytmu obliczania M(). Zadanie 1.4 Tablice mieszające (hash-tables) różnych typów Przedmiotem analizy jest tablica mieszająca: tablica przechowuje rekordy zawierające napisy. Długość tablicy jest ograniczona arbitralnie przez pewną stałą K. Algorytm 1: Dla danego napisu s obliczamy k=M(s) i umieszczamy strukturę reprezentującą napis w tablicy mieszającej: H[k]. W przypadku kolizji funkcji mieszającej reprezentujące napis s struktury danych zapisywane są w liście dwukierunkowej, której głowa to H[k]. Algorytm 2: Dla danego napisu s obliczamy k=M(s,0) i umieszczamy strukturę reprezentującą napis w tablicy mieszającej: H[k]. W przypadku kolizji funkcji mieszającej obliczamy k1 = M(s, 1), w przypadku kolejnej kolizji k2 = M(s,2), itp. aż do skutku, tj. do znalezienia wolnego miejsca w H[]. Przedmiotem implementacji powinno być: dodanie i usunięcie elementów w H[]. Wybór szczegółowej implementacji funkcji M() do decyzji projektanta, należy dla obydwu algorytmów niezależnie przeprowadzić analizę i badanie wydajności oraz porównać algorytmy i przeprowadzić dyskusję praktyczności ich zastosowania w określonych okolicznościach. Testy przeprowadzić dla wystarczająco dużego zbioru słów lub zwrotów (można użyć dowolnego wystarczająco urozmaiconego tekstu zaczerpniętego z internetu). Uwaga - dozwolone wartości K mogą być zależne od przyjętego algorytmu obliczania M(). Zadanie 2.1 Listy indeksowane Listy indeksowane [1,2] wykorzystywane są głównie w symulacji z czasem dyskretnym i służą do efektywnego przetwarzania dużych zbiorów uszeregowanych "zdarzeń" z optymalizowanymi operacjami: (1) usunięcia najnowszego zdarzenia (czyli pierwszego elementu listy) oraz (2) dodania zdarzenia zachodzącego w dowolnym czasie. Zaimplementować prosty symulator z czasem dyskretnym wykorzystujący dwu-poziomową listę indeksowaną. Przeprowadzić wymaganą analizę i badanie wydajności algorytmu dla operacji dodania rekordu. [1] J. Tyszer; Symulacja Cyfrowa,. WNT [2] Franta, W. R., & Maly, K. (1977). An efficient data structure for the simulation event set. Communications of the ACM, 20(8), 596-602. [załączony pdf] Zadanie 2.2 Skip lista (Skip-list) Skip lista [1] jest strukturą danych często wykorzystywaną w programowaniu współbieżnym z uwagi na: lokalność odowołań, "odporność" na uszkodzenie oraz brak operacji globalnej optymalizacji charakterystycznej np. dla drzew binarnych wyważonych. Skip lista może być m.in. wykorzystana w symulacji z czasem dyskretnym tj. w przetwarzaniu dużych zbiorów uszeregowanych "zdarzeń" z optymalizowanymi operacjami: (1) usunięcia najnowszego zdarzenia (czyli pierwszego elementu listy) oraz (2) dodania zdarzenia zachodzącego w dowolnym czasie. Zaimplementować prosty symulator z czasem dyskretnym wykorzystujący skip listę. Przeprowadzić wymaganą analizę i badanie wydajności algorytmu dla operacji dodania rekordu. [1] William Pugh; Skip Lists: A Probabilistic Alternative to Balanced Trees; ftp://ftp.cs.umd.edu/pub/skipLists/skiplists.pdf . [załączony pdf]