eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingzadanie z netu
Ilość wypowiedzi w tym wątku: 63

  • 11. Data: 2013-03-28 12:13:42
    Temat: Re: zadanie z netu
    Od: "M.M." <m...@g...com>

    W dniu czwartek, 28 marca 2013 11:53:31 UTC+1 użytkownik firr kenobi napisał:

    > nigdy nie uzywalem hashowania ani nawet
    > o tym nie czytalem ;o (nigdy nie bylo
    > mi potrzebne)



    > prosta kwestia: o ile wstawiac te wyrazy do drzewa
    > to jego 'posortowanie'/upozadkowanie jest
    > potrzebne bo przeciez chodzi o to by szybko znalezc czy nie ma w
    > nim juz tego elementu ,i
    > jak jest to zrobic ++ na tym wyrazie
    Trzeba pracowac na parach
    struct {
    char *nazwa;
    int czestosc;
    }

    Algorytm wstawiania do drzewka automatycznie sortuje po nazwie,
    nie trzeba nic sortowac. Na koniec trzeba przejrzec wszystkie
    wyrazy i 10 najczestszych zapamietac w kolejce priorytetowej.

    Mozna tez od razu przechowywac i w kolejcie i w drzewie, wtedy
    na koniec nie bedzie potrzeby przegladania wszystkiego - nie
    wiem co szybsze.


    > moje pytanie jest czy wstawianie do tego
    > drzewa (?) hashy jest szybsze i dlaczego
    Dokladna analiza szybkosci nie jest taka prosta. Do tego
    celu trzeba znac sredni koszt kazdej operacji i prawdopodobienstwo
    ze do danej operacji dojdzie. W drzewku mamy operacje:
    a1) wyszukiwaie
    b1) wstawianie
    c1) rownowazenie


    W hash-table tez mamy:
    a2) wyszukiwanie
    b2) wstawianie
    c2) zwiekszanie rozmiaru hash-table.

    P to funkcja prawdopodobienstwa, K to funkcja kosztu. Trzeba miec
    dane do takich wzorow:

    drzwko = P(a1)*K(a1) + P(b1)*K(b1) + P(c1)*K(c1)
    hash-table = P(a2)*K(a2) + P(b2)*K(b2) + P(c2)*K(c2)

    Dla kazdej implementacji te dane sa inne, dla kazdego rozmiaru
    danych tez sa inne, bo dane inaczej sie cash-uja.



    Pozdrawiam


  • 12. Data: 2013-03-28 12:59:33
    Temat: Re: zadanie z netu
    Od: firr kenobi <p...@g...com>

    no dobra w sumie zajrzalem troche do wiki
    pod haslem tablica mieszajaca i moge mw
    powiedziec o co mi chodzilow tym pytaniu

    chodziło mi o to ze hash, ok, mozna zrobic na
    wszystkich wyrazach ale sa dwa problemy

    1) co zrobic jak dwie rozne encje daja ten
    sam hasz
    2) jak wrocic z wartosci hasza do encji

    z tego co pisze na wiki wyglada mi na to
    ze byc moze nie ma na to jakichs specjalnych
    rozwiazan tj chyba po prostu obok hasza
    zapisuje sie liste oryginalnych encji czy tez
    wskaznikow - o tyle nie jest to chyba jakies
    cudowne rozwiazanie choc do pogrupowania moze
    być (no chyba ze o czyms nie wiem ale jakos
    nie az tak bardzo mnie te hashe obchodza)



  • 13. Data: 2013-03-28 14:24:13
    Temat: Re: zadanie z netu
    Od: "M.M." <m...@g...com>

    W dniu czwartek, 28 marca 2013 12:59:33 UTC+1 użytkownik firr kenobi napisał:
    > 1) co zrobic jak dwie rozne encje daja ten
    To sa techniki rozwiazywania kolizji. Najprostsza
    technika polega na tym, zeby zapisac w pozycji
    obok, jesli wlasciwa pozycja jest zajeta. Z takiej
    tablicy nie mozna usuwac (wlasciwie to mozna,
    ale tylko w odwrotnej kolejnosci niz bylo wstawianie),
    zyskuje sie za to lepsza wydajnosc i prostsza
    implementacje - uzywam w szachach.

    > 2) jak wrocic z wartosci hasza do encji
    Poprzez zapamietanie par:
    struct {
    encja;
    hash;
    }

    > z tego co pisze na wiki wyglada mi na to
    > ze byc moze nie ma na to jakichs specjalnych
    > rozwiazan tj chyba po prostu obok hasza
    > zapisuje sie liste oryginalnych encji czy tez
    > wskaznikow -
    Tak, to w pelni funkcjonalne rozwiazanie kolizji, a to
    ktore opisalem na poczatku, daje mniejsze mozliwosci.


    > o tyle nie jest to chyba jakies
    > cudowne rozwiazanie choc do pogrupowania moze
    > być
    Nie wiem czy cud czy nie cud. Duzo zalezy od organizaci
    danych w konkretnym modelu obliczen. Na PC mamy dostep
    swobodny. Gdy rozmiar danych znacznie przekracza rozmiar
    pamieci cache, to czas dostepu jest staly - i dlatego
    w praktyce hash-table moze dzialac bardzo wydajnie.


    Ale kiedys moze jakis inny model obliczen stanie sie
    popularny. Mozna wziac np. kule 3d, w niej upakowane dane i
    biliony glowic poruszajaych sie po wytyczonych trasach ze
    stala predkoscia (np. z predkascia swiatla). Jak to zadanie
    rozwiazac optymalnie na takim modelu?

    Pozdrawiam


  • 14. Data: 2013-03-28 15:29:10
    Temat: Re: zadanie z netu
    Od: Michoo <m...@v...pl>

    On 28.03.2013 11:27, M.M. wrote:
    > W dniu czwartek, 28 marca 2013 11:04:28 UTC+1 użytkownik Michoo napisał:
    >> I szczerze mówiąc to jakby to był jakiś konkurs na zwolnienie z egzaminu
    >> to pewnie bym w ASM wstawki rzeźbił.
    > Bys musial wiedziec na jakim kompie programy beda porownywane.

    No shit, Captain Obvious, you Sherlock us.

    --
    Pozdrawiam
    Michoo


  • 15. Data: 2013-03-28 15:55:01
    Temat: Re: zadanie z netu
    Od: bartekltg <b...@g...com>

    W dniu 2013-03-28 08:55, firr kenobi pisze:

    > a czym sie rozni hashowana od niehashowanej w sensie sprawnosci ?

    Zwykła mapa [std::map] jest implementowana na drzewach,
    czerwonoczarnych bodajże.
    "Hashowana" [std::unodrered_set] to zwykłą tablica hashująca.

    Pewne rzeczy lepiej robić na jednej, pewne na drugiej.


    > (nigdy nie uzywalem tego
    > hashowania i jakos nawet specjalnie nie
    > przepadam za tym pojeciem poki co nigdy
    > nie bylo mi potrzebne)I jak realizowane
    > jest wstawianie/wyszukiwanie czy dany element
    > juz jest wstawiony? Trzyma sie posortowane
    > drzewo?

    http://pl.wikipedia.org/wiki/Tablica_mieszaj%C4%85ca
    google, książka do algorytmów i czytaj.

    pzdr
    bartekltg



  • 16. Data: 2013-03-28 16:39:59
    Temat: Re: zadanie z netu
    Od: bartekltg <b...@g...com>

    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"?

    > 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.

    Miało to sens (zmieniało czas) gdy cały algorytm sprowadzał się do
    odczytania n cyfr i ich posumowania (do czego dochodziło się
    po dłuższej matematyce:)
    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.

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


    W normalnym użyciu tez bym się tym zupełnie nie przejmował
    i uzywał ulubionego z iostream/sdtio.

    > Trzeba zrobić szybkie lower/upper (pewnie lookup table, nieduże w sumie).

    O zapomnialem o tym. Tablica na 256 elementów to nie problem,
    a dzieki temu za darmo mamy utożsamienie wszystkich białych
    znaków, interpunkcji etc.

    >
    > Hash podejrzewam, że sprawdzi się w postaci:
    >
    > uint_least32_t hash=0;
    > uint_fast16_t len=0;

    Ech, piękne te typy;)

    > 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?
    Nie mam zupełnie doświadczenia w konstruowaniu hashów.


    > I szczerze mówiąc to jakby to był jakiś konkurs na zwolnienie z egzaminu
    > to pewnie bym w ASM wstawki rzeźbił.

    :-)

    Pzdr
    bartekltg




  • 17. Data: 2013-03-28 16:42:20
    Temat: Re: zadanie z netu
    Od: bartekltg <b...@g...com>

    W dniu 2013-03-28 11:27, M.M. pisze:
    > W dniu czwartek, 28 marca 2013 11:04:28 UTC+1 użytkownik Michoo napisał:
    >> I szczerze mówiąc to jakby to był jakiś konkurs na zwolnienie z egzaminu
    >> to pewnie bym w ASM wstawki rzeźbił.
    > Bys musial wiedziec na jakim kompie programy beda porownywane.
    > Pozdrawiam

    Ostatnio olimpiada informatyczna i potyczki algorytmiczne
    lecą na czymś w rodzaju wirtualnego procesora x86.

    http://ripper.dasie.mimuw.edu.pl/~accek/homepage/wp-
    content/papercite-data/pdf/acemgr09.pdf

    pzdr
    bartekltg




  • 18. Data: 2013-03-28 16:58:27
    Temat: Re: zadanie z netu
    Od: "M.M." <m...@g...com>

    W dniu czwartek, 28 marca 2013 16:39:59 UTC+1 użytkownik bartekltg napisał:

    > BTW, czy taki printf w pętli za każdym razem parsuje ten
    > swój napis typu "%d"?
    Gdy sprawdzalem, to sprintf/sscanf byly wyraznie wolniejsze od
    innych metod konwersji.
    Pozdrawiam


  • 19. Data: 2013-03-28 17:15:55
    Temat: Re: zadanie z netu
    Od: bartekltg <b...@g...com>

    W dniu 2013-03-28 11:25, M.M. pisze:
    > W dniu czwartek, 28 marca 2013 08:55:21 UTC+1 użytkownik firr kenobi napisał:
    >> a czym sie rozni hashowana od niehashowanej w sensie
    >> sprawnosci ? (nigdy nie uzywalem tego
    > W ogole czy w tym zadaniu? :D
    >
    > W ogole jeśli uzywamy drzewek, to mozna jeszcze (dodatkowa funkcjonalnosc
    > wzgledem hash-table) szybko (bez wywolywania funkcji sort) wyswietlic
    > posortowane dane. Mozna takze czesciej uzywane elementy przeniesc
    > w gore drzewka - dodatkowa optymalizacja. Mozna latwo wzbogacic standardowe
    > drzewa i mozna szybko wyswietlic N-ty element w kolejnosci sortowania.
    >
    > W hash-table (z zalozenia - w praktyce to nie zawsze jest takie proste i
    > oczywiste) mozemy szybciej dodac element i sprawdzic czy wczesniej byl
    > dodany - nie ma zadnego sortowania. Hash-table jest prostsza w
    > implementacji - przynajmniej jak na moje oko :)

    @prędkość. Mamy też inną złożoność:)
    Przy odpowiednich założeniach o statystyce, czyli jak funkcja
    mieszajaca jest dobra.

    >
    > Hash-table ma problem gdy chcemy dodac wiecej elementow niz na poczatku
    > zalozylismy.

    Ojtam, realokujesz do większej. Vector robi to samo. Tutaj
    pewnie tylko raz jeszcze musisz policzy.

    > Z drzewami jest problem gdy zrobi sie z nich lista - specyficzne
    > dane, trzeba uzyc wersji wywazaniem, a to dodatkowy narzut.

    Inaczej, drzewa bez jekiegoś systemu równoważenia nie są
    w ogole do rozpatrywania jako ogólny kontener:)

    pzdr
    bartekltg


  • 20. Data: 2013-03-28 17:33:04
    Temat: Re: zadanie z netu
    Od: firr <g...@g...com>

    W dniu czwartek, 28 marca 2013 17:15:55 UTC+1 użytkownik bartekltg napisał:
    > W dniu 2013-03-28 11:25, M.M. pisze:
    >
    > > W dniu czwartek, 28 marca 2013 08:55:21 UTC+1 użytkownik firr kenobi napisał:
    >
    > >> a czym sie rozni hashowana od niehashowanej w sensie
    >
    > >> sprawnosci ? (nigdy nie uzywalem tego
    >
    > > W ogole czy w tym zadaniu? :D
    >
    > >
    >
    > > W ogole jeśli uzywamy drzewek, to mozna jeszcze (dodatkowa funkcjonalnosc
    >
    > > wzgledem hash-table) szybko (bez wywolywania funkcji sort) wyswietlic
    >
    > > posortowane dane. Mozna takze czesciej uzywane elementy przeniesc
    >
    > > w gore drzewka - dodatkowa optymalizacja. Mozna latwo wzbogacic standardowe
    >
    > > drzewa i mozna szybko wyswietlic N-ty element w kolejnosci sortowania.
    >
    > >
    >
    > > W hash-table (z zalozenia - w praktyce to nie zawsze jest takie proste i
    >
    > > oczywiste) mozemy szybciej dodac element i sprawdzic czy wczesniej byl
    >
    > > dodany - nie ma zadnego sortowania. Hash-table jest prostsza w
    >
    > > implementacji - przynajmniej jak na moje oko :)
    >
    >
    >
    > @prędkość. Mamy też inną złożoność:)
    >
    > Przy odpowiednich założeniach o statystyce, czyli jak funkcja
    >
    > mieszajaca jest dobra.
    >
    >
    >
    > >
    >
    > > Hash-table ma problem gdy chcemy dodac wiecej elementow niz na poczatku
    >
    > > zalozylismy.
    >
    >
    >
    > Ojtam, realokujesz do większej. Vector robi to samo. Tutaj
    >
    > pewnie tylko raz jeszcze musisz policzy.
    >
    >
    >
    > > Z drzewami jest problem gdy zrobi sie z nich lista - specyficzne
    >
    > > dane, trzeba uzyc wersji wywazaniem, a to dodatkowy narzut.
    >
    >
    >
    > Inaczej, drzewa bez jekiegoś systemu równoważenia nie są
    >
    > w ogole do rozpatrywania jako ogólny kontener:)
    >
    >

    no dobra ale konkretniej - powiedzmy ze ciekaw
    jestem wlasnie jak robiloby sie to przy
    pomocy tej tablicy haszujacej

    1) o ile rozumiem jak ta tablica haszujaca jest
    robiona na zwyklej tablicy to jej rozmiar jest dosyc bolasty i jest odpowiedni
    wielkosci hasza

    np hasz 20 bitów - tablica 1 MB ???

    2) drugi problem - jak z danym haszem jest
    kojarzona lista sów, powiedzmy ze krzesło i hipopotam daja jednego hasza 777889 to
    chyba musza
    siedziec tam obok w postaci listy ?

    ???

strony : 1 . [ 2 ] . 3 ... 7


Szukaj w grupach

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: