阵列操作的复杂性

时间:2013-10-07 21:40:46

标签: c++ arrays time-complexity

因此,我的comp sci类中的一个主题涉及时间复杂度,并使用数组和链表作为比较某些操作以及容器更好的比较的好方法,因此您可以选择合适的数据结构。 我理解大多数操作背后的原因,但我不确定一个,那就是插入并追加到数组中。

这两种情况的最坏情况是O(n)。我相信我理解为什么插入是O(n)因为最坏的情况,你在前面插入导致你将所有元素移到右边意味着它的线性并依赖于数组中元素的数量。 为了追加,我很好奇为什么它不是O(1),因为它只需要一个操作就可以在最后添加一个元素,只要有空间。

这是问题,如果没有足够的空间,你必须将数组复制到更大的空间,以应对最糟糕的情况吗?

2 个答案:

答案 0 :(得分:1)

  

[...]如果空间不足,则必须将阵列复制到较大的阵列   最坏的情况?

宾果

答案 1 :(得分:0)

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

链接列表是一个非连续的内存块集合,它们通过地址连接 就是删除元素并将其插入到链表中。

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

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

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