
算法思想
文章平均质量分 71
爱读书de小学生
这个作者很懒,什么都没留下…
展开
-
动态规划问题
矩阵相乘问题:先上代码: #include 2 using namespace std; 3 const int MAX = 100; 4 //p用来记录矩阵的行列,main函数中有说明 5 //m[i][j]用来记录第i个矩阵至第j个矩阵的最优解 6 //s[][]用来记录从哪里断开的才可得到该最优解 7 int p[MAX+1],m[MAX][MAX],s[MAX]原创 2015-06-09 18:28:44 · 559 阅读 · 0 评论 -
回溯算法思想
首先理解什么几个概念问题1.原理:回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法 2.问题的解向量:回溯法希望一个问题的解能够表示成一个n元式(x1,x2,…,xn)的形式。 显约束:对分量xi的取值限定。 隐约束:为满足问题的解而对不原创 2015-06-27 16:36:21 · 15996 阅读 · 0 评论 -
回溯算法之最优装载问题
问题描述:有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且,装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这2艘轮船。如果有,找出一种装载方案。 例如:当n=3,c1=c2=50,且w=[10,40,40]时,则可以将集装箱1和2装到第一艘轮船上,而将集装箱3装到第二艘轮船上;如果w=[20,40,40],则无法将这3个集装箱都装上轮船原创 2015-06-27 16:40:49 · 16963 阅读 · 0 评论 -
合并排序
合并算法:package test1;public class Merge{ //递归分成小部分 public void merge_sort(int[] arrays,int start,int end){ if(start<end){ int m=(start+end)/2; merge_sort(arrays原创 2015-06-26 15:53:20 · 423 阅读 · 0 评论 -
算法复杂度分析
算法时间复杂度分析示例 为了便于朋友们理解,我将不会采用教科书上惯用的快速排序、合并排序等经典示例进行分析,而是使用一个十分简单的算法作为示例。我们先来定义问题。 问题定义: 输入——此问题输入为一个有序序列,其元素个数为n,n为大于零的整数。序列中的元素为从1到n这n个整数,但其顺序为完全随机。 输出——元素n所在的位置。(第一个元素位置为原创 2015-06-26 16:00:28 · 389 阅读 · 0 评论 -
贪心算法思想
template void GreedySelector(int n, Type s[], Type f[], bool A[]) { A[1]=true; int j=1;//记录最近一次加入A中的活动 for (int i=2;i=f[j]) { A[i]=true; j=i; } else { A[i]=false; } }原创 2015-06-27 17:07:13 · 837 阅读 · 0 评论 -
动态规划
最长公共子序列问题:伪代码:Procedure LCS_LENGTH(X,Y);LCS_LENGTH(X,Y);begin m:=length[X]; n:=length[Y];for i:=1 to m do c[i,0]:=0;for j:=1 to n do c[0,j]:=0;for i:=1 to m do for j:=1原创 2015-06-09 18:29:10 · 376 阅读 · 0 评论