- 浏览: 122531 次
- 性别:
- 来自: 上海
文章列表
url:http://book.51cto.com/art/201001/177819.htm
http://wangdei.iteye.com/blog/204621
JVM调优总结 -Xms -Xmx -Xmn -Xss
http://www.diybl.com/course/3_program/java/javajs/2008630/129292.html
- 2009-09-27 07:33
- 浏览 1051
- 评论(0)
http://www.easywayserver.com/tomcat-clustering.htm#Session-Maintenance
- 2009-09-22 13:34
- 浏览 842
- 评论(0)
Core Java 2 Volume I - Fundamentals, Seventh Edition.pdf
Core Java 2 Volume II - Advanced Features, Seventh Edition.pdf
- 2008-07-06 00:33
- 浏览 1964
- 评论(4)
这里使用的是Dijkstra来计算最短路径。事实上Dijkstra完成时,指定节点到所有节点的最小路径均已求出。
算法简述如下:
准备好两个辅助性数据结构:
1 ParentLength : 用来记录到当前节点之前的父节点,与到当前节点的最小路径
2 Path: 记录指定节点到所有节点的ParentLength。初始化时,所有的ParentLength的父节点都为指定的起始节点,长度都是INFINITY,代表没有联通,距离无穷大。
Path的关键算法是adjust(from,to,length),每当发现一条新的,从一个已访问的节点(from)到未访问的节点(to)之间的新路径时,Path则用其 ...
图中代权的最小树的问题如下:
如果N个城市之间(图中的顶点)要修公路(图中的边)以使所有的城市联通,求怎样修可以使得公路的总长最小?
以上问题中的N个城市之间可以用图中的顶点表示,公路可以图中的边表示,公路的 ...
与传递闭包问题
非常相似的一个问题是,能不能给出一个矩阵,根据矩阵可以以时间代价O(n)的方式得到在一个有向代权图中任意指定端点之间的最短距离。求的这个矩阵的问题被称为每一对端点间的最小距离问题。
这里采用的是Floyd算法,它与WalShall
算法非常相似:
如果A可以到达B,距离为x,且C可以到达A,距离为y,则求得C可以到达B,距离为 z = x + y,z小于如果c到B的原来的距离,则用z更新矩阵,否则c到B距离维持不变。
和最小路径算法类似,这里用一个很大数字INFINITY来表示两个端点之间距离为无穷大的情况,即不通。这里INFINITY=最大的int值(~(1<<31 ...
图的传递闭包是指修正后的邻接矩阵表示的图。(见Graph 图-邻接矩阵法
)
在多个顶点的有向图中,每个顶点可以到按照方向到达一定的节点,这叫图的连通性。有种方法直接告诉我们,图中的两个节点是否可以联通,这里说的是WarShall算法。
WarShall的基本原理是,如果A可以到达B,且C可以到达A,则C可以到达B。通过对邻接矩阵的修正可以做到这点。随然这里举例是将两步可并成一步,但数学上可以证明这种修正可以达到任意步骤。
下面是代码:
class WarShall {
private boolean[][] adjMat;
WarShall(int size) {
adjMat = ...
当每个任务有前后置关系时,需要找到一种满足前后置关系的路线,将任务完成。
如果将每个任务看成一个节点,任务之间的前后置关系表示为有向图时,这种路线顺序叫做为图进行拓扑排序。也叫关键路径分析。
这里的图用邻接矩阵法表示,算法的关键是:
1 找到一个没有后继的顶点
2 在图中删除它,放入结果数组中
3 重复 步骤 1 ,步骤 2 直到图中没有多余的节点。
如果图中出现环装结构,则算法无法进行,因为此时任务之间循环成为前置。
关于邻接矩阵法请参见:Graph 图-邻接表法。
要注意的是:满足前后置关系的路径可能不止一条。这里仅仅得到其中的一条。
关键API:
int noNext():返回没有 ...
如果一个图中所有点都是联通的,求最小树可以将图遍历完成,这里的最小是指边最少,跟边长没有关系。
算法利用深度优先遍历,记载每个遍历过的节点,将节点按照遍历顺序记录下来就是所谓的最小树。
关于深度优先遍历请参见深度优先遍历。
不过这里奇怪的是:
假如所有节点之间是双向联通的,只用生成一个数组,装入所有的节点,例如{'a','b','c','d','d'}
然后每两个点之间的线段就是最小树的结果,即a --> b, b --> c, c --> d, d --> e
似乎不用图这样复杂的结构支撑。
不过这里还是给出了按照图来产生最小树的办法。
Graph.mst:返回最小树 ...
这里的图的广度优先遍历算法利用了队来实现。
图的深度遍历原则:
1 如果有可能,访问所有领接的未访问的节点,标记它们,并把它们放入队中。
2 当不能执行规则 1 时,如果对不为空,则从队中弹出头元素。重新执行规则 1
3 如果不能执行规则 1 和规则 2 时,则完成了遍历。
代码中的图使用的是Graph 图-邻接矩阵法
来表示,其他的表示法请见:Graph 图-邻接表法
代码中的Queue为辅助结构,用来记载访问过的节点。队列的详细描述可以见:Queue 队
,LinkedQueue 队
Vertex表示图中的节点,其中包含访问,是否访问,清除访问标志的方法。
Graph.main:提供简单 ...
这里的图的深度优先算法利用了栈来实现。
图的深度遍历原则:
1 如果有可能,访问一个领接的未访问的节点,标记它,并把它放入栈中。
2 当不能执行规则 1 时,如果栈不为空,则从栈中弹出一个元素。
3 如果不能执行规则 1 和规则 2 时,则完成了遍历。
代码中的图使用的是Graph 图-邻接矩阵法
来表示,其他的表示法请见:Graph 图-邻接表法
代码中的Stack为辅助结构,用来记载访问过的节点。栈的详细描述可以见:ArrayStack 栈
,LinkedStack 栈
。
Vertex表示图中的节点,其中包含访问,是否访问,清除访问标志的方法。
Graph.main:提供简单测试。代码可 ...
将指定数组全排列打印,此处使用递归算法。
其核心是,轮流将数组中每个数字放在第一位上,然后调用剩下n-1个数字的全排列。以此形成递归。
以下是代码:
class Arrangement {
public static void main(String[] args) {
int[] a = {1,2,3,4};
print(a,0,true);
}
public static void print(int [] a, int offSet, boolean needPrint) {
if(needPrint)pri ...
- 2008-05-16 21:00
- 浏览 4184
- 评论(1)
求指定数据的组合,这里的指定数据用一个数组模拟所有可以选择的数据
这个问题与背包问题解法相似,在任何一个时间点上可以将此问题划分为两个类似的子问题:组合中包含当前数据的,和组合中不包含当前数据的。
组合中包含当前数据的:在剩下的可选数据求得可能的n-1个元素的组合。
组合中不包含当前数据的:在剩下的可选数据求得可能的n个元素的组合。
组合可以看成另外一种背包问题,见递归-背包问题
。
代码如下:求得5个数字中两个数字的组合。
class Combination {
public static void main(String[] args) {
int[] src = {2,4,8,6,1 ...