- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个动态数组,我不断地向其追加项目。 append 是复杂性 O(1)
。当数组变满时,我想增长数组并将其复制过来,这就是复杂度 O(n)
。
现在,假设我在数组变满时以不同的速率增长它。这些费率是:
i) 一些常数 C
ii) n/2
iii) n^2
每种情况下的分摊运行时间是多少?
我相信我能够解决案例 i
。摊销运行时间将是操作的总成本除以操作总数。在这种情况下,总成本为 C * O(1) + 1 * O(n)
,操作总数为 C
。因此,分摊运行时间为 O(n)
。
但是,在分析剩下的两个案例时,我有点迷茫。在我看来,操作总数将分别为n/2 + 1
和n^2 + 1
,但我不太清楚如何计算总运营成本。
谁能引导我走上正确的道路?
最佳答案
您可以使用与第一种情况类似的分析。
ii.
(n/2 * O(1) + O(n)) / (n/2) = O(1) + O(n)/n = O(1)
iii.
(n^2 * O(1) + O(n)) / (n^2) = O(1) + O(n)/n^2 = O(1)
This answer更详细地解释了为什么按 n
比例调整大小的动态数组(假设它调整到 n
1 或更大的幂)具有恒定的摊销成本。
关于algorithm - 通过改变大小增加动态数组时的分摊运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54639580/
关于getting started Apple Pay 页面上显示 Apple Pay 支持“分批发货”。这在实践中是如何实现的?我知道如何从成功的 PKPayment 中获取 token 。 获得该
我了解到动态数组,如 std::vector,在达到其容量时将其容量加倍,从而使 push_back 操作 O(1) 摊销时间。 但是,为什么首先需要这样做?在 vector 末尾为一个元素分配空间并
我正在寻找具有以下基本属性的类似集合的容器类: 已摊销 O(1) 插入时间,忽略重复插入 有 O(n) 次迭代时间(特别是 O(capacity) 是 Not Acceptable ) 重用内存/仅在
我是一名优秀的程序员,十分优秀!