摘要: 注:这里的堆还是以小根堆为例。 我们想要设计一种堆能像二叉堆那样高效地支持合并操作,也就是$O\left( n \right)$时间处理一次Merge,而且只使用一个数组看起来很困难对吧,毕竟合并操作需要把一个数组复制到另外一个数组中去,对于相同大小的堆这会花费$\theta \left( n \r 阅读全文
posted @ 2018-09-10 18:04 仪式黑刃 阅读(886) 评论(0) 推荐(2) 编辑
摘要: 二叉堆是一种典型的优先队列实现策略,广义而言,堆是优先队列的实现方式,在此之下又分为二叉堆,左式堆,斜堆,二项队列等具体形态。但第一个用得太普遍了,所以我们平时一说到堆(Heap)指的就是二叉堆。基本模型如下,基本操作就这两个,其他的都是扩展。 以后我们讨论的堆,如果不特殊说明,那都以小顶堆为例,堆 阅读全文
posted @ 2018-09-08 11:51 仪式黑刃 阅读(840) 评论(0) 推荐(4) 编辑
摘要: 最后我们来探究红黑树的删除算法,相比插入操作,它的情况更复杂一些。因此直接考虑很容易撞到南墙,我们更需要利用转化与化归的思想(还记得高中数学四大思想方法吧,这里一样适用),通过提升变化,把红黑树映射成一颗B-树,并站在后者的角度,反过来理解前者的原理。但我们更需要关心重构操作,也就是一系列的旋转和修 阅读全文
posted @ 2018-09-05 17:04 仪式黑刃 阅读(621) 评论(2) 推荐(1) 编辑
摘要: 首先说一下,关于红黑树有一篇很棒的论文$A\; dichromatic\; framework\; for\; balanced\; t\mbox{re}es$,作者之一的Robert Sedgewick,想必大家不会陌生。如果有兴趣可以仔细研读一下,里面讲了更多细节的分析,而本文也借鉴了其中的一些 阅读全文
posted @ 2018-09-02 21:06 仪式黑刃 阅读(1215) 评论(4) 推荐(1) 编辑
摘要: 红黑树是AVL树的另一变种,他也能在动态变化的过程中保持某种意义的平衡,对红黑树的操作最坏情况下也只有$O\left( \log n \right)$的复杂度,而且下面我们会看到,对于插入而言我们有另外一种比AVL树更容易的实现方法,非递归的。在具体谈到技术细节之前,我们或许会有疑问:已经有AVL这 阅读全文
posted @ 2018-09-01 00:00 仪式黑刃 阅读(544) 评论(0) 推荐(1) 编辑
摘要: P.s:在代码里会同时用到向量和B-树的search,insert, remove,具体调用的是哪个结构的函数结合上下文就能看懂。 根据上一篇文章,我们对于这棵树的大致结构已经明了,那该如何有效利用并且根据情况维护它呢?这次用模板类写,方便日后不同数据类型的使用 先给出类型声明和模板类 类: 首先来 阅读全文
posted @ 2018-08-28 10:38 仪式黑刃 阅读(544) 评论(2) 推荐(0) 编辑
摘要: Ps.我们遵循从感性到理性的认知顺序来逐步探索B-树的奥秘,之前经常说的value这里用key(关键码)指代,因为可能存的是字符串,说是value就不合适了。 (多图预警!!!建议在WI-FI下观看) 虽然迄今为止我们所看到的查找树皆为二叉树,但还有另一种常用的查找树与此相异,名为B- 树,又叫B树 阅读全文
posted @ 2018-08-27 18:57 仪式黑刃 阅读(552) 评论(0) 推荐(1) 编辑
摘要: (多图预警!!!建议在WiFi下观看) 之前我们谈论过AVL树,这是一种典型适度平衡的二叉搜索树,成立条件是保持平衡因子在[-1,1]的范围内,这个条件已经是针对理想平衡做出的一个妥协了,但依然显得过于苛刻,因为在很多时候我们需要频繁的做重平衡操作,能不能改进一下,让失衡先积累着,然后等到某个时机, 阅读全文
posted @ 2018-08-20 06:01 仪式黑刃 阅读(590) 评论(0) 推荐(0) 编辑
摘要: 先说明一下,她们两个属于不同的范畴,双散列属于开放定址法,仍是一种解决冲突的策略。而再散列是为了解决插入操作运行时间过长、插入失败问题的策略。简而言之,她们的区别在于:前者让散列表做的“对”(把冲突元素按规则安排到合理位置),后者让散列表具有了可扩充性,可以动态调整(不用担心填满了怎么办)。 双散列 阅读全文
posted @ 2018-08-08 16:05 仪式黑刃 阅读(3511) 评论(0) 推荐(0) 编辑
摘要: 为了消除一次聚集,我们使用一种新的方法:平方探测法。顾名思义就是冲突函数F(i)是二次函数的探测方法。通常会选择f(i)=i2。和上次一样,把{89,18,49,58,69}插入到一个散列表中,这次用平方探测看看效果,再复习一下探测规则:hi(x)= ( Hash(x) + F(I) ) % Tab 阅读全文
posted @ 2018-08-06 20:49 仪式黑刃 阅读(18987) 评论(0) 推荐(1) 编辑