eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAlgorytmiczny problem lamera... :-) › Re: Algorytmiczny problem lamera... :-)
  • Data: 2014-10-12 17:25:46
    Temat: Re: Algorytmiczny problem lamera... :-)
    Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 12.10.2014 13:39, M.M. wrote:
    > On Sunday, October 12, 2014 12:53:04 PM UTC+2, bartekltg wrote:
    >


    > http://pastebin.com/sinjnRRw


    Trochę porównujesz inne rzeczy.

    Test odpalasz 10 razy. Ale pamięć dla tablic alokujesz tylko
    raz, dla kontenerów 10 razy:>

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

    Znasz rozmiary statycznie, a jednak nie używasz resize.
    przez co alokujesz to co trzeba, ale też polowę, ćwiartkę...


    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]


    > for( int i=0 ; i<LOOPS ; i++ ) {
    > for( int i=0 ; i<CNT_ROWS ; i++ ) {

    Nie rób tak ;-)


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

    testRaw
    9.14884s sum=-191116600
    testRaw2
    6.54265s sum=-191116600
    testVectBrt
    10.0932s sum=-191116600
    testVect2Brt
    9.03653s sum=-191116600
    testQVector
    38.9511s sum=-191116600
    testQVector2
    21.9616s sum=-191116600
    testQList
    41.9841s sum=-191116600
    testQList2
    19.1983s sum=-191116600
    testQList3
    19.162s sum=-191116600

    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;
    }



    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;
    }



    >> Jeśli zawsze i wszędzie masz 30, może array<int,30> coś poprawi.
    > Bedę mial jeszcze wieksza sieczke, tamto na pastebin stanowi tylko
    > zgrubny test. Docelowo mniej / wiecej:



    > struct A {
    > QVector<int> iv;
    > QVector<float> fv;
    > };

    Nadal nie powiedziałeś, czemu vector z QT, a nie STL? ;-)

    >
    > struct B {
    > QVector< A > vs;
    > };

    Coś w tę strukturę jeszcze kiedyś wlezie? Jeśli nie, to tylko nadgarstek
    męczysz wpisywaniem kropek;-)


    > B b;
    > for( i=0 ; i<b.vs.size() ; i++ ) {
    > bool all = true;
    > int j = 0;
    > while( all && j<b.vs[i].iv.size() ) {
    > all = b.vs[i].vi[j] >= mini[j] && b.vs[i].vi[j] <= maxi[j];
    > j++;
    > }
    > j = 0;
    > while( all && j<b.vs[i].fv.size() ) {
    > all = b.vs[i].vf[j] >= minf[j] && b.vs[i].vf[j] <= maxf[j];
    > j++;
    > }
    > if( all ) coś();
    > }

    :-)


    >
    >
    >> Albo nawet adresować wszytko liniowo (skoro nie boisz się
    >> bawić wskaźnikami, i to nie powinno być problemem.)
    > Pewnie druga wersja bedzie na samych wskaznikach i malloc.


    >> To się cudownie równoległa;-)
    > Tak! Ale to potem.
    >
    > Ciekawe czy na dlugich rejestrach by sie dalo sprawdzic kilka
    > warunkow w jednej iteracji. Na karcie grafiki tez powinno
    > niezle przyspieszyc, ale moja ksiazka do CUDA lezy od ponad
    > roku na polce i jeszcze do teraz smierdzi drukarnia :D

    Czytaj, czytaj, nigdy nie wiadomo, kiedy się przyda;>

    pzdr
    bartekltg



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: