2017-05-27 7 views
0

誰でも私のハッシュテーブルに値を挿入するput関数を修正する手助けはできますか? 現在、私はNoneの で完全なハッシュテーブルの出力を得ています。 [なし、なし、なし、なし、なし]ハッシュ - ハッシュテーブルに値を挿入する

class BasicHashTable: 
def __init__(self,size=7): 
    self.size = size 
    self.slots = [None] * self.size 

def hash_function(self, key): 
    return key%len(self.slots) 

def rehash(self, old_pos): 
    return (old_pos + 1) % self.size 

def put(self, key): 
    hash_value = key%len(self.slots)  
    probe_seq=[]  
    insert_pos=hash_value  
    probe_seq+=[insert_pos]  
    probes=1  
    while(self.slots[insert_pos]!=None):   
     probes+=1   
     insert_pos=(insert_pos+1)%len(self.slots)   
     probe_seq+=[insert_pos]  
     self.slots[insert_pos]=key  
    return insert_pos 

テスト:

hash_t = BasicHashTable() 
hash_t.put(3) 
hash_t.put(20) 
hash_t.put(10) 
print(hash_t.slots) 

は、それがない[なし、なし、なし、3、10、なし、20]

+2

は、あなたのテストコードを置くことができますか? – HuStmpHrrr

+1

あなたに[None、None、None、None]または[None、None、None、3,10、None、20]を教えてもらえますか?あなたの心を作りなさい。 –

+0

@stefan私はそれが現在の出力値ではなく、テストケースだと思います。 –

答えて

3

を与えません最初はスロットがすべてNoneなので、マップに追加するので、whileのコードは決して実行されません。このコードには、値をスロットに割り当てるコードが含まれています。

# code 
while(self.slots[insert_pos]!=None):   
    #code 
self.slots[insert_pos]=key # unindented 
# code 
0

あなたは正しい軌道に乗っています。まず、作成した再ハッシュ・メソッドを使用する必要があります。したがって、キーをすぐに挿入できない場合は、新しいハッシュが生成されます。空いているスロットが見つかるまでこれを続け、そのスロットに鍵を挿入します。

def put(self, key): 
    insert_pos = self.hash_function(key) 
    if self.slots[insert_pos] == None: 
     self.slots[insert_pos] = key 
    else: 
     insert_pos = self.rehash(insert_pos) 
     while self.slots[insert_pos] != None and self.slots[insert_pos] != key: 
      insert_pos = self.rehash(insert_pos) 
     if self.slots[insert_pos] == None: 
      self.slots[insert_pos] = key 

すべてのスロットがいっぱいになったら、新しいキーを追加しようとするとプログラムが無期限にループします。私はあなたにこの問題の解決策を見出させてくれます。キーへのデータの追加を開始すると、ソリューションが見つかる可能性があります。

また、あなたは、サイズの使用は、あなたがように作成された属性にする必要があります。

def hash_function(self, key): 
    return key%self.size 
関連する問題