【问题标题】:Find theta notation of the following while loop查找以下 while 循环的 theta 表示法
【发布时间】:2012-03-04 16:46:33
【问题描述】:

我有作业问题:

  1. 找到语句 x = x + 1 执行次数的 theta 表示法。 (10 分)。
i = n
while (i >= 1)
{
   for j = 1 to n
   {
      x = x + 1
   }
   i = i/2
}

这就是我所做的:

好的,首先让我们让它变得更容易。我们将首先找到以下的增长顺序:

while (i >= 1)
{
   x = x + 1
   i = i/2
}

具有增长顺序 O(log(n)) 实际上是对数基数 2

另一个内部for循环将执行n次因此算法应该是有序的:

O(log(n)*n)


我感到困惑的部分是我应该找到 theta 符号而不是 big-O。我知道 theta 表示法假设将函数限制在上限和下限。正确答案会是Theta(log(n)*n)吗?

我在link 中找到了答案,但我不知道你是如何得到这个答案的。为什么他们声称答案是 Theta(n)?

【问题讨论】:

  • 我现在很想吃乌龟,要是我能抓到一只就好了。
  • 应该是theta(log(n)*n)
  • 我也这么认为,所以链接answers.yahoo.com/question/index?qid=20100203122230AAP41TQ是错误的吗?
  • (a) 区分大 O 表示法和大 O 表示法。在 theta 符号中找到以下函数的时间复杂度: (i) f(n) : n^3 + 2^1000 (ii) f(n) :n^4+!n+100 (iii) f(n) :n^3+ n^2log n+log4^ n+ 20 (iv) f(n) : 2^n + !n log n + log(log(log(n))) + 100 :D

标签: algorithm big-o big-theta


【解决方案1】:

你现在应该证明它也是Omega(nlogn)

我不会确切地展示如何,因为它是家庭作业 - 但它与您展示的相同原理 O(nlogn)。您需要表明 [非正式解释:] 该函数的渐近行为 的增长至少与nlogn 一样快。 [对于大 O,您表明它最多以 nlogn 的速度增长]。

请记住,如果一个函数同时是 O(nlogn)Omega(nlogn),则它是 Theta(nlogn) [反之亦然]

p.s.你的预感是真的,很容易证明它不是Omega(n),因此也不是Theta(n)

附言。 2:我认为另一个答案的作者与不同的程序混淆了:

i = n
while (i >= 1)
{
   for j = 1 to i //NOTE: i instead of N here!
   {
      x = x + 1
   }
   i = i/2
}

上面的程序确实是Theta(n),但是和你提供的不一样。

【讨论】:

  • 我应该删除作业标签大声笑。感谢您的帮助!
  • 所以换句话说我错过了右下角的另一个渐近线?那就是你所说的欧米茄。所以我可以选择一个增长非常缓慢并且在技术上是正确的函数?无论如何,假设我找到了 Omega(nlogn)。那么我的最终答案必须包括 big-O 和 Omega?
  • @TonoNam:如果你证明你的算法的复杂度下界是Omega(f(n)),并且它的复杂度上限是O(f(n)),那么它的复杂度是Theta(f(n))。 [反之亦然]。当然f(n)=nlogn也是正确的,所以如果你证明Omega(nlogn)O(nlogn),你实际上证明了Theta(nlogn)
  • @TonoNam:另外看看我的第二次编辑,我想我知道为什么另一个问题的回答者声称它是Theta(n),他可能与不同的类似算法混淆了。
  • 感谢您指出这一点。这就是为什么它没有意义。无论如何,我会根据您的解释发布答案。看看它。非常感谢您的帮助!
【解决方案2】:

以更正式的方式重新表述您的代码片段,以便可以使用 Sigma 表示法轻松表示:

for (i = n; i >= 1; i = i/2 ) {
    for j = 1; j <= n; j ++) {
        x = x + 1; // instruction of cost 'c'
    }
}

我们得到:

【讨论】:

  • 不错的答案!如果我们有这样的代码: for (i=0; i
  • 我的意思是,在我的情况下,步长是通过添加一些东西来增长的,但在你的情况下,步长会通过在第一个 for 中划分一些东西而变小。
  • 是的,这是可能的。检查此link(幻灯片从 8 开始)。
【解决方案3】:

正如@amit 提到的,我已经有了函数的上限,那就是 Big-O,它实际上是 O(n*lgn)。如果我绘制该函数的表格,我会得到类似的东西:

n   n*lng
1   0
2   2
3   4.754887502
4   8
5   11.60964047
6   15.509775
7   19.65148445
8   24
9   28.52932501
10  33.21928095

因为那是大 O,所以这意味着真正的函数将受这些值的限制。换句话说,实际值应小于表中的值。例如,当n=9 我们通过查看表格知道答案应该小于或等于28.52932501 时,为实例取一个点

所以现在我们找不到欧米茄了,那是另一个界限。我认为下界函数应该是Omega(n) 然后我们会得到表格

n   Omega(n)
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
.......

所以这将是另一个界限。如果我们再次以 n = 9 的位置为例,那么它会给我们 9。这意味着我们的真实函数应该给我们一个大于或等于 9 的值。基于我们的 big-O 函数,我们也知道它应该是小于或等于28.52932501

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2016-06-18
    • 2013-12-22
    • 2018-04-19
    • 1970-01-01
    • 2018-06-06
    • 2023-03-30
    相关资源
    最近更新 更多