WDI – zajęcia 8

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.

Leave a Reply

Your email address will not be published. Required fields are marked *