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]

Podobne dokumenty