当前位置: 首页 > news >正文

品牌高端网站制作官网wordpress注册美化

品牌高端网站制作官网,wordpress注册美化,php做的网站模板,杭州自助建站手撕LRU缓存_右大臣的博客-CSDN博客 是LRU的升级#xff0c;多了一个访问次数的维度 实现 LFUCache 类#xff1a; LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键 key 存在于缓存中#xff0c;则获取键的值#xff0c;否则返… 手撕LRU缓存_右大臣的博客-CSDN博客 是LRU的升级多了一个访问次数的维度 实现 LFUCache 类 LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键 key 存在于缓存中则获取键的值否则返回 -1 。void put(int key, int value) - 如果键 key 已存在则变更其值如果键不存在请插入键值对。当缓存达到其容量 capacity 时则应该在插入新项之前移除最不经常使用的项。在此问题中当存在平局即两个或更多个键具有相同使用频率时应该去除 最近最久未使用 的键。 为了确定最不常使用的键可以为缓存中的每个键维护一个 使用计数器 。使用计数最小的键是最久未使用的键。 当一个键首次插入到缓存中时它的使用计数器被设置为 1 (由于 put 操作)。对缓存中的键执行 get 或 put 操作使用计数器的值将会递增。 函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。 LRU的实现是一个哈希表加上一个双链表 而LFU则要复杂多了需要用两个哈希表再加上N个双链表才能实现 LFU需要为每一个频率构造一个双向链表 460. LFU 缓存 - 力扣LeetCode  一个逻辑讲解 总的来说就是下图这样 所以针对LRU的模仿写法我就直接用STL的list去做 因为LFU多了频率所以需要重构结点就不像LRU那个一样用pair对组了 //因为多了频率所以重构结点就不像LRU那个一样用pair对组了 struct Node {int key;int value;int frequency;Node(int k,int v,int f1):key(k),value(v),frequency(f){} }; class LFUCache { private:int cap;int minfre;//最小的频率unordered_mapint,listNode::iteratormpkey;//用记录key -val 缓存unordered_mapint,listNodempfre;//记录频率访问次数的public:LFUCache(int capacity10) {cap capacity;minfre 1;mpkey.clear();mpfre.clear();}int get(int key) {//没有这个结点if(mpkey.count(key)0){return -1;}//有结点 保存结点信息auto itmpkey[key];//找到结点位置int fre1it-frequency;//找到对应的频率int valit-value;//开始操作记录频率的表了mpfre[fre1].erase(it);//删除这个频率链表上的结点if(mpfre[fre1].size()0){//删完如果他空了//就把这个链表给删了mpfre.erase(fre1);if(fre1minfre){//如果这个频率他刚好是最小的minfre;} } //把这个结点加到高频率的链表头mpfre[fre11].push_front(Node(key,val,fre11));//更新结点缓存表的指向mpkey[key]mpfre[fre11].begin();return mpkey[key]-value;}void put(int key, int value) {if(get(key)!-1){//有这个结点//get已经帮忙更新过了只需要把值改了就行mpkey[key]-valuevalue;}else{//没有这个结点需要新添加//看结点缓存满不满if(mpkey.size()cap){//根据LRU算法找到最小频率的尾巴的结点删除auto itmpfre[minfre].back();mpkey.erase(it.key);mpfre[minfre].pop_back();//如果删完 最小频率这个链表他空了if(mpfre[minfre].size()0){mpfre.erase(minfre);}}//添加 新添加的频率置为1int freque1;mpfre[freque].push_front(Node(key,value,freque));mpkey[key]mpfre[freque].begin(); //最小频率置为1minfre1;}} };下面是我们自己实现的双向循环链表的写法代替list 构建结点和链表 为了方便操作给双向链表加上了虚拟的头结点和尾结点并在初始化的时候首尾相接。 struct Node {int key;int value;int frequency;Node*prev;Node*next;Node():key(-1),value(-1),frequency(0),prev(nullptr),next(nullptr){}Node(int k,int v):key(k),value(v),frequency(1),prev(nullptr),next(nullptr){} }; struct List//双向链表 {int frequency;//虚拟 头 尾 结点Node*vhead;Node*vtail;List(int f):frequency(f),vhead(new Node()),vtail(new Node()){vhead-nextvtail;vtail-prevvhead;} }; 有了基本结构就能实现LFU以及自己手撕链表的一些简单操作 这里需要用到的有插入删除结点以及链表判空和返回链表最后一个尾结点 struct Node {int key;int value;int frequency;Node*prev;Node*next;Node():key(-1),value(-1),frequency(0),prev(nullptr),next(nullptr){}Node(int k,int v):key(k),value(v),frequency(1),prev(nullptr),next(nullptr){} }; struct List//双向链表 {int frequency;//虚拟 头 尾 结点Node*vhead;Node*vtail;List(int f):frequency(f),vhead(new Node()),vtail(new Node()){vhead-nextvtail;vtail-prevvhead;} }; class LFUCache { private:int cap;int minfre;unordered_mapint,Node*keymp;unordered_mapint,List*fremp; public:LFUCache(int capacity10):cap(capacity),minfre(1) {}bool empty(List *ls){return ls-vhead-nextls-vtail?true:false;}void destroy(Node*node){node-prev-nextnode-next;node-next-prevnode-prev;}void addNode(Node*node){int frenode-frequency;if(!fremp.count(fre)){ //如果结点不在fremp[fre]new List(fre); //创建一个新链表}List*lsfremp[fre];//开始插入结点node-nextls-vhead-next;ls-vhead-next-prevnode; node-prevls-vhead;ls-vhead-nextnode;}void popTail(){Node*tmpfremp[minfre]-vtail-prev;destroy(tmp);keymp.erase(tmp-key);}int get(int key) {if(keymp.count(key)){//存在Node*curkeymp[key];int valcur-value;int frecur-frequency;destroy(cur);//删完之后如果 链表空了那就删链表if(empty(fremp[fre])){fremp.erase(fre);if(freminfre){minfre;}}//加结点cur-frequency1;addNode(cur);return val;}return -1;}void put(int key, int value) {if(get(key)!-1){keymp[key]-valuevalue;}else{//满了没if(keymp.size()cap){popTail();}Node*curnew Node(key,value);keymp[key]cur;minfre1;addNode(cur);} } };
http://www.zqtcl.cn/news/351514/

