1. 将 log(n!)、n log n、2^(log n)、n^(1/ε)(ε→0+)、(log n)^log n、n^(1/log n) 按渐近增长率从低到高排序,并给出关键比较步骤
将 log(n!)、n log n、2^(log n)、n^(1/ε)(ε→0+)、(log n)^log n、n^(1/log n) 按渐近增长率从低到高排序,并说明关键比较步骤?
- 各表达式化简为等价的简单形式
- 取对数比较与极限比值法
- 处理 ε→0+ 的极端情形
逐步化简:n^(1/log n) = n^(1/log n) = e^(ln n / log n) = e^(ln n / (ln n/ln 2)) = e^(ln 2) = 2,是常数,增长最慢。2^(log n) = n(因 2^(log₂n)=n),增长为 n。log(n!) ≈ n log n − n ln 2 + O(1)(Stirling),与 n log n 同阶。n log n 是 n·log n。n^(1/ε) 当 ε→0+ 时指数 1/ε→∞,故 n^(1/ε)=n^∞,增长为超多项式(指数级),最快。最复杂的是 (log n)^log n:取对数得 log((log n)^log n) = log n·log(log n),而 log(n log n) = log n + log log n,前者增长更快,故 (log n)^log n 增长快于 n log n。排序(低到高):n^(1/log n)=2(常数)< 2^(log n)=n < log(n!) ~ n log n < (log n)^log n < n^(1/ε)(ε→0+,超多项式)。
关键技巧是取对数比较:n^(1/log n) 化简为常数 2,2^(log n) 化简为 n,log(n!) 用 Stirling 等同 n log n,(log n)^log n 取对数后是 log n·log log n,比 n log n 的对数(log n + log log n)更大。n^(1/ε) 即使 ε 略大于 0 也是超多项式,故排在最后。
// 各表达式取对数比较示意
// ln(n^(1/log n)) = (ln n)/(log n) = ln 2 => 常数 O(1)
// ln(2^(log n)) = log n * ln 2 = ln n => O(n)
// ln((log n)^log n) = log n * ln(log n) = Theta(log n * log log n)
// ln(n log n) = ln n + ln log n = Theta(log n)