eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingzadanie z netu › Re: zadanie z netu
  • Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask
    .pl!news.nask.org.pl!news.internetia.pl!not-for-mail
    From: Michoo <m...@v...pl>
    Newsgroups: pl.comp.programming
    Subject: Re: zadanie z netu
    Date: Thu, 28 Mar 2013 21:50:48 +0100
    Organization: Netia S.A.
    Lines: 112
    Message-ID: <kj2av2$go4$1@mx1.internetia.pl>
    References: <2...@g...com>
    <0...@g...com>
    <kj047e$kbo$1@node1.news.atman.pl> <kj1535$k5f$1@mx1.internetia.pl>
    <kj1o8h$mg9$1@node2.news.atman.pl>
    NNTP-Posting-Host: 83.238.197.12
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: mx1.internetia.pl 1364504354 17156 83.238.197.12 (28 Mar 2013 20:59:14 GMT)
    X-Complaints-To: a...@i...pl
    NNTP-Posting-Date: Thu, 28 Mar 2013 20:59:14 +0000 (UTC)
    In-Reply-To: <kj1o8h$mg9$1@node2.news.atman.pl>
    X-Tech-Contact: u...@i...pl
    User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.11) Gecko/20121123
    Icedove/10.0.11
    X-Server-Info: http://www.internetia.pl/
    Xref: news-archive.icm.edu.pl pl.comp.programming:202370
    [ ukryj nagłówki ]

    On 28.03.2013 16:39, bartekltg wrote:
    > W dniu 2013-03-28 11:04, Michoo pisze:
    >> On 28.03.2013 01:51, bartekltg wrote:
    >>> W dniu 2013-03-27 19:24, M.M. pisze:
    >>>> W dniu środa, 27 marca 2013 19:18:28 UTC+1 użytkownik firr kenobi
    >>>> napisał:
    >>>>> jak by nalezalo napisac taki program ?
    >>>> Chyba zahaszować pary (słowo,częstość).
    >>>
    >>> Ogolnie jakakolwiek mapa i powinno pójść w miarę sprawnie.
    >>>
    >>> Hashowana pewnie będzie sprawniejsza. Unorderet_set
    >>> ma co najmniej iterator z inkrementacją, więc
    >>> i ze znalezieniem na koniec maksimum problemu nie będzie.
    >>>
    >>> Można by się ewentualnie zastanowić nad czymś w rodzaju
    >>> drzew trie czy patricia, ale skoro nie
    >>> musimy się przejmować pamięcią, nic nie zyskujemy,
    >>> a wydajność leci.
    >>>
    >>> No to stl, szybki hash i sprawny odczyt (pewnie trzebaby
    >>> wyhakować sobie własny, bo strumienie wolne;)
    >>
    >> I ty brutusie?
    >>
    >> sync_with_stdio?? iostream jest od pewnego czasu już równie szybkie co
    >> stdio
    >
    > Wiem wiem;)
    >
    > BTW, czy taki printf w pętli za każdym razem parsuje ten
    > swój napis typu "%d"?

    W znanych mi implementacjach tak - jest automat zjadający wejście i
    wypluwający wyjście (pobierając/zapisując kolejne rekordy ze stosu)
    (hmmm, ciekawe, czy printf jest turing complete ;) ).

    >
    >> No chyba, ze extreme: jak po linuxem to można użyć czystego read albo
    >> jeszcze lepiej mmap
    >
    > W przykładzie który widziałem (właśnie z takich konkursików)
    > gość użył fgets + bufor + własne przerabianie na liczby.

    Na potyczkach używałem kiedyś atoi - jest dostatecznie szybkie. fgets ma
    jedną dodatkową wartwę po drodze do read.


    > Tak akurat było to na zasadzie kto zrobi + limit czasu na tyle długi,
    > aby czytać to odpaloną javą bit po bicie;) ale jakby to był
    > wyścig 'kto szybciej', pewnie było by warto.

    Kiedyś w pociągu zrobiłem jako "bonus" do sprawozdania o algorytmach
    sortujących implementację heapsorta w asm byłem w sumie pozytywnie
    zaskoczony wynikiem. (A wyszły w tym takie kwiatki jak np to, procesor
    chyba trzymał szczyt stosu w rejestrach - operacje na [esp], [esp+4]...
    były równie szybkie jak na eax,ebx...)

    >
    > U nas tablica mieszająca i tak pewnie zasłoniłaby swoim czasem
    > działania szczegóły wczytywania.

    Dla takich problemów dobra funkcja mieszająca to taka, która działa
    możliwie liniowo. Zrobiłbym wektor wskaźników na funkcję do wykrywania
    końca linii i lookup do robienia to_lower - w takiej konfiguracji
    czytanie bajt-po-bajcie kontra czytanie blokami da duuużą różnicę.

    >
    >> Trzeba zrobić szybkie lower/upper (pewnie lookup table, nieduże w sumie).
    >
    > O zapomnialem o tym. Tablica na 256 elementów to nie problem,

    O ile wejście jest 8-bit/znak - wtedy użyłbym w sumie jumptable.

    > a dzieki temu za darmo mamy utożsamienie wszystkich białych
    > znaków, interpunkcji etc.

    256*4/8bajty na wskaźnik całkiem nieźle rezyduje w cache. O ile tylko
    jumptable nie zepsuje za bardzo pipeline to powinna wymiatać.

    Tak w ogóle teraz mnie deadline ścigają ale za jakieś 2 tygodnie to może
    skrobnę programik - będzie można zrobić konkurs ;)

    >
    >>
    >> Hash podejrzewam, że sprawdzi się w postaci:
    >>
    >> uint_least32_t hash=0;
    >> uint_fast16_t len=0;
    >
    > Ech, piękne te typy;)

    Hm? Właśnie do takich zastosowań one w końcu są.

    >
    >> for(char c:str){
    >> hash^=c;
    >> hash<<=1;
    >> len++;
    >> }
    >> hash=(hash<<4)^len;
    >
    > Widzę, jak działa, ale dlaczego sądzisz, że będzie dobry?

    Taki strzał - kiedyś używałem w bardzo podobnym zadanku sumy znaków i
    dodanie długość bardzo poprawiło wynik - to jest lekka rozbudowa tej
    koncepcji.


    --
    Pozdrawiam
    Michoo

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: