algorithm - 在无序数组中找到最小值的时间复杂度
问题描述
我正在阅读维基页面,上面写着:
但是,在无序数组中找到最小值并不是一个恒定时间操作,因为需要扫描数组中的每个元素才能确定最小值。因此,它是一个线性时间操作,需要 O(n) 时间。但是,如果预先知道元素的数量并且不改变,那么这样的算法仍然可以说是在恒定时间内运行的。
如果事先知道元素的数量,我无法理解时间复杂度如何变得恒定?它仍然不是O(n)吗?
解决方案
看一下Big-O的定义:
f(n) = O(g(n)) 表示存在正常数 c 和 k,因此对于所有 n ≥ k,0 ≤ f(n) ≤ cg(n)。对于函数 f,c 和 k 的值必须是固定的,并且不能依赖于 n。
如果我们知道数组大小,比如 100,很明显,100 步将需要我们检查数组中的最小值是多少。
因此,对于每个 n ≥ 1,c = 100:
100 ≤ 1 * 100
这意味着(根据定义):
100 = O(1)
所以时间复杂度变成O(1)。
如果您仍然无法理解,请尝试为 n 大小的数组证明它。
推荐阅读
- performance - OAuth PKCE 和 Visual Studio 负载测试的问题
- android - 我想从 google fit 获取我的每日步数
- javafx - JavaFX TextField 监听器给出 java.lang.IllegalArgumentException: The start must be <= the end
- php - 如何在mysqli准备好的语句中动态绑定参数?
- openssl - 什么决定了不同加密算法中的 BIGNUM 大小?
- javascript - Javascript根据更大的日期键从数组中删除对象
- docker - 为什么我的静态 Docker 给出 502 错误?
- javascript - 如何触发window.matchMedia的事件?
- django - 覆盖 Django 查询集更新方法
- design-patterns - 实现实体世界的正确方法