1. 程式人生 > >寒假 6(計劃更改)

寒假 6(計劃更改)

內存 構建 集合 解法 數據 系統 商群 查找 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(計劃更改)