阵列操作的复杂性
Complexity of Array Operations
所以我的comp sci课程中的一个主题是关于时间复杂度,并使用数组和链表作为比较某些操作的好方法,以及哪个容器更擅长这样做,因此您可以选择适当的数据结构。我了解大多数操作背后的原因,但我不确定其中一个,那就是在数组中插入和追加。
这两种情况的最坏情况是 O(n(。我相信我理解为什么插入是 O(n(,因为最坏的情况是,您在前面插入会导致您将所有元素移动到正确的位置,这意味着它是线性的并取决于数组中元素的数量。对于追加,我很好奇为什么它不是 O(1(,因为考虑到有空间,无论大小如何,都需要一个操作才能在末尾添加一个元素。
这是问题所在吗,如果没有足够的空间,您必须将阵列复制到更大的阵列以应对最坏的情况?
[...]如果没有足够的空间,你必须将数组复制到一个更大的阵列上。 对于最坏的情况?
宾果游戏。
典型的数组是具有一定大小的连续内存块,在编译或运行时确定。没有删除或插入元素到数组中这样的事情,而只是写入已经分配的内存。
链表是内存块的非连续集合,这些内存块通过其地址进行连接。有这样的事情,即删除元素并将其插入链表。
数组相对于链表的好处是更容易遍历和紧凑(不需要额外的内存来存储下一个[或上一个]元素的地址(。但是,与链表不同,这不能轻易扩展。
然而,为了让我们更准确地谈论数据结构固有算法的时间复杂性,我们需要首先定义数据结构。
双向链表?我们是否存储第一个和最后一个元素的地址(如队列(?二叉树(链表的一种(?
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 重载操作程序时出错>>用于类中的字符串 memebr
- 对字符串进行位操作
- 具有未知值时的时间复杂性
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 关联容器的下界复杂性:成员函数与非成员函数
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 使用堆查找第K个最大元素的时间复杂性
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 位移操作和位掩码未检测到重复字符
- 如何进行特定的位操作?
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- >=、<= 与 C/C++ 中的 <、>、== 操作的复杂性
- 阵列操作的复杂性
- error_complexity使用stdregex,我如何增加允许的搜索操作的复杂性