Algorithm
ariesjzj
这个作者很懒,什么都没留下…
展开
-
Trie(字典)树
原文地址:http://blog.csdn.net/ariesjzj/article/details/7969307 Trie树,又称前缀树,字典树,是字符串处理,尤其是匹配问题中的一大利器。其特点是结点表示的字符不是直接存在结点中,而是由其位置决定。Trie树的root节点为空结点,从root节点到每个结点的路径上的字符组成的字符串为该结点所代表的字符串。每个结点的两个子结点必不相同,因原创 2012-09-11 23:19:47 · 2283 阅读 · 0 评论 -
博弈算法-Nim及变体
Nim游戏的定义一般如下:有若干堆数量有限的石子,两个玩家轮流取石子,每次可以选择一堆石子并拿走任意个石子,最后一个拿石子的人判赢。要解决这个一般问题,首先有两个基本概念:Winning position:从该状态开始存在策略可以必胜。Losing position:从该状态开始不存在策略可以胜利。记当前状态执行某一动作后进入下一状态,则有下面的解题基本原则:1.原创 2012-09-05 22:07:26 · 2190 阅读 · 0 评论 -
[Topcoder] SRM197
divII lev2 先定义八个方向的偏移。取数组pieces第一对坐标,得到其八个偏移坐标,结果肯定是这些坐标的子集,所以对这八个坐标进行检醒,如果坐标对数组其它坐标都形成威胁,则加入结果数组。题目要求排好序,只要定义偏移时按有序排列就行,这样省得显式排序了。#include #include #include #include #include #include usi原创 2010-07-19 20:02:00 · 981 阅读 · 0 评论 -
[Topcoder] SRM211
DivI lev2 定义grid,0为空,1代表有障碍或已考虑从每个格式开始flood fill一遍,记录flood fill的格子数量#include #include #include #include #include #include #define HEIGHT 400#define WIDTH 600using namespace std;typ原创 2010-07-19 20:12:00 · 1034 阅读 · 0 评论 -
[Topcoder] SRM233
DivI lev2 #include #include #include #include #include #include #include #include using namespace std;#define NODE_NUM (26 * 26 * 26 * 26)typedef struct node { long distance;} node原创 2010-07-19 20:19:00 · 935 阅读 · 0 评论 -
[Topcoder] SRM207
Div2 Lev3 #include #include #include #include #include using namespace std;typedef struct node { string pos; int hasKillRook; int hasKillQueen; int step;} node;const int coffset[8]原创 2010-07-19 20:21:00 · 968 阅读 · 0 评论 -
Data Structure Visualizations
http://www.cs.usfca.edu/~galles/visualization/Algorithms.html转载 2012-08-31 22:40:28 · 1847 阅读 · 0 评论 -
二分图最大覆盖问题的匈牙利算法
最大流问题(Maximum flow problem)中有一类很重要的问题被称为最大二分匹配问题(Maximum-bipartite-matching problem)。很多现实中的例子可以被建模成该问题,如经典的任务分配问题(Task assignment problem)等等。这里介绍一种常用解法-匈牙利算法(Hungarian method )。这类问题在各种竞赛题中也出现得比较多,原创 2012-08-17 16:13:38 · 2015 阅读 · 0 评论 -
彩虹表-破解哈希算法
彩虹表(Rainbow Table)是一种破解哈希算法的技术,它的性能非常让人震惊,在一台普通PC上辅以NVidia CUDA技术,对于NTLM算法可以达到最高每秒103,820,000,000次明文尝试(超过一千亿次),对于广泛使用的MD5也接近一千亿次。更神奇的是,彩虹表技术并非针对某种哈希算法的漏洞进行攻击,而是类似暴力破解,对于任何哈希算法都有效。但是无论怎样,彩虹表永远是在数据加解密转载 2011-12-28 21:05:26 · 4351 阅读 · 1 评论 -
SRM 212 div2
lev 3原题:http://www.topcoder.com/stat?c=problem_statement&pm=3005&rd=5858对每种半径,遍历每个格子,如果格子为'#',即被占格,则检测该格子是否在所检圆内或圆外,检测方法如下:在两种情况下格子和圆不相交:1. d1, d2, d3, d4 2. d1, d2, d3, d4 > R原创 2010-11-17 16:49:00 · 1071 阅读 · 0 评论 -
关于《编程之美》的4.3 买票找零问题
<br />书中给出了两种很优雅的解法,尤其是第二种(构造sigma序列的方法),但由于太过精妙,我等凡人在没看过的情况下实在是很难想到。看完后想到种比较俗的做法,比较容易想得到,而且也比较好记。<br /> <br />1.证明每个合法序列可以构造出n个非法序列<br /> 依次将前k(k = 1...n)组配对的()翻转(即()变成)()即可构造出n个非法序列。<br />2.证明每个非法序列唯一由一个合法序列构造<br /> 反证法可证。<br />则在所有的可能序列中合法和非法序列比例为原创 2010-11-06 10:52:00 · 2047 阅读 · 0 评论 -
[Topcoder] SRM474
Div. 2 Lev. 3主要思想:DP由于题目中点的数量不超过16个,因此可以用一个整数来表示,第i位为1表示考虑第i个点。如101表示考虑第1,3个点。由于给出的二维点没说有序,所以分解问题时得考虑其所有的子集。定义opt[2^n],n为二维点个数。opt[i] 为考虑i所代表的这些二维点的最优结果。则最优子结构:opt=minj{opt[i-j] + res[j]}其中res[j]为将j所代表的这些二维点用一个框框起来的成本。初值opt[0] = 0,其它为-1。提示:opt定义:opt[1for (原创 2010-07-08 19:34:00 · 999 阅读 · 0 评论 -
并查集(disjoint-set forests)
原文地址:http://blog.csdn.net/ariesjzj/article/details/8001597举个简单应用的例子。现在社交网站这么流行,假设现在想知道两个人之间是否存在间接好友关系(A和B为好友,B和C为好友,A和C为间接好友),有什么好方法呢?并查集就是用于这类查询问题的有效数据结构,正如其名(disjoint set),并查集本质上是一个集合,集合的元素为原创 2012-09-20 20:41:09 · 5611 阅读 · 0 评论