學習雜湊表

2021-09-16 13:22:58 字數 2344 閱讀 1487

雜貨店商品對應的**舉例:

簡單查詢就是拿出商品價目本,這個價目本並不是有序的,顧客問蘋果多少錢,需要乙個乙個去查詢某乙個商品的**,需要o(n)時間。

同樣是乙個價目本,但是按商品名稱字母排序的,這樣需要的時候更短為o(logn)。

但這樣我還是覺得查詢太慢,怎麼辦,這時候需要一名能記住所有商品**的員工,這樣一問評價**便知,只需要o(1)。

從資料結構的角度來看

你可使用陣列來實現記錄商品**的本子,的每個元素包含兩項內容:商品名和**。

如果將這個陣列按商品名排序,就可使用二分查詢在其中查詢商品的**。這樣查詢**的時間將為o(log n)。

然而,我希望查詢商品**的時間為o(1),這是雜湊函式的用武之地。

無論你給雜湊函式什麼資料,它都還你乙個數字,專業點說:雜湊函式「將輸入對映到數字」

特點:

簡單實現商品價目本:

準備乙個空列表,將蘋果輸入雜湊函式,輸出4,那麼列表的索引4就存蘋果**¥2.1,依次類存。。。行程價目本。

這樣我們想知道商品名(蘋果)**,直接把蘋果給雜湊函式,輸出的就是價目表的索引4位置的**(¥2.1)。

注意:雜湊函式知道陣列有多大,只返回有效的索引。如果陣列包含5個元素,雜湊函式就不會

返回無效索引100。

雜湊表複雜資料結構中,雜湊表可能是最有用的,也被稱為雜湊對映、對映、字典和關聯陣列。雜湊表的速度很快!和陣列一樣快。

python提供的雜湊表實現為字典,你可使用函式dict來建立雜湊表。

雜湊表的應用

將雜湊表用於查詢

比如**本

>>

> phone_book =

>>

> phone_book[

"小明"]=

8675309

>>

> phone_book[

"火警"]=

119>>

>

print phone_book[

"小明"

]# 查詢jenny的**

防止重複比如投票機制:已經投過票的不能再投了

voted =

# 雜湊表查詢元素非常快

defcheck_voter

(name)

:if voted.get(name)

:print

"kick them out!"

else

: voted[name]

=true

print

"let them vote!"

如果將已投票者的姓名儲存在列表中,這個函式的速度終將變得非常慢,因為它必須使用簡單查詢搜尋整個列表。

作為快取

你登入了facebook,你看到的所有內容都是為你定製的。你每次訪問facebook.com,其伺服器都需考慮你感興趣的是什麼內容。但如果你沒有登入,看到的將是登入頁面。每個人看到的登入頁面都相同。 facebook被反覆要求做同樣的事情:「當我登出時,請向我顯示主頁。」有鑑於此,它不讓伺服器去生成主頁,而是將主頁儲存起來,並在需要時將其直接傳送給使用者。

facebook不僅快取主頁,還快取about頁面、 contact頁面等眾多其他的頁面。因此,它需要將頁面url對映到頁面資料。

也就是乙個字典中key是url,value是網頁資料data

cache =

defget_page

(url)

:if cache.get(url)

:return cache[url]

else

: data = get_data_from_server(url)

# 訪問伺服器處理並返回資料填充到雜湊表

cache[url]

= data

return data

僅當url不在快取中時,你才讓伺服器做些處理,並將處理生成的資料儲存到快取中,再返回它。這樣,當下次有人請求該url時,你就可以直接傳送快取中的資料,而不用再讓伺服器進行處理了。

這裡總結一下,雜湊表適合用於:

雜湊表 學習

看了幾篇文章,主要意思就是用簡單的值index,去索引複雜的值key,進而找到想要的值value.雜湊演算法主旨 index f key 資料存放格式 key.value 但是存在問題是,1.雜湊演算法使不同的key產生相同的index 2.分配給雜湊表的記憶體滿了之後,整個雜湊表的遷移太累贅了。針...

雜湊表學習總結

1.雜湊函式 雜湊函式可能會將兩個以上的的關鍵字對映到同乙個位址上,稱這種情況為衝突。應注意任何設計出來的雜湊函式都不能避免衝突 2.雜湊函式的構造方法 直接定址法 適用於關鍵字的分布基本連續的情況 除留餘數法 最簡單,最常用的情況 數字分析法 適用於已知的關鍵字集合,若更換了關鍵字,則需要重新構造...

學習筆記 雜湊表

最近開始把之前欠的noip基礎知識點刷一下 2333其實我的作業還沒有寫完 做到雜湊表的時候,我有點懵,顯然前幾次講課的時候我沒有聽 於是lbmttw lx就開始在網上學習了 啊啊啊 沙雕橘貓真心可愛,愛了愛了 發現其實hash表是個比較有趣的東西 一種典型的空間換時間的資料結構,也叫雜湊表 時間複...