Derekursywacja i optymalizacja kodu 4/9/2017 Derekursywacja i optymalizacja kodu Adam Kościelniak IiE III: Ekonometria
4/9/2017 Derekursywacja Derekursywacja - przemiana algorytmów rekurencyjnych (rekursyjnych) na iteracyjne. Stosuje się ją w celu zwiększenia szybkości działania aplikacji (korzystającej z algorytmów rekurencyjnych) oraz zmniejszenia jej zajętości pamięciowej. Rekurencja Iteracja
4/9/2017 Iteracja Iteracja (łac. iteratio ‘powtórzenie’) to czynność powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa się także operacje wykonywane wewnątrz takiej pętli.
4/9/2017 Rekurencja Rekurencja albo rekursja (ang. recursion, z łac. recurrere, przybiec z powrotem) to w logice, programowaniu i w matematyce odwoływanie się np. funkcji lub definicji do samej siebie.
4/9/2017 Porównajmy Iteracyjnie Rekurencyjnie
Mierzenie czasu wykonania 4/9/2017 Mierzenie czasu wykonania Po modyfikacji kodu możemy mierzyć efektywność algorytmu dla różnej liczby wykonań :
Wyniki dla silni Rekurencja Iteracja 4/9/2017 Wyniki dla silni Rekurencja Iteracja 10000: 0.00300 sekund 100000: 0.03300 sekund 1000000: 0.36600 sekund 10000: 0.00100 sekund 100000: 0.01600 sekund 1000000: 0.14500 sekund
4/9/2017 Optymalizacja kodu
Preferuj inicjalizację na przypisanie 4/9/2017 Preferuj inicjalizację na przypisanie Weźmy pod uwagę przykład: W ten sposób oszczędzamy kompilatorowi pracy ponieważ nie musi się on po raz kolejny odwoływać do costructora typu complex (zdefiniowany wcześniej w programie typ – liczba zespolona)
4/9/2017 Rozmiar struktur Staraj się tworzyć struktury których rozmiar jest potęgą dwójki. 1 1 1 2 1 4 1 8 1 16
Zakres Case’ów Staraj się utrzymywać Case w wąskim zakresie 4/9/2017 1 Zrób 1 2 Zrób 2 3 Zrób 3 4 Zrób 4 def Zrób 5
Rozbijanie dużych switchy 4/9/2017 Rozbijanie dużych switchy Duże switche możemy rozbijać na ciągi switchy zagnieżdżonych (nested). Znacznie zmieniejsza to ilość wykonanych porównań.
Jak najmniej zmiennych lokalnych 4/9/2017 Jak najmniej zmiennych lokalnych Jeśli utrzymamy liczbę zmiennych lokalnych kompilator przetrzyma je wszystkie w rejestrach.
Zredukuj ilość parametrów 4/9/2017 Zredukuj ilość parametrów Jeśli funkcja używa dużej ilości parametrów każde wywołanie będzie wymagało operacji na stosach. Z tego samego powodu należy unikać przekazywania całych struktur jako parametry, używaj wskaźników i referencji. Struktura Funkcja *Wskaźnik
4/9/2017 Idąc dalej… Najlepiej ogólnie obiektów większych niż 4 bajty nie powinno się kopiować do funkcji a używac wskaźnika 8 Funkcja
Preferuj int nad char i short 4/9/2017 Preferuj int nad char i short Kiedy to tylko możliwe preferuj integer and char Pobierz wartości zmiennych Konwertuj na integer Wykonaj działanie Pobierz wartości zmiennych Wykonaj działanie
In line: Gdy twoje funkcje są małe poprzedź je wyrażeniem stałym „inline”
Pytanie kontrolne I Rekurencja to: Funkcja języka C++ Typ zmiennej Odwoływanie się funkcji do samej siebie Cecha estymatora klasycznej metody najmniejszych kwadratów
Pytanie kontrolne II Derekursywacji dokonujemy w celu: Zwiększenia wydajności programu Jest to czysto akademicka teoria Uporządkowania kodu Jest konieczna aby program uruchomił się na linuxie
Pytanie kontrolne III Co jest szybsze: Rekurencja Iteracja Nie ma różnicy Jest to zależne od procesora
Pytanie kontrolne IV Duże switche najlepiej: Rozdzielać na mniejsze Zagnieżdżać w sobie Odradza się używanie switchy Żadna z powyższych odpowiedzi