计算机程序的构造与解释 练习1.16, 1.19

练习1.16要求仿造fast-expt使用迭代方式求幂。这种方式求幂实在是高明!正常的求幂方式是n*n*...*n,需要乘n趟,但是这个方式每次将解空间缩减一半(很像二分查找),所以最后只需要求logn次。

这里尾递归每趟的不变量就是fast_iter_expt的结果,即p,同样的,偶数时,利用(b^2)^n/2的关系,即每趟n减半,p加倍,而奇数时则变换为偶数

(define (even? n)
  (= (remainder n 2) 0))
(define (fast_iter_expt n p)
  (cond ((= n 1) p)
        ((even? n) (fast_iter_expt (/ n 2) (* p p)))
        (else (* p (fast_iter_expt (- n 1) p)))))

练习1.19主要是证明出应用Tpq变换2次等于同样形式的Tp'q'。

由题可知,第一次代换结果是:

a=bq+aq+ap

b=bp+aq

第二次代换结果是:

a'=bpq+aq^2+bpq+apq+ap^2+bq^2+aq^2+apq

b'=bp^2+apq+bq^2+aq^2+apq

整理后得到:

a‘=b(p^2+q^2)+a(q^2+2pq)+a(p^2+q^2)

b’=b(p^2+q^2)+a(q^2+2pq)

于是a和b不变的情况下,p变为p‘,q变为q’,即p'=p^2+q^2, q'=q^2+2pq,原题得证。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值