SICP ex1-30 ex1-31
来源:互联网 发布:python 退火算法 编辑:程序博客网 时间:2024/05/29 04:48
ex1-30
本题要求比较brute-force method 以及 golden method 计算单峰函数 的极大值所需要的函数值计算次数
我们先计算brute-force method
时间为2log2 (L/T) 其中L为初始区间长,T为容错区间长
我们再计算golden method
时间为log 1/(1- (golden-ratio)^2) (L/T)
化简后我们得到
2log (5^(1/2) +1)(L/T)
我们可以发现golden method 快于 brute-force
ex1-31
利用f(x) f(f(x))...的思路寻找fixed-point
(define (fixed-point f guess-value)(let ((distance (abs (- guess-value (f guess-value)))))(if (< distance 0.01) guess-value(fixed-point f (f guess-value)))))
比较简单,只是,这里有个问题,例如我取f(x)=x*x,我取guess-value为10 那么这个差值将会越来越大,显然是不合理的
那么我们尝试一下如果下一个distance比该distance更大那么我们将参数减半
(define (fixed-point f guess-value)(let ((fx (f guess-value)))(let ((distance (abs (- guess-value fx)))(next-distance (abs (- fx (f fx)))))(if (< distance 0.01) guess-value(if (< distance next-distance) (fixed-point f fx) (fixed-point f (/ guess-value 2)))))))
看起来思路还可以,我们用x^2这个函数进行验证,我们用5来验证,
5^2=25
25^2=625
取2.5进行下一步
2.5^2=6.25
6.25^=..
取1.25
取.625
停到这里我们不计算了
两种可能都是离1越来越远
所以我们的答案是错的!
看来要选取一个合适的方式挺麻烦的.
这条路走不通我们换种思考方式,我们可以看到distance=f(x)-x 那么我们构造一个新的函数g(x)=f(x)-x
这样我们只要求0点就可以了(取guess两侧一个足够大的范围构造ab),0点求法参考textbook本章前面一个例子
虽然我们没有利用原题的思想,但是我们顺利发现原题思想漏洞,并成功解决问题
另外关于如何选取合适的方法还是等哪天有心情了再来想想吧= =
- SICP ex1-30 ex1-31
- SICP ex1-11 ex1-12 ex1-14
- SICP ex1-20 ex1-22
- SICP ex1-23 ex1-25
- Ex1
- ex1
- ex1
- SICP ex1.11
- SICP ex1-15
- SICP ex1-17 ex-18 ex1-19
- SICP EX1-9 change 问题
- SICP ex1-10 order of Growth
- [Haskell] ex1
- python ex1
- ex1.py
- 正则表达式ex1
- Start cpp learnning ex1
- coursera Machine Learning ex1
- hdu 2795 Billboard(线段树)
- linux备份数据库
- pi ocr 及二维码识别
- 算法解剖系列-Canny边缘检测原理及实现
- HDU 3853 LOOPS 概率dp
- SICP ex1-30 ex1-31
- 如何判断text-overflow: ellipsis???
- 【总结】利用AWS搭建混合云的架构
- Ubuntu 下android 开发遇到的各种问题
- static 关键字小解
- @Controller和@RestController的区别?
- 欢迎使用CSDN-markdown编辑器
- 很多人一辈子的道路实质上都取决于语文的学习
- 极客学院爬虫re基本知识