algorithm
文章平均质量分 75
cv_yuippe
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
快速排序算法
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。挖坑填数+分治法:原创 2014-03-11 14:17:01 · 573 阅读 · 0 评论 -
类似于分支限界
问题描述:已知一拓扑网络原创 2014-05-29 10:12:39 · 695 阅读 · 0 评论 -
Dijkstra算法和Floyd算法(参考)
最短路径—Dijkstra算法和Floyd算法Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不转载 2014-04-13 14:36:58 · 710 阅读 · 0 评论 -
动态规划之多段图(下)
原图如下:其linji原创 2014-04-10 16:52:20 · 988 阅读 · 0 评论 -
堆排序
二叉堆的性质二叉堆是一颗完全二叉树,最后一层的叶子从左到右排列,其它的每一层都是满的最小堆父结点小于等于其每一个子结点的键值,最大堆则相反每个结点的左子树或者右子树都是一个二叉堆堆的存储通常堆是通过一维数组来实现的。在起始数组为 0 的情形中:父节点i的左子节点在位置 (2*i+1);父节点i的右子节点在位置 (2*i+2);子节点i的父节点在位原创 2014-04-25 11:57:34 · 672 阅读 · 0 评论 -
一次同余方程
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb转载 2014-04-10 20:31:18 · 5377 阅读 · 0 评论 -
欧几里得算法之辗转相除法
欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数:定理: gcd(a转载 2014-04-10 19:45:45 · 756 阅读 · 0 评论 -
动态规划之多段图(上)
多段图问题是求由s到t的最小成本路径。图中的结点被划分成 k≥ 2个不相交的集合Vi , 1≤i≤k,其中V1和Vk分别只有一个结点 s (源点) 和t ( 汇点)。多段图向前处理的算法1、算法执行过程COST[j]=c(j,r)+COST[r];第4段 COST(4,9) = c(9,12) = 4转载 2014-04-10 16:54:26 · 2154 阅读 · 0 评论 -
凸多边形的动态规划问题
问题描述:用凸(n+1)多边形顶点的逆时针序列表示凸多边形,即p={v0,v1,…..,vn},如下图所示:原创 2014-04-22 10:11:51 · 1567 阅读 · 0 评论 -
字符串匹配kmp算法原理
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很转载 2014-05-06 13:02:07 · 554 阅读 · 0 评论 -
字符串匹配kmp算法
如下图所示:原创 2014-05-05 17:03:36 · 738 阅读 · 0 评论 -
动态规划中LCS
一、什么是动态规划算法动态规划一般也只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划算法分以下4个步骤:1,描述最优解的结构2,递归定义最优解的值3,按自底向上的方式计算最优解的值 //此3步构成动态规划解的基础。4转载 2014-03-24 14:58:32 · 787 阅读 · 0 评论 -
矩阵连乘之动态规划
题目描述:给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如: A1={30x35} ; A2={35x15} ;A3={15x5} ;A4={5x10} ;A5={10x20} ;A6={20x25} ;最后的结果为:((A1(A2A3))((A4A5)原创 2014-03-22 15:25:38 · 833 阅读 · 0 评论 -
背包问题(Knapsack problem)之01
问题描述:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。转移方程:dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]] + value[i]) 不放 放入原创 2014-04-01 12:46:25 · 751 阅读 · 0 评论 -
数塔问题
如图所示:问题描述:上图所示,从顶层出发,在每一个节点上,只能往相邻节点走(即向左或者向右), 一直走到最底层, 要求找到一条途径,使路径之和最大?从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值, 只要左右两道路径上的最大值求出来了才能作出决策。 同样的道理下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。 这样一层一层推下去原创 2014-04-01 09:31:54 · 799 阅读 · 0 评论 -
Dijkstra算法
// Dijkstra.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #define MAX_VERTEX_NUM 20#define MAX_VALUE_TYPE INT_MAXtypedef int VertexType;int visit[MAX_VERTEX_NUM];typedef struct node{原创 2014-04-13 14:35:26 · 511 阅读 · 0 评论 -
归并排序算法
归并排序是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。常见的归并排序有两路归并排序(Merge Sort),多相归并排序(Polyphase Merge Sort),Strand排序(Strand Sort)。两路归并排序(Merge Sort),也就是我们常说的归并排序,也叫合并排序。它是建立在归并操作上的一种有效的排序算法,归并操作即将两个已经排序的原创 2014-03-11 19:47:40 · 703 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然后重新开始报数,问最后自杀的人是谁?如图:内环表示人排列的环,外环表示自杀顺序;上面N=41,M=3。最普通办法就是模拟整个过程:建一个bool数组,true表示此人还活着,false表示已经自杀。可以模拟整个过程[cpp] view plaincopy#i转载 2014-09-18 15:54:51 · 676 阅读 · 0 评论
分享