python hash

在 python3 中hash

help(hash)

Help on built-in function hash in module builtins:

hash(obj, /)
    Return the hash value for the given object.#返回给定对象的哈希值

    Two objects that compare equal must also have the same hash value, but the
    reverse is not necessarily true.
    #两个比较相等的对象也必须有相同的散列值,但是逆转不一定是正确的。

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。

一个典型的空间换时间的算法,根据哈希出来的关键字进行快速的查询

构造方法:

① 直接寻址法

取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a·key + b,

其中a和b为常数(这种散列函数叫做自身函数)

② 数字分析法

分析一组数据的某些特征,比如,比如在学校里用学生的年龄来作为标识的话,会有很大

的冲突率,如果利用学生的学号作为标识的话,冲突率就会大大下降,因此数字分析就是

找出这些特征的规律,尽可能利用这些数据来构成冲突几率较低的散列地址

③ 平方取中法

先平方 后取中 生成散列地址

④ 折叠法

均匀分割 分别取和 生成散列地址

⑤ 随机数法

选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。

⑥ 除留余数法

取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) =

key MOD p, p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。

对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。

处理冲突的方法

① 开放寻址法:Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)为散列函数,m为散列表长,

di为增量序列,可有下列三种取法:

1).di=1,2,3,…,m-1,称线性探测再散列;

2). di=1^2,(-1)^2,2^2,(-2)^2,(3)^2,…,±(k)^2,(k<=m/2)称二次探测再散列;

3). di=伪随机数序列,称伪随机探测再散列。

② 再散列法:Hi=RHi(key),i=1,2,…,k RHi均是不同的散列函数,即在同义词产生地址冲突

时计算另一个散列函数地址,直到冲突不再发生,这种方法不易产生“聚集”,但增加了计

算时间。

③ 链地址法(拉链法)

④ 建立一个公共溢出区

时间: 2024-08-14 05:10:33

python hash的相关文章

python - hash类型操作

Redis在内存中存储hash类型是以name对应一个字典形式存储的 常用操作 在name对应的hash中获取根据key获取valuehget(name,key) 在name 对应的hash 中设备键值对hset(name, key, value) 在name对应的hash中批量设置键值对hmset(name, mapping) 在name对应的hash中获取多个key的值hmget(name, keys, *args) 获取name对应hash的所有键值hgetall(name) 获取name

Python hash、xml、configparser、sheve、shutil模块讲解 以及 面向对象初识

今日内容: 1.hash模块2.xml模块3.configparser模块4.sheve 模块5.shutil模块 知识点一:hash什么是hash: hash是一种算法,该算法接受传入的的内容,经过运算得到一串hash如果把hash算法比喻一座工厂 那传给hash算法的内容就是原材料,生产的hash值就是生产出的产品 为何用hash算法: hash值产品有三大特性: 1.只要传入的内容一样,得到的hash值必然是一样的 2.只要我们使用的hash算法固定,无论传入的内容有多大得到的hash值得

python hash()和哈希算法

哈希算法 哈希算法:哈希算法并不是特定的算法而是一类算法的统称,只要是完成这种功能的算法都是哈希算法,哈希算法也叫做散列算法.同时这个过程是不可逆的,无法由key推导出data.判断一个哈希算法是否优秀,要根据算法的离散度和冲突概率来评定. 哈希函数:就是你给我一个值,我就能通过这个函数计算出它的存储地址.然后取出对应的值,不需要遍历查找,只要计算出地址,需要查询的值就找到了. 哈希表:又称散列表,其定义是根据一个哈希函数将集合S中的关键字映射到一个表中,这个表就称为哈希表,而这种方法就称为Ha

Python dictionary implementation

Python dictionary implementation http://www.laurentluce.com/posts/python-dictionary-implementation/ August 29, 2011 This post describes how dictionaries are implemented in the Python language. Dictionaries are indexed by keys and they can be seen as

Python字典实现

Python dictionaries are implemented as hash tables. Hash tables must allow for hash collisions i.e. even if two keys have same hash value, the implementation of the table must have a strategy to insert and retrieve the key and value pairs unambiguous

python二维数组

今天..好多不会的,慢慢补充 1.python的二维数组初始化 s = [[0 for i in range(3)]for i in range(3)] 这样就初始了一个3*3的二维数组 = [[0 for in range(col_numbers)] for i in range(rows_numbers)] 2. with open('test.txt','rb') as f: s = f.readline() s的结尾是带着\r\n的 所以使用 s.strip('\r\n') strip参

一入python深似海--dict(字典)的一种实现

下面是python中字典的一种实现,用list数据结构实现字典.具体是这样的:[[(key1,value1),(key2,value2),...],[],[],...] 内部每一个hash地址是一个list,存放hash地址相同的(key,value)对. dict代码 def Map(num_buckets=256): """Initializes a Map with the given number of buckets.""" aMap

135.003 智能合约后端优化和产品化

@(135- Block Chain| 区块链) Introduction 如何通过数据结构优化降低合约执行成本 合约的继承 巧用modifier 以太坊函数库的使用和基本介绍 如何减少gas 消耗? (本质为节约计算资源,降低时间复杂度的问题) 数组越大,遍历所需资源越多 遍历数组 traverse array--> 映射 Mapping 1 Mapping in Solidity 类比map(c++),dict(python) Hash table Key - Value types of

python 字典有序无序及查找效率,hash表

刚学python的时候认为字典是无序,通过多次插入,如di = {}, 多次di['testkey']='testvalue' 这样测试来证明无序的.后来接触到了字典查找效率这个东西,查了一下,原来字典在python内部是通过哈希表的顺序来排的,做了一些测试,比如di = {1:1,3:3,2:2,4:4,5:5} ,无论怎么改变键值对的顺序,print di 总是会{1: 1, 2: 2, 3: 3, 4: 4, 5: 5}.所以看起来当插入di['key']='value'时,这组键值对有时