javascript自然分类法算法实现代码

时间:2024-04-28 09:33:46 


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7, IE=9, IE=10">
<meta name="viewport"
content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>自然分类法算法</title>
<script>
function getJenksBreaks(data,numclass) {
function sortNumber(a,b)//在javascript里,Array的sort方法,必须用这个函数,否则不是按数字大小排序
{
return a - b
}
// int numclass;
var numdata = data.length;
data.sort(sortNumber); //先排序

var mat1=new Array();
var mat2=new Array();
var st=new Array();

for (var j = 0; j <= numdata; j++){
mat1[j]=new Array();
mat2[j]=new Array();
st[j]=0;
for(var i=0;i<=numclass;i++){
mat1[j][i]=0;
mat2[j][i]=0;
}
}

for (var i = 1; i <= numclass; i++) {
mat1[1][i] = 1;
mat2[1][i] = 0;
for (var j = 2; j <= numdata; j++){

mat2[j][i]=Number.MAX_VALUE;
}
}
var v=0;

for (var l = 2; l <= numdata; l++) {
var s1=0;
var s2=0;
var w=0;
var i3=0;
for (var m = 1; m <= l; m++) {
i3 = l - m + 1;

var val=parseInt(data[i3-1]);

s2 += val * val;
s1 += val;

w++;
v = s2 - (s1 * s1) / w;
var i4 = i3 - 1;
if (i4 != 0) {
for (var j = 2; j <= numclass; j++) {
if (mat2[l][j] >= (v + mat2[i4][j - 1])) {
mat1[l][j] = i3;
mat2[l][j] = v + mat2[i4][j - 1];

if(l==200&&j==5) alert("l="+200+",j="+5+";mat2[200][5]="+mat1[l][j]+"i3="+i3);
}
}
}
}

mat1[l][1] = 1;
mat2[l][1] = v;
}

var k = numdata;
var kclass=new Array();

/* int[] kclass = new int[numclass]; */
kclass[numclass - 1] = parseInt(data[data.length-1]);
/* kclass[numclass - 1] = (Integer) data.get(data.size() - 1); */

for (var j = numclass; j >= 2; j--) {
var id = parseInt(mat1[k][j]) - 2;
kclass[j - 2] = parseInt( data[id]);
k = parseInt( mat1[k][j] - 1);
}

return kclass;
}

function doit(){
var data = new Array( 9, 9, 9, 9, 8, 1, 9, 7, 6, 7, 10, 7, 7, 8, 5, 7, 8, 2,
6, 6, 9, 10, 2, 2, 3, 9, 9, 1, 9, 1, 6, 7, 1, 9, 6, 5, 2, 8, 6,
6, 6, 4, 1, 4, 10, 9, 6, 9, 9, 7, 10, 9, 6, 6, 6, 9, 3, 2, 5,
10, 3, 9, 6, 1, 2, 1, 2, 7, 5, 2, 6, 6, 2, 7, 9, 9, 5, 4, 6, 4,
1, 1, 5, 1, 4, 4, 2, 6, 9, 7, 3, 10, 4, 4, 9, 5, 5, 3, 5, 3,
161, 136, 22, 113, 48, 114, 166, 33, 159, 182, 135, 22, 174,
191, 60, 176, 1, 155, 62, 142, 185, 84, 140, 27, 111, 176, 189,
24, 60, 29, 139, 20, 70, 172, 90, 120, 121, 173, 57, 138, 86,
180, 143, 155, 35, 10, 136, 158, 26, 29, 136, 97, 193, 194,
104, 147, 182, 44, 84, 139, 176, 16, 130, 168, 109, 182, 87,
78, 115, 75, 32, 88, 131, 168, 89, 25, 160, 60, 72, 92, 129,
159, 99, 5, 192, 6, 53, 15, 62, 176, 73, 129, 128, 34, 190, 95,
19, 19, 196, 30 );

/* var list = new Array();
for(int i = 0; i < data.length; i++){
list.add(data[i]);
} */
//Collections.sort(list);
var text=document.getElementById("text");
text.value="";
var grade = getJenksBreaks(data, 5);
for (var i = 0; i < grade.length; i++)
text.value=text.value+grade[i]+",";

}

</script>
</head>

<body >
<button type="button"onclick="doit()">自然分类法</button>

<input id="text"></input>
</body>
</html>

标签:javascript,自然分类法
0
投稿

猜你喜欢

  • Python多进程模式实现多核CPU并行计算

    2022-12-01 21:26:20
  • pandas每次多Sheet写入文件的方法

    2022-02-07 03:50:39
  • python网络爬虫精解之Beautiful Soup的使用说明

    2021-02-21 15:20:48
  • Go基础教程系列之import导入包(远程包)和变量初始化详解

    2024-02-22 03:33:53
  • python右对齐的实例方法

    2022-01-15 20:59:52
  • PHP date()格式MySQL中插入datetime方法

    2024-05-13 09:51:39
  • Python numpy 模块介绍

    2022-06-04 02:03:00
  • 使用GitLab+Jenkins实现持续集成CI环境的示例代码

    2022-09-25 23:14:04
  • python itchat实现调用微信接口的第三方模块方法

    2023-03-24 07:12:53
  • 使用Python轻松完成垃圾分类(基于图像识别)

    2023-06-24 06:06:47
  • [译]2009年海外Web设计风潮(上)

    2009-01-23 09:21:00
  • JavaScript输入邮箱自动提示实例代码

    2024-02-27 03:01:43
  • python实现异常信息堆栈输出到日志文件

    2022-04-26 20:26:21
  • 150行Python代码实现带界面的数独游戏

    2023-08-30 13:03:47
  • 简单方法实现网页自动适应任何分辨率任何窗口大小

    2008-09-13 19:28:00
  • Python定时任务APScheduler的实例实例详解

    2023-03-18 01:33:05
  • Python3中的re.findall()方法及re.compile()

    2023-04-12 11:54:47
  • 如何创建支持FILESTREAM的数据库示例探讨

    2024-01-26 15:30:13
  • pyqt5的QWebEngineView 使用模板的方法

    2022-04-17 08:23:12
  • 浅析JavaScript中的常用算法与函数

    2024-05-03 15:32:53
  • asp之家 网络编程 m.aspxhome.com