哈希表

缘起

我们之前学过的N多树来进行排序, 但是基于CBA理论(【1】)这种树的排序算法的性能极限就是O(nlogn). 但是哈希算法并不基于比较,所以他的性能可以到达O(n). 但是代价是较大的空间复杂度. 本文给出哈希表的实现.

Read More

poj 2481 Cows 树状数组

缘起

树状数组,又叫做Binary Index Tree (BIT) 或者 Fenwick 树.主要用于查询任意两位之间的所有元素之和. 引入树状数组的缘起是为了能高效求数组的片段和.

一般的,一个数组修改一个元素和片段求和的复杂度分别是O(1)和O(N), 但是现在树状数组的引入,以牺牲修改单个元素性能为代价,但是树状数组大大提高了片段求和的性能——树状数组修改单个元素和片段求和的性能都是O(logN).

为了入门树状数组,我们拿 poj 2481 Cows 来练手.

传送门

Read More

SBT

缘起

关于BST,我们已经介绍很多了. 尤其是针对他的最坏O(N)的弊病, 人们给出了AVL、Splay、红黑树等解决方案. 但是avl和红黑树较为复杂,实际算法竞赛的时候用的不多. 一般用的比较多的是splay、sbt、treap (所谓三大平衡树),这里讲解【1】中介绍的SBT. 它对于平衡的刻画既不是AVL的子树深度,亦不是红黑树的路径上的黑色节点的个数. 而是子树节点个数.

Read More