随笔分类 -  经典算法专题

摘要:这篇我们看看最长公共子序列的另一个版本,求字符串相似度(编辑距离),我也说过了,这是一个非常实用的算法,在DNA对比,网页聚类等方面都有用武之地。一:概念 对于两个字符串A和B,通过基本的增删改将字符串A改成B,或者将B改成A,在改变的过程中我们使用的最少步骤称之为“编辑距离”。比如如下的字符串:我们通过种种操作,痉挛之后编辑距离为3,不知道你看出来了没有?二:解析 可能大家觉得有点复杂,不好理解,我们试着把这个大问题拆分掉,将"字符串 vs 字符串“,分解成”字符 vs 字符串“,再分解成”字符 vs 字符“。<1> ”字符“vs”字符“ 这种情况是最简单的了,比如”A 阅读全文
posted @ 2012-11-11 23:45 一线码农 阅读(11688) 评论(4) 推荐(7) 编辑
摘要:一: 作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功。二:概念 举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个,比如其中的cb,cgs等等都是其子序列,我们可以看出子序列不见得一定是连续的,连续的那是子串。 我想大家已经了解了子序列的概念,那现在可以延伸到两个字符串了,那么大家能够看出:cnblogs和belong的公共子序列吗?在你找出的公共子序列中,你能找出最长的公共子序列吗?从图中我们看到了最长公共子序列为blog,仔细想想我们可以发现其实最长公共子序列的个数不是唯一的,可能会有两个以上,但是长度... 阅读全文
posted @ 2012-11-11 00:55 一线码农 阅读(75770) 评论(20) 推荐(29) 编辑
摘要:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又多吃了一个。以后每天都吃前一天剩下的一半再加一个。到第10天刚好剩一个。问猴子第一天摘了多少个桃子?分析: 这是一套非常经典的算法题,这个题目体现了算法思想中的递推思想,递归有两种形式,顺推和逆推,针对递推,只要 我们找到递推公式,问题就迎刃而解了。 令S10=1,容易看出S9=2(S10+1),简化一下 S9=2S10+2 S8=2S9+2 ..... Sn=2Sn+1+2遥想公瑾当年,老师说递归是最... 阅读全文
posted @ 2012-08-08 12:40 一线码农 阅读(26218) 评论(23) 推荐(8) 编辑
摘要:古代数学巨著《九章算数》中有这么一道题叫“五家共井,甲二绠(汲水用的井绳)不足,如(接上)乙一绠;乙三绠不足,如丙一绠;丙四绠不足,如丁一绠;丁五绠不足,如戊一绠;戊六绠不足,如甲一绠,皆及。意思就是说五家人共用一口井,甲家的绳子用两条不够,还要再用乙家的绳子一条才能打到井水;乙家的绳子用三条不够,还要再用丙家的绳子一条才能打到井水;丙家的绳子用四条不够,还要再用丁家的绳子一条才能打到井水;丁家的绳子用五条不够,还要再用戊家的绳子一条才能打到井水;戊家的绳子用六条不够,还要再用甲家的绳子一条才能打到井水。最后问:井有多深?每家的绳子各有多长?分析:同样这套题也是属于不定方程,拿这个题... 阅读全文
posted @ 2012-08-06 16:57 一线码农 阅读(18172) 评论(19) 推荐(6) 编辑
摘要:百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱。分析:估计现在小学生都能手工推算这套题,只不过我们用计算机来推算,我们可以设公鸡为x,母鸡为y,小鸡为z,那么我们 可以得出如下的不定方程, x+y+z=100, 5x+3y+z/3=100, 下面再看看x,y,z的取值范围。 由于只有100文钱,则5x<100 => 0<x<20, 同理 0<y<33,那么z=100-x-y, 好,我们... 阅读全文
posted @ 2012-08-05 20:22 一线码农 阅读(67951) 评论(57) 推荐(29) 编辑