阵列操作的复杂性

Complexity of Array Operations

本文关键字:复杂性 操作 阵列      更新时间:2023-10-16

所以我的comp sci课程中的一个主题是关于时间复杂度,并使用数组和链表作为比较某些操作的好方法,以及哪个容器更擅长这样做,因此您可以选择适当的数据结构。我了解大多数操作背后的原因,但我不确定其中一个,那就是在数组中插入和追加。

这两种情况

的最坏情况是 O(n(。我相信我理解为什么插入是 O(n(,因为最坏的情况是,您在前面插入会导致您将所有元素移动到正确的位置,这意味着它是线性的并取决于数组中元素的数量。对于追加,我很好奇为什么它不是 O(1(,因为考虑到有空间,无论大小如何,都需要一个操作才能在末尾添加一个元素。

这是

问题所在吗,如果没有足够的空间,您必须将阵列复制到更大的阵列以应对最坏的情况?

[...]如果没有足够的空间,你必须将数组复制到一个更大的阵列上。 对于最坏的情况?

宾果游戏。

典型的数组是具有一定大小的连续内存块,在编译或运行时确定。没有删除或插入元素到数组中这样的事情,而只是写入已经分配的内存。

链表是内存块的非连续集合,这些内存块通过其地址进行连接这样的事情,即删除元素并将其插入链表。

数组相对于链表的好处是更容易遍历和紧凑(不需要额外的内存来存储下一个[或上一个]元素的地址(。但是,与链表不同,这不能轻易扩展。

然而,为了让我们更准确地谈论数据结构固有算法的时间复杂性,我们需要首先定义数据结构。

双向链表?我们是否存储第一个和最后一个元素的地址(如队列(?二叉树(链表的一种(?