我正在阅读 Skiena 的“算法设计手册”。第一章陈述了 Big O 符号的正式定义:f(n) = O(g(n)) 表示 c * g(n) 是 f(n) 的上限。即存在一些常数 c 使得对于足够大的 n,f(n) 总是小于或等于 c * g(n)。 (即某些常量 n >= n0 的 n0 )所以这很好,也有道理。但随后作者继续描述特定函数的大 O:3n^2 - 100n + 6他说 O(3n^2 - 100n - 6) 不等于 O(n) 。他的理由是,对于我选择的任何 c ,当 c * n 时 3n^2 总是 n>c 。这是真的,但是 (-100n + 6) 部分呢?假设我选择 c = 1 和 n = 2 。 3n^2 - 100n + 6 = 12 - 200 + 6 = -182c * n 是 1*2 ,即 2 。 -182 肯定小于 2 ,那么为什么 Skiena 忽略这些术语呢? 最佳答案 注意定义中的 n >= n0。如果你选择了一些 c 和 n0 ,它必须是 每个 n >= n0 ,而不仅仅是 n0 。因此,如果您有 c = 1 和 n0 = 2 ,例如 n = 1000 也必须如此,但事实并非如此。3n^2 - 100n + 6=> 3(1000)^2 - 100(1000) + 6 = 3 000 000 - 100 000 + 6 = 2 900 006c.n=> 1(1000) = 1 000关于algorithm - 大哦 - 为什么这个不平等是真的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20899027/
10-11 02:45