Math 如何计算n log n=c
我的算法课上有一个家庭作业问题,要求我计算一个问题的最大规模,这个问题可以在给定数量的操作中使用O(n logn)算法(即:n logn=c)来解决。我可以通过近似得到一个答案,但是有没有一种干净的方法可以得到一个精确的答案?这个方程没有封闭式公式。基本上,您可以变换方程:Math 如何计算n log n=c,math,Math,我的算法课上有一个家庭作业问题,要求我计算一个问题的最大规模,这个问题可以在给定数量的操作中使用O(n logn)算法(即:n logn=c)来解决。我可以通过近似得到一个答案,但是有没有一种干净的方法可以得到一个精确的答案?这个方程没有封闭式公式。基本上,您可以变换方程: n log n = c log(n^n) = c n^n = exp(c) 然后,该方程具有以下形式的解: n = exp(W(c)) 其中W为(特别参见“示例2”)。证明了W不能用初等运算表示 然而,f(n
n log n = c
log(n^n) = c
n^n = exp(c)
然后,该方程具有以下形式的解:
n = exp(W(c))
其中W为(特别参见“示例2”)。证明了W
不能用初等运算表示
然而,f(n)=n*log(n)
是一个单调函数。您可以简单地使用二分法(在python中):
O符号只给出等式中的最大项。也就是说,O(n logn)算法的性能实际上可以用c=(n logn)+n+53更好地表示 这意味着,如果不知道算法性能的确切性质,您将无法计算处理给定数据量所需的确切操作数 但是,可以计算出处理大小为n的数据集所需的最大操作数大于某个数,或者相反,使用该算法和该操作数可以解决的最大问题集小于某个数 O表示法对于比较两种算法很有用,即O(n^2)算法比O(n^3)算法快,等等 有关更多信息,请参阅
是的,计算“n Log[n]==c”的根并不等于“计算问题的最大规模…”您的解释是正确的,但对于这个特定问题,我们可以假设算法正是n Log n。我可能应该在问题中说明这一点。
import math
def nlogn(c):
lower = 0.0
upper = 10e10
while True:
middle = (lower+upper)/2
if lower == middle or middle == upper:
return middle
if middle*math.log(middle, 2) > c:
upper = middle
else:
lower = middle