集合:一条规则决定性能
集合。它是一种不允许元素重复的数据结构。
其实集合是有不同形式的,但现在我们只讨论基于数组的那种。这种集合跟数组差不多,都是一个普通的元素列表,唯一的区别在于,集合不允许插入重复的值。
集合的读取跟数组的读取完全一样,计算机只要一步就能获取指定索引上的值。如之前解释的那样,这是因为计算机知道集合开头的内存地址,所以能够一步跳到集合的任意索引。O(1)
集合的查找也跟数组的查找无异,需要N步去检查某个值在不在集合当中。删除也是,总共需要N步去删除和左移填空。 O(N)
但插入就不同了。
先看看在集合末尾的插入。 对于数组来说,末尾插入是最高效的,它只需要1步。 而对于集合,计算机得先确定要插入的值不存在于其中——因为这就是集合:不允许重复值。于是每次插入都要先来一次查找。 在N个元素的集合中进行插入的最好情况需要N+1步——N步去确认被插入的值不在集合中,加上最后插入的1步。
最坏的情况则是在集合的开头插入,这时计算机得检查N个格子以保证集合不包含那个值,然后用N步来把所有值右移,最后再用1步来插入新值。总共2N+1步。 O(N)
参考:数据结构与算法图解.1.2