随笔分类 -  Algorithm

摘要:ZOJ 2734 Exchange Cards题目大意:给定一个值N,以及一堆卡片,每种卡片有一个值value和数量number。求使用任意张卡片组成N的方式。例如N = 10 ,cards(10,2)(7,2)(5,3)(2,2)(1,5),则10 = 10,10 =7+3+1,10=5+5…思路... 阅读全文
posted @ 2015-04-04 23:32 _DN 阅读(510) 评论(0) 推荐(0)
摘要:题目大意:输入一颗无根树的括号序列,求这棵树的普吕弗序列。 分析思路: 1)普吕弗序列,可以参考维基百科,其做法是找出树中编号最小的叶子节点,并将此叶子节点及边删除,并输出其邻接的节点标号; 2)递归地构造树,可以使用list 数组来表示一个“邻接表”,以存储构造的树; 3)使用优先队列来进行删除,奈何priority_queue没有迭代器访问,只能用堆排序,取最值; 代码:... 阅读全文
posted @ 2015-03-29 16:22 _DN 阅读(419) 评论(0) 推荐(0)
摘要:定义 二叉索引树,binary index tree,又名树状数组,或Fenwick Tree,因为本算法由Fenwick创造。 对于数组A,定义Query(i,j) = Ai +Ai+1 + … + Aj. 比较好的做法:使用前缀和,Sum(j) – Sum(i-1)即可得到Query(i,j) BIT即为解决此类区间查询而大展身手,因为预处理时间... 阅读全文
posted @ 2015-03-28 00:44 _DN 阅读(1948) 评论(0) 推荐(0)
摘要:1.定义 RMQ,Range Min/Max Query,区间最小/大值查询。 对于数组A, 定义Query(i,j)= min {Ai,Ai+1,…Aj},即为RMQ问题。 算法思想: 使用Tarjan的Sparse-Table算法,简称ST算法。 令d(i,j)表示从i开始的,长度为2^j的区间中的最小值,则用递推的方式可得: ... 阅读全文
posted @ 2015-03-27 23:43 _DN 阅读(210) 评论(0) 推荐(0)
摘要:1.基本概念 线段树,Segment tree,是一颗二叉树,树的每个节点代表一个区间[a,b]。故又叫做区间树,Interval tree。 用于解决线段的并,或区间覆盖问题。 性质:线段树是平衡二叉树,最大深度为logN(N为线段树所表示区间的长度)。 2.线段树API 存储结构: public class Node { public... 阅读全文
posted @ 2015-03-27 23:23 _DN 阅读(480) 评论(0) 推荐(0)
摘要:1.介绍 算术表达式的计算,是比较常见的问题,但这个问题的背后隐藏着栈的思想。 这里就介绍使用两个栈来计算表达式的方法。 2. 算法 2.1 定义: a) 建立两个栈: 一个是数据栈dataStak,用于存放数据; 一个是符号栈operatorStack,用于存放运算符; b) 建立运算符号之间的优先级表,用于比较两个符号之间的优先级; 优先级定义为三种运算结果:>(表示高于),... 阅读全文
posted @ 2015-03-27 22:54 _DN 阅读(672) 评论(0) 推荐(0)
摘要:1.CODE 128 标准 1.1 code 128码格式: 格式: 从左起: 空白区域,起始字符(Start),数据区域(data),校验码(check),结束字符(Stop),空白区域。 所有字符条纹图像都是以黑色开始,白色结束,只有结束字符例外。 1.2 起始字符: 由于128码有三个字符集。所以有三个起始字符。 ... 阅读全文
posted @ 2015-03-23 21:22 _DN 阅读(6998) 评论(0) 推荐(0)
摘要:已经5年没有做OJ了, 曾经沧海难为水,除去巫山不是云“ 准备每周刷1-2题! 题目大意:给出N个字符串,且各个字符串都包含唯一的字母,即不存在“ABCA”(A重复了),而“AFDSG”是正确的。 求出N个字符串的公共字母。 最后,按照字典序输出。 分 析:首先对各个字符串进行字典序排序,然后求所有的LCS,做法是两两相求即可。N个字... 阅读全文
posted @ 2015-03-21 22:45 _DN 阅读(185) 评论(0) 推荐(0)
摘要:数组,是最基础的数据结构,因为其所代表的是一段连续序列(如果按照C++中的定义),或者从广义上来讲的一个集合。结构特点:1)索引(Index),又叫下标; 一般地,我们可以借鉴下标的思想,对数据进行标号,从而组织成为序列,最大的好处就是能够保证元素的唯一性,如同数据库的Primary Key。 这与... 阅读全文
posted @ 2014-11-07 22:01 _DN 阅读(253) 评论(0) 推荐(0)
摘要:突然间想起,整理一下自己的算法知识体系,先从数据结构开始吧!基础数据结构:1)链表2)栈3)队列4)二叉树5)图实用数据结构:1)堆,优先队列;2)并查集;3)树状数组;4)线段树;5)Trie树;6)二叉排序树; 阅读全文
posted @ 2014-11-07 21:19 _DN 阅读(125) 评论(0) 推荐(0)
摘要:题目:有两个表,有一个相同的字段,现在要选出这两个字段相同的记录,除了用两重循环之外,还有什么办法?(某面试题)这个问题,其实有很多不明确的地方,但就题目本身而言,很明显,当前复杂度是O(n2),如果解答不能讲这个复杂度降低的话,就根本不算什么优化。这里假定,选择一条 记录的复杂度为O(1)。各位大... 阅读全文
posted @ 2014-09-27 11:50 _DN 阅读(324) 评论(2) 推荐(0)