算法
文章平均质量分 69
shaolianbo
这个作者很懒,什么都没留下…
展开
-
KMP字符串匹配算法
kmp核心思想:计算模式串的next数组,主串的索引在比较的过程中不回朔#ifndef KMP_H_#define KMP_H_class Kmp{ private: void getNext(char* pstr,int length,int* kmpnext); public: int calcu(char* pmain,char* pchild,int mainl原创 2012-11-29 21:55:42 · 445 阅读 · 0 评论 -
扩展欧几里德算法解线性方程ax+by=c
问题:ax+by=c,已知a、b、c,求解使该等式成立的一组x,y。其中a、b、c、x、y均为整数a,b的最大公约数为gcd(a,b)。如果c不是gcd(a,b)的倍数,则该等式无解,因为等式左边除以gcd(a,b)是整数,而等式右边除以gcd(a,b)后为小数。因此,只有当c是gcd(a,b)的倍数的时候,该等式有解。这样,可以通过计算使ax1+by1=gcd(a,b)成立的x1转载 2013-02-02 17:30:40 · 1322 阅读 · 0 评论 -
欧几里得法求最大公约数
欧几里得法求最大公约数:求a和b的最大公约数记 a mod b=c ,即a=kb+c 设a b的最大公约数为d,则a=m*d b=n*d,m和n互质。c=a-kb=md-knd=(m-kn)d,m和n互质,则n和m-kn互质,c和b的最大公约数也是d所以: "a和b(a>b)的最大公约数等于b和a Mode b的最大公约数",递归或迭代计算,直到余数为0,此时除数为最大公约数原创 2013-02-02 15:58:45 · 5971 阅读 · 0 评论 -
矢量与叉积
矢量 如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如果有向线段p1p2的起点p1在坐标的原点,则可以把它称为矢量 p2矢量的加减 设二维矢量 P = (x1, y1), Q = (x2, y2),则 P + Q = (x1 + x2, y1 + y2), P - Q = (x1 - x2, y1 - y2),且有 P + Q = Q转载 2013-01-31 18:13:26 · 752 阅读 · 0 评论 -
基于trie树的AC多模匹配算法
#!/usr/bin/python2.7#-*-coding=utf-8-*-class Trie: """用来存储关键词和进行多模匹配 """ def __init__(self): self.nodetype=0 self.child={} self.fail=None self.strout="" self.tag=0 def add(self,word)原创 2013-01-30 17:54:26 · 501 阅读 · 0 评论 -
文档的行数未知,怎样在概率控制下,选择输出每行
问题:如何随机从n个对象中选择一个对象,这n个对象是按序排列的,但是在此之前你并不知道n的值? 具体些说,在事先并不知道行数的情况下,如何读一个文本文件,随机选择并输出一行? 解答:我们总是选择第一行,并使用二分之一的概率选择第二行,使用三分之一的概率选择第三行,以此类推。在该过程结束的时候,每一行具有相同的选中概率(1/转载 2013-01-10 21:38:16 · 429 阅读 · 0 评论 -
数组字符串问题------求数组前k小的元素,及其应用
问题:n元数组,问是否有和小于m的k元子数组比如数组{5,4,3,2,1},有和小于10的3元子数组。方法一:枚举所有k元子数组。采用回朔递归的方法。时间复杂度为N^2显然这种方法没有挖掘任何题目的条件。方法二:是否有和小于m的子数组,只有知道和最小的子数组的和是否小于m即可。(同样,如果问是否有和大于m的k元子数组,只需要求和最原创 2012-12-10 16:03:15 · 397 阅读 · 0 评论 -
数组字符串问题----数组的最长递增子数组
问题:求数组的最长递增子数组的长度。eg: 输入数组{1,-1,2,-3,4,-5,6,-7},因为最长递增子数组为1 2 4 6 ,所以返回4.方法一:显然如果能穷举所有的递增子数组(不相包含),就可以得到最长的是什么。假设有一个递增子串的集合,遍历数组的过程中维护这个集合:索引 元素 子串集合0 1 11原创 2012-12-09 15:11:10 · 513 阅读 · 0 评论 -
背包问题-组合问题-排列问题
问题:输出和为n的所有和式,不可有重复式。 (此为完全背包问题,采用容易理解的回朔递归法。 同类的问题是:找零钱问题。)此问题最先想到的是组合:1到n-1的数求组合,和为n的式子。但是每个数字的个数可以多个,而且有限制,这就等同于完全背包了。组合问题与背包问题的关系:1.无重复元素的集合的组合--01背包:在每个搜索点(每个元素)只考虑数字的有无。2.有重复元素的集原创 2012-11-20 15:14:35 · 1273 阅读 · 0 评论 -
素数标记法求n以内所有的素数
算法描述:记bool[n+1] flag用来记录1-n是否为素数。flag[i]==true表示i为素数。int[n] prime用来记录宿数。初始化flag,全为true.从2到n,对于flag[i]==true的,计入prime,并且将所有i的倍数的flag值设为false;最后prime中为所有的素数。证明: 假设在从小到大遍历flag时,遇到fla原创 2012-12-01 17:22:59 · 914 阅读 · 0 评论 -
日程安排问题
/* 活动安排问题。 * 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。 * 每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。 * *//*问题1,怎样安排选择的活动最多? * * 解: 贪心算法。将活动按照结束时间从小到大排列。当前时间为start,从表格中选择原创 2012-11-30 17:48:40 · 392 阅读 · 0 评论 -
最长回文算法
1.直接比较法。假设当前位置为回文的中点,比较两侧的相等字符个数。eg:s1=”123abccba45”,首先变为”1#2#3#a#b#c#c#b#a#4#5#”这样做的原因是使算法更简练:假设字符c是回文中点,但有两种情况,回文是奇数长度和偶数长度。将字符串扩展后,偶数长回文都是在#处分析。int huiwen(char* input,int length,char*原创 2012-11-30 10:36:51 · 404 阅读 · 0 评论 -
1000瓶药有1瓶有毒,需要多少只小白鼠才能试验找出
问:1000瓶药有1瓶有毒,如果小白鼠服用有毒的药,则24小时后死亡。现在需设计一种策略,使用尽可能少的小白鼠,在24小时内找出有毒的药。思路:可以先考虑简单的情况: 喝了毒药之后马上死亡,要求用最少的喝药次数找到毒药:第一次: 将1-500瓶兑在一起喝。如果老鼠死了,则拿另一只老鼠去品尝501-725瓶兑的药水。否则去喝2-250瓶兑的水。采用如此二分法,因为2^10原创 2013-03-08 12:09:26 · 8623 阅读 · 0 评论