當前位置:首頁 » 操作系統 » 衡量一個演算法的好壞

衡量一個演算法的好壞

發布時間: 2022-11-14 13:34:43

A. 如何評價一個演算法的好壞

首先,這個演算法必須是正確的
其次,好的演算法應該是友好的,便於人們理解和交流,並且是機器可執行的。
這個演算法還需要足夠健壯,即當輸入的數據非法或不合理時,也能適當的做出正確的反應或進行相應的處理
最後它還必須擁有高效率和低存儲量要求。
也就是所謂的時間復雜度和空間復雜度

1.時間復雜度

定義:在計算機科學中,演算法的時間復雜度是一個函數,他定量描述了該演算法的運行時間.一個演算法執行所耗費的時間,從理論上講,只有你把你的程序放機器上跑起來,才能知道.然而我們有一套時間復雜度的分析方式.一個演算法所花費的時間與其中語句的執行次數成正比例.演算法中的基本操作的執行次數,為演算法的時間復雜度.

2.時間復雜度為什麼不使用時間來衡量而使用基本語句的運行次數來衡量?

演算法的執行時間依賴於具體的軟硬體環境,所以,不能用執行時間的長短來衡量演算法的時間復雜度,而要通過基本語句執行次數的數量級來衡量。

3.時間復雜度的O漸進表示法(Big O notation)

是用於描述函數漸進行為的數學符號.

大O階方法推導:
計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函數中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的系數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
如果演算法中包含嵌套的循環,則基本語句通常是最內層的循環體,如果演算法中包含並列的循環,則將並列循環的時間復雜度相加。例如:

for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;

第一個for循環的時間復雜度為Ο(n),第二個for循環的時間復雜度為Ο(n2),則整個演算法的時間復雜度為Ο(n+n2)=Ο(n2)。

4.時間復雜度的:最優、平均、最差情況,為什麼時間復雜度看的是最差情況?

最差情況下的復雜度是所有可能的輸入數據所消耗的最大資源,如果最差情況下的復雜度符合我們的要求,我們就可以保證所有的情況下都不會有問題。

某些演算法經常遇到最差情況。比如一個查找演算法,經常需要查找一個不存在的值。
也許你覺得平均情況下的復雜度更吸引你,可是平均情況也有幾點問題。第一,難計算,多數演算法的最差情況下的復雜度要比平均情況下的容易計算的多,第二,有很多演算法的平均情況和最差情況的復雜度是一樣的. 第三,什麼才是真正的平均情況?如果你假設所有可能的輸入數據出現的概率是一樣的話,也是不合理的。其實多數情況是不一樣的。而且輸入數據的分布函數很可能是你沒法知道。
考慮最好情況的復雜度更是沒有意義。

5.如何求解:二分查找、遞歸求階乘、遞歸斐波那契的時間復雜度?

二分查找:通過折紙查找求解時間復雜度為O(logN);
遞歸求階乘:數基本操作遞歸N次得到時間復雜度為O(N);
遞歸斐波那契:分析得出基本操作遞歸了2N次,時間復雜度為O(2N);

6.什麼是空間復雜度?

空間復雜度是對一個演算法在運行過程中臨時佔用存儲空間大小的度量.空間復雜度不是程序佔用了多少bytes的空間,因為這個也沒太大意義,所以空間復雜度算的是變數的個數.空間復雜度計算規則基本跟時間復雜度類似,也使用大O漸進法表示.

7.如何求空間復雜度? 普通函數&遞歸函數

一個演算法的空間復雜度只考慮在運行過程中為局部變數分配的存儲空間的大小,它包括為參數表中形參變數分配的存儲空間和為在函數體中定義的局部變數分配的存儲空間兩個部分。若一個演算法為 遞歸演算法,其空間復雜度為遞歸所使用的堆棧空間的大小,它等於一次調用所分配的臨時存儲空間的大小乘以被調用的次數(即為遞歸調用的次數加1,這個1表示開始進行的一次非遞歸調用)。演算法的空間復雜度一般也以數量級的形式給出。如當一個演算法的空間復雜度為一個常量,即不隨被處理數據量n的大小而改變時,可表示為O(1);當一個演算法的空間復雜度與以2為底的n的對數成正比時,可表示為O(log2n);當一個演算法的空間復雜度與n成線性比例關系時,可表示為O(n).若形參為數組,則只需要為它分配一個存儲由實參傳送來的一個地址指針的空間,即一個機器字長空間;若形參為引用方式,則也只需要為其分配存儲一個地址的空間,用它來存儲對應實參變數的地址,以便由系統自動引用實參變數。
8. 分析遞歸斐波那契數列的:時間、空間復雜度,並對其進行優化,偽遞歸優化->循環優化

long long Fib(int N) {
if (N < 3)
return 1;
return Fib(N - 1) + Fib(N - 2);
}

普通遞歸實現的斐波那契數列:
時間復雜度:O(2^n)

