- 博客(32)
- 资源 (23)
- 收藏
- 关注
转载 Google在MIT发布的难题
近日,Google Jobs在MIT校园内到处张贴着一份密码,企图在MIT校园里的一群变态中找出几个最变态的破密大牛。密码上面附文说,如果你能破解这份密码,你在Google会很有前途。据说,这份密码包含了一个Google Jobs的电话号码,解开密码的人可以通过此电话留下自己的个人信息。目前,还没有人破解出这段密码来。 想要自己试一试的同学可以参看下面的高清无码版:
2009-09-23 22:11:00 793
转载 李开复:算法的力量
算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,
2009-09-16 20:34:00 545
转载 为什么C++?
问题为什么用C++呢? 在你皱着眉头离开之前,试着回答这个简单的问题。效率,是么?人人都知道这个。但情况是,当一个人开始讨论编程语言或与其相关的话题时,他必须要非常明确而有针对性。为什么呢?我来问你另一个问题:如果效率是人们使用C++的唯一理由,那么为啥不直接用C呢?C被认为比C++效率更高(嗯嗯,我知道C没有比C++的效率高多少,所以这里别误解我的意思,因为即使它们二者效率相同,刚才的问题依
2009-09-16 20:25:00 721
转载 字符串匹配自动机
首先(不严谨地)定义自动机:自动机就是一堆状态的组合,给某个状态的自动机一个输入,它会按照自己的转移规则变到一个新的状态。事实上,可以把状态理解成顶点,把状态的转移理解成上面标着符号的边,在某个状态得到了某个符号的输入时,就转移到那条边指向的状态去。 先介绍单串匹配的自动机。对于M个字符的串S[1..M],一个用这个串进行模式匹配的自动机需要M+1个状态。设状态i输入ch时的转移为auto[i][
2009-09-16 20:22:00 1114
转载 求最大权二分匹配的KM算法
最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大。解决这个问题可以用KM算法。理解KM算法需要首先理解“可行顶标”的概念。可行顶标是指关于二分图两边的每个点的一个值lx[i]或ly[j],保证对于每条边w[i][j]都有lx[i]+ly[j]-w[i][j]>=0。如果所有满足lx[i]+ly[j]==w[i][j]的边组成的导出子图中存在一个完美匹配,那么
2009-09-16 20:20:00 985
转载 最小树形图
最小树形图就是给定一个有向图,求以某个给定顶点为根的有向生成树(也就是说沿着这N-1条有向边可以从根走到任意点),使权和最小。解决这个问题有一个O(VE)的算法,是这样的:对于除根外的每个顶点,选择一条权最小的入边。如果选出来的V-1条边不构成环,则可以证明这些边就是满足要求的答案。如果存在环,则将环中的边收缩成一个顶点。设x是环中的点,y不是环中的点,v为新的顶点,w0为上一步中x选择的
2009-09-16 20:20:00 761
转载 求最大流的Relabel-to-Front算法
除了用各种方法在剩余网络中不断找增广路(augmenting)的Ford-Fulkerson系的算法外,还有一种求最大流的算法被称为压入与重标记(Push-Relabel)算法。它的基本操作有:压入,作用于一条边,将边的始点的预流尽可能多的压向终点;重标记,作用于一个点,将它的高度(也就是label)设为所有邻接点的高度的最小值加一。Push-Relabel系的算法普遍要比Ford-Fulke
2009-09-16 20:19:00 1853
转载 求最大流的使用距离标号的最短增广路算法
求最大流有一种经典的算法,就是每次找增广路时用BFS找,保证找到的增广路是弧数最少的,也就是所谓的Edmonds-Karp算法。可以证明的是在使用最短路增广时增广过程不超过V*E次,每次BFS的时间都是O(E),所以Edmonds-Karp的时间复杂度就是O(V*E^2)。如果能让每次寻找增广路时的时间复杂度降下来,那么就能提高算法效率了,使用距离标号的最短增广路算法就是这样的。所谓距离标
2009-09-16 20:16:00 1931
转载 平衡二叉查找树
二叉查找树是一种非常有用的数据结构。经过一定扩充,它可以支持的操作有:Insert(插入)、Find(查找)、Remove(删除)、GetMax(取最大)、GetMin(取最小)、Prev(取前驱)、Next(取后继)、Rank(取某元素的序号)、Select(按照序号取该元素)。如果数据是随机的话,以上操作可以保证在O(logn)的期望时间内完成。但是比赛中显然出题者会给出一些刁钻的数据让最
2009-09-16 20:14:00 863
转载 树状数组
树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组a[1..n], 那么查询a[1]+...+a[n]的时间是log级别的,而且是一个在线的数据结构, 支持随时修改某个元素的值,复杂度也为log级别。 来观察这个图: 令这棵树的结点编号为C1,C2...Cn。令每个结点的值为这棵树的值的总和,那么容易发现: C1 = A1 C2
2009-09-16 20:13:00 790
转载 收缩强连通分量
收缩有向图中的强连通分量大约是图论的线性算法中最具技巧性一种了。我们的首要目的是对于每个顶点设定一个Belong值,也就是它从属于哪个顶点所代表的强连通分量,至于重新建立图的边,不过是将所有边扫描一遍看是否在新图中出现而已,比较容易。下面是利用一遍DFS求强连通分量的方法:对于每个顶点,设立Num、Low、Used、Alive四个属性,一个Stack保存当前正在被遍历的顶点;每访问一个顶点
2009-09-16 20:12:00 634
转载 并查集
什么是并查集? 并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。 并查集的主要操作: (1)查找:查找元素所在的集合即根节点 (2)合并:将两个元素所在的集合合并为一个集合 合并两个不相交集合判断两个元素是否属于同一集合 亲戚(Relations) 思路点拨 一 问题实质
2009-09-16 20:11:00 610
转载 LCA问题
最近公共祖先(Least Common Ancestors) 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。 这里给出一个LCA的例子: 对于T= V={1,2,3,4,5} E={(1,2),(1
2009-09-16 20:10:00 716
转载 RMQ问题
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j 主要方法及复杂度如下 1.朴素(即搜索) O(n)-O(n) online 2.线段树 O(n)-O(qlogn) online 3.ST(实质是动态规划) O(nlogn)-O(1) offline ST算法(Sparse
2009-09-16 20:09:00 826
转载 虚二叉树
虚二叉树是处理统计问题的一种利器,它的最大优势就是编程无比简单。在需要统计的数据严格在某一范围内时,使用虚二叉树可以大大简化编程,但这也是虚二叉树的弱点,就是必须知道事先的数据范围,而且这个范围不能太大,必须能开一个相当的数组。虚二叉树一般的应用方法在每个节点处保存其左子树加上自身的节点数。在插入时,采用非常类似二分查找的实现方法,若目标节点在当前节点的左子树或自身(x=m),则++tot
2009-09-16 20:08:00 1467
转载 Hungary 算法
Hungary 算法(音译为“匈牙利算法”)是用来解决二分图匹配问题的利器。它的基本思想是通过DFS在二分图中找“交错轨”。但事实上,我认为掌握这个算法甚至根本不需要理解“交错轨”这个概念,它似乎和“决策树”“隐式图”类似,只是为了理解算法的本质而抽象出来的一种东西,在代码中不会出现,也不影响对代码的浅层理解和记忆。算法的核心是bool find(int v)函数,它的作用是:寻找顶点v可
2009-09-16 20:08:00 1185 1
转载 自顶向下伸展树
Splay Tree 是信息学竞赛中应用很广泛的一种平衡树。Splay在应用中的一个缺点是树的层次没有保证,比如说若顺序插入所有数据,树就变成了一条链。虽然说这样还是不影响均摊复杂度,但由于一般的实现的Insert、Splay等操作都要用到递归,故在特别设计的数据中可能会遇到递归栈溢出等不希望看到的现象。自顶向下伸展树可以解决这个问题,在它的实现中可以做到不存在任何递归。现简析其思路:
2009-09-16 20:07:00 1424
转载 最小后缀算法
问题:给定一个字符串s[1...n],求它的所有后缀中最小的一个。(本文中字符串之“大”“小”均对字典序而言。)算法:定义v[1..n],其中v[i]=k表示s[i..i+k-1]在s的所有长度为k的字串中最小。我们求出每个v[i]最大的取值,再找到所有的v[i]中最大的一个,s[i..n]就是问题的答案。基本思想是这样的(先不设计实现时的数据结构):先将所有的1..n都保存在
2009-09-16 20:05:00 1708 2
转载 动态规划与排列组合
动态规划与排列组合By 刘未鹏(pongba)C++的罗浮宫(http://blog.csdn.net/pongba)TopLanguage(http://groups.google.com/group/pongba) 像所有的新手一样,对一种算法思想的理解需要经历从肤浅(流于表面形式)到逐渐触摸到本质的过程。为什么说"逐渐"触摸到本质,是因为很多时候你并不确定一个解释是不是最
2009-09-16 19:59:00 822
转载 编程的首要原则(s)是什么?
半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:你们认为编程的首要原则是什么? 作为我的学习原则的一个实践: 8. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。5个月过去了,这个问题到现在还有人回复,我得到了一
2009-09-16 19:56:00 512
原创 知道16x^2-16|x|y+17y^2=255代表什么吗?
知道16x^2-16|x|y+17y^2=255代表什么吗?http://www.wolframalpha.com/input/?i=16x%5E2-16%7Cx%7Cy%2B17y%5E2%3D255
2009-09-15 21:22:00 907
原创 本周全力备战C++二级考试
/*本周全力备战C++二级考试*/#include#includeusing namespace std;int main(){int j,k;char c=L;cout<<"本周全力备战C++二级考试"<<endl;cout.fill(*);cout<<setw(23)<<""<<endl;//cout<<endl;for(j=0;j<=11;
2009-09-14 12:59:00 724
转载 常用算法设计方法
要使计算机能完成人们预定的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法数据结构是程序的两个重要方面。 算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任
2009-09-13 18:27:00 755
转载 ACM基本算法分类、推荐学习资料和配套poj习题
一.动态规划参考资料:刘汝佳《算法艺术与信息学竞赛》《算法导论》推荐题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1141 简单http://acm.pku.edu.cn/JudgeOnline/problem?id=2288 中等,经典TSP问题http://acm.pku.edu
2009-09-11 13:39:00 1685 1
转载 有趣的C语言问题 测试你对C语言的熟悉程度
下面这个程序输出什么?enum {false,true};int main(){ int i=1; do { printf("%d/n",i); i++; if(i continue; }while(fal
2009-09-10 13:15:00 847 1
转载 漫话二分
二分思想真的是无所不在,即使在中文系的专业课中我们也能见到这个词。在语言学概论中我们提到,一个音位可以由一组区别特征确定下来,这些区别特征总是以只具有“是/否”、“有/无”等两种对立属性的“二元偶分组”形式存在,因为这样可以最方便最快捷地确定出一个元素。这有点像猜数字一样,我想一个数字后让你来猜,我告诉你你的猜测是大了还是小了。只是在这里,回馈的信息不再是大小,而是“辅音/元音”、“口音/鼻音
2009-09-07 19:22:00 973
转载 计算阶乘的另一些有趣的算法
一个正整数n的阶乘就是前n个正整数的乘积,我们通常需要n-1次乘法操作来算出精确的值。不像等差数列求和、a的n次幂之类的东西,目前求阶乘还没有什么巨牛无比的高效算法,我们所能做的仅仅是做一些小的优化。更少的乘法运算次数? 在高精度运算中,乘法计算的速度远远慢于加减法,因此我们有必要减少乘法运算的次数。下面我将做一个非常简单的变换,使得计算阶乘只需要n/2次乘法。继续看下去之前,你能自己想
2009-09-07 18:27:00 948
转载 KMP算法详解
个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很“详细”,耐心地把它看完肯定会有所收获的~~,另外有关模式函数值next[i]确实有很多版本啊,在另外一些面向对象的算法描述书中也有失效函数 f(j)的说法,其实是一个意思,即next[j]=f(j-1)+1,不过还是next[j]这种表示法好理解啊:
2009-09-07 18:24:00 1041
转载 KMP算法与一个经典概率问题
考虑一个事件,它有两种概率均等的结果。比如掷硬币,出现正面和反面的机会是相等的。现在我们希望知道,如果我不断抛掷硬币,需要多长时间才能得到一个特定的序列。序列一:反面、正面、反面序列二:反面、正面、正面 首先,我反复抛掷硬币,直到最近的三次抛掷结果形成序列一,然后我记下这次我抛掷了多少次才得到了我要的序列。重复执行这个过程,我可以算出得到序列一平均需要的抛掷次数。同样地,反复抛
2009-09-07 18:23:00 602
转载 十个利用矩阵乘法解决的经典题目
不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数等于前一个矩阵第i行上的m个数与后一个矩阵第j列上的m个数对应相乘后所有m个乘积的和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。其中,结果的那个4等于2
2009-09-07 18:08:00 1005
转载 十大另类程序语言
10. LOLCODE语言 http://lolcode.com/ 国外流行一种lolcat图片,经常出现在论坛的头像和签名图里。lolcat图片里有一只很乖的小动物(通常是小猫),旁边写几句很可爱的话(比如故意的语法错误、拼写错误、近似发音或者网络缩略语)。很多web 2.0的宕机页面就是一张lolcat图片。LOLCODE就是用这种可爱的猫猫语言来写程序。LOLCODE的代码通俗易懂
2009-09-07 15:10:00 2388
acquia-drupal-win-7.14.14开发环境
2012-09-12
acquia-drupal
2012-09-12
GDB官方文档
2012-09-12
搜索入门之BFS深度优先搜索.ppt
2010-04-18
英语写作经典句子200.doc
2010-04-18
CET-6作文应试技巧.rtf
2010-04-18
ACM实用函数选.doc
2010-04-18
ACM算法模板选doc
2010-04-18
wdl文件格式阅读器下载
2009-03-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人