Ĺadny brzuch
Zna ktoś bardziej dokładną metode pomiaru czasu wykonania procedury niż:
I.
t1,t2:tdatatime; t:integer; t1:=now; t2:=now; t:millisecondsbetween(t2,t1);
II.
t,t1,t2:integer; t1:=gettickcount; t2:=gettickcount; t:=t2-t1;
Ile jest metod sortowania w Delphi, znam tylko jedną bąbelkową, są jeszcze jakieś inne?
P.S. zamieszczam przykładowy program
uses Sysutils, DateUtils, Windows; const N=10; type TTab=array[0..N] of real; procedure RandomTab(size:integer, var Tab:TTab); var i:integer; begin randomize; for i:=0 to size do Tab[i]:=random(1001)/1000; end; procedure ShowTab(size:integer; const Tab:TTab); var i:integer; begin write(Tab[0]:3:2); for i:=1 to size do write('; ',Tab[i]); writeln; end; procedure SortTab(size:integer; var:Tab:TTab); var i,j:integer tmp:real; begin for i:=0 to size do for j:=0 to i do if Tab[i] > Tab[j] then begin tmp:=Tab[i]; Tab[i]:=Tab[j]; Tab[j]:=tmp; end; end; var Tab:TTab; T,T1,T2:integer; begin RandomTab(N,Tab); ShowTab(N,Tab); T1:=GetTickCount; SortTab(N,Tab); T2:=GetTickCount; ShowTab(N,Tab); T:=T2-T1; end.
Użytkownik Przemko2000 edytował ten post 26 grudzień 2007, 12:24
Ile jest metod sortowania w Delphi, znam tylko jedną bąbelkową, są jeszcze jakieś inne?
Tyle ile sobie zaimplementujesz. Google -> (tablice) sortowanie
Co do pomiaru, to nie znam - zawsze 1/1000 s mi starczała.
poszukaj o QueryPerformanceCounter, costam kombinowalem z tym jak sie bawilem DirectXem :)
niestety nie moge znalezc src
Użytkownik migajek edytował ten post 26 grudzień 2007, 12:58
jak chcesz przetestowac predkosc algorytmu(w tym przypadku sortowania), a czas jest zbyt krotki zeby go dokladnie wyswietlic, to powtorz ten algorytm(petla) kilka (-dziesiat,-set) razy..
edit@DOWN:
przeciez to nie bedzie wiarygodny wynik - opoznienia porcesora, pamieci, etc.. (przy takich krotkich zadaniach)
predzej zapetlnie tego i zwrocenie usrednionego wyniku bedzie bardziej wiarygodne..
Użytkownik fernandez edytował ten post 26 grudzień 2007, 17:33
Wiem ale takie jest moje zadanie(zaliczenie przedmiotu itd.)
Wiem ale takie jest moje zadanie(zaliczenie przedmiotu itd.)
dlatego polecam querypreformancecounter. podobno najdokladniejsza metoda :)
predzej zapetlnie tego i zwrocenie usrednionego wyniku bedzie bardziej wiarygodne..
nie usrednionego, tylko najkrotszego (pod warunkiem ze dane sa te same oczywiscie). ten sam algorytm zawsze pracuje tak samo przy tych samych danych na tym samym kompie. jesli czasy sa rozne to przez czynniku zewnetrzne (z doswiadczenia - wystarczy zeby kolo polnocy gg sciagnelo nowa reklame, zeby totalnie zepsuc wynik pomiarow :P ), wiec zawsze czas najnizszy jest najblizszy rzeczywistosci.
Użytkownik Deadeye edytował ten post 27 grudzień 2007, 02:42
nie usrednionego, tylko najkrotszego (pod warunkiem ze dane sa te same oczywiscie). ten sam algorytm zawsze pracuje tak samo przy tych samych danych na tym samym kompie. jesli czasy sa rozne to przez czynniku zewnetrzne (z doswiadczenia - wystarczy zeby kolo polnocy gg sciagnelo nowa reklame, zeby totalnie zepsuc wynik pomiarow :P ), wiec zawsze czas najnizszy jest najblizszy rzeczywistosci.
Nie prawda, najlepszym pomiarem będzie średnia ważona :)
To że jakaś reklama z gg może się zassać to ok, ale to że algorytm zostanie odpalony na tym samym kompie nie gwarantuje czasu jego wykonania w tym samym czasie, to zależy od tego na ile przerwań natrafi w czasie swojego wykonywania, i jeżeli norlanie natrafia na 10 przerwań, a raz (na milion próB) trafiła na 2 przerwania, to co, ten wynik ma być najdokłądniejszy?
To że jakaś reklama z gg może się zassać to ok, ale to że algorytm zostanie odpalony na tym samym kompie nie gwarantuje czasu jego wykonania w tym samym czasie, to zależy od tego na ile przerwań natrafi w czasie swojego wykonywania, i jeżeli norlanie natrafia na 10 przerwań, a raz (na milion pró B) trafiła na 2 przerwania, to co, ten wynik ma być najdokłądniejszy?
tak, bo ten wynik najbardziej pokazuje czas w odizolowanym srodowisku. wyobraz sobie ze w momencie odpalania algorytmu jest aktywna jakakolwiek usluga robiaca cokolwiek w tle, a w momencie wlaczenia drugiego testu nie - i juz wyniki nie maja zadnego sensu. wybierajac najszybszy czas wykonania mamy czas odniesienia ktory prawie zawsze jest taki sam - bo tu przeciez nie chodzi o realny czas pomiaru wykonywania algorytmu (to i tak nie ma znaczenia bo jakakolwiek roznica w srodowisku i juz czas bedzie inny), tylko o porownanie tego algorytmu to innych mierzonych w tych samych warunkach.
Taka ciekawostka: jeżeli ktoś chce zobaczyć z jaką dokładnością działa timerek (a wbrew pozorom nie co do milisekundy) to niech to sobie uruchomi: http://technet.micro...568(en-us).aspx
a jak w Aplikacjii konsolowej zimplementować
QueryPerformanceCounter,
timegettime
czy
GetSystemTime
zrobiłem QueryPerformanceCounter i pokazuje mi
4.83131850556425E+0003
czy to normalne
Wszyskto już działa - dziękuje i proszę o zamknięcie tematu
Użytkownik Przemko2000 edytował ten post 03 styczeń 2008, 20:34
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
I.
t1,t2:tdatatime; t:integer; t1:=now; t2:=now; t:millisecondsbetween(t2,t1);
II.
t,t1,t2:integer; t1:=gettickcount; t2:=gettickcount; t:=t2-t1;
Ile jest metod sortowania w Delphi, znam tylko jedną bąbelkową, są jeszcze jakieś inne?
P.S. zamieszczam przykładowy program
uses Sysutils, DateUtils, Windows; const N=10; type TTab=array[0..N] of real; procedure RandomTab(size:integer, var Tab:TTab); var i:integer; begin randomize; for i:=0 to size do Tab[i]:=random(1001)/1000; end; procedure ShowTab(size:integer; const Tab:TTab); var i:integer; begin write(Tab[0]:3:2); for i:=1 to size do write('; ',Tab[i]); writeln; end; procedure SortTab(size:integer; var:Tab:TTab); var i,j:integer tmp:real; begin for i:=0 to size do for j:=0 to i do if Tab[i] > Tab[j] then begin tmp:=Tab[i]; Tab[i]:=Tab[j]; Tab[j]:=tmp; end; end; var Tab:TTab; T,T1,T2:integer; begin RandomTab(N,Tab); ShowTab(N,Tab); T1:=GetTickCount; SortTab(N,Tab); T2:=GetTickCount; ShowTab(N,Tab); T:=T2-T1; end.
Użytkownik Przemko2000 edytował ten post 26 grudzień 2007, 12:24
Ile jest metod sortowania w Delphi, znam tylko jedną bąbelkową, są jeszcze jakieś inne?
Tyle ile sobie zaimplementujesz. Google -> (tablice) sortowanie
Co do pomiaru, to nie znam - zawsze 1/1000 s mi starczała.
poszukaj o QueryPerformanceCounter, costam kombinowalem z tym jak sie bawilem DirectXem :)
niestety nie moge znalezc src
Użytkownik migajek edytował ten post 26 grudzień 2007, 12:58
jak chcesz przetestowac predkosc algorytmu(w tym przypadku sortowania), a czas jest zbyt krotki zeby go dokladnie wyswietlic, to powtorz ten algorytm(petla) kilka (-dziesiat,-set) razy..
edit@DOWN:
przeciez to nie bedzie wiarygodny wynik - opoznienia porcesora, pamieci, etc.. (przy takich krotkich zadaniach)
predzej zapetlnie tego i zwrocenie usrednionego wyniku bedzie bardziej wiarygodne..
Użytkownik fernandez edytował ten post 26 grudzień 2007, 17:33
Wiem ale takie jest moje zadanie(zaliczenie przedmiotu itd.)
Wiem ale takie jest moje zadanie(zaliczenie przedmiotu itd.)
dlatego polecam querypreformancecounter. podobno najdokladniejsza metoda :)
predzej zapetlnie tego i zwrocenie usrednionego wyniku bedzie bardziej wiarygodne..
nie usrednionego, tylko najkrotszego (pod warunkiem ze dane sa te same oczywiscie). ten sam algorytm zawsze pracuje tak samo przy tych samych danych na tym samym kompie. jesli czasy sa rozne to przez czynniku zewnetrzne (z doswiadczenia - wystarczy zeby kolo polnocy gg sciagnelo nowa reklame, zeby totalnie zepsuc wynik pomiarow :P ), wiec zawsze czas najnizszy jest najblizszy rzeczywistosci.
Użytkownik Deadeye edytował ten post 27 grudzień 2007, 02:42
nie usrednionego, tylko najkrotszego (pod warunkiem ze dane sa te same oczywiscie). ten sam algorytm zawsze pracuje tak samo przy tych samych danych na tym samym kompie. jesli czasy sa rozne to przez czynniku zewnetrzne (z doswiadczenia - wystarczy zeby kolo polnocy gg sciagnelo nowa reklame, zeby totalnie zepsuc wynik pomiarow :P ), wiec zawsze czas najnizszy jest najblizszy rzeczywistosci.
Nie prawda, najlepszym pomiarem będzie średnia ważona :)
To że jakaś reklama z gg może się zassać to ok, ale to że algorytm zostanie odpalony na tym samym kompie nie gwarantuje czasu jego wykonania w tym samym czasie, to zależy od tego na ile przerwań natrafi w czasie swojego wykonywania, i jeżeli norlanie natrafia na 10 przerwań, a raz (na milion próB) trafiła na 2 przerwania, to co, ten wynik ma być najdokłądniejszy?
To że jakaś reklama z gg może się zassać to ok, ale to że algorytm zostanie odpalony na tym samym kompie nie gwarantuje czasu jego wykonania w tym samym czasie, to zależy od tego na ile przerwań natrafi w czasie swojego wykonywania, i jeżeli norlanie natrafia na 10 przerwań, a raz (na milion pró B) trafiła na 2 przerwania, to co, ten wynik ma być najdokłądniejszy?
tak, bo ten wynik najbardziej pokazuje czas w odizolowanym srodowisku. wyobraz sobie ze w momencie odpalania algorytmu jest aktywna jakakolwiek usluga robiaca cokolwiek w tle, a w momencie wlaczenia drugiego testu nie - i juz wyniki nie maja zadnego sensu. wybierajac najszybszy czas wykonania mamy czas odniesienia ktory prawie zawsze jest taki sam - bo tu przeciez nie chodzi o realny czas pomiaru wykonywania algorytmu (to i tak nie ma znaczenia bo jakakolwiek roznica w srodowisku i juz czas bedzie inny), tylko o porownanie tego algorytmu to innych mierzonych w tych samych warunkach.
Taka ciekawostka: jeżeli ktoś chce zobaczyć z jaką dokładnością działa timerek (a wbrew pozorom nie co do milisekundy) to niech to sobie uruchomi: http://technet.micro...568(en-us).aspx
a jak w Aplikacjii konsolowej zimplementować
QueryPerformanceCounter,
timegettime
czy
GetSystemTime
zrobiłem QueryPerformanceCounter i pokazuje mi
4.83131850556425E+0003
czy to normalne
Wszyskto już działa - dziękuje i proszę o zamknięcie tematu
Użytkownik Przemko2000 edytował ten post 03 styczeń 2008, 20:34