我有一个我的算法类的作业问题,要求我计算一个问题的最大大小,这个问题可以用给定的操作数来解决,使用O(n log n)算法即:n log n = c)。我能够通过近似得到答案,但有没有一种干净的方法可以得到确切的答案?如何计算n log n = c
回答
这个等式没有封闭形式的公式。基本上,可以改造等式:
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
O符号只会给你方程中最大的项。即您的O(n log n)算法的性能实际上可以更好地由c =(n log n)+ n + 53表示。
这意味着,如果不知道算法性能的确切性质,无法计算处理给定数量数据所需的确切操作次数。
但是可以计算出处理大小为n的数据集所需的最大操作数大于某个数,或者相反,使用该算法和该数可以解决的最大问题集的操作,小于一定数量。
的O表示法是用于比较2种算法是有用的,即,为O(n^2)算法比为O(n^3)算法等
Wikipedia看到更多的信息更快。
是的,计算“n Log [n] == c”的根不等于“计算问题的最大尺寸......” – 2010-10-02 20:48:23
您的解释是正确的,但对于这个特定问题,我们可以假设该算法恰好是n log n。我可能应该在问题中说明这一点。 – jlewis42 2010-10-02 20:58:49
- 1. 如何计算O(Log(N))?
- 2. 是log(n!)= O((log(n))^ 2)?
- 3. 证明log(n!)是Ω(n log(n))
- 4. 在k <n的算法运行时log(n)vs log(k)
- 5. floor(√2n)的O(log log n)算法?
- 6. 如何解决复发A(n)= A(n-1)+ n * log(n)?
- 7. 寻找关于如何计算O(n log n)的复杂度的例子?
- 8. 复制关系:T(n/16)+ n log n
- 9. 你如何看出O(log n)和O(n log n)之间的差异?
- 10. 复发:T(n)= T(n/2)+ log N
- 11. 复发T(n)= T(n - log(n))+ 1
- 12. 如何计算^(1/n)?
- 13. (log n)/(log(log n))的顺序是什么?
- 14. 中间体步骤T(N)= 2T(N/2)+ N /的log(n)
- 15. 通用实用的排序算法比O(n log n)快吗?
- 16. 图形搜索O(log(N)(N + M)
- 17. 是什么小于n是log n?
- 18. inplace_merge:是什么导致N * log(N)与N-1的复杂性?
- 19. 与log(n)相比,log(n^2)的大O是什么?
- 20. 我该如何计算Σ_{i = m}^n(m + i)^ n?
- 21. 复发:T(n)=(2 + 1/log n)T(n/2)
- 22. 时间复杂度O(N日志(log n)的)+ N O(L)
- 23. f(n)= n^log(n)复杂多项式或指数
- 24. 函数2log(log(n))+ 3nlog(n)+ 5log(n)的最大值是多少?
- 25. 大O符号 - O(n日志(N))对O(的log(n^2))
- 26. 时间复杂度 - O(n^2)到O(n log n)搜索
- 27. 如何编写时间复杂度为O(log n)的计算m^n的迭代版本?
- 28. O(log n)中的C++ bitset逻辑运算?
- 29. 如何使用求和符号证明算法是Θ(log n)?
- 30. printf%n如何计算字符?
c/ProductLog [c]? – 2010-10-02 20:39:10