Informacje dla studentów >> Algorytmy i struktury danych (Informatyka) >>
Zadania zaliczeniowe
Zadanie 1 | Zadanie 2 | Zadanie 3 | Zadanie 4 | Zadanie 5
Terminem zaliczenia programu jest dzień wyszczególniony w terminarzu zajęć.
Tylko w tym dniu można uzyskać maksymalną punktację za program (w przypadku niemożności zaliczenia programu na wyznaczonych zajęciach
należy umowić się na zaliczenie indywidualne). Sprawozdanie z danego tematu (pojedynczy plik pdf) powinno być wysłane emailem
najpóźniej 4 dni po zaliczeniu programu.
Zadanie 1: Algorytmy sortowania
I |
program
- Zaimplementuj następujące algorytmy sortowania ciągu liczb naturalnych w porządku malejącym:
- Selection Sort,
- Heap Sort,
- Shell Sort (z przyrostami liczonymi metodą ustaloną przez grupę),
- Quick Sort w wersji rekurencyjnej oraz iteracyjnej (pivot zgodnie z ustaleniami grupy).
Dane wejściowe: n-elementowy ciąg liczb naturalnych wczytywany z klawiatury (n<=10) lub generowany przez generator danych będący częścią programu. Proszę zapewnić odporność na błędy.
Dane wyjściowe: czas sortowania, oraz w przypadku liczb wczytywanych z klawiatury: (i) ciąg wejściowy i wyjściowy,
(ii) wartość pivota w każdej iteracji (Quick sort),
(iii) wartość przyrostu w każdej iteracji (Shell sort).
|
II |
testy
- Wygeneruj n-elementowe ciągi liczb naturalnych podanych w postaci losowej, rosnącej, malejącej, A-kształtnej i V-kształtnej (dla 10-15 różnych wartości n z przedziału <10,k>, przy czym k należy dobrać eksperymentalnie: możliwie duże ale takie, aby możliwe było wykonanie pomiarów).
- Zastosuj algorytmy SS, HS, ShS, QSr, QSi do posortowania każdego ciągu liczbowego. Zapisz czasy działania algorytmów.
|
III |
sprawozdanie
- Wykonaj 5 wykresów (jeden wykres dla każdej metody sortowania: SS, HS, ShS, QSi, QSr) t=f(n) zależności czasu obliczeń t od liczby n elementów tablicy.
Na każdym wykresie przedstaw 5 krzywych - po jednej krzywej dla każdej postaci danych wejściowych - pokazując w ten sposób zależność wybranego algorytmu od danych wejściowych.
- Wykonaj 5 wykresów (jeden wykres dla każdej postaci danych wejściowych) t=f(n) zależności czasu obliczeń t od liczby n elementów tablicy.
Na każdym wykresie przedstaw 5 krzywych - po jednej krzywej dla każdego algorytmu sortującego - pokazując w ten sposób efektywność zaimplementowanych metod sortowania dla wybranej postaci danych.
- Wypisz zalety i wady algorytmu Quick sort w wersji rekurencyjnej oraz iteracyjnej.
- Ponadto sprawozdanie powinno zawierać informację na jakiej platformie wykonano testy (sprzęt i system operacyjny) oraz kto jest autorem sprawozdania.
Uwagi dotyczące wykresów: Osie wykresów powinny być opisane (jakie dane na której osi). Każdy punkt na wykresie powinien być obliczony jako średnia z 5-10 pomiarów. Na wykresie przedstaw błąd pomiaru (odchylenie standardowe) dla każdego punktu, a jeśli błędy są nieznaczne podaj te dane w postaci tabelarycznej.
|
w górę
Zadanie 2: Złożone struktury danych
I |
program
- Zaimplementuj algorytm konstruowania drzewa AVL metodą połowienia binarnego oraz algorytm konstruowania 'losowego' drzewa BST (bierzemy kolejne elementy ciągu liczbowego i wstawiamy je do drzewa).
- Zaimplementuj procedury obsługujące następujące operacje na obu drzewach:
- wyszukanie w drzewie elementu o najmniejszej wartości i wypisanie jej (wyszukiwanie zaczynamy od korzenia),
- usunięcie elementu drzewa o wartości klucza podanej przez użytkownika (użytkownik wpisuje ile węzłów chce usunąć i podaje wartości kluczy),
- wypisanie wszystkich elementów drzewa w porządku rosnącym,
- usunięcie całego drzewa element po elemencie metodą post-order.
- wypisanie wartości korzenia.
Procedury mają być wywoływane automatycznie jedna po drugiej, w kolejności podanej powyżej.
Program powinien wyświetlać informacje o wyniku zakończonej procedury. Program winien być odporny na błędy wprowadzane przez użytkownika.
- Zaimplementuj wybraną procedurę równoważenia drzewa BST:
- równoważenie przez rotacje (algorytm DSW),
- równoważenie przez usuwanie korzenia.
|
II |
testy
- Wygeneruj n-elementowe posortowane malejąco ciągi liczb naturalnych (dla 10-15 różnych wartości n z przedziału <10,k>, przy czym k należy dobrać eksperymentalnie tak, aby możliwe było wykonanie pomiarów i aby jego wartość była możliwie duża).
- Zmierz czasy wykonywania następujących operacji na obu drzewach: tworzenie drzewa, wyszukiwanie elementu o minimalnej wartości, wypisywanie wszystkich elementów drzewa, równoważenia drzewa BST.
|
III |
sprawozdanie
- Wykonaj 3 wykresy (jeden wykres dla każdej z operacji: tworzenie struktury, wyszukanie minimum, wypisanie in-order) t=f(n) zależności czasu obliczeń t od liczby n elementów w drzewie.
Na każdym wykresie przedstaw 2 krzywe - po jednej krzywej dla każdej struktury.
- Wykonaj wykres t=f(n) zależności czasu równoważenia t od liczby n elementów w drzewie.
- Ponadto sprawozdanie powinno zawierać informację na jakiej platformie wykonano testy (sprzęt i system operacyjny) oraz kto jest autorem sprawozdania.
Uwagi dotyczące wykresów: Osie wykresów powinny być opisane (jakie dane na której osi). Każdy punkt na wykresie powinien być obliczony jako średnia z 5-10 pomiarów. Na wykresie przedstaw błąd pomiaru (odchylenie standardowe) dla każdego punktu, a jeśli błędy są nieznaczne podaj te dane w postaci tabelarycznej.
|
w górę
Zadanie 3: Algorytmy grafowe
I |
program
- Zaimplementuj algorytmy sortowania topologicznego wierzchołków grafu (a) z wykorzystaniem procedury przechodzenia w głąb (DFS)
i (b) z usuwaniem wierzchołków o zerowym stopniu wejściowym dla następujących reprezentacji maszynowych grafu skierowanego:
- lista następników,
- macierz sąsiedztwa,
- macierz grafu.
Razem należy zaimplementować 6 algorytmów: DFS_lista, DFS_msasiedztwa, DFS_mgrafu, DEL_lista, DEL_msasiedztwa, DEL_mgrafu.
- Program powinien mieć możliwość wczytywania danych z pliku tekstowego zawierającego graf zapisany w postaci listy
krawędzi, gdzie para liczb w pierwszej linii to informacja o liczbie wieczchołków i liczbie krawędzi, a pary w kolejnych liniach
to pary wierzchołków połączonych łukiem. Spacja jest separatorem liczb w pojedynczej linii.
|
II |
testy
- Wygeneruj grafy skierowane acykliczne o n wierzchołkach i współczynniku nasycenia krawędziami równym 50%
(oznacza to, że liczba krawędzi grafu wynosi 50% z n(n-1)/2), nie będące multigrafami, dla 10-15 różnych wartości
n z przedziału <10,k> (k należy dobrać eksperymentalnie tak, aby możliwe było
wykonanie pomiarów i aby jego wartość była możliwie duża).
- Zastosuj wszystkie 6 algorytmów do posortowania wygenerowanych grafów. Zapisz czasy działania algorytmów.
|
III |
sprawozdanie
- Wykonaj 3 wykresy (jeden wykres dla każdej reprezentacji maszynowej grafu) t=f(n) zależności
czasu obliczeń t od liczby n wierzchołków w grafie.
Na każdym wykresie przedstaw 2 krzywe - po jednej krzywej dla każdej metody sortowania topologicznego.
- Wykonaj 2 wykresy (jeden wykres dla każdej metody sortowania topologicznego) t=f(n) zależności
czasu obliczeń t od liczby n wierzchołków w grafie.
Na każdym wykresie przedstaw 3 krzywe - po jednej krzywej dla każdej reprezentacji maszynowej grafu.
- Opisz zalety i wady każdej reprezentacji grafu z punktu widzenia ich zastosowania w zaimplementowanych algorytmach.
- Ponadto sprawozdanie powinno zawierać informację na jakiej platformie wykonano testy (sprzęt i system operacyjny) oraz kto jest autorem sprawozdania.
Uwagi dotyczące wykresów: Osie wykresów powinny być opisane (jakie dane na której osi). Każdy punkt na wykresie powinien być obliczony jako średnia z 5-10 pomiarów. Na wykresie przedstaw błąd pomiaru (odchylenie standardowe) dla każdego punktu, a jeśli błędy są nieznaczne podaj te dane w postaci tabelarycznej.
|
w górę
Zadanie 4: Algorytmy z powracaniem
I |
program
- Zaimplementuj algorytm Robersta-Floresa AH znajdujący (a) jeden (pierwszy znaleziony) cykl Hamiltona, (b) wszystkie cykle Hamiltona w grafie nieskierowanym (zbiór cykli ma być różnowartościowy).
- Zaimplementuj algorytm Fleury'ego AE znajdujący (a) jeden (pierwszy znaleziony) cykl Eulera, (b) wszystkie cykle Eulera w grafie nieskierowanym (zbiór cykli ma być różnowartościowy).
Uwaga: jeśli mamy cykle A i B, takie że cykl A jest odbiciem lustrzanym cyklu B, to tylko jeden z nich ma być wypisany na wyjściu.
Razem należy zaimplementować 2 algorytmy, każdy z dwoma warunkami stopu przekazywanymi jako parametr wejściowy (stop po znalezieniu pierwszego cyklu / stop po znalezieniu wszystkich cykli).
Można wybrać dowolną reprezentację maszynową grafu (taką samą dla obu algorytmów). Milej widziane są implementacje algorytmów, w których nie zastosowano instrukcji break.
|
II |
testy
- Wygeneruj grafy nieskierowane o n wierzchołkach i współczynniku nasycenia krawędziami równym s:
dla 9-ciu wartości s z przedziału <10,90> oraz dla 10-15 różnych wartości
n z przedziału <10,k> (k należy dobrać eksperymentalnie tak, aby możliwe było
wykonanie pomiarów i aby jego wartość była możliwie duża).
- Zastosuj oba algorytmy do znalezienia jednego i wszystkich cykli w wygenerowanych grafach. Zapisz czasy działania algorytmów.
|
III |
sprawozdanie
- Wykonaj 2 wykresy (jeden wykres dla poszukiwania jednego cyklu, drugi wykres dla poszukiwania wszystkich cykli) t=f(n) zależności
czasu obliczeń t od liczby n wierzchołków w grafie przy stałej wartości nasycenia s=50%.
Na każdym wykresie przedstaw 2 krzywe - po jednej krzywej dla każdego algorytmu.
- Wykonaj 2 wykresy (jeden wykres dla każdego algorytmu) t=f(n) zależności
czasu obliczeń t od liczby n wierzchołków w grafie przy stałej wartości nasycenia s=50%.
Na każdym wykresie przedstaw 2 krzywe - jedna krzywa dla poszukiwania jednego cyklu, drugi - dla poszukiwania wszystkich cykli.
- Wykonaj 2 wykresy (jeden wykres dla poszukiwania jednego cyklu, drugi wykres dla poszukiwania wszystkich cykli) t=f(s) zależności
czasu obliczeń t od nasycenia s przy stałej liczbie wierzchołków n.
Na każdym wykresie przedstaw 2 krzywe - po jednej krzywej dla każdego algorytmu.
- Wykonaj 2 wykresy (jeden wykres dla każdego algorytmu) t=f(s) zależności
czasu obliczeń t od nasycenia s przy stałej liczbie wierzchołków n.
Na każdym wykresie przedstaw 2 krzywe - jedna krzywa dla poszukiwania jednego cyklu, drugi - dla poszukiwania wszystkich cykli.
- Wykonaj 2 wykresy (jeden wykres dla każdego algorytmu) t=f(n,s) zależności
czasu obliczeń t od liczby n wierzchołków w grafie i nasycenia s, dla poszukiwania wszystkich cykli.
- Podaj jaka jest złożoność obliczeniowa zaproponowanych algorytmów oraz do jakich klas złożoności
obliczeniowej należą badane problemy poszukiwania cyklu Hamiltona i cyklu Eulera w grafie (wersja przeszukiwania i wersja decyzyjna).
- Przedstaw obserwacje związane z działaniem obu algorytmów dla grafów o różnym nasyceniu.
- Odpowiedz jaką reprezentację maszynową grafu Twoim zdaniem najlepiej zastosować w przypadku każdego algorytmu i dlaczego.
- Ponadto sprawozdanie powinno zawierać informację na jakiej platformie wykonano testy (sprzęt i system operacyjny) oraz kto jest autorem sprawozdania.
Uwagi dotyczące wykresów: Osie wykresów powinny być opisane (jakie dane na której osi). Każdy punkt na wykresie powinien być obliczony jako średnia z 5-10 pomiarów. Na wykresie przedstaw błąd pomiaru (odchylenie standardowe) dla każdego punktu, a jeśli błędy są nieznaczne podaj te dane w postaci tabelarycznej.
|
w górę
Zadanie 5: Programowanie dynamiczne
I |
program
- Zaimplementuj algorytm programowania dynamicznego APD rozwiązujący 0-1 problem plecakowy.
- Zaimplementuj algorytm wyczerpujący AW rozwiązujący 0-1 problem plecakowy.
- Obie implementacje powinny spełniać następujące wymagania:
(i) należy umożliwić wczytywanie danych (zbiór przedmiotów z parametrami i pojemność plecaka) z klawiatury oraz z pliku ASCII;
(ii) format danych w pliku powinien być zdefiniowany przez twórców programu i objaśniony na wstępie;
(iii) program winien być odporny na wszelkie błędy wprowadzane przez użytkownika przy podawaniu danych wejściowych.
|
II |
testy
- Wygeneruj dane wejściowe dla problemu plecakowego: n-elementowy zbiór przedmiotów, każdemu z nich przyporządkuj rozmiar r(i) oraz wartość w(i). Parametry rozmiar
i wartość przyjmują wartości ze zbioru liczb naturalnych. Każdy przedmiot jest unikatowy (ma inny identyfikator), ale w zbiorze może istnieć
wiele przedmiotów o takim samym rozmiarze / wartości. Ustal pojemność plecaka b, do którego zapakujesz przedmioty ze zbioru.
- Zastosuj oba algorytmy do znalezienia optymalnego rozwiązania problemu. Porównaj efektywność tych algorytmów mierząc czas uzyskania
rozwiązania optymalnego przez każdą metodę dla tych samych instancji problemu.
|
III |
sprawozdanie
- Wykonaj dla algorytmu APD wykres t=f(n) zależności czasu obliczeń t od liczby n przedmiotów,
przy stałej pojemności plecaka b.
- Wykonaj dla algorytmu AW wykres t=f(n) zależności czasu obliczeń t od liczby n przedmiotów,
przy stałej pojemności plecaka b.
- Wykonaj dla algorytmu APD wykres t=f(b) zależności czasu obliczeń t od pojemności plecaka b,
przy stałej liczbie przedmiotów n.
- Wykonaj dla algorytmu AW wykres t=f(b) zależności czasu obliczeń t od pojemności plecaka b,
przy stałej liczbie przedmiotów n.
- Wykonaj dla algorytmu APD wykres t=f(n,b) zależności czasu obliczeń t od liczby n przedmiotów i pojemności plecaka b.
- Wykonaj dla algorytmu AW wykres t=f(n,b) zależności czasu obliczeń t od liczby n przedmiotów i pojemności plecaka b.
- Podaj jaka jest złożoność obliczeniowa zaproponowanych algorytmów oraz do jakich klas złożoności
obliczeniowej należy 0-1 problem plecakowy (wersja optymalizacyjna i decyzyjna).
- Przedstaw obserwacje związane z działaniem obu algorytmów.
- Ponadto sprawozdanie powinno zawierać informację na jakiej platformie wykonano testy (sprzęt i system operacyjny) oraz kto jest autorem sprawozdania.
Uwagi dotyczące wykresów: Osie wykresów powinny być opisane (jakie dane na której osi). Każdy punkt na wykresie powinien być obliczony jako średnia z 5-10 pomiarów. Na wykresie przedstaw błąd pomiaru (odchylenie standardowe) dla każdego punktu, a jeśli błędy są nieznaczne podaj te dane w postaci tabelarycznej.
|
w górę