自荐文章
〖摘要:〗
kruskal 算法是根据边的权值以递增的方式,依次找出权值最低的边来建最小生成树,规定每次添加的边不能造成生产树有回路。
比如,一个图中所有边按权值递增的排序如下:
(4,5)2 (3,4)3 (1,4)5 (1,3)6 (1,2)7 (2,4)8 (2,5)8 (3,5)9 (1,5)12 (2,3)14
步骤1:将(4,5)的边加到生产树中
步骤2:将(3,4)的边加到生产树中
步骤3:将(1,4)的边加到生产树中
步骤4:将(1,3)的边加到生产树中,但发现这时出现了回路(1,3,4 顶点),我们改用下条边(1,2)加到生产树中,现在已经连通了1 2 3 4 5 所有顶点,最小生产树建立完成。
下面看程序,读入一个带权连通无向图G,生产最小生产树T,输出T的各边及各边的权之和。输入形式如下:
n i j w ... -1 -1 -1
n表示图的顶点个数,i j w 表示从顶点i 到顶点j 的权为w 的一条边。
我们的做法是读入一条边后按照权值由小到大的顺序把这条边插入链表,然后从链表中读边生产树。
kruskal 算法是根据边的权值以递增的方式,依次找出权值最低的边来建最小生成树,规定每次添加的边不能造成生产树有回路。
比如,一个图中所有边按权值递增的排序如下:
(4,5)2 (3,4)3 (1,4)5 (1,3)6 (1,2)7 (2,4)8 (2,5)8 (3,5)9 (1,5)12 (2,3)14
步骤1:将(4,5)的边加到生产树中
步骤2:将(3,4)的边加到生产树中
步骤3:将(1,4)的边加到生产树中
步骤4:将(1,3)的边加到生产树中,但发现这时出现了回路(1,3,4 顶点),我们改用下条边(1,2)加到生产树中,现在已经连通了1 2 3 4 5 所有顶点,最小生产树建立完成。
下面看程序,读入一个带权连通无向图G,生产最小生产树T,输出T的各边及各边的权之和。输入形式如下:
n i j w ... -1 -1 -1
n表示图的顶点个数,i j w 表示从顶点i 到顶点j 的权为w 的一条边。
我们的做法是读入一条边后按照权值由小到大的顺序把这条边插入链表,然后从链表中读边生产树。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX 100
struct Node{
继续阅读其余的 4436 字
irini
2007-02-26 22:32:24
阅读:984
评论:0
引用:0
〖摘要:〗
AVL数是平衡的二叉排序树的一种,AVL树中任一节点的左右子树的高度之差的绝对值不超过1。
什么是平衡的二叉树呢?树中任一节点的左右子树的高度大致相同,若任一结点的左右子树的高度均相同(如满二叉树),则二叉树是完全平衡的。
二叉排序树(Binary Sort Tree)的性质:
(1)若它的左子树非空,则左子树上的所有结点的值均小于根结点的值。
(2)若它的右子树非空,则右子树上的所有结点的值均大于根结点的值。
(3)左右子树本身又各是一棵二叉排序树。
下面编写一个程序,它能读入n(n<=20)个两两不等的整数,最后一个是-9999,作为结束标志,构造一棵包含这n 个整数的AVL树,然后前 中 后序遍历树,算出树的高度。
这个程序的关键就是构造AVL 树,我们可以从空的AVL树开始,读入一个数就插入,再检测插入后是否符合AVL树性质,如不符合就进行调整。
还有一种方法,先对输入的数排序,再把中点的数插入AVL树中,对中点左右两边的的序列采用同样的插入方法,直到空为止。
第二种方法比较简单,我们的程序就采用此方法。
AVL数是平衡的二叉排序树的一种,AVL树中任一节点的左右子树的高度之差的绝对值不超过1。
什么是平衡的二叉树呢?树中任一节点的左右子树的高度大致相同,若任一结点的左右子树的高度均相同(如满二叉树),则二叉树是完全平衡的。
二叉排序树(Binary Sort Tree)的性质:
(1)若它的左子树非空,则左子树上的所有结点的值均小于根结点的值。
(2)若它的右子树非空,则右子树上的所有结点的值均大于根结点的值。
(3)左右子树本身又各是一棵二叉排序树。
下面编写一个程序,它能读入n(n<=20)个两两不等的整数,最后一个是-9999,作为结束标志,构造一棵包含这n 个整数的AVL树,然后前 中 后序遍历树,算出树的高度。
这个程序的关键就是构造AVL 树,我们可以从空的AVL树开始,读入一个数就插入,再检测插入后是否符合AVL树性质,如不符合就进行调整。
还有一种方法,先对输入的数排序,再把中点的数插入AVL树中,对中点左右两边的的序列采用同样的插入方法,直到空为止。
第二种方法比较简单,我们的程序就采用此方法。
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAX 20
int acturalNum = 0; //实际输入的节点数
struct Node{
继续阅读其余的 5750 字
irini
2007-02-24 11:32:43
阅读:342
评论:0
引用:0
〖摘要:〗
1. Cobertura 简介
cobertura 在西班牙语是覆盖的意思,Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通过标记无用的、执行不到的代码来优化代码。
cobertura 的基本工作思路就是:
(1) 对已经编译好的class 文件添加日志代码
(2) 对添加好日志的代码进行单元测试
(3) 输出覆盖率统计报告
统计报告是html 格式的,其中标出每行源码是否执行,非常直观。
所以我们在ant 中使用cobertura 的步骤就是:
(1) 编译代码
(2) 定义 cobertura 的ant task
(3) 用 cobertura-instrument 命令为编译好的代码添加日志
(4) 用 junit 命令对添加好日志的代码进行单元测试
(5) 用 cobertura-report 命令输出报告
2. 例子
(1) 建立目录结构
cobertura
|-- src
|----|-- test
|----|----|--cobertura
|----|----|----|--AddInt.java
|----|----|----|--unittest
|----|----|----|----|--AddIntTest.java
|-- lib
|----|-- asm-2.2.1.jar
|----|-- cobertura.jar
|----|-- jakarta-oro-2.0.8.jar
|-
继续阅读其余的 5851 字
1. Cobertura 简介
cobertura 在西班牙语是覆盖的意思,Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通过标记无用的、执行不到的代码来优化代码。
cobertura 的基本工作思路就是:
(1) 对已经编译好的class 文件添加日志代码
(2) 对添加好日志的代码进行单元测试
(3) 输出覆盖率统计报告
统计报告是html 格式的,其中标出每行源码是否执行,非常直观。
所以我们在ant 中使用cobertura 的步骤就是:
(1) 编译代码
(2) 定义 cobertura 的ant task
(3) 用 cobertura-instrument 命令为编译好的代码添加日志
(4) 用 junit 命令对添加好日志的代码进行单元测试
(5) 用 cobertura-report 命令输出报告
2. 例子
(1) 建立目录结构
cobertura
|-- src
|----|-- test
|----|----|--cobertura
|----|----|----|--AddInt.java
|----|----|----|--unittest
|----|----|----|----|--AddIntTest.java
|-- lib
|----|-- asm-2.2.1.jar
|----|-- cobertura.jar
|----|-- jakarta-oro-2.0.8.jar
|-
继续阅读其余的 5851 字
irini
2007-02-13 16:14:33
阅读:219
评论:1
引用:0
〖摘要:〗
实现自己的MBean interface的class,叫做Standard MBean,它是最简单的类型,最适合静态管理信息。
Standard MBean 的语义规则:
1.非抽象类
2.至少一个public constructor
3.实现自己对应的MBean interface
4. Standard MBean所实现的接口的名字必须符合这个形式<implementing_class>MBean,如果MBean的名字是Library,那么他的接口名必须为LibraryMBean
下面创建一个Standard MBean,然后运行它。
MBean 接口:HelloWorldMBean
MBean 实现类:HelloWorld
Agent:HelloAgent
实现自己的MBean interface的class,叫做Standard MBean,它是最简单的类型,最适合静态管理信息。
Standard MBean 的语义规则:
1.非抽象类
2.至少一个public constructor
3.实现自己对应的MBean interface
4. Standard MBean所实现的接口的名字必须符合这个形式<implementing_class>MBean,如果MBean的名字是Library,那么他的接口名必须为LibraryMBean
下面创建一个Standard MBean,然后运行它。
MBean 接口:HelloWorldMBean
MBean 实现类:HelloWorld
Agent:HelloAgent
public interface HelloWorldMBean {
public void setGreeting( String greeting );
public String getGreeting();
继续阅读其余的 4405 字
irini
2007-01-27 20:29:43
阅读:276
评论:0
引用:0
〖摘要:〗
1.简介
p6spy是针对数据库访问的动态监测框架,经长时间的发展已经非常成熟,p6spy模拟了一个标准的JDBC Driver,代理了真正的底层JDBC驱动。也就是说,我们只要把系统中所用的jdbc驱动配置成p6spy 驱动,把p6spy配置中的realdriver配置为我们实际使用的JDBC Driver,就可以使用他的性能监测功能了。
Sqlprofiler是p6spy的周边资源,p6spy用日志文件记录,看起来比较麻烦,Sqlprofiler为我们提供了一个图形化的监控界面,可以实时监控SQL执行过程,对执行结果进行统计并加以优化。
2.下载
p6spy
http://heanet.dl.sourceforge.net/sourceforge/p6spy/p6spy-install.zip
sqlprofiler
http://heanet.dl.sourceforge.net/sourceforge/sqlprofiler/sqlprofiler-0.3-bin.zip
3.配置p6spy
解压p6spy-install.zip,把p6spy.jar拷贝到我们项目里的lib下,spy.properties放到源码的根目录下就可以了
修改spy.properties
realdriver=org.gjt.mm.mysql.Driver #实际使用的数据库驱动程序的名字
appender=com.p6spy.engine.logging.appender.StdoutLogger
在设置数据源或者配置数据库连接的地方,
修改driver为:com.p6spy.engine.spy.P6SpyDriver
如
继续阅读其余的 1018 字
1.简介
p6spy是针对数据库访问的动态监测框架,经长时间的发展已经非常成熟,p6spy模拟了一个标准的JDBC Driver,代理了真正的底层JDBC驱动。也就是说,我们只要把系统中所用的jdbc驱动配置成p6spy 驱动,把p6spy配置中的realdriver配置为我们实际使用的JDBC Driver,就可以使用他的性能监测功能了。
Sqlprofiler是p6spy的周边资源,p6spy用日志文件记录,看起来比较麻烦,Sqlprofiler为我们提供了一个图形化的监控界面,可以实时监控SQL执行过程,对执行结果进行统计并加以优化。
2.下载
p6spy
http://heanet.dl.sourceforge.net/sourceforge/p6spy/p6spy-install.zip
sqlprofiler
http://heanet.dl.sourceforge.net/sourceforge/sqlprofiler/sqlprofiler-0.3-bin.zip
3.配置p6spy
解压p6spy-install.zip,把p6spy.jar拷贝到我们项目里的lib下,spy.properties放到源码的根目录下就可以了
修改spy.properties
realdriver=org.gjt.mm.mysql.Driver #实际使用的数据库驱动程序的名字
appender=com.p6spy.engine.logging.appender.StdoutLogger
在设置数据源或者配置数据库连接的地方,
修改driver为:com.p6spy.engine.spy.P6SpyDriver
如
继续阅读其余的 1018 字
irini
2007-01-08 14:04:56
阅读:566
评论:2
引用:0