計算並根據O漸進表示法得出時間復雜度.

空間復雜度:O(N);遞歸深度乘以(每一次遞歸的空間佔用{有輔助空間或常量})

偽遞歸優化:

long long fib (long long first, longlong second, int N) {
if(N <3)
return 1;
if(N == 3)
return first + second;
return fib(second, first+second,N-1);
}

時間復雜度:
O(N);
遞歸深度乘以每次遞歸的循環次數
空間復雜度:
O(1)或O(N)
關鍵看編譯器是否優化,優化則為O(1)否則O(N);

循環優化:

long long Fib(int N) {
long long first = 1;
long long second = 1;
long long ret = 0;
for (int i = 3; i <= N ; ++i) {
ret = first + second;
first = second;
second = ret;
}
return second;
}

時間復雜度:O(N);

空間復雜度:O(1);

9.常見時間復雜度

常見的演算法時間復雜度由小到大依次為: Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!) Ο(1)表示基本語句的執行次數是一個常數,一般來說,只要演算法中不存在循環語句,其時間復雜度就是Ο(1)。Ο(log2n)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)稱為多項式時間,而Ο(2n)和Ο(n!)稱為指數時間。

B. 衡量演算法性能優劣的標准

品牌型號:HUAWEI P50 Pocket
系統:HarmonyOS 3

衡量演算法性能優劣的標準是時間復雜度、空間復雜度、正確性、可讀性、健壯性。

演算法的時間復雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n的函數f(n),演算法的時間復雜度也因此記做。空間復雜度是指演算法需要消耗的內存空間。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。

演算法是指解題方案的准確而完整的描述,是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對一定規范的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間復雜度與時間復雜度來衡量。

C. 一個演算法的評價主要從哪些方面來考慮

一個演算法的評價主要從以下幾個方面來考慮:

1、時間復雜度

演算法的時間復雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做。

T(n)=Ο(f(n))

因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。

2、空間復雜度

演算法的空間復雜度是指演算法需要消耗的內存空間。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。

3、正確性

演算法的正確性是評價一個演算法優劣的最重要的標准。

4、可讀性

演算法的可讀性是指一個演算法可供人們閱讀的容易程度。

5、健壯性

健壯性是指一個演算法對不合理數據輸入的反應能力和處理能力,也稱為容錯性。

(3)衡量一個演算法的好壞擴展閱讀:

演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法,厄米變形模型,隨機森林演算法。

演算法可以宏泛的分為三類:

一、有限的,確定性演算法 這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。

二、有限的,非確定演算法 這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。

三、無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。

D. 演算法的衡量標准有哪些

衡量演算法的三個標準是:時間復雜度、空間復雜度和難易程度。時間復雜度可以簡單的說就是:大概程序要被執行的次數,而非時間。
注意:是次數,不是時間,因為不同機器的性能是不一樣的,不要用計時器在那裡計時誰的更快。當然,如果在同一台電腦上運行計時另說。
空間復雜度:同樣簡單來說就是:演算法執行過程中大概所佔用的最大的內存。

E. 評價演算法的四個標準是什麼

評價演算法的四個標准:

1.正確性

能正確地實現預定的功能,滿足具體問題的需要。處理數據使用的演算法是否得當,能不能得到預想的結果。

2.易讀性

易於閱讀、理解和交流,便於調試、修改和擴充。寫出的演算法,能不能讓別人看明白,能不能讓別人明白演算法的邏輯?如果通俗易懂,在系統調試和修改或者功能擴充的時候,使系統維護更為便捷。

3.健壯性

輸入非法數據,演算法也能適當地做出反應後進行處理,不會產生預料不到的運行結果。數據的形式多種多樣,演算法可能面臨著接受各種各樣的數據,當演算法接收到不適合演算法處理的數據,演算法本身該如何處理呢?如果演算法能夠處理異常數據,處理能力越強,健壯性越好。

4.時空性

演算法的時空性是該演算法的時間性能和空間性能。主要是說演算法在執行過程中的時間長短和空間佔用多少問題。

演算法處理數據過程中,不同的演算法耗費的時間和內存空間是不同的。

(5)衡量一個演算法的好壞擴展閱讀:

演算法是對特定問題求解步驟的一種描述,它是指令的有限序列,其中每一條指令表示一個或多個操作。此外,一個演算法還具有下列5個重要的特性。

(1)、有窮性

一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。

(2)、確定性

演算法中每一條指令必須有明確的含義,讀者理解時不會產生二義性。即對於相同的輸入只能得到相同的輸出。

(3)、可行性

一個演算法是可行的,即演算法中描述的操作都是可以通過已經實現的基本運算執行有限次來實現的。

(4)、輸入

一個演算法有零個或多個的輸入,這些輸入取自於某個特定的對象的集合。

(5)、輸出

一個演算法有一個或多個的輸出,這些輸出是同輸入有著某種特定關系的量。

F. 評價演算法優劣的標準是

