什麼演算法
1. 演算法是什麼
演算法(Algorithm)是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。
一個演算法應該具有以下五個重要的特徵:
1、有窮性:
一個演算法必須保證執行有限步之後結束;
2、確切性:
演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性:
演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。
一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
時間復雜度
演算法的時間復雜度是指演算法需要消耗的時間資源。一般來說,計算機演算法是問題規模n
的函數f(n),演算法的時間復雜度也因此記做
T(n)=Ο(f(n))
因此,問題的規模n
越大,演算法執行的時間的增長率與f(n)
的增長率正相關,稱作漸進時間復雜度(Asymptotic
Time
Complexity)。
空間復雜度
演算法的空間復雜度是指演算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
2. 什麼是演算法
演算法是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令。
演算法代表著用系統的方法描述解決問題的策略機制,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間,空間或御桐效率來完成同樣的任務。
演算法中的指令描述的是一個計算。當其運行時能從一個初始狀態和初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態,一個狀態到另一個狀態的轉移不一定是確定的。
演算法思想:
1、遞推法
遞推是序列計算機中的一種常用演算法,它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定項的值。其思想是把一個復雜的龐大的計算過程轉化為簡單過畢拆侍程的多次重復,該演算法利用了計算機速度快和不知疲倦的機器特點。
2、遞歸法
程序調用自身的編程技巧稱為遞歸,一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法。它通常把一個手吵大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算。
3. 在計算機中,演算法是指什麼
演算法(Algorithm)是對問題求解方法的精確描述
,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用
空間復雜度
與
時間復雜度
來衡量。
演算法可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟。或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
一個演算法應該具有以下五個重要的特徵:
1、
有窮性
:
一個演算法必須保證執行有限步之後結束;
2、
明確性
:
演算法的每一步驟必須意義明確;
3、
輸入
:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、
輸出
:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、
可執行性
:
所採用的演算法必須能夠在計算機上執行。
計算機科學家尼克勞斯-沃思曾著過一本著名的書《數據結構十演算法=
程序》,可見演算法在計算機科學界與計算機應用界的地位。
4. 什麼是演算法
演算法應該具有以下五個重要的特徵:
1,有窮性:演算法的有窮性是指演算法必須能在執行有限個步驟之後終止;
2,確切性:演算法的每一步驟必須有確切的定義;
3,輸入項:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定出了初始條件;
4,輸出項:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5,可行性:演算法中執行的任何計算步驟都是可以被分解為基本的可執行的操作步,即每個計算步都可以在有限時間內完成(也稱之為有效性)。
(4)什麼演算法擴展閱讀:
對於一個給定的問題,往往可能有好幾種量度標准。初看起來,這些量度標准似乎都是可取的,但實際上,用其中的大多數簡頌量度標准作貪婪處理所得到該量度意義下的最優解並不是問題的最優解,而是次優解。因此,選擇能產生問題最優解的最優量度標準是使用貪婪演算法的核心。
一般情況下,要選出最優量度標准並不是一件容易的事,但對某問題能選擇出最優量度標准後,用貪婪演算法求解則特別粗棗有效。
若用回溯法求問題的所有解時,要回溯到根,且根結點的所有可行的子樹都要已被搜索遍才結束。 而若使用回溯法求任一個解時,只要岩咐拆搜索到問題的一個解就可以結束。
5. 什麼是演算法
演算法的常用表示方法有三種:
1、使用自然語言描述演算法;
2、使用流程鏈派圖描述演算法;
3、使用偽代碼描述演算法。
演算法是指對解決方案的准確、完整的描述,是解決問題的一系列清晰的指令。該演算法代表了描述解決問題的策略和機制的系統方式。也就是說,對於某個標准輸入,可以在有限的時間內獲得所需的輸出。
如果一個演算法有缺陷或不適合某個問題,執行該演算法將無法解決該問題。不同的演算法可能使用棚做賀不同的時間、空間或效率來完成相同的胡跡任務。一個演算法的優劣可以用空間復雜度和時間復雜度來衡量。
6. 什麼是演算法
一、什麼是演算法
演算法是一系列解決問題的清晰指令,也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。演算法常常含有重復的步驟和一些比較或邏輯判斷。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法的時間復雜度是指演算法需要消耗的時間資源。一般來說,計算機演算法是問題規模n 的函數f(n),演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。時間復雜度用「O(數量級)」來表示,稱為「階」。常見的時間復雜度有: O(1)常數階;O(log2n)對數階;O(n)線性階;O(n2)平方階。
演算法的空間復雜度是指演算法需要消耗的空間資源。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
[font class="Apple-style-span" style="font-weight: bold;" id="bks_etfhxykd"]演算法 Algorithm [/font]
演算法是在有限步驟內求解某一問題所使用的一組定義明確的規則。通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種演算法。前者是推理實現的演算法,後者是操作實現的演算法。
一個演算法應該具有以下五個重要的特徵:
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[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest
符號說明:
= 用於表示賦值。即:右邊的值被賦予給左邊的變數。
List[counter] 用於表示數列中的第 counter 項。例如:如果 counter 的值是5,那麼 List[counter] 表示數列中的第5項。
<= 用於表示「小於或等於」。
7. 什麼是演算法演算法有哪些分類
分類演算法是在數學和計算機科學之中,演算法為一個計算的具體步驟,常用於計算、數據處理和自動推理。
精確而言,演算法是一個表示為有限長列表的有效方法。演算法應包含清晰定義的指令用於計算函數,演算法分類可以根據演算法設計原理、演算法的具體應用和其他一些特性進行分類。
具體意義:
如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。
演算法中的指令描述的是一個計算,當其運行時能從一個初始狀態和(可能為空的)初始輸入開始,經過一系列有限而清晰定義的狀態,最終產生輸出並停止於一個終態。一個狀態到另一個狀態的轉移不一定是確定的。隨機化演算法在內的一些演算法,包含了一些隨機輸入。
8. 什麼叫演算法演算法有哪幾種表示方法
演算法(Algorithm)是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。計算機科學家往往將「演算法」一詞的含義限定為此類「符號演算法」。「演算法」概念的初步定義:一個演算法是解決一個問題的進程。而並不需要每次都發明一個解決方案。
已知的演算法有很多,例如「分治法」、「枚舉測試法」、「貪心演算法」、「隨機演算法」等。
(8)什麼演算法擴展閱讀
演算法中的「分治法」
「分治法」是把一個復雜的問題拆分成兩個較為簡單的子問題,進而兩個子問題又可以分別拆分成另外兩個更簡單的子問題,以此類推。問題不斷被層層拆解。然後,子問題的解被逐層整合,構成了原問題的解。
高德納曾用過一個郵局分發信件的例子對「分治法」進行了解釋:信件根據不同城市區域被分進不同的袋子里;每個郵遞員負責投遞一個區域的信件,對應每棟樓,將自己負責的信件分裝進更小的袋子;每個大樓管理員再將小袋子里的信件分發給對應的公寓。
9. 什麼是演算法
通俗點說,就是計算機解題的過程。在這個過程中,無論是形成解題思路還是編寫程序,都是在實施某種演算法。前者是推理實現的演算法,後者是操作實現的演算法。一個演算法應該具有以下五個重要的特徵: 有窮性: 一個演算法必須保證執行有限步之後結束; 確切性: 演算法的每一步驟必須有確切的定義; 輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件; 輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的; 可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成。 Did you knowAlgorithm 一詞的由來Algorithm(演算法)一詞本身就十分有趣。初看起來,這個詞好像是某人打算要寫「Logarithm」(對數)一詞但卻把頭四個字母寫的前後顛倒了。這個詞一直到1957年之前在Webster's New World Dictionary(《韋氏新世界詞典》)中還未出現,我們只能找到帶有它的古代涵義的較老形式的「Algorism」(算術),指的是用阿拉伯數字進行算術運算的過程。在中世紀時,珠算家用算盤進行計算,而算術家用算術進行計算。中世紀之後,對這個詞的起源已經拿不準了,早期的語言學家試圖推斷它的來歷,認為它是從把algiros(費力的)+arithmos(數字)組合起來派生而成的,但另一些人則不同意這種說法,認為這個詞是從「喀斯迪爾國王Algor」派生而來的。最後,數學史學家發現了algorism(算術)一詞的真實起源:它來源於著名的Persian Textbook(《波斯教科書》)的作者的名字Abu Ja'far Mohammed ibn M�0�4s�0�9 al-Khow�0�9rizm (約公元前825年)——從字面上看,這個名字的意思是「Ja'far 的父親,Mohammed 和M�0�4s�0�9 的兒子,Khow�0�9rizm 的本地人」。Khow�0�9rizm 是前蘇聯XИBA(基發) 的小城鎮 。Al-Khow�0�9rizm 寫了著名的書Kitab al jabr w'al-muqabala (《復原和化簡的規則》);另一個詞,「algebra」(代數),是從他的書的標題引出來的,盡管這本書實際上根本不是講代數的。逐漸地,「algorism」的形式和意義就變得面目全非了。如牛津英語字典所說明的,這個詞是由於同arithmetic(算術)相混淆而形成的錯拼詞。由algorism又變成algorithm。一本早期的德文數學詞典 Vollstandiges Mathematisches Lexicon (《數學大全辭典》) ,給出了Algorithmus (演算法)一詞的如下定義:「在這個名稱之下,組合了四種類型的算術計算的概念,即加法、乘法、減法、除法」。拉頂短語algorithmus infinitesimalis (無限小方法) ,在當時就用來表示Leibnitz(萊布尼茲)所發明的以無限小量進行計算的微積分方法。1950年左右,algorithm一詞經常地同歐幾里德演算法(Euclid's algorithm)聯系在一起。這個演算法就是在歐幾里德的《幾何原本》(Euclid's Elements ,第VII卷,命題i和ii)中所闡述的求兩個數的最大公約數的過程(即輾轉相除法)。