eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Masowe wyszukiwanie anagramów
Ilość wypowiedzi w tym wątku: 14

  • 1. Data: 2016-04-04 17:20:59
    Temat: Masowe wyszukiwanie anagramów
    Od: Borneq <b...@a...hidden.pl>

    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
    ?


  • 2. Data: 2016-04-04 17:35:55
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: Borneq <b...@a...hidden.pl>

    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
    > ?
    Tylko jak to sortować?, sortowanie kubełkowe? czy to sortowanie nie
    stwarza problemów, gdy jakaś litera się powtarza, Kubełków mogło by byc
    mało dla ASCII, ale trzeba by dużej liczby dla Unicodu


  • 3. Data: 2016-04-04 17:52:52
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: "M.M." <m...@g...com>

    Najlepiej przy pomocy algorytmu genetycznego - żart.

    Ja bym sprobował hashtable i funkcji skrótu odpornej na kolejność znakow.


  • 4. Data: 2016-04-04 18:16:02
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: Kviat <kviat@NIE_DLA_SPAMUneostrada.pl>

    W dniu 2016-04-04 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

    Czy słowo "abcino" występuje w tym słowniku (zakładam, że "bocian"
    istnieje)? Czy może "abcino" to losowy ciąg liter i w tym słowniku
    chcesz sprawdzić czy istnieje "anagram" dla takich liter?
    (Bo o ile kojarzę, anagram to słowo powstałe w wyniku przestawienia
    liter z innego słowa - oba sensowne. Bo w innym przypadku dla dowolnego
    słowa liczysz możliwe dowolne kombinacje ustawienia liter i masz ilość
    "anagramów", które potencjalnie mogą wystąpić w słowniku...)
    Czyli inaczej pytając, chcesz znaleźć konkretny anagram (anagramy), czy
    wszystkie istniejące w słowniku?
    Nie znam słowa "abcino" stąd pytanie o doprecyzowanie, bo od tego chyba
    zależy dalszy sposób szukania.

    Oczywiście nie znam odpowiedzi :) ale skoro to grupa dyskusyjna to
    pomyślałem, że zacząłbym od pogrupowania elementów słownika w/g ilości
    liter. Pierwszym warunkiem jest to, że słowa-anagramy na pewno mają
    dokładnie tę samą ilość liter. I szukałbym anagramu(ów) dla słowa
    "bocian" tylko w grupie wyrazów 6cio literowych.

    Tak samo, jakbym chciał poznać ilość wszystkich anagramów istniejących w
    słowniku, to utworzyłbym tyle wątków wyszukujących, ile jest grup
    n-literowych.

    Ale już samo wyszukiwanie w poszczególnych grupach to się nie
    zastanawiałem (w sensie szybkości, bo zliczanie liter i porównywanie
    wystąpień z kolejnym wyrazami raczej jest banalne i do zrobienia na
    piechotę, tyle że pewnie da się zastosować jakąś magię i ktoś mądrzejszy
    już ją zna ;)

    Pozdrawiam
    Piotr


  • 5. Data: 2016-04-04 18:21:50
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: Borneq <b...@a...hidden.pl>

    W dniu 04.04.2016 o 17:52, M.M. pisze:
    > Najlepiej przy pomocy algorytmu genetycznego - żart.
    >
    > Ja bym sprobował hashtable i funkcji skrótu odpornej na kolejność znakow.
    >
    Fakt, to może być jeszcze szybsze


  • 6. Data: 2016-04-04 18:25:09
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: Borneq <b...@a...hidden.pl>

    W dniu 04.04.2016 o 18:16, Kviat pisze:
    > Czy słowo "abcino" występuje w tym słowniku (zakładam, że "bocian"
    > istnieje)? Czy może "abcino" to losowy ciąg liter i w tym słowniku
    > chcesz sprawdzić czy istnieje "anagram" dla takich liter?

    Właśnie, jest tu pewien problem: mamy w słowniku akr i rak, kra. Dla
    słowa akr hasz znajdzie mi tylko jeden, poza tym byłby chyba błąd przy
    dodawaniu takich samych haszy. To jest zależne od języka, prawdopodobnie
    w C# ale nie jestem pewien


  • 7. Data: 2016-04-04 18:49:49
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: Kviat <kviat@NIE_DLA_SPAMUneostrada.pl>

    W dniu 2016-04-04 o 18:25, Borneq pisze:
    > W dniu 04.04.2016 o 18:16, Kviat pisze:
    >> Czy słowo "abcino" występuje w tym słowniku (zakładam, że "bocian"
    >> istnieje)? Czy może "abcino" to losowy ciąg liter i w tym słowniku
    >> chcesz sprawdzić czy istnieje "anagram" dla takich liter?
    >
    > Właśnie, jest tu pewien problem: mamy w słowniku akr i rak, kra. Dla
    > słowa akr hasz znajdzie mi tylko jeden, poza tym byłby chyba błąd przy
    > dodawaniu takich samych haszy. To jest zależne od języka, prawdopodobnie
    > w C# ale nie jestem pewien

    Właśnie na szybko coś takiego znalazłem:
    https://www.rosettacode.org/wiki/Anagrams
    Może Ci się przyda.

    Pozdrawiam
    Piotr


  • 8. Data: 2016-04-04 19:07:39
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: szemrany <s...@o...off>

    On Mon, 4 Apr 2016 17:20:59 +0200, Borneq wrote:

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

    Każde słowo w słowniku zamieniasz wg algorytmu:

    litera[licznik]litera[licznik]

    czyli np.:

    obrazek: o[1]b[1]r[1]a[1]z[1]e[1]k[1]

    teraz sortujesz po alfabecie:

    obrazek: a[1]b[1]e[1]k[1]o[1]r[1]z[1]

    i tak lecisz po całym słowniku.

    A potem sortujesz słownik wg tego "hasza".

    No i potem masz obok siebie wszystkie anagramy, czyli np. za obrazkiem
    jest:

    zarobek: a[1]b[1]e[1]k[1]o[1]r[1]z[1]


    --
    howgh
    szemrany
    "Zrozumienie umożliwia zastąpienie nieracjonalnych działań lub bezradności
    przez działania racjonalne." M.Mazur, ojciec polskiej szkoły cybernetyki


  • 9. Data: 2016-04-04 21:57:04
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: "M.M." <m...@g...com>

    On Monday, April 4, 2016 at 6:21:51 PM UTC+2, Borneq wrote:
    > W dniu 04.04.2016 o 17:52, M.M. pisze:
    > > Najlepiej przy pomocy algorytmu genetycznego - żart.
    > >
    > > Ja bym sprobował hashtable i funkcji skrótu odpornej na kolejność znakow.
    > >
    > Fakt, to może być jeszcze szybsze

    Tak się wydaje, w praktyce mogą wyjść jakieś schody. Warto spróbować
    jeśli wydajność jest ważna.

    Pozdrawiam


  • 10. Data: 2016-04-04 22:05:01
    Temat: Re: Masowe wyszukiwanie anagramów
    Od: "M.M." <m...@g...com>

    On Monday, April 4, 2016 at 9:57:05 PM UTC+2, M.M. wrote:
    > On Monday, April 4, 2016 at 6:21:51 PM UTC+2, Borneq wrote:
    > > W dniu 04.04.2016 o 17:52, M.M. pisze:
    > > > Najlepiej przy pomocy algorytmu genetycznego - żart.
    > > >
    > > > Ja bym sprobował hashtable i funkcji skrótu odpornej na kolejność znakow.
    > > >
    > > Fakt, to może być jeszcze szybsze
    >
    > Tak się wydaje, w praktyce mogą wyjść jakieś schody. Warto spróbować
    > jeśli wydajność jest ważna.
    >
    > Pozdrawiam

    Sorry że na raty odpisuję. Słowa są krótkie, czyli mają mało liter. Więc
    funkcja hash będzie przyjmowała mało wartości, tym bardziej że ma być
    odporna na kolejność liter - to są te (potencjalne) schody.

    Nie wiem czy warto zrobić taką funkcję hash:

    const static unsigned long long hash_keys[256*256] = { rand , rand , rand , etc };

    uint mkHash( const char string[] ) {
    unsigned long long hash = 0;
    for( int i=0 ; string[i] ; i++ ) {
    for( int j=i+1 ; string[j] ; j++ ) {
    hash ^= hash_keys[ string[i] + string[j] * 256 ];
    }
    }
    return (uint)( hash % hash_size )
    }

    Pozdrawiam

strony : [ 1 ] . 2


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: