【发布时间】:2015-06-19 03:37:27
【问题描述】:
public SomeObject secondFunction(SomeObject obj) {
SomeObject retVal = new SomeObject
for data in this.dataCollection {
for data2 in obj.dataCollection {
if(someCondition) {
retVal.add(data)
}
}
}
return retVal
}
我正在尝试学习算法分析。什么是大 Θ 分析 这个功能的实现呢?为什么/如何?
我不认为这是一个 n 平方算法,因为循环通过的两个结构可能具有不同的大小。直观地说,我想称它为 n*m 算法,因为 obj、dataCollection 和 this.dataCollection 中的元素数量都是未知数。但我以前从未见过这种措辞,所以它可能是错误的。这是什么?
另外,关于最佳情况、最坏情况和平均情况,我们能说些什么?似乎最好和最坏的情况是相同的,因为它每次都会遍历两个结构中的所有元素。这是正确的,还是错误的?另外,这对平均情况意味着什么?在这个特定示例中,平均情况是否与最佳和最差情况相同?
【问题讨论】:
-
O(N*K) = O(N^2) = Θ(N^2)
-
@Lashane -- 感谢您的评论。为什么/如何是 O(nk)=O(n^2)=Θ(N^2),而 k 可能比 n 大得多或小得多?
-
想象 N -> 无穷大和 K -> 无穷大,所以 lim(N*K) = N^2
-
@Lashane:不,Θ(N^2) 绝对不 与 Θ(N*K) 相同。 Θ(N*K) 的含义有一个精确的数学定义,而 Θ(N*N) 的函数不能满足它。
-
@psmears 不一样,但通常我们只使用 N 来描述 O、Θ 等,所以我们可以假设 N=K=max(N,K) 这就是为什么 Θ( N*K)=Θ(N^2)