自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhuma的编程学习

仅用于个人学习,欢迎交流!

  • 博客(17)
  • 收藏
  • 关注

原创 动态规划总结(背包问题的深入理解)

有这样两道题:1. 有一段楼梯有n级台阶,规定每一步只能跨一级或两级,要登上第n级台阶有多少种不同的走法?f[i]=sum{ f [ i - c[j] ] }其中c[j]为题目明确告知的可能性选择(在这里可以认为c[0]=1,c[1]=2),用于内循环(如果规定每一步能跨)i - c[j] 就是状态,它转移到状态i有c[j] 数组元素个数个可能性。即i可由i - c[j] 转移而来

2015-01-29 12:59:44 1385

转载 石子合并问题(动归)

【石子合并】    在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。    试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 【输入文件】 包含两行,第1 行是正整数n(1 第2行有n个数,分别表示每堆石子的个数。 【输出文件】 输出两行。  第1

2015-01-31 21:43:12 1103

转载 有向图的邻接表实现

图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List)。1. 邻接表的结点结构(1)表结点结构    ┌────┬───┐     │adjvex  │next  │    └────┴───┘     邻接表中每个表结点均有两

2015-01-30 20:13:29 1543

原创 寻找数组第二大数和第K大数

代码:#include "stdio.h"#include "stdlib.h"//初始化最大值为a[0],次大值为a[1],遍历一次,每次比较并更新最大值和次大值,最后就可以得到次大值。int findsecondmaxvalue(int *a,int size){ int i,max,s_max; max=a[0]; //最大值 s_max=a[1]; //

2015-01-28 21:16:10 735

原创 判断是否是子树 和 判断二叉树是否平衡

有两棵很大的二叉树:T1有上百万个结点,T2有上百个结点。写程序判断T2是否为T1的子树。思路:先在T1中找到T2的根结点,然后依次去匹配它们的左右子树即可。注意:T1中的结点可能包含多个与T2根结点的值相同的结点。因此, 在T1中查找T2的根结点时,如果找到与T2匹配的子树,则返回真值;否则,还要继续查找, 直到在T1中找到一棵匹配的子树或是T1中的结点都查找完毕。代码如下:

2015-01-27 23:54:58 1004

原创 Algorithm tutorials(动归) && minipaint

个人认为最好的一篇文章点击打开链接:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=dynProg国内有人翻译成了中文,翻译质量很高点击打开链接:http://www.hawstein.com/posts/dp-novice-to-advanced.html注:好像中高级的例子解析是错误的,未求证。关于这篇文

2015-01-27 21:05:07 707

转载 有向无环图的动态规划实现

Dijkstra算法的本质是贪心技术,适用于所有的有环与无环图。有向无环图,简称DAG。如果一个图是无环的,可以考虑用动态规划。具体参见:http://www.cnblogs.com/lpshou/archive/2012/04/17/2453370.html 点击打开链接代码实现:#include#include#define x 9999#define max 9999

2015-01-27 16:39:43 735

转载 卡特兰数——动态规划思想

问题描述:卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。输入一个整数n,计算h(n)。其递归式如下:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2,h(0) = h(1) = 1)    该递推关系的解为:h(n)=C(2n,n)/(n+1) (n=1,2,3,...)        思路:直接根据递归

2015-01-27 11:24:12 1551

原创 0-1背包的二维实现及一维实现

参考资料:《算法设计与分析基础》P228-P230                http://blog.csdn.net/tjyyyangyi/article/details/7929665               http://www.cnblogs.com/SDJL/archive/2008/08/22/1274312.html第i个物品放了(且能放下),就是 vi + f(

2015-01-26 15:08:01 733

原创 字符串编辑距离与拼写错误检查

编辑距离是指两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。编辑操作包括删除、添加(插入)和替换三种方式。当然,次数越小越相似。编辑距离应用最多的地方就是基于贝叶斯定理的拼写检查中,贝叶斯公式:用户输入一个单词时,可能拼写正确,也可能拼写错误。如果把拼写正确的情况记做c(代表correct),拼写错误的情况记做w(代表wrong),那么"拼写检查"要做的事情就是:

2015-01-25 19:50:25 1452

原创 字符串匹配(暴匹、 Rabin-Karp、KMP)

http://chaoswork.com/blog/2011/06/14/kmp%E7%AE%97%E6%B3%95%E5%B0%8F%E7%BB%93/(最主要的一篇)http://blog.csdn.net/v_july_v/article/details/7041827#t5http://blog.csdn.net/yutianzuijin/article/details/119

2015-01-18 11:05:31 1841

原创 动态规划原理解析

一、贪心算法通过一系列步骤构造问题的解,每一步对目前构造的部分解作一个扩展(往前推进,直至子问题的规模为零),直到获得问题的完整解为止。这个技术的核心是,所做的每一步选择都必须满足可行、局部最优、不可取消原则。代表性算法有Dijkstra算法(当前最短路径),Prime算法(向前面构造的子树添加离树中顶点最近的顶点(邻接顶点))和Kruskal算法(贪婪的把最小权的边(顶点)纳入集合,保证不产

2015-01-13 21:19:32 756

转载 约瑟夫环

原文地址:http://blog.csdn.net/kangroger/article/details/39254619约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然后重新开始报数,问最后自杀的人是谁?如图:内环表示人排列的环,外环表示自杀顺序;上面N=41,M=3。最普通办法就是模拟整个过程:建一个bool数组,true表示此人还活着,false表

2015-01-10 22:25:41 466

转载 大数阶乘

由于计算机数据表示大小的限制,在进行大数运算的过程中极有可能会发生数据溢出的危险,避免溢出的通用方法就是在大数运算中用数组来表示计算结果。代码如下:/******************************************** */ /* 算法思想转载自网络 *//* 程序功能:大整数的阶乘

2015-01-10 20:43:07 415

原创 Prim算法和Kruskal算法

2.代码如下(与 Dijkstra算法的差别非常非常小)void DijkstraPath(MGraph g,int *dist,int *path,int v0) //v0表示源顶点 { int i,j,k; bool *visited=(bool *)malloc(siz

2015-01-10 16:58:54 561

原创 最优二叉查找树

1.算法讲解见《算法设计与分析基础》P223-P227;2.关于如何确定循环的值,见下图:可得到下表:很显然,d作为最外层循环,i为次外层,而j作为i的因变量存在。i=1~(n-d),相应的j= i+d 。k作为最内存循环,每次开始循环时,始终用temp存储此次循环的最小值,即3.代码如下:#include#include#define max

2015-01-07 23:36:55 654

原创 Dijkstra算法(单源最短路径)

预备知识:邻接矩阵:表示图的一种方法,是一个二维数组。用一个一维数组存放图中所有顶点数据;用一个二维数组存放顶点间关系(边)的数据,这个二维数组称为邻接矩阵。对于每条边(u , v),我们置A[u][v]=1;否则,置为0.如果边有一个权,我们可以置A[u][v]等于该权,而使用一个很大或者很小的权作为标记表示不存在的边。注意,无向图的邻接矩阵一定是对称的,而有向图的邻接矩阵不一定对称(一

2015-01-07 12:35:18 643

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除