自然分类算法实例代码分享

自然分类算法实例代码分享:
下面是一段javascript和自然分类算法相关的实例代码,希望能够给大家带来一定的帮助。
代码实例如下:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport"
<title>自然分类法算法</title>
<script type="text/javascript">
function getJenksBreaks(data,numclass) 
{
  function sortNumber(a,b)
  {
    return a - b
  }
  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();
  kclass[numclass - 1] = parseInt(data[data.length-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 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]+",";
}
window.onload=function()
{
  var bt=document.getElementById("bt");
  bt.onclick=function(){doit()}
}
</script>
</head>
<body >
<button type="button" id="bt">自然分类法</button>
<input id="text"></input>
</body>
</html>

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=9492

更多内容可以参阅:http://www.softwhy.com/javascript/

你可能感兴趣的:(自然分类算法实例代码分享)