
算法
nemochens
这个作者很懒,什么都没留下…
展开
-
博弈( 二)Sprague-Garundy函数
现在我们来研究一个看上去似乎更为一般的游戏:给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移动者判负。事实上,这个游戏可以认为是所有Impartial Combinatorial Games的抽象模型。也就是说,任何一个ICG都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。下面我们就在有向无环图的顶点转载 2013-07-20 17:05:51 · 602 阅读 · 0 评论 -
KMP算法
第一部分、KMP算法初解1、普通字符串匹配BF算法与KMP算法的时间复杂度比较 KMP算法是一种线性时间复杂的字符串匹配算法,它是对BF算法(Brute-Force,最基本的字符串匹配算法的)改进。对于给的原始串S和模式串P,需要从字符串S中找到字符串P出现的位置的索引。BF算法的时间复杂度O(strlen(S) * strlen(T)),空间复杂度O(1)。转载 2014-02-22 15:53:08 · 620 阅读 · 0 评论 -
素数筛选法
素数也叫质数,即只能被1和本身整除的数筛选素数的方法是:1、从2开始找,然后删除这一范围中所有被2能整除的数;2、找到下一个没有被删除的数字n;3、删除这一范围内所有能被n整除的数;4、如果n*n>“最大范围”就跳出,否则执行第2步。时间复杂度n*sqrt(n);原创 2013-11-15 21:22:09 · 615 阅读 · 0 评论 -
奇偶剪枝
描述奇偶剪枝是数据结构的搜索中,剪枝的一种特殊小技巧。现假设起点为(sx,sy),终点为(ex,ey),给定t步恰好走到终点,s | | | +———e原创 2013-07-29 11:52:19 · 427 阅读 · 0 评论 -
并查集
http://www.cnblogs.com/cherish_yimi/archive/2009/10/11/1580839.html并查集学习:l 并查集:(union-find sets)一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现转载 2013-07-27 15:56:10 · 379 阅读 · 0 评论 -
记忆化搜索
记忆化搜索:算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,以后再次遇到这个状态的时候,就不必重新求解了。原创 2013-07-25 18:23:33 · 468 阅读 · 0 评论 -
01背包问题总结
一 问题描述:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。所谓01背包,表示每一个物品只有一个,要么装入,要么不装入。二 解决方案:考虑使用dp问题 求解,定义一个递归式 opt[i][v] 表示前i个物品,在背包容量大小为v的情况下,最大的装载量。opt[i][v] = max(opt[i-1][v]转载 2013-07-24 17:52:48 · 410 阅读 · 0 评论 -
装配线调度
问题描述:汽车生产工厂共有两条装配线,每条有n个装配站;装配线i的第j 个装配站表示为Si,j,在该站的装配时间为ai,j。一个汽车底盘进入工厂,然后进入装配线i(i为1或2),花费时间为ei。在通过一条线的第j个装配站后,这个底盘来到任一条线的第(j+1)个装配站。如果它留在相同的装配线,则没有移动开销;如果它移动到另一条线上,则花费时间为ti,j。在离开一条线的第n个装配站后,原创 2013-07-24 16:57:51 · 645 阅读 · 0 评论 -
递归与分治
递归与分治算法总体思想 对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。 将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。递归的概念 直接或间转载 2013-07-22 14:41:44 · 1051 阅读 · 0 评论 -
错误票据
某涉密单位下发了某种票据,并要在年终全部收回。 每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。 你的任务是通过编程,找出断号的ID和重号的ID。 假设断号不可能发生在最大和最小号。要求程序首先输入一个整数N(N接着读入N行原创 2014-03-21 21:38:29 · 541 阅读 · 0 评论