
数据结构
MyObject-C
从事于游戏、广告、推荐、金融交易相关后台开发
展开
-
B树
从B 树、B+ 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。 说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。 出处:http://blog.youkuaiyun.com/v_JULY_v 。 第一节、B树、B+树、B*转载 2017-11-18 17:26:22 · 273 阅读 · 0 评论 -
bitmap
业务需求对技术的要求是永无止境的。我们需要更好的工具: 更快速的分析,一次任务就需要个把小时,甚至需要一天,数据的产出,无法支持我们业务的快速调整。更灵活的分析工具,应该比Oracle或者IBM的BI系统更好,我们需要有多维交叉的计算能力,而不只是简单的几种统计数字。更轻量级的系统,动辄几十台服务器组成的Hadoop集群,我们真是无法负担啊,成本太高昂了。 二、现有技术分析 a) 硬币的转载 2017-11-21 21:25:50 · 578 阅读 · 0 评论 -
基数
前几天看了bloom filter,最近又不小心看了有文章提到hyperloglog,于是做了一点search http://blog.youkuaiyun.com/heiyeshuwu/article/details/41248379 高压缩空间占用的 Hyper LogLog 算法 http://blog.codinglabs.org/articles/algo转载 2017-11-18 17:45:15 · 5185 阅读 · 0 评论 -
HyperLogLog Counting
在前一篇文章中,我们了解了LogLog Counting。LLC算法的空间复杂度为O(log2(log2(Nmax)))O(log2(log2(Nmax))),并且具有较高的精度,因此非常适合用于大数据场景的基数估计。不过LLC也有自己的问题,就是当基数不太大时,估计值的误差会比较大。这主要是因为当基数不太大时,可能存在一些空桶,这些空桶的ρmaxρmax为0。由于LLC的估计值依赖于各桶ρmax转载 2017-11-18 17:49:11 · 394 阅读 · 0 评论 -
LogLog Counting
上一篇文章介绍的Linear Counting算法相较于直接映射bitmap的方法能大大节省内存(大约只需后者1/10的内存),但毕竟只是一个常系数级的降低,空间复杂度仍然为O(Nmax)O(Nmax)。而本文要介绍的LogLog Counting却只有O(log2(log2(Nmax)))O(log2(log2(Nmax)))。例如,假设基数的上限为1亿,原始bitmap方法需要12.5M内转载 2017-11-18 17:47:41 · 966 阅读 · 0 评论 -
Linear Counting算法
在上一篇文章中,我们知道传统的精确基数计数算法在数据量大时会存在一定瓶颈,瓶颈主要来自于数据结构合并和内存使用两个方面。因此出现了很多基数估计的概率算法,这些算法虽然计算出的结果不是精确的,但误差可控,重要的是这些算法所使用的数据结构易于合并,同时比传统方法大大节省内存。 在这一篇文章中,我们讨论Linear Counting算法。 简介 Linear Counting(以下简称转载 2017-11-18 17:47:01 · 1150 阅读 · 0 评论 -
排序算法
插入排序 void insertSort(int *arr,int n) { assert(arr != NULL && n > 0); for(int i = 1;i < n;i++) { int k = arr[i]; for(int j = i-1;j >= 0;j--) { if(arr[j] > k) { arr[j+1] = arr[j];原创 2014-03-21 19:42:34 · 356 阅读 · 0 评论 -
排序算法
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,转载 2014-12-12 15:07:17 · 260 阅读 · 0 评论 -
跳跃表
SkipList在leveldb以及lucence中都广为使用,是比较高效的数据结构。由于它的代码以及原理实现的简单性,更为人们所接受。我们首先看看SkipList的定义,为什么叫跳跃表? “ Skip lists are data structures that use probabilistic balancing rather than strictly enfor转载 2017-11-14 17:45:43 · 553 阅读 · 0 评论 -
哈希表
我们知道,通过对数组进行直接寻址(Direct Addressing),可以在 O(1) 时间内访问数组中的任意元素。所以,如果存储空间允许,可以提供一个数组,为每个可能的关键字保留一个位置,就可以应用直接寻址技术。 哈希表(Hash Table)是普通数组概念的推广。当实际存储的的关键字数比可能的关键字总数较小时,这时采用哈希表就会比使用直接数组寻址更为有效。因为哈希表通常采用的数组尺寸与转载 2017-11-15 10:45:02 · 269 阅读 · 0 评论 -
查找算法
阅读目录1. 顺序查找2. 二分查找3. 插值查找4. 斐波那契查找5. 树表查找6. 分块查找7. 哈希查找 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。...转载 2018-06-01 11:30:53 · 309 阅读 · 0 评论