Algorytmy i złożoność 2016/2017 - Studia zaoczne. Opisy projektów.

Transkrypt

Algorytmy i złożoność 2016/2017 - Studia zaoczne. Opisy projektów.
Algorytmy i złożoność 2016/17 – studia zaoczne
Projekty zaliczeniowe.
Warunki zaliczenia przedmiotu.
W semestrze ogłoszone zostaną trzy projekty. Za każdy z nich będzie można otrzymać do
10 punktów, przy czym oceny powyżej siedmiu punktów przewidziane są dla projektów
wykraczających poza zasadnicze ramy zadania. Dodatkowy, czwarty projekt będzie
ogłoszony w ramach zaliczenia poprawkowego. Każdy projekt będzie miał ściśle określony
termin zwrotu. Jeżeli ktoś przekroczy ten termin o mniej niż tydzień, będzie mógł liczyć na
maksymalnie 4 punkty. Dłuższe spóźnienie skutkuje automatycznym niezaliczeniem
projektu. Ponadto jeden punkt można otrzymać za sensowną aktywność na zajęciach.
Powiązanie punktów z oceną:
punkty
ocena
11 - 19
3
14 - 16
3+
17 - 19
4
20 - 22
4+
23 lub więcej
5
Projekty należy przysyłać na adres [email protected]. Proszę o tytuł maila
sformatowany wg następującego wzorca:
Projekt A – Jan Iksiński
Projekt A
Funkcja void Permute(int * tab, int n) otrzymuje jako argumenty wskaźnik do tablicy
liczb całkowitych i długość tej tablicy. Jej zadaniem jest dokonanie losowej permutacji liczb
w tablicy. Dobra funkcja to taka, która każdą permutację generuje z tym samym
prawdopodobieństwem.
Proszę o napisanie dwóch wersji pow. funkcji – z wykorzystaniem algorytmu, który losuje
kolejne
wyrazy
tablicy,
oraz
algorytmu
Knutha
(por.
https://en.wikipedia.org/wiki/Random_permutation). Proszę następnie o:
1. porównanie czasów działania funkcji dla rosnącego ciągu długości tablicy (mile
widziane ujęcie tego w formie wykresu)
2. zaproponowanie jakiejś metody sprawdzenia, na ile dana funkcja jest „dobra” - czyli,
czy losuje permutacje „sprawiedliwie”.
Projekt B
Wersja 1.
Zmodyfikować algorytm sortowania kubełkowego tak, żeby uwzględniał
możliwość, że liczby w tablicy zostały wylosowane z rozkładem
prawdopodobieństwa innym niż jednostajny. Pomysł jest taki, że algorytm
wstępnie losuje jakąś próbkę z tablicy, i na podstawie tej próbki dobiera ilość i
rozmiary „kubełków”. Sprawdzić doświadczalnie, czy zastosowany algorytm
jest średnio lepszy od poprzedniego. Można w tym celu wypełniać tablicę
liczbami losowymi w różny sposób, np.:
tab[i] = rand()%zakres;
lub
tab[i] = rand()%(zakres/3)+rand()%(zakres/3)+rand()%(zakres/3);
albo
tab[i] = pow( rand()%pow(zakres,2), 0.5) ;
Wersja 2.
Sprawdzić doświadczalnie działanie algorytmu sortowania Shella. Wykorzystać
trzy klasyczne ciągi kroków znane z wikipedii, oraz dwa własne.
Wersja druga pozwoli uzyskać standardowe 10 pkt, wersja pierwsza nawet
więcej. Termin nadsyłania prac – do 11 grudnia (zajęcia mamy 12go)
Projekt C
Wersja 1.
Posortować alfabetycznie wyrazy jakiegoś wybranego długiego tekstu (może
być np. ten: https://wolnelektury.pl/media/book/txt/lalka-tom-pierwszy.txt).
Wykorzystać w tym celu sortowanie pozycyjne. Zwrócić uwagę na fakt, że
wyrazy nie są jednakowej długości.
Wersja 2.
Zbadać doświadczalnie zależność między ilością węzłów a wysokością drzewa
BST stworzonego losowo. Przebadać drzewa o ilości węzłów 10 000, 20 000,
… , 100 000. Badanie przeprowadzić trzykrotnie, za pierwszym razem losując
liczby z przedziału [1, 10], za drugim z przedziału [1, 1000], a za trzecim z
całego zakresu funkcji Rand().
Proszę przysłać przed zajęciami.

Podobne dokumenty