版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在界面上显示出哈夫曼树及其生成过程的Javascript 源代码:Index:var Huaffman = gloable : 7000,data : ,/输入的权值存放数组numdivList : ,/把生成的圆存放到该数组cxt : document.getElementById("showCanvas").getContext("2d"),cxt2 : document.getElementById("mapCanvas").getContext("2d"),timer : 0,oldnumdivList :
2、 ,/右边圆的存放位置nextnumdivList : ,/donenumdivList : ,/用来存放parentBox实例lineList : ,mapList : ,allCanvas : ,/newData : null,/两权值相加后的数值level : 0,/init : function()this.initMap();,initMap : function()/生成地图for(var i=0;i<MapData.length;i+)var mapX = ;for(var j=0;j<26;j+)var newMap = new Map(this.cxt2,25+j
3、*40,30+i*40,20,"rgba(0,0,0,0)");mapX.push(newMap);this.mapList.push(mapX);drawMap();,initData : function()/取到输入权值var me = this;me.data = $("#inputValue").val().split(",").sort(function(a,b)return a-b);/console.log(me.data.length)me.initDiv();,initDiv : function()this.cl
4、ear();this.numdivList = ;this.lineList = ;this.oldnumdivList = ;this.donenumdivList = ;for(var i=0;i<this.data.length;i+)var numDiv = new Numdiv(this.cxt,this.datai,25,i,String.fromCharCode(i+65);/初始化一个圆this.numdivList.push(numDiv);this.oldnumdivList.push(numDiv);/this.oldnumdivList.sort(function
5、(a,b)return parseInt(a.data)-parseInt(b.data););drawNumdiv();,addData : function(data1,data2)this.oldnumdivList.shift();this.oldnumdivList.shift();this.newData = parseInt(data1.data) + parseInt(data2.data);if(this.data.length = this.oldnumdivList.length+2)data1.nextPosition = cols:5,level:15;data2.n
6、extPosition = cols:7,level:15;this.nowList = new ParentBox(new Date().getTime(),null,data1,data2,0,0);this.donenumdivList.push(this.nowList);/把生成的树放到这个数组elsethis.donenumdivList.sort(function(a,b)return a.headNode.cols-b.headNode.cols;);/生成的树按位置排序if(!data1.tag && data2.tag)for(var i=0;i<th
7、is.donenumdivList.length;i+)if(this.donenumdivListi.id = data1.parentId)this.nowList = this.donenumdivListi;/确认了生成的父节点位置的树,并把它赋给nowListelsethis.donenumdivListi.changeCols = 0;data1.nextPosition = cols:this.nowList.headNode.cols,level:this.nowList.headNode.level;data2.nextPosition = cols:this.nowList
8、.childrenthis.nowList.children.length-1.cols+1,level:this.nowList.headNode.level;this.nowList.children.push(this.nowList.headNode);this.nowList.children.push(data2);this.nowList.sortChildren();setTimeout(function()Huaffman.numdivList.remove(data1);/Huaffman.nowList.changeCols = -1;/updateParentBox()
9、;/重新,Huaffman.gloable*3/14);else if(data1.tag && !data2.tag)for(var i=0;i<this.donenumdivList.length;i+)if(this.donenumdivListi.id = data2.parentId)this.nowList = this.donenumdivListi;elsethis.donenumdivListi.changeCols = 0;data2.nextPosition = cols:this.nowList.headNode.cols,level:this.n
10、owList.headNode.level;data1.nextPosition = cols:this.nowList.children0.cols-1,level:this.nowList.headNode.level;Huaffman.nowList.children.push(Huaffman.nowList.headNode);Huaffman.nowList.children.push(data1);Huaffman.nowList.sortChildren();setTimeout(function()Huaffman.numdivList.remove(data2);/Huaf
11、fman.nowList.changeCols = 1;updateParentBox();,Huaffman.gloable*3/14);else if(data1.tag && data2.tag)var arr =;var newData = parseInt(data1.data) + parseInt(data2.data);for(var i=0;i<this.donenumdivList.length;i+)if(parseInt(this.donenumdivListi.headNode.data) <= newData)arr.push(this.
12、donenumdivListi);elsethis.donenumdivListi.changeCols = 0;if(arr.length)arrarr.length-1.sortChildren();this.nowList = new ParentBox(new Date().getTime(),null,data1,data2,0,0);this.donenumdivList.push(this.nowList);data1.nextPosition = cols:arrarr.length-1.childrenarrarr.length-1.children.length-1.col
13、s+1,level:arrarr.length-1.headNode.level+2;data2.nextPosition = cols:arrarr.length-1.childrenarrarr.length-1.children.length-1.cols+3,level:arrarr.length-1.headNode.level+2;setTimeout(function()Huaffman.nowList.changeCols = -3;for(var i=0;i<arr.length;i+)arri.changeCols = -3;updateParentBox();,Hu
14、affman.gloable*3/14);elsearr0.sortChildren();Huaffman.nowList = new ParentBox(new Date().getTime(),null,data1,data2,0,0);Huaffman.donenumdivList.push(Huaffman.nowList);data1.nextPosition = cols:arr0.children0.cols-1,level:arr0.headNode.level+2;data2.nextPosition = cols:arr0.children0.cols-3,level:ar
15、r0.headNode.level+2;setTimeout(function()for(var i=0;i<this.donenumdivList.length;i+)Huaffman.donenumdivListi.changeCols = 3;updateParentBox();,Huaffman.gloable*3/14);else if(!data1.tag && !data2.tag)var obj1 = ,obj2 = ;for(var i=0;i<this.donenumdivList.length;i+)this.donenumdivListi.c
16、hangeCols = 0;if(this.donenumdivListi.id = data1.parentId)obj1 = this.donenumdivListi;else if(this.donenumdivListi.id = data2.parentId)obj2 = this.donenumdivListi;var childrenArr = obj1.children.concat(obj2.children);var lineArr = obj1.lineList.concat(obj2.lineList);childrenArr.push(obj1.headNode);c
17、hildrenArr.push(obj2.headNode);this.nowList = new ParentBox(new Date().getTime(),null,childrenArr,lineArr,0,0);this.donenumdivList.push(this.nowList);this.donenumdivList.remove(obj1);this.donenumdivList.remove(obj2);data2.nextPosition = cols:obj2.headNode.cols,level:obj2.headNode.level;data1.nextPos
18、ition = cols:obj1.headNode.cols,level:obj1.headNode.level;Huaffman.nowList.sortChildren();setTimeout(function()Huaffman.numdivList.remove(data1);Huaffman.numdivList.remove(data2);,Huaffman.gloable*3/14);setTimeout(function()Huaffman.addDiv(data1,data2);,50);setTimeout(function()var minCols = 9999;fo
19、r(var i=0;i<Huaffman.donenumdivList.length;i+)Huaffman.donenumdivListi.changeCols = 0;Huaffman.donenumdivListi.changeLevel = 0;Huaffman.donenumdivListi.sortChildren();for(var i=0;i<Huaffman.donenumdivList.length;i+)if(Huaffman.donenumdivListi.children0.cols<minCols)minCols = Huaffman.donenu
20、mdivListi.children0.cols;var arrCols = Huaffman.donenumdivList.sort(function(a,b)return a.headNode.cols-b.headNode.cols;);var arrLevel = Huaffman.donenumdivList.sort(function(a,b)return a.headNode.level-b.headNode.level;);var arrData = Huaffman.donenumdivList.sort(function(a,b)if(parseInt(a.headNode
21、.data) = parseInt(b.headNode.data)return 1;elsereturn parseInt(a.headNode.data)-parseInt(b.headNode.data););var highLevel = arrLevelarrLevel.length-1.headNode.level;if(highLevel <= 2)highLevel = 2;var leftCols = minCols;if(leftCols <= 2)leftCols = 2else if(leftCols >=23)leftCols = 23;for(va
22、r i=0;i<Huaffman.donenumdivList.length;i+)if(i = 0)Huaffman.donenumdivList0.changeCols = leftCols - Huaffman.donenumdivList0.children0.cols;Huaffman.donenumdivList0.changeLevel = highLevel - Huaffman.donenumdivList0.headNode.level;elsevar widthCols = 0;for(var j=0;j<i;j+)widthCols += parseInt(
23、Huaffman.donenumdivListj.childrenHuaffman.donenumdivListj.children.length-1.cols- Huaffman.donenumdivListj.children0.cols + 1);Huaffman.donenumdivListi.changeCols = leftCols + widthCols - Huaffman.donenumdivListi.children0.cols;Huaffman.donenumdivListi.changeLevel = highLevel - Huaffman.donenumdivLi
24、sti.headNode.level;updateParentBox();,Huaffman.gloable*3/14);,addDiv : function(data1,data2)clearTimeout(timer);if(!data1.isStart && !data2.isStart)this.newnumDiv = new Numdiv(this.cxt,this.newData,parseInt(data1.cols+data2.cols)/2),data1.level-2,null);this.newLineLeft = new Line(this.cxt,da
25、ta1.cols,data1.level,this.newnumDiv.cols,this.newnumDiv.level,"#ccc",3);this.newLineRight = new Line(this.cxt,data2.cols,data2.level,this.newnumDiv.cols,this.newnumDiv.level,"#ccc",3);this.lineList.push(this.newLineLeft);this.lineList.push(this.newLineRight);this.numdivList.push(
26、this.newnumDiv);this.newnumDiv.parentId = this.nowList.id;this.nowList.lineList.push(this.newLineLeft);this.nowList.lineList.push(this.newLineRight);this.nowList.headNode = this.newnumDiv;setTimeout(function()Huaffman.returnData();,Huaffman.gloable*3/14);elsevar timer = setTimeout(function()Huaffman
27、.addDiv(data1,data2);,Huaffman.gloable/140);,returnData : function()this.backnumDiv = new Numdiv(this.cxt,this.newData,this.newnumDiv.cols,this.newnumDiv.level,null);this.backnumDiv.parentId = this.nowList.id;this.numdivList.push(this.backnumDiv);if(parseInt(this.oldnumdivListthis.oldnumdivList.leng
28、th-1.data)<=parseInt(this.backnumDiv.data)for(var i=0;i<this.oldnumdivList.length;i+)var thisLevel = this.oldnumdivListi.level-1;this.oldnumdivListi.nextPosition = cols:this.oldnumdivListi.cols,level:thisLevel;this.backnumDiv.nextPosition = cols:25,level:this.oldnumdivListthis.oldnumdivList.le
29、ngth-1.level;this.oldnumdivList.push(this.backnumDiv);/this.oldnumdivList.sort(function(a,b)return a.data-b.data;);setTimeout(function()Huaffman.reSortData();,Huaffman.gloable*3/14);elsefor(var i=0;i<this.oldnumdivList.length;i+)if(parseInt(this.oldnumdivListi.data)<=parseInt(this.backnumDiv.d
30、ata)var thisLevel = this.oldnumdivListi.level-1;this.oldnumdivListi.nextPosition = cols:this.oldnumdivListi.cols,level:thisLevel;elsevar thisLevel = this.oldnumdivListi.level-1;this.backnumDiv.nextPosition = cols:25,level:thisLevel;this.oldnumdivList.splice(i,0,this.backnumDiv);/this.oldnumdivList.s
31、ort(function(a,b)return a.data-b.data;);setTimeout(function()Huaffman.reSortData();,Huaffman.gloable*3/14);return;,reSortData : function()for(var i=0;i<this.oldnumdivList.length;i+)var thisNumdiv = this.oldnumdivListi;var thisCols = thisNumdiv.cols;var thisLevel = thisNumdiv.level;thisNumdiv.next
32、Position = cols:thisCols,level:thisLevel-1;,start : function()Huaffman.addData(Huaffman.oldnumdivList0,Huaffman.oldnumdivList1);this.timer2 = setInterval(function()Huaffman.addData(Huaffman.oldnumdivList0,Huaffman.oldnumdivList1);,Huaffman.gloable);this.timer = setInterval(Huaffman.loop,Huaffman.glo
33、able/350);,clear : function()Canvas.clear(Huaffman.cxt,1050,660);,stop : function()clearInterval(this.timer);clearInterval(this.timer2);,loop : function()Huaffman.clear();drawNumdiv();updateNumdiv();drawLine();updateLine();if(Huaffman.oldnumdivList.length = 0)setTimeout(function()Huaffman.stop();,15
34、00);Huaffman.init();/数组扩展/扩展删除Atotype.remove = function(obj)for(var i=0,l=this.length;i<l;i+)if(obj = thisi)this.splice(i,1);break;Canvas/画布类var Canvas = /清除画布 clear : function(cxt,x,y) cxt.clearRect(0,0,x,y); ,clearRect : function(cxt,x,y,width,height)cxt.clearRect(x,y,width,height);, /画
35、图 drawImg : function(cxt,img,x,y,sw,sh,dx,dy,dw,dh) if(!sw)cxt.drawImage(img,x,y); else cxt.drawImage(img,x,y,sw,sh,dx,dy,dw,dh); , /画文字 drawText : function(cxt,string,x,y,color) cxt.fillStyle = color; cxt.font = 'bold 12px sans-serif' cxt.fillText(string,x,y); , /画填充的方fillRect : function(cx
36、t,x,y,width,height,color)cxt.fillStyle = color;cxt.fillRect(x,y,width,height);, /画边框的方drawRect : function(cxt,x,y,width,height,color)cxt.strokeStyle = color;cxt.lineWidth = 1;cxt.strokeRect(x,y,width,height);, /画圆/ctx:context2d对象,x:圆心x坐标,y:圆心y坐标,radius:半径,color:颜色fillArc : function(cxt,x,y,radius,co
37、lor)cxt.fillStyle = color;cxt.beginPath();cxt.arc(x,y,radius,0,Math.PI*2,true);cxt.closePath();cxt.fill();,drawLine : function(cxt,x0,y0,x1,y1,color,width)cxt.lineWidth = width;cxt.strokeStyle = color;cxt.beginPath();cxt.moveTo(x0,y0);cxt.lineTo(x1,y1);cxt.closePath();cxt.stroke(); jquery.min/*! jQu
38、ery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | /license */!function(a,b)"object"=typeof module&&"object"=typeof module.exports?module.exports=a.document?b(a,!0):function(a) if(!a.document)throw new Error("jQuery requires a window with a document&quo
39、t;); return b(a): b(a)("undefined"!=typeof window?window:this,function(a,b) var c=,d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h= ,i=h.toString,j=h.hasOwnProperty,k="".trim,l= ,m="1.11.0",n=function(a,b) return new n.fn.init(a,b),o=/suFEFFxA0+|suFEFFxA0+$/g,p=/-ms-/,q=/-(
40、da-z)/gi,r=function(a,b) return b.toUpperCase() ; n.fn=totype= jquery:m,constructor:n,selector:"",length:0,toArray:function()return d.call(this),get:function(a)return null!=a?0>a?thisa+this.length:thisa:d.call(this),pushStack:function(a)var b=n.merge(this.constructor(),a); return b
41、.prevObject=this,b.context=this.context,b,each:function(a,b)return n.each(this,a,b),map:function(a)return this.pushStack(n.map(this,function(b,c) return a.call(b,c,b) ) ,slice:function()return this.pushStack(d.apply(this,arguments),first:function()return this.eq(0),last:function()return this.eq(-1),
42、eq:function(a)var b=this.length,c=+a+(0>a?b:0); return this.pushStack(c>=0&&b>c?thisc:),end:function()return this.prevObject|this.constructor(null),push:f,sort:c.sort,splice:c.splice,n.extend=n.fn.extend=function() var a,b,c,d,e,f,g=arguments0|,h=1,i=arguments.length,j=!1; for("
43、;boolean"=typeof g&&(j=g,g=argumentsh|,h+),"object"=typeof g|n.isFunction(g)|(g=),h=i&&(g=this,h-); i>h; h+)if(null!=(e=argumentsh)for(d in e)a=gd,c=ed,g!=c&&(j&&c&&(n.isPlainObject(c)|(b=n.isArray(c)?(b?(b=!1,f=a&&n.isArray(a)?a:):f=
44、a&&n.isPlainObject(a)?a:,gd=n.extend(j,f,c):void 0!=c&&(gd=c); return g,n.extend(expando:"jQuery"+(m+Math.random().replace(/D/g,""),isReady:!0,error:function(a) throw new Error(a) ,noop:function() ,isFunction:function(a) return"function"=n.type(a) ,isArr
45、ay:Array.isArray|function(a) return"array"=n.type(a) ,isWindow:function(a) return null!=a&&a=a.window ,isNumeric:function(a) return a-parseFloat(a)>=0 ,isEmptyObject:function(a) var b; for(b in a)return!1; return!0 ,isPlainObject:function(a) var b; if(!a|"object"!=n.ty
46、pe(a)|a.nodeType|n.isWindow(a)return!1; try if(a.constructor&&!j.call(a,"constructor")&&!j.call(totype,"isPrototypeOf")return!1 catch(c) return!1 if(l.ownLast)for(b in a)return j.call(a,b); for(b in a); return void 0=b|j.call(a,b) ,type:function(a
47、) return null=a?a+"":"object"=typeof a|"function"=typeof a?hi.call(a)|"object":typeof a ,globalEval:function(b) b&&n.trim(b)&&(a.execScript|function(b) a.eval.call(a,b) )(b) ,camelCase:function(a) return a.replace(p,"ms-").replace(q,r
48、) ,nodeName:function(a,b) return a.nodeName&&a.nodeName.toLowerCase()=b.toLowerCase() ,each:function(a,b,c) var d,e=0,f=a.length,g=s(a); if(c) if(g) for(; f>e; e+)if(d=b.apply(ae,c),d=!1)break else for(e in a)if(d=b.apply(ae,c),d=!1)break else if(g) for(; f>e; e+)if(d=b.call(ae,e,ae),d=!1)break else for(e in a)if(d=b.call(ae,e,ae),d=!1)break; return a ,trim:k&&!k.call("ufeffxa0")?function(a) return null=a?"":k.call(a) :function(a) return null=a?""
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢材长期供货合同范本
- 2015借款合同范本
- 租田合同范本百度
- 社区创建本质安全型社区创建规划创建规划1
- 教委德育工作总结
- 自动化工作总结
- 小学三年级数学口算 80以内÷1位第1-20篇
- 新农村建设总体规划村新农村建设规划
- 1-中国通信企业协会通信工程建设分会
- DB3311T 275-2024 乡镇(街道)便民服务中心建设和服务规范
- 小冷库建造合同模板
- 2024年新人教版七年级上册数学教学课件 1.1 正数和负数 1.1 正数和负数
- 各级安全生产责任制安全生产规章制度安全操作规程
- 2024年玉溪市事业单位招考考试(329名)高频500题难、易错点模拟试题附带答案详解
- 应急第一响应人理论考试试卷(含答案)
- 广东省义务教育阶段学生学籍卡表格
- 盲板的厚度计算与使用
- 旧桥拆除安全专项施工方案
- 培训效果满意度调查表.doc
- 钢结构厂房室内移动式操作平台施工方案(附示意图)
- 五官的英语单词
评论
0/150
提交评论