演算法及演算法效率

2021-10-14 08:02:38 字數 1231 閱讀 4418

一、 演算法的定義

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

二、 演算法的特性

輸入輸出:演算法就有零個或多個輸入,演算法至少要有乙個或多個輸出

有窮性:在演算法執行有限的步驟後,自動結束而不是出現無限迴圈,並且每乙個步驟在可接受範圍內完成。

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

可行性:演算法的每一步都必須是可行的,也就是說每一步都能執行有限的次數完成。

三、 演算法設計的要求

正確性:演算法的正確性是指演算法至少應該具有中輸入、輸出、加工處理無歧義性,能正確反應問題的需求,得到問題的正確答案

健壯性:當輸入資料不合法時,演算法能夠做出相應的處理,而不是產生異常或莫名其妙的結果。

時間效率高儲存量低:設計演算法應該滿足時間效率高和儲存量低的要求。

四、 演算法的效率度量方法

事後統計法

通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率的高低。

缺陷:①必須要編制好**後才能測試,不太靠譜。

②依賴計算機硬體和軟體等因素,不同計算機在運算速度上可能不同。

③演算法的測試資料設計困難。例如,乙個優秀的演算法在乙個小的測試資料上得不到明顯的體現,但在大的資料測試下相比於不好的演算法就顯而易見。

事前分析估計法

在計算機編制前,依據統計方法對演算法進行估算。

經過分析,拋開這些與計算機硬體軟體相關的因素,乙個程式的執行時間,依賴於演算法的好壞和問題的輸入規模。所謂問題的輸入規模就是指輸入量的多少。

//**一、

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兩條...