基础知识二、Python实现FIFO算法
在上一节中我们实现了双向链表DoubleLinkedList类,本节我们基于双向链表实现FIFO(先进先出)缓存置换算法。
文章目录
- 一、FIFO实现
- 二、测试逻辑
一、FIFO实现
代码逻辑很简单,就是遵循先进先出的原则,具体流程都写在注释中了。通过一个map来实现查找时的O(1)复杂度
class FIFOCache(object):def __init__(self, capacity=0xffffffff):"""FIFO缓存置换算法:param capacity:"""self.capacity = capacityself.map = {}self.size = 0self.list = DoubleLinkedList(capacity)def get(self, key):"""获取元素不存在 返回None已存在 则返回缓存值:param key::return:"""# 当前缓存中不存在if key not in self.map:return None# 当前缓存中存在node = self.map.get(key)return node.valuedef put(self, key, value):"""添加元素已存在 更新值并添加至链表尾部不存在 判断缓存容量大小后添加:param key::param value::return: 已添加的节点"""# 当前缓存中已存在if key in self.map:node = self.map.get(key)self.list.remove(node)node.value = valueself.list.append(node)else:# 缓存容量达到上限 删除头结点if self.size >= self.capacity:old_node = self.list.pop()del self.map[old_node.key]self.size -= 1node = Node(key, value)self.map[key] = nodeself.list.append(node)self.size += 1return nodedef print(self):"""打印当前链表:return:"""self.list.print()# print(self.map)
二、测试逻辑
if __name__ == '__main__':fifo_cache = FIFOCache(2)fifo_cache.put(1, 1)fifo_cache.print()fifo_cache.put(2, 2)fifo_cache.print()print(fifo_cache.get(2))fifo_cache.put(3, 3)fifo_cache.print()print(fifo_cache.get(1))fifo_cache.put(2, 4)fifo_cache.print()
测试结果:
基础知识二、Python实现FIFO算法相关推荐
- 加密基础知识二 非对称加密RSA算法和对称加密
一.RSA的计算过程 上述过程中,出现了公钥(3233,17)和私钥(3233,2753),这两组数字是怎么找出来的呢?参考RSA算法原理(二) 首字母缩写说明:E是加密(Encryption)D是解 ...
- CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)
CV:计算机视觉技术之图像基础知识(二)-以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础) 目录 ...
- Python基础笔记_Day01_计算机基础知识和Python开发环境搭建
Day01_计算机基础知识和Python开发环境搭建 目录 01.01_计算机基础知识(计算机概述)(了解) 01.02_计算机基础知识(软件开发和计算机语言概述)(了解) 01.03_计算机基础知识 ...
- scikit-learn学习基础知识二
scikit-learn学习基础知识二 文章目录 scikit-learn学习基础知识二 一.介绍 二.代码实现 三.运行结果 四.总结 一.介绍 本文我们学习scikit-learn中的KNeigh ...
- CV:计算机视觉技术之图像基础知识(二)—图像内核的可视化解释
CV:计算机视觉技术之图像基础知识(二)-图像内核的可视化解释 目录 图像内核的可视化解释 测试九种卷积核 官方Demo DIY图片测试 DIY实时视频测试 相关文章 CV:计算机视觉技术之图像基础知 ...
- CV:计算机视觉技术之图像基础知识—以python的cv2库来了解计算机视觉图像基础
CV:计算机视觉技术之图像基础知识-以python的cv2库来了解计算机视觉图像基础 目录 一.图像中的傅里叶变换 1.时域和频域 2.傅里叶变换 3.图像中的傅里叶变换
- (五)JS基础知识二(通过图理解原型和原型链)【三座大山之一,必考!!!】
JS基础知识二(原型和原型链) 提问 class 继承 类型判断(instanceof) 原型 原型关系 基于原型的执行规则 原型链 说明 提问 如何准确判断一个变量是不是数组 class的原型本质 ...
- oracle:oracle基础知识(二)
oracle基础知识(二)笔记:高级查询 文章目录 分组查询 多属性分组语法: 过滤查询 group by 语句增强 sqlplus报表功能 多表查询 等值连接 外连接 自连接 子查询 子查询中的空值 ...
- python的基础_python基础知识,python必背内容,一、python的基
python基础知识,python必背内容,一.python的基 一.python的基础 1.简单写一行python代码:print('hello,world')print('你好,北京') 2.变量 ...
- python程序如何执行死刑_「Python基础知识」Python生成器函数
原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...
最新文章
- CocoaPods私有库搭建的记录
- 禁止windows系统的自动运行功能
- 802.11n 连接的建议设置是什么?
- 网站精准定位从这三方面着手
- Node.js in IIS — Hello World
- poj1061-青蛙的约会
- C# SharpMap 学习总结
- 千万条数据快速导入MySQL
- go json部分解析_Go语言爱好者周刊:第 60 期 — 今天这题你做对了吗?
- Windows Django 开发环境搭建
- 莫名其妙的解决了MagicDraw中文问题
- 面试智力题精选:扑克牌问题
- 技术管理岗岗位职责总结
- Jvm与DVM与ART
- web前端网页制作课作业:用DIV+CSS技术设计的静态网站【四大名著】中国传统文化主题题材设计
- 【Jekyll】记录一下启动服务器时遇到的问题
- 大数据分析案例-基于决策树算法构建员工离职预测模型
- GO学习笔记1.5:第一个GO项目常见问题
- python进行简单的文本相似度分析
- python 性能优化