jsc Temat założony przez niniejszego użytkownika |
PS. do tematu "Przeczytany, zamknięty Czy da się bez użycia warunków if" » 2010-12-27 15:30:12 (... Marys)Rozwiązanie F90M jest proste i skuteczne, dzięki wielkie!(...)
Każdy ma swój gust, ale urządziłem wyścig: #include <iostream> #include <time.h> #include <math.h>
using namespace std;
int main() { #if 0 int a = 5; int b, c; long int czas;
czas = time (NULL); for (long int i1=0; i1 < 1000000000; ++i1) //F90M daje 20 sek. {
b =( a - a % 2 ) / 2 - 1; c =( a + a % 2 ) / 2 - 2;
} czas = czas - time (NULL); cout << czas; cin >> a; #endif
#if 1 int a = 5; int b, c; long int czas;
czas = time (NULL); for (long int i1=0; i1 < 1000000000; ++i1) //JSC daje 19 sek. { a =- 3; b = a/2; c = a + ((a%2) == 1);
} czas = czas - time (NULL); cout << czas; cin >> a; #endif
return 0; } i okazało się, że moje rozwiązanie jest wydajniejsze i jak mi się wydaje po kompilacji zajmuje mniej miejsca. |
|
DejaVu |
» 2010-12-27 15:31:34 PS. temat możesz otworzyć, jeżeli jesteś jego autorem, a jeżeli nie - to zapewne autor nie jest zainteresowany dalszym ciągnięcem wątku i znalazł rozwiązanie, które go zadowala ;p
/edit:
Nie wiem czym się zachwycasz skoro to samo co Ty napisałeś można zrobić w czasie stałym, czyli O(1) :)
/edit2:
Ponadto obliczenia nie są wykonywane dla tych samych danych wejściowych i algorytmy nie są równoważne. |
|
ison |
» 2010-12-27 15:43:52 1) w jednym przypadku rozpatrujesz testy dla a=5 a w drugim dla a=-3 2) różnica między 19 sek a 20 może wynikać z błędów w mierzeniu czasu, wziąłeś pod uwagę że może akurat w chwili testowania któregoś z rozwiązań Twój komputer był bardziej obciążony? 3) Twoje rozwiązanie i tak nie jest najlepsze 4) dlaczego nie ctime i cmath? 5) wynik bardziej zależy od szczęścia Twój kod wykonuje się u mnie 8846 ms a kod F90M 8265 ms bez optymalizacji, a z optymalizacją po około 400 ms |
|
pekfos |
» 2010-12-27 15:56:51 pierwsze uruchomienie programu jest najdłuższe bo antywiry indeksują program i ew. analizują heurystycznie. ale ty oczywiście to uwzględniłeś.. |
|
jsc Temat założony przez niniejszego użytkownika |
» 2010-12-27 15:59:45 Dobra macie rację, że źle zadeklarowałem zmienne lokalne.
A co wyniku to F90M 23 s. i JSC 21 s. przy porównywalnym obciążeniu sprawdzony na menedżerze zadań.
A co do tego zachwytu to bym powiedział, że w nauczaniu programowania w ogóle nie pojawia się temat optymalizacji (tzn. tej podstawowej), a uczy się np. że do robienia silni jest lepsza rekurencja niż pętla for.
4) dlaczego nie ctime i cmath?
A to dlatego, że jest w C++ zielony, a w C to już jako tako sobie radzę. Ale dzięki za te dwie biblioteki, będę z nich często korzystał.
A co uwagi o antywirusie to raczej zaprzeczę, ponieważ za każdą kompilacją kod jest inny (o to dbają komendy preprocesora #if 0/1 i #endif). |
|
ison |
» 2010-12-27 16:04:17 że w nauczaniu programowania w ogóle nie pojawia się temat optymalizacji (tzn. tej podstawowej)
|
a co jest trudnego w dopisaniu -o3 przy kompilacji lub włączeniem tej opcji w narzędziach IDE? ;D A to dlatego, że jest w C++ zielony, a w C to już jako tako sobie radzę. Ale dzięki za te dwie biblioteki, będę z nich często korzystał.
|
nie ma żadnych większych różnic między nimi... kod i tak Ci się skompiluje jedyna różnica jest taka że w headerach z C++ zawartość jest w namespace std; (teoretycznie) |
|
jsc Temat założony przez niniejszego użytkownika |
» 2010-12-27 16:09:22 Chodzi mi o proste sztuczki, które można dokonać na kodzie, a co do opcji kompilatora to włączanie i wyłączanie z równoczesnym dowiadywaniu się w Internecie jest uciążliwe, ale jak się pozna to można to można po prostu napisać makro powłoki systemowej. |
|
ison |
» 2010-12-27 16:16:26 tak na przyszłość to staraj się unikać dzielenia jeśli możesz jest szybsze od co więcej jeśli dzielisz przez potęgę dwójki to możesz zwyczajnie przesunąć liczbę bitowo w prawo o określoną liczbę miejsc jest równoznaczne z więc w Twoim przypadku zamiast dzielenia przez 2 możesz przesunąć liczbę o 1 bit w prawo |
|
« 1 » 2 3 4 5 6 7 8 |