自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

桦楠雨蝶

脚踏实地

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

原创 蓝桥杯_PREV_4剪格子

解题思路: 首先求出所有节点和的一半sum,从左上角那个点一次向后进行回溯+剪枝搜索,如遇到所经过结点和等于sum,则将深度deep加入优先级队列(使用优先级队列可以在最后直接peek得出最小深度)。

2015-05-23 15:25:39 697

原创 动态规划之最长公共子序列(LCS)

通俗地说:动态规划就是将一个可以划分为子问题的问题进行递归求解,不过动态规划将大量的中间结果保存起来,不管它们是否会用得到,从而在后面的递归求解过程中可以快速求解。由此可以看得出来动态规划是一个以牺牲空间为代价换取时间的算法。一、首先先观察问题是否符合动态规划最明显的两个特征:最优子结构和重叠子问题。二、建立状态转移方程

2015-05-19 20:14:15 614

原创 SPFA单源最短路径

SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余松弛操作。前面说的Dijkstra算法虽然思想简单,优化也不难,但是如果面对含有负环的图来求解的话就无能为力了。并且从另一方面讲,即使图中没有负环,由于Dijkstra算法是基于结点的,而SPFA算法是基于边数的,所以说对于结点较少而边数较多(也就是稠密图)来说,无疑PriorityQueue+Dijkstra是最好的选择;而对于结点较多边数较少(也就是稀疏图)来说无疑SP

2015-05-11 14:28:23 676

原创 PriorityQueue+Dijkstra优先队列优化的Dijkstra

前面分别介绍了“原生的Dijkstra”即毫无优化的Dijkstra,但这种Dijkstra的效率较低为n^n,因此面对较大数据量的时候需要对其进行优化,也就是优化所采用的贪心策略的实现,因此就有了Heao+Dijkstra堆优化的Dijkstra,但是堆优化的实现很复杂,而PriorityQueue+Dijkstra优先队列优化的Dijstra的效率虽然略低于堆优化的Dijkstra,但是实现却容易的多,也不容易出错,因为可以借助java类库中的PriorityQueue来实现,因此优先队列优化的Dijk

2015-05-11 09:04:21 8203

原创 Heap+Dijkstra堆优化的Dijkstra

前面说到“原生的Dijkstra”,由于Dijkstra采用的是贪心策略,在贪心寻找当前距离源结点最短的结点时需要遍历所有的结点,这必然会导致效率的下降,时间复杂度为n^n。因此当数据量较大时会消耗较长时间。为了提高Dijkstra的效率,只有对Dijkstra的贪心策略进行改进。由于Dijkstra采用的贪心策略是每次寻找最短距离的结点并将其放入存放所有已知最短距离结点的S集合中,可以联想到堆以及优先级队列这些数据结构,这些结构都能非常高效地提供当前状态距离最短的结点。实践也可以证明这两种优化对于Dij

2015-05-11 08:19:03 6122

原创 原生的Dijkstra

看得出来这是一个稀疏图,因此SPFA是最合适的,但是Dijkstra算法也是可以的,不过毫无优化的原生Dijkstra是会超时的,因为Dijkstra采用的是贪心策略,时间复杂度是n^n,本文只提供裸体的Dijkstra算法实现,后面会有Heap+Dijkstra堆优化的Dijkstra和PriorityQueue+Dijkstra优先队列优化的Dijkstra。

2015-05-10 17:01:28 771

原创 旅行家的预算

对于贪心算法来说贪心决策的制定决定着用贪心算法求得的解的有效性及算法的效率

2015-04-28 18:56:14 569

原创 堆排序

堆数据结构是一种数组对象,它可以被视为一科完全二叉树结构。它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。

2015-04-27 14:18:41 395

原创 Struts2到底为我们做了什么

如果没有Struts2,如何开发web应用?开发web的本质是什么?Struts2存在的意义是什么?它究竟为我们做了什么?我们要抛开它天生的骄傲,还原它的本质。

2014-12-22 11:52:31 9368

原创 java实现并查集

java实现并查集的操作,包括find,union,connected等

2016-03-03 14:44:44 522

原创 蓝桥杯PREV_12危险系数

使用邻接表存储图,采用深度优先遍历邻接表即可。

2015-05-26 08:48:51 1106

原创 蓝桥杯PREV_08买不到的数目(动态规划)

题目: 历届试题 买不到的数目  时间限制:1.0s   内存限制:256.0MB      问题描述小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下

2015-05-24 15:15:26 748

转载 排序稳定性

首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在位置前,排序后Ai还是要在Aj位置前。     其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,

2015-05-13 15:46:25 437

原创 Fibonacci数列(蓝桥杯BEGIN-4)

用数组来保存该数列,但如果单纯的只保存数列的话,当n很大的时候会超出int的范围,所以数组每一项应该保存的是前两项之和对10007取余数,即f[n] = ( f[n - 1] + f[n - 2] ) % 10007

2015-04-10 15:52:59 663

原创 HashMap实现原理

HashMap其实也是由一个线性数组实现的,可以理解为其存储数据的容器就是一个线性数组,但是一个线性数组怎么可以存储键值对的数据呢?在这里,HashMap做了一些处理1.首先HashMap里面实现了一个静态内部类Entry,其属性有key、value、next,我们很明显可以看得出来Entry就是HashMap键值对实现的一个基础Bean。上面说的HashMap存储的基础就是这个Entry[ ]数组

2015-03-18 11:19:39 456

原创 JVM之RTTI与反射

(1)RTTI(Run-Time Type Identification,通过运行时类型识别)RTTI的含义就是在运行时识别一个对象的类型,并可以获知该类的所有信息,包括接口,父类,方法,静态成员等等。其对应的类是Class对象,每个java里面的类都对应一个Class对象(在编写并且编译后),这个对象被保存在这个类的同名的 . class文件里。为了实现RTTI需要JVM的类加载器来将目标类所对应

2015-03-18 10:32:52 681

转载 不要学习代码,要学会思考

转载:赖信涛的个人网站 本文地址: http://www.laixintao.com/posts/673

2014-05-27 16:56:40 671

原创 八皇后问题(EightQueens)

回溯最经典的八皇后问题

2014-05-24 22:00:36 582

原创 动态规划之K好数(蓝桥杯ALGO-3)

ALGO-3

2014-05-18 13:02:22 736

原创 动态规划之最长公共子序列(LCS)

import java.util.Scanner;public class Demo01 { private int[][] LCS(char[] one, char[] two) { int m = one.length; int n = two.length; int[][] matrix = new int[m + 1][n + 1]; for(int i = 1;

2014-05-11 15:47:01 607

空空如也

空空如也

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

TA关注的人

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