【发布时间】:2015-01-18 20:34:52
【问题描述】:
计算基于动态数组的时间复杂度。
在我正在阅读的文本中,它提到了两种动态增加数组的方法。
动态数组方法 1
第一种方法表明您可以构造一个大小为 1 的数组,并在每次将新数据推送到数组时动态增加它。例如,如果您推送新数据,那么您创建一个新数组,该数组的旧大小加 1,并将旧数组中的所有元素复制到新数组,然后添加新数据。文本表明这种方法的时间复杂度为 0(N^2)。我不确定如何?我认为时间复杂度是 O(N),因为您正在为每个可以拥有 N 个新元素的新元素创建一个新数组,并且您正在复制再次近似为 N 的旧元素。因此我认为复杂性是O(N)。
动态数组方法 2
第二种方法建议我们可以通过在每次阵列满时将其容量加倍来降低时间复杂度。例如,如果我们有一个初始容量大小为 4 的数组并且我们将其填满,那么当尝试添加新数据时,我们将创建一个大小为 8 的新数组并将所有旧元素复制到这个新数组中,然后添加新数据。
文中进一步指出,这种方法的时间复杂度为 O(N)。
有人可以澄清一下该方法的时间复杂度如何也是 O(N) 吗?
【问题讨论】: