eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Tablica int i usuwanie duplikatów
Ilość wypowiedzi w tym wątku: 68

  • 31. Data: 2015-09-16 22:46:02
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: bartekltg <b...@g...com>

    On 16.09.2015 19:57, AK wrote:
    > Użytkownik "M.M." <m...@g...com> napisał:
    >
    >> Gdzie n to ilosc unikalnych w zbiorze, a nie rozmiar calego zbioru.
    >> Przy perfect-hash ilość bitów * ( max_value - min_value + 1). Dla
    >> małej rozpiętości można łatwo zrobić perfect-hash.
    >>
    >> Dróg jest wiele, a jaką wybrać, to zależy od konkretnych danych.
    >
    > Ano wlasnie, a to jest czesto omijana sprawa ana rzecz "generycznosci".
    > Zawsze warto przeanalizowac dane (chocby tylko po min i max).
    > Koszt maly. Tylko jeden przebieg.
    > Zysk (niekiedy) ogromny


    No właśnie, niekiedy. A w standardowym przypadku jesteśąmy do tyłu.
    Jeden przebieg zajmie zauważalną cześć czasu proponowanych tu
    rozwiązań.
    To wydaje się zbyt lekki problem na wstępną analizę danych.

    Za to jeśli wiemy coś o rozkładzie od początku, można dobrać
    algorytm, choćby czy tworzyć zbiór dynamicznie zaczynając od
    małej pamięći dla tej tablicy, powiększając, a więc realokując i
    rehaszując w mairę potrzeby (jeśli liczba unikalnych wpisów jest
    mała) czy budować od razu w tablicy hashującej wielkośći 2n (dla k=~=n).

    Sprawdzanie min/max ma jedną neidogodność. Unikalnych wpisów może
    być mało, a rozpiętość ich wartośći duża.


    pzdr
    bartekltg


  • 32. Data: 2015-09-16 23:27:50
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: "AK" <n...@n...com>

    Użytkownik "bartekltg" <b...@g...com> napisał:

    > No właśnie, niekiedy. A w standardowym przypadku jesteśąmy do tyłu.
    > Jeden przebieg zajmie zauważalną cześć czasu proponowanych tu
    > rozwiązań.
    > To wydaje się zbyt lekki problem na wstępną analizę danych.

    Zalezy. Zalkezy co sie rozumie pod terminem "przypadek standardowy".
    IMHO standardowy przypadek do dane "merytoryczne"/dziedzinowe.
    Jesli to sa dane "merytoryczne" to max -min << MAX_UINT
    a wtedy mozna "zjechac" zznacznie z pamiecia gdyz zamiast hasha pelnego
    uinta mozna uzyc bitseta na rzeczywiscie uzywawanej maxymalnej ilosci bitow
    /czyli bits(max - min)/.

    > Za to jeśli wiemy coś o rozkładzie od początku, można dobrać
    > algorytm, choćby czy tworzyć zbiór dynamicznie zaczynając od
    > małej pamięći dla tej tablicy, powiększając, a więc realokując i rehaszując w mairę
    potrzeby
    > (jeśli liczba unikalnych wpisów jest
    > mała) czy budować od razu w tablicy hashującej wielkośći 2n (dla k=~=n).

    I taki wlasnie jest (mniej wiecej) algorytm pythonowy ktory podalem szemranemu.

    AK


    ---
    Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe
    Avast.
    https://www.avast.com/antivirus


  • 33. Data: 2015-09-17 00:23:42
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: bartekltg <b...@g...com>

    On 16.09.2015 23:27, AK wrote:
    > Użytkownik "bartekltg" <b...@g...com> napisał:
    >
    >> No właśnie, niekiedy. A w standardowym przypadku jesteśąmy do tyłu.
    >> Jeden przebieg zajmie zauważalną cześć czasu proponowanych tu
    >> rozwiązań.
    >> To wydaje się zbyt lekki problem na wstępną analizę danych.
    >
    > Zalezy. Zalkezy co sie rozumie pod terminem "przypadek standardowy".
    > IMHO standardowy przypadek do dane "merytoryczne"/dziedzinowe.

    Przecież o tym piszę. Coś można wyciagnać i wykalibrować
    algorytm, jeśli wiadoom, jakich danych statystycznie się spodziewać.


    > Jesli to sa dane "merytoryczne" to max -min << MAX_UINT


    Bardzo dziwne załozenie. Pewnie prawdziwe, w _neiktórych_
    dziedzinach.

    > a wtedy mozna "zjechac" zznacznie z pamiecia gdyz zamiast hasha pelnego
    > uinta mozna uzyc bitseta na rzeczywiscie uzywawanej maxymalnej ilosci bitow
    > /czyli bits(max - min)/.

    Główny spadek zapotrzebowania pamięciowego bierze się stąd,
    że tablica będzie nie większa niż O(max-min).
    Jak max-min zejdzie do zakresu bajta-dwóch, to w ogole
    nie bawiłbym się w hashowanie, tylko zliczał. A to było
    opisane jako pierwsza metoda w tym wątku.
    Jest to jednak bardzo sztuczny przypadek (tak, tak, są
    "dziedziny" gdzie to przypadek standardowy).



    pzdr
    bartekltg



  • 34. Data: 2015-09-17 08:12:48
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: slawek <f...@f...com>

    On Wed, 16 Sep 2015 11:34:13 +0200, bartekltg <b...@g...com>
    wrote:
    > Dlatego proponowałem (unordered_)set zamiast (...)map.

    A jest set w Fortranie?


  • 35. Data: 2015-09-17 14:37:51
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: "M.M." <m...@g...com>

    On Thursday, September 17, 2015 at 12:23:43 AM UTC+2, bartekltg wrote:
    > On 16.09.2015 23:27, AK wrote:
    > > Użytkownik "bartekltg" napisał:
    > >
    > >> No właśnie, niekiedy. A w standardowym przypadku jesteśąmy do tyłu.
    > >> Jeden przebieg zajmie zauważalną cześć czasu proponowanych tu
    > >> rozwiązań.
    > >> To wydaje się zbyt lekki problem na wstępną analizę danych.
    > >
    > > Zalezy. Zalkezy co sie rozumie pod terminem "przypadek standardowy".
    > > IMHO standardowy przypadek do dane "merytoryczne"/dziedzinowe.
    >
    > Przecież o tym piszę. Coś można wyciagnać i wykalibrować
    > algorytm, jeśli wiadoom, jakich danych statystycznie się spodziewać.

    Jak już przeciągamy, to ja ciekawy jestem, dla jakich danych najszybszy
    będzie będzie algorytm O(N^2). Jakie N, jaki procent duplikatów i jaki
    rozstęp, aby był najszybszy. Coś w ten deseń (z góry sory za błędy):

    bool exists( int t[] , int N, int v ) {
    for( i=0 ; i<N ; i++ )
    if( t[i] == v )
    return true;
    return false;
    }

    int uniq( int t[] , int N ) {
    for( i=j=0 ; i<N ; i++ ) {
    if( ! exist( t , j , t[i] ) )
    t[j++] = t[i];
    }
    return j;
    }

    Dla N=100 mamy około 2500 operacji. Przy N*LogN mamy
    tylko 600, ale implementacja algorytmu kwadratowego
    jest zabójczo wydajna.

    Pozdrawiam

    >
    >
    > > Jesli to sa dane "merytoryczne" to max -min << MAX_UINT
    >
    >
    > Bardzo dziwne załozenie. Pewnie prawdziwe, w _neiktórych_
    > dziedzinach.
    >
    > > a wtedy mozna "zjechac" zznacznie z pamiecia gdyz zamiast hasha pelnego
    > > uinta mozna uzyc bitseta na rzeczywiscie uzywawanej maxymalnej ilosci bitow
    > > /czyli bits(max - min)/.
    >
    > Główny spadek zapotrzebowania pamięciowego bierze się stąd,
    > że tablica będzie nie większa niż O(max-min).
    > Jak max-min zejdzie do zakresu bajta-dwóch, to w ogole
    > nie bawiłbym się w hashowanie, tylko zliczał. A to było
    > opisane jako pierwsza metoda w tym wątku.
    > Jest to jednak bardzo sztuczny przypadek (tak, tak, są
    > "dziedziny" gdzie to przypadek standardowy).
    >
    >
    >
    > pzdr
    > bartekltg


  • 36. Data: 2015-09-17 15:14:54
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: bartekltg <b...@g...com>

    On 17.09.2015 08:12, slawek wrote:
    > On Wed, 16 Sep 2015 11:34:13 +0200, bartekltg <b...@g...com> wrote:
    >> Dlatego proponowałem (unordered_)set zamiast (...)map.
    >
    > A jest set w Fortranie?


    A w Formula Translator jest coś poza macierzami zespolonymi? ;-)

    Jak nie ma, to trzeba napisać.
    Albo użyć języka, który lepiej nadaje się do naszych zadań.

    pzdr
    bartekltg




  • 37. Data: 2015-09-17 16:37:08
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: "AK" <n...@n...com>

    Użytkownik "bartekltg" <b...@g...com> napisał:

    > Jak nie ma, to trzeba napisać.

    Juz dawno napisane. Np:

    http://flibs.sourceforge.net/sets.html

    AK


    ---
    Ta wiadomość została sprawdzona na obecność wirusów przez oprogramowanie antywirusowe
    Avast.
    https://www.avast.com/antivirus


  • 38. Data: 2015-09-18 00:18:56
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: bartekltg <b...@g...com>

    On 17.09.2015 14:37, M.M. wrote:
    > On Thursday, September 17, 2015 at 12:23:43 AM UTC+2, bartekltg wrote:
    >> On 16.09.2015 23:27, AK wrote:
    >>> Użytkownik "bartekltg" napisał:
    >>>
    >>>> No właśnie, niekiedy. A w standardowym przypadku jesteśąmy do tyłu.
    >>>> Jeden przebieg zajmie zauważalną cześć czasu proponowanych tu
    >>>> rozwiązań.
    >>>> To wydaje się zbyt lekki problem na wstępną analizę danych.
    >>>
    >>> Zalezy. Zalkezy co sie rozumie pod terminem "przypadek standardowy".
    >>> IMHO standardowy przypadek do dane "merytoryczne"/dziedzinowe.
    >>
    >> Przecież o tym piszę. Coś można wyciagnać i wykalibrować
    >> algorytm, jeśli wiadoom, jakich danych statystycznie się spodziewać.
    >
    > Jak już przeciągamy, to ja ciekawy jestem, dla jakich danych najszybszy
    > będzie będzie algorytm O(N^2). Jakie N, jaki procent duplikatów i jaki
    > rozstęp, aby był najszybszy. Coś w ten deseń (z góry sory za błędy):
    >
    > bool exists( int t[] , int N, int v ) {
    > for( i=0 ; i<N ; i++ )
    > if( t[i] == v )
    > return true;
    > return false;
    > }
    >
    > int uniq( int t[] , int N ) {
    > for( i=j=0 ; i<N ; i++ ) {
    > if( ! exist( t , j , t[i] ) )
    > t[j++] = t[i];
    > }
    > return j;
    > }
    >
    > Dla N=100 mamy około 2500 operacji. Przy N*LogN mamy
    > tylko 600, ale implementacja algorytmu kwadratowego
    > jest zabójczo wydajna.

    Pewnie jak przy sortowaniu. Tam granica to kilkadziesiąt
    elementów.
    Z tablicą hashującą jeszcze mniejsza. Kilka?

    pzdr
    bartyekltg


  • 39. Data: 2015-09-18 07:22:27
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: slawek <f...@f...com>

    On Thu, 17 Sep 2015 15:14:54 +0200, bartekltg <b...@g...com>
    wrote:
    > A w Formula Translator jest coś poza macierzami zespolonymi? ;-)

    Są coarray. Jest OMP i ACC. BLAS. Jest operator potęgowania.


  • 40. Data: 2015-09-18 15:15:32
    Temat: Re: Tablica int i usuwanie duplikatów
    Od: bartekltg <b...@g...com>

    On 18.09.2015 07:22, slawek wrote:
    > On Thu, 17 Sep 2015 15:14:54 +0200, bartekltg <b...@g...com> wrote:
    >> A w Formula Translator jest coś poza macierzami zespolonymi? ;-)
    >
    > Są coarray. Jest OMP i ACC. BLAS. Jest operator potęgowania.

    Czyli możesz mnożyć zespolone macierze równolegle i na GPU ;-)

    FORTRAN jest bardzo dobrym językiem, ale jednek też o dość wąskiej
    specjalizacji. Można tworzyć tam odpowiednik wszystkich struktur STLa.
    Tylko po co skoro jest to bardzo upierdliwe i niewygodne. W COBOLu też
    można ;-)


    pzdr
    bartgekltg






strony : 1 ... 3 . [ 4 ] . 5 ... 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: