<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    sicp 1.25解答(轉貼)

    Posted on 2007-05-11 17:38 dennis 閱讀(751) 評論(0)  編輯  收藏 所屬分類: 計算機科學與基礎
        這一題不是我獨立想出來的咯,比較遺憾,沒有認真讀書中的注解,通過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中已經發現的問題更加明顯。
        盡管兩個過程在語義和原理是相通的,但因為在不同的場景中使用,所碰到的情況就截然不同了,算法在不同場景下的表現差異明顯,還需仔細斟酌。

    主站蜘蛛池模板: 亚洲国产精品特色大片观看完整版| 香蕉免费看一区二区三区| 日韩精品内射视频免费观看 | 黄页免费的网站勿入免费直接进入| 亚洲AV永久青草无码精品| 国产无遮挡色视频免费观看性色| 亚洲毛片av日韩av无码| 一级毛片免费全部播放| 亚洲午夜国产片在线观看| 中国性猛交xxxxx免费看| 最近中文字幕大全免费版在线| 亚洲精品视频久久久| 中文字幕成人免费高清在线 | 免费在线观看日韩| 特级aaaaaaaaa毛片免费视频| 免费国产综合视频在线看| 中文无码日韩欧免费视频| 亚洲天天做日日做天天看 | 亚州**色毛片免费观看| 国产亚洲精久久久久久无码77777| 两个人的视频www免费| 亚洲黄色在线观看网站| 毛片免费vip会员在线看| 亚洲国产成人乱码精品女人久久久不卡 | 免费a级毛片高清视频不卡| 亚洲国产av玩弄放荡人妇| 亚洲乱码中文字幕手机在线 | 我的小后妈韩剧在线看免费高清版| 亚洲色大成网站www永久男同| 免费女人18毛片a级毛片视频| 中文在线免费不卡视频| 亚洲大片免费观看| 无码欧精品亚洲日韩一区夜夜嗨| 久久精品免费观看| 亚洲变态另类一区二区三区| 国产亚洲精品激情都市| 久久国内免费视频| 国产vA免费精品高清在线观看| 综合自拍亚洲综合图不卡区| 国产网站免费观看| 亚洲中文久久精品无码1|