06: 字典、列表、hash樹、字典 實現原理
1.1 python中字典對象實現原理
註:字典類型是Python中最常用的數據類型之一,它是一個鍵值對的集合,字典通過鍵來索引,關聯到相對的值,理論上它的查詢復雜度是 O(1)
1、哈希表 (hash tables)
1. 哈希表(也叫散列表),根據關鍵值對(Key-value)而直接進行訪問的數據結構。
2. 它通過把key和value映射到表中一個位置來訪問記錄,這種查詢速度非常快,更新也快。
3. 而這個映射函數叫做哈希函數,存放值的數組叫做哈希表。
4. 通過把每個對象的關鍵字k作為自變量,通過一個哈希函數h(k),將k映射到下標h(k)處,並將此對象存儲在這個位置。
2、具體操作過程
1. 數據添加:把key通過哈希函數轉換成一個整型數字,然後就將該數字對數組長度進行取余,取余結果就當作數組的下標,
將value存儲在以該數字為下標的數組空間裏。
2. 數據查詢:再次使用哈希函數將key轉換為對應的數組下標,並定位到數組的位置獲取value。
3、{“name”:”zhangsan”,”age”:26} 字典如何存儲的呢?
1. 比如字典{“name”:”zhangsan”,”age”:26},那麽他們的字典key為name、age,假如哈希函數h(“name”) = 1、h(“age”)=3,
2. 那麽對應字典的key就會存儲在列表對應下標的位置,[None, “zhangsan”, None, 26 ]
4、解決hash沖突
1.2 順序表
1、順序表定義
1. 線性表的順序存儲是指用一組地址連續的存儲單元依次存儲線性表中的各個元素,使得線性表在邏輯結構上相鄰的元素存儲在連續的物理存儲單元中
2. 通過數據元素物理存儲的連續性來反應元素之間邏輯上的相鄰關系。
3. 采用順序存儲結構存儲的線性表通常簡稱為順序表。
2、順序存儲的線性表的特點:
1. 線性表的邏輯順序與物理順序一致;
2. 數據元素之間的關系是以元素在計算機內“物理位置相鄰”來體現。
3、順序表的線性存儲示意圖
1. 假設線性表中有n個元素,每個元素占k個存儲單元,第一個元素的地址為Loc(a1),則第i個元素的地址Loc(ai):
2. Loc(ai) = Loc(a1) + (i-1) * k; # 其中Loc(a1)稱為基地址。
06: 字典、列表、hash樹、字典 實現原理