![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法资料
文章平均质量分 63
logic_nut
这个作者很懒,什么都没留下…
展开
-
Floyd-Warshall算法
输入是n*n的矩阵W,输出是各顶点间的最短路径权值的矩阵D(n)。D(k)表示中间节点限制为(1,2,…,k)时的各顶点间最短路径权值矩阵,d(i,j,k)表示D(k)中点对(i,j)的最短路径权值。 FLOYD-WARSHALL(W)n=rows(W)for k=1 to n fori=1 to n for j=1 to n d(i,j,k)=min(d原创 2009-07-13 17:08:00 · 1370 阅读 · 0 评论 -
计数排序(O(n))
当k(k是数组中数的范围(1~k))比较小的时候,可获得O(n)的时间复杂度.#include using namespace std;const int arrLen = 5 ;void countingSort( int * a, int * b, int k) { // a数组元素在[0..k] int i, j;转载 2009-08-21 16:15:00 · 513 阅读 · 0 评论 -
如何寻找欧拉回路、欧拉通路(套圈法)
传说中的套圈法。算法思想的朴素表达对于欧拉图,从一个节点出发,随便往下走(走过之后需要标记一下,下次就不要来了),必然也在这个节点终止(因为除了起始节点,其他节点的度数都是偶数,只要能进去就能出来)。这样就构成了一个圈,但因为是随便走的,所以可能会有些边还没走过就回来了。我们就从终止节点逆着往前查找,直到找到第一个分叉路口,然后从这个节点出发继续上面的步骤,肯定也是可以找到一条回到这个点的原创 2009-08-23 07:01:00 · 14725 阅读 · 2 评论 -
差分约束系统
摘自百度百科,很短很精炼 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。 求解差分约束系统,可以转化成图论的单源最长路径问题。 观察xj-xi<=bk,会转载 2009-08-23 09:14:00 · 736 阅读 · 1 评论 -
求网络的最小割
求网络的最小割最大流最小割定理,首先求得最大流。然后残留网络中,从源点出发深度优先遍历,所有被遍历到的点构成点集S,剩余的点构成点集T。则edge即是最小割的割边集。转载 2009-08-29 11:28:00 · 748 阅读 · 0 评论 -
STL map常用操作简介
1。目录 map简介 map的功能 使用map 在map中插入元素 查找并获取map中的元素 从map中删除元素 2。map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。 3。map的功转载 2009-08-30 11:35:00 · 599 阅读 · 0 评论 -
[转自 matrix67.com]KMP算法详解
如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="Immatrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的M转载 2009-08-31 15:39:00 · 530 阅读 · 0 评论 -
KMP模板
// pku 1961.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "string.h" #include using namespace std; const int maxn=1000005; ch原创 2009-08-31 16:30:00 · 1095 阅读 · 0 评论 -
C++ 运算符优先级列表
C++ 运算符优先级列表 http://www.cppreference.com/operator_precedence.htmlPrecedence Operator Description Example Associativity 1()原创 2009-08-30 18:20:00 · 440 阅读 · 0 评论 -
最长递增子序列 LIS
对于这个问题,最直观的DP方法是cnt[i]表示以height[i]结束的最长递增子序列的元素的个数,递归方程是cnt[i]=max{height[j]换一个DP方法,以min_height[i]表示长度是i的递增子序列的第i个元素的最小高度。很明显min_height[i]是递增的,于是在搜索时可以用二分,这样总的效率可以做O(n*lgn)。详细的介绍见下面这篇转载来的文章。 什么是转载 2009-09-09 20:33:00 · 1047 阅读 · 0 评论 -
A*算法
很早以前做最短路径算法研究的时候就看过A*算法,本以为它的作用仅限于这一领域,后来才知道原来A*算法在整个搜索类算法中占有很重要的地位,甚至BFS都只能算是它的特例。下面就以A*算法在最短路径算法中的应用的一段描述来简要介绍下它。特别需要注意的是估价函数h(i)的两个特性。 A*算法和 Dijkstra算法极其相似,其实我觉得 Dijkstra算法就是h(i)=0的A*算法。Lik原创 2009-09-20 10:29:00 · 710 阅读 · 0 评论 -
几个经典的博弈
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty转载 2009-10-21 08:05:00 · 1521 阅读 · 0 评论 -
快速排序模板
自己写的快速排序模板。:-)。第一种是常规形式,第二种加入了随机化数。#include "time.h"#include #include using namespace std;const int max_n=300;void quick_sort(int a[],int first,int last){ int left=first,right=last;原创 2009-08-19 14:08:00 · 855 阅读 · 0 评论 -
判断两线段是否相交
以下代码摘自 http://www.cai0715.cn/read.php?109其中x1,y1,x2,y2是全局变量,存储了一条直线的起始点和终止点坐标。x3,y3,x4,y4是表示另外一条直线。下面函数用来判断两条直线是否相交。//====================================================function cross(tx,ty,ax原创 2009-08-17 12:05:00 · 693 阅读 · 0 评论 -
并查集及其应用
转自 http://hi.baidu.com/fandywang_jlu/blog/item/b49e40893ddbb0b00f244485.html 并查集的学习告一段落,整理总结一下与大家共勉~ 并查集:(union-find sets)是一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分转载 2009-08-16 15:20:00 · 647 阅读 · 0 评论 -
线段树的实现(模板)
线段树在一类问题中,我们需要经常处理可以映射在一个坐标轴上的一些固定线段,例如说映射在OX轴上的线段。由于线段是可以互相覆盖的,有时需要动态地取线段的并,例如取得并区间的总长度,或者并区间的个数等等。一个线段是对应于一个区间的,因此线段树也可以叫做区间树。线段树的构造思想线段树是一棵二叉树,树中的每一个结点表示了一个区间[a,b]。每一个叶子节点表示了一个单位区间。对于每转载 2009-07-25 14:52:00 · 1734 阅读 · 0 评论 -
stl中的优先队列
STL中优先队列的使用,关键是提供恰当的比较方式供队列内部使用。对于默认类型,比较符的选择确定了该优先队列是最大还是最小优先队列,对于自定义的结构体,如果比较方式没有选择好,会出现编译通过,但在第二次插入时出现运行时错误的问题。 头文件 template class Type, class Container=vector, class Comp原创 2009-07-26 12:22:00 · 2576 阅读 · 0 评论 -
Bellman-Ford 算法及其优化
Bellman-Ford 算法及其优化Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题。Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好好思考),而Dijkstra算法只能处理边权非负的问题,因此 Bellman-Ford算法的适用面要广泛一些。但是,原始的Bellman-Ford算法转载 2009-07-31 10:49:00 · 2139 阅读 · 1 评论 -
网络最大流和最小费用流
这段时间复习了下网络流模型,感觉比以前的理解有了长足进展,虽然我知道这东西难就难在建模上,而它的算法本身其实难度不大,但我还是决定说一些我的理解,毕竟理解了本质的东西运用起来才会更灵活。最大流的求解一般有两类算法(用费用流附带求出的不列入考虑范围),就是增广路(FF)系列和预流推进(PF)系列。在很多地方都看到推荐使用后者,因为效率更高,但其实不然,今天我这篇文章就是要重点介绍前者,相信大家看转载 2009-08-04 10:21:00 · 2269 阅读 · 0 评论 -
二分图最大匹配问题匈牙利算法
研究了几个小时,终于明白了。说穿了,就是你从二分图中找出一条路径来,让路径的起点和终点都是还没有匹配过的点,并且路径经过的连线是一条没被匹配、一条已经匹配过,再下一条又没匹配这样交替地出现。找到这样的路径后,显然路径里没被匹配的连线比已经匹配了的连线多一条,于是修改匹配图,把路径里所有匹配过的连线去掉匹配关系,把没有匹配的连线变成匹配的,这样匹配数就比原来多1个。不断执行上述操作,直到找不到这样的原创 2009-08-07 00:33:00 · 607 阅读 · 0 评论 -
最小路径覆盖
在一个PXP的有向图中, 路径覆盖 就是在图中找一些路经,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每每条路径就是一个弱连通子集. 由上面可以得出: 1.一个单独的顶点是一条路径; 2.如果存在一路径p1,p2,......pk,其转载 2009-08-07 10:23:00 · 687 阅读 · 0 评论 -
最小点覆盖
无向图中,最少需要多少个点可以覆盖所有的边。一条边被覆盖是指至少有一个和它相邻的点被选中。特别的,如果该图是二分图,有 最小点覆盖=最大二分匹配。原创 2009-08-07 11:18:00 · 2181 阅读 · 0 评论 -
常见的hash函数
转自http://hi.baidu.com/aconly/blog/item/5c82eb76f70f601cb051b952.html 字符串的 hash (有许多现成函数,选择合适的就行) poj 2503 int ELFhash(char *key) { unsigned long h=0; while(*key)转载 2009-08-08 18:23:00 · 942 阅读 · 0 评论 -
欧拉图
昨天做题用到了欧拉图,本来刚看到这个名词我是不知道什么是欧拉图的,wiki了一下发现原来欧拉图就是小学奥数做腻了的"一笔画"问题... 图论起源于18世纪,1736年瑞士数学家欧拉(Eular)发表了图论的第一篇论文:哥尼斯堡七桥问题"。在当时的哥尼斯堡城有一条横贯全市的普雷格尔河,河中的两个岛与两岸用七座桥联结起来,见图(1)。当时那里的居民热衷于一个难题:游人怎样不重复地走遍七转载 2009-08-09 12:01:00 · 2490 阅读 · 0 评论 -
扩展欧几里德算法
Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 <! /* Style原创 2009-08-12 10:55:00 · 1047 阅读 · 0 评论 -
三角形基本量
三角形面积、两边夹角正弦值 (向量叉积)aXb=|a|*|b|*sin(angle)两边夹角余弦(向量点积)a*b=|a|*|b|*cos(angle) 内切圆三角形周长*内切圆半径=三角形面积*2外接圆正弦定理 外接圆直径=任意一边长/对角正弦值原创 2009-08-15 11:48:00 · 733 阅读 · 0 评论 -
博弈问题及SG函数(真的很经典)
博弈问题若你想仔细学习博弈论,我强烈推荐加利福尼亚大学的Thomas S. Ferguson教授精心撰写并免费提供的这份教材,它使我受益太多。(如果你的英文水平不足以阅读它,我只能说,恐怕你还没到需要看“博弈论”的时候。)Nim游戏是博弈论中最经典的模型(之一?),它又有着十分简单的规则和无比优美的结论,由这个游戏开始了解博弈论恐怕是最合适不过了。Nim游戏是组合游戏(Comb转载 2009-10-22 08:10:00 · 8496 阅读 · 2 评论