数据结构和各自的复杂度

2020-02-09  本文已影响0人  Frankkkkk

一、动态数组

情景:在n个动态的整数中搜索某个整数
1、从0个位置开始遍历搜索,平均时间复杂度O(n)
2、如果维护一个有序的动态数组,使用二分搜索,最坏时间复杂度:O(logn);但是添加、删除的平均时间复杂度是O(n)
3、set和get在index位置的元素时,复杂度为O(1)
明显的缺点:可能会造成内存空间的大量浪费,能否用到多少就申请多少内存?

二、链表

链表可以解决:数组的内存空间浪费的问题。
add、remove:复杂度都是O(n)
set(int index, E element)、get(int index, E element):复杂度也是O(n)
双向链表比单向链表的优势:以删除操作为例,几乎节省了一半的操作

数组和链表的复杂度比较

三、二叉搜索树BST

复杂度O(h)跟树的高度(h)有关,
最好的情况是:搜索、添加、删除都是O(h)==O(logn)
最坏的情况是:退化成链表,复杂度都是O(n)。

四、AVL树

添加:

删除:

平均时间复杂度:

与BST树对比,AVL树的性能从O(n)降到了O(logn)级别,大大提高了效率

五、红黑树

平均时间复杂度:

与AVL树对比,红黑树的性能主要体现在删除上,删除后旋转次数是O(1)级别的

上一篇下一篇

猜你喜欢

热点阅读