eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingAlgorytmiczny problem lamera... :-) › Re: Algorytmiczny problem lamera... :-)
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
    atman.pl!.POSTED!not-for-mail
    From: bartekltg <b...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Algorytmiczny problem lamera... :-)
    Date: Sun, 12 Oct 2014 12:53:04 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 58
    Message-ID: <m1dmig$8km$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>
    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 1413111184 8854 89.73.81.145 (12 Oct 2014 10:53:04 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 12 Oct 2014 10:53:04 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101
    Thunderbird/31.1.2
    In-Reply-To: <1...@g...com>
    Xref: news-archive.icm.edu.pl pl.comp.programming:206738
    [ ukryj nagłówki ]

    On 12.10.2014 02:31, M.M. wrote:
    > On Sunday, October 12, 2014 1:17:57 AM UTC+2, bartekltg wrote:
    >> Ale po co, skoro masz iterator. On się rozwija w przypadku vector
    >> do gołego wskaźnika, a nie trzeba uprawiać partyzantki*).
    >> GCC przy 03 i wersję z indeksem przerabia na tak samo szybką,
    >> na O2 widzę kilka procent narzutu.
    >> Test, pomijając szczegóły, taki:
    >> [...]
    >> Ogolna różnica między 2 a 3 wynika z rozwijania pętli.
    > U mnie na testach byl narzut wiekszy. QVector i QList dzialaly 2-3 razy
    > dluzej niz tablica statyczna.

    Rzeczywiście, QVectro + indeksy coś się nie chce optymalizować.
    Na O2 w tamtym teście działał w tej samej kategorii co wszyscy,
    ale na O3 już prawie dwa razy wolniej. Na iteratorach
    nie było problemu, biega tak samo jak vector czy goła tablica.

    Jednym słowem, jeśli nie bawisz się interfejsem, używaj standardowego
    vectora.

    > Tak, wiem ze tablice statyczne kompilatory
    > moga lepiej zopytmalizowac niz wskaznik, ale jednak nie powinny, poniewaz
    > wskaznik to prawie to samo co tablica. Mialem tez ciut bardziej
    > skomplikowane obliczenia, mniej/wiecej:
    > QVector< QVector<typ_prosty> >
    > Rozmiar wewnętrznego 30 liczb int/float
    > Rozmiar zewnętrznego 200tys.
    >
    > Operacje mniej/wiecej takie:
    >
    > for( i=0 ; i<200tys ; i++ ) {
    > for( j=0 ; j<30 && vector[i][j] >= min[j] && vector[i][j] >= min[j] ; j++ )
    > ;
    > sum += j==30 ? 1 : -1;
    > }
    > print( sum );

    Nie kompiluje się ;-)

    Jeśli zawsze i wszędzie masz 30, może array<int,30> coś poprawi.
    Albo nawet adresować wszytko liniowo (skoro nie boisz się
    bawić wskaźnikami, i to nie powinno być problemem.)

    Poza tym,
    vector[i][j] >= min[j] && vector[i][j] >= min[j]
    To imho dwa razy to samo.

    Czysto estetycznie, może drugiego fora zastąpić while,
    (albo nawet std::find_if, w końcu szukasz pierwszego
    elementu nie spełniającego pewnego kryterium), początkowo
    patrząc na ten kod 'nie widziałem' tego, że for kręci pustą
    instrukcją.

    To się cudownie równoległa;-)

    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: