class
hashmap
(object):
2def
__init__
(self):3
# 初始化總表為,容量為2的**(含兩個子表)
4 self.maps = bettermap(2)
5 self.num =
0# 表中資料個數67
defget
(self,k):8
return self.maps.get(k)910
defadd
(self, k, v):11
# 若當前元素數量達到臨界值(子表總數)時,進行重排操作
12# 對總表進行擴張,增加子表的個數為當前元素個數的兩倍!
13if self.num ==
len(self.maps.maps)
:14 self.resize()15
16# 往重排過後的 self.map 新增新的元素
17 self.maps.add(k, v)
18 self.num +=119
20def
resize
(self):21
""" 重排操作,新增新錶, 注意重排需要線性的時間 """
22# 先建立乙個新的表,子表數 = 2 * 元素個數
23 new_maps = bettermap(self.num *2)
2425
for m in self.maps.maps:
# 檢索每個舊的子表
26for k,v in m.items:
# 將子表的元素複製到新子表
27 new_maps.add(k, v)
2829 self.maps = new_maps # 令當前的表為新錶
class
bettermap
(object):
2""" 利用linearmap物件作為子表,建立更快的查詢表 """
3def
__init__
(self,n=
100)
:4 self.maps =
# 總**
5for i in
range
(n):
# 根據n的大小建立n個空的子表))
78deffind_map
(self,k)
:# 通過hash函式計算索引值
9 index =
hash
(k)%
len(self.maps)
10return self.maps[index]
# 返回索引子表的引用
1112
# 尋找合適的子表(linearmap物件),進行新增和查詢
13def
add(self, k, v)
:14 m = self.find_map(k)
15 m.add(k,v)
1617
defget
(self, k)
:18 m = self.find_map(k)
19return m.get(k)
實現乙個基於鍊錶法解決衝突問題的雜湊表
實現乙個 lru 快取淘汰演算法
雜湊表學習筆記
雜湊表 雜湊表
一 定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式...
雜湊表(雜湊表)
雜湊表是最基礎的資料結構之一,利用鍵值對儲存並檢索資料的一種非線性結構。在其它各種結構線性表 樹等資料結構中,記錄在結構中的位置是隨機的,和記錄關鍵字之間不存在確定的關係,因此,在結構中查詢記錄時需進行一系列和關鍵字的 比較 的基礎上。在順序查詢時,比較的結果為 與 兩種可能 在折半查詢 二叉排序樹...
雜湊表(雜湊表)
原文 雜湊表是種資料結構,它可以提供快速的插入操作和查詢操作。第一次接觸雜湊表時,它的優點多得讓人難以置信。不論雜湊表中有多少資料,插入和刪除 有時包括側除 只需要接近常量的時間即0 1 的時間級。實際上,這只需要幾條機器指令。對雜湊表的使用者一一人來說,這是一瞬間的事。雜湊表運算得非常快,在電腦程...