關於演算法
『壹』 演算法的概念
演算法(Algorithm)是解題的步驟,可以把演算法定義成解一確定類問題的任意一種特殊的方法。在計算機科學中,演算法要用計算機演算法語言描述,演算法代表用計算機解一類問題的精確、有效的方法。演算法+數據結構=程序,求解一個給定的可計算或可解的問題,不同的人可以編寫出不同的程序,來解決同一個問題,這里存在兩個問題:一是與計算方法密切相關的演算法問題;二是程序設計的技術問題。演算法和程序之間存在密切的關系。
演算法是一組有窮的規則,它們規定了解決某一特定類型問題的一系列運算,是對解題方案的准確與完整的描述。制定一個演算法,一般要經過設計、確認、分析、編碼、測試、調試、計時等階段。
對演算法的學習包括五個方面的內容:① 設計演算法。演算法設計工作是不可能完全自動化的,應學習了解已經被實踐證明是有用的一些基本的演算法設計方法,這些基本的設計方法不僅適用於計算機科學,而且適用於電氣工程、運籌學等領域;② 表示演算法。描述演算法的方法有多種形式,例如自然語言和演算法語言,各自有適用的環境和特點;③確認演算法。演算法確認的目的是使人們確信這一演算法能夠正確無誤地工作,即該演算法具有可計算性。正確的演算法用計算機演算法語言描述,構成計算機程序,計算機程序在計算機上運行,得到演算法運算的結果;④ 分析演算法。演算法分析是對一個演算法需要多少計算時間和存儲空間作定量的分析。分析演算法可以預測這一演算法適合在什麼樣的環境中有效地運行,對解決同一問題的不同演算法的有效性作出比較;⑤ 驗證演算法。用計算機語言描述的演算法是否可計算、有效合理,須對程序進行測試,測試程序的工作由調試和作時空分布圖組成。
『貳』 什麼是演算法,都什麼,舉個例子,謝謝
根據我個人的理解:
演算法就是解決問題的具體的方法和步驟,所以具有以下性質:
1、有窮性: 一個演算法必須保證執行有限步之後結束(如果步驟無限,問題就無法解決)
2、確切性:步驟必須明確,說清楚做什麼。
3、輸入:即解決問題前我們所掌握的條件。
4、輸出:輸出即我們需要得到的答案。
5、可行性:邏輯不能錯誤,步驟必須有限,必須得到結果。
演算法通俗的講:就是解決問題的方法和步驟。在計算機發明之前便已經存在。只不過在計算機發明後,其應用變得更為廣泛。通過簡單的演算法,利用電腦的計算速度,可以讓問題變得簡單。
譬如:計算 1×2×3×4。。。。×999999999×1000000000
如果人為計算,可想而知,即使你用N卡車的紙張都很難計算出來,即使算出來了,也很難保證其准確性。
如果用VB演算法:
dim a as integer
a=1
For i =1 to 1000000000
a=a*i
next i
input a
就這樣,簡單的演算法,通過計算機強大的計算能力,問題就解決了。
關於這段演算法的解釋:i每乘一次,其數值都會增大1,一直乘到1000000000,這樣,就將從1到1000000000的每個數都乘了。而且每乘一次,就將結束賦給a,這樣,a就代表了前面的相乘的所有結果,一直乘到1000000000。最後得到的a,就是我們想要的。
〓以下是網路復制過來的,如果你有足夠耐心,可以參考一下。
演算法(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) 以及《演算法導論》(Introction To Algorithms)。
[編輯本段]演算法的歷史
「演算法」即演演算法的大陸中文名稱出自《周髀算經》;而英文名稱Algorithm 來自於9世紀波斯數學家al-Khwarizmi,因為al-Khwarizmi在數學上提出了演算法這個概念。「演算法」原為"algorism",意思是阿拉伯數字的運演算法則,在18世紀演變為"algorithm"。歐幾里得演算法被人們認為是史上第一個演算法。 第一次編寫程序是Ada Byron於1842年為巴貝奇分析機編寫求解解伯努利方程的程序,因此Ada Byron被大多數人認為是世界上第一位程序員。因為查爾斯·巴貝奇(Charles Babbage)未能完成他的巴貝奇分析機,這個演算法未能在巴貝奇分析機上執行。 因為"well-defined procere"缺少數學上精確的定義,19世紀和20世紀早期的數學家、邏輯學家在定義演算法上出現了困難。20世紀的英國數學家圖靈提出了著名的圖靈論題,並提出一種假想的計算機的抽象模型,這個模型被稱為圖靈機。圖靈機的出現解決了演算法定義的難題,圖靈的思想對演算法的發展起到了重要作用的。
『叄』 演算法的性質有哪些
演算法的一般性質包括:
(1) 通用性 對於那些符合輸入類型的任意輸入數據,都能根據演算法進行問題求解,包保證計算結構的正確性。
(2) 有效性 組成演算法的每一條指令都必須是能夠被人或機器確切執行的。
(3) 確定性 演算法每執行一步之後,對於它的下一步,應該有明確的指示。即,保證每一步之後都有關於下一步動作的指令,不能缺乏下一步指令或僅僅含有模糊不清的指令。
(4) 有窮性 演算法的執行必須在有限步內結束。
『肆』 關於演算法
由於之前搞過2年的ACM競賽,就給你講講我的個人經驗吧。
首先學習演算法,最好要對演算法感興趣,我之前就是因為學了演算法然後去參加競賽,從做題中獲得成就感,所以越學越有興趣。
剛開始學的話,可以先看些中文教材,最好先把數據結構學好,清華出版社的《數據結構》就可以了。演算法的書可以看王曉東的《演算法設計與分析》,吳文虎的教材也不錯。
之後可以看些英文的經典教材,比如《演算法導論》,如果覺得數學功底不夠,書的後面有數學知識的補充。
演算法的學習比較枯燥,要靠一些有意思的題目來輔助,《編程之美》這本書裡面有很多有意思的面試題,都是演算法相關的,推薦看一下。
其實最好還是參加些競賽,比如ACM,平時也可以到一些在線答題系統去做題,比如poj.org。經常跟牛人討論些題目,進步會很快的。
歡迎來玩演算法~
『伍』 什麼是演算法 演算法有哪些特徵,對於演算法是怎樣評價的
1、演算法概念:\x0d在數學上,現代意義上的「演算法」通常是指可以用計算機來解決的某一類問題是程序或步驟,這些程序或步驟必須是明確和有效的,而且能夠在有限步之內完成.\x0d2.演算法的特點:\x0d(1)有限性:一個演算法的步驟序列是有限的,必須在有限操作之後停止,不能是無限的.\x0d(2)確定性:演算法中的每一步應該是確定的並且能有效地執行且得到確定的結果,而不應當是模稜兩可.\x0d(3)順序性與正確性:演算法從初始步驟開始,分為若干明確的步驟,每一個步驟只能有一個確定的後繼步驟,前一步是後一步的前提,只有執行完前一步才能進行下一步,並且每一步都准確無誤,才能完成問題.\x0d(4)不唯一性:求解某一個問題的解法不一定是唯一的,對於一個問題可以有不同的演算法.\x0d(5)普遍性:很多具體的問題,都可以設計合理的演算法去解決,如心算、計算器計算都要經過有限、事先設計好的步驟加以解決.
『陸』 演算法的主要特徵
演算法是一個有窮規則的集合,這些規則確定了解決某類問題的一個運算序列。對於該類問題的任何初始輸入值,它都能機械地一步一步地執行計算,經過有限步驟後終止計算並產生輸出結果。歸納起來,演算法具有以下基本特徵:
(1) 有窮性:一個演算法必須在執行有限個操作步驟後終止;
(2) 確定性:演算法中每一步的含義必須是確切的,不可出現任何二義性;
(3) 有效性:演算法中的每一步操作都應該能有效執行,一個不可執行的操作是無效的。例如,一個數被0除的操作就是無效的,應當避免這種操作。
(4) 有零個或多個輸入:這里的輸入是指在演算法開始之前所需要的初始數據。這些輸入的多少取決於特定的問題。例如,例l-1的演算法中有2個輸入,即需要輸入a和b兩個初始數據,而例l-2的演算法中則需要輸入四個初始數據。有些特殊演算法也可以沒有輸入。
(5) 有一個或多個輸出:所謂輸出是指與輸入有某種特定關系的量,在一個完整的演算法中至少會有一個輸出。如上述關於演算法的三個例子中,每個都有輸出。試想,如果例1-3中沒有 "輸出n的當前值"這一步,這個演算法將毫無意義。
『柒』 談談你對演算法的理解
演算法可以幫助我們解決生活中很多很多的小問題,可以說演算法在我們平時生活中都存在。