Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures 动态数组的运行时间增加一个常量而不是加倍_Data Structures_Dynamic Tables - Fatal编程技术网

Data structures 动态数组的运行时间增加一个常量而不是加倍

Data structures 动态数组的运行时间增加一个常量而不是加倍,data-structures,dynamic-tables,Data Structures,Dynamic Tables,我刚完成一次考试,其中一个问题是总结: 给定一个大小为1000的空数组,在数组中插入n个元素的摊余成本是多少?当数组已满时,我们不会将数组增加一倍,而是将其增加1000,并将所有元素复制到新数组中,就像对动态表那样 我继续回答,但我一点也不确定我的答案。我知道倍增动态表的摊销运行时间是2,但我找不到关于不断增长的动态表的更多信息。让我们将初始大小设为a,增量也设为a,我们有N个增长步骤。如果需要,每个步骤都需要k*大小的基本操作来复制元素和清除内存 成本=k*A+A+A+A+2A+…+A+N-1

我刚完成一次考试,其中一个问题是总结:

给定一个大小为1000的空数组,在数组中插入n个元素的摊余成本是多少?当数组已满时,我们不会将数组增加一倍,而是将其增加1000,并将所有元素复制到新数组中,就像对动态表那样


我继续回答,但我一点也不确定我的答案。我知道倍增动态表的摊销运行时间是2,但我找不到关于不断增长的动态表的更多信息。

让我们将初始大小设为a,增量也设为a,我们有N个增长步骤。如果需要,每个步骤都需要k*大小的基本操作来复制元素和清除内存

成本=k*A+A+A+A+2A+…+A+N-1A=kA*N+A*1+2+3+…+N-1=k*A*N+A*N*N-1/2=ON^2*A=ON^2假设A为常数

1+2+3+…+N-1是


另一方面,阵列成本翻倍让我们先看看初始大小是A,增量也是A,我们有N个增长步骤。如果需要,每个步骤都需要k*大小的基本操作来复制元素和清除内存

成本=k*A+A+A+A+2A+…+A+N-1A=kA*N+A*1+2+3+…+N-1=k*A*N+A*N*N-1/2=ON^2*A=ON^2假设A为常数

1+2+3+…+N-1是


另外,在

上阵列成本翻倍是指:k*A+A+A+A+2A+…+a+n-1*a,而不是:k*a+a+a+a+2a+a+n-1*a,因为中间可能有更多的项?我说到这一点,但我不能简化它,你能解释一下你是如何简化它到:k*AN+AN*N-1/2的吗?是的,当然,我遗漏了…,更正并添加了一些词没有,如果increment=N,那么Cost=AN+nN*N-1/2=ON^2渐近不是数组增长的次数吗?在我的例子中,我插入n个元素,我们每1000个元素增长一次,那么n=n/1000不是吗?是的,n是数组增长的次数。如果您插入n个元素,那么我们也会每n个元素增长一次。N不依赖于N。你的意思是:k*A+A+A+A+2A+…+a+n-1*a,而不是:k*a+a+a+a+2a+a+n-1*a,因为中间可能有更多的项?我说到这一点,但我不能简化它,你能解释一下你是如何简化它到:k*AN+AN*N-1/2的吗?是的,当然,我遗漏了…,更正并添加了一些词没有,如果increment=N,那么Cost=AN+nN*N-1/2=ON^2渐近不是数组增长的次数吗?在我的例子中,我插入n个元素,我们每1000个元素增长一次,那么n=n/1000不是吗?是的,n是数组增长的次数。如果您插入n个元素,那么我们也会每n个元素增长一次。N不依赖于N。