⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbscan.jsp

📁 数据挖掘,聚类分析,DBSCAN JAVA的实现,
💻 JSP
字号:
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="com.mysql.jdbc.Driver" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> DBSCAN算法实现 </TITLE>
<META NAME="Author" CONTENT="方泽明@hubu.edu.cn">
<META NAME="Keywords" CONTENT="dbscan算法">
<META NAME="Description" CONTENT="本程序将实现dbscan算法.该算法依次考察每个对象在半径e内的对象的个数,并将数目大于最少数目MinPts的对象称为核心对象,将核心对象半径e内的所有对象作为一个簇.">
</HEAD>
<BODY>
<% //定义全局变量
   String Pronum=request.getParameter("MaxPronum");    //记录的属性个数
   String Objnum=request.getParameter("MaxObjnum");    //记录的个数
   String stre=request.getParameter("e");              //半径的大小
   String strMinPts=request.getParameter("MinPts");
   Integer MaxPronum=Integer.parseInt(Pronum);
   Integer MaxObjnum=Integer.parseInt(Objnum);
   Integer e=Integer.parseInt(stre);
   Integer MinPts=Integer.parseInt(strMinPts);
%>
<%
//连接数据库
String driverName="com.mysql.jdbc.Driver";//驱动程序名
String userName="fangzm";          //数据库用户名
String userPasswd="fang";          //密码
String dbName="transaction";       //数据库名
String tableName="dbscan";         //表名
String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection connection=DriverManager.getConnection(url);
Statement statement = connection.createStatement();
//获得数据结果集
String sql="SELECT * FROM "+tableName;
ResultSet rs = statement.executeQuery(sql);

int []kind=new int[MaxObjnum+1];    //标记每一个记录是否是核心对象(值与下标相等),是否已被处理(初始值为0,否则值为所属类别编号)
for(int i=0;i<=MaxObjnum;i++)
    kind[i]=0;
out.println("<table border><tr><td>核心对象id</td><td>在半径="+e+"内的所有对象id</td><td>对象数目</td></tr>");
for(int i=1;i<=MaxObjnum;i++)
{
	if(kind[i]==0)
	{
		int []recond=new int[MaxPronum]; //当前记录的属性值
		int []temp=new int[MaxPronum];   //临时存入用于计算的记录的属性值
		int near=0;                      //当前记录半径e内的记录数目
		int []nearid=new int[MaxObjnum];    //当前记录半径e内的记录id
		rs.absolute(i);
		for(int j=0;j<MaxPronum;j++)    
			recond[j]=rs.getInt(j+2);
		rs.beforeFirst();                //扫描数据库;
		while(rs.next())
		{
			if(kind[rs.getInt(1)]==0)       //只考虑未处理过的记录
			{
				for(int j=0;j<MaxPronum;j++)
					temp[j]=rs.getInt(j+2);
				int E=0;
				for(int j=0;j<MaxPronum;j++)  //计算两个记录之前的距离的平方
					E+=Math.pow(recond[j]-temp[j],MaxPronum);
				if(E<Math.pow(e,MaxPronum))
					nearid[near++]=rs.getInt(1); 
			}
		}
		if(near>=MinPts)                 //若为核心对象
		{
			out.println("<tr><td>"+i+"</td><td>");
			int j=0;
			while(nearid[j]!=0)
			{
				kind[nearid[j]]=i;
				out.println(nearid[j]);
				j++;
			}
			out.println("</td><td>"+j+"</td></tr>");
		}
	}
}
out.println("</table>");
rs.close();
statement.close();
connection.close();
out.println("<p>以下是未划分簇的对象id(即孤立点):");
for(int i=1;i<=MaxObjnum;i++)
if(kind[i]==0)
out.println(i);
%>
</BODY>
</HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -