【发布时间】:2018-11-02 11:57:08
【问题描述】:
我有一个问题:realloc 函数的时间复杂度是多少? 例如,我有一个整数数组:a[10]。当然,数组已经通过这种方式动态分配了=>
int *a = (int*)malloc(10*sizeof(int));
然后我想将此数组的大小调整为 11,以便向数组 a 插入一个附加值,所以我这样做 =>
a = (int*)realloc(a, 11*sizeof(int));
我的问题是:重新分配的时间复杂度是多少? realloc 是否只是简单地在数组中添加一个额外的单元格,然后它需要 O(1) 或者它重新复制整个数组 a,添加额外的第 11 个单元格并返回新大小的数组,在这种情况下,这个动作的时间复杂度是 O (n)?哪个假设是正确的?
【问题讨论】:
-
你怎么看?问题的原因。
-
这两种情况都可能发生,具体取决于数组是否可以扩展(例如:同一连续内存中有更多可用空间),请参阅:en.cppreference.com/w/c/memory/realloc
-
@DaveNewton OP 确实解释了这个问题。
-
@nicomp 我还要补充一点,(对我而言)推理也意味着分享您自己的调查结果,并且需要进行调查以显示对问题的尽职调查。我的意思是,如果您足够聪明地提出问题,那么您肯定足够聪明,可以进行大量研究,并可能得出正确的结论(“取决于”)。但要要求验证关于 SO 的假设,IMO 设置了相当高的标准,以表明尽职调查 YMMV。
-
@nicomp 我并不是想成为好斗或分裂的人——我只是认为这个问题是合理的,可以通过适当的神经元应用自行回答。
标签: c arrays memory allocation