2017-04-05 7 views
1

私はgoでハッシュプログラムを実装しようとしていますが、私は線形プロービングを使用して挿入と解決を行いました。値を取り戻そうとすると、衝突を修正するために線形プロービングを使用したときとは異なる値が得られます。線形プロービングを使用して衝突を解決した後、ハッシュテーブルから値を取得する方法は?

これが私のプログラムである:あなたの溶液中のhttps://play.golang.org/p/7Pmqu6A313

答えて

4

問題は、挿入操作のための「プロービングリニア」を使用しているが、あなたはそれを取得するために同じアプローチを使用していないということです。

まず第一に - 私の代わりに価値の全体構造体を維持するために、あなたの下線ストレージを変更します

var hasharray [15]Item 

第二に、私は計算されたハッシュインデックスを持つ項目の値を確認するために取得する方法を変更し、後のでしょうその反復項目一つ一つの衝突があった場合、実際のアイテムを見つける:

func retrieve(key string) { 
    index := hashmethod(key) 
    found := false 
    for !found { 
     item:= hasharray[index]; 
     if key == item.key { 
     found = true; 
     fmt.Println(index, item) 
     } else if index != size-1 { 
      index++ 
     } else { 
      index = 0 
     } 
    } 
} 

こちらをご覧ください:https://play.golang.org/p/8JfTpbJcWx

関連する問題