什么是良好的哈希函数用于限制范围输出

时间:2015-04-07 07:01:45

标签: c# hash

我需要一个哈希函数来将1000个数字映射到50 * 50矩阵。我的数字是8位数字hex.i使用:

static int[,] matrix = new int[50, 50];
int m=hex[0 to 3]%50;
int n=hex[4 to 7]%50;
matrix[m,n]++;

但它的功能非常糟糕,并且有非常的碰撞。事实上,我将计算网络数据包窗口中的源IP数量。 请帮我!

1 个答案:

答案 0 :(得分:1)

此类保证没有冲突:-)请注意,返回的哈希是顺序的。给定的第一个不同数字的散列将为0,给定的第二个不同数字的散列将为1,依此类推。

public class Hasher
{
    private readonly Dictionary<int, int> Hashes = new Dictionary<int, int>();

    public int Hash(int value)
    {
        int hash;

        if (!Hashes.TryGetValue(value, out hash))
        {
            hash = Hashes.Count;
            Hashes[value] = Hashes.Count;
        }

        return hash;
    }
}

像这样使用:

var hasher = new Hasher();
int hash1 = hasher.Hash(11); // 0
int hash2 = hasher.Hash(27); // 1
int hash3 = hasher.Hash(11); // 0
int hash4 = hasher.Hash(47); // 2
int hash5 = hasher.Hash(47); // 2