【資料結構和演算法】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
★轉載請註明出處