#! /usr/local/bin/python# -*- coding:utf-8 -*-import linkedlistclass HashChain:def __init__(self,size=5):self.size=size # size is table sizeself.table=[]for i in range(size):obj=linkedlist.Linkedlist()self.table.append(obj)# hash function returns k mod 5(int)# k: string or int,floatdef hash(self,k):if type(k)==str:return len(k)%self.sizeelse:return int(k%5)def insert(self,k):hash=self.hash(k)#search end pointnext_id=0pre_id=0while True:next_id=self.table[hash].obj[next_id].nextif next_id==None:end_id=self.table[hash].obj[pre_id].idbreakelse:pre_id=next_idself.table[hash].insert(k,end_id,None)def delete(self,k):hash=self.hash(k)self.table[hash].delete(k)def search(self,k):hash=self.hash(k)#serach idsearch_obj=self.table[hash].list_search(k)if search_obj==None:return 'no item'else:return self.table[hash].obj[search_obj.id].key
ハッシュ関数は乗数法でデフォルトは5の余りにしました.
数はそのまま割って余りを出して,文字列は文字列の長さをtableのサイズ(デフォルトが5)でわった余りにしました.前実装したlinledlistのクラスにバグが入っててちょっと苦労しました...
(import linkedlistで読み込んでるのは,前回作成したLinkedlistのクラスを記述したlinkedlist.pyというモジュールです)
0 件のコメント:
コメントを投稿