Skocz do zawartości

Optymalizacja Kodu


MitS

Rekomendowane odpowiedzi

Witam,

 

 

mam znowu problem :)

otoz mam taki kod:

 

#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
    short dziesiatki = 0;
    int a, b, N, *res;
    
    cin >> N;
    
    if(N<0 || N>1000000)
        return 0;
    
    res = new int [N];
    
    for(int i=0; i<N; i++){
        cin >> a >> b;
        
        res[i] = (a + b);
        
        if(res[i] > 1000000)
            return 0;
    }    

    N--;
    
    for(int i=N; i>=0; i--){
        res[i]         += dziesiatki;
        dziesiatki     = (res[i]%100)/10;
        res[i]         = (res[i]/100)*10+res[i]%10;
    }
    
    for(int i=0; i<=N; i++)
        cout << res[i];
    
    delete [] res;
    
    return 0;
}

 

i niestety zajmuje mi za duzo pamieci (obecnie 2216 KB), wiec chciałbym was sie zapytać jak mogę go bardziej zoptymalizować tak by zajmował max 512 kb ??

Będę wdzięczny za pomoc.

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

nie rozumiem dwoch rzeczy ...

 

czemu od razu mowisz ze inicjuje 1000000 zmiennych ??

przeciez do zalezy od wpisanej liczby N ... czy moze sie myle ??

 

a druga sprawa 1000000*sizeof(int) B skąd sie wzieło B i napisałeś że musiał bym tego uzyc ... w ktorym miejscu ?

 

Sorry ale troche nie zrozumialem teog co mi napisałeś wiec prosil bym o rozszerzenie twojej mysli ...

Odnośnik do komentarza
Udostępnij na innych stronach

nie rozumiem dwoch rzeczy ...

 

czemu od razu mowisz ze inicjuje 1000000 zmiennych ??

przeciez do zalezy od wpisanej liczby N ... czy moze sie myle ??

 

a druga sprawa 1000000*sizeof(int) B skąd sie wzieło B i napisałeś że musiał bym tego uzyc ... w ktorym miejscu ?

 

Sorry ale troche nie zrozumialem teog co mi napisałeś wiec prosil bym o rozszerzenie twojej mysli ...

 

1000000 zmiennych, bo to jest najgorszy wypadek, kiedy N=1000000. A 'B' to zapewne chodziło o bajty

Odnośnik do komentarza
Udostępnij na innych stronach

nie rozumiem dwoch rzeczy ...

 

czemu od razu mowisz ze inicjuje 1000000 zmiennych ??

przeciez do zalezy od wpisanej liczby N ... czy moze sie myle ??

 

a druga sprawa 1000000*sizeof(int) B skąd sie wzieło B i napisałeś że musiał bym tego uzyc ... w ktorym miejscu ?

 

Sorry ale troche nie zrozumialem teog co mi napisałeś wiec prosil bym o rozszerzenie twojej mysli ...

 

B to od bajtu a sizeof() podaje ile bajtow zajmuje dana zmienna danego typu. Jest to wazne poniewaz zmienne w roznych systemach i/lub innych kompilatorach moga zajmowac inna liczbe bajtow. Napisalem 1000000 poniewaz powinno sie analizowac przyklad najmniej korzystny.

Odnośnik do komentarza
Udostępnij na innych stronach

niestety zrobiłem testy z tym co napisałeś ... niestety cały czas taką samą pamięc wykorzystuje ...

ma ktoś jeszcze jakieś pomysły ??

W czym sprawdzasz uzycie pamieci? Ja sobie sprawdzam w KDE Straznik Systemu - sprawdzilem tez w top bo nie wiem z czego Ty korzystasz a chcialbym zebys zrozumial. Wiec tak pole WielkoscPW odpowiada z top pole VIRT i pokazuje ono calkowite miejsce jakie program moze zuzyc. Pole ZasobyPW=RES i to oznacza ile program w biezacej chwili korzysta z pamieci. Twoj program nie moze brac mniej pamieci poniewaz ma taka strukture zmiennych jaka ma. Moze trzeba inaczej napisac ten program? Co on w ogole ma robic? W biezacej formie program bedzie siupal tyle pamieci ile siupie.

