1-5.艾達女士的演算法
艾達女士(1815~1852)有一個赫赫有名的父親,就是家喻戶曉的英國詩人拜倫男爵。
她母親安娜貝拉有不錯的數學天份,在和拜倫離婚後,為了不讓艾達沿襲她父親浪漫不羈的天性,聘請了家庭教師來加強她數學和科學的訓練。
但艾達同時遺傳了父母兩方的基因,以至於特別鍾情於所謂「詩意的科學」(poetical science),就是像計算機這種需要結合演算法,合乎邏輯、結構優美的科學。
巴貝奇的分析機從未真正運作過,但他所提的概念,例如數值儲存和算術運算分開,使用不同卡片輸入來執行不同運算等,讓分析機在概念上類似現代的電腦。
艾達是在社交場合認識巴貝奇,她能理解分析機的潛力,也協助翻譯義大利人描述分析機的論文,還加進了篇幅更長的「譯者評注」。
在1843年所寫的「譯者評注」中,艾達為後世留下兩個主要貢獻,也讓她因此名垂青史。
圖1-5-1.艾達女士圖像
其一,艾達認為,分析機不僅能做數值運算,還能做邏輯運算(例如比較判斷等),甚至,還可以處理音樂、影像等可供算術或邏輯運算的內容。
其二,她提出了現代電腦中「演算法」的概念,並以白努利數列舉例說明。
白努利數列是很複雜的無限數列,不好理解。我們可以用比較簡單的例子來認識何謂「演算法」。
例如我們知道直角三角形一邊為3, 一邊為4, 欲求其斜邊大小。
這個題目我們可引用畢氏定理「斜邊平方為兩直角邊之平方和」。所以先求3平方以及4平方之和後,再開根號得5。
在這個例子中,「先各求兩直角邊平方,將其相加後,再開根號」,即為本題之「演算法」。因為它是可以寫成程式,以計算出任何直角三角形的斜邊值。
另一個例子是從1加到10,1+2+3+4+5+6+7+8+9+10= ?。
我們用手算這題目,當然可以告訴自己,應該要一個一個慢慢加。但電腦並不懂什麼叫做「一個一個慢慢加」,你必須要教它如何進行「一個一個慢慢加」的程序。
你必須告訴它,「從1開始,每次加上一個比現有數字多1的數字,一直累加到10為止。」
上述過程,可以寫成迴圈(loop)程式碼,所以也是一種演算法。
簡單地講,「演算法」就是解答問題的步驟程序,並且可轉換成程式碼。「演算法」不一定要求出正確解,也可以只求出近似解︒
愛達當年已經提出「次常式」的概念,也會使用遞迴的技巧,後世為表彰她的貢獻,美國國防部開發的程式語言Ada,就是以她來命名。
圖1-5-2.艾達的白努利數演算法