0

Python で関数を作成しようとしています。この関数は、ハッシュ テーブルに文字列を追加し、数学をインポートせずに 2 次プロービングで衝突を解決します。

def addString(string, hashTable):
    collisions = 0
    stop = False
    slot = (hashString(string, len(hashTable)))
    while not stop:
        if hashTable[slot] == None:
            hashTable[slot] = string
            stop = True
        else:
            slot = slot + (collisions**2)%len(hashTable)
            collisions = collisions + 1
        print('collisions: ', collisions)

私の問題は、 IndexError: list index out of range が発生し続けることです。問題はelseブロックにあると確信していますが、解決策が見つからないようです。助けていただければ幸いです。

4

1 に答える 1

0

hashString()関数の内部動作を知らなくても、文字列を取得して、それを特定の長さのハッシュに変換していると思います。それが真の場合、else ステートメントは、hashTable の範囲外の値を設定します (これも、hashTable の内部動作を指定していないため、単なる推測です)。

これが発生する理由は、次の場合に実際にslot境界よりも大きくしているためです。

slot = slot + (collisions**2)%len(hashTable)

設計上、ハッシュは通常指定された長さであり、それを長くしているだけなので、hashTable.

新しいスロット全体を変更して、範囲外にならないようにする必要があります。

slot = (slot + (collisions**2))%len(hashTable)

于 2016-03-18T14:52:06.033 に答える