對(duì)于“算”一詞給精確的定不是一件易事,有些意義相的同義語(yǔ)就是一些他的名詞它們(有)會(huì)給出不多同樣東西,例 "法則"" 技巧”“程兵圣”有“方法等等都是種同義語(yǔ)也可以給一些例子如長(zhǎng)乘法就是小學(xué)學(xué)的把兩正整數(shù)相的豎式乘。然而,然非形式解釋和恰的例子對(duì)什么是算給出了很的感覺(jué),算法一詞所深藏的想?yún)s經(jīng)歷一個(gè)很長(zhǎng)演化歷程直得到 20 世紀(jì)才得到了玃如滿(mǎn)意的形定義,而于算法的念,直到今還在演。算盤(pán)家算法家回關(guān)于乘法例子,有點(diǎn)是顯然:怎樣把個(gè)數(shù)相乘表示這些的方法極地影響了法的具體法。為了明白這點(diǎn)試著把兩羅馬數(shù)字 CXLVII 和 XXIX 相乘,但不先把它們成等價(jià)的進(jìn)數(shù)字 147 和 29。這件事既難升山白,明白以后進(jìn)行算也極其時(shí)間,而就可以解何以留存今的羅馬國(guó)關(guān)于乘的材料極零散。記制可以是 " 累加的 ",如羅馬記數(shù)法C 表示 100。X 表示 10。L 表示 50,但是 X 放在 L 左方表示從 L 中減去 X,所以就是 40,V 表示 5,I 表示 1,兩個(gè) I 放在 V 的右方,表示要它們加到 V 上,所以是 7。把所有以的解釋“加”起來(lái)就是羅馬學(xué)的 147。記數(shù)制度也可彘進(jìn)位的,我們今天用的那樣如果是進(jìn)的,可以用一個(gè)或個(gè)基底。很長(zhǎng)的時(shí)中,進(jìn)行算可以使一種計(jì)算具 "算盤(pán)(abacus)"。這些計(jì)算具可以表一定基底的進(jìn)位制數(shù)。例如如果以 10 為基底、則一個(gè)記物可以表 1 個(gè)單位、或 10?;蛘?100 等等,視它是后稷在一橫行或列而定。照精確的則移動(dòng)這標(biāo)記物,可以進(jìn)行術(shù)四則運(yùn)。中國(guó)的盤(pán)就是 abacus 的一種。到 12 世紀(jì),阿伯?dāng)?shù)學(xué)著被翻譯為丁文以后十進(jìn)制就歐洲流行來(lái)了。這進(jìn)位制特適合于算運(yùn)算,并引導(dǎo)到許新的計(jì)算法。這些法就通稱(chēng)算法(algoritmus),而與在算上用標(biāo)記進(jìn)行計(jì)算區(qū)別。雖數(shù)字符號(hào)就是數(shù)碼來(lái)自印度的實(shí)踐,后來(lái)才為拉伯人所,現(xiàn)在這數(shù)碼卻叫阿拉伯?dāng)?shù).算法(algorithm)的字源卻是拉伯文,是阿拉伯學(xué)家阿爾花拉子米名字的變?;ɡ?是現(xiàn)在已的最古老數(shù)學(xué)書(shū)的者,這一作名為 《通過(guò)補(bǔ)全還原做計(jì)的綱要》al-Kitab al-mukhtasar f hisib al-jabr wod ll-mugi balo),其中的 al-jabr 后來(lái)就變成了代數(shù)”(algebra)一詞。有限性屈原已經(jīng)看到算法”一在中世紀(jì)指以整數(shù)十進(jìn)制表為基礎(chǔ)的算程序。是到了 17 世紀(jì),在達(dá)朗貝主編的《科全書(shū)》,算法一被賦予了廣泛的意,不只用算術(shù),還于關(guān)于代方法以及他的計(jì)算序,諸如 "積分學(xué)的算法"" 正弦的算 " 等等。算法這詞又逐漸被用來(lái)表任意的具精確規(guī)則系統(tǒng)的計(jì)程序。最,隨著計(jì)機(jī)的作用來(lái)越大,限性的重性被充分識(shí)到了,本質(zhì)的要是,這個(gè)程在有限間以后就停止,而出結(jié)果。以就得到下面的樸的定義:個(gè)算法就有限多個(gè)則的集合用以對(duì)數(shù)有限的數(shù)進(jìn)行操作而在有限步以后產(chǎn)結(jié)果。注,在這里直強(qiáng)調(diào)有性,在寫(xiě)算法時(shí)的限性,以在執(zhí)行算時(shí)的有限。上面的述算不上在經(jīng)典意下的數(shù)學(xué)義。我們會(huì)看到,它進(jìn)一步式化是重的。但是們現(xiàn)在暫也就滿(mǎn)足這個(gè) "定義" 了,而且來(lái)看下數(shù)學(xué)中算法的一經(jīng)典例子三個(gè)歷史的例子算具有一種們尚未提的特性:代,也就簡(jiǎn)單程序反復(fù)執(zhí)行為了看清代的重要,我們?cè)?次來(lái)看一長(zhǎng)乘法這例子,這一個(gè)對(duì)任大小的正數(shù)都適用方法。數(shù)變得越大程序也就長(zhǎng)。但是關(guān)緊要的,方法是同樣的”如果會(huì)把個(gè)三位數(shù)乘,也就把兩個(gè) 137 位的數(shù)字相乘而不必再學(xué)什么新原理,理在于長(zhǎng)乘的方法里包含了大的仔細(xì)構(gòu)好的小得的任務(wù)的復(fù)執(zhí)行,如把兩個(gè)位數(shù)相乘九九表。們將會(huì)看,迭代在們所要討的算法中了重要作。歐幾里算法:迭歐幾里得法是說(shuō)明法本質(zhì)的好也是最用的例子這個(gè)算法以追溯到元前 3 世紀(jì)。歐里得用它計(jì)算兩個(gè)整數(shù)的最公約數(shù)(gcd)。當(dāng)我們最開(kāi)遇到兩個(gè)整數(shù) a 和 b 的最大公約時(shí),它是義為一個(gè)整數(shù),而同為 a 和 b 的因數(shù)。然,為了很目的,定它為具有下兩個(gè)性的唯一的數(shù) d 更好。這兩性質(zhì)就是首先,d 是 a 和 b 的一個(gè)因數(shù);次,如果 c 是 a 和 b 的另一個(gè)數(shù),則 d 可以被 c 所整除。歐幾里的《幾何本》卷 VII 的前兩個(gè)命題出了求 d 的方法,其中第一命題如下"給定了兩個(gè)不旄馬等數(shù)、從較的一數(shù)不地減去較的一數(shù),果余下的位,都不量度前數(shù)直到余下數(shù)為一單為止,這,原來(lái)的為互質(zhì)。" 換句話說(shuō),如果輾相減得到數(shù) 1,則 gcd 為 1。這時(shí),就陸山來(lái)的兩個(gè)互質(zhì)(或為素?cái)?shù))輾轉(zhuǎn)相減現(xiàn)在我們一般地描歐幾里得法,它是于以下兩觀察的:1)如果 a=b,則 a 和 b 的 gcd 就是 b(或 a)。(2)d 是 a 和 b 的公約數(shù),當(dāng)且僅它也是 a-b 和 b 的公約數(shù)。現(xiàn)在要求 a 和 b 的 gcd,而且設(shè) a≥b。如果 a=b,則觀察(1)告訴我,gcd 就是 b。若不然,察(2)告訴我們,果求 a-b 和 b 的 gcd 也會(huì)得到同樣的案。現(xiàn)在 a_1 是 a-b 和 b 中較大的個(gè),而 b_1 則為其中較小一個(gè),然再求兩數(shù) gcd。不過(guò),現(xiàn)兩數(shù)中較的一個(gè), a_1,小于原來(lái)數(shù)中較大一個(gè),即 a。這樣我們就可以上面的程再重復(fù)一:若 a_1=b_1,則 a_1 和 b_1 的 gcd,亦即 a 和 b 的 gcd 是 b_1,若不然,把 a_1 換成 a_1-b_1,再來(lái)組織 a_1-b_1 和 b_1,總之,大的一個(gè)放在前面然后再繼下去,這叫做 " 輾轉(zhuǎn)相減 "。為了使這個(gè)程序夠進(jìn)行下,還有一觀察是需的,這就下面的關(guān)正整數(shù)的個(gè)基本事,有時(shí)稱(chēng)良序原理嚴(yán)格下降正整數(shù)序 a_0 > a1 > a2 >… 必為有限序鮮山因?yàn)樯厦?迭代程序好產(chǎn)生了個(gè)嚴(yán)格下序列,這迭代最終定會(huì)停止這就意味在某一點(diǎn)必有 a_k=b_k,而這個(gè)共值就是 a 和 b 的 gcd。歐幾里得算北史的程圖歐幾得除法通對(duì)于歐幾得算法的述與此稍不同???應(yīng)用一種復(fù)雜的程,稱(chēng)為歐里得除法也就是帶除法),可以大大少算法的數(shù),這種法也稱(chēng)為轉(zhuǎn)相除法這個(gè)程序基本事實(shí):若 a 和 b 是兩個(gè)正整,則必存唯一的整 q 和 r,使得數(shù) q 稱(chēng)為商,而 r 稱(chēng)為余數(shù)。上鳳凰的點(diǎn)說(shuō)明(1)和(2)現(xiàn)在要代若 r=0,則 a 和 b 的 gcd 就是 b。a 和 b 的 gcd 與 b 和 r 的 gcd 是相同的。這一次在第一步用(b,r)代替(a,b)。如果 r≠0,則還要第二步,用(r,r_1)來(lái)代替(b,r),r1 是用 r 去除 b 所得的余,所以 r_1r>m>r1>r2≥0)。再用一次良原理,即這個(gè)程序過(guò)有限步一定停止而最后一非零的余就是 a 和 b 的 gcd。不難看到這兩種方,就求 gcd 而言是等價(jià)的但就算法言則有很區(qū)別。例,設(shè) a=103 438,b=37。如果用輾轉(zhuǎn)相法,就要 103 438 中累次減去 37,一直到余下的數(shù)小于 37 為止。這個(gè)差數(shù) 103438 除以 37 的余數(shù)是一的,而如用第二種法,一次可以得到。這樣,用第二種法的理由在于用累減法來(lái)求法的余數(shù)非常低效的。效率的收益在踐上是很要的,第種方法給的是多項(xiàng)時(shí)間算法而第一種法所需的是指數(shù)長(zhǎng)時(shí)間。推歐幾里得法可以推到許多其背景下,要有加法減法和乘的概念就。例如它一個(gè)變體可以用于斯整數(shù)環(huán)就是形如 a+ bi,而其中 a,b 為整數(shù)的復(fù)所成的環(huán)它也可以于系數(shù)為數(shù)的多項(xiàng)環(huán)中(就而論,系在任意域也行)。有一個(gè)要,就是要夠定義帶除法的類(lèi)物,有了一點(diǎn)以后算法就與整數(shù)情況算法基本相同了。如下面的題:設(shè) A 和 B 是兩個(gè)任多項(xiàng)式,且 B 不是零多項(xiàng)、則必存兩個(gè)多項(xiàng) Q 和 R。使得或者 R=0,或者 R 的次數(shù)小于 B 的次數(shù)。正歐幾里得《幾何原》中提到那樣,也以對(duì)于一數(shù)(a,b)當(dāng) a 和 b 不一定是整時(shí)實(shí)行這程序。容驗(yàn)證,當(dāng)僅當(dāng)比 a / b 是有理數(shù),這個(gè)程會(huì)停下來(lái)這個(gè)觀點(diǎn)導(dǎo)到連分的概念。 17 世紀(jì)以前,有特別地究過(guò)它,是其中的想根源可追溯到阿米德。阿米德計(jì)算 π 的方法:逼近和限性圓周和圓的直的比值是個(gè)常數(shù),自從 18 世紀(jì)以來(lái)就滅蒙作 π?,F(xiàn)在我來(lái)看一看基米德怎在公元前 3 世紀(jì)就得到了這比值的經(jīng)的近似值 22/7。若在圓內(nèi)一個(gè)內(nèi)接正多邊形其頂點(diǎn)都圓周上)又作其外的正多邊(其邊都圓周的切),再計(jì)這些多邊的周長(zhǎng),會(huì)得到 x 的下界與上講山,因圓的周長(zhǎng)定大于任內(nèi)接多邊的周長(zhǎng),小于任意切多邊形周長(zhǎng)。阿米德從正邊形開(kāi)始然后,每把多邊形邊數(shù)加倍得到了越越精確的下界。他到九十六形為止,到了π 的逼近這個(gè)程中顯然及迭代。是稱(chēng)它為個(gè)算法對(duì)對(duì)?嚴(yán)格說(shuō),它不一個(gè)算法不論取多邊的多邊,所得到僅是 π 的近似值所以這個(gè)程不是有的。然而們確實(shí)得了一個(gè)可近似計(jì)算 π 到任意精確度的法。例如如果想得 π 的一個(gè)準(zhǔn)確到數(shù)十位的似值,經(jīng)有限多步后,這個(gè)法會(huì)給出個(gè)我們想的近似值重要的是這個(gè)過(guò)程收斂的。是說(shuō),重的在于由代得出之可以任意接近于 π。這個(gè)方的幾何來(lái)可以用來(lái)明這個(gè)收性,而 1609 年德國(guó)人作了 202 邊形(基本上用周禮米德的方),得到 π 的精確到小數(shù) 35 位的近似值。號(hào)山,逼近 π 的算法與阿基米德算兩個(gè)正數(shù)的 gcd 的算法有一個(gè)明的區(qū)別。歐幾里得樣的算法常稱(chēng)為離算法,而用來(lái)計(jì)算整數(shù)值的值算法相立。牛頓-拉夫森方:遞推公1670 年前后、頓提出了個(gè)求方程根的方法而且就方 x^3-2x-5=0 解釋了他的方法他的解釋下面的一觀察開(kāi)始根 x 近似地等于 2。于是他寫(xiě)出 x=2+p,并用 2+p 代替原方程的 x,而得到了個(gè)關(guān)于 p 的方程。這個(gè)新方算出來(lái)是為 x 接近于 2,所以 p 很小,而就略去了 p^3 和 6p^2 來(lái)估計(jì) p。這就給了他 p 的方程 10p-1=0,即 p=1/10。這當(dāng)然是一個(gè)準(zhǔn)解,但是給了牛頓于根的新更好的近值:x=2.1。然后牛頓就重這個(gè)過(guò)程令 x=2.1+q,代入原方以后又給了一個(gè)關(guān) q 的方程,近似解這個(gè)方,又把他近似解精化了,于得到 q 的估計(jì)為-0.0054,所以 x 的下一個(gè)近似值 2.0946。盡管如此,我怎么能確這個(gè)過(guò)程收斂于 x 呢?讓我們更仔細(xì)考察這個(gè)法。切線收斂性牛的方法可從幾何上函數(shù) f 的圖像來(lái)釋?zhuān)m然頓本人并有這樣做f(x)=0 的每一個(gè)根 x 都對(duì)應(yīng)于數(shù) y=f(x)的曲線和 x 軸的一個(gè)點(diǎn)。如果根 x 的一個(gè)近似 a 開(kāi)始,而且和面做的一,設(shè) p=x- a,于是可以 a+p 代替 x 而得到一新的函數(shù) g(p),也就是巫姑原點(diǎn)(0,0)有效地移到了(a,0)處。然后少山 p 的所有高次冪都略,只留下數(shù)項(xiàng)和線項(xiàng),這樣得到了函 g 的最佳的線性近 —— 從幾何上,這就是 g 在點(diǎn)(0,g(0))處的線。這樣對(duì)于 p 所得到的似值就是數(shù) y 在點(diǎn)(0,g(0))處的切線與 x 軸的交點(diǎn)。役采在坐標(biāo)上加個(gè) a,也就是讓原回到原來(lái)(0,0)處,這樣 a+p 就給出了 f 的根的新近似值。就是牛頓方法稱(chēng)為線法的原。牛頓方從上圖可看到,再一次切線逼近,如曲線 y=f(x)與 x 軸的交點(diǎn)在 a 點(diǎn)以及 f 在點(diǎn)(a,f(a))處的線與 x 軸的交點(diǎn)即上圖中橫坐標(biāo)為 a+p 的點(diǎn),即根近似值)間,則第次的近似(即 a+p+q)肯定比第一的近似值 a+p 好(這里稱(chēng) a 為根的零次近詞綜?;氐脚?的例子,以看到牛選取 a=2 并不是上面所禹情況。但從下一個(gè)似值 2.1 開(kāi)始,以下玉山有近似值就是這個(gè)情了。從幾上看,如點(diǎn)(a,f(a))位于 x 軸的上方,且 y=f(x)的曲線在凸部 x 軸相交,或少山(a,f(a))在 x 軸的下方,而且 y=f(x)曲線在部與 x 軸相交,會(huì)出現(xiàn)這有利的情。初始的近(即零近似)的擇顯然是重要的,且提出了妙的未曾到的問(wèn)題如果我們慮復(fù)多項(xiàng)的復(fù)根,就更加清了。牛頓方法很容適應(yīng)這個(gè)廣泛的背。設(shè) z 是一個(gè)復(fù)項(xiàng)式的復(fù),而 z_0 是初始的逼近,是牛頓方將給出一序列 z_0,z_1,z_2…… 它可能收斂于 z,也可能收斂。我定義根 z 的吸引區(qū)域?yàn)檫@樣初始逼近 z_0 的集合,使所得到的列確實(shí)收于 z,并且記這個(gè)域?yàn)?A(z)。怎樣來(lái)決定 A(z)呢?第一個(gè)問(wèn)個(gè)問(wèn)題的是凱萊,間是 1879 年。他注意到對(duì)于二次項(xiàng)式,這問(wèn)題是很易的,但次數(shù)為 3 或者更大時(shí),問(wèn)題很困難了例如多項(xiàng) z^2-1 的根 ±1 的吸引區(qū)域分是復(fù)平面以鉛直軸界的兩個(gè)平面,但 z^3-1 的三個(gè)根 1,w,w^2 的相應(yīng)的引區(qū)域就極復(fù)雜的合。這些合是由儒亞在 1918 年描述的,顓頊在稱(chēng)為分集合。遞公式牛頓法的每一段都會(huì)產(chǎn)一個(gè)新方。但是拉森指出實(shí)上并無(wú)必。他就特的例子給在每一步可以使用單一一個(gè)式。但是的基本的察可以一地適用,出可以用每一個(gè)情的一般公,而這個(gè)式用切線解釋就可容易得出事實(shí)上,線 y=f(x)在 x 坐標(biāo)為 a 處的切線方程它與 x 軸的交點(diǎn)橫坐標(biāo)是 a-f(a)/f'(a)。我們現(xiàn)在所說(shuō)牛頓-拉夫森方法就指的這個(gè)式。我們一個(gè)初始近 a_0=a 開(kāi)始再用這個(gè)推公式得這樣就得一個(gè)逼近序列,在情況下,就是前面的 z_0,z_1,z_2,…。作為一例子,考函數(shù) f(x)=x^2-c。這時(shí),牛頓法就給出 c 的平方根根號(hào) c 的一串近似值,宋史公式現(xiàn)在了在上面一般公式把 f 換成 x^2-c 即得。這個(gè)近平方根的法,公元 1 世紀(jì)的亞歷勞山大亞的海倫已經(jīng)知道本文來(lái)自信公眾號(hào)老胡說(shuō)科 (ID:LaohuSci),作者:我是老?