内置算法数据结构库:
sorted
dict/list/set/tuple
import collections
dict底层结构:无序
Python中所有不可变的内置类型都是可哈希的。
可变类型(如列表,字典和集合)就是不可哈希的,因此不能作为字典的键
dict底层使用hash:为了快速查找使用哈希表作为底层结构
哈希表平均查找时间复杂度0(1)
HASH处理冲突方法
创建HASH和查找hash遇到的问题都可以用同一个方法解决:
开放定址法:基本思想:当关键子key哈希地址p=H(key)冲突,以p为基础,产生另一个哈希地址p1,如果P1冲突,产生P2.。。。。。。直到找出一个不冲突的哈希地址PI
线性探测再散列
特点:冲突发生时,顺序查看表中下一单元,直接找出一个空单元或查遍全表
二次探测再散列:
冲突发生时,在表的左右进行跳跃式探索,比较灵活
链地址法:
建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素一律写进溢出表
python list/tuple 区别
list vs tuple
都是线性结构,支持下表访问
list是可变对象,tuple保存的引用不可变
list不可hash,tuple可以hash
什么是LRUCache
LRU:替换掉最近最少使用的对象
缓存提出策略:当缓存空间不够用的时候需要一种方式剔除key
LRU:通过使用一个循环双端队列不断把最新访问的key放到表头实现
实现LURCache
字典用来缓存, 循环双端链表用来记录访问顺序、
dict+collections.OrderedDict
dicr用来当作k/v键值对的缓存
orderedDict用来实现更新最近访问的key