【发布时间】:2011-02-08 14:38:19
【问题描述】:
当一个人使用多个函数时,我有一个关于大 O 表示法的问题。 假设我想找出以下伪代码的时间复杂度:
heap sort array of size n
for i = 1 to n{
retrieve array[i]
change value of array[i]
}
我知道使用堆排序是 O(n log(n))。由于检索和更改数组中的数据是 O(1),因此循环的复杂度为 O(n)。 现在我的问题是:整个代码的复杂性是多少?仅仅是最大的时间复杂度吗? O(n log(n)) 在这种情况下? 如果是这样,看起来像这样的函数的复杂性是多少:
for i = 1 to n{
// nothing fancy here
}
for y = 1 to n{
// nothing fancy here either
}
提前致谢。
【问题讨论】:
-
第一个例子是家庭作业。但事实是我自己“弄清楚”了其余的时间复杂度。然而,第二个例子不是家庭作业。我只想知道理论,所以你也只能回答第二个例子——这不是我的作业。
-
“由于检索和更改数组中的数据是 O(1)”:在评估比较排序的复杂性时,传统上计算(并提供大 O 渐近)的数量比较 需要对大小为 n 的数组进行排序,而不是算法花费的时间(想想你的数组在磁带上的情况,你必须倒带才能访问元素)。从技术上讲,您是对的,但是您对问题的表述表明您没有完全掌握复杂性理论的含义。没有“整体上的复杂性”:您必须指定准确计数的内容。
标签: algorithm complexity-theory time-complexity