`

sicp 1.25解答(转贴)

阅读更多
    这一题不是我独立想出来的咯,比较遗憾,没有认真读书中的注解,通过google解决的,一搜索才发现网上已经有很多的scip习题的解答,我这个倒是画蛇添足了!-_-。想一想还是有写下去的必要,尽管牛人多如牛毛,自己还是潜下心来一步一步向前。
   来自http://dev.csdn.net/develop/article/64/64485.shtm

; ======================================================================
;
; Structure and Interpretation of Computer Programs
; (trial answer to excercises)
;
; 计算机程序的构造和解释(习题试解)
;
; created: code17 02/28/05
; modified:
; (保持内容完整不变前提下,可以任意转载)
; ======================================================================

;; SICP No.1.25
;; 本题为理解题

;; 直接定义(expmod base exp m)为base^exp基于m的模(modulo)
;; (define (expmod base exp m)
;; (remainder (fast-expt base exp) m))
;; 在理想情况下是正确的,在语义上与原定义是等价的,甚至递归层数
;; 都是一样的,而且更加直观。
;;
;; 但在实践中,这样的定义是不可行的,这也是为什么我们要采用原文中的定义
;; 的原因:因为base^exp很可能是一个非常大的数。比如,当我们取第二个
;; 测试例子中的n=1000000时,base是[1,999999]区间中的任意
;; 随机数,它的平均取值为50000,而exp=1000000。50000^1000000是一个大得
;; 惊人的数,无论是fast-expt的层层函数调用计算,还是用remainder对其取模,
;; 计算量都是很大的。
;;
;; 而相反,原始的expmod函数
;; (define (expmod base exp m)
;; (cond ((= exp 0) 1)
;; ((even? exp)
;; (remainder (square (expmod base (/ exp 2) m))
;; m))
;; (else
;; (remainder (* base (expmod base (- exp 1) m))
;; m))))
;; 通过分解(a*b mod n) 为 ((a mod n) * (b mod n) mod n),使得每层递归
;; 调用的计算参数和返回值总是小于n (x mod n < n),即便是计算过程中出现
;; 的最大数(a mod n) * (b mod n) 也依然是要小于n^2, 相对于前者n^n的数
;; 量级,实在是小得多,这样就避免了大数的计算问题。
;;
;; 比如经测试,在使用新的expmod的情况下,1009的验证需要1.2ms的时间,
;; 1000003的验证需要 93680ms,远高于原来的expmod函数。
;;
;; 这也同时印证了我们在1.24题中的分析,同样的操作在不同字长的数字上的
;; 代价是不同的。1000000的验证时间现在是1000的8000多倍,远不再是2倍左右
;; 的关系。在1.24中的,因为expmod算法的控制,操作数最多是n^2级的,字长
;; 所引起的差距并不明显,只在10^6-10^12间产生了一点点阶跃;而这里的算法
;; 中, 操作数可以达到n^n级,当n=1000时,1000^1000的字长大约在10000位(二
;; 进制数)左右,而n=1000000时1000000^1000000的字长则达到在20000000位(二
;; 进制数)左右,这字长的巨大差距导致了我们在1.24中已经发现的问题更加明显。
    尽管两个过程在语义和原理是相通的,但因为在不同的场景中使用,所碰到的情况就截然不同了,算法在不同场景下的表现差异明显,还需仔细斟酌。



dennis 2007-05-11 17:38 发表评论
分享到:
评论

相关推荐

    SICP习题解答,主要第一章的内容习题答案

    《SICP习题解答,主要第一章的内容习题答案》 SICP,全称《Structure and Interpretation of Computer Programs》(计算机程序的构造和解释),是计算机科学领域的一本经典教材,由MIT(麻省理工学院)的 Harold ...

    sicp第二章练习题的解答

    《SICP(Structure and Interpretation of Computer Programs)》是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay Sussman所著,它强调了程序设计的基础和原理,特别是函数式编程思想。第二章主要探讨了...

    sicp in python 中文 sicp 中文

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 !!!download&gt;&gt;&gt;https://github.com/wizardforcel/sicp-py-zh

    SICP中文第二版

    SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版SICP中文第二版

    SICP 解题集

    《SICP解题集》是一份专注于探讨和解答《结构与解释程序》(Structure and Interpretation of Computer Programs,简称SICP)一书中习题的资源。SICP是计算机科学领域的一本经典教材,由Harold Abelson、Gerald Jay ...

    SICP(python中文带书签)

    《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称SICP)是一本备受推崇的经典计算机科学教材,由Harold Abelson和Gerald Jay Sussman撰写,并由MIT出版社出版。这本书以其深入...

    sicp 2.2.4节图形语言

    《SICP 2.2.4 节:图形语言》是计算机科学经典教材《结构与解释程序》(Structure and Interpretation of Computer Programs)中的一个重要章节,它深入介绍了如何利用编程来创建图形,以及如何设计和理解复杂的计算...

    SICP 习题答案

    《计算机程序的构造和解释》...通过解答SICP的习题,读者将深入理解这些概念,并能运用到实际的编程实践中。习题旨在促进对这些基本原理的深入思考,帮助程序员建立坚实的基础,进而在面对复杂的编程挑战时能游刃有余。

    SICP-Python版本

    SICP-Python版本

    SICP 使用的scheme解释器

    SICP 使用的scheme解释器 以前叫DrScheme

    Python SICP epub版本

    Python SICP epub版本,很适合学习抽象的思想,用Python版本比lisp更实用

    SICP LISP AI

    《SICP》全称是《Structure and Interpretation of Computer Programs》,中文译为《计算机程序的构造和解释》。这是一本经典的计算机科学教材,由Harvard大学的 Harold Abelson 和 Gerald Jay Sussman 教授撰写,...

    a_book_sicp_py

    本书名为《a_book_sicp_py》,是一本以Python语言为基础介绍设计模式和计算机科学基础的书籍。根据描述和部分内容,可以提炼出以下知识点: 1. 编程语言的重要性:在计算机科学的宽泛领域中,编程语言扮演着至关...

    北京大学,计算机程序构造和解释(SICP)课件,裘宗燕老师主讲

    《计算机程序构造和解释》(SICP,Structure and Interpretation of Computer Programs)是一本具有深远影响力的计算机...压缩包中的“SICP 北大课件”文件可能包含课件、讲义、习题解答等资料,是学习SICP的宝贵资源。

    PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz

    标题中的"PyPI 官网下载 | sicp-0.0.1b102.dev4.tar.gz"指的是从Python的官方包索引(Python Package Index,简称PyPI)上下载的一个名为"sicp"的软件包的版本号为0.0.1b102.dev4的压缩文件,其格式是tar.gz。...

    sicp-Structure and Interpretation of Computer Programs

    ### SICP——《计算机程序的结构与解释》 #### 一、概述 《计算机程序的结构与解释》(Structure and Interpretation of Computer Programs, 简称SICP)是一本由MIT电气工程与计算机科学系教授Harold Abelson和...

    sicp in python 中文版 sicp

    sicp in python 中文版 sicp in python 中文版 sicp in python 中文版 download : https://github.com/wizardforcel/sicp-py-zh

    SICP:SICP解决方案

    《SICP:SICP解决方案》是针对结构与解释程序设计(Structure and Interpretation of Computer Programs,简称SICP)这本书的详细解答和实践指南。SICP是一本经典的计算机科学教材,由Harold Abelson和Gerald Jay ...

    sicp 2016 from

    ### 结构与解释计算机程序 (SICP) #### 标题和描述中的核心知识点解析 **《结构与解释计算机程序》(Structure and Interpretation of Computer Programs, SICP)** 是由哈佛大学的 Harold Abelson 和麻省理工学院...

Global site tag (gtag.js) - Google Analytics