Odnośnik do komentarza
Udostępnij na innych stronach

To ja znowu powiem, że programista ze mnie żaden, ale IMHO zaincludowanie <iostream> powoduje chyba od razu zaalokowanie niezbędnej pamięci. Czyli żeby zoptymalizować kod trzeba by chyba napisać jakieś własne klasy zamiast korzystać ze standardowego pliku nagłówkowego.

Może ja jakieś głupoty piszę, ale tak na chłopski rozum... :unsure:

Odnośnik do komentarza
Udostępnij na innych stronach

To ja znowu powiem, że programista ze mnie żaden, ale IMHO zaincludowanie <iostream> powoduje chyba od razu zaalokowanie niezbędnej pamięci. Czyli żeby zoptymalizować kod trzeba by chyba napisać jakieś własne klasy zamiast korzystać ze standardowego pliku nagłówkowego.

Może ja jakieś głupoty piszę, ale tak na chłopski rozum... :unsure:

Na moj gust za duzo kombinujesz. Po to sa standardy by z nich korzystac i sa one tak napisane by byly jak najbardziej optymalne. Co do wielkosci pamieci to trzeba pamietac ze system na samym starcie alokuje pamiec na stos na sterte - tak juz jest i tego sie nie zmieni - no chyba ze napisze sie swoj system operacyjny ;)

Odnośnik do komentarza
Udostępnij na innych stronach

To ja znowu powiem, że programista ze mnie żaden, ale IMHO zaincludowanie <iostream> powoduje chyba od razu zaalokowanie niezbędnej pamięci. Czyli żeby zoptymalizować kod trzeba by chyba napisać jakieś własne klasy zamiast korzystać ze standardowego pliku nagłówkowego.

Może ja jakieś głupoty piszę, ale tak na chłopski rozum... unsure.gif

 

tak, same:

 

#include <iostream>

using namespace std;

int main(){return 0;}

 

zajmuje około 220 kb pamieci, cały powyzszy kod zajmuje tyle ile wyzej napisałęm (2216 kb, choć jak przekonwertuje na czyste C to 2206 kb), lecz niestety dla mnie to jest 4 krotnie za dużo.

 

co do zadania to jest to zadanie z opss.safo.biz -> http://opss.safo.biz/?menu=comp⊂=pr...0&prob=1017

a pamięć sprawdzam po przez ten serwis, (wczesniej probowałem uzywając polecenia "top" ale cos chyba mnie kłamał).

Co do samego

Odnośnik do komentarza
Udostępnij na innych stronach

tak, same:

 

#include <iostream>

using namespace std;

int main(){return 0;}

 

zajmuje około 220 kb pamieci, cały powyzszy kod zajmuje tyle ile wyzej napisałęm (2216 kb, choć jak przekonwertuje na czyste C to 2206 kb), lecz niestety dla mnie to jest 4 krotnie za dużo.

 

co do zadania to jest to zadanie z opss.safo.biz -> http://opss.safo.biz/?menu=comp⊂=pr...0&prob=1017

a pamięć sprawdzam po przez ten serwis, (wczesniej probowałem uzywając polecenia "top" ale cos chyba mnie kłamał).

Co do samego

 

Wlasnie zrobilem programik ale na 2 tescie podaje zla odp - nie wiem co to za test - przyklady z forum sprawdzilem ale lipa - mam dobre wyniki a testu nie przechodzi prog.

 

Odnośnik do komentarza
Udostępnij na innych stronach

To ja powiem tak: to trzeba zrobić inaczej, ponieważ nie przeskoczysz tego ograniczenia pamięci.

 

No fajnie, tylko stwierdzenie "zrobić inaczej" jest troszke mało precyzyjne, masz może jakiś pomysł w jaki inny sposob mozna zrobic te zadanie (czy uzywac tablic w ogole ? itp.)

 

 

Wlasnie zrobilem programik ale na 2 tescie podaje zla odp - nie wiem co to za test - przyklady z forum sprawdzilem ale lipa - mam dobre wyniki a testu nie przechodzi prog.

 

Powyższy kod przechodzi 3 testy poprawnie na 4 tescie sie rypie bo przekracza limit pamieci

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...