数据结构
gentledongyanchao
For one reason or another, each of us has been given a gift, let's put'em to some good use.
Sometimes, the world's greatest miracle happens by accident.
展开
-
pat 1090,树的遍历,层序,先根遍历,利用缓存来优化,“以土地换和平”
树是一种常见的数据结构,二叉树是它的特殊形态,有关树的知识参考《数据结构》的课本。本文以pat1090为例,给出树的双亲表示法,孩子表示法,给出树的层序遍历,给出树的先根遍历。并对pat1090部分case的超时给出分析,和相应的解决措施。树的层序遍历,核心部分代码是BFS的,那么树的先根遍历,核心部分代码就是DFS的,此处的DFS并不需要写递归。而是采用一种比较简单的做法,将BFS中的queue换成stack,就完成了核心代码的编写。(灵感来源于二叉树的先序遍历的递归和非递归实现)原创 2017-02-19 21:55:45 · 384 阅读 · 0 评论 -
并查集,battles over cities,路径压缩,优化与封装,无向图连通性
并查集是一种树型的数据结构,用于处理一些不想交集合的合并与查找问题。换言之,disjointSet主要包括unionSet(合并集合)与findRoot(查找集合)两种操作,程序实现上有quick-find和quick-union两种性能倾向。并查集主要应用在无向图的动态联通性上。例如网络连接判断,在pat中经常用于解决的一类题目是“城市联通的问题”,本题后面会以top1001的“Battle over cities--hard version"为例,在编程中使用并查集算法。中给出若干城市和某些道路,原创 2017-02-20 22:37:03 · 381 阅读 · 0 评论 -
简单计算器,四则运算,小括号,实数,剔除空格,封装calculator类
简单表达式的求值,在《数据结构》教课书上有明确的阐述。先处理只涉及四则运算的情况。再添加小括号的情况。然后处理表达式中包含实数的情况。最后处理表达式中包含空格的情况。细节:gets_s函数,gets函数,S_ch栈底预先放置‘#’,作为优先级最低的运算符,功能上类似于“哨兵”。Freopen(“in.txt”,”r”,stdin)是重定向语句,可以在相应位置安排in.txt文件编辑测试用例,也可以去掉改行代码,自己在控制台输入测试用例。添加实数的处理,数字累加的部分发生变化,tnum定义为do原创 2017-02-18 21:01:54 · 982 阅读 · 0 评论 -
Word Break,递归,暂存中间结果,“土地换和平”,dp
给出一个字典,求指定字符串是否能用字典中单词组合而来。Leetcode上分139,140两题。大多数搜索,都是找到一个策略将"大问题"化为"小问题"。讨论unordered_map这个暂存结构。在搜索中,通常是使用递归来编程,会遇到相同子问题的情况,这种子问题的求解会重复占用时间。unordered_map这个暂存结构就是暂存之前的努力成果,将它们保存在内存中。用“土地换和平”。类似于dp算法的思想。原创 2017-05-11 10:08:04 · 532 阅读 · 0 评论 -
树状数组,区间求和
本文只给出树状数组的实现代码,解决区间求和问题。注意vector<int> C;中下标为0的元素是没有用到的。原创 2017-05-27 15:57:11 · 327 阅读 · 0 评论 -
线段树,实例,代码实现,区间最值,区间求和,顺序存储,链式存储
线段树是一种二叉搜索树,将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。构造线段树如图,预处理耗时O(n),查询、更新操作O(logn),需要额外的空间O(n)。线段树是二叉树,形式上有点像完全二叉树,先以顺序存储为例。使用数组实现,数组大小大概是序列个数的4倍。区间查询query,必选满足“相邻的区间的信息可以被合并成两个区间的并区间的信息”,在这个问题上,区间最小值问题是满足的。将待查询区间[uStart,uEnd]划分为一个个小区间,这些小区间不重不漏,组合起来正好覆盖[uS原创 2017-05-27 13:13:18 · 353 阅读 · 0 评论 -
Finonacci sequence,斐波那契,经典的兔子繁殖,更新为兔子会死,通项推导,循环,递归,dp实现
由此推出了著名的fibonacci数列。递推公式为,F(n)=F(n-1)+F(n-2),n>=3。F(1)=F(2)=1;还有通项公式,以及黄金分割等的讨论,请参考其他资料。根据此公式,可以用循环、递归和dp三种方法来实现兔子的计数。我们很容易i注意到原兔子繁殖问题中有个很强的假设,就是“所有兔子都不死”,而实际的兔子是有寿命的,所以修订模型,假设兔子出生后第5个月就死去。兔子分三类:新兔子不繁殖;老兔子会死掉;壮年兔子才有繁殖能力。延伸一下,修订后的兔子问题,更接近现实中的情况,就原创 2017-09-15 23:31:22 · 1552 阅读 · 0 评论