马尔可夫聚类算法(MCL)是在大规永利皇宫登录网址模生物网络中寻找模块的一个有效方法

当前位置:永利皇宫登录网址 > 永利皇宫登录网址 > 马尔可夫聚类算法(MCL)是在大规永利皇宫登录网址模生物网络中寻找模块的一个有效方法
作者: 永利皇宫登录网址|来源: http://www.txsxyk.com|栏目:永利皇宫登录网址

文章关键词:永利皇宫登录网址,写出所有缓存

  上篇文章算法题就像搭乐高:手把手带你拆解LRU算法写了LRU缓存淘汰算法的实现方法,本文来写另一个著名的缓存淘汰算法:LFU算法。

  从实现难度上来说,LFU算法的难度大于LRU算法,因为LRU算法相当于把数据按照时间排序,这个需求借助链表很自然就能实现,你一直从链表头部加入元素的话,越靠近头部的元素就是新的数据,越靠近尾部的元素就是旧的数据,永利皇宫登录网址我们进行缓存淘汰的时候只要简单地将尾部的元素淘汰掉就行了。

  而LFU算法相当于是淘汰访问频次最低的数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。把数据按照访问频次进行排序,而且频次还会不断变化,这可不容易实现。

  所以说LFU算法要复杂很多,labuladong进字节跳动的时候就被面试官问到了LFU算法。

  话说回来,这种著名的算法的套路都是固定的,关键是由于逻辑较复杂,不容易写出漂亮且没有bug的代码。

  get(key)方法会去缓存中查询键key,如果key存在,则返回key对应的val,否则返回-1。

  put(key,value)方法插入或修改缓存。如果key已存在,则将它对应的值改为val;如果key不存在,则插入键值对(key,val)。

  当缓存达到容量capacity时,则应该在插入新的键值对之前,删除使用频次(后文用freq表示)最低的键值对。如果freq最低的键值对有多个,则删除其中最旧的那个。

  一定先从最简单的开始,根据LFU算法的逻辑,我们先列举出算法执行过程中的几个显而易见的事实:

  2、只要用get或者put方法访问一次某个key,该key的freq就要加一。

  3、如果在容量满了的时候进行插入,则需要将freq最小的key删除,如果最小的freq对应多个key,则删除其中最旧的那一个。

  好的,我们希望能够在O(1)的时间内解决这些需求,可以使用基本数据结构来逐个击破:

  2、使用一个HashMap存储key到freq的映射,就可以快速操作key对应的freq。

  3.1、首先,肯定是需要freq到key的映射,用来找到freq最小的key。

  3.2、将freq最小的key删除,那你就得快速得到当前所有key最小的freq是多少。想要时间复杂度O(1)的话,肯定不能遍历一遍去找,那就用一个变量minFreq来记录当前最小的freq吧。

  3.3、可能有多个key拥有相同的freq,所以freq对key是一对多的关系,即一个freq对应一个key的列表。

  3.4、希望freq对应的key的列表是存在时序的,便于快速查找并删除最旧的key。

  3.5、希望能够快速删除key列表中的任何一个key,因为如果频次为freq的某个key被访问,那么它的频次就会变成freq+1,就应该从freq对应的key列表中删除,加到freq+1对应的key的列表中。

  介绍一下这个LinkedHashSet,它满足我们3.3,3.4,3.5这几个要求。你会发现普通的链表LinkedList能够满足3.3,3.4这两个要求,但是由于普通链表不能快速访问链表中的某一个节点,所以无法满足3.5的要求。

  LinkedHashSet顾名思义,是链表和哈希集合的结合体。链表不能快速访问链表节点,但是插入元素具有时序;哈希集合中的元素无序,但是可以对元素进行快速的访问和删除。

  那么,它俩结合起来就兼具了哈希集合和链表的特性,既可以在O(1)时间内访问或删除其中的元素,又可以保持插入的时序,高效实现3.5这个需求。

  LFU的逻辑不难理解,但是写代码实现并不容易,因为你看我们要维护KV表,KF表,FK表三个映射,特别容易出错。对于这种情况,labuladong教你三个技巧:

  1、不要企图上来就实现算法的所有细节,而应该自顶向下,逐步求精,先写清楚主函数的逻辑框架,然后再一步步实现细节。

  2、搞清楚映射关系,如果我们更新了某个key对应的freq,那么就要同步修改KF表和FK表,这样才不会出问题。

  3、画图,画图,画图,重要的话说三遍,把逻辑比较复杂的部分用流程图画出来,然后根据图来写代码,可以极大减少出错的概率。

  下面我们先来实现get(key)方法,逻辑很简单,返回key对应的val,然后增加key对应的freq:

  增加key对应的freq是LFU算法的核心,所以我们干脆直接抽象成一个函数increaseFreq,这样get方法看起来就简洁清晰了对吧。

  下面来实现put(key,val)方法,逻辑略微复杂,我们直接画个图来看:

  这图就是随手画的,不是什么正规的程序流程图,但是算法逻辑一目了然,看图可以直接写出put方法的逻辑:

  increaseFreq和removeMinFreqKey方法是LFU算法的核心,我们下面来看看怎么借助KV表,KF表,FK表这三个映射巧妙完成这两个函数。

  删除某个键key肯定是要同时修改三个映射表的,借助minFreq参数可以从FK表中找到freq最小的keyList,根据时序,其中第一个元素就是要被淘汰的deletedKey,操作三个映射表删除这个key即可。

  但是有个细节问题,如果keyList中只有一个元素,那么删除之后minFreq对应的key列表就为空了,也就是minFreq变量需要被更新。如何计算当前的minFreq是多少呢?

  实际上没办法快速计算minFreq,只能线性遍历FK表或者KF表来计算,这样肯定不能保证O(1)的时间复杂度。

  但是,其实这里没必要更新minFreq变量,因为你想想removeMinFreqKey这个函数是在什么时候调用?在put方法中插入新key时可能调用。而你回头看put的代码,插入新key时一定会把minFreq更新成1,所以说即便这里minFreq变了,我们也不需要管它。

  更新某个key的freq肯定会涉及FK表和KF表,所以我们分别更新这两个表就行了。

  和之前类似,当FK表中freq对应的列表被删空后,需要删除FK表中freq这个映射。如果这个freq恰好是minFreq,说明minFreq变量需要更新。

  能不能快速找到当前的minFreq呢?这里是可以的,因为我们刚才把key的freq加了1嘛,所以minFreq也加1就行了。

  文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

  实际上,专利中的这些文章都是为了确定所讨论算法的潜力而写的。尽管该公司表示不会在政府部门之外使用此软....

  机器算法深度学习在商业领域带来了许多变化。根据定义,它被视为人工智能的子领域,它可以基于输入数据来累....

  近日,创新奇智凭借突破性的单目标跟踪算法,在通用单目标跟踪测评数据集GOT-10k(Generic ....

  站在媒介演化的时间线年来“各种新媒体层出不穷,轻捷小巧,如同很多食肉型小恐龙....

  作为数据科学家,我在很多公司工作过,也遇到了很多问题和挑战。事实上,很多人都会经历这些挑战,就不同情....

  为了提高高分辨率图像的质量.实现快速的图像增强算法,提出在离散余弦变换(DCT)的对比度测度下。通过....

  随着空间技术的发展,遥感图像获得了同益广泛的应用,随之带来的遥感数据海量增长,给存储和传输都带来极大....

  亚马逊传播错误的健康信息受到了很多批评者的指责。而自从疫情爆发,批判者们的担忧已经升级。

  在人工智能发展中,离不开三个关键词:算法、大数据、计算能力。 算法作为人工智能的核心内容之一,直接影....

  针对复杂背景的多目标图像,提出了一种基于直方图的实时自适应图像增强方法。该方法根据自适应直方图窗口选....

  为进一步提高编码效率,在研究菱形算法的基础上,采用了“十字”形运动估计算法,设计了硬件电路,并用H‘....

  马尔可夫聚类算法(MCL)是在大规模生物网络中寻找模块的一个有效方法,能够挖掘网络结构和功能影响力较....

  本文档的主要内容详细介绍的是如何实现多聚焦图像融合的拉普拉斯金字塔方法。

  一种基于FPGA动态可重构的图像融合算法。该方法对小波分解后的图像低频子带采用平均融合算子处理,在高....

  针对现有的立体匹配算法在精度和速度上不可兼得的现状,提出一种改进的跨尺度代价聚合立体匹配算法。通过强....

  RS码在通信领域有着广泛的应用,其中最重要的是关键方程的求解.传统欧几里德算法在求解关键方程时需要进....

  时代在变化。数据、算法、算力成为数字经济时代的关键词。 互联网的普及带来了数字设备的联接,物联网(I....

  人工神经网络( Artificial neural Networks,ANN)系统是20世纪40年代....

  站在媒介演化的时间线年来“各种新媒体层出不穷,轻捷小巧,如同很多食肉型小恐龙....

  有人说,数据是新的“泥土”—用来构建现代世界结构的原材料。就像泥土一样,数据看起来就像是一个无限的、....

  研究了一种应用于三相四桥臂逆变器的基于abc坐标系的新的空间矢量调制算法,避免了传统的αβ0坐标变换....

  在AIoT时代,开源硬件,特别是RISC-V给业界带来巨大的想象空间。而安卓(Android)作为目....

  当下,人脸识别已经遍及生活各处,小到手机、小区门禁,大到高铁站、飞机场,都能看到人脸识别的应用,极大....

  回顾过去,早期的数据标注行业曾长期处于粗放的发展模式,数据粗制、混乱、复用的情况屡见不鲜;但随着AI....

  【SPWM仿真模型】根据理论搭建的MATLAB仿真模型,可用于算法验证,大家可以看看!

  市人大代表陈杰军意识到,这些精巧设计,擅长利用人体神经细胞的运作机制,擅长利用人性弱点的算法,不断精....

  此次融资同投资者建立战略合作伙伴关系 鸿海同华邦加入Horizons,高通,红杉和伟诠等公司,成为耐....

  近日,耐能自主研发的人脸识别技术(活体检测)算法,正式通过国家金融IC卡安全检测中心-银行卡检测中心....

  事实上,人可以根据即将到来的几个箱子的形状尺寸,很快地做出决策,并不需要、也无法做到对整个箱子序列的....

  推荐过程可以概括为数据算法层通过相关召回算法根据用户的兴趣和行为历史在海量帖子中筛选出候选集,使用相....

  为了进行高质量,高速的图像旋转变换,通过对传统图像旋转矩阵的分解,将图像在二维空间中的旋转运算分解成....

  针对移动群智感知任务中区域全覆盖感知成本过高问题,提出基于压缩感知的移动群智感知任务分发(CS-TD....

  在本文中,生物工程师Bryan Bryson博士,计算机科学家Bonnie Berger博士及其合著....

  对几种常用的图像缩放算法进行了比较,在权衡了算法复杂度、缩放效果和FPGA 逻辑资源等3大因素后,选....

  量子计算类似于传统计算。它依靠位(0和1)来编码信息。永利皇宫登录网址尽管受到限制,但数据仍在增长。摩尔定律已观察到....

  据外媒报道,在过去15年里,NASA的火星勘测轨道器始终在绕着这颗红色星球运转,并传回大量有关陨石坑....

  主要介绍了坐标旋转数字计算(CORDIC)算法在US,g,鉴别器中的应用,包括码跟踪环、锁频环和锁相....

  同一房型价格不同,同一路线打车却比其他人高出不少,同一家店的外卖吃得总比别人贵……近年来,平台经济快....

  算法 是一组完成任务的指令。任何代码片段都可视为算法,但本书只介绍比较有趣的部分。本书介绍的算法要么....

  本书采用大量图片,通过详细的分步讲解,以直观、易懂的方式展现了 7 个数据结构和 26 个基础算法的....

  AI培训中使用的信息是从美国平台Pitchfork和记者,音乐评论家以及YouTuber Antho....

  本文通过研究软件流水相关技术, 结合TI DSP C6000 系列DSP 的硬件特性,探讨了DSP ....

  这些患者是超过23,000名,他们在华盛顿州和乔治亚州的VA中心接受了糖尿病视网膜病变的筛查....

  回顾深度学习框架的演变,我们可以清楚地看到深度学习框架和深度学习算法之间的紧密耦合关系。这种相互依赖....

  人工智能已经越来越多应用到医疗诊断情景中,比如站长之家曾报道的谷歌AI系统可以辅助医生识别乳腺癌。最....

  1月18日,人工智能视觉算法商城——极视角宣布完成C1轮融资,此轮融资由北高峰资本与天奇创投合投,毅....

  1 月 20 日,小米智能摄像机 AI 探索版(以下简称:小米智能摄像机)在小米商城发售。新一代小米....

  清华大学战略与安全研究中心主任、人工智能国际治理研究院名誉院长傅莹和布鲁金斯学会主席约翰·艾伦(Jo....

  MOT Challenge是多目标跟踪领域最权威的国际测评平台,由慕尼黑工业大学、阿德莱德大学、苏黎....

  无刷电机属于自换流型(自我方向转换),因此控制起来更加复杂。 BLDC 电机控制要求了解电机进行整流转向的转子位置和机制...

  labview小白,看了一点书,也搜过很多,但是都没有这方面的。很多电子滤波器都是以巴特沃夫滤波器为主体滤波。但是如果不能用现成...

  本文主要为你讲解常用的电机控制算法(包含 BLDC、AC 电机),以及两者分别在磁场矢量控制电路的基本结构,控制原理。 ...

  【HarmonyOS HiSpark AI Camera试用连载 】移植自研AE算法到AI Camera第一步在配套官方SDK中跑通

  本来想一步到位直接在harmony这个系统中直接将自研的自动曝光算法移植上去,但是3516dv300作为一款没有测试过的海思平台怕有太多...

  一、概述 传统的手推车需要人工推着走到下一个目的,对于频繁变换地点来搬运货物的使用场景来说,非...

  反向传播整个流程如下: (1)进行前向传播计算,利用前向传播公式,得到隐藏层和输出层的激活值。 (2)对输出层(第l层),计...

  java单链表结构介绍 java栈结构介绍 java队列结构介绍 ...

  void Remote_Rx(uint8_t *RxMsg) { int ind = 0; //飞控接收机八通道算法 &nbs...

  1、DIY STM32四轴飞控,含电路图、PCB、固件等资料 装好的四轴全套照片: 下载地址: 2、基于ST...

网友评论

我的2016年度评论盘点
还没有评论,快来抢沙发吧!