Author: David Rasmussen
Date: 22:48:51 02/18/02
Go up one level in this thread
Eh... How about just using the mod operator, %? On February 18, 2002 at 16:41:31, Dann Corbit wrote: >On February 18, 2002 at 15:43:09, Alvaro Jose Povoa Cardoso wrote: > >>My program uses hash tables witch are a power of two. >>In order to compute the index to an hash table of this kind I simply do: >> hashindex=(hashkey & hashsize) >>in witch hashsize is a mask with for example the first 12 bits set for a size of >>4096 entries. >>I would like to know how to compute the index to a hash table that can have >>sizes like 1MB, 7MB, 45MB, 49MB, 50MB, ..etc >>Could someone please explain how to do this? > >Let's suppose that you want some size of 49MB. Find the smallest prime number >that is less than or equal to your target size (it's easier than it sounds). > >Now, to hash to your table, the lookup is: >hashindex = hashkey % hashsize; > >In Beowulf, we have this: >... > if (NHash == 0) { > /* Work out how much hash table memory we have to play with */ > HashMem = (1 << Params.HashSize) * 512; > > /* Calculate a sensible number of hash table entries, using the > * largest prime number less than the calculated maximum number. */ > NHash = LargestPrime(HashMem / ((long int) sizeof(HashElt))); > > /* Allocate the memory */ > TableW = calloc(sizeof(HashElt), (size_t) NHash); > assert(TableW != NULL); > TableB = calloc(sizeof(HashElt), (size_t) NHash); > assert(TableB != NULL); > } > >Here is prime number selection: > >/* Calculate the largest (odd) prime number not greater than n. > * I know this is a dumb way of doing it, but it's easily fast enough > * considering that it should only need to be done once per game. */ >long int LargestPrime(long int n) >{ > int max_fact = (int) sqrt((double) n), > i; > /* This clause should never be needed, but it's worth keeping for safety */ > if (n < 5) > return 3; > n += (n % 2) + 1; > do { > n -= 2; > for (i = 3; i <= max_fact; i += 2) > if (n % i == 0) > break; > } while (i <= max_fact); > return n; >}
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.