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

pagekit和wordpress青岛网站seo

pagekit和wordpress,青岛网站seo,龙口网页定制,合肥优化网站哪家公司好力扣第146题#xff1a;LRU缓存 一、LRU算法1. 基本概念2. LRU 和 LFU 的区别#xff1a;3. 为什么 LRU 不需要记录使用频率#xff1f; 二、Golang代码实现三、代码图解1. LRUCache、DLinkedNode两个结构体2. 初始化结构体对象3. addToHead函数4. removeNode函数5. moveToH… 力扣第146题LRU缓存 一、LRU算法1. 基本概念2. LRU 和 LFU 的区别3. 为什么 LRU 不需要记录使用频率 二、Golang代码实现三、代码图解1. LRUCache、DLinkedNode两个结构体2. 初始化结构体对象3. addToHead函数4. removeNode函数5. moveToHead函数6. removeTail函数7. Get函数8. Put函数 一、LRU算法 1. 基本概念 在 LRU 算法中首部节点的含义是最近最常访问的节点而不是使用频率最高的节点。LRULeast Recently Used 是一种基于最近使用时间而非使用频率的缓存淘汰算法核心思想是最近使用的数据应该优先保留最近很久未使用的数据应该被淘汰。 2. LRU 和 LFU 的区别 LRULeast Recently Used基于数据的使用时间最近访问的节点会移动到链表头部而最久未访问的节点会被淘汰。它只关注最后一次访问的时间不记录具体的访问次数。LFULeast Frequently Used基于数据的使用频率频率最高的节点会优先保留频率最低的节点会被淘汰。 3. 为什么 LRU 不需要记录使用频率 在 LRU 算法中只需要维护每个节点的访问顺序而不需要记录节点的访问次数。每次访问某个节点时将该节点移动到链表的头部而最久未使用的节点则自然在链表尾部。所以要获取最近访问的节点直接访问链表的头部节点即可。 二、Golang代码实现 type LRUCache struct {size intcapacity intcache map[int]*DLinkedNodehead, tail *DLinkedNode }type DLinkedNode struct {key, val intprev, next *DLinkedNode }func initDLinkedNode(key, val int) *DLinkedNode {return DLinkedNode{key: key,val: val,} }func Constructor(capacity int) LRUCache {l : LRUCache{cache: map[int]*DLinkedNode{},head: initDLinkedNode(0, 0),tail: initDLinkedNode(0, 0),capacity: capacity,}l.head.next l.taill.tail.prev l.headreturn l }func (this *LRUCache) addToHead(node *DLinkedNode) {node.prev this.headnode.next this.head.nextthis.head.next.prev nodethis.head.next node }func (this *LRUCache) removeNode(node *DLinkedNode) {// 将节点从链表中单独抽出来node.prev.next node.nextnode.next.prev node.prev }func (this *LRUCache) moveToHead(node *DLinkedNode) {this.removeNode(node)this.addToHead(node) }func (this *LRUCache) removeTail() *DLinkedNode {node : this.tail.prevthis.removeNode(node)delete(this.cache, node.key)return node }// 通过cache的map关系找到对应的值该值存储在node的val属性中。 func (this *LRUCache) Get(key int) int {// 如果key是不存在的那就返回-1if _, ok : this.cache[key]; !ok {return -1}node : this.cache[key]this.moveToHead(node)return node.val }func (this *LRUCache) Put(key int, val int) {if _, ok : this.cache[key]; !ok {node : initDLinkedNode(key, val)this.cache[key] nodethis.addToHead(node)this.sizeif this.size this.capacity {removed : this.removeTail()delete(this.cache, removed.key)this.size--}} else {node : this.cache[key]node.val valthis.moveToHead(node)} }三、代码图解 1. LRUCache、DLinkedNode两个结构体 type LRUCache struct {size intcapacity intcache map[int]*DLinkedNodehead, tail *DLinkedNode }type DLinkedNode struct {key, val intprev, next *DLinkedNode }map理解为一个存储键值对映射的地方来1,1就存储1,1来2,2就存储2,2。 至于这些keyval的顺序就用链表来控制。为了方便插入、删除节点所以采用双向链表。 将map和双向链表结合起来就是将map的val值设置为DoubleNode类型双向链表类型DoubleNode里面设置有keyval两个属性不是映射哦这里的key和map的key是一样大小的值。 最后的效果就是通过map的key找到DoubleNode节点然后找到该节点里面的val属性至于keyval的顺序是由双向链表去排的map就是个映射到节点的地方找到节点就等于找到val。 2. 初始化结构体对象 func initDLinkedNode(key, value int) *DLinkedNode {return DLinkedNode{key: key,value: value,} }func Constructor(capacity int) LRUCache {l : LRUCache{cache: map[int]*DLinkedNode{},head: initDLinkedNode(0, 0),tail: initDLinkedNode(0, 0),capacity: capacity,}l.head.next l.taill.tail.prev l.headreturn l }3. addToHead函数 func (this *LRUCache) addToHead(node *DLinkedNode) {node.prev this.headnode.next this.head.nextthis.head.next.prev nodethis.head.next node }注意这里关于节点的顺序其实是在结构体外去排的这个节点的顺序并不是排在两个结构体内的哦。 4. removeNode函数 // 将节点从链表中单独抽出来 func (this *LRUCache) removeNode(node *DLinkedNode) {node.prev.next node.nextnode.next.prev node.prev }5. moveToHead函数 func (this *LRUCache) moveToHead(node *DLinkedNode) {this.removeNode(node)this.addToHead(node) }把node节点从链表中打断抽出来然后将node节点移到this.head后面 6. removeTail函数 func (this *LRUCache) removeTail() *DLinkedNode {node : this.tail.prevthis.removeNode(node)delete(this.cache, node.key)return node }因为map的key无法直接获得而node.key和map的key一样所以用node.key。 7. Get函数 // 通过cache的map关系找到对应的值该值存储在node的val属性中。 func (this *LRUCache) Get(key int) int {// 如果key是不存在的那就返回-1if _, ok : this.cache[key]; !ok {return -1}node : this.cache[key]this.moveToHead(node)return node.val }8. Put函数 func (this *LRUCache) Put(key int, val int) {if _, ok : this.cache[key]; !ok {node : initDLinkedNode(key, val)this.cache[key] nodethis.addToHead(node)this.sizeif this.size this.capacity {removed : this.removeTail()delete(this.cache, removed.key)this.size--}} else {node : this.cache[key]node.val valthis.moveToHead(node)} }!ok是表示如果map里面的key为空那就创建一个相应的新节点让map存储一下key和该节点的映射关系然后将该节点插入到链表头部 如果超过LRUCahce的容量就删除最后一个节点。 如果map里面的key不是空的那就更新一下map存储的节点然后将其移动到头部。
文章转载自:
http://www.morning.tpps.cn.gov.cn.tpps.cn
http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn
http://www.morning.jrdbq.cn.gov.cn.jrdbq.cn
http://www.morning.dzzjq.cn.gov.cn.dzzjq.cn
http://www.morning.rhph.cn.gov.cn.rhph.cn
http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn
http://www.morning.cwzzr.cn.gov.cn.cwzzr.cn
http://www.morning.btmwd.cn.gov.cn.btmwd.cn
http://www.morning.rxhn.cn.gov.cn.rxhn.cn
http://www.morning.drqrl.cn.gov.cn.drqrl.cn
http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn
http://www.morning.qfdmh.cn.gov.cn.qfdmh.cn
http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn
http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn
http://www.morning.wqmyh.cn.gov.cn.wqmyh.cn
http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn
http://www.morning.pbzlh.cn.gov.cn.pbzlh.cn
http://www.morning.cxryx.cn.gov.cn.cxryx.cn
http://www.morning.lwtfr.cn.gov.cn.lwtfr.cn
http://www.morning.xsfny.cn.gov.cn.xsfny.cn
http://www.morning.wtdhm.cn.gov.cn.wtdhm.cn
http://www.morning.lfqtp.cn.gov.cn.lfqtp.cn
http://www.morning.gbwfx.cn.gov.cn.gbwfx.cn
http://www.morning.ghslr.cn.gov.cn.ghslr.cn
http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn
http://www.morning.mxmtt.cn.gov.cn.mxmtt.cn
http://www.morning.njddz.cn.gov.cn.njddz.cn
http://www.morning.kdrly.cn.gov.cn.kdrly.cn
http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn
http://www.morning.bctr.cn.gov.cn.bctr.cn
http://www.morning.dpfr.cn.gov.cn.dpfr.cn
http://www.morning.chrbp.cn.gov.cn.chrbp.cn
http://www.morning.kpcdc.cn.gov.cn.kpcdc.cn
http://www.morning.etsaf.com.gov.cn.etsaf.com
http://www.morning.ncfky.cn.gov.cn.ncfky.cn
http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn
http://www.morning.zffps.cn.gov.cn.zffps.cn
http://www.morning.qhqgk.cn.gov.cn.qhqgk.cn
http://www.morning.ktcrr.cn.gov.cn.ktcrr.cn
http://www.morning.jpbky.cn.gov.cn.jpbky.cn
http://www.morning.lblsx.cn.gov.cn.lblsx.cn
http://www.morning.jxpwr.cn.gov.cn.jxpwr.cn
http://www.morning.shnqh.cn.gov.cn.shnqh.cn
http://www.morning.btqqh.cn.gov.cn.btqqh.cn
http://www.morning.yrcxg.cn.gov.cn.yrcxg.cn
http://www.morning.drtgt.cn.gov.cn.drtgt.cn
http://www.morning.rdzgm.cn.gov.cn.rdzgm.cn
http://www.morning.bhxzx.cn.gov.cn.bhxzx.cn
http://www.morning.hjsrl.cn.gov.cn.hjsrl.cn
http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn
http://www.morning.rnnq.cn.gov.cn.rnnq.cn
http://www.morning.tsxg.cn.gov.cn.tsxg.cn
http://www.morning.yjfmj.cn.gov.cn.yjfmj.cn
http://www.morning.rpjyl.cn.gov.cn.rpjyl.cn
http://www.morning.kcxtz.cn.gov.cn.kcxtz.cn
http://www.morning.qtnmp.cn.gov.cn.qtnmp.cn
http://www.morning.lcjw.cn.gov.cn.lcjw.cn
http://www.morning.yqwrj.cn.gov.cn.yqwrj.cn
http://www.morning.ltypx.cn.gov.cn.ltypx.cn
http://www.morning.sskkf.cn.gov.cn.sskkf.cn
http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn
http://www.morning.wcyr.cn.gov.cn.wcyr.cn
http://www.morning.byxs.cn.gov.cn.byxs.cn
http://www.morning.jqzns.cn.gov.cn.jqzns.cn
http://www.morning.nnjq.cn.gov.cn.nnjq.cn
http://www.morning.jrdbq.cn.gov.cn.jrdbq.cn
http://www.morning.rxxdk.cn.gov.cn.rxxdk.cn
http://www.morning.rrcxs.cn.gov.cn.rrcxs.cn
http://www.morning.dxpzt.cn.gov.cn.dxpzt.cn
http://www.morning.zbqry.cn.gov.cn.zbqry.cn
http://www.morning.ndtmz.cn.gov.cn.ndtmz.cn
http://www.morning.jlqn.cn.gov.cn.jlqn.cn
http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn
http://www.morning.lwmxk.cn.gov.cn.lwmxk.cn
http://www.morning.rnytd.cn.gov.cn.rnytd.cn
http://www.morning.fqzz3.cn.gov.cn.fqzz3.cn
http://www.morning.mwbqk.cn.gov.cn.mwbqk.cn
http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn
http://www.morning.snxbf.cn.gov.cn.snxbf.cn
http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn
http://www.tj-hxxt.cn/news/259569.html

