首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Fibonacci数的大小调整动态数组的大小

用Fibonacci数的大小调整动态数组的大小
EN

Stack Overflow用户
提问于 2018-12-12 22:38:32
回答 1查看 258关注 0票数 0

我们有一个Fibonacci数大小的动态数组。假设F(k)是数组的当前大小(F(K)是斐波那契级数的第k个数)。我们这里有两个规则:1)如果在数组中插入一个元素后,数组元素的数量是F(k-1),我们创建一个大小为F(k+1)的新数组,并将前面的元素复制到新数组中。2)如果从数组中删除一个元素后,数组元素的数量为F(k-3),我们创建一个大小为F(k-1)的新数组,并将之前的元素复制到新数组中。

首先,数组是空的,大小为2。我们想要证明,对于每个操作序列(插入或删除),每个操作都有O(1)的摊销时间复杂度。

为了解决这个问题,我意识到在两个数组增长操作之间至少有F(k-1)-F(k-2)操作,复制元素需要O(F(k-1))时间。此外,在两个数组收缩动作之间至少有F(k-2)+F(k-3)个动作,复制元素需要O(F(k-3))时间。你能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-12 22:49:43

摊销分析是对复制的每一次求和,如果我们假设为n = F(k),则为T(n) = F(1) + F(2) + ... + F(k)。我们知道T(n) = F(k+2) -1

作为T(n) = F(k+2) - 1 = F(k+1) + F(k) - 1 = 2F(k) + F(k-1) - 1= 2*n + F(k-1) - 1< 3n - 1,因此摊销成本是T(n)/n < 3,它意味着摊销意义上的T(n) = Theta(1)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53745392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档