算法
JasonRD
做一名IT界的扫地僧
展开
-
Manacher算法-求字符串中最长回文串
一、算法原理Manacher算法在对求字符串中最长回文串问题中,具有O(n)时间和空间复杂度。算法的精妙之处在于巧妙的利用了回文串的对偶性质。 第一步:对字符间添加间隔符,(例如,字符串aababcdab,通过添加间隔符转化为 #a#a#b#a#b#c#d#a#b#)从而避免了字符串的奇偶性问题,为了避免算法中考虑边界问题,可以在字符串首尾加入奇异符号(例如,$#a#a#b#a#b#c#d#a#b原创 2015-07-17 11:29:06 · 467 阅读 · 0 评论 -
改进的筛素数法
最简单的筛素数法方法就是从2开始,将所以2的倍数去掉,然后从3开始,将3的倍数去掉。根据这样很容易写出代码,下面代码就是是筛素数法得到100以内的素数并保存到primes[]数组中。[cpp] view plaincopy//by MoreWindows( http://blog.csdn.net/MoreWindows ) const int转载 2015-08-21 20:45:15 · 307 阅读 · 0 评论 -
动态规划之背包问题-总结和拓展(二)
背包问题是在1978年由Merkel和Hellman提出的。它的主要思路是假定某人拥有大量物品,重量各不同。此人通过秘密地选择一部分物品并将它们放 到背包中来加密消息。背包中的物品中重量是公开的,所有可能的物品也是公开的,但背包中的物品是保密的。附加一定的限制条件,给出重量,而要列出可能的物品,在计算上是不可实现的。背包问题是熟知的不可计算问题,背包体制以其加密,解密速度快而其人注目。但是,大多数转载 2015-09-10 19:13:46 · 867 阅读 · 0 评论 -
动态规划之背包问题-总结和拓展(二)
背包问题是在1978年由Merkel和Hellman提出的。它的主要思路是假定某人拥有大量物品,重量各不同。此人通过秘密地选择一部分物品并将它们放 到背包中来加密消息。背包中的物品中重量是公开的,所有可能的物品也是公开的,但背包中的物品是保密的。附加一定的限制条件,给出重量,而要列出可能的物品,在计算上是不可实现的。背包问题是熟知的不可计算问题,背包体制以其加密,解密速度快而其人注目。但是,大多数一转载 2015-09-10 19:08:20 · 387 阅读 · 0 评论 -
动态规划之背包问题(一)
转:http://www.hawstein.com/posts/dp-knapsack.html一切都要从一则故事说起。话说有一哥们去森林里玩发现了一堆宝石,他数了数,一共有n个。 但他身上能装宝石的就只有一个背包,背包的容量为C。这哥们把n个宝石排成一排并编上号: 0,1,2,…,n-1。第i个宝石对应的体积和价值分别为V[i]和W[i] 。排好后这哥们开始思考: 背包总共也就只转载 2015-09-10 17:24:11 · 328 阅读 · 0 评论 -
字符串搜索算法Boyer-Moore由浅入深
1. 简单介绍在用于查找子字符串的算法当中,BM(Boyer-Moore)算法是目前被认为最高效的字符串搜索算法,它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下,比KMP算法快3-5倍。该算法常用于文本编辑器中的搜索匹配功能,比如大家所熟知的GNU grep命令使用的就是该算法,这也是GNU grep比BSD grep快的一个重要原因,具体推荐看下我转载 2015-09-09 15:16:36 · 480 阅读 · 0 评论 -
取石子游戏-博弈
取石子是一种很有意思的游戏,一般给你若干堆石子,两个人根据指定规则轮流从中取若干石子,规定最后取光石子玩家获胜,假定双方玩家都采取最优策略,问先手是否有什么必胜策略。这个游戏看似简单,实则蕴含深刻的数学原理,本文将分析几种常见的取石子游戏的玩法。问题一题目:有一排石头共n个,两个玩家轮流从中取走若干石头,每个玩家每次可以选择任意的一个石头,或者两个相邻的石头,最后取光石头的转载 2015-08-04 19:03:43 · 2541 阅读 · 0 评论 -
取石子游戏
题目堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。 取完者胜.先取者负输出2,先取者胜输出1.思路使用动态规划思想,给定n个石子时,因为条件2,所以如果想要胜利,需满足以下条件: 1. 当前取石子的个数不能超过当前剩余石子个数的1/3。 2. 给对方剩余的石子数量k,必须是: m[k]为空;(也即,无论对方下次原创 2015-08-04 11:41:14 · 416 阅读 · 0 评论 -
n*n匹马和n赛道,求前k名问题
这个问题的非一般形式在网上有很多的分析,比如http://blog.csdn.net/hackbuteer1/article/details/7481342、http://liuyangxdgs.blog.163.com/blog/static/2913776320111056839612/。下面将这个问题一般化,进一步分析这类问题的规律,找出一般性的解法。问题描述转载 2015-09-01 10:03:31 · 1116 阅读 · 0 评论 -
海量数据等概率选取问题
1、问题定义可以简化如下:在不知道文件总行数的情况下,如何从文件中随机的抽取一行,并且每行被抽中的概率相等?首先想到的是我们做过类似的题目吗?当然,在知道文件行数的情况下,我们可以很容易的用C运行库的rand()函数随机的获得一个行数,从而随机的取出一行,但是,当前的情况是不知道行数,这样如何求呢?我们需要一个概念来帮助我们做出猜想,来使得对每一行取出的概率相等,也即随机。这个概念即蓄水池转载 2015-09-17 17:33:12 · 589 阅读 · 0 评论