eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAlgorytmiczny problem lamera... :-)Re: Algorytmiczny problem lamera... :-)
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
    OSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Algorytmiczny problem lamera... :-)
    Date: Sun, 12 Oct 2014 17:25:46 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 182
    Message-ID: <m1e6hq$pik$1@node1.news.atman.pl>
    References: <1...@g...com>
    <m0s8le$lfc$1@node2.news.atman.pl>
    <4...@g...com>
    <m18osf$4gt$1@node1.news.atman.pl>
    <2...@g...com>
    <m1cdr5$18m$1@node1.news.atman.pl>
    <1...@g...com>
    <m1dmig$8km$1@node1.news.atman.pl>
    <a...@g...com>
    NNTP-Posting-Host: 89-73-81-145.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: node1.news.atman.pl 1413127546 26196 89.73.81.145 (12 Oct 2014 15:25:46 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 12 Oct 2014 15:25:46 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101
    Thunderbird/31.1.2
    In-Reply-To: <a...@g...com>
    Xref: news-archive.icm.edu.pl pl.comp.programming:206741
    [ ukryj 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: