Gość: Jacek86
IP: *.lublin.cvx.ppp.tpnet.pl
11.05.05, 17:01
witam. maturka ogolnie do bani!! za malo czasu !
ja w sumie to tylko z programowania czuje sie jako tako. i tylko to ruszylem.
napisALEM PROGRAM LICZACY jakies tam sumy (najlepsze ?) ciagow. nie pamietam
jak to sie nazywalo.
chcialbym porownac to z kims kto tez to napisal.
chodzio mi glownie o optymalicacje bo komp wieszal sie jak liczyl sume
tego ostatniego ciagu ktory mial 10 000 wyrazow!
przedstawe tylko glowna procedure liczaca sume, pomijajac wczytywanie danych
i te inne pierdoly.
napisalem to w ten sposob:
var
ciag : array[0..9999] of integer;
dl:integer; {dlugosc fragmentu sprawdzanego ciagu}
j:integer; {dlugosc calego ciagu np 10 000}
i:integer; {indeksowa polozenia w ciagu}
suma1,suma2:longint; {porownywane sumy ciagow}
begin
suma1:=0;
suma2:=0;
for dl:=1 to j do {sprawdzaj dla wszystkich mozliwych dlugosci}
begin
for i:=0 to j-dl do {sprawdzaj poczawszy od kazdego wyrazu, j-dl -
zeby nie "wychodzilo" za tablice}
begin
suma1:=0; { zeruj sume przed kazdym nowym sprawdzaniem}
for n:=i to i+dl-1 do {dodawaj kolejne wyrazy od i-tego do i+dl.
-1 po to zeby dlugosc sie zgadzala}
begin
suma1:=suma1+ciag[n]; {dodawaj kolejne wyrazy}
end;
if suma2<suma1 then suma2:=suma1; {sprawdz czy obliczona suma
jest wieksza od poprzedniej,
jezeli tak to zastap}
end;
END;
ostatecznie najwiekasza wartosc zostaje zapisana w zmiennej suma2.
to moze byc zawile. moze ktos podszedl do tego podobnie tylko inaczej
zapisal. dlatego wytlumacze.
procedura liczy sumy ciagow o wszystkich mozliwych dlugosciach (1-1000),
sprawdzajac po kolei z wszystkich mozliwych
pozycji ciagu. nie umiem prosciej wyjasnic.
pisze ten algorytm z pamieci wiec moze byc jakis blad bo pisze na forum a nie
w pascalu. ale ten na maturce dzialal. sprawdzalem bo zrobilem swoj testowy
ciag i znalem jego najlepsza(?) sume.
liczylo jak trza. chodzi mi o to ze ten algorytm zapetla sie tysiace razy i
dziala bardzo woooolno.
ktos rozwiazal to szybciej ?