【发布时间】:2020-06-01 23:37:35
【问题描述】:
背景
我正在尝试解决我在 2013 年斯坦福大学“算法设计与分析”课程中发现的一些问题。特别是问题集 1 here 中的问题 3。
总结如下:
- 您被困在荒岛上,无线电可以以整数功率水平(即 1W、2W、3W 等)发送求救信号。
- 如果您以足够高的功率发射信号,您将收到响应并获救。
- 很遗憾,您不知道需要多少功率,n。
问题要求你设计一个使用 Θ(n)W 总功率的算法。
作为问题集 1 中的一个 5 分问题,我认为这比我找到的要容易。
我的问题是
...这个算法是什么?....或者我怎样才能改变我的想法来找到一个?
我被困在哪里
问题指出,“每次仅将功率增加 1 瓦”的策略将导致总功率为 Θ(n^2)W。事实上,这是真的,因为任何 n 使用的总功率是 n * (n+1) / 2。
但是,我想不出任何不是这样的策略:
- 大于线性;或
- 一种我通过“连续几个 n 不做任何事情”来作弊的策略。
此外,如果我暂时忽略无线电的离散性并将问题分析为连续线性函数,则总功率应该可以推广到 @ 形式的函数 g(n) 987654324@(其中 K 和 B 是常数)。这个线性函数将表示我们需要用于控制无线电的函数的积分。
然后,如果我取这个函数的导数 dg(n)/dn,我就剩下 K。即如果我想获得线性总功率,我应该以恒定功率驱动收音机 n 次……但这只有在我第一次碰巧猜对 K 时才会导致救援.
编辑
是的,我已经考虑过加倍等......但是这里的答案指出了我的想法错误。我一直在尝试解决“设计一种具有线性累积功耗的算法”的问题……我认为这是不可能的。正如答案所指出的那样,我应该将其视为“对于给定的 n,设计一个将消耗 Kn 的算法”......即提出了什么问题。
【问题讨论】:
-
假设所需瓦特为100,尝试从1开始,双倍输入直到成功。并将结果与每次添加一个进行比较。见this
-
提示:用你的函数方法,你正在寻找一个函数 f 与 ∫ f(n) dn = K·f(n)。这应该不会太难。
标签: algorithm big-o complexity-theory