2016-03-26 19 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で提供してください。

PS:「なぜ最悪のハッシュですか?」と聞いている人には、元のset1と同等の「set2」を作成するつもりですが、アルゴリズムハッシュの衝突が多いため、要素が減少します。私は元の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的にしようと、1行:)

hsh = reduce(lambda x, y: ord(x) + ord(y), list(s)) 
関連する問題