演算法有好壞嗎
Ⅰ 評價演算法優劣的指標包括演算法的什麼
1、時間復雜度
演算法的時間復雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做。
2、空間復雜度
演算法的空間復雜度是指演算法需要消耗的內存空間。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
3、正確性
演算法的正確性是評價一個演算法優劣的最重要的標准。
4、可讀性
演算法的可讀性是指一個演算法可供人們閱讀的容易程度。
5、健壯性
健壯性是指一個演算法對不合理數據輸入的反應能力和處理能力,也稱為容錯性。
Ⅱ 如何判斷演算法優劣
演算法的好壞是看它的運行效率比如遞歸一般來說是比較耗時間的,也就是說效率低當然也看具體情況,有的演算法在基數小的情況是差不多,性能反而還好點
Ⅲ 如何評價一個演算法的好壞
首先,這個演算法必須是正確的
其次,好的演算法應該是友好的,便於人們理解和交流,並且是機器可執行的。
這個演算法還需要足夠健壯,即當輸入的數據非法或不合理時,也能適當的做出正確的反應或進行相應的處理
最後它還必須擁有高效率和低存儲量要求。
也就是所謂的時間復雜度和空間復雜度
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!)稱為指數時間。
Ⅳ 請教:數據結構,如何測試演算法的好壞
一般演算法的好壞標准有以下:
1、准確性,首先必須保證演算法得出的結果准確,這里的准確性並不是代表一定要得到某個值。例如在進化演算法中,得出的非支配解集就存在一定的隨機性,可以通過建立數學方法去討論解的好壞。
2、時間復雜度和空間復雜度,現在對於空間復雜度討論較少,都是時間復雜度的討論。
3、演算法的健壯性,有的演算法是為了某一個具體的實例而建立的,但是有的演算法就有通用性。
Ⅳ 如何比較兩個演算法的好壞,有什麼指標
演算法是一個良定義的計算過程,以一個或多個值輸入,並以一個或多個值輸出。
評價演算法的好壞的因素:·演算法是正確的;
·執行演算法的時間;
·執行演算法的存儲空間(主要是輔助存儲空間);
·演算法易於理解、編碼、調試。
**************************************************************************************************************
時間復雜度:是某個演算法的時間耗費,它是該演算法所求解問題規模n的函數。
漸近時間復雜度:是指當問題規模趨向無窮大時,該演算法時間復雜度的數量級。
評價一個演算法的時間性能時,主要標准就是演算法的漸近時間復雜度。
演算法中語句的頻度不僅與問題規模有關,還與輸入實例中各元素的取值相關。
時間復雜度按數量級遞增排列依次為:常數階O(1)、對數階O(log2n)、線性階O(n)、線性對數階O(nlog2n)、平方階O(n^2)、立方階O(n^3)、……k次方階O(n^k)、指數階O(2^n)。
空間復雜度:是某個演算法的空間耗費,它是該演算法所求解問題規模n的函數。
演算法的時間復雜度和空間復雜度合稱演算法復雜度。
Ⅵ 演算法的優劣與所用計算機無關對嗎
對的,演算法對於一個軟體優劣而言是非常重要的,而與計算機本身無關,但有一點,注意適用平台
Ⅶ 如何判斷一個演算法的好壞
用時間復雜度和空間復雜度兩個概念來衡量,時間復雜度大體估計程序運行的速度,空間復雜度大體估計程序所用的內存,但只是一個估計的方法,無法做到准確。
演算法,是求解問題類的,機械的,統一的方法,常用於計算數據處理和自動推理,可以理解為有基本運算及規定的運算順序所構成的完整的解題步驟或者看成按照要求設計好的有限的確切的計算序列,並且這樣的步驟和序列可以解決一類問題。
Ⅷ 怎麼判斷比較各種演算法的好壞
首先,這個演算法必須是正確的
其次,好的演算法應該是友好的,便於人們理解和交流,並且是機器可執行的。
這個演算法還需要足夠健壯,即當輸入的數據非法或不合理時,也能適當的做出正確的反應或進行相應的處理
最後它還必須擁有高效率和低存儲量要求。
也就是樓上幾位說的時間復雜度和空間復雜度
占的地方越小,算得越快的演算法才是好演算法。
Ⅸ 評價演算法優劣的標準是
同一問題可用不同演算法解決,而一個演算法的質量優劣將影響到演算法乃至程序的效率。演算法分析的目的在於選擇合適演算法和改進演算法。一個演算法的評價主要從時間復雜度和空間復雜度來考慮。
時間復雜度
演算法的時間復雜度是指執行演算法所需要的計算工作量。一般來說,計算機演算法是問題規模n 的函數f(n),演算法的時間復雜度也因此記做。
T(n)=Ο(f(n))
因此,問題的規模n 越大,演算法執行的時間的增長率與f(n) 的增長率正相關,稱作漸進時間復雜度
空間復雜度
演算法的空間復雜度是指演算法需要消耗的內存空間。其計算和表示方法與時間復雜度類似,一般都用復雜度的漸近性來表示。同時間復雜度相比,空間復雜度的分析要簡單得多。
正確性
演算法的正確性是評價一個演算法優劣的最重要的標准。
可讀性
演算法的可讀性是指一個演算法可供人們閱讀的容易程度。
健壯性
健壯性是指一個演算法對不合理數據輸入的反應能力和處理能力,也稱為容錯性。
(9)演算法有好壞嗎擴展閱讀
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法,厄米變形模型,隨機森林演算法。
演算法可以宏泛的分為三類:
一,有限的,確定性演算法 這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。
二,有限的,非確定演算法 這類演算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。
三,無限的演算法 是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的數據滿足而不終止運行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。
參考資料:演算法--網路
Ⅹ 衡量演算法好壞的標准
1:時間復雜度:
可以簡單的說就是:大概程序要被執行的次數,而非時間。注意:是次數,不是時間,因為不同機器的性能是不一樣的,不要用計時器在那裡計時誰的更快。當然,如果在同一台電腦上運行計時另說。
Question:怎樣看待一個程序執行的速度是快還是慢?
Answer:要看他里邊最關鍵的運行次數最多的那一個步驟到底執行了幾次,用這個來衡量演算法的時間復雜度
2:空間復雜度:
同樣簡單來說就是:演算法執行過程中大概所佔用的最大的內存。
3:難易程度:
所研究的演算法盡可能讓大家能看懂。
4:健壯性:
簡單來說哦,不要一碰就完不結實
5:正確性:
一定要正確,感覺這一特性說不說都是可以,不正確也不能用,這一切的前提都是以正確為前提的。