问题描述
我是一位经验丰富的程序员,了解Big O表示法(常量,线性,logN,NlogN,多项式等)。我可以分析算法并发现它们的复杂性。但是我不是计算机科学工程师。一切都是自学成才。
今天,我正在查阅Sedgewick的书,其中有关于算法分析的章节。这就是他定义Big O算法的方式
如果存在常数,则称函数g(N)为O(f(N)) c o 和N o ,使得g(N)小于 所有N> N o
的c o f(N)
我一点也不明白。我需要了解什么才能理解这一点?
解决方法
用非常简单的术语来说,这意味着您的函数需要25 * n + 17个CPU周期或任何这种形式的时间,可以说是O(n)。我们只关心方程中增长最快的部分(这就是N> N0位的含义:对于足够大的N值,我们可以说25 * n + 17
这使我们可以将O(n ^ 3 + 7 * n ^ 2 + 5 log n + 17)简化为简单的O(n ^ 3),这要短得多,并且仍然传达了我们需要知道的所有信息,因为对于大的n,所有其他部分都可以忽略不计。