Math 如何计算n log n=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

我的算法课上有一个家庭作业问题,要求我计算一个问题的最大规模,这个问题可以在给定数量的操作中使用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)
是一个单调函数。您可以简单地使用二分法(在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