
算法模板
CrzayCodess
本人在河海大学读本科,正在学习计算机
展开
-
求两个字符串的最长公共子序列的数量
一个串的子串是指该串的一个连续的局部。如果不要求连续,则可称为它的子序列。 比如对串: “abcdefg” 而言,”ab”,”abd”,”bdef” 等都是它的子序列。 特别地,一个串本身,以及空串也是它的子序列。 对两个串而言,可以有许多的共同的子序列,我们关心的是:它们所共同拥有的长度最大的子序列是多长。 代码如下:#include<iostream>#include<cstdio>原创 2016-03-19 12:13:20 · 1081 阅读 · 0 评论 -
前缀判断
如下的代码判断 needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。比如:"abcd1234" 就包含了 "abc" 为前缀#include<iostream>#include<cstdio>#include<cmath>using namespace std;// haystack_start位整串, needle_start为前缀原创 2016-03-19 15:35:10 · 997 阅读 · 0 评论 -
逆波兰表达式(前缀表达式)
正常的表达式称为中缀表达式,运算符在中间,主要是给人阅读的,机器求解并不方便。例如:3 + 5 * (2 + 6) - 1而且,常常需要用括号来改变运算次序。相反,如果使用逆波兰表达式(前缀表达式)表示,上面的算式则表示为:- + 3 * 5 + 2 6 1不再需要括号,机器可以用递归的方法很方便地求解。为了简便,我们假设:1. 只有 + - * 三种运算符2. 每个运算数都是一个小于10的非负整原创 2016-03-19 16:12:21 · 1064 阅读 · 0 评论 -
手写快速排序
快速排序 排序在各种场合经常被用到。 快速排序是十分常用的高效率的算法。其思想是:先选一个“标尺”, 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于它。这样,排序问题就被分割为两个子区间。 再分别对子区间排序就可以了。 主要思想:先选择第一个数字作为标尺,然后分别从第二个数字往右找,找到比第一个数大的数,和从倒数第一个数字往左找,找到比第一个数小的数,然原创 2016-03-23 00:20:10 · 1639 阅读 · 0 评论 -
bfs模板(从任意起点走到终点所需步数)
大钉骑马走江湖时间限制(C/C++):1000MS/3000MS 运行内存限制:65536KByte 总提交:76 测试通过:29描述江湖是什么,对于在象棋界厮杀的大钉来说,江湖就是一个矩阵,他的目标,就是在江湖之中骑着马,从他的位置出发,走到终点。当然,大钉的马也遵从中国象棋中的“马走日”的规则,而且在矩阵中,也会有一些障碍物,马不能跳到障碍物上;如果大钉原创 2016-04-26 13:08:34 · 1553 阅读 · 0 评论 -
Bellman-Ford(单源最短路径,判断是否有负权环路)
Bellman-Ford 1,.初始化:将除源点外的所有顶点的最短距离估计值 d[v] ←+∞, d[s] ←0; 2.迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集V中的每个顶点v的最短距离估计值逐步逼近其最短距离;(运行|v|-1次) 3.检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回fal原创 2016-04-15 22:52:48 · 668 阅读 · 0 评论 -
深度理解链式前向星
我们首先来看一下什么是前向星.前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度. 用head[i]记录以i为边集在数组中的第一个存储位置.那么对于下图:我们输入边的顺序为:1 2 2 3 3转载 2016-04-21 22:26:13 · 706 阅读 · 0 评论 -
dp 母函数 入门 + 模板
dp 母函数 入门 + 模板在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。母函数可分为很多种,包括普通母函数、指数母函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个母函数。构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数转载 2016-05-07 17:54:13 · 1190 阅读 · 0 评论