Re: Hash/permutation function for object ID creation
- From: Bruza <benruza@xxxxxxxxx>
- Date: Tue, 29 Jul 2008 18:51:34 -0700 (PDT)
On Jul 29, 6:16 pm, matt.timmerm...@xxxxxxxxx wrote:
On Jul 29, 4:20 am, Bruza <benr...@xxxxxxxxx> wrote:
I need a system to generate a series of "semi-random-non-repeating"
32-bit object IDs. For this, I plan to create a sequence counter
(starting from 0), then feed the sequence number, s, to a permutation
function, F(s). And use F(s) as the generated object ID. F() needs to
have the following properties:
1. F(x) is semi-random so that if the ID is partitioned into any
number of "buckets" (by equal range, or MOD hashing), each bucket
has roughly same number of objects.
2. F() has an inverse F' s.t. F(F'(x)) = x
3. Both F() and F'() are computationally "inexpensive" to compute
When I have to do this sort of thing for a simple hash table or
something, I usually do something simple like:
hash = ID+SOME_CONSTANT
hash *= SOME_ODD_CONSTANT
hash ^= (hash>>16)
hash ^= (hash>>8)
each line is reversible in modular arithmetic (mod 2^x), so the whole
function is reversible.
If you need something stronger, you can divide the ID into two halves
(L,R), and with a good hash function H(), do:
L' = L XOR H(R)
R' = R XOR H(L')
hash = (L',R')
This is called a Feistel network (googlable), and again each step is
obviously reversible.
Cheers,
Matt
Matt,
Great! Feistel network seems to be what I want. Thanks for your help.
Bruza
.
- References:
- Hash/permutation function for object ID creation
- From: Bruza
- Re: Hash/permutation function for object ID creation
- From: matt . timmermans
- Hash/permutation function for object ID creation
- Prev by Date: Re: Hash/permutation function for object ID creation
- Next by Date: Integer Factorization with SAT
- Previous by thread: Re: Hash/permutation function for object ID creation
- Next by thread: Integer Factorization with SAT
- Index(es):
Relevant Pages
|