Program Structure 笔记7 (执行效率介绍)

Program Structure 笔记7 (执行效率介绍)

  (作者:colinboy  Email:cybbh@163.com) 2008.5.12

(内容难免出现错误或一些专业词汇使用不当,只是个人笔记,能理解总体内容就好)

 

效率:

(define (square x) (* x x))

 

(define (squares sent)

   (if (empty? sent)

     '()

     (se (square (first sent))

         (squares (bf sent)) )))

 

对于sefirst+、-、*/等一些操作,我们称他们执行花费的时间为常量时间,有时也把一些花费常量时间执行的一组操作的执行时间设为常量时间。

 

对于上述例子,每一次的squares调用花费常量时间。

squares总执行的次数为输入的sent的大小,设输入的大小为nsquares总共需要执行n次,与输入数据大小成比例,效率为Θ(n)

 

插入排序:

(define (sort sent)

   (if (empty? sent)

        '()

       (insert (first sent)

               (sort (bf sent)))))

 

(define (insert num sent)

   (cond ((empty? sent) (se num))

         ((< num (first sent)) (se num sent))

   (else (se (first sent)

             (insert num (bf sent))))))

 

以上排序算法的效率为:

对于每次insert过程的调用:

最好情况为Θ(1)

最差情况为Θ(n)

平均情况为Θ(n)

 

sort算法总共需要执行n(nsent的大小),每次调用sort都要执行一次insert,所以sort算法的效率为Θ(n^2),为平方级增长。

 

一些数学定义:

对于一些不同的计算过程随着数据量的增加可能在消耗的计算机资源上存在着很大区别,为了表示这种差别,一般使用增长的阶(Orders of Growth)或者称为增长率(Rate of Growth)的记法。

 

我们称R(n)具有Θ(f(n))的增长阶,记为R(n)=Θ(f(n)),如果存在着与n无关的整数k1k2,使:

   k1f(n) <= R(n) <= k2f(n)

对于任何足够大的n都成立。

上面的定义也许并不是十分正确,也许应该记为R(n)(f(n))

 

详细定义:

如果存在正常数cn使得当N>=n时,T(N)<=cf(N),则记为T(N)=O(f(N)。 这表示T(N)的增长率小于等于f(N)的增长率。

 

如果存在正常数cn使得当N>=n时,T(N)>=cf(N),则记为T(N)=Ω(f(N)。 这表示T(N)的增长率大于等于f(N)的增长率。

 

如果T(N)=O(f(N)T(N)=Ω(f(N),则T(N)=Θ(f(n))。 这表示T(N)的增长率等于f(N)的增长率。

 

一些常见增长率:

C 常数级

logN 对数级

N 线性

N^2 平方级

N^3 立方级

2^N 指数级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值