220 likes | 376 Views
Derekursywacja i optymalizacja kodu. Adam Kościelniak IiE III: Ekonometria. Derekursywacja.
E N D
Derekursywacja i optymalizacja kodu Adam Kościelniak IiE III: Ekonometria
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.
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.
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.
Mierzenie czasu wykonania Po modyfikacji kodu możemy mierzyć efektywność algorytmu dla różnej liczby wykonań :
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)
Rozmiar struktur Staraj się tworzyć struktury których rozmiar jest potęgą dwójki. 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 2 0 0 0 0 0 1 0 0 4 0 0 0 0 1 0 0 0 8 0 0 0 1 0 0 0 0 16
Zakres Case’ów Staraj się utrzymywać Case w wąskim zakresie
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 Jeśli utrzymamy liczbę zmiennych lokalnych kompilator przetrzyma je wszystkie w rejestrach.
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
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 Kiedy to tylko możliwe preferuj integer and char
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 koniecznaaby 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