Zestawy zadań

Zawartość:

Zestaw 1

A
[źródło]
(2 punkty - implementacja zbioru)

Proszę zaimplementować typ danych setSimple reprezentujący matematyczny zbiór oraz operacje które dla dwóch zbiorów \(A\), \(B\) realizują:

oraz dla elementu \(x\) i zbioru \(A\) realizują:

Proszę założyć, że istnieje skończona liczba \(N\) możliwych elementów. Można sobie na przykład wyobrazić, że wszystkie rozpatrywane przez nas zbiory są podzbiorami pewnego zbioru \(\Omega\) zawierającego \(N\) elementów. Dzięki takiemu założeniu implementacja każdego z rozpytywanych zbiorów może być oparta na jednowymiarowej tablicy o rozmiarze \(N\). Każdy index \(i = 1 \ldots N\) (lub \(i = 0 \ldots N-1\)) tej tablicy odpowiadałby jednemu z elementów \(\Omega\). Wartość przechowywana w tablicy pod indeksem \(i\) (lub \(i - 1\)) wskazuje na to czy dany element należy (np. true , 1) do rozpatrywanego zbioru czy nie (np. false , 0).

B
[źródło]
(2 punkty -implementacja zbioru)

Proszę zaimplementować typ danych setLinked reprezentujący matematyczny zbiór oraz wszystkie operacje z zadania A. Tym razem w implementacji proszę wykorzystać posortowane listy łączone.

C
(1 punkt)

Korzystając z wyników zadań A oraz B proszę się zastanowić która implementacja jest lepsza i w jakiej sytuacji. Uwaga: to zadanie może być zaliczone pod warunkiem prawidłowego wykonania A oraz B.

D
[źródło]
(1 punkt)

Proszę zaimplementować typ danych dictionarySimple, będący uproszczoną wersją zbioru, posiadającą jedynie trzy operacje:

Tym razem w zbiorze przechowywane będą ciągi znaków o długości \(50\). W implementacji proszę wykorzystać jednowymiarową tablicę, której elementy są ciągami znaków.

Dodatkowo proszę porównać te wyniki do Państwa wyników z A oraz B i zastanowić się która implementacja jest lepsza i w jakiej sytuacji.

UWAGI
MATERIAŁY DODATKOWE

Zestaw 2

A
[źródło]
(1 punkt)

Implementacja zbioru wykorzystująca jednowymiarowe tablice o skończonym rozmiarze z zadania A w zestawie 1 zakłada, że każdemu elementowi zbioru można przypisać liczbę naturalną \(1 \ldots N\). Proszę zaimplementować funkcje implementujące takie przyporządkowanie dla zbiorów:

B
[źródło]
(4 punkt - implementacja zbioru)

Proszę zaimplementować typ danych setHashed reprezentujący matematyczny zbiór oraz operacje które dla dwóch zbiorów \(A\), \(B\) realizują:

oraz dla elementu \(x\) i zbioru \(A\) realizują:

Tym razem proszę wykrzystać haszowanie otwarte. Państwa implementację proszę wykorzystać w programie, który bada złożoność obliczeniową poszczególnych operacji. Dla każdej z zaimplementowanych operacji program powinien produkować jeden plik, który może być uruchomiony z wykorzystaniem programu gnuplot. W wiadomości e-mail proszę opisać podejście wykorzystane do badania złożoności obliczeniowej i skonfrontować Państwa wyniki z wartościami teoretycznymi.

C
(1 punkt)

Korzystając z wyników zadań A oraz B z zestawu 1 oraz zadania B z obecnego zestawu proszę się zastanowić która implementacja jest lepsza i w jakiej sytuacji. Swoją odpowiedź (popartą odpowiednimi wykresami) proszę przesłać za pośrednictwem e-mail.

Aby ułatwić Państwu zadanie, proszę założyć, że elementami przechowywanymi we wszystkich zbiorach są słowa składające się z 4 liter (bez polskich znaków). Można wykorzystać zadanie A.

UWAGI

Zestaw 3

A
(2 punkt - implementacja kolejki)

Proszę zaimplementować typ priorotyQueue będący oparty na matematycznym zbiorze i posiadający, dla słownika \(A\) oraz elementu \(x\), operacje:

Niech \(p(x)\) będzie funkcją zwracającą “priorytet” elementu \(x\). Jeżeli w słowniku przechowywane będą liczby całkowite, priorytetem może być identyczność - \(p(1) = 1\), \(p(2) = 2\), …

Państwa implementację proszę oprzeć na wybranej, omawianej wcześniej, implementacji zbioru. Proszę zbadać złożoność obliczeniową operacji usuwania z kolejki elementu o najmniejszym “priorytecie” (wykres, wartość teoretyczna, dyskusja).

B
[źródło]
(6 punkt - implementacja kolejki)

Proszę zaimplementować kolejkę priorytetową priorityQueueBinary z operacjami jak w zadaniu A ale tym razem proszę oprzeć swoją implementacje o kopiec binarny. Proszę zbadać złożoność obliczeniową operacji usuwania z kolejki elementu o najmniejszym “priorytecie” (wykres, wartość teoretyczna, dyskusja) oraz porównać wyniki z zadaniem A.

UWAGI

Zestaw 4

A
(4 punkt - implementacja grafu)

Proszę zaimplementować ADT graph, który dla grafu \(G\) oraz wierzchołków \(x\), \(y\) ma implementacje następujących operacji:

Państwa implementację proszę, na początek, oprzeć ma macierzy połączeń. Dodatkowo proszę zbadać złożoność jednej wybranej operacji (wykres oraz opis).

Zestaw 5

A
(2 punkt)

Proszę zapoznać się z pakietem Graphviz. Następnie korzystając z programu dot proszę stworzyć plik jpg z grafem:

Przykładowy plik z prostrzym grafem oraz rezultat. Aby stworzyć obrazek wystarczy w linii komend uruchomić:

$ dot -Tjpg smallGraph -o smallGraph.jpg

Tutaj można znaleźć przewodnik po programie dot.

B
(3 punkt - implementacja grafu)

Proszę uzupełnić Państwa implementację grafu z poprzedniego zestawu o metodę tworzącą plik, który może być wykorzystany przez program dot do narysowania grafu.

C
(7 punkt - implementacja grafu)

Proszę zaimplementować ADT graph, posiadający wszystkie operacje z zadania A w zestawie 4. Tym razem proszę wykorzystać reprezentację w której dla każdego wierzchołka przechowywana jest list sąsiadów. Sprawdzić złożoność obliczeniową wybranej operacji i porównać z zadaniem A zestawu 4.

D
(3 punkt)
[źródło]

Proszę się zastanowić jak wykorzystać reprezentację grafową do rozwiązania problemu znalezienia minimalnej liczby “faz” sygnalizacji świetlnej na skrzyżowaniu (strzałeczki oznaczają ulice jednokierunkowe):

Sygnalizacja świetlna w każdej “fazie” powinna zezwalać na ruch przez skrzyżowanie jedynie tym samochodom, których trajektorie nie będą się przecinać. Aby usprawnić działanie skrzyżowania, liczba tych etapów powinna być jak najmniejsza.

Wykorzystując jedną z napisanych przez Państwa implementacji grafów oraz zadanie A z poprzedniego zestawu proszę narysować reprezentację grafową takiego skrzyżowania.

Wskazówka: proszę zajrzeć na początek źródła.