演算法設計的要求
1. 數據結構分析
摘要 數據結構就是研究數據的邏輯結構和物理結構以及它們之間相互關系,並對這種結構定義相應的運算,而且確保經過這些運算後所得到的新結構仍然是原來的結構類型。
2. 演算法的設計原則是什麼
1.窮舉演算法思想
窮舉演算法思想就是從所有的可能結果中一個一個的試驗,知道試出正確的結果。具體的操作步驟如下:
1)對每一種可能的結果,計算其結果;
2)判斷結果是否符合題目要求,如果符合則該結果正確,如果不符合則繼續進行第1)步驟。
窮舉演算法思想的經典例子為雞兔同籠為題(又稱龜鶴同籠問題),題目為「一個籠子里有雞兔,共15個頭、46條腿,問雞兔各有多少只?」。代碼如下:
public static void main(String[] args) {
int head = 0;
int leg = 0;
System.out.println( "輸入雞兔頭數:");
Scanner input=new Scanner(System.in);
head = input.nextInt();
System.out.println( "輸入雞兔腿數:");
Scanner input1=new Scanner(System.in);
leg = input1.nextInt();
boolean existence = false;
for( int i = 0; i <= head; i++){
if( 2 * i + 4 * ( head - i) == leg){
System.out.println( "雞的個數 :" + i);
System.out.println( "兔的個數 :" + ( head - i));
existence = true;
}
}
if( !existence){
System.out.println( "你輸入的數據不正確");
}
}
2.遞推演算法思想
遞推演算法演算法就是根據已知條件,利用特定關系推導出中間推論,直到得到結果的演算法。
遞推演算法思想最經典的例子是斐波那契數列 : 1,1,2,3,5,8,13......
上面的數列符合F(n) = F(n-1) + F(n-2).代碼如下:
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n = input.nextInt();
System.out.println( fibonacci( n));
}
public static int fibonacci( int n){
if( n == 1){
return 1;
}else if( n == 2){
return 1;
}else{
return fibonacci( n - 1) + fibonacci( n - 2);
}
}
3.遞歸演算法思想
遞歸演算法思想是把大問題轉換成同類問題的子問題,然後遞歸調用函數表示問題的解。
在使用遞歸的時候一定要注意調回遞歸函數的終止條件。
遞歸演算法比較經典的例子是求階乘。代碼如下:
public static void main(String[] args) {
System.out.println( "輸入一個大於零的數:");
Scanner input=new Scanner(System.in);
int n = input.nextInt();
System.out.println( factorial( n));
}
public static int factorial( int n){
if( n == 0){
return 1;
}else if( n == 1){
return 1;
}else{
3. 演算法的要素是什麼演算法的特徵是什麼
一、演算法的要素包括:
1、數據對象的操作和操作:計算機可以執行的基本操作以指令的形式描述。
2、演算法的控制結構:演算法的功能結構不僅取決於所選的操作,還取決於操作之間的執行順序。
二、演算法的特徵如下:
1、有窮性:演算法的有窮性意味著演算法在執行有限的步驟之後必須能夠終止。
2、確切性:演算法的每一步都必須確切定義。
3、輸入項:一個演算法有0個或多個輸入來描述操作對象的初始條件。所謂的零輸入是指由演算法本身決定的初始條件。
4、輸出項:一個演算法有一個或多個輸出來反映處理輸入數據的結果。沒有輸出的演算法毫無意義。
5、可行性:演算法中執行的任何計算步驟都可以分解為基本的可執行操作步驟,即每個計算步驟都可以在有限的時間內完成。
(3)演算法設計的要求擴展閱讀:
演算法可大致分為基本演算法、數據結構的演算法、數論與代數演算法、計算幾何的演算法、圖論的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法,厄米變形模型,隨機森林演算法。
描述演算法的方法有多種,常用的有自然語言、結構化流程圖、偽代碼和PAD圖等,其中最普遍的是流程圖。
隨著計算機的發展,演算法在計算機方面已有廣泛的發展及應用,如用隨機森林演算法,來進行頭部姿勢的估計,用遺傳演算法來解決彈葯裝載問題,信息加密演算法在網路傳輸中的應用,並行演算法在數據挖掘中的應用等。
4. 演算法設計原則是什麼
原則:首先說設計的演算法必須是"正確的",其次應有很好的"可讀性",還必須具有"健壯性",最後應考慮所設計的演算法具有"高效率與低存儲量"。
所謂演算法是正確的,除了應該滿足演算法說明中寫明的"功能"之外,應對各組典型的帶有苛刻條件的輸入數據得出正確的結果。
在演算法是正確的前提下,演算法的可讀性是擺在第一位的,這在當今大型軟體需要多人合作完成的環境下是換重要的,另一方面,晦澀難讀的程序易於隱藏錯誤而難以調試。演算法的效率指的是演算法的執行時間,演算法的存儲量指的是演算法執行過程中所需最大存儲空間。
演算法是程序設計的另一個不可缺的要素,因此在討論數據結構的同時免不了要討論相應的演算法。這里有兩重意思,即演算法中的操作步驟為有限個,且每個步驟都能在有限時間內完成。
確定性表現在對演算法中每一步的描述都沒有二義性,只要輸入相同,初始狀態相同,則無論執行多少遍,所得結果都應該相同。
可行性指的是,序列中的每個操作都是可以簡單完成的,其本身不存在演算法問題,例如,"求x和y的公因子"就不夠基本。
輸入值即為演算法的操作對象,但操作的對象也可以由演算法自身生成,如"求100以內的素數",操作對象是自然數列,可以由變數逐個增1生成。
演算法的健壯性指的是,演算法應對非法輸入的數據作出恰當反映或進行相應處理,一般情況下,應向調用它的函數返回一個表示錯誤或錯誤性質的值。
5. 解決什麼是程序的靈魂
解決演算法是程序的靈魂,因為當您解決了演算法,就能使程序正確的、確定性、有窮性的運行下去。
因為軟體開發工作不是按部就班,而是選擇一種最合理的演算法去實現項目功能。演算法能夠引導開發者在面對一個項目功能使用什麼思路去實現,有了這個思路後,編程工作只需要遵循這個思路去實現即可。
演算法是一系列解決問題的清晰指令,演算法代表著用系統的方法描述解決問題的策略機制。也就是說,能夠對符合一定規范的輸入,在有限時間內獲得所要求的輸出。
如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。
演算法設計的要求
正確性: 演算法至少應該具有輸入、輸出和加工處理無歧義性、能反映問題的需求、能夠得到問題的正確答案。
可讀性: 演算法設計的另一目的是為了便於閱讀、理解和交流。
健壯性: 當輸入數據不合法時,演算法也能做出相關處理,而不是產生異常或莫名其妙的結果。
時間效率高和存儲量低:
6. 演算法及其特性有哪些
1.演算法的重要特性(1)有窮性:一個演算法必須在執行有窮步驟之後正常結束,而不能形成無窮循環。
(2)確定性:演算法中的每一條指令必須有確切的含義,不能產生多義性。
(2)可行性:演算法中的每一條指令必須是切實可執行的,即原則上可以通過已經實現的基本運算執行有限次來實現。
(4)輸入:一個演算法應該有零個或多個輸入。
(5)輸出:一個演算法應該有一個或多個輸出,這些輸出是同輸入有特定關系的量。
2.演算法描述的方法(1)框圖描述:該方法使用流程圖或N-S圖來描述演算法。
(2)自然語言描述:該方法採用自然語言,同時添加高級程序設計語言如while、for和if等基本控制語句來描述演算法。這類描述方法自然、簡潔,但缺乏嚴謹性和結構性。
(2)類語言描述:這是介於程序設計語言和自然語言之間演算法描述形式,其特徵是突出演算法設計的主體部分而有意忽略某些過於嚴格的語法細節,如類C或C++的偽語言。這種演算法不能直接在計算機上運行,但專業設計人員經常使用它來描述演算法,它具有容易編寫、閱讀和格式統一的特點。
(4)程序設計語言描述:採用某種高級程序設計語言(如C或C++)來描述。這是可以在計算機上運行並獲得結果的演算法描述。
本課程將採用偽C語言進行演算法描述。
2.演算法與程序的關系演算法的含義與程序十分相似,但二者是有區別的。演算法和程序都是用來表達解決問題的邏輯步驟;演算法是對解決問題方法的具體描述,程序是演算法在計算機中的具體實現;一個程序不一定滿足有窮性(死循環),而演算法一定滿足有窮性;程序中的指令必須是機器可執行的,而演算法中的指令則無此限制;一個演算法若用計算機語言來書寫,則它就可以是一個程序。因此,程序是演算法,但演算法不一定是程序。4.演算法設計要求在演算法設計中,對同一個問題可以設計出不同的求解演算法。如何評價這些演算法的優劣,從而為演算法設計和選擇提供可靠的依據?通常可從以下四個方面評價演算法的質量:
(1)正確性:演算法應該能夠正確地執行預先規定的功能,並達到所期望的性能要求。
(2)可讀性:演算法應該好讀,以有利於讀者對程序的理解,便於調試和修改。
(2)健壯性:演算法應具有容錯處理。當輸入非法數據時,演算法應對其作出反應,而不是產生莫名其妙的輸出結果。
(4)效率與低存儲量需求:效率指的是演算法執行的時間。對於同一個問題,如果有多種演算法可以求解,執行時間短的演算法效率高。演算法存儲量指的是演算法執行過程中所需要的最大存儲空間。高效率和低存儲量這兩者與問題的規模有關。
7. 如何理解演算法的有窮性
演算法的有窮性是指演算法程序的運行時間是有限的。一個演算法必須總是(對任何合法的輸入值)在執行有窮步之後結束,且每一步都可在有窮時間內完成。
像平時寫了一個死循環,這就不滿足演算法要求。還有這個有窮性不一定是理論的有窮,假如一個演算法執行10年才會結束,那麼在大多數情況下這個演算法的意義也不大。
(7)演算法設計的要求擴展閱讀:
演算法設計的要求
1、正確性:演算法的正確性是指演算法至少應該具有輸入,輸出和加工處理無歧義性,能正確反映問題的需求,能夠得道為題的正確答案。
2、可讀性:演算法設計的另一目的是為了便於閱讀,理解和交流。
3、健壯性:當輸入數據不合法時,演算法也能做出相關處理,而不是產生異常或莫名其妙的結果。
4、時間效率高和存儲量低:也就是我們平時說的時間復雜度和空間復雜度。
8. 設計演算法的原則
設計演算法的原則:
1、正確性:演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需要、能夠得到問題的正確答案。
2、可讀性:設計演算法的目的,一方面是為了讓計算機執行,但還有一個重要的目的就是為了便於他人的閱讀,讓人理解和交流,自己將來也可閱讀。如果可讀性不好,時間長了自己都不知道寫了什麼,可讀性是評判演算法(也包括實現它的程序代碼)好壞很重要的標志。
3、健壯性:當輸入的數據非法時,演算法應當恰當地做出反應或進行相應處理,而不是莫名其妙的輸出結果。並且處理出錯的方法不應是中斷程序的執行,而應是返回一個表示錯誤或錯誤性質的值,以便於在更高的抽象層次上進行處理。
4、高效率與低存儲量:通常,演算法的效率指的是演算法的執行時間;演算法的存儲量指的是演算法執行過程中所需要的最大存儲空間,兩者的復雜度都與問題的規模有關。演算法分析的任務是對設計的每一個具體的演算法,利用數學工具,討論其復雜度,探討具體演算法對問題的適應性。
(8)演算法設計的要求擴展閱讀:
演算法的「正確」通常在用法上有很大的差別,大體分為以下4個層次:
1、演算法程序沒有語法錯誤;
2、演算法程序能夠根據正確的輸入的值得到滿足要求的輸出結果;
3、演算法程序能夠根據錯誤的輸出的值滿足規格說明的輸出結果;
4、演算法程序對於精心設計、極其刁難的測試數據都能滿足要求的輸出結果。
對於這4層含義,層次要求最低,因為僅僅沒有語法錯誤實在談不上是好的演算法。而層次(4)是最困難的,人們幾乎不可能逐一驗證所有的輸入都得到正確的結果。因此,演算法的正確性在大部分情況下都不可能用程序來證明,而是用數學方法證明的。
9. 數據結構設計一個好的演算法應該達到什麼目標
1、正確性,首先保證能夠解決問題。
2、高效性,這樣能夠保證時間上的優勢。
3、容錯性、程序能妥善處理錯誤細節。
4、可讀性、便於交流嘛
5、簡潔行、盡量不要把問題復雜化。
10. 計算機演算法是什麼
計算機演算法是以一步接一步的方式來詳細描述計算機如何將輸入轉化為所要求的輸出的過程,或者說,演算法是對計算機上執行的計算過程的具體描述。