自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (4)
  • 收藏
  • 关注

原创 多数派问题

假设数组v[1...n]中的每个元素v[i](1对于实际应用场景,我们可以用下面的方法解决该问题,用一个m元素的数组,分别记录各候选人的得票数,同时记录当前得票最多的候选人的得票总数,然后依次读入v[1...n]这n张选票,对每张选票对应的候选人的得票数加1。所有选票处理完毕后,判断得票数最多的候选人的得票数,是否大于n/2。该算法的时间复杂度为O(n),空间复杂度为O(m)。一般情况,候选人

2011-12-18 16:43:13 4135 1

原创 一次买卖问题(single sell profit)

问题是这样的,假设有一只股票a,a[1...n]代表股票a在第1到第n天所对应的股价,试找到一对值i,j,满足1  1 2 3 4 5 6 7 8 9101112 a271828459045用白话说,就是你已经知道了某只股票在若干天中的价格,现在需要做的是

2011-12-16 19:32:44 3830 1

原创 全排列生成算法(一)

对于给定的集合A{a1,a2,...,an},其中的n个元素互不相同,如何输出这n个元素的所有排列(全排列)。递归算法这里以A{a,b,c}为例,来说明全排列的生成方法,对于这个集合,其包含3个元素,所有的排列情况有3!=6种,对于每一种排列,其第一个元素有3种选择a,b,c,对于第一个元素为a的排列,其第二个元素有2种选择b,c;第一个元素为b的排列,第二个元素也有2种选择a,c,……,

2011-12-15 16:47:23 51272 6

原创 全排列生成算法(三)

基于阶乘数的全排列生成算法,是另一种通过序列顺序,输出全排列的算法。所谓阶乘数,实际上和我们常用的2进制,8进制,10进制,16进制一样,是一种数值的表示形式,所不同的是,上面这几种进制数,相邻位之间的进制是固定值,以10进制为例,第n位与第n+1位之间的进制是10,而阶乘数,相邻两位之间的进制是变值,第n位与第n+1位之间的进制是(n+1)!。对于10进制数,每一位的取值范围也是固定的0~9,而

2011-12-15 16:00:13 5980

原创 全排列生成算法(二)

Steinhaus-Johnson-Trotter算法是一种基于最小变换的全排列生成算法,对于排列a[1...n],该算法通过将a[i],与a[i-1](或a[i+1])进行交换,生成下一个排列,直到所有排列生成完毕为止,这样,当前排列与其后继排列只是两个相邻位置的元素发生了调换。当然,为了防止重复生成某一个排列,算法并非随意调换某两个元素之间的位置,其生成全排列的具体规则如下。首先,以字

2011-12-15 14:34:57 5782

原创 再谈AC算法

在我的《AC算法详解》一文中,还存在一个很大的疏漏,那就是用蛮力法计算自动机的fail跳转表,这实际上是一个极度低效的方法。在Aho,Corasick两人的论文中,给出的是逐层求fail表的方法,两人证明了这个方法可以在O(n)(其中n为所有模式串的总长度和)时间复杂度内计算出模

2011-10-18 14:51:05 4089 2

原创 再谈KMP/BM算法(II)

KMP算法中next[i]与Zi(S)的对应关系我在《KMP算法详解》一文中已经介绍了next[i]的含义,对于S[i],next[i]的意义是,如果存在k使得S[1...i-k]=S[k...i-1]且S[i-k+1]!=S[i],那么next[i]=i-k+1。实际上对于满足条件的k,其Z值Zk(S)就满足k+Zk(S)=i,next[i]=Zk(S)+1,所以我们可以用如下方法根据模式串

2011-10-17 10:16:45 2232

原创 再谈KMP/BM算法(I)

之前我的《BM算法详解》一文中有一个巨大的缺憾,就是没能给出计算模式串好后缀跳转表的高效算法。Robert S.Boyer和J Strother Moore两人的论文中,不知什么原因,并没有给出这样的算法,蛮力算法O(n^3)的时间复杂度使得BM算法的实用性大打折扣。实际上线性时间内计算出模式串的好后缀跳转表的算法是存在,但是在介绍这个算法之前,我要向大家推荐一本字符串处理方面的权威著作《Al

2011-10-16 17:50:49 6582 1

原创 最大子串和问题(Maximum Subarray)

又一个经典问题,对于一个包含负值的数字串array[1...n],要找到他的一个子串array[i...j](0这里我们需要注意子串和子序列之间的区别。子串是指数组中连续的若干个元素,而子序列只要求各元素的顺序与其在数组中一致,而没有连续的要求。对于一个元素数为n的数组,其含

2011-10-10 16:46:34 36474 12

原创 社区反作弊工作的一点体会

针对社区网站的作弊行为大致可以分为两种,一种是个人在社区中发布的所谓的不和谐内容;另一种是利用社区的信息传播机制向社区内的其他用户进行的广告推广活动,社区进行SEO,信息诈骗,垃圾灌水等行为也属于此类。前者在西方国家算不算是作弊还不好说,但是广告贴,垃圾贴,却是任何社区都要认真对

2011-09-29 16:27:41 8920 3

原创 Double-Array详解

Trie结构是模式匹配中经常用到的经典结构,在字符串处理中发挥着重要的作用,比如分词算法,就会利用Trie结构将分句的已知词条先识别出来,然后再判断剩下的未识别部分是否是新的未知词。经典的Trie结构如下图所示,是一个典型的多叉树结构,为了保证用Trie结构进行模

2011-09-28 15:22:29 9573 8

原创 模式匹配之路

之前我的文章中,介绍了KMP,BM,AC,WM等几个经典的模式匹配算法,本文我将对常用的模式匹配算法做一小结。模式匹配算法的关系图如下所示:这里有几个我的文章中暂时没有涵盖的算法,这里做一简要说明。Rabin-Karp算法,这是一个基于散列值的模式匹配算法,根据散

2011-09-26 20:54:19 3624

原创 WM算法详解

提到多模式匹配算法,就得说一下Wu-Manber算法,其在多模式匹配领域相较于Aho-Corasick算法,就好象在单模式匹配算法中BM算法相较于KMP算法一样,在绝大多数场合,Wu-Manber算法的匹配效率要好于Aho-Corasick算法。这个算法是由吴升(台湾)和他的导师

2011-09-26 19:44:04 22255 11

原创 AC算法详解

AC算法是Alfred V.Aho(《编译原理》(龙书)的作者),和Margaret J.Corasick于1974年提出(与KMP算法同年)的一个经典的多模式匹配算法,可以保证对于给定的长度为n的文本,和模式集合P{p1,p2,...pm},在O(n)时间复杂度内,找到文本中的所有目标模式,而与模式集合的规模m无关。正如KMP算法在单模式匹配方面的突出贡献一样,AC算法对于多模式匹配算法后续的发

2011-09-20 15:13:30 48285 10

原创 BM算法详解

1977年,Robert S.Boyer和J Strother Moore提出了另一种在O(n)时间复杂度内,完成字符串匹配的算法,其在绝大多数场合的性能表现,比KMP算法还要出色,下面我们就来详细了解一下这一出色的单模式匹配算法,在此之前推荐读者读一下我的另一篇文章《KMP算法详解》,对于透彻理解BM算法大有裨益。在讲解Boyer-Moore算法之前,我们还是要提一提KMP算法的老例子,当模

2011-09-19 13:55:52 59063 11

原创 KMP算法详解

KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,第一次接触该算法的读者往往会看得一头雾水,主要原因是KMP算法在构造跳转表next过程中进行了多个层面的优化和抽象,使得KMP算法进行模式匹配的原理显得不那么直白。本文希望能够

2011-09-16 23:38:00 211877 73

原创 折行算法(word warp)

在英文字处理程序中,由于单词都是由字母序列构成,所以当输入到一行的末尾的时候,就会遇到想要输入的单词长度大于所剩余的空白长度的情况,这就是折行问题。对于手写文本,我们可以用连字符‘-’把单词分割到两行上,但是对于字处理程序而言,其拥有更强的处理能力,可以通过运算来避免单词被分割到

2011-09-14 21:23:19 6786 1

原创 扔鸡蛋问题详解(Egg Dropping Puzzle)

经典的动态规划问题,题设是这样的:如果你有2颗鸡蛋,和一栋36层高的楼,现在你想知道在哪一层楼之下,鸡蛋不会被摔碎,应该如何用最少的测试次数对于任何答案楼层都能够使问题得到解决。如果你从某一层楼扔下鸡蛋,它没有碎,则这个鸡蛋你可以继续用如果这个鸡蛋摔碎了,则你可以用来测试的鸡蛋减少一个所有鸡蛋的质量相同(都会在同一楼层以上摔碎)对于一个鸡蛋,如果其在楼层i扔下的时候摔碎了,对于任何

2011-09-12 15:59:49 42061 16

原创 最长递增子序列详解(longest increasing subsequence)

一个各公司都喜欢拿来做面试笔试题的经典动态规划问题,互联网上也有很多文章对该问题进行讨论,但是我觉得对该问题的最关键的地方,这些讨论似乎都解释的不很清楚,让人心中不快,所以自己想彻底的搞一搞这个问题,希望能够将这个问题的细节之处都能够说清楚。对于动态规划问题,往往存在递推解决

2011-09-10 18:56:43 75868 12

XUNIT测试模式--测试码重构(英文版)

1.本书获得2008年 Jolt Award技术图书类生产力大奖。. 2.本书作者Gerard Meszaros是ClearStream Consulting(专注于敏捷开发的Calgary咨询机构)的首席科学家和高级顾问。他具有十多年的自动化单元测试架构经验,是测试自动化模式、软件和测试重构以及易测性设计方面的知名专家。.. 3.本书是使用当今最受欢迎的单元测试架构xUnit写自动化测试的权威指南。 4.本书适用于采用敏捷或常规开发过程的开发人员、管理人员和测试人员,而不管他们是进行测试驱动开发还是最后写测试。...

2009-04-14

多处理器编程的艺术(英文版)

工业界称为多核的多处理器机器正迅速地渗入计算的各个领域。多处理器编程要求理解新型计算原理、算法及编程工具,至今很少有人能够精通这门编程艺术。现今,大多数工程技术人员都是通过艰辛的反复实践、求助有经验的朋友来学习多处理器编程技巧。这本最新的权威著作致力于改变这种状况,作者全面阐述了多处理器编程的指导原则,介绍了编制高效的多处理器程序所必备的算法技术。了解本书所涵盖的多处理器编程关键问题将使在校学生以及相关技术人员受益匪浅。..

2009-04-14

Visual Studio 2005 Team System软件测试专家教程(英文版)

介绍VS 2005 Team System Test Edition和Developer Edition的书,比较新,内容很充实。比MSDN生涩的文档要强。

2009-04-14

GCC权威指南,第二版,英文版

除GCC文档之外,目前有关GCC的最权威读物。

2009-04-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除