随笔分类 - 算法
摘要:系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。 1. 数据库自增长序列或字段 最常见的方式。利用数据库,全数据库唯一。 优点: 1
阅读全文
摘要:我们地球上大部分人应该连它的名字都没有听过,而且说实话它也是个比较传统的概念了。Merkle Tree 是由计算机科学家 Ralph Merkle 在很多年前提出的,并以他本人的名字来命名。不过,Merkle Tree 确实涉及到了很多有意思的实际应用。最近几年才有的一个例子是,比特币钱包服务用 M
阅读全文
摘要:推荐系统,是当今互联网背后的无名英雄。 我们在某宝首页看见的商品,某条上读到的新闻,甚至在各种地方看见的广告,都有赖于它。 昨天,一个名为Stats&Bots的博客详解了构建推荐系统的五种方法。 量子位编译如下: 现在,许多公司都在用大数据来向用户进行相关推荐,驱动收入增长。推荐算法有很多种,数据科
阅读全文
摘要:◆ ◆ ◆ 序言 最近因为PAC平台自动化的需求,开始探坑推荐系统。这个乍一听去乐趣无穷的课题,对于算法大神们来说是这样的: 而对于刚接触这个领域的我来说,是这样的: 在深坑外围徘徊了一周后,我整理了一些推荐系统的基本概念以及一些有代表性的简单的算法,作为初探总结,也希望能抛砖引玉,给同样想入坑的伙
阅读全文
摘要:【IT168 评论】互联网给用户带来了大量的信息,满足了用户在信息时代对信息的需求,也使得用户在面对大量信息时无法从中获得对自己真正有用的那部分信息,对信息的使用效率反而降低了,而通常解决这个问题最常规的办法是推荐系统,推荐系统能有效帮助用户快速发现感兴趣和高质量的信息,提升用户体验,增加用户使用产
阅读全文
摘要:引子 每天我们晚上加班回家,可能都会用到滴滴或者共享单车。打开 app 会看到如下的界面: app 界面上会显示出自己附近一个范围内可用的出租车或者共享单车。假设地图上会显示以自己为圆心,5公里为半径,这个范围内的车。如何实现呢?最直观的想法就是去数据库里面查表,计算并查询车距离用户小于等于5公里的
阅读全文
摘要:http://www.cnblogs.com/LBSer/p/3298057.html 一、经纬度距离换算 a)在纬度相等的情况下: 经度每隔0.00001度,距离相差约1米; 每隔0.0001度,距离相差约10米; 每隔0.001度,距离相差约100米; 每隔0.01度,距离相差约1000米; 每
阅读全文
摘要:前段时间听同事分享,偶尔讲起Oracle数据库的位图索引,顿时大感兴趣。说来惭愧,在这之前对位图索引一无所知,因此趁此机会写篇博文介绍下位图索引。 1. 案例 有张表名为table的表,由三列组成,分别是姓名、性别和婚姻状况,其中性别只有男和女两项,婚姻状况由已婚、未婚、离婚这三项,该表共有100w
阅读全文
摘要:http://www.cnblogs.com/LBSer/p/3392491.html 一、问题 先思考个常见的问题:如何根据自己所在位置查询来查询附近50米的POI(point of interest,比如商家、景点等)呢(图1a)? 每个POI都有经纬度信息,我用图1b的SQL语句在mySQL中
阅读全文
摘要:http://www.cnblogs.com/LBSer/p/3403933.html 深入浅出空间索引2 第一篇讲到了传统的索引如B树不能很好的支持空间数据,比如点(POI等)、线(道路、河流等)、面(行政边界、住宅区等)。本篇将对空间索引进行简单分类,然后介绍网格索引。(深入浅出空间索引1:ht
阅读全文
摘要:http://www.cnblogs.com/LBSer/p/4417127.html 一、为什么需要点聚合 在地图上查询结果通常以标记点的形式展现,但是如果标记点较多,不仅会大大增加客户端的渲染时间,让客户端变得很卡,而且会让人产生密集恐惧症(图1)。为了解决这一问题,我们需要一种手段能在用户有限
阅读全文
摘要:http://www.cnblogs.com/LBSer/p/4471742.html 地理围栏(Geo-fencing)是LBS的一种应用,就是用一个虚拟的栅栏围出一个虚拟地理边界,当手机进入、离开某个特定地理区域,或在该区域内活动时,手机可以接收自动通知和警告。如下图所示,假设地图上有三个商场,
阅读全文
摘要:1 FIFO 按照“先进先出(First In,First Out)”的原理淘汰数据。 FIFO队列,具体实现如下: 1. 新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动; 2. 淘汰FIFO队列头部的数据; l 命中率 命中率很低,因为命中率太低,实际应用中基本上不会采用。 l 复
阅读全文
摘要:1. LFU类 1.1. LFU LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。 LFU的每个数据块都有一个引用计数,所有数据块按照引用计数排序,具有相同引用计数的数据块则按照时间排序。
阅读全文
摘要:1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下: 1. 新数据插入到链表头部; 2. 每当
阅读全文
摘要:http://www.jianshu.com/nb/2488809
阅读全文
摘要:未经各位前辈允许,擅自整理,还望谅解。感激不尽。 ↓↓↓↓一一一2016.9.23 如何计算时间复杂度 平均查找长度详解 ↓↓↓↓一一一2016.9.15 找工作知识储备(3) 从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用(该博主博客很多面试数据结构与算法方面的干货!
阅读全文
摘要:如何把一个单链表进行反转? 方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。 方法2:使用3个指针遍历单链表,逐个链接点进行反转。 方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。 方法4: 递归(相信我们都熟悉的一点是,
阅读全文