eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingfunkcja haszująca/skrótu › Re: funkcja haszująca/skrótu
  • 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: funkcja haszująca/skrótu
    Date: Tue, 24 Sep 2013 06:06:20 +0200
    Organization: ATMAN - ATM S.A.
    Lines: 58
    Message-ID: <l1r34o$7qe$1@node2.news.atman.pl>
    References: <l1q5qe$d61$1@node2.news.atman.pl>
    <5...@g...com>
    <l1qgp1$dpi$1@node1.news.atman.pl>
    NNTP-Posting-Host: 89-76-68-230.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 1379995608 8014 89.76.68.230 (24 Sep 2013 04:06:48 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 24 Sep 2013 04:06:48 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20130801
    Thunderbird/17.0.8
    In-Reply-To: <l1qgp1$dpi$1@node1.news.atman.pl>
    Xref: news-archive.icm.edu.pl pl.comp.programming:204535
    [ ukryj nagłówki ]

    W dniu 2013-09-24 00:53, Piotrne pisze:
    > W dniu 2013-09-23 22:35, Wojciech Muła pisze:
    >
    >> No dobra, a dlaczego nie możesz posługiwać się piątką liczb 1..52
    >> i potraktować je jako cyfry dla systemu liczenia o podstawie 52?
    >> Wtedy miałbyś od razu indeks do tablicy, kosztem 5 mnożeń i 4 dodawań.
    >
    > Przypuszczam, z powodem jest 52^5 = 380204032, większe od 2,5 miliona.
    >
    >
    >> Jeśli to jednak nie przejdzie, to może lepiej rozważ użycie drzew
    >> trie.
    >
    >
    >
    > Napisałem funkcję c2num, która wykonuje przekształcenie, o które pytał
    > autor wątku. W funkcji używane są współczynniki dwumianowe, które
    > oczywiście można stablicować zamiast liczyć za każdym razem.

    Pytacz pewnie by docenił dwa słowa, skąd wzorek;)


    Współczynniki pewnie rzeczywiście najłatwiej stablicować,
    na pewno nie mogą zostać tak:

    > /* Współczynnik dwumianowy */
    > int binom(int n, int k)
    > { if ((k==0) || (k==n)) return 1; else return
    > binom(n-1,k-1)+binom(n-1,k); }

    Odpalenie binom(n,k) oznacza odpalenie tej funkcji
    rekurencyjnie C(n,k)*2-1 razy. Dla n=52 i k=26 to 9.9*10^14 razy.
    :-)

    Lepszym, a nadal prostym wzorkiem jest np 12 stąd:
    http://mathworld.wolfram.com/BinomialCoefficient.htm
    l
    C(n; k+1) = ( C(n; k) * (n-k) ) / (k+1)
    plus C(n;0)=1 oczywiście.


    nawiązując do oryginalnego pytania:
    Piotrne wykorzystał tutaj postać liczb. Nie zawsze się
    tak da, Ale nawet, jeśli nasze liczby sa losowe nie wszytko
    stracone, nadal możemy zbudować doskonałą funkcję haszującą,
    kosztem oczywiście pamięci.

    Date: Thu, 7 Mar 2013 19:10:04 -0800 (PST)
    Message-ID: <3...@g...c
    om>
    Subject: w poszukiwaniu funkcji hash
    i hasełko perfect hash.

    Można też brutalniej. Zapisać wszystkie liczby 'pięciobinarne',
    posortować, a potem indeksu szukać binarnie. Obstawiam jednak,
    że wzorek będzie szybszy.

    pzdr
    bartekltg

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: