
数据结构
文章平均质量分 82
iloveyin
这个作者很懒,什么都没留下…
展开
-
二叉排序树
1.定义 二叉排序树(Binary Search Tree)又称二叉搜索(查找)树,其定义如下: (1)若它的左子树非空,则左子树上所有结点的权值都比根结点的权值小; (2)若它的右子数非空,则右子树上所有结点的权值都比根结点的权值大; (3)左、右子树本身又是一棵二叉排序树。以上既是二叉排序树的定义,同时也是它的性质。从定义可以看原创 2012-04-05 23:48:15 · 1126 阅读 · 0 评论 -
海量数据处理常见方法
所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小:分而治之/hash映射,你不转载 2012-09-05 23:17:49 · 1317 阅读 · 0 评论 -
linux mysql proxy 的安装,配置,以及读写分离
一,mysql proxy是什么,干什么用的MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样pr转载 2012-05-29 14:50:27 · 776 阅读 · 0 评论 -
最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设转载 2012-05-05 20:44:15 · 1405 阅读 · 0 评论 -
Trie树|字典树的简介及实现
Trie,又称字典树、单词查找树,是一种树形结构,用于保存大量的字符串。它的优点是:利用字符串的公共前缀来节约存储空间。相对来说,Trie树是一种比较简单的数据结构.理解起来比较简单,正所谓简单的东西也得付出代价.故Trie树也有它的缺点,Trie树的内存消耗非常大.当然,或许用左儿子右兄弟的方法建树的话,可能会好点.其基本性质可以归纳为:1. 根节点不包含字符,除根节点外每一个节转载 2012-05-04 21:20:38 · 692 阅读 · 0 评论 -
数据结构:TRIE树
Trie树就是字符树,其核心思想就是空间换时间。举个简单的例子。给你100000个长度不超过10的单词。对于每一个单词,我们要判断他出没出现过,如果出现了,第一次出现第几个位置。这题当然可以用hash来,但是我要介绍的是trie树。在某些方面它的用途更大。比如说对于某一个单词,我要询问它的前缀是否出现过。这样hash就不好搞了,而用trie还是很简单。现在回到例子中转载 2012-05-04 21:32:31 · 819 阅读 · 0 评论 -
Hash和Bloom Filter
这几天的“科研”中涉及到了一个概念,Bloom Filter(有的中文翻译为布隆过滤器,不知道正确否),今天看了下相关的资料,发现这东西和Hash还挺有关系的,在这里一并讲下。Hash(函数/表)Hash (中译为哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。Ha转载 2012-05-04 21:12:16 · 796 阅读 · 0 评论 -
布隆过滤器 bloom filter
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。基本概念如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路转载 2012-05-04 21:04:01 · 2096 阅读 · 0 评论 -
B树、B-树、B+树、B*树
B树即二叉搜索树:1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如:B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿转载 2012-04-09 19:49:42 · 602 阅读 · 0 评论 -
Prim算法
前几天研究Kruskal算法,直接上手就是并查集优化,朴素算法压根就没写。这两天看Prim算法也想略过朴素版O(n^2)直接用二叉堆优化,可是发现不看朴素算法根本写不出来...囧,看来还是不能忽略基础...草稿纸上画图模拟推演了半天,终于搞清楚Prim算法朴素版的C语言实现,拿出那天学Kruskal的小题目测试了一下,通过。代码的注释我写得很详细,方便理解,有几点需要说明一下。转载 2012-04-06 21:51:12 · 690 阅读 · 0 评论 -
堆排序
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>原创 2012-04-05 23:39:11 · 825 阅读 · 0 评论 -
kruskal算法
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧下午抱着《算法导论》跑去图书馆看Kruskal算法,发现《算法导论》真的是牛XXXX的书啊,看完之后豁然开朗,而且惊讶地发现Kruskal算法居然用到了前两天研究的并查集,爽歪歪了...Kruskal比较适用于稀疏图,是一种贪心算法:为使生成树上边的权值转载 2012-04-06 23:03:52 · 719 阅读 · 0 评论 -
并查集(不相交集合)
不相交集合有两种不同的实现,链表表示和带路径压缩的按秩合并策略。看到大家都比较喜欢用带路径压缩的按秩合并策略,那么我只认真研究了一下带路径压缩的按秩合并策略,暂时不对链表表示作讨论。 顾名思义,并查集的作用不就的“并”和“查”嘛。并查集的功能描述为:合并两个集合;将一元素并入另一集体;判断两个元素是否属于同一个集合。 通过引用两种启发式策略(按秩合并和路径压缩)就可以达到渐进意原创 2012-04-06 21:44:43 · 834 阅读 · 0 评论 -
各种排序算法的稳定性和时间复杂度小结
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复原创 2012-03-30 22:23:24 · 1425 阅读 · 0 评论