數據結構與算法(二)--哈希函數

1.哈希表的理解

a:C++的stl模板

STL(Standard Template Library),即標準模板庫,是一個具有工業強度的,高效的C++程序庫。它被容納於C++標準程序庫(C++ Standard Library)中,是ANSI/ISO C++標準中最新的也是極具革命性的一部分。該庫包含了諸多在計算機科學領域裏所常用的基本數據結構和基本算法。爲廣大C++程序員們提供了一個可擴展的應用框架,高度體現了軟件的可複用性。

1.2 STL內容介紹

STL中六大組件:
1)容器(Container),是一種數據結構,如list,vector,和deques ,以模板類的方法提供。爲了訪問容器中的數據,可以使用由容器類輸出的迭代器;
2)迭代器(Iterator),提供了訪問容器中對象的方法。例如,可以使用一對迭代器指定list或vector中的一定範圍的對象。迭代器就如同一個指針。事實上,C++的指針也是一種迭代器。但是,迭代器也可以是那些定義了operator*()以及其他類似於指針的操作符地方法的類對象;
3)算法(Algorithm),是用來操作容器中的數據的模板函數。例如,STL用sort()來對一個vector中的數據進行排序,用find()來搜索一個list中的對象,函數本身與他們操作的數據的結構和類型無關,因此他們可以在從簡單數組到高度複雜容器的任何數據結構上使用;
4)仿函數(Function object)
5)迭代適配器(Adaptor)
6)空間配製器(allocator)

2.再來看hash函數

    散列的概念屬於查找,它不以關鍵字的比較爲基本操作,採用直接尋址技術。在理想情況下,查找的期望時間爲O(1)。

簡單的說,hash函數就是把任意長的輸入字符串變化成固定長的輸出字符串的一種函數。輸出字符串的長度稱爲hash函數的位數。(下圖來源於維基百科)

散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來,比如我們自定義密碼的存儲。


一句話:散列(Hashing)通過散列函數將要檢索的項與索引(散列,散列值)關聯起來,生成一種便於搜索的數據結構(散列表)。

應用:尋找字符串中第一個只出現一次的字符



發佈了30 篇原創文章 · 獲贊 10 · 訪問量 9076
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章