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.

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

Korzystając wyników zadania D, proszę napisać program minimalizujący liczbę “faz” sygnalizacji świetlnej dla tego skrzyżowania.

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

Zestaw 6

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

Na szachownicy, na określonej pozycji, znajduje się pojedyncza figura - skoczek (koń). Proszę znaleźć taką trasę skoczka po szachownicy, aby każde pole było odwiedzone jedynie raz. Można wykorzystać jedną z wcześniej zaimplementowanych przez Państwa reprezentacji grafu lub skorzystać z gotowych bibliotek. Państwa wynik końcowy proszę przedstawić w formie rysunku.

B
(3 punkt)
źródło

Bierzemy udział w grze, która ma następujęce reguły:

Jeżeli za słowo startowe wybierze się “ster” a za końcowe “atom” gra może wyglądać następująco:

ster -> step -> stop -> utop -> utom -> atom

Proszę zaimplementować program, szukający najkrótszej ścieżki pomiędzy zadanym słowem startowym i końcowym.

Wskazówka: Proszę zajrzeć do źródła. Słownik języka polskiego, w postaci spakowanego pliku tekstowego, można pobrać tutaj.

C
(3 punkt)
źródło

Robimy naleśniki. Składniki są następujące:

Abu zrobić naleśniki należy:

Proszę zareprezentować ten proces w postaci grafu \(G\). Następnie proszę napisać program, który na podstawie grafu \(G\) decyduje o kolejności wykonywanych czynności kulinarnych. Proszę uogólnić swój program, tak aby przyjmował dowolny graf \(G\).

Wskazówka: źródło.

Zestaw 7

A
(1 punkt)

Pracujecie Państwo w budynku biurowym w którym plan elewacji wygląda następująco:

Korzystając z algorytmu Dijkstry proszę znaleźć najkrótszy czas przejścia z każdego pomieszczenia do klatki chodowej A oraz do ubikacji J. Liczby znajdujące się na strzałeczkach oznaczają średni czas potrzebny na przejęcie z jednego pomieszczenia do drugiego.

[wskazówka]

B
(1 punkt)

Praca biurowa wzmaga apetyt. Korzystając z algorytmu Dijkstry oraz planu elewacji z zadania A proszę znaleźć najkrótszą ścieżkę z aneksu kuchennego I do pokoju szefa D.

[wskazówka]

Zestaw 8

A
(2 punkt)

Średnie czasy przejazdu samochodem pomiędzy polskimi miastami można odczytać z tabelki (dane pochodzą z google maps). W pierwszych dwóch kolumnach znajdują się miasta a w trzeciej kolumnie znajduje się czas przejazdu w minutach. Proszę znaleźć najkrótszy czas przejazdu pomiędzy wszystkimi parami miast. Wynik powinien być w postaci tabeli, której wiersze oraz kolumny odpowiadają kolejnym miastom natomiast wartości tabelki odpowiadają najkrótszym czasom przejazdu.

Wskazówka: proszę skorzystać z algorytmu Floyda Warszalla.

B
(1 punkt)

Korzystająć z tabelki czasów przejazdu (dane pochodzą z google maps) proszę znaleźć najszybszą trasę pomiędzy wszystkimi parami miast. Korzystając z programu dot (lub innego programu) oraz tabelki ze współrzędnymi geograficznymi miast (pierwsza kolumna zawiera nazwę miasta, druga oraz trzecia kolumna zawiera współrzędne geograficzne) proszę zaznaczyć na grafie wszystkie miasta oraz najszybsze trasy pomiędzy parami miast (jeden rysunek dla każdej pary).

Wskazówka 1: proszę skorzystać z algorytmu Floyda Warszalla.

Wskazówka 2: Przykładowy plik do programu dot gdzie podane są współrzędne wierzchołków. Wykonanie polecenia [źródło]dot -Kfdp -n -Tpng example_dot -o example_dot.png powinno skutkować stworzeniem pliku.

Zestaw 9

A
(1 punkt)

Prowadzicie Państwo serwis internetowy zapewniający dostęp do gier za pośrednictwem strumienia danych. Gry są uruchamiane na serwerach w waszej firmie i chcecie rozsyłać obraz oraz dźwięk do swoich użytkowników z jak najmniejszym opóźnieniem. Zbadaliście sieć połączeń pomiędzy waszą firmą oraz komputerami \(127\) klientów (jesteście raczkującą firmą) oraz zapisaliście ją w pliku. Pierwsze dwie kolumny zawierają indywidualne numery komputerów (numer \(1\) to wasza firma, numery \(2 \ldots 128\) to komputery klientów) pomiędzy, którymi są połączenia. Trzecia kolumna zawiera średnie opóźnienie sygnału z danymi dla danego połączenia. Aby znaleźć optymalną ścieżkę sygnału z danymi od waszej firmy (numerek \(1\)) do klientów należy skonstruować minimalne drzewo rozpinające graf połączeń. Proszę korzystając z algorytmu Prima policzyć takie drzewo. Wskazówka.

B
(1 punkt)

Proszę znaleźć drzewko z poprzedniego zadania korzystając z algorytmu Kruskala. Proszę porównać efektywność obydwu algorytmów. Wskazówka

Zestaw 10

A
(1 punkt)

[żródło] W pliku, pliku oraz pliku zapisane są grafy (skierowane oraz nie skierowane) w postaci macierzowej (1 - oznacza istninie krawędzi). Proszę napisać program badający cykliczność grafów i wykorzystać go do zbadanie tych trzech przykładów. Wskazówka.

B
(1 punkt)

W pliku, pliku oraz pliku zapisane są grafy (skierowane oraz nie skierowane) w postaci macierzowej (1 - oznacza istninie krawędzi). Proszę napisać program badający spójność grafów i wykorzystać go do zbadanie tych trzech przykładów. Wskazówka.