eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingMasowe wyszukiwanie anagramówRe: Masowe wyszukiwanie anagramów
  • 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: Masowe wyszukiwanie anagramów
    Date: Tue, 5 Apr 2016 01:54:54 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 106
    Message-ID: <nduusf$m9d$1@node2.news.atman.pl>
    References: <ndu0or$nm8$1@node2.news.atman.pl> <ndu1kr$tdf$1@node1.news.atman.pl>
    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: node2.news.atman.pl 1459814095 22829 89.73.81.145 (4 Apr 2016 23:54:55 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 4 Apr 2016 23:54:55 +0000 (UTC)
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
    Thunderbird/38.6.0
    In-Reply-To: <ndu1kr$tdf$1@node1.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:209264
    [ ukryj nagłówki ]

    On 04.04.2016 17:35, Borneq wrote:
    > W dniu 04.04.2016 o 17:20, Borneq pisze:
    >> Jak najszybciej wyszukać anagramy? Mam słownik 100-200 tyś słów, i
    >> kolejne słowa próbuję.
    >> Może tak, że słownik przestawię w postaci pary - słowa
    >> posortowanego,słowa?
    >> np.
    >> abcino,bocian
    >> ?

    Całkowicie wysatrczy.

    > Tylko jak to sortować?,

    funckją sort? ;-)


    > sortowanie kubełkowe? czy to sortowanie nie
    > stwarza problemów, gdy jakaś litera się powtarza,

    Nie.

    > Kubełków mogło by byc
    > mało dla ASCII, ale trzeba by dużej liczby dla Unicodu

    Hmm, ciekawostka, patrząc na tabelkę utf-8 traktując
    wyrazy jak ciagi bajtów i sortując te bajty nie spowodujesz
    niezamierzonej kolizji;-) żadne "ęąń" nie okaże się tym samym ciągiem
    co "ółś"


    Albo czegoś nie mówisz, albo przekombinowujesz:


    #include <vector>
    #include <string>
    #include <iostream>
    #include <algorithm>



    using namespace std;


    int main()
    {

    vector <pair<string, string > > S;
    string str,strs;

    while ( cin>>str )
    {
    strs=str;
    sort(strs.begin(),strs.end());

    S.emplace_back( strs,str );
    }

    sort(S.begin(),S.end());

    for (auto it = S.begin(); it!=S.end();)
    {
    auto itend = next(it);
    while (itend!=S.end() && itend->first == it->first) ++itend;
    if (distance(it, itend)>1)
    {
    cout<<"-- "<<distance(it, itend)<<endl;
    while (it!=itend)
    cout<<(it++)->second<<endl;

    }
    else it++;
    }

    return 0;
    }

    Dłużej piszę posta niż pisałem ten kod,
    http://sjp.pl/slownik/growy/
    2.7 mln słow, 38MB,
    time ./untitled <slowa.txt >bla.txt
    real 0m5.638s

    Nie jest poprawny dla unikodu, ale dzięki uwadze powyżej - działa ;-)

    Rekordzista
    -- 13
    akrom
    arkom
    kamor
    karmo
    karom
    komar
    makro
    marko
    mokra
    morka
    okarm
    rakom
    ramko


    pzdr
    bartekltg


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

  • 05.04.16 14:32 M.M.
  • 05.04.16 15:28 M.M.

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: