如何计算n log n = c

jle*_*s42 11 math

我的算法类有一个作业问题,要求我计算一个问题的最大大小,该问题可以使用O(n log n)算法在给定数量的操作中解决(即:n log n = c).我能够通过近似得到一个答案,但有没有一个干净的方法来得到一个确切的答案?

lio*_*ori 15

这个等式没有封闭形式的公式.基本上,你可以改变方程式:

 n log n = c
log(n^n) = c
     n^n = exp(c)
Run Code Online (Sandbox Code Playgroud)

然后,这个等式有一个形式的解决方案:

n = exp(W(c))
Run Code Online (Sandbox Code Playgroud)

其中W是Lambert W函数(特别参见"例2").事实证明,W不能用基本操作来表达.

但是,f(n)=n*log(n)是一种单调的功能.你可以简单地使用二分(在python中):

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
Run Code Online (Sandbox Code Playgroud)