----高级数据结构
文章平均质量分 80
judyge
学习好 能力强。
展开
-
并查集 模板
知识点:并查集是一种树型的数据结构,用于处理一些不相交集合的合并问题。并查集的主要操作有1-合并两个不相交集合2-判断两个元素是否属于同一个集合3-路径压缩 我转载的一个并查集介绍:(很详细)http://blog.csdn.net/xiaotaoqibao/archive/2009/08/14/4447995.aspx转载 2015-04-16 08:46:26 · 328 阅读 · 0 评论 -
stl string常用函数
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常string类的字转载 2015-04-17 15:47:16 · 421 阅读 · 0 评论 -
C++/STL Bitset (转)
最近用的bitset比较多,位运算在存储状态、模拟行动、搜索很多方面有着非常巨大的优势,所以特意转了一篇bitset的基本用法。==========================================================构造函数bitset b; b有n位,每位都为0.参数n可以为一个表达式.如bitset b0;则"b0"为"00000";转载 2015-04-17 15:54:56 · 351 阅读 · 0 评论 -
哈希表的C++实现
哈希表的几个概念:映像:由哈希函数得到的哈希表是一个映像。冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突。处理冲突的几个方法:1、开放地址法:用开放地址处理冲突就是当冲突发生时,形成一个地址序列,沿着这个序列逐个深测,直到找到一个“空”的开放地址,将发生冲突的关键字值存放到该地址中去。例如:hash(i)=(hash(key)+d(i)) MOD m转载 2015-04-17 15:41:43 · 503 阅读 · 0 评论 -
C++ STL泛型编程——在ACM中的运用
学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生。两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想。这次想简单说一下STL在ACM中的一些应用。我们知道,在ACM竞赛中,经常需要用到数组、字符串、队列、堆栈、链表等数据结构和排序、搜索等算法,以提高程序的时间、空间运行效率。然而如果这些数据结构总是需要手工来编写,那无疑会是一件很麻烦的工作转载 2015-04-17 15:50:10 · 552 阅读 · 0 评论 -
C++ STL基本容器的使用
C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set。map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multise转载 2015-04-17 15:52:51 · 436 阅读 · 0 评论 -
数据结构之查找二叉树
前不久去腾讯笔试,居然几道数据结构方面的题目,让我情何以堪啊,都做不动,忘完了,趁着这里想找实习的地方,肯定还要笔试,所以复习一下。注意:函数指针传递的用法1.二叉树重要性质:性质1:在二叉树的第i层上至多有2^(i-1)个节点(i >= 1)性质2:深度为k的二叉树至多有2^(k-1)个节点(k >=1)性质3:对于任意一棵二叉树T而言,其叶子节点转载 2015-05-02 18:32:12 · 836 阅读 · 0 评论 -
C++二叉树的建立与遍历
//==========================================定义头部 #include using namespace std; struct BiTNode{ char data; struct BiTNode *lchild, *rchild;//左右孩子 }; BiTNode*T; void CreateBiTree(BiTN转载 2015-05-02 18:16:53 · 578 阅读 · 0 评论 -
数据结构之哈夫曼树
数据结构之哈夫曼树1.哈夫曼树简介(1) WPL = 7*2+5*2+2*2+4*2 = 36; (1) WPL = 7*1+5*2+2*3+4*3 = 35;经过证明此为最小的WPL即为哈夫曼树在解决某些问题时,利用哈夫曼树可以找到最佳判定算法,因为某些条件出现的频率不一样,这样导致了同一段代码在不同的环境下取得的效转载 2015-05-02 18:29:15 · 766 阅读 · 0 评论 -
LeetCode Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence.For example,Given [100, 4, 200, 1, 3, 2],The longest consecutive elements sequence is [1, 2, 3转载 2015-05-09 09:18:28 · 368 阅读 · 0 评论 -
POJ 1028 用栈模拟浏览器的前进与后退
poj 1028Web NavigationTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 17718 Accepted: 7751DescriptionStandard web browsers contain features to mov转载 2015-05-09 08:23:22 · 489 阅读 · 0 评论 -
LeetCode - Longest Substring Without Repeating Characters hash
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. Fo转载 2015-05-09 09:18:45 · 412 阅读 · 0 评论 -
hash 建表 query 统计重复个数
WLS的数列难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B试题描述WLS喜欢数学,有一天,老师给了他一个长度为N的数列A,问他有多少不同的数。WLS觉得数列太长了,你能不帮他吗?输入第一行为一个正整数N,表示数列的长度。第二行为N个正整数表示这个原创 2015-05-03 19:07:00 · 621 阅读 · 0 评论 -
第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’。方法1:看到这个题目,最直观的想法就是就是遍历法,也就是从头开始取字符串中的一个字符,将其与其后的所有字符比较,如果有相同的字符,那么就证明它不是只出现一次的字符。当第一次出现遍历完其后字符并且没有重复时,表明这个字符就是“第一个只出现一次的字符”。如果字符串有n个字符,每个字符可能与后面的O(n)转载 2015-05-03 21:37:08 · 497 阅读 · 0 评论 -
数据结构算法集---C++语言实现
/////////////////////////// // // // 堆栈数据结构 stack.h // // // /////////////////////////// #include templateclass Stack; template class StackNode { friend class Stack转载 2015-04-16 09:08:51 · 435 阅读 · 0 评论 -
C++标准库:使用std_list作为链表
C++标准库std::list容器算法链表摘要:本文是“C++标准库导引系列”的一部分。std::list可能在许多时候被人们忘记,我自己就似乎忘记了这容器,当我在写这个系列的文章的时候,我意识到原来std::list有时是更好的选择。std::list提供一个链表的实现,它是基于结点的容器,同时它也提供了许多标准算法的特殊版本,因为此时有更好的方法。我们已经写了这个系列的好几原创 2015-04-16 09:04:04 · 1642 阅读 · 0 评论 -
并查集
#include using namespace std;int parent[100];//构造一个初始并查集,s是集合元素的个数,此时初始化了s个集合,每一个集合都只有一个元素//数组的范围为parent[0]~parent[s-1]//初始的时候,数组元素的值都是 -1,表示此时都是根结点。void ufset(int s){ int si=s; for(i转载 2015-04-16 11:04:54 · 407 阅读 · 0 评论 -
POJ-1840 Eqs Hash
题目大意:有以下等式:a1*x13+a2*x23+a3*x33+a4*x43+a5*x53=0.x1,x2,x3,x4,x5都就在区间[-50,50]之间的整数,且x1,x2,x3,x4,x5都不等于0.问:给定a1,a2,a3,a4,a5的情况下,x1,x2,x3,x4,x5共有多少种可能的取值?解题思路:这道题想了很久,以为是简单的暴力枚举呢。。。。然后怎么想都觉得要超原创 2015-04-15 17:42:48 · 485 阅读 · 0 评论 -
树状数组 模板
int lowbit(int t){ return t&(-t);}void change(int pos , int num,int n) //修改{ while (pos<=n) { tree[pos] += num; pos += lowbit(pos); }}int ask(int end)//查询{转载 2015-04-16 08:38:11 · 350 阅读 · 0 评论 -
线段树入门
最近在看些线段树的东西,虽然不是搞ACM的,但了解这些东西还是有好处的。这里是Quora上的一个讨论,谈了对程序员可能一辈子都写不到的数据结构或算法的体会,If advanced algorithms and data structures are never used in industry, then why learn them?在网上看了很多教程和文章,感觉有帮助但很多都写得不易懂转载 2015-04-16 13:36:48 · 525 阅读 · 0 评论 -
HASH 大量插入与查询
描述在某一国度里流行着一种游戏。游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY”,表示说出M(0<M<=100)个随机整数ki(0<=ki<=100000100),分别判断编号为ki 的球是否在这个空箱子中(存在为"YES",否原创 2015-04-15 17:48:08 · 383 阅读 · 0 评论 -
后缀数组 模板
//【倍增法模板】:int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a+l]==r[b+l];}void da(int *r,int *sa,int n,int m){ int i,j,p,*x=wa,*y=wb,*t; for(i=0;i<m转载 2015-04-16 08:41:59 · 304 阅读 · 0 评论 -
并查集入门
并查集并查集是一种树型的高级数据结构,主要用于处理不想交集合的合并及查询问题。它在计算机科学中有着广泛的应用。例如求解最小生成树(克鲁斯卡尔算法)、亲戚关系的判定、确定无向图的连通子图个数、最小公共祖先问题等,都要用到并查集。集合集合是数学中最基本的构造之一,将一组满足某种性质的对象放在一起就形成了集合。集合中包含的对象称为集合中的元素,集合中的元素是无序而且唯一的。常用大写英文字母A转载 2015-04-15 12:14:00 · 465 阅读 · 0 评论 -
四则运算表达式求值(栈的应用)
1.前/中/后缀表达式的转换(首先需要明白三者之间的转换) 自然表达式转换为前/中/后缀表达式,其实是很简单的。首先将自然表达式按照优先级顺序,构造出与表达式相对应的二叉树,然后对二叉树进行前/中/后缀遍历,即得到前/中/后缀表达式。 举例说明将自然表达式转换成二叉树: a×(b+c)-d ① 根据表达式的优先级顺序,首先计算(b+c),形成二转载 2015-04-16 08:53:45 · 624 阅读 · 0 评论 -
哈希表类模板的设计与实现
template struct HashTableNode{ T varValue; N varName; HashTableNode *next; N Scope; N alias; //will hold the full name of whatever it is pointing to.}; template class hashtable{ private原创 2015-04-16 08:55:38 · 576 阅读 · 0 评论 -
字典树 模板
/*******************************************************************************【字典树】此模板主要是针对都是小写字母的。其他情况在此基础上改一改就可以了,要懂得灵活运用。 *******************************************************************转载 2015-04-16 08:42:42 · 392 阅读 · 0 评论 -
并查集
并查集:(union-find sets)是一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,其中最完美的应用是实现Kruskar算法求最小生成树。其实,这一部分《算法导论》讲的很精炼(第21章:用于不相交的集合)。并查集是一种可以方便地进行以下三种操作的数据结构:合并两个集合;将一元素并入另一集体;判断两个元素是否属于同一个集合。转载 2015-04-16 11:35:33 · 401 阅读 · 0 评论 -
最长公共子序列 线段树版的LCS
#include#include#include#include#define N 200008#define Musing namespace std;int hash1[N], hash2[N], x[N], y[N], dp[N], next1[N], next2[N];vector v[N];struct LTree{ int a, b, big;}T转载 2015-04-16 08:37:31 · 447 阅读 · 0 评论 -
2:找众数
总时间限制: 10000ms 内存限制: 4096kB描述一天,THU boy 小胖涛给一道题给zzh做:给你一个n个数的数列,其中某个数出现了超过n div 2次即众数,请你找出那个数。zzh:这不是很简单吗……等等,好像有什么不对。卧槽,我好像不会做啊!你能帮助zzh吗?输入第一行:一个正整数 n第二行:n个小于等于2^{31}-原创 2015-05-05 17:08:56 · 861 阅读 · 0 评论