SICP 和 CSAPP 中的哪些題目讓你感到受益匪淺?

時間 2021-05-06 23:54:06

1樓:坎星材料學

暫時讀到第二章中間,因為學習別的課程先放了一放,後面的幾章會在繼續讀完之後補充。

感覺讀SICP到目前為止最大的收穫是函式式程式設計思想和關於「抽象」的思想,以及刷習題鍛鍊了一下寫遞迴(畢竟語言本身不提供迴圈,所有的迴圈全靠遞迴來實現)。

不得不說,LISP及其各種方言形式上真的太優美了,如果說寫C++是寫散文,那寫scheme(SICP用的是LISP的scheme方言)像寫詩一樣(美觀列印加上每次封閉一堆右括號都覺得好舒爽有沒有(⊙_⊙))。

回歸正題,我印象比較深的習題有:

這是一組介紹快速冪思想的習題,快速冪演算法通過連續求平方來減少求冪過程中的計算次數,比如b^8本來要算八次乘法,但是如果變成這樣:

b^8=(((b^2)^2)^2)//

就只用計算三次乘法了,確實很巧妙。

但是精彩的地方在於,快速冪思想可以應用在更多的地方,比如加法也可以,然後如果把1.16和1.17結合在一起,就可以設計出所謂的「俄羅斯農民的方法」,使用對數的計算步數計算出兩個整數的乘積,而這一方法來自於乙份西元前2023年的抄寫檔案。

(當時看到這裡真的震驚了)

然後作者接著介紹了使用快速冪思想求斐波那契數的演算法,我覺得本質上其實是將前後項的斐波那契數之間的關係通過乙個變換矩陣描述,然後計算這個變換矩陣的快速冪。

在這一組習題裡,作者還介紹了如何將遞迴程式改寫為迭代程式的思想,即定義不變數的方法。

這組習題是有關高階過程抽象的題目。

首先說一下過程,也就是書裡所謂的所謂的「復合過程」。不得不說scheme的語法真的設計得很漂亮,它的基礎語法(即組合式)基本上只有一條,含義是括號中從第二個起的元素接受第乙個元素的作用,或者說運算子操作括號中剩餘的元素。

(運算子運算物件 [運算物件] [運算物件] [...])

但是巧妙之處在於「運算子」可以是復合過程(即函式呼叫),由此帶來的好處是形式高度統一,無論是加減乘除還是自定義的過程,在scheme裡都是同樣的形式。你甚至無法分辨乙個過程到底是不是直譯器內建的。比如下面這個求平方和的sum-of-squares:

;基本語法(組合式)舉例(+

xy)(

sum-of-squaresab

)((double

inc)1)

而高階過程是更加強大的抽象,設計出高階過程的目的是用高階過程去操作普通過程,它可以以過程為引數或者以過程為返回值。習題1.41的例子就很直觀,比如上面的double過程,被它作用在乙個過程上的效果是將這個過程作用兩次,比如((double f) x)相當於f(f(x))。

所以上面((double inc)1)結果就是3。

1.41-1.44反覆使用高階過程,最後通過函式復合,n重複合等設計出乙個n次平滑函式,雖然很簡單,但是感覺比前面的牛頓下山法容易理解的多。

進入了第二章,這組習題剛看到的驚呆了好嗎...可以完全不用任何資料結構實現序對,然後用序對去實現資料結構,然後還可以完全用過程表示數字...雖然數理邏輯裡介紹過,但是看到scheme實現的時候還是了...

還有一點比較重要的是,從這裡開始,作者帶著大家試圖實現一些語言裡「自帶」的功能,然後就會有一種感覺,原來內建的函式並沒有什麼神秘的。

實現符號求導,我其實一直很好奇這個功能是如何在matlab和mathematica等等裡面提供的,到了這裡發現原來是基於抽象資料思想和遞迴,真的太強大了。

帶你走了一遍哈夫曼編碼和解碼的過程,這個演算法是用在資料壓縮上的,即如何通過給資料編碼將同樣多的資訊壓縮到更小的儲存空間內。

2樓:Hunter

SICP:

雖然前幾天還在做習題,但是鑑於我記憶不好所以對具體題目沒什麼印象。

我完成到第四章前面部分後就沒繼續往下讀了,因為從第一章到第四章,我對這本書最大的印象就是兩個字:抽象。

我停下了,因為我已經得到了我覺得這本書教給我的最重要的東西。

不管是構造一些基礎的資料結構,還是構造乙個算術系統,做每一節後面的習題可以對這一節內容有更加深入的研究和理解,說實話我覺得我做的那些題目我都有一些收穫,其實到最後真的就是覺得抽象能力得到了鍛鍊。

大三上學期囫圇吞棗看過一次,沒做習題,最近剛開始做這本書的配套lab,做完了來補。

2020 考研,有哪些 神押題 和 押題翻車 的操作,對 2021 備考有什麼啟示?

彌煦 政治還是跟著肖秀榮吧,重點理解一下出題角度。我1000題,精講精練都沒做完,但最後半個月把肖四肖八的選擇做完分析背誦了一下,到最後臨時抱佛腳背了一下肖四第一套大題,最後64分。肖老的書我感覺還是有些效果的。但個人覺得想要取得乙個好成績還是得打好基礎,不能讓押題決定命運。 追夢少年 個人感覺還要...

辯論賽中辯題的種類大致分為哪些?

大熊 一般來說,辯題可以分為以下四類 1.事實性辯題,是討論某一事實是否存在 亦即該事實之定義範圍 如 順境 逆境更有利於人的成長 討論成長的定義 網路使人更親近 疏遠 討論人際關係的定義 或 金錢是 不是萬惡之源 討論萬惡之源的定義 2.因果性辯題,是討論事項之間的相互關係為何 如 經濟發展和環境...

快題設計有哪些套路和黑科技?

容易 道法術的東西說了不少,我來補充一些 器 的東西。以下是某鴇上發現的一些 快題神器 1 柱網硫酸紙,可以像拼圖塊一樣組織不同形式 不同間距的柱網。2 柱網座標紙 前面已經有答案提到了,作用和上面的硫酸紙類似。說白了就是按常用柱網備用的 座標紙 3 淡顯網格的繪圖紙,網格比較淡,繪圖的時候可以當網...