2016-03-26 46 views
2

由于特定的原因,我试图找到(并非穷举)最糟糕的哈希算法。我发现this post分析了一些,我定位了Loselose算法。 This page状态的算法C(我认为)为:什么是python中的等效C/C++ loselose算法

unsigned long hash(unsigned char *str) 
{ 
    unsigned int hash = 0; 
    int c; 

    while (c = *str++) 
     hash += c; 

    return hash; 
} 

我不是一个程序员,C(或C++?)的此块是我的命。你能否给我一个帮助,并提供相当于Python?对于那些问“为什么最糟糕的散列?”,我打算创建set2,这是一个“等价于”原始set1,但由于高算法散列冲突而减少了元素。我不需要回到原来的set1。我只需要知道set2中是否存在散列。

+1

'而(C = * str ++)'相当于while((c = * str ++)!= 0)'。 – stackptr

+1

这不是翻译服务。 – Olaf

+1

FWIW,我认为最接近的Python应该是'def hash(s):return sum(bytearray(s))'。 – GManNickG

回答

1

您提供的C++代码只是遍历给定字符串的每个字符并将其ASCII值添加到变量hash并返回hash

我们可以通过这样实现的Python 2.7是相同的:

def custom_hash(s): 
    hsh = 0 
    for c in s: hsh += ord(c) 
    return hsh 

或者你总是可以尝试将Python化,做同样的一条线:)

hsh = reduce(lambda x, y: ord(x) + ord(y), list(s)) 
相关问题