SICP——構(gòu)造程序抽象(四)

1.增長的階

是用來描述不同的計算過程在消耗計算資源的速率上的差異

  • 令n是一個參數(shù)芬探,作為問題規(guī)模的一個度量
  • 令R(n)是一個計算過程在處理規(guī)模n的問題時所需要的資源量

我們稱R(n)具有θ(f(n))的增長階恨旱,記為:

R(n) = θ(f(n))

如果存在與n無關(guān)的整數(shù)k1和k2狈涮,使得:k1f(n) <= R(n) <= k2f(n)

對于足夠大的n烹俗,值R(n)總位于k1f(n)k2f(n)之間

增長的階為我們提供了對計算過程行為的一種很粗略的描述玻募,也為預(yù)期一個計算過程的行為變化提供了有用的線索

2.求冪

從對一個給定的數(shù)計算乘冪的問題入手斤吐,這一過程的參數(shù)為基數(shù)b和一個正整數(shù)的指數(shù)n辕漂,過程計算出b^n浦妄,定義如下:

b^n = b * b^(n-1)
b^0 = 1

可以直接轉(zhuǎn)為一個線性的遞歸計算過程:

(define (expt b n)
    (if (= n 0)
        1
        (* b (expt b (- n 1)))))

上面過程需要θ(n)步和θ(n)空間尼摹,還可以轉(zhuǎn)為一個等價的線性迭代:

(define (expt b n)
    (expt-iter b n 1))
(define (expt-iter b counter sum)
    (if (= counter 0)
        sum
        (expt-iter b
                   (- counter 1)
                   (* b sum))))

這一版本需要θ(n)步和θ(1)空間
此外,我們還可以借助于連續(xù)求平方去完成一般的乘冪計算:

b^n = (b^(n/2))^2      # n為偶數(shù)
b^n = b * b^(n-1)      # n為奇數(shù)

將上面規(guī)則定義為過程:

(define (fast-expt b n)
    (cond ((= n 0) 1)
          ((even? n) (square (fast-expt b (/ n 2))))
          (else (* b (fast-expt b (- n 1))))))

(define (even? n)
    (= (remainder n 2) 0))

這一過程的增長的階是對數(shù)增長的

3.最大公約數(shù)(GCD)

兩個整數(shù)a和b的最大公約數(shù)定義為:能除盡這兩個數(shù)的那個最大的整數(shù)

找到兩個整數(shù)的GCD除了因式分解剂娄,還有下面的著名算法:
基本思想:如果r是a除以b的余數(shù)蠢涝,那么a和b的公約數(shù)正好是b和r的公約數(shù)
GCD(a, b) = GCD(b, r)

從任意兩個正整數(shù)開始反復(fù)執(zhí)行這種歸約,最終將產(chǎn)生出一個數(shù)對阅懦,其中第二個數(shù)是0和二,第一個數(shù)則為GCD,這一計算方法稱為歐幾里得算法耳胎,寫成過程如下:

(define (gcd a b)
       (if (= b 0)
           a
           (gcd b (remainder a b))))

這將產(chǎn)生一個迭代計算過程惯吕,其步數(shù)依所涉及的數(shù)的對數(shù)增長

lame定理:如果歐幾里得算法需要用k步計算出一對整數(shù)的GCD,那么這對數(shù)中較小的那個數(shù)必然大于或者等于第k個斐波那契數(shù)

根據(jù)lame定理怕午,可以做出歐幾里得算法的增長階估計:

  • n為較小數(shù)
  • k為計算過程所需步數(shù)
  • 得出n >= Fib(k)≈φ^k / √ ̄5

這樣废登,步數(shù)k的增長就是n的對數(shù)(底為φ),算法增長階為θ(log n)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郁惜,一起剝皮案震驚了整個濱河市堡距,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌兆蕉,老刑警劉巖羽戒,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異恨樟,居然都是意外死亡半醉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門劝术,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事养晋〕倪海” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵绳泉,是天一觀的道長逊抡。 經(jīng)常有香客問我,道長零酪,這世上最難降的妖魔是什么冒嫡? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮四苇,結(jié)果婚禮上孝凌,老公的妹妹穿的比我還像新娘。我一直安慰自己月腋,他們只是感情好蟀架,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榆骚,像睡著了一般片拍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妓肢,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天捌省,我揣著相機(jī)與錄音,去河邊找鬼碉钠。 笑死纲缓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的放钦。 我是一名探鬼主播色徘,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼操禀!你這毒婦竟也來了褂策?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤颓屑,失蹤者是張志新(化名)和其女友劉穎斤寂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揪惦,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡遍搞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了器腋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溪猿。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡钩杰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诊县,到底是詐尸還是另有隱情讲弄,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布依痊,位于F島的核電站避除,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胸嘁。R本人自食惡果不足惜瓶摆,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望性宏。 院中可真熱鬧群井,春花似錦、人聲如沸衔沼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽指蚁。三九已至菩佑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凝化,已是汗流浹背稍坯。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留搓劫,地道東北人瞧哟。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像枪向,于是被迫代替她去往敵國和親勤揩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 軟件工程大師能夠組織好自己的程序秘蛔,預(yù)先發(fā)現(xiàn)自己程序的行為方式陨亡,即使發(fā)生問題也能很快的排出錯誤,就像一部汽車一樣深员,擁...
    唐魚的學(xué)習(xí)探索閱讀 1,329評論 0 2
  • 第一章數(shù)和數(shù)的運算 一概念 (一)整數(shù) 1整數(shù)的意義 自然數(shù)和0都是整數(shù)负蠕。 2自然數(shù) 我們在數(shù)物體的時候,用來表示...
    meychang閱讀 2,592評論 0 5
  • 這個星期的話題成長率確實好難倦畅。 回頭審視自己遮糖,發(fā)現(xiàn)還是一無所獲。所以叠赐,覺得自己對自己的要求實在不高欲账。 三月份讀了莎...
    許之歡喜閱讀 251評論 4 1
  • 今天我終于開始寫日記了屡江,雖然只有短短的三百來字,雖然花了我一個小時的時間才完成敬惦,但是我還是很高興盼理,因為我終于動筆去...
    同風(fēng)直上閱讀 147評論 0 0
  • 妞妞已經(jīng)完全好了谈山,昨天各方面表現(xiàn)的很正常俄删,但是養(yǎng)一只狗狗真的就像養(yǎng)一個小孩子一樣,要時刻關(guān)注它是否吃壞了東西奏路,是否...
    我叫糾總結(jié)閱讀 187評論 0 0