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

(编辑:jimmy 日期: 2024/10/10 浏览:2)

复制代码 代码如下:
<!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>

一句话新闻

高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。