【发布时间】:2017-08-13 15:04:16
【问题描述】:
def findMax(f,c):
n=1
while f(n) <= c:
n += 1
return n
这是一个给定函数 f 和最大计数的高阶 python 函数,
c 返回满足 f(n) ≤ c 的最大 n。这有效,但当 n 变得太大时无效,例如 f(10**6)。如何使该算法运行 O(log n) 时间,以便使用以下函数促进 f(10**6)?
def f(n):
return math.log(n, 2)
【问题讨论】:
-
f保证是单调的吗? -
f(n) 的结果是否相对于 n 成比例增加?你可以做一个二进制遍历。
-
没有更多关于
f性质的信息,没有办法做得更好。 -
"返回最大的 n,使得 f(n) ≤ c":它似乎返回 最小的
标签: python algorithm time-complexity divide-and-conquer