CrabPeelMyShell

多路树和B+树

学习完二叉树和二分搜索树之后我们可以再来看看三叉树是怎么实现的,随后可以推广到多叉树。 三叉树 三叉树的一个节点需要两个值和三个指针,以及一个 int num_values (1 or 2) 来存储当前节点有几个值(还有几个空位)。 这是因为为了实现三叉树,必须要有两个可进行比较的元素来将当前进入的节点划分到两个值切成的三个范围中(也就是三个指针指向左、中、右子树)。 和二叉树...

Hashing和哈希表

前面我们学习过在AVL树中,我们实现查找到叶子节点或者其他操作的时间受到树高 $O(\log N)$ 的限制,现在我们再来看看有没有更快的一种搜索并查找我们想要的数据。 Map ADT 首先来看看一种新的ADT,Map,映射。 一个映射是一个或多个键值对 (Key, Value) 的集合,对于每一个键值对,Key是唯一的。 支持两个操作: get(key):获取键对应的值 pu...

桶排序Bucketsort和基数排序Radixsort

在学习完Mergesort和Quicksort之后,我们会发现他们的时间复杂度似乎已经突破不了 $\Theta(nln(n))$ ,这其实是这类排序算法的局限。 这类排序算法的本质其实是通过元素间的移动、交换来最终实现排序。理论已经证明了基于元素交换的排序算法存在速度上限 $\Theta(nln(n))$ ,因此我们无法尝试再去在元素交换的基础上去提高速度。 能不能换种方法继续提高速度?...