相关文章:

  • 本地宁波网站建设电子商务网站建设工具都有那些
  • 网站建设的基本目标免费 wordpress企业主题
  • 专业网站建设微信商城开发规划馆网站建设
  • 网站建设公司沈阳西安建设工程信息交易中心官网
  • 青海住房和城乡建设部网站wordpress php7.3
  • 网站后台重置密码怎么做360网站怎么做网址链接
  • 广告网站建设及推广网站建设怎样推广
  • 做网站使网页不居中滁州注册公司流程和费用
  • 做网站广告经营者个性定制网站
  • 网站开发 北京外包公司软件公司网站建设
  • 网络认证入口seo免费诊断
  • 十大知名博客网站郑州企业建站公司定制
  • 视频网站如何做引流网站首页 关键词
  • 建设机械网站精英大港做网站
  • 潜山网站建设公司哪里有wordpress相册投票插件
  • 网站建设制作过程网站添加支付功能
  • 网站制作字体即墨公司做网站
  • vue 做pc网站可以吗哪个网站买域名便宜
  • 做销售网站那家好金华住房与城乡建设部网站
  • apple私人免费网站怎么下载无锡网站建设技术
  • 移动应用网站开发阶段作业信息型网站有哪些
  • 监控直播网站开发网站建设与管理总结
  • 青岛城阳网站设计免费网站成品
  • 做服装外贸的网站ghost wordpress
  • 建设银行的网站为什么这么卡网页设计用啥软件
  • 电子商务 网站开发南阳网网站建设
  • 中小型企业网络拓扑图及配置株洲seo网站推广
  • 中国镇江网站如何搭建自己的网址
  • wordpress 自动广告seo搜索引擎优化原理
  • 区块链网站用vue.js做怎么样长春站建筑