Big o SICP&x27中提到的常数是什么;增长顺序的定义是什么?

Big o SICP&x27中提到的常数是什么;增长顺序的定义是什么?,big-o,sicp,Big O,Sicp,在第1.2.3节中,程序的结构和解释给出了增长顺序的正式定义: 我们说R(n)具有增长顺序,写为R(n)=Θ(f(n)) (发音为“f(n)的θ)”,如果存在正常数k1和 k2独立于n,使得k1f(n)≤ R(n)≤ k2f(n)表示任何足够大的n值。(换句话说,对于大n,值R(n)夹在k1f(n)和k2f(n)之间。) 常数k1和k2的意义是什么?我很难将这个正式的定义映射到现实世界的例子,因为这些常量没有被再次提及 可能是k1f(n)≤ R(n)意味着有一些可观察到的增长?也许是R(n)≤

在第1.2.3节中,程序的结构和解释给出了增长顺序的正式定义:

我们说R(n)具有增长顺序,写为R(n)=Θ(f(n)) (发音为“f(n)的θ)”,如果存在正常数k1和 k2独立于n,使得k1f(n)≤ R(n)≤ k2f(n)表示任何足够大的n值。(换句话说,对于大n,值R(n)夹在k1f(n)和k2f(n)之间。)

常数k1和k2的意义是什么?我很难将这个正式的定义映射到现实世界的例子,因为这些常量没有被再次提及


可能是k1f(n)≤ R(n)意味着有一些可观察到的增长?也许是R(n)≤ k2f(n)意味着f(n)是增长的上限?但是如果R(n)=Θ(f(n))并且k1是一个正常数,那么k1f(n)何时会小于R(n)?似乎只有当k1为1时,这个条件才成立。

R和f是完全不同的函数,除了它们如何相对于n增长外,它们没有任何共同点,因此没有理由f(n)应该等于R(n)。R是“处理一个大小为n的问题所需的资源量”。f是一个无关的数学函数

Θ的定义之所以特别令人困惑,是因为它既不是指R正在测量的资源,也不是指正在使用资源的过程

R(n)的例子可以是:

  • 对n个数字求和时使用的寄存器数
  • 用于对n GB视频进行转码的磁盘
  • 发射n架无人机所需的时间
但Θ的定义没有提到资源(寄存器、磁盘、时间),也没有提到进程(求和、转码或启动)

如果我们的“过程”是一个叫做p的软件过程,那么我们有三个完全不同的“功能”:

p(n) - a procedural function that programmers work with.
R(n) - a measuring function like ones used by engineers.
f(n) – a 'pure' mathematical function.
如果我们以阶乘过程为例,它随时间有Θ(n)增长,我们将有:

p(n) = (define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1)))))
R(n) = The time in seconds for (factorial n) to complete.
f(n) = n  
R(n)=f(n)意味着(阶乘17)运行只需要17秒,这是不可能的

Θ(n)的定义是k₁ 和k₂ 存在,以便一旦n足够大:

k₁ * n <= "Time taken for (factorial n) to run in seconds" <= k₂ * n
定义是k₁ 和k₂ 存在以便:

k₁ * 1.618ⁿ <= "Time taken for (fib n) to run" <= k₂ * 1.618ⁿ)

k₁ * 1.618ⁿ  R和f是完全不同的函数,除了它们如何相对于n增长外,它们没有任何共同点,因此没有理由f(n)应该等于R(n)。R是“处理一个大小为n的问题所需的资源量”。f是一个无关的数学函数

Θ的定义之所以特别令人困惑,是因为它既不是指R正在测量的资源,也不是指正在使用资源的过程

R(n)的例子可以是:

  • 对n个数字求和时使用的寄存器数
  • 用于对n GB视频进行转码的磁盘
  • 发射n架无人机所需的时间
但Θ的定义没有提到资源(寄存器、磁盘、时间),也没有提到进程(求和、转码或启动)

如果我们的“过程”是一个叫做p的软件过程,那么我们有三个完全不同的“功能”:

p(n) - a procedural function that programmers work with.
R(n) - a measuring function like ones used by engineers.
f(n) – a 'pure' mathematical function.
如果我们以阶乘过程为例,它随时间有Θ(n)增长,我们将有:

p(n) = (define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1)))))
R(n) = The time in seconds for (factorial n) to complete.
f(n) = n  
R(n)=f(n)意味着(阶乘17)运行只需要17秒,这是不可能的

Θ(n)的定义是k₁ 和k₂ 存在,以便一旦n足够大:

k₁ * n <= "Time taken for (factorial n) to run in seconds" <= k₂ * n
定义是k₁ 和k₂ 存在以便:

k₁ * 1.618ⁿ <= "Time taken for (fib n) to run" <= k₂ * 1.618ⁿ)

k₁ * 1.618ⁿ 谢谢你的回复!这种情况似乎微不足道。0.01*R(n)将始终是@maxhallinan我重写了我的答案,但原始答案是比较R(n)和R(2n)。如果增长顺序是可预测的,并且我们知道R(n)的实际值,那么我们可以计算R(2n)的界。但是我们不知道R(2n)的实际值是多少。我们不知道R度量的是什么资源,也不知道是什么过程消耗了这些资源。关于R(2n)或R(1000n),我们只知道它们的范围。我们可以估计R(2n)=4*R(n),但这只是一个估计。谢谢你的回复!这种情况似乎微不足道。0.01*R(n)将始终是@maxhallinan我重写了我的答案,但原始答案是比较R(n)和R(2n)。如果增长顺序是可预测的,并且我们知道R(n)的实际值,那么我们可以计算R(2n)的界。但是我们不知道R(2n)的实际值是多少。我们不知道R度量的是什么资源,也不知道是什么过程消耗了这些资源。关于R(2n)或R(1000n),我们只知道它们的范围。我们可以估计R(2n)=4*R(n),但这只是一个估计。