Algorithm
文章平均质量分 89
dm_vincent
这个作者很懒,什么都没留下…
展开
-
由“栈的逆序”谈谈递归算法
最近看到一道题目:要求将一个栈逆序,使用递归。 我们先看看最常规的解法应该是怎样的,显然对于“逆序”这种问题描述,栈这种数据结构就会蹦入我们的脑海。 实现代码如下:public static LinkedStack reverseStackDirectly(LinkedStack stack) { if(null != stack && !stack.isEmpty(原创 2012-09-22 20:23:51 · 8215 阅读 · 0 评论 -
求解强连通分量算法之---Kosaraju算法
本文提纲:问题描述Kosaraju 算法问题描述:什么是强连通分量(StronglyConnected Component)(或者,被称为强连通子图,Strongly Connected Subgraph)?首先需要明白的是,强连通分量只可能存在于有向图中,无向图中是不存在强连通分量的,当然,无向图中也有对应物,被称为连通分量(Connect原创 2013-01-29 21:50:57 · 28951 阅读 · 8 评论 -
并查集(Union-Find) 应用举例 --- 基础篇
本文是作为上一篇文章 《并查集算法原理和改进》 的后续,焦点主要集中在一些并查集的应用上。材料主要是取自POJ,HDOJ上的一些算法练习题。首先还是回顾和总结一下关于并查集的几个关键点:以树作为节点的组织结构,结构的形态很是否采取优化策略有很大关系,未进行优化的树结构可能会是“畸形”树(严重不平衡,头重脚轻,退化成链表等),按尺寸(正规说法叫做秩,后文全部用秩来表示)进行平原创 2012-07-22 23:54:14 · 38484 阅读 · 26 评论 -
并查集(Union-Find)算法介绍
本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。更多的信息可以参考Algorithms 一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。原文中更多的是给出一些结论,我尝试给出一些思路上的过程,即为什么要使用这个方法,而不是别的什么方法。我觉得这个可能更加有意义一些,相比于记下一些结论。原创 2012-06-12 13:57:16 · 239433 阅读 · 93 评论 -
[Java 8] (9) Lambda表达式对递归的优化(下) - 使用备忘录模式(Memoization Pattern)
使用备忘录模式(Memoization Pattern)提高性能这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了。因此,底层只需要使用一个Map就够了。但是需要注意的是,只有一组参数对应得到的是同一个值时,该模式才有用武之地。在很多算法中,典型的比如分治法,动态规划(Dynamic Programming)等算法中,这个模式运用的十分原创 2014-10-30 09:58:15 · 7884 阅读 · 2 评论 -
[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归
递归优化很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer)。但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError。处理这个问题,我们可以使用一种叫做尾调用(Tail-Call Optimization)的技术来对递归进行优化。同时,还可以通过暂存子问题的结果来避免对子问题的重复求解,这个优化方法叫做备忘录(Memoizatio原创 2014-10-29 09:56:32 · 16201 阅读 · 1 评论 -
拓扑排序的原理及其实现
本文将从以下几个方面介绍拓扑排序:拓扑排序的定义和前置条件和离散数学中偏序/全序概念的联系典型实现算法Kahn算法基于DFS的算法解的唯一性问题实际例子取材自以下材料:http://en.wikipedia.org/wiki/Topological_sortinghttp://en.wikipedia.org/wiki/Hamiltonian_pat原创 2012-07-04 13:27:31 · 210599 阅读 · 47 评论