自然分類演算法例項程式碼分享

admin發表於2017-03-14

下面是一段javascript和自然分類演算法相關的例項程式碼,希望能夠給大家帶來一定的幫助。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<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">
</body>
</html>

相關文章