Java
文章平均质量分 81
谢潇雨
视觉SLAM,SFM等
展开
-
计算任意一个图生成树的个数——Kirchhoff 的Matrix Tree 方法Java实现
计算任意一个图的生成树的个数,是Kirchhoff提出的理论,通常称为Matrix Tree Theorem,原理很简单:Let G be a graph with V(G)={v1,v2,...,vn},let A={aij}be the adjacentcy matrix of G,and let C={cij}be the n*n matrix, where cij=deg vi if原创 2013-04-19 10:07:08 · 4578 阅读 · 0 评论 -
将矩阵中值为0的元素所在的行和列设置为0, in-place O(1)space O(mn) time
将矩阵中值为0的元素所在的行和列设置为0, in-place O(1)space O(mn) time使用O(m+n)space 的方案比较容易想到原创 2015-04-09 20:05:48 · 2433 阅读 · 0 评论 -
二叉树最近公共祖先问题(O(n) time 且只遍历一遍,O(1) Space (不考虑函数调用栈的空间))
Tarjan算法很精妙,但是使用了并查集,需要额外O(n)的存储空间。上面博客中给的第三个方法也是需要记录根到节点的路径,需要O(log n)空间,当然考虑到一般情况下我们遍历树都是递归的方式,所以本身方法调用栈就是O(log n)空间占用率。 但是这是对于平衡的二叉树而言的,在最差情况下空间占用率还是O(n)。所以,这里我给的算法不需要记录根到节点的路径,而且仅仅遍历树一遍就可以完成。原创 2015-04-02 11:00:37 · 6499 阅读 · 0 评论 -
对链表排序,时间开销O(nlogn), 空间开销O(1)
Sort a linked list in O(n log n) time using constant space complexity.原创 2014-11-26 15:19:40 · 3236 阅读 · 1 评论 -
图的匹配问题与最大流问题(三)——最大流问题Ford-Fulkerson方法Java实现
上篇文章主要介绍了Ford-Fulkerson方法的理论基础,本篇给出一种Java的实现。改写一下,原来的太冗余了。原创 2013-07-10 18:52:46 · 10106 阅读 · 10 评论 -
poj3252-Round Number 组合数学
思路基本上就是组合计数,唯一特别需要注意的是在计算组合数的时候很容易越界,虽然上面分析了计算结果在int范围内是没有问题的,但是计算组合数中间过程还是很可能越界,所以这里要特别注意。解决方法是利用C(n,m)=C(n-1,m-1)+C(n-1,m)进行递归计算,而不是使用传统的乘法计算方式。为了更有效率一点,可以事先计算好n=1~32,m=1~32的组合数的结果然后存起来。原创 2014-06-28 10:56:18 · 1938 阅读 · 0 评论 -
poj3436-ACM Computer Factory
这题的关键在于建图,然后最大流算法,而建图的关键在于拆点。将每个点拆为两个点,两点之间的流为performance。和其他点相连的边容量为INF。原创 2014-05-22 12:40:05 · 1833 阅读 · 0 评论 -
TopCoder——Lottery(买彩票问题)
简单来说,题目就是问给N个可选数字,M个空白,在有些一限制的情况下(是否允许重复,是否要求有序)共有多少种组合方式?原创 2014-04-04 14:19:50 · 1585 阅读 · 1 评论 -
图的匹配问题与最大流问题(六)——匈牙利算法一种简洁实现
接着这个系列,前几个又重新写匈牙利算法时,发现了一种更为简洁的实现方式,和上一篇文章相比http://blog.csdn.net/smartxxyx/article/details/9672181,这个算法更为简洁,也好理解。和维基百科上介绍的算法思路是一致的。原创 2014-05-05 14:21:54 · 3984 阅读 · 0 评论 -
Java 8新特性探究(三)解开lambda最强作用的神秘面纱
我们期待了很久lambda为java带来闭包的概念,但是如果我们不在集合中使用它的话,就损失了很大价值。现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将深入解析Java集合里面的批量数据操作(bulk operation),解开lambda最强作用的神秘面纱。1.关于JSR335JSR是Java Specification Req转载 2014-05-05 14:07:08 · 832 阅读 · 0 评论 -
Java 8新特性探究(一)通往lambda之路_语法篇
现在开始要灌输一些概念性的东西了,这能帮助你理解lambda更加透彻一点,如果你之前听说过,也可当是温习,所谓温故而知新...... 在开始之前,可以同步下载jdk 8 和 IDE,IDE根据个人习惯了,不过eclipse官方版本还没出来,所以目前看的话,netbean7.4是首选的,毕竟前段子刚刚出的正式版本,以下是他们的下载地址。jdk 8:http转载 2014-05-05 14:03:02 · 836 阅读 · 0 评论 -
Java 8新特性探究(二)深入解析默认方法
上篇讲了 lambda表达式的语法,但只是 JEP126 特性的一部分,另一部分就是默认方法(也称为虚拟扩展方法或防护方法) 什么是默认方法,为什么要有默认方法简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。 为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需转载 2014-05-05 14:05:34 · 783 阅读 · 0 评论 -
poj-1635 Subway tree systems(判断两个有根树是否同构)-哈希法
求两个有根树是否同构,这个如果暴力法枚举的话,复杂度是O(N^2),一中经典的做法是哈希,思想就是使得不同结构的树哈希值不同,而同构的树哈希值相同。我这个也是参考别人写的,不同的是我先把01串转换为了树状结构表示,然后再递归求哈希值,这样好理解一点。原创 2014-04-18 09:01:21 · 5447 阅读 · 0 评论 -
TopCoder——HillHiker(爬山问题)
Problem Statement A hiker has set out to conquer a hill. The trail guide for the hill lists information known about the hill. First, it lists how tall the hill is, and how far it is to the othe原创 2014-04-02 19:20:18 · 1152 阅读 · 0 评论 -
编程之美热身赛——树上三角形(解决RE Runtime Error)
这个题昨天做的时候总是报RE,也就是运行时错误Runtime Error,原因是它那个测试系统不允许创建多个类,即使是内部类也不行,办法就是改写成数组形式表示。思路:1、读取数据,建立图2、广度优先遍历,找到目的点。这个过程找到的肯定是最短路,因为这是一棵树,两点之间只有一条通路(不重复的情况下)。遍历过程中保存每个点遍历的时候的父亲节点,这样就能够知道走过了哪些节点。3、遍历任意三条边的组合是否能够组成三角形。原创 2014-04-08 19:14:42 · 1435 阅读 · 0 评论 -
图的匹配问题与最大流问题(四)——计算图的边连通度和点连通度
前三篇文章内容,(一)讲述了基础概念;(二)介绍了最大流算法的实现原理以及证明;(三)用Java语言予以了实现。这里,我们讲述如何利用最大流算法来求图的点连通度和边连通度,有图有代码,呵呵原创 2013-07-25 15:22:56 · 17655 阅读 · 1 评论 -
最小生成树算法——Kruskal算法Java实现
闲来无事,写个算法,最小生成树的Kruskal算法,相对比Prim算法实现起来麻烦一点点package trees;import java.util.HashMap;import java.util.HashSet;import java.util.Map;import java.util.PriorityQueue;import java.util.Set;/** * 最小生成树原创 2013-04-18 21:00:03 · 4798 阅读 · 1 评论 -
深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
本文是深入理解Java 8 Lambda系列的第一篇,主要介绍Java 8新增的语言特性(比如lambda和方法引用),语言概念(比如目标类型和变量捕获)以及设计思路。转载 2015-09-01 19:53:31 · 2181 阅读 · 0 评论