算法学习
helihui123
这个作者很懒,什么都没留下…
展开
-
dijstra算法学习
Dijkstra算法是一种最短路径算法,用于计算一个节点到其它所有节点的最短路径,动态路由协议OSPF中就用到了Dijkstra算法来为路由计算最短路径。算法本身并不是按照我们的正常思维习惯,我们一般会,从原点遍历所有与之相连的节点,找到最短路径,再从最短路径上的那个点遍历与之相连的所有其它点(原点除外),然后依次类推。这样做虽然可以算出一个树形,但是在大多数情况下,这种算法会产生很多次优路径转载 2009-08-26 12:49:00 · 1838 阅读 · 2 评论 -
n皇后递归简单实现(效率不咋滴)
当有4个皇后时候图:写的比较简陋啊 有待改进先:#include#include#include#define size 100int x[size],t,n;//x数组下标表示行 值表示列int place(int r,int c)//r表示行 c表示列{ int i; for(i=1;i<r;i++) if(x[i]==c||(abs原创 2010-02-22 15:14:00 · 453 阅读 · 0 评论 -
祥林嫂精神恍惚痛苦呼唤之关于Suffix Tree[后缀树]
在pongba的讨论组上看到一道Amazon的面试题:找出给定字符串里的最长回文。例子:输入XMADAMYX。则输出MADAM。这道题的流行解法是用后缀树(Suffix Tree)。这坨数据结构最酷的地方是用它能高效解决一大票复杂的字符串编程问题:在文本T里查询T是否包含子串P(复杂度同流行的KMP相当)。 文本T里找出最长重复子串。比如abcdabcefda里abc同da都重复出现,而最长重转载 2010-02-24 19:24:00 · 1314 阅读 · 0 评论 -
再次复习背包。。。
其实不要背包理解成DP里非常特殊的,并且和DP有所不同,,,, 其实不然背包只是DP中的一种而已,,,不要为背包而做背包,,要灵活运用。。。。说起来惭愧我的水平也不咋滴,正在努力中。。。。普通背包就只有物品的重量与价值 这里我稍微高点弄的 物品包括个数,重量,体积,价值。 题目来源:国际大学生程序设计竞赛例题解(三)题目:小明去旅游需要带上一些物品,有5中物品选择,每种原创 2010-03-24 20:00:00 · 430 阅读 · 0 评论 -
二分图匹配
<br />设G=(V,{R})是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二分图。<br /> 给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。<br />选择这样的边数最大的子集称为图的最大匹配问题(maximal matching problem)<br />如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。<br />最大匹配在实转载 2010-07-27 10:46:00 · 383 阅读 · 0 评论 -
TopCoder入门教程 -- sqybi完善版
<br />本文根据经典的TC教程完善和改编。<br />TopCoder:http://www.topcoder.com/<br />基本规则<br />TopCoder的比赛类型很多,最常见的是周赛SRM(Single Round Match),另外还有TCHS SRM(TopCoder High School SRM,题目和SRM一样,仅限中学生参加,参赛者水平较低,据说涨rating很容易),马拉松(Marathon Matchs),还有TCOpen(每年两次的大比赛)之类的比赛。因为大多数人都在做转载 2010-11-30 08:54:00 · 619 阅读 · 0 评论 -
归并排序--基础的算法
<br />思想很简单,就是分治。将大问题分解成小的问题 这里就对半分,每次分成两半,然后分到单个段到只剩两个元素或者一个元素的时候求排序是不是很简单。是的,求好后然后回归。合并,然后就是完成两个有序数组的合并了。很简单吧。<br />我的code参考之用,请勿直接拷贝谢谢:<br />#include <stdio.h>#include <stdlib.h>#include <time.h>#define elemtype int#define MAXSIZE 1000100elemt原创 2010-10-29 11:32:00 · 415 阅读 · 0 评论 -
中位数应用
<br />中位数应用,那些未指明权值的默认权值为1,定义+例题,看完别说你还不懂!!!<br />中位数,编程问题中即n/2位置处的数,主要用的是带权中位数,带权中位数(Weighted Median),<br />其定义和中位数的差别在于:<br />中位数:n个元素集合中,第n/2小的元素。<br />带权中位数:对于n个互不相同的元素集合x1、x2……xn,其权重依次为w1、w2……wn。令W =<br />sigma(wi),则带权中位数xk满足:<br /> sigma(wi)(xi<XK转载 2010-11-12 16:13:00 · 2073 阅读 · 0 评论 -
LCS时间复杂度O(NlogN)
整理了下:LCS(Longest Common Subsequences)最长公共子序列用一般的动态规划时间复杂度O(N^2), 但经过优化可以达到O(NlogN),下面是转载集训队某人的最长递增子序列解题报告。 先回顾经典的O(n^2)的动态规划算法,设A[i]表示序列中的第i个数,F[i]表示从1到i这一段中以i结尾的最长上升子序列的长度,初始时设F[i] = 0(i = 1, 2, ..., len(A))。则有动态规划方程:F[i] = max{F[i], F[j] + 1} (j = 1, 2,原创 2011-03-23 16:41:00 · 2186 阅读 · 0 评论 -
最普通的货郎担问题实现
题目描述:n个顶点,从1顶点开始出发走遍所有结点回到1顶点最小路程。最普通的货郎担问题实现代码: 上图输入:41 3 11 4 72 1 82 3 52 4 13 1 73 2 23 4 64 1 24 2 54 3 30 0 0 #include#include#define inf 0x7fffffff#define min(x,y) ((原创 2010-02-22 09:01:00 · 3686 阅读 · 1 评论 -
摸清一、二维树状数组与线段树
先一维:通过修改点,统计区间.输入Q 5输入C 2 6 5在这个区间里了。所以输出1.再输入Q 3输入C 2 6输入当然是2.#include#include#include#define size 1001typedef struct{ int x,y;}node; int tree[size]; int n;in原创 2010-02-10 22:35:00 · 719 阅读 · 0 评论 -
线段树学习入门
呵呵先看看 http://hi.baidu.com/alpc62/blog/item/469edeca0043e382c8176875.html然后有疑问再看下面的,看看你的问题是否何我一样。 acm的 19:02:21http://hi.baidu.com/alpc62/blog/item/469edeca0043e382c8176875.htmlacm的 19:02:22这个阿原创 2009-08-24 21:50:00 · 862 阅读 · 2 评论 -
三种素数筛选法详解
三种素数筛选法详解第一种:剔除2 3 4 5 6 ... ... 的倍数在i从2开始的增一变化过程中,剔除i的倍数即j*i(j是大于等于2的自然数,j的上限是问题规模M)为了减少重复步骤,可以每当i递增到等于第一个没有被剔除的(素)数时再剔除该数的倍数,重复上述过程至i到达问题规模m的平方根+1需要说明的三个问题:假设循环到第n个数,如果该数没有被剔除,那么该数不能是转载 2009-11-08 10:41:00 · 2179 阅读 · 2 评论 -
图的表示:邻接矩阵和邻接表,哪个用得多,有什么优势?
矩阵方便,用得最多。 当矩阵很稀疏,邻接表省空间。有些算法都是配某一种数据结构使用得最多. 如邻接矩阵配Dijkstra, Floyd等, 邻接表配网络流算法 上面都是别人的回答,这个问题目前到这,以后体会到了其他的可补充。原创 2009-11-16 14:35:00 · 1472 阅读 · 0 评论 -
网络流概念及相关算法介绍
一、引言如同我们可以把一个实际的道路地图抽象成一个有向图来计算两点之间的最短路径,我们也可以将一个有向图看作一个流网络来解决另一类型的问题。流网络比较适合用来模拟液体流经管道、电流在电路网络中的运动、信息网络中信息的传递等等类似的过程。二、网络流和最大流问题参看下图,给定一个有向图G=(V,E),把图中的边看作管道,每条边上有一个权值,表示该管道的流量上限。给定源点原创 2009-11-22 18:39:00 · 864 阅读 · 1 评论 -
sort和qsort 七种qsort排序方法
具体应用:一、对int类型数组排序int num[100];Sample:int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; }qsort(num,100,sizeof(num[0]),cmp);二、对char类型数组排序(同int类型)char word[100];原创 2009-11-23 13:02:00 · 878 阅读 · 0 评论 -
网络流的SAP算法
网络流的最短增广路算法在网络流问题中,最常见的方法是Ford-Fulkerson方法。这种方法每次找出一条残留网络中的增广路径并进行增广。整个算法运行过程满足流的三个性质(容量限制、反对称性、流守恒性)。与此相对的预流推进算法不满足流守恒性。在Ford-Fulkerson方法中,如何寻找增广路径是影响算法效率的主要因素。一种好的思想是每次寻找长度最短的路径。按照这种思想,如果采用BFS寻找增转载 2009-11-24 09:51:00 · 5081 阅读 · 0 评论 -
求网络的最小费用最大流【好资料】
转自:http://charpn.spaces.live.com/blog/cns!AC6DB5E1F5B033F6!204.entry求网络的最小费用最大流说明:网上找的资料,没有图,根据给的信息自己做了一些图,只看了第一个算法,并加入了自己的修改。 求网络的最小费用最大流 一.Ford和Fulkerson迭加算法.基本思路:把各条弧上单位流量的费用看成某种长度,用求解最短原创 2009-11-24 10:24:00 · 1557 阅读 · 0 评论 -
网络流、费用流、最大流最小割定理……
囧,今天第一天电脑竞赛补课,就把最大流的BFS增广、先流预推法、最大流最小割定理、最小费用流讲完了。。汗。。而我,就只记住了BFS增广和最大流最小割定理。最小费用流ms差不多明白了。所以先讲讲BFS增广求最大流的算法吧。简单的来说,就是从S(源)开始BFS,直到到达T(汇)or不存在增广路。所谓增广路就是从S开始到T的一条路径,而且这条路径上的所有边都是非饱和边,即f(i,j)原创 2009-11-24 15:48:00 · 1126 阅读 · 0 评论 -
tzc 3489 Baking Cakes
Baking Cakes时间限制(普通/Java):2000MS/6000MS 运行内存限制:65536KByte<br />总提交: 41 测试通过: 3<br />描述<br /><br />Tom’s birthday is coming up, and you have been put in charge of baking cakes for his monstrous birthday party. However, you have a great numb原创 2011-04-12 10:29:00 · 835 阅读 · 0 评论