python_test_mike_d

python homework


Keywords
testing, logging, example
License
Other
Install
pip install python_test_mike_d==0.1

Documentation

Programowanie w jezyku Python 2016/2017 zadanie 2

W celu oszacowania czasu wykonania programu kuszące jest czasem zalozyc liniowa złożoność obliczeniowa. Czas sortowania możemy oszacować monotonicznej listy na 17.9 us dla 1000 elementów:

python -m timeit -s "s = list(range(1000))" "sorted(s)"
100000 loops, best of 3: 17.9 usec per loop

Próbując uogólnić ten wynik na listę składająca sie z 10^6 elementów spodziewalibyśmy się wyniku okolo 18 ms. Dokonując pomiaru otrzymujemy jednak czas o około 35% większy:

python -m timeit -s "s = list(range(1000000))" "sorted(s)"
10 loops, best of 3: 24.5 msec per loop

Przygotuj program do automatycznego wyznaczania złożoności obliczeniowej.

Program ten powinien otrzymywać na wejściu:

  • Inicjalizacje odpowiednich struktur
  • Funkcje lub klase odpowiedzialna za wykonanie algorytmu
  • Kod odpowiedzialny za posprzątanie

Jako wynik powinniśmy otrzymać:

  • Informacje o przypuszczalnej klasie złożoności obliczeniowej ( O(n), O(n log(n)), O(n^2))
  • Funkcje umożliwiające przewidywanie jaki będzie czas wykonania programu dla zadanej wielkości problemu
  • Funkcję umożliwiającą przewidywanie jaki jest maksymalny rozmiar problemu obliczeniowego dla zadanego czasu

Wyznaczanie złożoności niektórych algorytmów może trwać bardzo długo. Aby umożliwić wykonanie programu w rozsądnym czasie program powinien posiadać ograniczenie w postaci parametru “timeout” ustawionego domyślnie na 30 sekund. W przypadku nie otrzymania ostatecznego wyniku w założonym czasie program powinien zwrócić wynik cząstkowy (np “złożoność gorsza niż O(n)”).

Program powinien dać się zainstalować jako pakiet pip bezpośrednio z repozytorium (np używając komendy pip install git+https://github.com/AGHPythonCourse2017/zad01-grzanka.git)

Program powinien wykorzystywać następujące elementy:

  • Logger
  • dekoratory
  • własne wyjątki

Program powinien przejść test flake8 (zgodność z PEP8).

Za wykonania zadania mozna zdobyc maksymalnie 0.9 punktu.

Dodatkowo trzeba wykonać trzy recenzje rozwiązań zadania nr 1 i umieścić w repozytorium w pliku review.txt odnośniki do odpowiednich “Pull request”. Ten fragment zadania umożliwia zdobycie maksymalnie 0.1 punktu.

Tresc zadania w Google Drive: https://goo.gl/r87sPE

Termin oddania zadania: 8 maja 2017, 20:00