Data Structure
白 杨
这个作者很懒,什么都没留下…
展开
-
RadixTree(基数树)
1. 基数树概述对于长整型数据的映射,如何解决Hash冲突和Hash表大小的设计是一个很头疼的问题。radix树就是针对这种稀疏的长整型数据查找,能快速且节省空间地完成映射。借助于Radix树,我们可以实现对于长整型数据类型的路由。利用radix树可以根据一个长整型(比如一个长ID)快速查找到其对应的对象指针。这比用hash映射来的简单,也更节省空间,使用hash映射hash函数难以设计,不恰原创 2015-11-06 07:40:30 · 4514 阅读 · 0 评论 -
不同平面直角坐标系之间的坐标转换公式
1.单纯移轴. 设Oxy,O'x'y'是两个直角坐标系,坐标轴有相同的方向,O'在Oxy中的坐标为(x0,y0).我们用(x,y),(x',y')分别代表点M在坐标系Oxy,O'x'y'中的坐标.在移轴下,坐标转换公式是 x=x'+x0, y=y'+y0.2.单纯转轴. 设新旧坐标系有相同的坐标原点O,由Ox到Ox'的角度为t,坐标转换公式是 x=x'cost-y'原创 2012-11-28 15:19:38 · 43673 阅读 · 1 评论 -
高效细粒度更新的RDD:Spark IndexedRDD
1. 概述由于Spark RDD的Immutable特性,如果想要更新RDD里面的数据,就要对RDD中的每个Partition进行一次transformation,生成一个新的RDD。而对于Streaming Aggregation(聚合)以及Incremental(增量) Algorithm之类的算法,每次迭代都会更新少量数据,但是需要迭代非常多的次数,每一次对RDD的更新代价相对较大。针对这个问原创 2015-11-08 15:18:05 · 4549 阅读 · 7 评论 -
Bloom Filter 原理及 Google BloomFilter
1. Bloom Filter简介布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集合中,但是布隆过滤器只需要哈希表的1/8或1/4的空间复杂度就能完成原创 2016-05-25 08:24:47 · 3755 阅读 · 0 评论 -
Graphx 最短路径源码解析
最短路径测试代码下面主要是对Spark图计算框架GraphX中的单源点最短路径的源码进行解析。 GraphX最短路径求解中使用了Pregel模型,这是一个非常高效的图计算模型。但目前最短路径有如下限制:1. 只能用于无向图;2. 只能用于非带权图(权值相等);3. 利用的算法是迪杰斯特拉求解最短路径。原创 2015-11-24 08:32:49 · 5447 阅读 · 7 评论 -
Raft一致性协议
0. 写在前面分布式存储系统通过维护多个副本来进行fault-tolerance,提高系统的availability。 带来的代价就是分布式存储系统的核心问题之一:维护多个副本的一致性。一致性协议就是用来干这事的,即使在部分副本宕机的情况下。Raft是一种较容易理解的一致性协议。 一致性协议通常基于replicated state machines,即所有结点都从同一个state出发,都经原创 2016-07-08 11:27:19 · 1255 阅读 · 1 评论