Big-o 复杂度问题 - 线性累积幂

Big-o complexity problem - Linear cumulative power

背景

我正在尝试解决我从 2013 年斯坦福 "Design & Analysis of Algorithms" 课程中发现的一些问题。特别是问题集 1 here.

中的问题 3

概括地说:

这道题要求你设计一个使用 Θ(n)W 总功率的算法。

作为问题集 1 中的一个 5 分问题,我想这比我找到它要容易。

我的问题是

...这个算法是什么?...或者我怎样才能改变我的想法找到一个?

我被困在哪里

问题指出策略 "just increase power by 1 watt each time" 将导致 Θ(n^2)W 总功率。事实上,这是真的,因为任何 n 使用的总功率是 n * (n+1) / 2.

但是,我想不出有什么策略不是:

此外,如果我暂时忽略收音机的离散性并将问题分析为连续线性函数,则总功率应该可以推广到函数 g(n) 的形式 g(n) = Kn + B (其中 K 和 B 是常量)。这个线性函数代表我们需要用来控制收音机的函数的积分。

然后,如果我对该函数求导数 dg(n)/dn,我将得到 K。即如果我想要线性总功率,我应该以恒定功率驱动收音机 n 次……但是如果我碰巧猜对了 K,这只会导致救援第一次。

编辑

是的,我已经想到了加倍等等....但是这里的答案指出了我的想法错误。我一直在尝试解决问题 "design an algorithm that has linear cumulative power consumption"...我认为这是不可能的。正如答案所指出的那样,我应该将其视为 "for a given n, design an algorithm that will consume Kn"...即问题是什么。

下面是一个简单的算法和复杂度分析:

  • 最初尝试 power=1W
  • 如果没有收到,请尝试 power=2*previous_power,直到收到为止

复杂度:

所以基本上我们在功率 p>= n 时停止,其中 n 是所需的阈值。 我们知道:

p>=n and p/2<n => n<=p<2n

为了达到 pW(即接收所需的水平),这意味着您之前尝试过 p/2,在此之前 p/4... 并且最初是1,所以让我们总结一下所有步骤:

1+2+4+...+p/2+p -> 2*p ~ Θ(p) = Θ(n)

我已阅读作业... 它声明无线电能够以整数形式传输,但这并不意味着您应该一个一个地尝试并遍历所有整数直到 n.

好吧,我可以给你答案,但我会试着引导你自己思考:

请注意,您需要传输等于或大于 n 的信号,所以您不可能是"going to far"。现在,有了复杂性的概念,如果你遍历所有信号,你会得到一系列 (1+2+3+...+n) 等于 Θ(n^2),试着想出一个模式您可以跳过其中一些并获得一个总和为 Θ(n).

的系列

此任务类似于天真地搜索 Θ(n^2) 的算法,但有一些算法比这更少 - 您应该去探索它们的工作原理:)

如果你想要一个答案的方法:

您可以从 1W 开始,每一步将其加倍用于下一次传输。这样你将进行 log(n) 次尝试,每次尝试花费 i,其中 i 是该次尝试的力量。所以累积功率将是这样的: (1+2+4+8+16+...+n) 等于 2n-1 并且符合 Θ(n)

的要求