O P T Y M A L I Z A C J E

Tutaj możesz podyskutować na tematy nie kwalifikujące się do żadnego z pozostałych forów

O P T Y M A L I Z A C J E

Postautor: narbej » 06 mar 2014, 02:16

Był już wątek jak przyśpieszyć program?
Jeżeli nawet tak, to z wiadomych celów - reklama algoligi itd i itp ...

Wypiszę tu i będę dodawał - jak coś sobie przypomnę - moje przemyślenia na temat jak w temacie. Dlatego i nie tylko dlatego, włącz wykonywanie skryptów w swojej przeglądarce i zaglądaj tu, na algoliga.pl od czasu do czasu, albo jeszcze częściej.

1. Jeżeli nie masz jeszcze AC to zapomnij o optymalizacji, ale możesz, a nawet powinieneś, czytać dalej.
2. Najważniejsze jest poprawne [AC] działanie programu.
3. Twój kod powinien być "majstersztykiem", zrozumiały, i czytelny, łatwy do szybkiego wprowadzania zmian, konserwacji i powtórnego wykorzystania.
4. Optymalizacja kodu może zarówno poprawić to jak i całkowicie zniszczyć i czytelność i zrozumiałość kodu i łatwość jego ewentualnego używalności.
5. Więc raczej zapomnij o optymalizacji a skup się na powyższych celach, szybkim "klewpaniu" w klawiaturę, poznawaniu i praktycznym wykorzystywaniu algorytmów, czytaniu, czytaniu, czytaniu itd.
6. Czasami [często] najlepszą optymalizacją jest zastosowanie lepszego, wydajniejszego algortmu.
----------
Więc jednak mimo wszystko, chcesz jednak optymalizować?
7. Waro nauczyć się testować i mierzyć czas wykonania.
8. Wprowadzamy 1 zmianę i natychmiast sprawdzamy [testujemy czas] jaki miała wpływ. Wprowadzając dużo zmian - jeżeli nie mamy doświadczenia - może nam mocno namącić i nic się nie nauczysz, ani nie będziesz wiedział, która poprawka jest ważna..
9. Pamiętaj, że niektóre "oczywiste" zmiany i poprawki nic nie zmienią - dlaczego? Kompilatory takie oczywiste [i nie tylko] optymalizacje robi często lepiej, ale to nie znaczy, że zrobi za ciebie wszystko.
10 Testując sprawdzaj, czy program po wprowadzeniu "poprawek" nadal produje poprawne wyniki.
11. Skąd wziąźć poprawne wyniki - można napisać "bruta" i trochę mniejszy [od maksymalnego w danym zadaniu] test.
12. Pisząc w javie, możemy dla testów napisać działający i AC program np w c/c++
======
ok
Parę wskazówek do javy i nie tylko:
flusha wstaw w odpowiednim miejscu - potestuj jaki to ma wpływ na czas wykonania.
java nie ma typu unsigned - czasami taki typ byłby wystarczający, więc musimy użyć long ale tym bardziej używajmy go "oszczędnie"
Sprawdź wynik dla max danych, a może da się liczyć na int, a dopiero drukować na long [w c/c++ long long] np:
println((long) 4 * wynik + 1)
taki fragment,:
wynik = 0;
for (i=0;i<=n;i++)
wynik+=sqrt(n*n-i*i);
można zmienić:
wynik = n;
for (i=1; i < n ; i++)
wynik + = sqrt(n*n - i*i);
- oszczędność minimalna, tylko o dwa sqrt (sqrt(n*n -0) i sqrt (n*n - i*i /*==n*n==0*/))) mniej ale na takiej zasadzie, krok po kroku można sporo uzyskać.

cdn.
narbej
Koordynator AlgoLigi
 
Posty: 169
Rejestracja: 07 kwie 2013, 14:51

Wróć do Forum ogólne

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości

cron