- 博客(16)
- 资源 (4)
- 收藏
- 关注
原创 图论常用的构图方法
一、最常用的邻接图(最简单的构图方法)用一个二维数组表示节点i到j的路径长度,可以初始化为-1,来表示不存在i到j的路径这种方法的缺点在于占用空间较大,在用边频繁的时候不方便,代码如下#define Max_Node_Num 1000int graph[Max_Node_Num][Max_Node_Num];int node_num,edge_num;void build_gra
2012-03-28 13:42:40 1295
转载 最优性原理及其证明
最优性原理是指“多阶段决策过程的最优决策序列具有这样的性质:不论初始状态和初始决策如何,对于前面决策所造成的某一状态而言,其后各阶段的决策序列必须构成最优策略”这个最优性原理是动态规划的基础。这个重要原理从概念上讲很好理解,意思是:如下图所示,如果给定从A到C的最优路线,那么最优路线上任意一点B到C的路线Ⅱ必须是B到C的最优路线。即如果弧AB+弧BⅡC是A到C的最优路线,则最优
2012-03-28 10:28:40 8845 1
转载 ZJU 1990 Subway tree systems - 树的最小表示
题目大意:初始时站在树的根节点,若朝着远离根的方向走,记录“0”,接近根的方向走记录“1”。并且树的每一条边只能来回走一次(即向下和返回)。一个合法的01序列可以描述出一棵树的形态。现在给出两个合法的01序列,判断两棵树是否同构。分析:由于根节点确定,若两棵树同构,无非就是把子树的位置交换了一下。很自然的想法就是:将树的子树按照某种规则进行排序,若排序之后两个字符串相等,则同构;否则不同构。现在来分析一下01序列,可以看出,当一个串的“0”和“1”个数相等时,恰好就是一棵子树。例如:00100111010
2011-03-16 19:32:00 729
转载 经典证明:Prüfer编码与Cayley公式
Cayley公式是说,一个完全图K_n有n^(n-2)棵生成树,换句话说n个节点的带标号的无根树有n^(n-2)个。今天我学到了Cayley公式的一个非常简单的证明,证明依赖于Prüfer编码,它是对带标号无根树的一种编码方式。 给定一棵带标号的无根树,找出编号最小的叶子节点,写下与它相邻的节点的编号,然后删掉这个叶子节点。反复执行这个操作直到只剩两个节点为止。由于节点数n>2的树总存在叶子节点,因此一棵n个节点的无根树唯一地对应了一个长度为n-2的数列,数列中的每个数都在1到n的范围内。下面我
2010-11-19 09:35:00 1117
转载 Dinic 算法模板
一、Dinic算法的步骤以及复杂度分析算法步骤:<br />Dinic算法的思想也是分阶段地在层次图中增广。它与最短路径增值算法不同之处是:在Dinic算法中,我们用一个dfs过程代替多次bfs来寻找阻塞流。下面给出其算法步骤:<br />1、初始化流量,计算出剩余图2、根据剩余图计算层次图。若汇点不在层次图内,则算法结束3、在层次图内用一次dfs过程增广4、转步骤2<br />下面是dfs的过程:<br />ps;While outdegree(s)>0 up.top;
2010-09-15 01:21:00 6611 1
原创 sap算法详解与模板
关键概念与性质:距离函数(distance function),我们说一个距离函数是有效的当且仅当满足有效条件(valid function)(1)d(t)= 0;(2)d(i)性质1:如果距离标号是有效的,那么d(i)便是残余网络中从点i到汇点的距离的下限;证明:令任意的从i结点到汇点t长度为k的路径,设为i= i1-i2-i3...ik+1=td(i(k)) 性质2:允许弧(边):如果对于边rij>0,且d(i)= d(j)+1,那么称为允许边
2010-08-02 22:27:00 6926 4
转载 无需刻录DMG光盘,教你在VMWare下安装MAC OS X Snow Leopard 10.6
<br />感谢每一个在互联网上分享智慧的人。<br /><br />补充:1、本文内容已经在Windows Vista + VMware Workstation 7.0 + MAC OS X Snow Leopard 10.6 环境下安装成功!<br /><br /> 2、当你在虚拟机里浏览镜像文件时看不到DMG文件,需要点Browse,将文件类型CD-ROM images(*.iso)改为All files (*.*)。<br /><br /> 3、请仔细阅读文中由粗体字标出的部分,忽略这些部分将导
2010-07-10 03:15:00 973
转载 Android 1.5r3+Eclipse+ADT 0.9.1+JDK 6u14=Android手机开发平台
<br /><br />1. 文件准备:<br />- Eclipse:http://www.eclipse.org/downloads/ 下载Eclipse IDE for Java EE Developers (189 MB)<br />- Android 1.5 R3:http://developer.android.com/intl/zh-CN/sdk/1.5_r3/index.html 根据不同系统下载相应SDK,最新的是R3版(191MB)<br />- JDK 6.0 Up
2010-07-09 00:58:00 1839
转载 Windows下 Android开发平台搭建
<br /><br /> <br />成果如上图,下面开始讲述平台搭建<br /> <br />系统配置:<br />深度 windows XP sp3<br />首先安装JDK,Eclipse,Android SDK安装<br />注意这些软件的版本,我在搭建过程中因为版本不适合而导致了ADT安装不成功,走了不小的弯路。<br />1.首先下载JDK (此处为我下载地址,您需要下载请到sun官网,最新版的)下载好了以后,采用默认安装,一路Next就可以了。<br />安装好了以后, 要检查是否安装成功,打
2010-07-09 00:55:00 729
转载 memset用法
memset的正规用法是只能用来初始化char类型的数组的,也就是说,它只接受0x00-0xFF的赋值然而,在大多数情况下,需要对一个double或int的数组赋一个相对很大或很小的初值 以下的赋值方式是不正确的: memset(arr,2147483647,sizeof(arr)); 但是可以用一些技巧,来得到一个差不多的最大值,比如像: memset(arr,0x7F,sizeof(arr)); 它将arr中的值全部赋为2139062143 这是用memset对int赋值所能达到的最大值 如下demo是
2010-06-12 16:43:00 4367
转载 求二分图最大权匹配的km算法
这个算法的本质还是不断的找增广路;KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立。KM算法的正确性基于以下定理: 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。这个定理是显然的。因
2010-06-12 09:14:00 2509
原创 匈牙利算法
邻接矩阵-C#include #include int n1, n2, m, ans;int result[101]; //记录V2中的点匹配的点的编号bool state [101]; //记录V2中的每个点是否被搜索过bool data[101][101];//邻接矩阵 true代表有边相连void init(){ int t1, t2; memset(data, 0, sizeof(data)); memset(result, 0, sizeof(res
2010-06-12 08:23:00 575
原创 有向图强连通分量Kosaraju算法
最关键通用部分:强连通分量一定是图的深搜树的一个子树。反图定义:如果有向图存在边u->v,那么v->u属于改图的反图,记为GT。基本思路:这个算法可以说是最容易理解,最通用的算法,其比较关键的部分是同时应用了原图G和反图GT。(步骤1)先用对原图G进行深搜形成森林(树),(步骤2)然后任选一棵树对其进行深搜(注意这次深搜节点A能往子节点B走的要求是EAB存在于反图GT),能遍历到的顶点就是一个强连通分量。余下部分和原来的森林一起组成一个新的森林,继续步骤2直到 没有顶点为止。改进思路:当然,基本思路实现起来
2010-06-12 02:28:00 1876
转载 有向图强连通分量的Tarjan算法
[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}也分别是两个强连通分量。直接根据定义,用双向遍历取交集的方法求强连通分量,时间复杂度为O(N^2+M)。更好的方法是Kosara
2010-06-11 20:09:00 939
原创 最短路算法总结
1.floyd算法 (n^3复杂度)基本思想:开始设集合S的初始状态为空,然后依次将0,1,。。n-1定点加入,同时用d[i][j]保存从i到j,仅经过S中的定点的最短路径,在初始时刻,d[i][j] = A[i][j]中间不经过任何节点,然后依次向S中插入节点,并进行如下更新d(k)[i][j] = min{ d(k-1)[i][j],d(k-1)[i][k]+d(k-1)[k][j]}
2010-05-15 12:41:00 5498
java Streams and Serialization 详解
2012-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人