如何计算n log n = c

时间:2010-10-02 20:04:18

标签: math

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

2 个答案:

答案 0 :(得分:15)

此等式没有封闭式公式。基本上,你可以改变方程式:

 n log n = c
log(n^n) = c
     n^n = exp(c)

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

n = exp(W(c))

其中W是Lambert W function(特别参见“例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

答案 1 :(得分:1)

O符号只给出了等式中最大的项。即,你的O(n log n)算法的性能实际上可以通过c =(n log n)+ n + 53来更好地表示。

这意味着在不知道算法性能的确切性质的情况下,您将无法计算处理给定数据量所需的确切操作数。

但是可以计算出处理大小为n的数据集所需的最大操作数大于一定数量,或者相反,可以使用该算法和那个数量来解决可以解决的最大问题集。操作,小于一定数量。

O符号对于比较2种算法很有用,即O(n ^ 2)算法比O(n ^ 3)算法等更快。

请参阅Wikipedia了解详情。

some help with logs