math - 什么是渐近符号的松散界限?
问题描述
在描述松散边界时,我可以为正确的符号选择任何与渐近符号的实际值完全不接近的值吗?如果我的函数是 n^2 + n,我可以说松散的上限是 O(n^3),我可以说松散的下限是 Ω(1)吗?这样的陈述是否有效?我什么时候知道我的松绑是否有效?
解决方案
从这里Big-O 和 Little-O Notation 之间的差异谈到 Big-O 和 little-o,可以说你的n^2+n
is O(n^3)
,这是一个宽松的上限。然而,大多数人会将其描述O(n^2)
为更准确,并告诉您该算法实际上比O(n^3)
我认为当某些事情不完全了解时,“松散的约束”可能会出现更多。例如朴素的递归斐波那契函数:
def fibo(n):
if n == 1 or n == 2:
return 1
return fibo(n-1) + fibo(n-2)
您可以说这是O(2^n)
因为该函数进行了 2 次递归调用,因此它在每一步都加倍。但是,这棵“树”的一侧(如果您要扩展函数调用,它看起来有点像一棵树)将比另一侧更快地触底到基本情况,因为它是n-1
vs n-2
。这意味着“树”是不平衡的,因此它实际上会比O(2^n)
. 因此O(2^n)
是一个“宽松的上限”。
寻找更紧密的界限留给读者作为练习;)
推荐阅读
- javascript - 将列表元素附加到无序列表
- c# - C# NModbus 网络从站 - 获取主机计数
- c# - 将 Razor Pages 项目更新到 ASP.Net Core 5.0:为什么要依赖 MySQL 服务器版本?
- javascript - 两个 firebase onSnapShot() 调用,但只有 1 个在工作,即使它的代码相同
- amazon-web-services - 如何从 AWS CDK for python 中的 Bucket 对象获取存储桶名称
- javascript - 我有一个对象列表。我想在第一行显示 8 个项目。如果列表长度超过 8 则添加一个显示更多按钮
- ignite - 从 2.7.0 升级到 2.9.0 后,Ignite 客户端不稳定
- javascript - 这是否遵循策略设计模式
- ios - 提交苹果商店以供审核 info.plist 中的 DarkMode UIUserInterfaceStyle 键
- primefaces - 单击数据表时出现黑色边框