- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下方法 op 属于具有两个私有(private)整数值实例变量的类,n
和计数器,它们都在构造函数中初始化为零值,随后仅
由方法 op 修改。
public void op()
{
if(counter<100)
{
op1(); //method with O(1) time complexity
counter++;
}else {
op2(); //method with O(n^2) time complexity
counter = 0;
}
n++;
}
最佳答案
谈到摊销运行时,您可以不是 计算大部分时间会发生什么。
首先,您如何定义大部分时间?
操作的摊销运行时间可以看作是操作的平均运行时间。
现在解决您的问题:
为简单起见,我假设您写了 if (counter < 99)
而不是 if (counter < 100)
.这样,操作会在 100 个周期后重复,而不是在 101 个周期后重复。
写 O(...)
时,在下文中,我的意思是 Θ(...)
,因为否则你的问题的答案将是微不足道的,因为一切都是 O(1)
也是O(n^2)
.
调用op()
后100 次,总运行时间为 99 + 100^2
.
调用op()
后200 次,总运行时间为 2 * 99 + 100^2 + 200^2
.
现在让我们忘记那些 99
或 2 * 99
,因为它们由 n^2
主导值(value)观。
所以打电话后op()
n
次,总运行时间将类似于 100^2 + 200^2 + ... + n^2
(为简单起见,我们假设 n
可以被 100
整除)。
现在我将证明这是在 O(n^3)
.
Let k = n/100
100^2 + 200^2 + ... + n^2
= 100^2 * (1^2 + 2^2 + ... + k^2)
=(*) O(100^2 * k * k^2)
= O(k^3)
= O(n^3)
(*): sum from 1 to k of i^2 is k (k+1) (2k+1) / 6 = O(k^3)
op()
的平均运行时间是
O(n^3 / n) = O(n^2)
.因此,
op()
的摊销运行时间是
O(n^2)
.
关于big-o - 考试答案确认 - 摊销时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12659931/
我只是想在继续之前向某人确认我走在正确的轨道上。问题指出,当我想向已经满的数组添加新元素时,我必须“在 O(1)(amortized) 中扩展数组”。 这是不是说每次我将一个新元素插入到完整列表中时,
我试图从复杂性的角度更好地理解哈希表和字典在 C# 中的工作方式(但我想语言不是一个重要因素,这可能只是一个理论问题)。 我知道如果 Count 小于容量(这有点明显)。 不过,让我们看看这段代码:
我是一名优秀的程序员,十分优秀!