文摘
ConwayTian
一切再来,为时未晚。
毁掉你人生的,其实是你内心的平庸,是你失去追求卓越的那个瞬间。
展开
-
各种字符串hash函数比较
文章转摘自http://www.cmykrgb123.cn/blog/string-hash-compare/ 常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA转载 2011-07-30 17:01:41 · 522 阅读 · 0 评论 -
乘法逆元
若对于数字A,C 存在X,使A * X = 1 (mod C) ,那么称X为 A 对C的乘法逆元。逆元的作用?让我们来看下面的例子:12 / 4 mod 7 = ? , 很显然结果是3我们现在对于数对 (4,7), 可以知道 X = 2是 4 对7的乘法逆元即2*4=1(mod 7)那么我们有(12 / 4) * (4 * 2 ) = (?) * (1) (mod 7)除法被完转载 2012-03-18 10:57:13 · 3288 阅读 · 0 评论 -
polya定理再小结
polya定理再小结 原来简单的总结过polya定理:http://www.cppblog.com/sdfond/archive/2009/05/12/82665.html 这里再次把一些polya定理的题目归一下类~ 话说ICPC的题目是越来越难,因为经典的算法大家都知道了,因此出题的方向只能是要么把模型隐藏的很深,要么就把一系列算法知识综合起来考察,这个时候分析问题的能力转载 2012-03-18 16:33:27 · 859 阅读 · 0 评论 -
线段树(1)
给定一段区间和若干查询关于子区间性质(比如元素总和,最大最小值等等)的请求,要求高效返回结果是很常见的要求。接下来几篇文章我详细说一说应对这些需求所用的数据结构。从求子区间元素和问题说起。给定序列a[1...n],要求从sum(i,j) = a[i]+a[i+1]+...+a[j]很简单,一个循环就可以了。但如果很多个查询过来,每次都循环一遍就太低效了。我们希望能对结果进行缓存,如果有相同的查转载 2012-04-15 15:41:11 · 989 阅读 · 0 评论 -
最小路径覆盖
在一个PXP的有向图中,路径覆盖就是在图中找一些路经,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每每条路径就是一个弱连通子集.由上面可以得出:1.一个单独的顶点是一条路径;2.如果存在一路径p1,p2,......pk,其中p1 为起点转载 2012-04-18 16:34:28 · 595 阅读 · 0 评论 -
二分图的一些知识
对于任意图:|最小边覆盖|+|最大匹配|=|V|二分图的最大匹配=最小点覆盖数对于二分图:以下数值等价.最大匹配最小点覆盖|V|-最大独立集(二分图or有向无环图)|V|-最小边覆盖数|V|-最小路径覆盖数(有向无环图)|V|-最小路径覆盖数/2(无向图)(上面括号里有有向无环图的,均是将一个点拆成两个点连边匹转载 2011-10-22 13:20:26 · 592 阅读 · 0 评论 -
Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先
作者提示:在阅读本文之前,请确保您已经理解并掌握了基本的Tarjan算法,不会的请到http://hi.baidu.com/lydrainbowcat/blog/item/42a6862489c98820c89559f3.html阅读。基本概念:1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合转载 2011-10-18 22:29:47 · 1284 阅读 · 0 评论 -
GLUT函数说明(转载)
一、初始化void glutInit(int* argc,char** argv) 这个函数用来初始化GLUT库。对应main函数的形式应是:int main(int argc,char* argv[]); 这个函数从main函数获取其两个参数。void glutInitWindowSize(int width,int height);void glutInit转载 2012-10-10 14:07:32 · 887 阅读 · 0 评论 -
后缀数组
字符串处理当中,后缀树和后缀数组都是非常有力的工具,其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料。其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也不太逊色,并且,它比后缀树所占用的空间小很多。可以说,在信息学竞赛中后缀数组比后缀树要更为实用。因此在本文中笔者想介绍一下后缀数组的基本概念、构造方法,以及配合后缀数组的最长公共前转载 2012-10-11 17:29:56 · 629 阅读 · 0 评论 -
程序员的十层楼
程序员的十层楼第1层 菜鸟 第1层楼属于地板层,迈进这层楼的门槛是很低的。基本上懂计算机的基本操作,了解计算机专业的一些基础知识,掌握一门基本的编程语言如C/C++,或者Java,或者JavaScript,...,均可入门迈进这层。 在这层上,中国有着绝对的优势,除了从计算机专业毕业的众多人数外,还有大量的通信、自动化、数学等相关专业的人士进入这一行,此外还转载 2012-09-21 22:05:10 · 4623 阅读 · 0 评论 -
ACM算法列表
ACM 所有算法数据结构栈,队列,链表哈希表,哈希数组堆,优先队列双端队列可并堆左偏堆二叉查找树Treap伸展树并查集集合计数问题二分图的识别平衡二叉树二叉排序树线段树一维线段树二维线段树树状数组一维树状数组N维树状数组字典树后缀数组,后缀树块状链表哈夫曼树桶,跳跃表转载 2012-11-07 19:24:47 · 8086 阅读 · 1 评论 -
Nim取子游戏 (SG函数)
Nim游戏(转载)Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美的结论Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。满足以下条件的游戏是ICG(可能不太严谨):1、有两名选手;2、两名选手交替对游戏进行移动(move),每次一步,选手可以在(转载 2011-11-24 23:03:30 · 3248 阅读 · 0 评论 -
C++输入cin详解
程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入#1:#include using namespace std;int main(){ char st转载 2012-11-15 12:58:33 · 754 阅读 · 0 评论 -
cin.get( )与cin.getline( )的区别
cin.getline()和cin.get()都是对输入的面向行的读取,即一次读取整行而不是单个数字或字符,但是二者有一定的区别。cin.get()每次读取一整行并把由Enter键生成的换行符留在输入队列中,比如:#include using std::cin;using std::cout;const int SIZE = 15;int main( ){cout转载 2012-11-15 13:13:53 · 745 阅读 · 0 评论 -
scanf()、getchar()、gets()比较
相同点:调用scanf()、getchar()、gets()这三个函数时,若缓冲区中残留有可令函数结束的字符,则函数碰到时会按自己结束方式结束。没有可令函数结束的字符,则函数会等待键盘输入。键盘键入的数据都会先放入输入缓冲区中,然后函数从缓冲区中读数据。 不同点:读字符串:scanf()函数:从缓冲区中拿字符,碰到【空格、回车、Tab键】则将其从缓冲区中扔掉。遇到第一个不为【空原创 2012-11-15 14:56:13 · 766 阅读 · 0 评论 -
__int64 与long long 的区别
//为了和DSP兼容,TSint64和TUint64设置成TSint40和TUint40一样的数 //结果VC中还是认为是32位的,显然不合适 //typedef signed long int TSint64; //typedef unsigned long int TUint64; //ANSI C中规定long long才能表示64位 //参转载 2012-11-15 19:13:44 · 835 阅读 · 0 评论 -
C/C++头文件
引用 C/C++头文件一览C/C++头文件一览 ( C、传统 C++#include //设定插入点#include //字符处理#include //定义错误码#include //浮点数处理#include //文件输入/输出#include //参数化输入/输出#include转载 2012-11-15 20:03:26 · 1138 阅读 · 0 评论 -
跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前转载 2011-11-25 10:38:35 · 5854 阅读 · 3 评论 -
博弈
(一)巴什博弈(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。很容易想到当n%(m+1)这个游戏还可以有一种变相的玩法:两个人轮流报数,每次至少报一个,最多报十个,谁能报到100者胜。(二)威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少转载 2011-11-24 21:44:02 · 972 阅读 · 0 评论 -
树状数组
摘自:http://www.cnblogs.com/yykkciwei/archive/2009/05/08/1452889.html树状数组先废话一下.嗯 嗯 从今天开始 从基础一步一步开始 追逐我的梦想!今天先来讨论一下树状数组.问题提出转载 2011-08-09 09:02:04 · 368 阅读 · 0 评论 -
sprintf 函数
格式化数字字符串 sprintf 最常见的应用之一莫过于把整数打印到字符串中,所以,spritnf 在大多数场合可以替代 itoa。 如: //把整数123 打印成一个字符串保存在s 中。 sprintf(s, "%d转载 2011-09-08 10:58:39 · 424 阅读 · 0 评论 -
C库函数qsort七种使用方法示例
七种qsort排序方法一、对int类型数组排序C++代码int num[100]; Sample:int cmp ( const void *a , const void *b ) { return *(int *)a – *(int *)b;转载 2011-09-09 22:58:02 · 1507 阅读 · 0 评论 -
Bellman-Ford算法及其优化
转自:http://hi.baidu.com/jzlikewei/blog/item/94db7950f96f995a1038c2cd.htmBellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题。Bellman-f转载 2011-09-09 11:22:55 · 717 阅读 · 0 评论 -
矩形树
对于多维的问题,第一种方法几乎不可能使用。因此我们可以仿照第二种方法。例如对于n维的问题。我们构造以(a1,a2,a3,….,an,b1,b2,b3,….,bn)为根的线段树,其中(a1,a2,a3….,an)表示的是左下角的坐标,(b1,b2,b3,….,bn)表示的是右上角的转载 2011-08-16 23:16:40 · 1508 阅读 · 0 评论 -
背包九讲
第一讲 01背包问题这是最基本的背包问题,每个物品最多只能放一次。第二讲 完全背包问题第二个基本的背包问题模型,每种物品可以放无限多次。第三讲 多重背包问题每种物品有一个固定的次数上限。第四讲 混合三种背包问题将前面三种简单的问题叠加成较复转载 2011-08-23 16:44:17 · 607 阅读 · 0 评论 -
匈牙利算法
来自: http://hi.baidu.com/csuft1/blog/item/11e0111125f4b5f5c2ce7938.html匈牙利算法:(求偶图的最大匹配 注:偶图就是不存在奇数圈的连通图)首先要明白几个概念:二分图:设G=(V,E)是一个无向图,转载 2011-09-03 09:15:10 · 1391 阅读 · 0 评论 -
二分图带权匹配
KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立转载 2011-10-05 20:50:24 · 1314 阅读 · 0 评论 -
双连通分量
[点连通度与边连通度] 在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个连通块,就称这个点集为割点集合。一个图的点连通度的定义为,最小割点集合中的顶点数。 类似的,如果转载 2011-10-16 10:22:09 · 6637 阅读 · 0 评论 -
Bellman-Ford算法
转自:http://www.wutianqi.com/?p=1912Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。这时候,就需要使用其他的算法来求解最短路径转载 2011-10-08 21:09:26 · 9798 阅读 · 2 评论 -
Spfa算法
转自:http://www.cnblogs.com/zgmf_x20a/archive/2008/12/18/1357737.html求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了。最熟悉的无疑是Dijkstra,接着是Bellman-Fo转载 2011-10-08 21:19:49 · 794 阅读 · 0 评论 -
强连通分量的三种算法
转自:http://kinslovertec.blogbus.com/logs/44636955.html常见的(我见过的)强连通分量的三种算法有:1. Kosaraju算法(双DFS)2.Tarjan算法 3.Gabow一.Kosaraju算法算转载 2011-10-18 19:23:50 · 1830 阅读 · 0 评论 -
常用 大数据量、海量数据处理 方法 / 算法总结
常用 大数据量、海量数据处理 方法 / 算法总结 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到海量数据的公司经常会问到。 下面的方法是我对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法转载 2011-10-29 19:57:03 · 807 阅读 · 0 评论 -
转】计算机界的传奇人物:高纳德
高纳德设置了一个悬赏游戏。如果有人挑出了他编写的TEX程序的错误,他就给挑错者奖励。第一个错误值2.56美元,第二个值5.12美元,第三个值10.24美元。据说,这张10.24美元的支票是他迄今为止为此签出的最后一张。 高纳德是美国计算机科学家唐纳德·克努斯(DonaldKnuth)的中文名。这位“现代计算机科学的鼻祖”是计算机界的传奇人物。他在 年仅36岁时就获得了图灵奖转载 2012-11-17 02:11:52 · 4073 阅读 · 0 评论