一、 演算法的定義
演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作。
二、 演算法的特性
輸入輸出:演算法就有零個或多個輸入,演算法至少要有乙個或多個輸出
有窮性:在演算法執行有限的步驟後,自動結束而不是出現無限迴圈,並且每乙個步驟在可接受範圍內完成。
確定性:演算法的每一步都有確定的含義,不會出現二義性。
可行性:演算法的每一步都必須是可行的,也就是說每一步都能執行有限的次數完成。
三、 演算法設計的要求
正確性:演算法的正確性是指演算法至少應該具有中輸入、輸出、加工處理無歧義性,能正確反應問題的需求,得到問題的正確答案
健壯性:當輸入資料不合法時,演算法能夠做出相應的處理,而不是產生異常或莫名其妙的結果。
時間效率高儲存量低:設計演算法應該滿足時間效率高和儲存量低的要求。
四、 演算法的效率度量方法
事後統計法
通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低。
缺陷:①必須要編制好**後才能測試,不太靠譜。
②依賴計算機硬體和軟體等因素,不同計算機在運算速度上可能不同。
③演算法的測試資料設計困難。例如,乙個優秀的演算法在乙個小的測試資料上得不到明顯的體現,但在大的資料測試下相比於不好的演算法就顯而易見。
事前分析估計法
在計算機編制前,依據統計方法對演算法進行估算。
經過分析,拋開這些與計算機硬體軟體相關的因素,乙個程式的執行時間,依賴於演算法的好壞和問題的輸入規模。所謂問題的輸入規模就是指輸入量的多少。
//**一、
int i,sum=
0,n=
100;
//執行1次
for(i=
1;i<=n;i++
)//執行n+1次要有一次用來判斷迴圈是否結束。
printf
("%d"
,sum)
;//執行1次
// **二
int sum=
0,n=
100;
//執行1次
sum=(1
+n)*n/2;
//執行1次
printf
("%d"
,sum)
;//執行1次
顯然,第一種演算法執行了2n+3次,第二種演算法執行了3次,演算法的好壞顯而易見。 高斯演算法 Java實現及效率對比
高斯演算法 計算1 2 3 n 時,通過收尾相加,然後乘以最大數 2的方式來實現 高斯演算法 public class gaussalgorithm long end1 system.currenttimemillis system.out.println normal sum sum case t...
演算法效率比較
題目 針對陣列a和陣列b,兩個陣列的元素內容相同,不過陣列a是已經排序的,陣列b是亂序的,針對陣列的中位數,存在以下兩組程式,比較其效率並分析原因。int g int main for int i 0 i n i 背景知識 當包含流水線技術的處理器處理分支指令時就會遇到乙個問題,根據判定條件的真 假...
演算法的效率
首先要說明一下,我們知道大o表示法把演算法的效率分為四個級別 o 1 o logn o n o n 2 分別對應優,良,中,差。接下來我對三種排序演算法做了測試 執行環境 jdk6.0,windows xp命令提示符下執行,amd 速龍3800 2.0ghz,記憶體512mb ddrii 667兩條...