1. 程式人生 > >Unplugged—不插電的樂趣

Unplugged—不插電的樂趣

公元9世紀,也就是是中國唐朝的時代,在阿拉伯文明的中心——巴格達,有一位來自東方的大學者剛剛完成了一本著作。書名叫做《還原與對消的科學》(Kitab al-Jabr wa-l-Muqabala)。它講述瞭如何解二次以內的方程。人們用這本書的拉丁文簡稱Al-Jab,創造了一個詞Algebra。1859年,李善蘭與英國傳教士偉列亞力創造性地將其翻譯為“代數”。

遺憾的是,沒有人知道這位僑居在巴格達的數學家的真正名字。人們只知道他來自一個名叫花剌子模的東方國家。感謝金庸先生,《射鵰英雄傳》讓這個國家的名字得以普及。如今的烏茲別克的撒馬爾罕,還立有這位數學家的雕像。於是來自(Al)花剌子模(Khwarimi)的人,Al-Khwarimi(阿爾-花剌子密)就成了這位數學家的名字。它的拉丁文譯法為Algorithm,中文譯作“演算法”。

我們的前輩在發展代數時,大約經歷了三個階段:文辭代數,簡字代數、和符號代數。早期的解方程方法,如花剌子密著作中的方法,使用詳細的文字描述解題的步驟,直到16世紀,文辭代數仍然是主流的代數描述手段。後來古希臘的丟翻圖,逐漸使用了一些符號簡記方法,發展了簡字代數。現代的符號代數在萊布尼茨時達到了頂峰。極大了提高了數學語言的嚴謹性和表達能力。

可是反觀我們現在的演算法描述和很多計算機語言,似乎仍然停留在文辭代數階段。這一想法是我在2013年時逐漸形成的。那時距離開始寫作《初等演算法》一書,已經過去了好幾年了。

2005年前後,我經過一番曲折的道路,從C++的template meta programming,經由Lisp方言Scheme,開始使用Haskell來試著編寫程式。這是一門純函數語言程式設計語言,往往引導使用者用“代數”的方式思考和解決問題。但是深入下去,我發現需要解決一個問題。Dijsktra說“程式=演算法+資料結構”。大量的已有演算法和資料結構都是用命令式的描述和實現的,我們需要發展一套函式式的演算法和資料結構。從那時起,我開始試著用多種語言實現《演算法導論》一書中的演算法。2009年的時候我把這些工作放到了github上,希望更多的人能從中受益。

幸運的是,已經有前人認識到這一問題了。卡耐基梅隆大學的Chris Okasaki在讀博士的時候,就發展出了很多函式式資料結構。他的博士論文後來出版成為一本書《Purelyfunctional data structure》。其中用Standard ML給出了一系列的實現。牛津大學的Richard Bird出版了《Pearlsof functional algorithm design》針對很多問題,給出了對應的函式式演算法。

站在這些成果的基礎上,我得以把一些常見的基本演算法整理出來,同時給出命令式和函式式描述,方便大家對照參考。書中給出了一些例子程式碼,包括Haskell,C, C++, Python,以及Lisp方言Scheme的。

2014年夏天的時候,這本書的英文稿大部分完成了。我接受了一些朋友的建議,開始將其譯為中文。到2016年4月的時候,中文版也基本完成了。它們在github上可以獲得:

最近幾年,我的思路發生了一些轉變。從2013年開始,我逐漸開始讀一些和數學相關的書籍,開始是一些趣題集,後來是一些數學家的逸聞趣事,和科普讀物。偶爾也看看範疇論(Categorytheory)。我逐漸認為電腦科學,以及演算法終究還是數學的一個分支。回顧讀書期間,我們的數學教學也許忽略了一些東西,例如幫助學生了解數學的歷史,培養趣味性和幽默感等等。

如果再次重寫《初等演算法》這本書,也許不需要放入那些例子程式。而是可以加入更多數學元素,突出一下趣味性。如果有時間,我打算給中小學讀者寫一本名叫“Unplug”的書,不插電,不用電腦,不編寫程式來解決生活中的問題。

當然,也有另一個可能,就是為了迎合主流的讀者,將這本書用Scala和Java 8重寫一遍。不過未來無法預測,很多時候,我們像布朗運動中的分子,只是邁著“醉漢的腳步”不斷前行。

相關推薦

Unplugged樂趣

公元9世紀,也就是是中國唐朝的時代,在阿拉伯文明的中心——巴格達,有一位來自東方的大學者剛剛完成了一本著作。書名叫做《還原與對消的科學》(Kitab al-Jabr wa-l-Muqabala)。它講述瞭如何解二次以內的方程。人們用這本書的拉丁文簡稱Al-Jab,創造了一個

ubuntu筆記本時滑鼠失靈

開機忘插電,滑鼠失靈,換滑鼠也是。重新插上滑鼠可以,幾秒後又失靈 檢視:http://blog.csdn.net/ibey0nd/article/details/31021769 1,檢視滑鼠id $ lsusb -v |grep Mouse Couldn't open de

Coffee Lake Power on

coffee lake power-onset PlatformImonDisable to 0x1 in xml fileCoffee Lake Power on 不上電

就算你商,你應該為你的商朋友好好看看這篇文章

size gin 屬性 set 朋友 sdn 商務 通過 每天 典型案例場景:電商客服&倉庫協作管理用戶:天貓電商賣家-米詩緹娜客服-倉庫協作管理作為當今時代通過互聯網進行商品交易的電商服務,絕佳的購物體驗與完好的售後服務直接決定了其品牌價值。比起傳統的實體店來

商小程式模板和定製的區別?

