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


Posted in Javascript onOctober 11, 2013
<!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 相关文章推荐
jQuery弹出层插件简化版代码下载
Oct 16 Javascript
JS图片无缝、平滑滚动代码
Mar 11 Javascript
Jquery组件easyUi实现选项卡切换示例
Aug 23 Javascript
利用yarn实现一个webpack+react种子
Oct 25 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
微信小程序 数据封装,参数传值等经验分享
Jan 09 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
Sep 30 Javascript
JS实现的文件拖拽上传功能示例
May 21 Javascript
vue实现简单loading进度条
Jun 06 Javascript
微信小程序表单验证form提交错误提示效果
Jun 19 Javascript
vue项目中使用fetch的实现方法
Apr 25 Javascript
layui实现tab的添加拒绝重复的方法
Sep 04 Javascript
jQuery阻止事件冒泡具体实现
Oct 11 #Javascript
JS定时器实例详细分析
Oct 11 #Javascript
jquery 清空file域示例(兼容个浏览器)
Oct 11 #Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
Oct 11 #Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
Oct 11 #Javascript
Js base64 加密解密介绍
Oct 11 #Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
Oct 11 #Javascript
You might like
php设计模式之观察者模式的应用详解
2013/05/21 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
2016/05/28 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
Prototype Object对象 学习
2009/07/12 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
JavaScript中this的9种应用场景及三种复合应用场景
2015/09/12 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
vue跨域解决方法
2017/10/15 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
Python 时间处理datetime实例
2008/09/06 Python
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
Python selenium 三种等待方式解读
2016/09/15 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
pandas实现导出数据的四种方式
2020/12/13 Python
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
北大自主招生自荐信
2013/10/19 职场文书
三年级语文教学反思
2014/02/01 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
意向协议书范本
2014/04/23 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
法定代表人免职证明
2015/06/24 职场文书
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android