步骤数量的定义

时间:2018-04-14 17:38:22

标签: algorithm time-complexity big-o asymptotic-complexity sicp

根据this

  

设n是衡量问题大小的参数,然后让   R(n)是该过程对问题所需的资源量   大小在我们之前的例子中,我们将n作为数字   要计算给定的函数,但还有其他可能性。   例如,如果我们的目标是计算平方的近似值   数字的根,我们可能将n作为数字的精确度   需要。对于矩阵乘法,我们可以将n作为数字   矩阵中的行数。通常,有许多属性   关于分析a的问题   给定的过程。同样,R(n)可能会测量内部数量   使用的存储寄存器,基本机器操作的数量   执行,等等。在仅执行固定数量的计算机中   在一次操作时,所需的时间将成正比   执行基本机器操作的数量。

  

...例如,如果我们将流程步骤计为“机器操作”我们   正在假设所需的机器操作数量   比方说,乘法与大小无关   要乘以的数字,如果是数字则为假   足够大。对空间的估计也有类似的评论。   像一个过程的设计和描述,分析一个   过程可以在不同的抽象层次上进行。

我通常尝试通过计算单个操作执行的次数并计算所有步骤的总数来计算步数(例如,如果语句为1,n次乘法,n次加法= 2n + 1 = 2n = n次操作,其中n为输入)。这本书使得在计算步数时可以计算出不同的东西。也就是说,计算的步骤可能会有所不同。我的问题是:

  • 除了寄存器和基本机器操作之外,在计算步数时还有其他可以计算的事项吗?
  • 我相信在确定增长顺序时,我正在计算基本的机器操作。是否有示例程序,我们计算的步骤不应该是基本的机器操作(例如寄存器)?
  • 这句话令人困惑:"在一次只进行一定数量操作的计算机中,所需的时间将与执行的基本机器操作的数量成比例。"这是否涉及所有计算机?是否有计算机一次执行不同数量的操作?

1 个答案:

答案 0 :(得分:0)

由您自己决定什么。

您计算的内容定义了您在分析中使用的“模型”,例如RAM model

使用 a 模型,您可以对程序的行为做出一些预测。这些预测是否有好处-我们可以通过以不同的问题大小运行实际程序来实际衡量-对我们说我们使用的执行模型是否有好处,是否与实际发生的情况相符在我们的计算机内部,是否为有用的

。 通过在log-log plot上绘制运行时间与问题大小之间的关系,可以完成

经验运行时间行为的分析。我们会得到一些曲线;任何曲线都可以由一系列直线近似;对数-对数图上的直线表示增长的幂律:

t〜n a 。<==>。 log(t)〜日志(n)

Empirical orders of growth for the win!

cf。我的this Q&A entry在此站点上。另外,Todd Lehman here的答案中的对数-对数图的很好示例。


更新:到最后一个要点,并行计算机一次可能执行不同数量的操作,具体取决于可用资源和/或计算的具体情况当前正在执行任务的阶段-就像引用的材料所说的那样,在过程中尽早乘一些数字(例如),而它们仍然足够小,因此需要O(1)机器操作;当它们变大时不是这样。

此外,现代CPU 可以(将吗?)一次执行多个操作,具体取决于pipeline (*)(某些组合更适合此需求,而某些组合则更少)。


(*)维基百科说:“指令流水线技术是一种用于在单个处理器中实现指令级并行性的技术。”