自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 动态规划算法学习十例之四

好文章,来自:http://blog.csdn.net/shuqin1984/archive/2010/09/02/5859223.aspx 0/1背包问题的动态规划法求解,前人之述备矣,这里所做的工作,不过是自己根据理解实现了一遍,主要目的还是锻炼思维和编程能力,同时,也是为了增进对动态规划法机制的理解和掌握。 值得提及的一个问题是,在用 JAVA 实现时, 是按算法...

2012-09-30 20:11:28 333

原创 动态规划算法学习十例之三

例一: 给出N台电脑和K辆卡车,要求每辆卡车至少放一台电脑。问共有多少种放法运走这些电脑?数据范围N (1

2012-09-29 14:32:22 142

原创 动态规划算法学习十例之二

例一:计算二项式系数: 在排列组合里面,我们有下面的式子(很容易用组合的定义来证明):[img]http://dl.iteye.com/upload/attachment/0074/5221/2f21cf96-e6c5-3676-a114-3698fce0aec9.jpg[/img] 这个式子将C(n , k)的计算问题表述为了(问题描述)C(n-1 , k...

2012-09-29 13:49:42 140

原创 动态规划算法学习十例之一

动态规划在查找有很多重叠子问题的情况的最优解时有效。它将问题重新组合成子问题。为了避免多次解决这些子问题,它们的结果都逐渐被计算并被保存,从简单的问题直到整个问题都被解决。因此,动态规划保存递归时的结果,因而不会在解决同样的问题时花费时间。 动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解。简单地说,问题能够分解成子问题来解决。1...

2012-09-29 09:48:21 106

原创 采用贪心法求解着色问题(JAVA)

贪心法求解着色问题。 给图的所有结点着色,限制是一条边的两个端点不能用同样的颜色,要求所使用的不同颜色的数目最少。“贪心”算法的思想是首先 用第一种颜色对图中尽可能多的顶点着色(“尽可能多”表现出“贪心”);然后用第二种颜色对余下的顶点中尽可能多的顶点着色;如此等等,直到把所有的顶点都着完色。当用一种新颜色对余下的顶点着色时,我们采取下列步骤:(1)选取某个未着色的顶点,并...

2012-09-26 21:43:07 918

原创 POJ 1129-Channel Allocation 的贪心算法解法(图的m着色问题)

题目翻译: 当一个广播电台在一个非常大的地区,广播站会用中继器来转播信号以使得每一个接收器都能接收到一个强烈的信号。然而,每个中继器必须慎重选择使用,使相邻的中继器不互相干扰。如果相邻的中继器使用不同的频道,那么就不会相互干扰。由于无线电频道是一有限的,一个给定的网络所需的中继频道数目应减至最低。编写一个程序,读取一个中继网络,然后求出需要的最低的不同频道数。建模:...

2012-09-26 21:19:13 427 1

原创 贪心算法

贪心算法是指从问题的初始状态出发,通过若干次的贪心选择而得出最优值(或较优解)的一种解题方法。并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解。 例如平时购物找钱时,为使找回的零钱的硬币数最少,不考虑找零钱的所有各种方案,而是从最大面值的币种开始,按递减的顺序考虑各币种,先尽量用大面值的币种,当不足大面值币种的金额时才去考虑下一种较小面值的币种。这就是在使...

2012-09-25 13:22:43 201

原创 穷举(枚举)算法

穷举法,或称为暴力破解法(名字来源于对于密码的破译方法,即将密码进行逐个推算直到找出真正的密码为止)是程序设计中使用得最为普遍(并不是在被逼无奈时最后的狂吼)之一,它利用计算机运算速度快、精确度高的特点,对要解决问题的所有可能情况,一个不漏地进行检查,从中找出符合要求的答案。用穷举算法解决问题,通常可以从两个方面进行分析:一、问题所涉及的情况:问题所涉及的情况有哪些,情况...

2012-09-23 15:25:18 318

原创 链地址法处理Hash冲突

哈希表中的每个位置称为桶(bucket),当发生哈希冲突时就以链表形式存放多个元素。 [img]http://dl.iteye.com/upload/attachment/0074/2042/48d55554-0eec-3044-9e1c-28bb0fa44716.jpg[/img]链地址法处理Hash冲突,看看下面代码,模拟了JDK中的HashSet:[code="java...

2012-09-22 22:45:43 144

原创 学习“五大经典查找”(3)

今天就聊聊这个”五大经典查找“中的最后一个”二叉排序树“,又叫二叉查找树。1. 概念[img]http://dl.iteye.com/upload/attachment/0074/1780/5467852b-afdc-3345-812f-4ccd19e6df72.gif[/img]如图就是一棵二叉排序树:[img]http://dl.iteye.com/upload/att...

2012-09-22 07:41:52 74

原创 学习“五大经典查找”(2)

大家可否知道,其实查找中有一种O(1)的查找,即所谓的秒杀。 第三:哈希查找: 对的,他就是哈希查找,说到哈希,大家肯定要提到哈希函数,呵呵,这东西已经在我们脑子里面形成固有思维了。大家一定要知道“哈希“中的对应关系。 比如说: ”5“是一个要保存的数,然后我丢给哈希函数,哈希函数给我返回一个”2",那么此时的”5“和“2”就建立一种对应关系,这种关系就是所谓的...

2012-09-21 23:04:23 93

原创 学习“五大经典查找”(1)

网上看到《五大经典查找》,学习了。原文代码用C#,这里用java,顺便对照一下两种语言的语法。 在我们的生活中,无处不存在着查找,比如找一下班里哪个mm最pl,猜一猜mm的芳龄....... 对的这些都是查找。 在我们的算法中,有一种叫做线性查找。分为:顺序查找。 折半查找。查找有两种形态:分为:(1)破坏性查找 比如有一群mm...

2012-09-21 14:42:50 81

原创 堆排序的应用:从1亿条数据中从大到小取前10000条

堆排序的应用:从1亿条数据中从大到小取前10000条[code="java"]import java.util.Arrays; import java.util.Date; import java.util.Random; public class Top10000{ public static void main(String[] ar...

2012-09-20 22:17:56 147

原创 基数排序

基数排序可以说是扩展了的桶式排序,比如当待排序列在一个很大的范围内,比如0到999999内,那么用桶式排序是很浪费空间的。而基数排序把每个排序码拆成由d个排序码,比如任何一个6位数(不满六位前面补0)拆成6个排序码,分别是个位的,十位的,百位的。。。。排序时,分6次完成,每次按第i个排序码来排。下面举一个例子: 如果要对6个3位整数进行排序,你会怎么做?我猜想大多数...

2012-09-19 10:18:51 78

原创 非基于比较的排序:桶排序

我们最常用的快速排序和堆排序等算法需要对序列中的数据进行比较,因为被称为基于比较的排序。 而非基于比较的排序有计数排序,桶排序,和在此基础上的基数排序。要注意的是,非基于比较的排序算法的使用都是有条件限制的,例如元素的大小限制。假设待排序数据是一个随机过程产生,该过程将元素一致地分布在某区间上。 桶排序的思想就是把区间划分成n个相同大小的子区间,或称桶,然后将...

2012-09-18 21:51:28 137

原创 容易理解的堆排序代码(JAVA)

[img]http://dl.iteye.com/upload/attachment/0073/8651/3b08ab7e-4b41-3683-85f7-197fb55bb8bf.gif[/img][img]http://dl.iteye.com/upload/attachment/0073/8653/277f3691-df80-3e48-8f66-ada80a662929.gif[/img]...

2012-09-15 14:54:47 97

原创 冒泡排序

从0到n-1,两两比较数组中的元素,如果前者大于后者,则交换之(如a[0]>a[1],则交换a[0]和a[1])。作一趟冒泡排序后,最大值就在最后一个位置a[n-1]上了。然后对余下的0到n-2个元素作第二趟冒泡排序,次最大值就去到倒数第二个位置a[n-2]上了,如此类推。 例如对10,-3,5,34,-34,5,0,9进行排序 第一趟:-3,5,10,-34,5,0,9,34...

2012-09-15 07:36:06 136

原创 二分(折半)查找算法

二分查找又称折半查找,它是一种效率较高的查找方法。 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数...

2012-09-14 22:36:08 295

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

单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的中间顶点,那么P(k,s)必定是从k到s的最短路径。下面证明该性质的正确性。...

2012-09-14 14:30:12 473

原创 深度优先搜索与有向无环图的拓扑排序(java实现)

当每个任务有前后置关系时,需要找到一种满足前后置关系的路线,将任务完成。如果将每个任务看成一个节点,任务之间的前后置关系表示为有向图时,这种路线顺序叫做为图进行拓扑排序。也叫关键路径分析。比如有很多任务T1,T2,.... 这些任务又是相互关联的,比如Tj完成前必须要求Ti已完成,这样T1,T2....序列关于这样的先决条件构成一个图,其中如果Ti必须要先于Tj完成...

2012-09-11 13:05:30 589

原创 快速排序(java)

快速排序是典型的使用分治策略的一种交换排序.一般步骤:1)选择一个枢纽元素(关键点);2)使用该枢纽元素分割数组,使得比该元素小的元素在它的左边,比它大的在右边。并把枢纽元素放在合适的位置;3)根据枢纽元素最后确定的位置,把数组分成三部分,左边的,右边的,枢纽元素自己,对左边的,右边的分别递归调用快速排序算法即可。 由于关键点是用来比较的基准所以如果基准选择得当可以减少...

2012-09-03 07:09:25 94

原创 最小生成树:Kruskal(克鲁斯卡尔)算法实现(java)

算法描述:Kruskal(克鲁斯卡尔)算法需要对图的边进行访问,所以克鲁斯卡尔算法的时间复杂度只和边又关系。算法过程:1.将图各边按照权值进行排序2.将图遍历一次,找出权值最小的边,(条件:此次找出的边不能和已加入最小生成树集合的边构成环),若符合条件,则加入最小生成树的集合中。不符合条件则继续遍历图,寻找下一个最小权值的边。3.递归重复步骤1,直到找出n-1条边为...

2012-09-01 20:50:39 253

空空如也

空空如也

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

TA关注的人

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