数据结构与算法 —— 向量的扩容策略与分摊时间复杂度
2016-05-26 16:17
435 查看
以可扩充向量(动态数组)为例,可以考查对该结构的连续 n 次(查询、插入或删除等)操作,将所有操作中用于内部数组扩容的时间累计起来,然后除以 n。只要 n 足够大,这一平均时间就是用于扩容处理的分摊时间成本。
动态数组,无论是 C++ STL 中的 vector 还是 Java 中的 ArrayList 都无一例外进行数组的扩充时,都是将容量以 2 为比例按指数速度增长。以下我们讲看到此种扩充机制下,用于扩容处理的分摊时间成本不过 O(1)。
动态数组,无论是 C++ STL 中的 vector 还是 Java 中的 ArrayList 都无一例外进行数组的扩充时,都是将容量以 2 为比例按指数速度增长。以下我们讲看到此种扩充机制下,用于扩容处理的分摊时间成本不过 O(1)。
相关文章推荐
- 顺序表的算法操作
- 【2117】数据结构实验之链表二:逆序建立链表
- 【2116】数据结构实验之链表一:顺序建立链表
- 数据结构->直接插入排序
- 大话数据结构与算法:基础篇
- 菜鸟nginx源码剖析数据结构篇(八) 缓冲区链表ngx_chain_t
- [置顶] 【数据结构】 二叉树
- [置顶] 【数据结构】 栈
- [置顶] 【数据结构】 一个数组实现两个栈【面试】
- [置顶] 【数据结构】 两个栈实现一个队列【面试】
- [置顶] 【数据结构】 出栈序列的合法性【面试】
- AVL Trees 学习笔记
- 实现一个基于LinkedList的队列数据结构,去除ArrayList集合中重复的元素,
- JavaScript数组实现数据结构中的队列与堆栈
- 数据结构与算法的分析 —— 渐进复杂度(三个记号)
- 数据结构和算法 – 8.链表
- 数据结构与算法的分析 —— 平均时间复杂度 vs 分摊时间复杂度
- 通用块层、IO调度层以及设备驱动层的数据结构
- 数据库索引-数据结构
- 数据结构索引-InnoDB索引