堆的javascript实现方法
堆的定义
最大(最小)堆是一棵每一个节点的键值都不小于(大于)其孩子(如果存在)的键值的树。大顶堆是一棵完全二叉树,同时也是一棵最大树。小顶堆是一棵完全完全二叉树,同时也是一棵最小树。
另外,记住这两个概念,对写代码太重要了:
1、父节点和子节点的关系:看定义
2、完全二叉树:参考[2]
基本操作
1、Build(构建堆)
2、Insert(插入)
3、Delete(删除:最小或者最大的那个)
代码实现
首先,写代码前有两个非常重要的点:
1、用一个数组就可以作为堆的存储结构,非常简单而且易操作;
2、另外同样因为是数组作为存储结构,所以父子节点之间的关系就能根据索引就轻松找到对方了。
对于JavaScript以0作为数组索引开始,关系如下:
nLeftIndex = 2 * (nFatherIndex+1) - 1;nRightIndex = 2* (nFatherIndex+1);
前面提到注意两个概念,是有助于理解的.:
1、因为是数组,所以父子节点的关系就不需要特殊的结构去维护了,索引之间通过计算就可以得到,省掉了很多麻烦。如果是链表结构,就会复杂很多;
2、完全二叉树的概念可以参考[2],要求叶子节点从左往右填满,才能开始填充下一层,这就保证了不需要对数组整体进行大片的移动。这也是随机存储结构(数组)的短板:删除一个元素之后,整体往前移是比较费时的。这个特性也导致堆在删除元素的时候,要把最后一个叶子节点补充到树根节点的缘由
关于JavaScript的几点小结
这里是采用面向对象的一种实现方法,感觉上不是太优雅,不知道还有没有更好的表示方法和写法;
学习了数组的几个用法:push和pop的操作太好用了;
判断数组的方式也是临时从网上搜的(instanceof),印象不深刻,不用的话下次估计还是有可能忘掉。
参考
[1]《数据结构和算法分析:C语言描述》
[2]图解数据结构(8)——二叉堆
[3]数据结构:堆
-
什么样的网站需要seo优化
seo优化是网站运营当中最为核心的内容,想要进行诸多网站的优化,大家通常采用的方法就是这种最核心的方式。那么,什么样子的网站需要seo优化呢?以下是本站小编搜索整理的相关内容,供参考阅读,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生培训网!...
-
企业在网络营销推广中的误区
网络营销是以现代营销理论为基础,借助网络、通信和数字媒体技术实现营销目标的商务活动.下面是YBJYS小编为大家搜索整理的关于企业在网络营销推广中的误区,供参考阅读,希望您喜欢!误区一:网络推广不等于网络营销很多刚接触网络营销的朋友,喜欢把网络营销和网络推广...
-
餐厅店面设计要素
导语:对于设计师来说,商业空间的店面设计比家居设计或办公设计更有发挥的空间,因为每个品牌的形象都是不同的,对市场和消费者的定位也是有所不同,而设计师要做的就是为不同喜好,不同目的的消费者创造优质的餐饮空间。下面就由小编为大家介绍一下餐厅店面设计要素,希望...
-
有关计算机人工智能的新看法
斯蒂夫·霍金曾撰文称:“人工智能的短期影响取决于它由谁操控,长远影响则取决于它是否操控。”这个想法引起了埃隆·马斯克和比尔·盖茨等人的共鸣。如果说过去程序员像上帝,那么现在他们就像驯狗师。那么小编就来聊聊人工智能与深度学习。“机器学习”成为一种新...