Dzisiejszym zadaniem jest napisanie pakietu testującego szybkość zaimplementowanych przez nas funkcji sortujących. Pakiet musi posiadać następujące funkcjonalności:
- wczytywanie list z pliku (listy mogą być zapisane w kilku różnych formatach),
- porównanie szybkości wykonania różnych funkcji sortujących na wczytanych listach,
- możliwość generowania losowych list i ich zapisu do pliku – funkcja generate_list(path, swaps_no, length), która zapisze do pliku o ścieżce path listę liczb naturalnych od 1 do length wygenerowanych wg następującego algorytmu:
a ← range(length) for i from swaps_no to 1 do di ← random element of { 0, ..., (length - swaps_no + i - 2) } swap a[di] and a[length - swaps_no + i - 1] return a
Szczegóły implementacji:
Pakiet musi składać się z trzech modułów.
- Pierwszy moduł będzie zawierał funkcje sortujące (ważne jest, żeby były to funkcje o takim samym interfejsie, czyli przyjmujące jako jedyny parametr listę, a zwracające listę posortowaną).
- Drugi moduł będzie zawierał funkcje wczytujące listy z plików w następujących formatach:
format 1 (rozszerzenie .li1):[4, 3, 1, 2, 4, 5]
format 2 (rozszerzenie .li2):
4 3 1 2 4 5
format 3 (rozszerzenie .li3):
4 3 1 2 4 5
W drugim module powinny się znaleźć trzy funkcje, które przyjmują jako parametr nazwę pliku, a zwracają wczytaną z tego pliku listę.
- Trzeci moduł ma zawierać funkcję przeszukującą wskazany katalog w poszukiwaniu plików z listami (rozszerzenia .li1, .li2 lub .li3) i dla każdego z takich plików ma wywoływać wszystkie dostępne w pierwszym module funkcje testujące a następnie wypisywać informację o czasie działania funkcji na wczytanej liście. Dodatkowo trzeci moduł musi zawierać funkcję generate_list.
Na koniec należy napisać skrypt o nazwie compare_sorts.py, który można wywoływać z linii poleceń za pomocą komendy: python compare_sorts.py [opcje]. Skrypt ten korzysta z napisanego pakietu i rozwiązuje powyżej opisane problemy. Skrypt powinien udostępniać następujące opcje:
-h – pomoc na temat sposobu wywołania skryptu
-d – katalog z listami (domyślnie bieżący)
-g len – generowanie zestawu 9 plików testowych, zawierających listy o długości len, po trzy w każdym formacie. Dla każdego formatu pliki powinny zostać wygenerowane funkcją generate_list z parametrami swaps_no równymi odpowiednio 10, (len / 3) i len – 1.