A. 避免死鎖-----銀行家演算法詳解
避免死鎖策略旨在預防系統進入不安全狀態,以防止死鎖的發生,相較於預防死鎖,其對資源分配的限制更寬松,旨在提升系統性能。
銀行家演算法由迪傑斯特拉為T.H.E系統設計,旨在避免在發放現金貸款時系統無法滿足所有客戶需要的情況。
演算法通過四大數據結構實現:可利用資源向量、最大需求矩陣、分配矩陣和需求矩陣。其中,可利用資源向量動態反映系統中每類資源的可用數量;最大需求矩陣定義每個進程對各類資源的最大需求;分配矩陣記錄已分配資源數量;需求矩陣表示進程尚需資源數量。
當新進程請求資源時,系統檢查資源分配後是否會導致不安全狀態。若資源充足且分配後系統仍安全,則進行分配;否則,進程等待。
安全性演算法是銀行家演算法的一部分,用於檢測資源分配後的系統狀態。該演算法創建工作向量和結束標志向量,從進程集合中選擇一個滿足條件的進程,分配所需資源並更新相關數據。若所有進程都可順利運行,則系統安全,否則,系統不安全。
通過一個例子,我們可以了解銀行家演算法的執行過程。在這個例子中,我們檢查了T0時刻的安全性,並模擬了進程P0請求資源的場景,分析了系統在不同狀態下的行為。
總結,銀行家演算法是一種經典的避免死鎖策略,通過限制相對寬松的資源分配,旨在提升系統性能。同時,安全性演算法確保了系統在資源分配後保持安全狀態。選擇何種死鎖處理方法應根據OS設計目的而定,沒有絕對的優劣之分。
B. 誰知道中國古代數術4大符號體系要具體的,謝謝
中國古代數學的發展
在古代世界四大文明中,中國數學持續繁榮時期最為長久。從公元前後至公元14世紀,中國古典數學先後經歷了三次發展高潮,即兩漢時期、魏晉南北朝時期和宋元時期,並在宋元時期達到頂峰。
與以證明定理為中心的希臘古典數學不同,中國古代數學是以創造演算法特別是各種解方程的演算法為主線。從線性方程組到高次多項式方程,乃至不定方程,中國古代數學家創造了一系列先進的演算法(中國數學家稱之為「術」),他們用這些演算法去求解相應類型的代數方程,從而解決導致這些方程的各種各樣的科學和實際問題。特別是,幾何問題也歸結為代數方程,然後用程式化的演算法來求解。因此,中國古代數學具有明顯的演算法化、機械化的特徵。以下擇要舉例說明中國古代數學發展的這種特徵。
1.1 線性方程組與「方程術」
中國古代最重要的數學經典《九章算術》(約公元前2世紀)卷8的「方程術」,是解線性方程組的演算法。以該卷第1題為例,用現代符號表述,該問題相當於解一個三元一次方程組:
3x+2y+z=39
2x+3y+z=34
x+2y+3z=26
《九章》沒有表示未知數的符號,而是用算籌將x�y�z的系數和常數項排列成一個(長)方陣:
1 2 3
2 3 2
3 1 1
26 34 39
「方程術」的關鍵演算法叫「遍乘直除」,在本例中演算程序如下:用右行(x)的系數(3)「遍乘」中行和左行各數,然後從所得結果按行分別「直除」右行,即連續減去右行對應各數,就將中行與左行的系數化為0。反復執行這種「遍乘直除」演算法,就可以解出方程。很清楚,《九章算術》方程術的「遍乘直除」 演算法,實質上就是我們今天所使用的解線性方程組的消元法,以往西方文獻中稱之為「高斯消去法」,但近年開始改變稱謂,如法國科學院院士、原蘇黎世大學數學系主任P.Gabriel教授在他撰寫的教科書[4]中就稱解線性方程組的消元法為「張蒼法」,張蒼相傳是《九章算術》的作者之一。
1.2 高次多項式方程與「正負開方術」
《九章算術》卷4中有「開方術」和「開立方術」。《九章算術》中的這些演算法後來逐步推廣到開更高次方的情形,並且在宋元時代發展為一般高次多項式方程的數值求解。秦九韶是這方面的集大成者,他在《數書九章》(1247年)一書中給出了高次多項式方程數值解的完整演算法,即他所稱的「正負開方術」。
用現代符號表達,秦九韶「正負開方術」的思路如下:對任意給定的方程
f(x)=a0xn+a1xn-1+……+an-2x2+an-1x+an=0 (1)
其中a0≠0,an<0,要求(1)式的一個正根。秦九韶先估計根的最高位數字,連同其位數一起稱為「首商」,記作c,則根x=c+h,代入(1)得
f(c+h)=a0(c+h)n+a1(c+h)n-1+……+an-1(c+h)+an=0
按h的冪次合並同類項即得到關於h的方程:
f(h)=a0hn+a1hn-1+……+an-1h+an=0 (2)
於是又可估計滿足新方程(2)的根的最高位數字。如此進行下去,若得到某個新方程的常數項為0,則求得的根是有理數;否則上述過程可繼續下去,按所需精度求得根的近似值。
如果從原方程(1)的系數a0,a1,…,an及估值c求出新方程(2)的系數a0,a1,…,an的演算法是需要反復迭代使用的,秦九韶給出了一個規格化的程序,我們可稱之為「秦九韶程序」, 他在《數書九章》中用這一演算法去解決各種可以歸結為代數方程的實際問題,其中涉及的方程最高次數達到10次,秦九韶解這些問題的演算法整齊劃一,步驟分明,堪稱是中國古代數學演算法化、機械化的典範。
1.3 多元高次方程組與「四元術」
絕不是所有的問題都可以歸結為線性方程組或一個未知量的多項式方程來求解。實際上,可以說更大量的實際問題如果能化為代數方程求解的話,出現的將是含有多個未知量的高次方程組。
多元高次方程組的求解即使在今天也絕非易事。歷史上最早對多元高次方程組作出系統處理的是中國元代數學家朱世傑。朱世傑的《四元玉鑒》(1303年)一書中涉及的高次方程達到了4個未知數。朱世傑用「四元術」來解這些方程。「四元術」首先是以「天」、「地」、「人」、「物」來表示不同的未知數,同時建立起方程式,然後用順序消元的一般方法解出方程。朱世傑在《四元玉鑒》中創造了多種消元程序。
通過《四元玉鑒》中的具體例子可以清晰地了解朱世傑「四元術」的特徵。值得注意的是,這些例子中相當一部分是由幾何問題導出的。這種將幾何問題轉化為代數方程並用某種統一的演算法求解的例子,在宋元數學著作中比比皆是,充分反映了中國古代幾何代數化和機械化的傾向。
1.4 一次同餘方程組與「中國剩餘定理」
中國古代數學家出於歷法計算的需要,很早就開始研究形如:
X≡Ri (mod ai) i=1,2,...,n (1)
(其中ai 是兩兩互素的整數)的一次同餘方程組求解問題。公元4世紀的《孫子算經》中已有相當於求解下列一次同餘組的著名的「孫子問題」:
X≡2(mod3) ≡3(mod5) ≡2(mod7)
《孫子算經》作者給出的解法,引導了宋代秦九韶求解一次同餘組的一般演算法——「大衍求一術」。現代文獻中通常把這種一般演算法稱為「中國剩餘定理」。
1.5 插值法與「招差術」
插值演算法在微積分的醞釀過程中扮演了重要角色。在中國,早從東漢時期起,學者們就慣用插值法來推算日月五星的運動。起初是簡單的一次內插法,隋唐時期出現二次插值法(如一行《大衍歷》,727年)。由於天體運動的加速度也不均勻,二次插值仍不夠精密。隨著歷法的進步,到了宋元時代,便產生了三次內插法(郭守敬《授時歷》,1280年)。在此基礎上,數學家朱世傑更創造出一般高次內插公式,即他所說的「招差術」。 朱世傑的公式相當於
f(n)=n△+ n(n�1)△2+ n(n�1)(n�2)△3
+ n(n�1)(n�2)(n�3)△4+……
這是一項很突出的成就。
這里不可能一一列舉中國古代數學家的所有演算法,但僅從以上介紹不難看到,古代與中世紀中國數學家創造的演算法,有許多即使按現代標准衡量也達到了很高的水平。這些演算法所表達的數學真理,有的在歐洲直到18世紀以後依賴近代數學工具才重新獲得(如前面提到的高次代數方程數值求解的秦九韶程序,與1819年英國數學家W. 霍納重新導出的「霍納演算法」基本一致;多元高次方程組的系統研究在歐洲也要到18世紀末才開始在E. 別朱等人的著作中出現;解一次同餘組的剩餘定理則由歐拉與高斯分別獨立重新獲得;至於朱世傑的高次內插公式,實質上已與現在通用的牛頓-格列高里公式相一致)。這些演算法的結構,其復雜程度也是驚人的。如對秦九韶「大衍求一術」和「正負開方術」的分析表明,這些演算法的計算程序,包含了現代計算機語言中構造非平易演算法的基本要素與基本結構。這類復雜的演算法,很難再僅僅被看作是簡單的經驗法則了,而是高度的概括思維能力的產物,這種能力與歐幾里得幾何的演繹思維風格截然不同,但卻在數學的發展中起著完全可與之相媲美的作用。事實上,古代中國演算法的繁榮,同時也孕育了一系列極其重要的概念,顯示了演算法化思維在數學進化中的創造意義和動力功能。以下亦舉幾例。
1.6 負數的引進
《九章算術》「方程術」的消元程序,在方程系數相減時會出現較小數減較大數的情況,正是在這里,《九章算術》的作者們引進了負數,並給出了正、負數的加減運演算法則,即「正負術」。
對負數的認識是人類數系擴充的重大步驟。公元7世紀印度數學家也開始使用負數,但負數的認識在歐洲卻進展緩慢,甚至到16世紀,韋達的著作還迴避負數。
1.7 無理數的發現
中國古代數學家在開方運算中接觸到了無理數。《九章算術》開方術中指出了存在有開不盡的情形:「若開方不盡者,為不可開」,《九章算術》的作者們給這種不盡根數起了一個專門名詞——「面」。「面」,就是無理數。與古希臘畢達哥拉斯學派發現正方形的對角線不是有理數時驚慌失措的表現相比,中國古代數學家卻是相對自然地接受了那些「開不盡」的無理數,這也許應歸功於他們早就習慣使用的十進位制,這種十進位制使他們能夠有效地計算「不盡根數」的近似值。為《九章算術》作注的三國時代數學家劉徽就在「開方術」注中明確提出了用十進制小數任意逼近不盡根數的方法,他稱之為「求微數法」,並指出在開方過程中,「其一退以十為步,其再退以百為步,退之彌下,其分彌細,則……雖有所棄之數,不足言之也」。
十進位值記數制是對人類文明不可磨滅的貢獻。法國大數學家拉普拉斯曾盛贊十進位值制的發明,認為它「使得我們的算術系統在所有有用的創造中成為第一流的」。中國古代數學家正是在嚴格遵循十進位制的籌算系統基礎上,建立起了富有演算法化特色的東方數學大廈。
1.8 賈憲三角或楊輝三角
從前面關於高次方程數值求解演算法(秦九韶程序)的介紹我們可以看到,中國古代開方術是以�c+h n的二項展開為基礎的,這就引導了二項系數表的發現。南宋數學家楊輝著《詳解九章演算法》(1261年)中,載有一張所謂「開方作法本源圖」,實際就是一張二項系數表。這張圖摘自公元1050年左右北宋數學家賈憲的一部著作。「開方作法本源圖」現在就叫「賈憲三角」或「楊輝三角」。二項系數表在西方則叫「帕斯卡三角」�1654年 。
1.9 走向符號代數
解方程的數學活動,必然引起人們對方程表達形式的思考。在這方面,以解方程擅長的中國古代數學家們很自然也是走在了前列。在宋元時期的數學著作中,已出現了用特定的漢字作為未知數符號並進而建立方程的系統努力。這就是以李冶為代表的「天元術」和以朱世傑為代表的「四元術」。所謂「天元術」,首先是「立天元一為某某」,這相當於「設為某某」,「天元一」就表示未知數,然後在籌算盤上布列「天元式」,即一元方程式。該方法被推廣到多個未知數情形,就是前面提到的朱世傑的「四元術」。因此,用天元術和四元術列方程的方法,與現代代數中的列方程法已相類似。
符號化是近世代數的標志之一。中國宋元數學家在這方面邁出了重要一步,「天元術」和「四元術」,是以創造演算法特別是解方程的演算法為主線的中國古代數學的一個高峰�。
2 中國古代數學對世界數學發展的貢獻
數學的發展包括了兩大主要活動:證明定理和創造演算法。定理證明是希臘人首倡,後構成數學發展中演繹傾向的脊樑;演算法創造昌盛於古代和中世紀的中國、印度,形成了數學發展中強烈的演算法傾向。統觀數學的歷史將會發現,數學的發展並非總是演繹傾向獨占鰲頭。在數學史上,演算法傾向與演繹傾向總是交替地取得主導地位。古代巴比倫和埃及式的原始演算法時期,被希臘式的演繹幾何所接替,而在中世紀,希臘數學衰落下去,演算法傾向在中國、印度等東方國度繁榮起來;東方數學在文藝復興前夕通過阿拉伯傳播到歐洲,對近代數學興起產生了深刻影響。事實上,作為近代數學誕生標志的解析幾何與微積分,從思想方法的淵源看都不能說是演繹傾向而是演算法傾向的產物。
從微積分的歷史可以知道,微積分的產生是尋找解決一系列實際問題的普遍演算法的結果�6�。這些問題包括:決定物體的瞬時速度、求極大值與極小值、求曲線的切線、求物體的重心及引力、面積與體積計算等。從16世紀中開始的100多年間,許多大數學家都致力於獲得解決這些問題的特殊演算法。牛頓與萊布尼茲的功績是在於將這些特殊的演算法統一成兩類基本運算——微分與積分,並進一步指出了它們的互逆關系。無論是牛頓的先驅者還是牛頓本人,他們所使用的演算法都是不嚴格的,都沒有完整的演繹推導。牛頓的流數術在邏輯上的瑕疵更是眾所周知。對當時的學者來說,首要的是找到行之有效的演算法,而不是演算法的證明。這種傾向一直延續到18世紀。18世紀的數學家也往往不管微積分基礎的困難而大膽前進。如泰勒公式,歐拉、伯努利甚至19世紀初傅里葉所發現的三角展開等,都是在很長時期內缺乏嚴格的證明。正如馮·諾伊曼指出的那樣:沒有一個數學家會把這一時期的發展看作是異端邪道;這個時期產生的數學成果被公認為第一流的。並且反過來,如果當時的數學家一定要在有了嚴密的演繹證明之後才承認新演算法的合理性,那就不會有今天的微積分和整個分析大廈了。
現在再來看一看更早的解析幾何的誕生。通常認為,笛卡兒發明解析幾何的基本思想,是用代數方法來解幾何問題。這同歐氏演繹方法已經大相徑庭了。而事實上如果我們去閱讀笛卡兒的原著,就會發現貫穿於其中的徹底的演算法精神。《幾何學》開宗明義就宣稱:「我將毫不猶豫地在幾何學中引進算術的術語,以便使自己變得更加聰明」。眾所周知,笛卡兒的《幾何學》是他的哲學著作《方法論》的附錄。笛卡兒在他另一部生前未正式發表的哲學著作《指導思維的法則》(簡稱《法則》)中曾強烈批判了傳統的主要是希臘的研究方法,認為古希臘人的演繹推理只能用來證明已經知道的事物,「卻不能幫助我們發現未知的事情」。因此他提出「需要一種發現真理的方法」,並稱之為「通用數學」(mathesis universakis)。笛卡兒在《法則》中描述了這種通用數學的藍圖,他提出的大膽計劃,概而言之就是要將一切科學問題轉化為求解代數方程的數學問題:
任何問題→數學問題→代數問題→方程求解而笛卡兒的《幾何學》,正是他上述方案的一個具體實施和示範,解析幾何在整個方案中扮演著重要的工具作用,它將一切幾何問題化為代數問題,這些代數問題則可以用一種簡單的、幾乎自動的或者毋寧說是機械的方法去解決。這與上面介紹的古代中國數學家解決問題的路線可以說是一脈相承。
因此我們完全有理由說,在從文藝復興到17世紀近代數學興起的大潮中,回響著東方數學特別是中國數學的韻律。整個17—18世紀應該看成是尋求無窮小演算法的英雄年代,盡管這一時期的無窮小演算法與中世紀演算法相比有質的飛躍。而從19世紀特別是70年代直到20世紀中,演繹傾向又重新在比希臘幾何高得多的水準上占據了優勢。因此,數學的發展呈現出演算法創造與演繹證明兩大主流交替繁榮、螺旋式上升過程:
演繹傳統——定理證明活動
演算法傳統——演算法創造活動
中國古代數學家對演算法傳統的形成與發展做出了毋容置疑的巨大貢獻。
我們強調中國古代數學的演算法傳統,並不意味中國古代數學中沒有演繹傾向。事實上,在魏晉南北朝時期一些數學家的工作中,已出現具有相當深度的論證思想。如趙爽勾股定理證明、劉徽「陽馬」�一種長方錐體 體積證明、祖沖之父子對球體積公式的推導等等,均可與古希臘數學家相應的工作媲美。趙爽勾股定理證明示意圖「弦圖」原型,已被採用作2002年國際數學家大會會標。令人迷惑的是,這種論證傾向隨著南北朝的結束,可以說是戛然而止。囿於篇幅和本文重點,對這方面的內容這里不能詳述,有興趣的讀者可參閱參考文獻�3�。
3 古為今用,創新發展
到了20世紀,至少從中葉開始,電子計算機的出現對數學的發展帶來了深遠影響,並孕育出孤立子理論、混沌動力學、四色定理證明等一系列令人矚目的成就。藉助計算機及有效的演算法猜測發現新事實、歸納證明新定理乃至進行更一般的自動推理……,這一切可以說已揭開了數學史上一個新的演算法繁榮時代的偉大序幕。科學界敏銳的有識之士紛紛預見到數學發展的這一趨勢。在我國,早在上世紀50年代,華羅庚教授就親自領導建立了計算機研製組,為我國計算機科學和數學的發展奠定了基礎。吳文俊教授更是從70年代中開始,毅然由原先從事的拓撲學領域轉向定理機器證明的研究,並開創了現代數學的嶄新領域——數學機械化。被國際上譽為「吳方法」的數學機械化方法已使中國在數學機械化領域處於國際領先地位,而正如吳文俊教授本人所說:「幾何定理證明的機械化問題,從思維到方法,至少在宋元時代就有蛛絲馬跡可尋,」他的工作「主要是受中國古代數學的啟發」。「吳方法」,是中國古代數學演算法化、機械化精髓的發揚光大。
計算機影響下演算法傾向的增長,自然也引起一些外國學者對中國古代數學中演算法傳統的興趣。早在上世紀70年代初,著名的計算機科學家D.E.Knuth就呼籲人們關注古代中國和印度的演算法�5�。多年來這方面的研究取得了一定進展,但總的來說還亟待加強。眾所周知,中國古代文化包括數學是通過著名的絲綢之路向西方傳播的,而阿拉伯地區是這種文化傳播的重要中轉站。現存有些阿拉伯數學與天文著作中包含有一定的中國數學與天文學知識,如著名的阿爾·卡西《算術之鑰》一書中有相當數量的數學問題顯示出直接或間接的中國來源,而根據阿爾·卡西本人記述,他所工作的天文台中就有不少來自中國的學者。
然而長期以來由於「西方中心論」特別是「希臘中心論」的影響以及語言文字方面的障礙,有關資料還遠遠沒有得到發掘。正是為了充分揭示東方數學與歐洲數學復興的關系,吳文俊教授特意從他榮獲的國家最高科學獎中撥出專款成立了「吳文俊數學與天文絲路基金」,鼓勵支持年輕學者深入開展這方面的研究,這是具有深遠意義之舉。
研究科學的歷史,其重要意義之一就是從歷史的發展中獲得借鑒和汲取教益,促進現實的科學研究,通俗地說就是「古為今用」。吳文俊對此有精闢的論述,他說:「假如你對數學的歷史發展,對一個領域的發生和發展,對一個理論的興旺和衰落,對一個概念的來龍去脈,對一種重要思想的產生和影響等這許多歷史因素都弄清了,我想,對數學就會了解得更多,對數學的現狀就會知道得更清楚、更深刻,還可以對數學的未來起一種指導作用,也就是說,可以知道數學究竟應該按怎樣的方向發展可以收到最大的效益」。數學機械化理論的創立,正是這種古為今用原則的碩果。我國科學技術的偉大復興,呼喚著更多這樣既有濃郁的中國特色、又有鮮明時代氣息的創新。
C. 兩位數乘兩位數的速演算法
兩位數的乘法是一般是小學四年級以後就要學會的一種基礎數學計算方法,也是今後學習數學必不可少的內容。對於數學運算來說,學會兩位數的乘法速算技巧,對於提高數學運算效率、提高考試成績具有重要的幫助。兩位數乘兩位數的速演算法有頭乘頭,尾加尾,尾乘尾;一個頭加1後,頭乘頭,尾乘尾;頭互補,尾相同;一個頭加1後,頭乘頭,尾乘尾。
1、頭乘頭,尾加尾,尾乘尾:這種演算法是在十幾乘十幾的時候可以直接使用,但是一定要注意,個位相乘的話,不夠兩位數的時候要用0來佔位。
2、一個頭加1後,頭乘頭,尾乘尾:這句話的意思就是頭相同,尾互補,主要是首同末和十,也就是十位數完全相同,個位數相加的和剛好也等於10的時候可以直接使用。在兩位數的乘法算式中,如果兩個乘數的十位數是相同的,先將第一個乘數加上第二個乘數的個位數,然後尾數相加。
3、頭乘頭加尾,尾乘尾:這句話的意思就是頭互補,尾相同,末同首和十,個位數完全相同,十位數剛好相加等於10 的時候則可以直接使用。如果兩個乘數的個位數是相同的,把十位數部分進行一次相乘和相乘,尾數個位數部分再相乘這一點需要注意的是兩數相同的各個位數之積為得數的後兩位數,不足10的時候,在十位上補0就可以了。。
4、一個頭加1後,頭乘頭,尾乘尾:第一個數乘數互補,另外一個乘數數字相同的時候使用,這一點也要注意一個知識點,那就是個位相乘,不夠兩位數的時候要用0來佔位。
數學速演算法是指利用數與數之間的特殊關系進行較快的加減乘除運算的計算方法。數學速演算法分為金華速算、魏德武速算、史豐收速算以及古人創造的「袖裡吞金」四大類速算方法。
D. 小學速算方法與技巧是什麼
1、湊整法:根據運算定律和運算性質,把算式中能湊成整數(特別是整十數、整百數等)的部分合並或拆開,然後求得結果。
例如:8+4.1+1+5.9
=(8+1)+(4.1+5.9)
=10+10
=20
例如:1.25×18
=1.25×(10+8)
=1.25×10+1.25×8
=12.5+10
=22.5
例如:78×98
=78×(100-2)
=78×100-78×2
=7800-156
=7644
2、變化法:適當轉變運算方法,即以加代減,以減代加,以乘代除,以除代乘;或改變運算順序,或利用約分、加減進行化簡等。
例如:4.7×0.25+7.3÷4
=(4.7+7.3)×0.25
=3
例如:3÷4-0.5÷0.7-0.3÷0.4+5÷7
=(3÷4-0.3÷0.4)+(5÷7-0.5÷0.7)
=0
簡便計算的作用:
1、簡便計算使得學生在短暫的時間內快速准確地算出正確答案。
2、簡便運算與四則混合運算的演算法是有區別的,它不按四則混合運算的運算順序進行運算,而是運用各種運算性質和運算定律進行運算,是一種特別的運算方式。
3、「簡便運算」的試題種類很多,一般可分為兩大類:用「運算定律」和「運算性質」進行運算。
4、在數學當中運用簡便計算方法可以很大程度節省做題的時間。