Python 初學筆記 第一章 雜湊

2022-09-06 16:27:10 字數 2499 閱讀 7506

目錄hash,一般翻譯做雜湊,雜奏,音譯為雜湊,是把任意長度的輸入(又叫做預對映pre-image)通過雜湊演算法變換成固定長度的輸出,該輸出就是雜湊

值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常小於輸入的空間。

雜湊不能從結果推出輸入,所以又稱為不可逆演算法。

a = 'hello'

print(hash(a))

1441949233
簡單理解:已經對字典了解過知道字典是無序的,因為字典中的key會被進行雜湊,得到得雜湊值會被進行大小排序,假如字典的key雜湊得到[1, 2,

3, 4, 5],當我們進行查詢乙個key的值時,這個key也會被進行雜湊,假如得到2,2然後就會在字典得雜湊值列表裡使用二分法查詢,假如有1億條

資料,使用二分法只需要查詢27次,這是非常快的速度。

當然,實際的查詢演算法肯定不會那麼簡單。

# 二分法查值

a, b = 1, 100000000 # 假設資料數目

count = 0 # 計數器

guess = 443 # 假設需要查詢的key雜湊是443

while true:

count += 1

mid = (a + b) // 2

print(f"查詢範圍-, 二分法取")

if mid > guess:

b = mid

print(f"比大,調整查詢範圍")

elif mid < guess:

a = mid

print(f"比小,調整查詢範圍")

else:

break

print(f"一共查詢了次")

查詢範圍1-100000000, 二分法取50000000

50000000比443大,調整查詢範圍

查詢範圍1-50000000, 二分法取25000000

25000000比443大,調整查詢範圍

查詢範圍1-25000000, 二分法取12500000

12500000比443大,調整查詢範圍

查詢範圍1-12500000, 二分法取6250000

6250000比443大,調整查詢範圍

查詢範圍1-6250000, 二分法取3125000

3125000比443大,調整查詢範圍

查詢範圍1-3125000, 二分法取1562500

1562500比443大,調整查詢範圍

查詢範圍1-1562500, 二分法取781250

781250比443大,調整查詢範圍

查詢範圍1-781250, 二分法取390625

390625比443大,調整查詢範圍

查詢範圍1-390625, 二分法取195313

195313比443大,調整查詢範圍

查詢範圍1-195313, 二分法取97657

97657比443大,調整查詢範圍

查詢範圍1-97657, 二分法取48829

48829比443大,調整查詢範圍

查詢範圍1-48829, 二分法取24415

24415比443大,調整查詢範圍

查詢範圍1-24415, 二分法取12208

12208比443大,調整查詢範圍

查詢範圍1-12208, 二分法取6104

6104比443大,調整查詢範圍

查詢範圍1-6104, 二分法取3052

3052比443大,調整查詢範圍

查詢範圍1-3052, 二分法取1526

1526比443大,調整查詢範圍

查詢範圍1-1526, 二分法取763

763比443大,調整查詢範圍

查詢範圍1-763, 二分法取382

382比443小,調整查詢範圍

查詢範圍382-763, 二分法取572

572比443大,調整查詢範圍

查詢範圍382-572, 二分法取477

477比443大,調整查詢範圍

查詢範圍382-477, 二分法取429

429比443小,調整查詢範圍

查詢範圍429-477, 二分法取453

453比443大,調整查詢範圍

查詢範圍429-453, 二分法取441

441比443小,調整查詢範圍

查詢範圍441-453, 二分法取447

447比443大,調整查詢範圍

查詢範圍441-447, 二分法取444

444比443大,調整查詢範圍

查詢範圍441-444, 二分法取442

442比443小,調整查詢範圍

查詢範圍442-444, 二分法取443

一共查詢了27次

簡單理解:集合中的元素會被進行雜湊,當出現相同元素的時候,那麼雜湊值也會相同也就是重複了,也就不會再新增,字典的key也是一樣的,不會

有相同的key存在,因為如果有相同的key存在那麼在查詢的時候就會存在歧義,到底是取哪個呢?

Python 初學筆記 第一章 運算

目錄三元運算 計算機可以進行的運算有很多種,運算按種類可以分為算數運算 比較運算 邏輯運算 賦值運算 成員運算 身份運算 位運算。假設 a 10,b 20 運算子描述例項 加 兩個物件相加 a b 輸出結果30 減 得到符數或是乙個數減去另乙個數 a b 輸出結果10 乘 兩個數相乘或是返回乙個被重...

Python 初學筆記 第一章 字典

目錄格式 info dict print info dict name jackfromkeys iterable,value none,from builtins.type 使用可迭代的鍵並將值設定為value建立乙個新字典。account number fromkeys user1 user2 ...

Python 初學筆記 第一章 列表

目錄列表 list 是最常用的 python 資料型別,它可以作為乙個方括號內的逗號分割值出現。列表中的資料項不需要具有相同的型別,可以進行的操作包括索引 第乙個索引是0,第二個索引是1,以此類推 切片 加 乘 檢查成員等。name jack amon alyssa print name 0 jac...