1. 程式人生 > >【資料結構和演算法】2談談演算法

【資料結構和演算法】2談談演算法

演算法初體驗

高斯演算法"1+2+3+...+100"

普通的解決方法

int i, sum = 0, n = 100;
for(i=1; i <= n; i++)
{
sum = sum + i;
}
printf(“%d”, sum);

利用高斯的演算法

int i, sum = 0, n = 100;
sum = (1+n)*n/2;
printf(“%d”, sum);

對比一下,可以看出,好的演算法,可以省時又省力;

演算法概念:解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示一個或多個操作;

另解:演算法就是你泡妞兒的技巧和方式(皮一下,很開心O(∩_∩)O~~)

可以看出:對於給定的問題,是可以有多種演算法來解決的。

就像沒有藥可以包治百病一樣,一個問題可以由多個演算法解決,一個演算法不可能具有通解所有問題的能力;


演算法的特性

演算法有五大基本特性:輸入、輸出、有窮性、確定性、可行性

輸入:演算法有零個或者多個輸入。比如列印一句話的程式,只有輸出,就沒有輸入;

輸出:演算法至少有一個或者多個輸出,

演算法必須要有輸出,輸出的形式沒有限制,可以是列印的動作,也可以返回一個或多個值;

有窮性:演算法在執行有限的步驟之後,自動結束而不會出現無限迴圈,並且每一個步驟在可接受的時間內完成;

確定性:演算法的每一步驟,都具有確定的含義,不會出現二義性,

演算法在一定的條件下,只有一條執行路徑,相同的輸入只能有唯一的輸出結果,

演算法的每一個步驟都應該被精確定義,而無歧義;

可行性:演算法的每一步,都必須是可行的。也就是說,每一步經過有限次的運算,都可以完成;


演算法設計的要求

儘管演算法不唯一,但我們也需要學習一些好的演算法,對我們解決自己的問題,會有很大的幫助;

正確性:

大致可以分為一下四個層次

演算法設計不能有語法錯誤;

對合法的輸入能產生滿足要求的輸出;

非法的輸入應有滿足規格的說明,提示使用者錯誤資訊;

對故意刁難的測試應有滿足要求的輸出結果;

可讀性:

應便於閱讀,理解,交流;

寫程式碼的目的就是為了便於他人和自己日後閱讀修改;

健壯性:

當用戶輸入的資料不合法時,演算法也能做相關處理,而不是產生異常、崩潰、或莫名其妙的結果;

時間效率高,儲存量低:

一高一低,演算法贏儘量往這方面靠攏;


finished  2018.11.2 10:47  by songpl

★轉載請註明出處