常用算法
文章平均质量分 80
NBtingwu
专注搜索、推荐相关技术、机器学习,大数据
展开
-
基本算法,求交集
一,交集运算算法 求多列数据的交集是一种应用广泛应用的算法,例如在搜索应用中,一个搜索关键词被分成了多个Term,每个Term对应一个倒排链表,那个整个搜索关键词的搜索结果就是各个Term对应倒排链表元素的交集。二,算法/*************************************************************************原创 2015-06-17 16:40:36 · 2778 阅读 · 0 评论 -
LFU算法
1,基本原理LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。具体实现如下: 1. 新加入数据插入到队列尾部(因为引用计数为1);2. 队列中的数据被访问后,引用计数增加,队列重新排序;3...原创 2018-03-30 16:08:05 · 15685 阅读 · 1 评论 -
求子数组的最大和
1,求子数组的最大和2,代码/************************************************************************* > File Name: MaxSumOfSubArray.cpp > Author:zhangtx > Mail: zhangtx@jinher.com > Cr...原创 2018-03-07 11:18:23 · 267 阅读 · 0 评论 -
最大,最小值问题,前K个数问题,利用mapreduce解决方案
1,MapReduce求最大最小值问题 要想一次求得最大最小值,必须只有一个reduce MAP类 (1)Map类中增加两个变量,max,min (2)map函数中用取得的当前行的数据和max,min做比较,更新数据。 (3)clear函数中将max,min输出,输出格式为 <max,n1> <min,n2> Reduce类 (1)直接比较list中的最...原创 2016-11-21 17:40:30 · 1015 阅读 · 0 评论 -
storm中的RotatingCache技术
一,基本的原理 偶遇storm中的rotatecache算法,特地研究一下。 核心: 1,是采用了链表来组织多个桶来存储数据; 2,插入数据时直接插入到第一个桶中,清除到其它桶中的同key值的数据; 3,删除数据移除所有桶中的数据(此处需要遍历) 4,回收数据的时候,采用了非常巧妙的方式,在链表头新加一个桶,删除尾部的桶删除掉,如果带回调,调用一下回调函数。原创 2016-04-12 14:54:23 · 1194 阅读 · 0 评论 -
LRU算法的一种实现方法
LRU算法的一种实现方法一,说明 LRU即最近未使用算法,是一种比较常用的内存管理算法,它在内存不足时通过唤出最近未使用的数据来确保新的数据可存储进去,说白了就是一种按进入内存的时候来淘汰数据和方法,所以得有一种数据结构来按顺序来存储数据,双向链表是一种很好的选择。二,源码 源码中采用stl::list双向链表来存储数据,unordered_map来存储key到数据的映射关系。 get...原创 2015-07-02 14:59:37 · 538 阅读 · 0 评论 -
一种一致性HASH算法的实现方法,附核心代码
一致性HASH算法 一致性HASH算法的原理,还有不带虚拟结点的一致性HASH算法就不说了,直接谈一下带虚拟结点的一致性HASH算法,主要从实现的角度谈一下。整个过程包括初始化环形数组,添加结点,删除结点,查找结点等等。先看存储结构:class ConsistentHash{ enum STATUS{ EMPTY=0,原创 2015-06-30 18:07:03 · 905 阅读 · 0 评论 -
基本算法-MD5
一,描述 MD5报文摘要生成算法在数据安全和通信领域有着广泛的应用,最早应用于信息传输过程中防止数据被中间修改,一直到现在的存储领域做为文件的指纹来实现一些更加复杂的功能,比如视频网站,新视频上传的时候会生成一个视频对应的MD5指纹,后继再有同样的视频上传的时候通过md5指纹就可以判断当前上传的视频是否已经被上传过,通过这种办法即可实现秒传视频。二,库 linux的原创 2015-06-27 14:20:09 · 746 阅读 · 0 评论 -
常见查找算法之—二分查找
一,二分查找 二分查找也称拆半查找,算法做为时间复杂度为o(nlog(n)的算法,也属于在项目中经常会被用到的算法之一 基本步骤: 1,待查找元素与有序表中间元素比较。 2,比中间元素大,修改左边界为中间位置加1,执行第1步。 3,比中间元素小,修改右边界为中间位置减1,执行第1步。二,源代码 下面是基于C++实际的源码。 /********原创 2015-06-04 10:31:09 · 471 阅读 · 0 评论 -
常用算法之-快速排序
一,快速排序 快速排序做为o(nlogn)的内存排序算法,在日常工作和工作面试过程中出镜率也是相当的高。 最差的情况是快速排序的时间复杂度会下降到冒泡的级别,即 o(n*n) 有一些方法来规避这个问题,比如选择随机的枢纽记录。 下出给出了一个,固定枢纽记录的方法。二,C++代码/******************************原创 2015-06-05 10:37:42 · 570 阅读 · 0 评论 -
大数组,找某数字的左,右边界
一,基本问题给一个有序大数组,求某个数字最左出现的位置,或最右出现的位置。基本思想是利用二分查找算法,先利用二分查找算法找到首次出现的位置,如果找最左位置则,记录上次搜索到的位置,循环搜索从左边界到上次出现的位置左边一个位置中的给定数据,直到找不到为止,输出记录的上次位置如果找最右位置则,记录上次搜索到的位置,循环搜索从右边界到上次出现的位置右边一个位置中的给定数据,直到找不到为止,输出记录的上次...原创 2018-04-13 16:05:13 · 569 阅读 · 0 评论