
结构之法
文章平均质量分 71
独孤_子喻
艰难困苦如同欢乐,终将成为人生最后的财富。
展开
-
最小生成树(MST)——Prim算法
一个无向图的最小生成树由该无向图的那些连接相互连接的顶点的边构成的树,且使得该树的所有边的总权值和最小。最小生成树问题在实际生活中也广泛存在,例如:要在一个村庄修建一条公路,连通到村里的每户人家,选择怎么的路线铺设道路使得总的距离最短(造价最低)。 最小生成树算法之一:Prim算法,将整个顶点集合分为两个子集U、V,U中存放已经在生成树中的顶点,V中存放未在生成树中的顶点。算法核心的每一步将从U、V中各选一顶点,使得边的权值w(u,v)最小,然后将该顶点v从V中移到U中,如此直到集合V为空,即完成。该过程原创 2015-03-24 23:11:53 · 1844 阅读 · 0 评论 -
平衡二叉树(AVLTree)
平衡二叉树(AVLTree)是指带平衡条件的二叉查找树。AVLTree要求每个节点的左子树和右子树的高度之差最多为1。当因为插入或删除操作导致AVLTree不满足该平衡条件时就需要进行调整操作,包括单旋转和双旋转操作。也正是因为需要时刻保持树的平衡条件,从而使得AVLTree的插入和删除操作较为复杂。原创 2015-03-20 10:26:59 · 867 阅读 · 0 评论 -
HashMap实现原理
文章来源于Alpha's学习笔记:http://blog.youkuaiyun.com/vking_wang/article/details/14166593 HashMap 目录(?)[-] HashMap的数据结构 数组链表哈希表 HashMap的存取实现 putgetnull key的存取确定数组indexhashcode tablelength取模table转载 2014-09-17 09:39:00 · 459 阅读 · 0 评论 -
Hash和Bloom Filter
Hash(函数/表) Hash (中译为哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广。其作用是将一个大的数据集映射到一个小的数据集上面(这些小的数据集叫做哈希值,或者散列值)。Hash table(散列表,也叫哈希表),是根据哈希值(Key value)而直接进行访问的数据结构。也就是说,它通过把哈希值映射到表中一个位置来访问记录,以加快查找的速度。下面是一个典转载 2014-09-23 16:57:13 · 692 阅读 · 0 评论 -
红黑树—Red Black Tree
红黑树是具有以下五条性质的二叉查找树: 1、每个结点要么是红的要么是黑的。 2、根结点是黑的。 3、每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。 4、如果一个结点是红的,那么它的两个儿子都是黑的。 5、 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。 正是由于红黑树的以上五个性质,使得其高度最多是2log(N+1),从而保证红黑树的查找、插入、删除的时间复杂度最坏为O(log n)。 在插入、删除过程中最关键的就是时刻保证RBT的五个性质原创 2015-03-28 21:47:10 · 1151 阅读 · 0 评论 -
二叉堆(Binary_Heap)
二叉堆满足其结构性,和堆序性。结构性:要求为完全二叉树,即除树的最底层外,树被完全填满,且底层的元素从左向右填充。堆序性:即在堆中要求,对任意元素X,X的父节点的关键字小等于X的关键字,如此得到最小堆。同理可得最大堆。 由于堆序性,因此二叉堆也常称为实现优先队列(Priority Queue)。 在对二叉堆进行操作时需要始终保持其结构性和堆序性。可用数组来实现二叉堆。数组中的元素关系为:i位置上的节点,其左儿子在2i上,右节点在2i+1上,父节点在i/2(取整)上。用数组代替树结构,从而不用包含指针操作原创 2015-03-23 10:44:15 · 950 阅读 · 0 评论 -
最小生成树(MST)——Kruskal算法
最小生成树Kruskal算法是在处理一个森林——树的集合。开始时将图的每个顶点看做一棵树(集合),然后采用贪婪策略,每次从所有边中依次选出(Find)权值最小的边,当改边的两个端点不在同一集合时,则将终点所在集合与起点集合合并(Union),直到依次处理完所有的边,算法终止,此时所有的顶点在一个树中,即为最小生成树。原创 2015-03-25 10:23:39 · 902 阅读 · 0 评论 -
逆序输出链表节点
注意:递归的本质是栈#include <list> #include <stack> #include <iostream>using namespace std;//递归实现逆序输出链表节点 void PringListReversingly( list<int> &L, list<int>::iterator &it) { if(it!=L.end()) { list<int>原创 2015-04-05 00:28:27 · 486 阅读 · 0 评论