AIUTO tabelle hash

di il
21 risposte

21 Risposte - Pagina 2

  • Re: AIUTO tabelle hash

    
    #if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
        #define g16b(d) (*((const UINT16 *) (d)))
    #endif
    
    #if !defined (g16b)
        #define g16b(d) ((((UINT32)(((const BYTE *)(d))[1])) << 8) + (UINT32)(((const BYTE *)(d))[0]) )
    #endif
    
    UINT32 fast_hash(char * data, INT32 len, INT32 maxhash)
    {
        UINT32 hash = len;
        UINT32 tmp;
        INT32 rem;
    
        if (len <= 0 || data == NULL) return 0;
    
        rem = len & 3;
        len >>= 2;
    
        /* Main loop */
        for (;len > 0; len--)
        {
            hash  += g16b(data);
            tmp    = (g16b(data+2) << 11) ^ hash;
            hash   = (hash << 16) ^ tmp;
            data  += 2 * sizeof(INT16);
            hash  += hash >> 11;
        }
    
        /* Handle end cases */
        switch (rem) {
            case 3: hash += g16b (data);
                    hash ^= hash << 16;
                    hash ^= ((signed char)data[sizeof (uint16_t)]) << 18;
                    hash += hash >> 11;
                    break;
            case 2: hash += g16b(data);
                    hash ^= hash << 11;
                    hash += hash >> 17;
                    break;
            case 1: hash += (signed char)*data;
                    hash ^= hash << 10;
                    hash += hash >> 1;
        }
    
        /* Force "avalanching" of final 127 bits */
        hash ^= hash << 3;
        hash += hash >> 5;
        hash ^= hash << 4;
        hash += hash >> 17;
        hash ^= hash << 25;
        hash += hash >> 6;
    
        return (maxhash) ? hash % maxhash : hash;
    }
    
    
    Ma si vedrà lontano un miglio che non è farina del tuo sacco....
  • Re: AIUTO tabelle hash

    SVNiko ha scritto:


    Che cosa intendi per funzione di hash più performante? Che non produce collisioni? In realtà ci sono studi matematici che dimostrano l'impossibilità dell'asserzione.

    Ad ogni modo ci sono molte funzioni di hash realizzabili tutte con la loro dignità. Per una stringa potresti usare l'algoritmo di horner.
    ok grazie mille
  • Re: AIUTO tabelle hash

    Veramente in molti casi è possibile creare una tabella senza collisioni!
    Ancor più col codice isbn, suddivisibile in paese allocabili all'occorrenza in sotto vettori di produttori e ancora suddivisi in titoli.
    tre tabelle di hash con 0 collisioni...
    vabbhe, good night
  • Re: AIUTO tabelle hash

    vbextreme ha scritto:


    Veramente in molti casi è possibile creare una tabella senza collisioni!
    Ancor più col codice isbn, suddivisibile in paese allocabili all'occorrenza in sotto vettori di produttori e ancora suddivisi in titoli.
    tre tabelle di hash con 0 collisioni...
    vabbhe, good night
    questo è troppo per me
  • Re: AIUTO tabelle hash

    Il codice isbn dei libri è già un codice hash!
    se leggi lo standard capirai che se allochi un vettore di 99 paesi e per ogni paese allochi un vettore contenente gli editori e per ogni editore allochi un vettore per ogni Titolo avrai già tutto senza nemmeno una funzione di hash perché isbn è già un hash!
    Vabbhe forse sarà che a me non piace complicarmi la vita..
    e se volessi ridurre la memoria allocata, allora faresti come il codice postato, un bel % maxvalue
  • Re: AIUTO tabelle hash

    vbextreme ha scritto:


    Il codice isbn dei libri è già un codice hash!
    se leggi lo standard capirai che se allochi un vettore di 99 paesi e per ogni paese allochi un vettore contenente gli editori e per ogni editore allochi un vettore per ogni Titolo avrai già tutto senza nemmeno una funzione di hash perché isbn è già un hash!
    Vabbhe forse sarà che a me non piace complicarmi la vita..
    e se volessi ridurre la memoria allocata, allora faresti come il codice postato, un bel % maxvalue
    il problema è che non capisco proprio una riga di codice di quello che hai postato , riesci a spiegarmi un po il codice
  • Re: AIUTO tabelle hash

Devi accedere o registrarti per scrivere nel forum
21 risposte