當商戶們找開發公司做微信電商小程式時,一般會有兩種選擇:電商小程式模板與電商小程式定製。不少商家分不清電商小程式模板和定製的區別,今天木魚小編就和大家科普一下。 1.電商小程式模板 電商小程式模板大多是已經開發好的行業小程式模板,這種模板所有的功能已經固定。選擇電商小程式模板流程簡單,可以快速上線。但這類

商小程序模板和定制的區別?

基本功 可能 支持 個性化 兩種 對比 新零售 ext nag 當商戶們找開發公司做微信電商小程序時,一般會有兩種選擇:電商小程序模板與電商小程序定制。不少商家分不清電商小程序模板和定制的區別,今天木魚小編就和大家科普一下。 1.電商小程序模板 電商小程序模板大多是已經開發

Thinkpad T460s電池2充進去的解決辦法

.html att 都是 com 解決方法 平時 打開 保持 方法 電腦型號是Thinkpad T460s,平時使用時都是接通電源使用(兩個電池一直保持滿電的狀態)。突然有一天使用了電池2後發現充不進去電,在Lenovo Vantage中顯示狀態良好。試了各種方法,比如重

商小程序模板和定制的區別

一個 根據 大數 品牌 指導 spl jpg 分析 進行   當商戶們找開發公司做微信電商小程序時,一般會有兩種選擇:電商小程序模板與電商小程序定制。不少商家分不清電商小程序模板和定制的區別,今天木魚小編就和大家科普一下。   1.電商小程序模板   電商小程序模板大多

OSChina 週四亂彈 —— 鐳射劍常年開著

開發十年,就只剩下這套架構體系了! >>>   

HDU 4920(杭多校訓練#5 1010 題) Matrix multiplication(知道該掛個什麽帽子。。。)

預處理 ica ref 循環 ring sca esp 題解 code 題目地址:HDU 4920 對這個題簡直無語到極點。。。竟然O(n^3)的復雜度能過。。。。方法有三。。 1:進行輸入優化和輸出優化。。(前提是你的輸入優化不能太搓。。。) 2:利用緩存優化。。詳情

5.2億活躍用戶“活躍”?有點山寨的美圖商尷尬了

網易印象派 計算機應用 人民網 淘寶 手機版 前不久,美圖正式上線了獨立的電商平臺——“美鋪”。根據美圖公布的信息,美鋪被定義為一個時尚分享購物社區。有別於傳統的B2C或C2C模式,美鋪采取的是B2C2C的買手模式,即通過包括買手、網紅、KOL在內的時尚達人來連接品牌商和消費者。文/張書樂

ueditor 後端配置項沒有正常加載,上傳能正常使用!

建議 工廠 代碼 修改 area mat 結構 editor 例如 我用的是開發版,1.4.3.3 .Net版 網上查了很多,後來發現只是配置的問題而已。 在根目錄下:config.json 其中有Img上傳的配置:imageUrlPrefix 這個是你上傳完成後,在文本編

多個jdk 變更 引起 tomcat件 啟動了 The JRE could not be found.Edit the server and change the JRE location.

變更 runtime win jdk nts nvi bsp 選擇 ould The JRE could not be found.Edit the server and change the JRE location. 在Windows->Preference

金蝶VB件開發,單據滿足條件,拒絕保存

div blog res bsp 金蝶 true msgbox eight 設置 新增一張簡潔的Bos單據,功能:當文本1輸入框裏輸入的內容是“222”,則保存數據,當內容是其他的,則拒絕保存 這裏還要獲取文本1的字段名 接下來是VB插件開發了

IDEA 安裝完碼雲件,運行報“Cannot run program "xxx":CreateProcess error=2,系統找到指定的文件”

bin 安裝 image 找不到 ann eat git mage cnblogs 錯誤:Cannot run program "E:\Program Files\Git\bin\git.exe":CreateProcess error=2,系統找不到指定的文件 解決方法:

件 ,自己寫js,實現批量上傳文件及進度顯示

批量上傳 發的 xhr string () .cn tom 需要 pen 今天接受項目中要完成文件批量上傳文件而且還要顯示上傳進度,一開始覺得這個應該不是很麻煩,當我在做的時候遇到了很多問題,很頭疼啊。 不過看了別人寫的代碼,自己也測試過,發現網上好多都存在一些問題,並不是

解決jenkins下使用HTML Publisher件後查看html報告顯示正常 以jmeter報告為例

com 顯示不全 rip lis support https ima 註意 jenkins jenkins 配置使用html publisher查看jmeter html報告時,發現顯示不全,很多東西顯示不了。 項目配置: 查看html報告異常(很多資源無法加載)

使用IE能打開的解決

spc sys def pub pcl int name ims 打開 使用IE插件不能打開的解決 1、加 <add key="TamperProofCommunication" value="false" /> 2、替換 <location

C實現頭法和尾法來構建單鏈表(帶頭結點)

res rgb eof uci fun while data 尾插法 輸入數據 鏈表的構建事實上也就是不斷插入節點的過程。而節點的插入能夠分為頭插法和尾插法。頭插法就是在頭結點後插入該節點,始終把該節點作為第一個節點。尾插法就是在鏈表的最後一個節點處插入元

vue10行代碼實現上拉翻頁加載更多數據,純手寫js實現下拉刷新上拉翻頁引用任何第三方

each ray 如果 部分 list 插件 下拉 ast 頁面數據 vue10行代碼實現上拉翻頁加載更多數據,純手寫js實現下拉刷新上拉翻頁不引用任何第三方插件/庫 一提到移動端的下拉刷新上拉翻頁,你可能就會想到iScroll插件,沒錯iScroll是一個高性能,資源占用