LRU算法(Last recently used,最近最少使用):缓存淘汰策略
实现:双向链表
1.新数据插入链表头部
2.修改或者访问缓存(链表)中数据,则将数据移动到链表头部
3.链表满的时候,丢弃尾部数据。
Python 内存管理和回收:
1.引用计数——
缺点:a.维护引用计数需要消耗一定的资源。b.循环引用时无法回收。
2.标记-清除——
有点:解决循环引用可能引起的内存泄漏问题
实现:
a.对执行删除后操作后的每个对象引用计数(额外再)-1,如果此时引用为0,则放入死亡容器,大于0则放入存活容器。
b.遍历存活容器,查看是否有的对象引用了死亡容器内的对象,如果欧就把该 对象 从死亡容器中取出放到存活容器里。
c.将死亡组里的所有对象清除掉。
3.分代技术
原理:分代回收技术是简历在标记-清除技术之上的,因为不能每次标记-清除都对所有对象进行(太费资源),效率太低),于是Python就将内存根据对象的存活时间划分为不同的集合,每个集合称为一个代。分为3代(0, 1, 2),它们对应的是3个链表,年轻代的总数达到上限时,垃圾回收机制就被触发,删掉可以被回收的对象,而把不会回收的放到上一代去。
选择一个hash函数的指标:
1.效率——计算速度快,尽量接近O(1)
2.均匀分布,减小碰撞。
快速排序:Python实现
def quick_sort(v, left, right): if left > right: return low = left high = right key = v[left] while low < high: while key <= v[high] and low < high: high -= 1 v[low] = v[high] while key > v[low] and low < high: low += 1 v[high] = v[low] v[low] = key quick_sort(v, left, low - 1) quick_sort(v, low + 1, right)