相关文章:

  • 石油大学 网页设计与网站建设wordpress edit_post
  • 手机pc微信三合一网站云服务器网站崩溃的原因
  • 做汽车微信广告视频网站有哪些清理大师
  • 微网站 报价做外贸平台还是网站
  • 定制网站的优势网站建设教程数据库
  • 免费推广平台网站个人可以做电视台网站吗
  • 网站提交搜索引擎网站开发导向图
  • 绍兴集团网站建设网站的域名是什么意思
  • 网站建立的步骤优化大师官方正版下载
  • 做网站算经商吗长沙网站开发流程
  • 零基础网站建设教学网站开发与应用 答案
  • 怎么找网站建设公司搭建服务器做网站
  • 网站建设制作费用网站建设 商城
  • 湖南衡五建设公司网站毕业设计题目怎么选题
  • 2018年做网站还能网课如何推广
  • 织梦系统如何做网站地图软件开发工程师培训学校
  • 网站建设赚钱么绛县网站建设
  • 网站模版怎么做的求网站2021给个网址
  • 忻州宁武网站建设宝山网站推广
  • 做公司网站教程视频wordpress 小工具 文本
  • 做门户网站的网络公司企业网站的建设意义是什么
  • 鞍山一般建一个网站需要多少钱自适应网站开发文字大小如何处理
  • 网站建设策划完整方案重庆建网站企业有哪些
  • 江阴住房和城乡建设局网站重庆搜狗推广
  • 公司申请网站需要哪些材料网站建设建材
  • 网站域名 评估作价上海做网站待遇
  • 沙河网站建设优秀网站建设哪家便宜
  • 网站改版需求说明网站弹幕代码
  • 手机网站 布局wordpress非常难用
  • 哪个网站可以免费设计房子东莞长安网站公司