eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAlgorytmiczny problem lamera... :-)Re: Algorytmiczny problem lamera... :-)
  • Data: 2014-10-12 19:53:59
    Temat: Re: Algorytmiczny problem lamera... :-)
    Od: "M.M." <m...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On Sunday, October 12, 2014 5:25:46 PM UTC+2, bartekltg wrote:
    > On 12.10.2014 13:39, M.M. wrote:
    > Trochę porównujesz inne rzeczy.
    > Test odpalasz 10 razy. Ale pamięć dla tablic alokujesz tylko
    > raz, dla kontenerów 10 razy:>
    O to chodzi aby nie porownywac takich samych procedur - zart :D
    Powiedzmy ze porownuje wszelka wygode programowania na szablonach z
    metlikiem wskaznikow.

    > BTW,
    > static int data[CNT_ROWS][CNT_COLS];
    > Zdecydowanie nie leży na stosie ;-) Przez to static.
    Zgadzam sie.

    > Znasz rozmiary statycznie, a jednak nie używasz resize.
    > przez co alokujesz to co trzeba, ale też polowę, ćwiartkę...
    Porownuje tez listy vs wektory. Lista powinna byc sprytniejsza.


    > Rules jako tablica tablic możę bie być najlepsza? I tak każda
    > reguła jest inaczej używana, nie wsadzisz więc tego w pętlę.
    > Czemu nie struktura? [update, zaminiłem ma pair, przyszpieszenie
    > znikome]
    Hmmm moze, nie wiem.

    > > for( int i=0 ; i<LOOPS ; i++ ) {
    > > for( int i=0 ; i<CNT_ROWS ; i++ ) {
    > Nie rób tak ;-)
    Poniewaz taka sama nazwa zmiennej? Lubie tak robic, choc
    przyznaje, ze czasami tez mnie to drazni. Jednak generalnie dla
    programisty mniej zmiennych do analizy, a dla kompilatora... tez
    mniej zmiennych do optymalizowania.

    > Wrzuciłem napisaną przez siebie wersję na vector.
    > Ciut wolniejsza, ale nie aż tak;-)
    Dzieki wielkie!


    > testRaw
    > 9.14884s sum=-191116600
    > testRaw2
    > 6.54265s sum=-191116600
    > testVectBrt
    > 10.0932s sum=-191116600
    > testVect2Brt
    > 9.03653s sum=-191116600

    Ciekawe dlaczego u Ciebie testRaw2 taki szybki wypadl. U mnie byl
    ciut wolniejszy. Z powodu innego sprzetu, kompilatora, opcji
    kompilacji?


    > long long testVector()
    >
    > {
    >
    > vector< vector<int> > data( CNT_ROWS, vector<int>(CNT_COLS,0) );
    >
    > for( int i=0 ; i<CNT_ROWS ; i++ )
    >
    > {
    >
    > for(auto it = data[i].begin(); it!=data[i].end(); ++it )
    >
    > *it = ( rand() % 1000 );
    >
    > }
    >
    > vector< vector<int> > rules(CNT_COLS, vector<int>(2,0));
    >
    > for( auto it = rules.begin(); it!=rules.end();++it )
    >
    > {
    >
    > (*it)[0]=( rand()%100 );
    >
    > (*it)[1]=( 900 + rand()%100 );
    >
    > }
    >
    > long long sum = 0;
    >
    > for( int l=0 ; l<LOOPS ; l++ ) {
    >
    > for( auto it=data.begin(); it !=data.end(); ++it ) {
    >
    > int j=0;
    >
    > while( j < CNT_COLS && (*it)[j] >= rules[j][0] && (*it)[j]
    >
    > <= rules[j][1] )
    >
    > {
    >
    > j++;
    >
    > }
    >
    > sum += (j==CNT_COLS) ? +1 : -1;
    >
    > }
    >
    > }
    >
    > return sum;
    >
    > }
    Musze sprawdzic, czy vector z stdliba te ma constBegin, albo metode
    'at' zamiast operatora indeksowania[]. W QT metoda at jest duzo szybsza
    od operatora[].


    > long long testVector2()
    >
    > {
    >
    > vector< vector<int> > data( CNT_ROWS, vector<int>(CNT_COLS,0) );
    >
    > for( int i=0 ; i<CNT_ROWS ; i++ )
    >
    > {
    >
    > for(auto it = data[i].begin(); it!=data[i].end(); ++it )
    >
    > *it = ( rand() % 1000 );
    >
    > }
    >
    > vector< pair<int,int> > rules(CNT_COLS);
    >
    > for( auto it = rules.begin(); it!=rules.end();++it )
    >
    > {
    >
    > it->first=rand()%100 ;
    >
    > it->second=900 + rand()%100 ;
    >
    > }
    >
    > long long sum = 0;
    >
    > for( int l=0 ; l<LOOPS ; l++ ) {
    >
    > for( auto it=data.begin(); it !=data.end(); ++it ) {
    >
    > auto dit = (*it).begin();
    >
    > auto rit = rules.begin();
    >
    > while( rit!=rules.end() && *dit >= rit->first && *dit <=
    >
    > rit->second )
    >
    > {
    >
    > ++rit;
    >
    > ++dit;
    >
    > }
    >
    > sum += (rit-rules.begin()==CNT_COLS) ? +1 : -1;
    >
    > }
    >
    > }
    >
    > return sum;
    >
    > }
    Hmmmm, sprytniejsze.


    > Nadal nie powiedziałeś, czemu vector z QT, a nie STL? ;-)
    Na razie tylko z przyzwyczajenia. Docelowo uzyje albo STL, albo
    sam napisze na swoje potrzeby jakis wektor, albo bedzie rzezba
    na wskaznikach.


    > Coś w tę strukturę jeszcze kiedyś wlezie? Jeśli nie, to tylko nadgarstek
    > męczysz wpisywaniem kropek;-)
    Wlezie duzo, ale przed testowaniem regulek (chyba) mozna zostawic tylko
    przedzialy min i max.

    Pozdrawiam


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: