|
|
解題方案的準確和完整的描述。是一個有窮的動作步驟序列,衹有一個初始態,每個動作衹有一個後繼動作,一步一步地直到序列結束。是解題從開始到結束的動作全過程。 |
|
計算方法 |
|
你的算法最簡單 |
|
算術的舊稱。 清 昭槤 《嘯亭雜錄·戴學士》:“公善天文、算法,與 南懷仁 詰論, 懷仁 為之屈。” 清 馬建忠 《擬設翻譯書院議》:“又算法、幾何、八綫、重學、熱、光、聲、電,與夫飛、潛、動、植、金、石之學,性理格致之書,皆擇其尤要而可資討論者,列為逐日課程。” |
|
計算的方法。《北史·高允傳》:“ 允 所製詩賦詠頌箴論表讚誄……凡百餘篇,尤明算法,為《算術》三捲。” 清 袁枚 《隨園詩話》捲一:“ 梅定九 先生以算法、《易》理受知 聖祖 。” 清 王應奎 《柳南隨筆》捲二:“今人事事不如古人。而有二事卻勝之,歷法之密也,算法之巧也。” |
|
算法是指完成一個任務準確而完整的描述。也就是說給定初始狀態或輸入數據,經過計算機程序的有限次運算,能夠得出所要求或期望的終止狀態或輸出數據。
算法常常含有重複的步驟和一些比較或邏輯判斷。如果一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解决這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間復雜度與時間復雜度來衡量。 |
|
“算法”的中文名稱出自周髀算經;而英文名稱 algorithm 來自於9世紀波斯數學家比阿勒·霍瓦裏鬆的名字al-khwarizmi,因為比阿勒·霍瓦裏鬆在數學上提出了算法這個概念。“算法”原為"algorism",意思是阿拉伯數字的運算法則,在18世紀演變為"algorithm"。歐幾裏得算法被人們認為是史上第一個算法。 第一次編寫程序是ada byron於1842年為巴貝奇分析機編寫求解解伯努利方程的程序,因此ada byron被大多數人認為是世界上第一位程序員。因為查爾斯·巴貝奇(charles babbage)未能完成他的巴貝奇分析機,這個算法未能在巴貝奇分析機上執行。 因為"well-defined procedure"缺少數學上精確的定義,19世紀和20世紀早期的數學家、邏輯學家在定義算法上出現了睏難。20世紀的英國數學家圖靈提出了著名的圖靈論題,並提出一種假想的計算機的抽象模型,這個模型被稱為圖靈機。圖靈機的出現解决了算法定義的難題,圖靈的思想對算法的發展起到了重要的作用。 |
|
輸入:一個算法必須有零個或多個輸入量。
輸出:一個算法應有一個或多個輸出量,輸出量是算法計算的結果。
確定性:算法的描述必須無歧義,以保證算法的執行結果是確定的。
有窮性:算法必須在有限步驟內實現。註:此處“有限”不同於數學概念的“有限”,天文數字般的有限對於實際問題並無意義。
有效性:又稱可行性。能夠實現,算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現。 |
|
算法是計算機處理信息的本質,因為計算機程序本質上是一個算法來告訴計算機確切的步驟來執行一個指定的任務,如計算職工的薪水或打印學生的成績單。 一般地,當算法在處理信息時,會從輸入設備或數據的存儲地址讀取數據,把結果寫入輸出設備或某個存儲地址供以後再調用。 |
|
算法的時間復雜度
算法的時間復雜度是指算法需要消耗的時間資源。一般來說,計算機算法是問題規模n 的函數f(n),算法的時間復雜度也因此記做
因此,問題的規模n 越大,算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(asymptotic time complexity)。
算法的空間復雜度
算法的空間復雜度是指算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
非確定性多項式時間(np)
算法的實現
算法不單單可以用計算機程序來實現,也可以在人工神經網絡、電路或者機械設備上實現。
例子一
這是算法的一個簡單的例子。
我們有一串隨機數列。我們的目的是找到這個數列中最大的數。如果將數列中的每一個數字看成是一顆豆子的大小,可以將下面的算法形象地稱為“撿豆子”:
首先將第一顆豆子放入口袋中。
從第二顆豆子開始檢查,直到最後一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先口袋中的豆子。
最後口袋中的豆子就是所有的豆子中最大的一顆。
下面是一個形式算法,用近似於編程語言的偽代碼表示
給定:一個數列“list",以及數列的長度"length(list)"
largest = list
for counter = 2 to length(list):
if list[counter] > largest:
largest = list[counter]
print largest
符號說明:
= 用於表示賦值。即:右邊的值被賦予給左邊的變量。
list[counter]用於表示數列中的第counter項。例如:如果counter的值是5,那麽list[counter]表示數列中的第5項。
<= 用於表示“小於或等於”。
例子二
求兩個自然數的最大公約數 設兩個變量 m 和 n
如果 m < n,則交換 m 和 n
m 被 n 除,得到餘數 r
判斷 r=0,正確則 n 即為“最大公約數”,否則下一步
將 n 賦值給 m,將 r 賦值給 n,重做第一步。
用“basic 代碼”表示--
if m < n then swap m,n
do while r <> 0
r = m mod n
m = n
n = r
loop
print n
算法設計和分析的基本方法
分治法
動態規劃
貪心法(亦作饕餮法)
算法的三種基本結構的定義
順序結構:順序結構是最簡單、最常用的算法結構,語句與語句之間,框與框之間按從上到下的順序進行。
選擇結構:是先根據條件作出判斷,再决定執行哪一種操作的算法結構,它必須包含判斷框。當條件p成立(或稱為真)時執行a,否則執行b,不可能兩者同時執行,但a或b兩個框中可以有一個是空的,即不執行任何操作.
循環結構:在一些算法中,經常會出現從某處開始,按照一定條件,反復執行某一處理步驟的情況,這就是循環結構,反復執行的處理步驟為循環體,它可以細分為兩類:直到型循環結構、當型循環結構.
算法的分類
基本算法
枚舉
搜索
深度優先搜索
廣度優先搜索
啓發式搜索
遺傳算法
數據結構的算法
數論與代數算法
計算幾何的算法
凸包算法
圖論的算法
哈夫曼編碼
樹的遍歷
最短路徑算法
最小生成樹算法
最小樹形圖
網絡流算法
匹配算法
動態規劃
其他
數值分析
加密算法
排序算法
檢索算法
隨機化算法
關於並行算法,請參閱並行計算一文。
參見
計算機科學課程列表 算法 algorithm
算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種算法。前者是推理實現的算法,後者是操作實現的算法。
一個算法應該具有以下五個重要的特徵:
1、有窮性: 一個算法必須保證執行有限步之後結束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
算法的設計要求
1)正確性(correctness)
有4個層次:
A.程序不含語法錯誤;
B.程序對幾組輸入數據能夠得出滿足規格要求的結果;
C.程序對精心選擇的、典型的、苛刻的、帶有刁難性的幾組輸入數據能夠得出滿足規格要求的結果;
D.程序對一切合法的輸入數據都能産生滿足規格要求的結果。
2)可讀性(readability)
算法的第一目的是為了閱讀和交流;
可讀性有助於對算法的理解;
可讀性有助於對算法的調試和修改。
3)高效率與低存儲量
處理速度快;存儲容量小
時間和空間是矛盾的、實際問題的求解往往是求得時間和空間的統一、折中。
算法的描述 算法的描述方式(常用的)
算法描述自然語言
流程圖特定的表示算法的圖形符號
偽語言包括程序設計語言的三大基本結構及自然語言的一種語言
類語言類似高級語言的語言,例如,類pascal、類c語言。
算法的評價算法評價的標準:時間復雜度和空間復雜度。
1)時間復雜度指在計算機上運行該算法所花費的時間。用“o(數量級)”來表示,稱為“階”。
常見的時間復雜度有: o(1)常數階;o(logn)對數階;o(n)綫性階;o(n^2)平方階
2)空間復雜度指算法在計算機上運行所占用的存儲空間。度量同時間復雜度。
時間復雜度舉例
(a) x:=x+1 ;o(1)
(b) for i:=1 to n do
x:= x+1;o(n)
(c) for i:= 1 to n do
for j:= 1 to n do
x:= x+1; o(n^2)
“算法”一詞最早來自公元 9世紀 波斯數學家比阿勒·霍瓦裏鬆的一本影響深遠的著作《代數對話錄》。20世紀的 英國 數學家 圖靈 提出了著名的圖靈論點,並抽象出了一臺機器,這臺機器被我們稱之為 圖靈機 。圖靈的思想對算法的發展起到了重要的作用。
算法是 計算機 處理信息的本質,因為 計算機程序 本質上是一個算法,告訴計算機確切的步驟來執行一個指定的任務,如計算職工的薪水或打印學生的成績單。 一般地,當算法在處理信息時,數據會從輸入設備讀取,寫入輸出設備,可能保存起來以供以後使用。
這是算法的一個簡單的例子。
我們有一串隨機數列。我們的目的是找到這個數列中最大的數。如果將數列中的每一個數字看成是一顆豆子的大小 可以將下面的算法形象地稱為“撿豆子”:
首先將第一顆豆子(數列中的第一個數字)放入口袋中。
從第二顆豆子開始檢查,直到最後一顆豆子。如果正在檢查的豆子比口袋中的還大,則將它撿起放入口袋中,同時丟掉原先的豆子。 最後口袋中的豆子就是所有的豆子中最大的一顆。
下面是一個形式算法,用近似於 編程語言 的 偽代碼 表示
給定:一個數列“list",以及數列的長度"length(list)" largest = list for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符號說明:
= 用於表示賦值。即:右邊的值被賦予給左邊的變量。
list[counter] 用於表示數列中的第 counter 項。例如:如果 counter 的值是5,那麽 list[counter] 表示數列中的第5項。
<= 用於表示“小於或等於”。
算法的分類
(一)基本算法 :
1.枚舉
2.搜索:
深度優先搜索
廣度優先搜索
啓發式搜索
遺傳算法
(二)數據結構的算法
(三)數論與代數算法
(四)計算幾何的算法:求凸包
(五)圖論 算法:
1.哈夫曼編碼
2.樹的遍歷
3.最短路徑 算法
4.最小生成樹 算法
5.最小樹形圖
6.網絡流 算法
7.匹配算法
(六)動態規劃
(七)其他:
1.數值分析
2.加密算法
3.排序 算法
4.檢索算法
5.隨機化算法 |
|
算法(Algorithm)是一係列解决問題的清晰指令,也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解决這個問題。不同的算法可能用不同的時間、空間或效率來完成同樣的任務。一個算法的優劣可以用空間復雜度與時間復雜度來衡量。
算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解决一類問題。
一個算法應該具有以下五個重要的特徵:
1、有窮性: 一個算法必須保證執行有限步之後結束;
2、確切性: 算法的每一步驟必須有確切的定義;
3、輸入:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身定除了初始條件;
4、輸出:一個算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的算法是毫無意義的;
5、可行性: 算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
計算機科學家尼剋勞斯-沃思曾著過一本著名的書《數據結構十算法= 程序》,可見算法在計算機科學界與計算機應用界的地位。 |
|
同一問題可用不同算法解决,而一個算法的質量優劣將影響到算法乃至程序的效率。算法分析的目的在於選擇合適算法和改進算法。一個算法的評價主要從時間復雜度和空間復雜度來考慮。
時間復雜度
算法的時間復雜度是指算法需要消耗的時間資源。一般來說,計算機算法是問題規模n 的函數f(n),算法的時間復雜度也因此記做
T(n)=Ο(f(n))
因此,問題的規模n 越大,算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。
空間復雜度
算法的空間復雜度是指算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
詳見百度百科詞條"算法復雜度" |
|
1.遞推法
遞推法是利用問題本身所具有的一種遞推關係求問題解的一種方法。它把問題分成若幹步,找出相鄰幾步的關係,從而達到目的,此方法稱為遞推法。
2.遞歸
遞歸指的是一個過程:函數不斷引用自身,直到引用的對象已知
3.窮舉搜索法
窮舉搜索法是對可能是解的衆多候選解按某種順序進行逐一枚舉和檢驗,並從衆找出那些符合要求的候選解作為問題的解。
4.貪婪法
貪婪法是一種不追求最優解,衹希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。
5.分治法
把一個復雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。
6.動態規劃法
動態規劃是一種在數學和計算機科學中使用的,用於求解包含重疊子問題的最優化問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種算法的基礎,被廣泛應用於計算機科學和工程領域。
7.迭代法
迭代是數值分析中通過從一個初始估計出發尋找一係列近似解來解决問題(一般是解方程或者方程組)的過程,為實現這一過程所使用的方法統稱為迭代法。 |
|
算法可大致分為基本算法、數據結構的算法、數論與代數算法、計算幾何的算法、圖論的算法、動態規劃以及數值分析、加密算法、排序算法、檢索算法、隨機化算法、並行算法。
算法可以宏泛的分為三類:
有限的,確定性算法 這類算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類算法得出的結果常取决於輸入值。
有限的,非確定算法 這類算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,算法的結果並不是唯一的或確定的。
無限的算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的算法。通常,無限算法的産生是由於未能確定的定義終止條件。 |
|
經典的算法有很多,如:"歐幾裏德算法,割圓術,秦九韶算法"。 |
|
目前市面上有許多論述算法的書籍,其中最著名的便是《計算機程序設計藝術》(The Art Of Computer Programming) 以及《算法導論》(Introduction To Algorithms)。 |
|
“算法”即演算法的大陸中文名稱出自《周髀算經》;而英文名稱Algorithm 來自於9世紀波斯數學家al-Khwarizmi,因為al-Khwarizmi在數學上提出了算法這個概念。“算法”原為"algorism",意思是阿拉伯數字的運算法則,在18世紀演變為"algorithm"。歐幾裏得算法被人們認為是史上第一個算法。 第一次編寫程序是Ada Byron於1842年為巴貝奇分析機編寫求解解伯努利方程的程序,因此Ada Byron被大多數人認為是世界上第一位程序員。因為查爾斯·巴貝奇(Charles Babbage)未能完成他的巴貝奇分析機,這個算法未能在巴貝奇分析機上執行。 因為"well-defined procedure"缺少數學上精確的定義,19世紀和20世紀早期的數學家、邏輯學家在定義算法上出現了睏難。20世紀的英國數學家圖靈提出了著名的圖靈論題,並提出一種假想的計算機的抽象模型,這個模型被稱為圖靈機。圖靈機的出現解决了算法定義的難題,圖靈的思想對算法的發展起到了重要作用的。 |
|
suanfa
算法
algorithm
求解問題類的、機械的、統一的方法,它由有限多個步驟組成,對於問題類中的每個給定的具體問題,機械地執行這些步驟就可以得到問題的解答。算法的這種特性,使得計算不僅可以由人,而且可以由計算機來完成。用計算機解决問題的過程可以分成三個階段:分析問題、設計算法和實現算法。
中國古代的籌算口决與珠算口决及其執行規則就是算法的雛形,這裏,所解决的問題類是算術運算。古希臘數學家歐幾裏得在公元前3世紀就提出了一個算法,來尋求兩個正整數的最大公約數,這就是有名的歐幾裏得算法,亦稱輾轉相除法。中國早已有“算術”、“算法”等詞彙,但是它們的含義是指當時的全部數學知識和計算技能,與現代算法的含義不盡相同。英文algorithm(算法)一詞也經歷了一個演變過程,最初的拼法為algorism或algoritmi,原意為用阿拉伯數字進行計算的過程。這個詞源於公元 9世紀波斯數字傢阿爾·花拉子米的名字的最後一部分。
在古代,計算通常是指數值計算。現代計算已經遠遠地突破了數值計算的範圍,包括大量的非數值計算,例如檢索、表格處理、判斷、决策、形式邏輯演繹等。
在20世紀以前,人們普遍地認為,所有的問題類都是有算法的。20世紀初,數字傢們發現有的問題類是不存在算法的,遂開始進行能行性研究。在這一研究中,現代算法的概念逐步明確起來。30年代,數字傢們提出了遞歸函數、圖靈機等計算模型,並提出了丘奇-圖靈論題(見可計算性理論),這纔有可能把算法概念形式化。按照丘奇-圖靈論題,任意一個算法都可以用一個圖靈機來實現,反之,任意一個圖靈機都表示一個算法。
按照上述理解,算法是由有限多個步驟組成的,它有下述兩個基本特徵:每個步驟都明確地規定要執行何種操作;每個步驟都可以被人或機器在有限的時間內完成。人們對於算法還有另一種不同的理解,它要求算法除了上述兩個基本特徵外,還要具有第三個基本特徵:雖然有些步驟可能被反復執行多次,但是在執行有限多次之後,就一定能夠得到問題的解答。也就是說,一個處處停機(即對任意輸入都停機)的圖靈機纔表示一個算法,而每個算法都可以被一個處處停機的圖靈機來實現。
(唐守文)
|
|
- n.: algorithm, arithmetic, basis, set of rules or procedures that must be followed in solving a problem
|
|
公式 計算程序 |
|
加權圖 | 最短路徑 | Floyd | 計算機 | 網絡 | 加密 | IT | 物理 | 編程 | 學科 | 單源最短路徑 | 百科大全 | 電子商務 | 網絡安全 | 安全郵件 | 加密軟件 | Rsa公匙 | 遊戲 | 傅立葉 | 頻譜 | 數學變換 | 技術 | 互聯網 | 更多結果... |
|
|
|
|
五經算術 | 九章算術 | 孫子算經 | 海島算經 | 緝古算經 | 周髀算經 | 九章算經 | |
|