在这种情况下,“常数”是什么意思?

时间:2013-10-29 01:37:24

标签: algorithm time-complexity

我目前正在阅读算法简介一书,我对分析算法有疑问:

根据本书,合并排序的计算成本是c lg n,它说

  

我们将c限制为常数,以便字大小不会随意增长(如果字大小可以任意增长,我们可以在一个字中存储大量数据并在恒定时间内对其进行操作)

我不明白这里“常数”的含义。任何人都可以清楚地解释这意味着什么吗?

2 个答案:

答案 0 :(得分:0)

算法研究中的计算复杂性涉及查找函数,该函数提供算法所需的时间(或空间)的上限和下限。回想一下高中的基本代数,你在那里学到了一条线的一般点 - 斜率公式吗?该公式y = mx + b提供了两个参数,m(斜率)和b(y截距),它们完全描述了一条线。这些常数(m,b)描述了线的位置,斜率越大意味着线越陡。

算法复杂性只是描述算法运行多长时间(和/或需要多少空间)的上限(可能更低)的一种方式。使用big-O(和big-Theta)表示法,您将找到一个为算法成本提供上(和下)边界的函数。常数只是改变曲线,而不是改变曲线的形状。

答案 1 :(得分:0)

  

我们将c限制为常数,以便字大小不会随意增长(如果字大小可以任意增长,我们可以在一个字中存储大量数据并在恒定时间内对其进行操作)

在物理计算机上,机器字的最大大小。在32位系统上,这将是32位,在64位系统上,它可能是64位。对机器字的操作(通常)假设花费时间O(1),即使它们同时在许多位上操作。例如,如果在机器字上使用按位OR或按位AND,则可以将其视为在单个时间单位内执行32或64个并行OR或AND运算。

当尝试为计算系统构建理论模型时,必须假设机器字的最大大小的上限。如果你不这样做,那么你可以声称你可以执行诸如“在时间O(1)中计算n个值的OR”或“在时间O(1)中将两个任意精度数加在一起”之类的操作,你真的不能在真正的电脑上做。因此,通常假设机器字具有一些最大尺寸,因此如果您确实想要计算n值的OR,您仍然可以这样做,但是您不能通过将所有值打包到一台机器中来立即执行此操作。单词并执行单个汇编指令以获得结果。

希望这有帮助!