代码改变世界

随笔分类 -  算法---树和图

2-3-4树

2014-06-24 20:03 by youxin, 711 阅读, 收藏, 编辑
摘要: 2-3-4 树在计算机科学中是阶为 4 的B树。大体上同B树一样,2-3-4 树是可以用做字典的一种自平衡数据结构。它可以在O(logn)时间内查找、插入和删除,这里的n是树中元素的数目。2-3-4 树在多数编程语言中实现起来相对困难,因为在树上的操作涉及大量的特殊情况。红黑树实现起来更简单一些,所... 阅读全文

2-3 tree使用

2014-06-24 15:37 by youxin, 1977 阅读, 收藏, 编辑
摘要: The2-3 treeis also a search tree like thebinary search tree, but this tree tries to solve the problem of theunbalanced tree.Imagine that you have a bi... 阅读全文

二叉树相关问题合集

2014-06-22 23:02 by youxin, 513 阅读, 收藏, 编辑
摘要: 1.如何判断一个二叉树是否是平衡的?平衡二叉树,又称AVL树(发明者名字命名,http://en.wikipedia.org/wiki/AVL_tree)。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1。问题:判断一个二... 阅读全文

线段树入门

2013-10-19 23:07 by youxin, 628 阅读, 收藏, 编辑
摘要: 线段树(Segment Tree)(也叫区间树)是一种二叉搜索树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左子树表示的区间为[a,(a+b)/2],右子树表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树。叶节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,因此有时需要离散化让空间压缩。另外还有如zkw线段树的特种线段树。定义1:长度为1的线段称为元线段。定义2:一棵树被称为线段树,当且仅当这棵树满足如下条 阅读全文

十度好友问题(DFS经典应用)

2013-10-05 14:27 by youxin, 398 阅读, 收藏, 编辑
摘要: 问题:在社交网络里(比如 LinkedIn),如果A和B是好友,B和C是好友,但是A和C不是好友,那么C是A的二度好友,给定一个社交网络的关系图,如何找到某一个人的所有十度好友。 阅读全文

二分图简介

2013-10-05 04:51 by youxin, 4608 阅读, 收藏, 编辑
摘要: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集。无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配。选择这样的边数最大的子集称为图的最大匹配问题(maximal 阅读全文

转:trie树--详解

2013-09-04 22:04 by youxin, 493 阅读, 收藏, 编辑
摘要: 前几天学习了并查集和trie树,这里总结一下trie。 本文讨论一棵最简单的trie树,基于英文26个字母组成的字符串,讨论插入字符串、判断前缀是否存在、查找字符串等基本操作;至于trie树的删除单个节点实在是少见,故在此不做详解。Trie原理Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie性质好多人说trie的根节点不包含任何字符信息,我所习惯的trie根节点却是包含信息的,而且认为这样也方便,下面说一下它的性质 (基于本文所讨论的简单trie树)1.字符的种数决定每个节点的出度,即branch数组(空间换时间思想)2.branch数组的 阅读全文

Trie三兄弟——标准Trie、压缩Trie、后缀Trie

2013-09-04 17:13 by youxin, 1690 阅读, 收藏, 编辑
摘要: 1.Trie导引Trie树是一种基于树的数据结构,又称单词查找树、前缀树,字典树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。用于存储字符串以便支持快速模式匹配,主要应用在信息检索中,Trie支持的主要查询操作是模式匹配和前缀匹配。Trie树可以看着是一个确定有限状态自动机,有限状态自动机另一篇博文字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法一网打尽有介绍。在计算机科学中,trie,又称前缀树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一 阅读全文

编程之美-分层遍历二叉树

2013-08-30 17:45 by youxin, 447 阅读, 收藏, 编辑
摘要: 问题1:给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号,那么分层变量如图的二叉树:输出应为:输出:12 34 5 67 8问题2:写另外一个函数,打印二叉树中某层次的节点(从左到右),其中根节点为第0层,函数原型为int printNodeAtLevel(Node* root,int level),成功返回0,失败返回0.仔细看2个问题,我们发现解决了第二个问题,第一个问题也迎刃而解,要想打印第k层,我们只需要打印k-1层的孩子即可。依此递减。typedef struct Node{ Node*... 阅读全文

编程之美-分层遍历二叉树

2013-08-29 03:44 by youxin, 1746 阅读, 收藏, 编辑
摘要: 问题1:给定一颗二叉树,要求按分层遍历该二叉树,即从上到下按层访问该二叉树(每一层将单独输出一行),每一层要求访问的顺序为从左到右,并将节点依次编号,那么分层变量如图的二叉树:输出应为: 输出: 1 2 3 4 5 6 7 8问题2:写另外一个函数,打印二叉树中某层次的节点(从左到右),其中根节点为 阅读全文

编程之美--重建二叉树

2013-08-29 01:17 by youxin, 2893 阅读, 收藏, 编辑
摘要: 给定一个前序和中序变量的结果,写一个算法重建这棵树:如:前序: a b d c e f中序: d b a e c f前序遍历的每一个节点,都是当前子树的根节点,同时,以对应的节点为边界,就会把前序遍历的结果分为左子树和右子树。a是前序中第一个节点,以a为中界,把中序的结果分成:左:db右:ecf对于db,由于在前序中b在d前面,所以,b是d的父亲。对于ecf,前序中c在前面,c为父亲,c把e和f分开。代码:#include#include#includeusing namespace std;typedef struct Node{ Node* left; Node* right;... 阅读全文

有向图的强连通分量求法

2013-08-27 16:01 by youxin, 355 阅读, 收藏, 编辑
摘要: http://bbs.sjtu.edu.cn/bbscon,board,Algorithm,file,M.1195274349.A.html 阅读全文

图的DFS递归和非递归

2013-08-27 03:44 by youxin, 3752 阅读, 收藏, 编辑
摘要: 看以前写的文章: 图的BFS:http://www.cnblogs.com/youxin/p/3284016.html DFS:http://www.cnblogs.com/youxin/archive/2012/07/28/2613362.html 递归: 参考了算法导论 int parent[5 阅读全文

图的BFS代码

2013-08-27 00:19 by youxin, 1146 阅读, 收藏, 编辑
摘要: 图是严蔚敏书上P168的图, 图的邻接表存储,DFS可以看以前写的文章:http://www.cnblogs.com/youxin/archive/2012/07/28/2613362.html bool visited[100]; void (*visitFunc)(VextexType v); 阅读全文

图的邻接矩阵和邻接链表表示

2012-07-28 18:37 by youxin, 8014 阅读, 收藏, 编辑
摘要: 图的邻接矩阵表示: 下面的这个程序读入一组定义一个无向图的便,创建一个对应这个图的邻接矩阵。如果在图中顶点i,j或j,i之间有一条边,就把a[i][j]和a[j][i]置为1,如果不存在这样的边,则置0。#includeusing namespace std;int main(){ int N; int i,j; cin>>N; int **adj=new int*[N]; for( i=0;i>i>>j) { adj[i][j]=1; adj[j][i]=1; }}另一种图的直观表示方法是链表数组,也叫邻接表(adjace... 阅读全文

二叉树四种遍历方式总结及解剖及求深度节点数及宽度

2012-06-07 22:43 by youxin, 1135 阅读, 收藏, 编辑
摘要: 花了些时间总结了二叉树四种经典遍历方式。特别是层次遍历,值得思考。 #include<stdio.h> #include<malloc.h> typedef char ElemType; typedef struct BiNode { ElemType data; struct BiNode *lc 阅读全文
点击右上角即可分享
微信分享提示