performance - 大 O 复杂度:T(n) = O(f(n)),G(n) = O(h(n))。T(G(n)) = O(h(f(n)))?
问题描述
T(n)= O(f(n)), G(n)= O(h(n))
我将如何证明或反驳:
T(G(n))= O(h(f(n))
我认为这是错误的,因为它应该是 O(f(h(n))) 而不是 O(h(f(n))),因为在应用 T 之前应用了 G,所以我尝试用多项式函数代替 T 和G,我认为顺序很重要,(n^2)!不等于 (n!)^2 ,但我不确定这个推理是否正确?
解决方案
你是对的,这是错误的,但是我不太明白你的反例。
一个反例是取一个函数及其逆函数,同时保持 h 渐近非常小:
T(n) = 2^n , f(n) = 2^n
这符合给定的事实2^n = O(2^n)
And
G(n) = lg(n!) , h(n) = n lg(n)
This 也符合给定的事实lg(n!) < O(lg n^n) = O(n lg n)
但是,T(G(n)) = 2^(lg(n!)) = n!
但是h(f(n)) = 2^n lg(2^n) = n*2^n
,n! =/= O(n*2^n)
因为我们有一个阶乘函数与一个指数函数(乘以一个线性函数),因此我们证明它是不正确的。
原因n! =/= O(n 2^n)
是:n*2^n < 2^n * 2^n = 4^n
而且我们知道阶乘函数“击败”指数。
推荐阅读
- maven - 在 jenkins 中出现编译错误,但在 eclipse 和命令行中没有
- html - 监听 index.html 中的服务属性
- .htaccess - 我不确定我的 .htaccess 是否错误,或者服务器是否还没有读取我的 .htaccess 文件
- react-native - 在android的特定屏幕上请求权限
- outlook-addin - 适用于 Web 的 Outlook 插件在 Web 上运行,但在 Office Outlook 2013 上不运行
- vba - 在VBA中保持小数部分不变的情况下格式化数字的主要部分
- r - R:插入符号包和功能数据
- hybris - 提交 ON 的 hybris 直接 sql 查询没有影响
- reactjs - 如何在url中传递参数并用它调用api?
- sql - 如何根据SQL中的某些条件将同一表的两行或多行合并为列?