Algorithm 算法分析

Algorithm 算法分析,algorithm,Algorithm,我正在读算法分析专题。这是这本书的文本片段 当n翻倍时,线性系统的运行时间将增加2倍 程序,四个用于二次程序,八个用于三次程序。 以对数时间运行的程序只接受一个加法常数 当n翻倍时,运行在O(n log n)中的程序会占用更长的时间 在同样的情况下,运行的时间是原来的两倍多一点 如果较低阶项已经被忽略,这些增加可能很难被发现 系数相对较大,n不够大 我的问题是,作者的意思是低阶项具有相对较大的系数?有人能举例说明吗 谢谢 例如,如果在较低的尺度下使用O(n)算法,则T(n)=490239n+(在

我正在读算法分析专题。这是这本书的文本片段

当n翻倍时,线性系统的运行时间将增加2倍 程序,四个用于二次程序,八个用于三次程序。 以对数时间运行的程序只接受一个加法常数 当n翻倍时,运行在O(n log n)中的程序会占用更长的时间 在同样的情况下,运行的时间是原来的两倍多一点

如果较低阶项已经被忽略,这些增加可能很难被发现 系数相对较大,n不够大

我的问题是,作者的意思是低阶项具有相对较大的系数?有人能举例说明吗


谢谢

例如,如果在较低的尺度下使用O(n)算法,则T(n)=490239n+(在此处插入荒谬的常数),这意味着性能会很差,但随着尺度的增加,您会发现增加总是线性的


现实世界的例子是合并排序,O(n logn)问题是递归的计算成本或开销是n的一个因子,比nlogn的阶数小,因此在大O中被丢弃,问题是,这个因素也变得相当大,并影响性能。

渐近表示法将运行时的边界称为n->无穷大。因此,O(n logn)函数的实际运行时可能为.1*n logn+100000*n

在这种情况下,100000*n项是“低阶项”。当n->无穷大时,这个项被.1*n对数n项所压倒


但是,如您所见,对于小n,100000*n项将主导运行时。

假设您的算法在
n
元素上运行时实际执行
n^2+1000 n
计算。现在对于
n=1
需要1001次计算,对于
n=2
需要2004次计算。与线性增长的差别很小,你很难发现二次增长的贡献

然而,渐进地,您的算法需要O(n^2)个步骤,因此渐进地(当n变大时)将输入大小加倍,使您的运行时间增加四倍。但是对于我们的小值,从1加倍到2并没有使运行时间增加四倍!低阶项为
n
,其系数(1000)比前阶项
n^2
(1)的系数大


这说明了渐近复杂性如何不涉及特定值,尤其是小值。当
n
变大时,这仅仅是一个关于行为的限制性声明。

当使用O表示法时,您可以指定函数的最大项,该项是您的性能界限。例如,如果性能总是由f=c3n3+c2n2+c1n+c0绑定,那么您会说这是O(n3)。作者说,当n很小时,系数对性能的影响可能大于n,例如,如果c2很大,c3很小,则性能可能为O(n2)直到n的大小决定了系数,如果你只看n的具体小实例的相对性能。

我想你的意思是:对于n=2,你需要2004(n^2+1000 n)@LiKao:谢谢,我做到了!修理。。。也许
n^2+1000
会是一个更好的例子。