HiveBrain v1.2.0
Get Started
← Back to all entries
patternModerate

why not just use a random number generator as a hash function?

Submitted by: @import:stackexchange-cs··
0
Viewed 0 times
randomwhynumberjustfunctionhashgeneratorusenot

Problem

I guess at the heart of this is that I don't really understand hash functions.

One article says any function mapping objects to an object of fixed size:


A hash function usually means a function that compresses, meaning the
output is shorter than the input. Often, such a function takes an
input of arbitrary or almost arbitrary length to one whose length is a
fixed number, like 160 bits.

Why not just use a random number generator to generate the hash keys? Wikipedia suggests SHA1 which maps to $2^{160}\approx 10^{48}$ possible outputs has never experienced a "collision".

I was trying to understand why the hash is necessary in a probabilistic counting algorithm:

class LinearCounter():
    def __init__(self, m, h):
        self.array =  [False for x in range(m)]
        self.hash = h

    def add(value):
        self.array(self.hash[ value ]) = True


Is the hash necessary? Why can't we use a random number generator right away?

def add(value):
    self.array(int(m*random.random()))

Solution

If I understand the question correctly, the answer is simple: if Hash(object) returns 27 when you call it this afternoon, we want Hash(object) to return 27 if we call it next week, on a different computer. If you use a random number generator in such a way that this is guaranteed, then go for it. Consider that a key use case for hash functions is implementing hash tables, and we want to be able to access what we put into a hash table tomorrow with the key we used today.

In your example, you might want to add a contains(value) method; using the hash, this would be as easy as checking self.hash[value] =? value. Otherwise, you'd need to iterate through the entire array to see if some position contains value.

Context

StackExchange Computer Science Q#14601, answer score: 11

Revisions (0)

No revisions yet.