algorithm - 恒定时间复杂度的大 O
问题描述
如果我有像 c1+c2+c3 这样的恒定时间复杂度,那么我知道这将需要线性时间。我想用大 O 表示法来表达它。如果时间复杂度是 f(n)= 2n+3 那么我们写 O(n) 然后证明 f(n) < cg(n),但是对于恒定的时间我们怎么做呢?
解决方案
如果你知道算法的时间复杂度是一些常数的组合,比如 c1 + c2 + c3,那么你可以定义一个函数 f(x) = c1 + c2 + c3 = c。然后,使用大O的定义,即
f(x) = O(g(x)) 当 x 趋于无穷时
当且仅当存在一个正实数 M 和一个实数 x0 使得
|f(x)| <= Mg(x) 对于所有 x >= x0
我们可以说 f(x) = c 是 O(1) 且 g(x) = 1。原因是我们可以通过选择 M 为常数 c 来满足上述定义的要求,而 x0 在这里无关紧要因为时间复杂度不取决于 x 的值。
推荐阅读
- php - 使用PHP根据函数中的变量显示动态图像
- python - 如何修改获取股票价格每日支点(高点/低点)的循环以获取每周?
- php - 无法通过社交登录对用户进行身份验证
- python - 如何在空文件上加载 json.load(filename)?
- azure - Microsoft Teams + Azure 机器人:间歇性错误 403“机器人不是对话名单的一部分”
- scala - 将 csv 读入带有时间列的 hdfs 不起作用
- android - Android Studio - 整个项目中的全局变量?
- python - 使用 feedparser 从博客中获取每个唯一项目。在 for 循环中检查列表成员资格不起作用
- ios - 哪个 AppStoreConnect 选项用于 IAP 提示 Jar
- c# - 如何在 C# 中生成条形码 pdf?