寒假 6(計劃更改)
阿新 • • 發佈:2018-02-06
內存 構建 集合 解法 數據 系統 商群 查找 c語言
遇到了一道題:longest substring with at most two distinct characters
我用sliding window解了,看到有個解法中有用到hash table的,至此了解到數據結構的概念,決定更改計劃。
開始學習《數據結構與算法分析 c語言實現》。
此處附上暫時的對hash table的理解:
hash table:數據結構的一種,和數組。鏈表是一個類型的東西,用於整體存儲調用一定數量的數據。是一種存儲和調用數據的方式。
哈希表對待查數據構造商群,到一個關鍵字集合中,使用商群到原集的映射,每個關鍵字映射到一個等價類集合,通過關鍵字查找到對應的數據地址,在同一個等價類中,又有其他的秩序,便於系統的尋址
不同元素在同一等價類中的現象稱為,哈希沖突,沖突是高效尋址的副產物,無法避免。
但是可以在同一等價類中構造秩序,例如鏈表。以進行下一步的精確尋址。
構建過程:
分配內存,內存分成不同的小塊並區分,用於存放不同的等價類。
把元素集按某個,等價關系,構建商映射,得到不同的等價類,每個等價類通過一個map對應到存儲塊上
每個等價類中的元素的區分函數
等價關系的構建,等價類到內存塊的映射,區分函數的構建;內存分塊方法
內存分配與分塊:多次調用malloc分配儲存空間並用不同的指針標識
等價關系和商映射的構建:根據元素類型特點,找可利用的性質;根據性質確定一個key
區分函數的構建,根據元素類型特點,找可利用的性質
等價類到內存塊:這就是hash函數?
使用的時候:
查找某元素:得到key,hash函數處理key得到hash值,對應到內存塊,內存塊內用比較函數,得到目標數據
寒假 6(計劃更改)