①時間復雜度:同樣的輸入規模(問題規模)花費多少時間
②空間復雜度:同樣的輸入規模花費多少空間(主要是內存)
以上兩點越小越好
③穩定性:不會因為輸入的不同而導致不穩定的情況發生
④演算法思路是否簡單:越簡單越容易實現越好

G. 數據結構中評價一個好的演算法,應該從哪幾個方面來考慮

數據結構中評價一個好的演算法,應該從四個個方面來考慮,分別是:

一、演算法的正確性。

二、演算法的易讀性。

三、是演算法的健壯性。

四、是演算法的時空效率(運行)。

演算法的設計取決於數據(邏輯)結構,而演算法的實現依賴於採用的存儲結構。數據的存儲結構實質上是它的邏輯結構在計算機存儲器中的實現,為了全面的反映一個數據的邏輯結構,它在存儲器中的映象包括兩方面內容,即數據元素之間的信息和數據元素之間的關系。

不同數據結構有其相應的若干運算。數據的運算是在數據的邏輯結構上定義的操作演算法,如檢索、插入、刪除、更新和排序等。

(7)衡量一個演算法的好壞擴展閱讀:

分類

1、集合結構。該結構的數據元素間的關系是「屬於同一個集合」。

2、線性結構。該結構的數據元素之間存在著一對一的關系。

3、樹型結構。該結構的數據元素之間存在著一對多的關系。

4、圖形結構。該結構的數據元素之間存在著多對多的關系,也稱網狀結構。

H. 如何判斷一個演算法的好壞

用時間復雜度和空間復雜度兩個概念來衡量,時間復雜度大體估計程序運行的速度,空間復雜度大體估計程序所用的內存,但只是一個估計的方法,無法做到准確。

演算法,是求解問題類的,機械的,統一的方法,常用於計算數據處理和自動推理,可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。

I. 衡量演算法好壞的標准

1:時間復雜度:

可以簡單的說就是:大概程序要被執行的次數,而非時間。注意:是次數,不是時間,因為不同機器的性能是不一樣的,不要用計時器在那裡計時誰的更快。當然,如果在同一台電腦上運行計時另說。
Question:怎樣看待一個程序執行的速度是快還是慢?
Answer:要看他里邊最關鍵的運行次數最多的那一個步驟到底執行了幾次,用這個來衡量演算法的時間復雜度

2:空間復雜度:

同樣簡單來說就是:演算法執行過程中大概所佔用的最大的內存。

3:難易程度:

所研究的演算法盡可能讓大家能看懂。

4:健壯性:

簡單來說哦,不要一碰就完不結實

5:正確性:

一定要正確,感覺這一特性說不說都是可以,不正確也不能用,這一切的前提都是以正確為前提的。

J. 演算法的評價指標有哪些

時間復雜度和空間復雜度。

1、時間復雜度

演算法的時間復雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做。

T(n)=Ο(f(n))

因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度(Asymptotic Time Complexity)。

2、空間復雜度

演算法的空間復雜度是指演算法需要消耗的內存空間。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。

空間復雜度記做S(n)=O(f(n))。比如直接插入排序的時間復雜度是O(n^2),空間復雜度是O(1) 。而一般的遞歸演算法就要有O(n)的空間復雜度了,因為每次遞歸都要存儲返回信息。一個演算法的優劣主要從演算法的執行時間和所需要佔用的存儲空間兩個方面衡量。

(10)衡量一個演算法的好壞擴展閱讀:

演算法的方法:

1、遞推法

遞推是序列計算機中的一種常用演算法。它是按照一定的規律來計算序列中的每個項,通常是通過計算機前面的一些項來得出序列中的指定項的值。其思想是把一個復雜的龐大的計算過程轉化為簡單過程的多次重復,該演算法利用了計算機速度快和不知疲倦的機器特點。

2、遞歸法

程序調用自身的編程技巧稱為遞歸(recursion)。一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。

一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。

注意:

(1) 遞歸就是在過程或函數里調用自身.

(2) 在使用遞歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口。

熱點內容
安卓和csharp哪個發展好 發布:2024-05-18 18:09:30 瀏覽:526
換編程題庫 發布:2024-05-18 18:00:58 瀏覽:562
如何使用伺服器ip直連網站 發布:2024-05-18 18:00:49 瀏覽:432
三星n7100哪個安卓版本好用 發布:2024-05-18 17:55:41 瀏覽:489
萬國覺醒採集腳本源碼 發布:2024-05-18 17:55:39 瀏覽:947
sqlserver加欄位 發布:2024-05-18 17:54:53 瀏覽:928
安卓手機如何清除應用記錄 發布:2024-05-18 17:31:37 瀏覽:639
查看存儲過程許可權 發布:2024-05-18 17:18:33 瀏覽:192
php類self 發布:2024-05-18 17:15:03 瀏覽:895
手機2b2t的伺服器地址是多少 發布:2024-05-18 17:14:56 瀏覽:189