
算法
sdcyzjq
这个作者很懒,什么都没留下…
展开
-
Tromino谜题的解法
<br />题目:Tromino 是一个由棋盘上的三个邻接方块组成的L型瓦片,我们的问题是,如何用tromino覆盖一个缺少了一个方块(可以在棋盘上的任何位置)的(2^n)*(2^N)棋盘。除了这个缺少的方块,tromino应该覆盖棋盘上的所有方块,而且不能重叠。<br />原题见《算法设计与分析基础》98页。<br /> <br />思想是使用分治法,即把大问题划分为几个小问题。8*8的化为4个4*4的,4*4的化为四个2*2的,当化为2*2的时候,解法就很简单了,直接把2*2矩阵中另外三个位置用L型瓦片原创 2011-03-02 14:07:00 · 4412 阅读 · 0 评论 -
后缀树
后缀树其实是Trie树的改进,一棵后缀树包含了一个或多个字符串的所有后缀。对于字符串banana,如果要用trie树来表示它所有的后缀,如下图:然后对所有的【只有单个子节点的节点】进行合并然后就可得到后缀树构造一棵后缀trie树的时原创 2011-09-08 16:53:42 · 751 阅读 · 0 评论 -
聪明的学生问题
题目大概如下图所示:本题目的解答方法参考了《算法艺术与信息学竞赛》。由题意可以知道,每个人判断的依据是【其他人头上的数】和【其他人作出的否定回答】两方面。因为三个数中,定有一个是另两个数的和,所以当其中一个人看到另两个人的数时,他可以判断自己的数是【两原创 2011-09-15 15:12:51 · 950 阅读 · 0 评论 -
可用贪心算法解决的几个基本问题
关键:看问题有没有贪心选择性质和最优子结构性质。有些问题看似是可以用贪心算法,但是实际用贪心算法却得不到最优解。构造贪心算法后,需要一定的证明来确定它的正确性。常用证明方法:反证法、调整法。几个基本问题:1. 活动安排问题。设有n个活动的集合e={1,2,…,n},其原创 2011-08-24 12:36:51 · 8195 阅读 · 0 评论 -
并查集
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。对这一结构的基本操作是:合并两个不同的集合;查找某一元素所在集合的根节点。int rank[SIZE];//表示某一点所含有的子节点的最大高度原创 2011-08-26 17:19:30 · 795 阅读 · 0 评论 -
求数列的逆序数对数问题
问题:对于一个数字数组,如(1,3,5,4,2),假定我们要求的是从小到大数列的逆序数对,则其中(5,4)就是一组逆序数。解决方法:求一个数列中所有的逆序数对,可以采用递归与分治的思想,借助归并排序来完成。一个数列的逆序数对,等于【它的两个子序列各自内部的逆序数对】与【两原创 2011-08-29 17:09:57 · 1889 阅读 · 0 评论 -
【总结】Bloom Filter
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false原创 2011-08-30 16:28:25 · 412 阅读 · 0 评论 -
用位运算实现两个变量交换值(不需额外空间)
思想是:跟同一个数进行两次异或得到的结果是这个数本身。void swap(int &x, int &y){ x^=y; y^=x;//到这里,等于执行了y=y^x^y; x^=y;//这里等于执行了x=x^y^x;}原创 2011-08-30 11:40:08 · 742 阅读 · 0 评论 -
ELF Hash算法
ELFhash函数在UNIX系统V 版本4中的“可执行链接格式”( Executable and Linking Format,即ELF )中会用到,ELF文件格式用于存储可执行文件与目标文件。ELFhash函数是对字符串的散列。它对于长字符串和短字符串都很有效,字符串中每个字符原创 2011-08-30 11:59:40 · 1619 阅读 · 0 评论 -
Trie树(字典树)
Trie树的核心思想是用空间换时间,通过在树中保存字符串的公共前缀,来达到加速检索的目的。例如,对于一棵存储由英文字母组成的字符串的trie树,如下图Trie树在实现的时候,可以用左儿子右兄弟的表示方法,也可以在每个节点处开设一个数组,如上图的方法。T原创 2011-09-02 11:36:20 · 384 阅读 · 0 评论 -
线段树简介
线段树是一棵二叉搜索树,与普通的二叉搜索树最大的差别是每个节点都表示的是一个线段,有一个起点和终点。建立线段树的时间复杂度是O(n),查询和删除的复杂度都是O(logN)。定义节点来表示一个线段typedef struct node{ int sta原创 2011-08-31 17:28:17 · 346 阅读 · 0 评论 -
一个数以最少步骤分解为另外两个数和差问题的解决
有同学面试的时候遇到要求一个数以最少步骤分解为另外两个数和差问题的解决,大约描述是“将一个数分解为几个数的和或者差的形式,并且使步骤最小”。这类题的解题理论是数论里面的一次不定方程的整数解。引用 百度百科:定义1. 形如 ax + by = c ( a,b,c∈Z,a,b不同时为转载 2011-07-07 10:06:22 · 602 阅读 · 0 评论 -
C语言里float与double在读入时的问题
如果是double型,读入时一定要用scanf("%lf",&xx);否则变量值会为0如果是float型,一定要用%f,否则变量值会变成很大的未知数字另外,在读固定格式的输入时,隔断字符如空白符还是用getchar()之类的统一处理吧。原创 2011-05-17 21:37:00 · 1085 阅读 · 0 评论 -
[poj] 水题2159
这题目写得非常长,看起来有点晕,但是仔细看一下,在纸上写写,就会理解题意了。其实满足要求的转换条件是非常宽的,只要两组字符中出现次数相同的字符数依次相等就行了。比如两组各5个字符,出现一次的字符都是3个,出现两次的都是2个,那么就满足条件了。根本不需要去考虑顺序是怎么调转的,记录成两份字符->频率的转换表,只要这份表满足条件,那么无论怎么转换次序都可以满足条件。这就解决了第二种加密条件,至于第一种条件,其实就是不允许一对多的关系。那么只要判断出现次数相同的字符数相同就可以了。有个疑问,写了代码之后,在poj原创 2011-05-18 20:51:00 · 448 阅读 · 0 评论 -
google的新闻(文章)分类算法
<br />原文: http://www.google.com.hk/ggblog/googlechinablog/2006/07/12_4010.html<br /> <br />Google 的新闻是自动分类和整理的。所谓新闻的分类无非是要把相似的新闻放到一类中。计算机其实读不懂新闻,它只能快速计算。这就要求我们设计一个算法来算出任意两篇新闻的相似性。为了做到这一点,我们需要想办法用一组数字来描述一篇新闻。<br /> <br />对于一篇新闻中的所有实词,我们可以计算出它们的单文本词汇频率/逆文本频率转载 2011-04-10 23:07:00 · 5410 阅读 · 0 评论 -
poj推荐50题
第一类 动态规划 (至少6题,2479 and 2593必做) 2479 and 2593 1015 1042 (也可贪心) 1141 1050 1080 1221 1260 2411 (稍难) 1276 第二类 搜索 (至少4题) 1011 1033 1129 2049 2056 248原创 2011-04-13 20:41:00 · 603 阅读 · 0 评论 -
[poj]动态规划2479
之前好久没做过oj的题了,加上对动态规划不太会,这题wa了3遍才作对。思路:用字符串的最大连续字串值算法就可以达到o(n)的时间复杂度。开了四个数组,第一个保存从前往后查询的最大连续子串值,第二个保存从第一个元素到当前元素这些值中的最大值,第三个保存从后往前查询的最大连续子串值,最后一个保存从最后一个元素到当前元素这些值中的最大值。然后把第二个和第四个数组对每个分隔点加一下,输出最大值就可以了。最大连续子串和算法:如果从第一个元素到前一个元素的最大字串和>0,则会加到当前值上会造成积极影响,所以当前的最大字原创 2011-04-13 20:55:00 · 474 阅读 · 0 评论 -
[poj]动态规划1015
<br />被这个题折磨了好久好久……得有两三天吧,太丢人了<br /> <br />知道使用dp的思路来做,但是第一次dp的思路错误了,认为在每一个规模为a的问题中差的绝对值最小时,沿着这条路线,再继续选择在当前差值上增加的值最小的元素就可以了。<br /> <br />比如:<br /> <br />4 2<br />5 4<br />5 4<br />9 0<br />0 9<br /> <br />这个集合,明显应该选后两个,但是沿着刚才的思路的话,选择的结果是前两个。<br /> <br />这也原创 2011-04-20 16:03:00 · 500 阅读 · 0 评论 -
最短关键序列算法(随便起的名字)
问题: a.项链上串着n颗宝石。项链有一个头,有一个尾。宝石分为很多种,我们只关心其中k种最漂亮的宝石。我们想从项链上找到一个连续的一串宝石,使得这一串包含了全部k种给定的宝石。求满足要求的最短宝石链的长度w。b.一篇文档,里面有顺序的n个单词(忽略标点)。文档自然有开头和结尾。单词有很多(都转换成了原型),但我们只关心搜索引擎用户输入的k个关键词。我们想从文档中选取最短的一个连续原创 2011-06-11 16:13:00 · 888 阅读 · 0 评论 -
[poj] 动态规划 1141
dp练习的第三道题,依然花了我断断续续好几个小时……有人说看到题目里的:2. If S is a regular sequence, then (S) and [S] are both regular sequences. 3. If A and B are regular sequences, then AB is a regular sequence. 就知道用dp,看来我还是经验太少了跟上一词做的题目有点像,都是用一个二维数组保存状态,另一个保存路径。保存路径的那个我想了好一阵怎么来存,结果最后还是看原创 2011-04-28 00:37:00 · 435 阅读 · 0 评论 -
动态规划算法之最大字段和
问题:给定一个未排序的数值数组,求其中取最大值的一个子序列的值。思路:设max(n)为前n个元素中,必须取到第n个元素时的最大和前n个数字的最大值可表示为对{max(n-1),第n个数字}求当前的最大值。其中有如下规则:如果max(n-1)>=0,则不管当前的原创 2011-07-06 14:54:16 · 955 阅读 · 0 评论 -
神经网络学习
1. 感知器。感知器其实就是单个的神经网络单元。以一个实数向量作为输入,计算这些输入的线性组合,如果结果大于阈值,则输出1,否则输出-1。感知器可以表示很多布尔函数,比较适用于线性可分的数据。训练方法有两种,感知器训练法则和梯度下降法则。(1) 感知器训练法则:对权值向量,从一个随机值开始,反复应用向量到每个样例,只要出现误分类,就修改权值,直到正确分类所有的样例。wj=w原创 2012-07-18 22:00:41 · 664 阅读 · 0 评论