演算法設計的
『壹』 演算法設計有哪些方法
演算法設計常用的幾種方法是
1. 窮舉法
2. 貪心法
3. 分治法
4. 回溯法
5. 分枝限界法
6. 動態規劃法
『貳』 什麼是演算法設計
演算法:為解決一個問題而採取的方法和步驟(對數據處理的描述)。演算法是
程序
的靈魂,
結構化程序設計
的基本方法就是
演算法設計
『叄』 演算法設計的介紹
本書圍繞演算法設計技術組織素材,對每種演算法技術選擇了多個典型範例進行分析。本書將直觀性與嚴謹性完美地結合起來。每章從實際問題出發,經過具體、深入、細致的分析,自然且富有啟發性地引出相應的演算法設計思想,並對演算法的正確性、復雜性進行恰當的分析、認證。
『肆』 影響演算法設計的因素有哪些
影響演算法設計的有以下因素:
針對機器:空間復雜性和時間復雜性。
針對程序員:演算法表達和實現的簡單性。
針對問題:演算法對問題及問題輸入規模的普適性。
影響演算法效率的因素
1、從大的方面來講,所選擇的語言對演算法的效率影響很大。一般來說,使用越高級的語言所需要的時間和空間就越大。另外,不同編譯器產生的代碼質量不同,這對演算法的效率也會有影響。
2、存儲結構
數據的存儲結構,分為順序存儲結構和鏈式存儲結構。順序存儲結構的特點是藉助元素在存儲器中的相對位置來表示數據元素之間的邏輯關系;鏈式存儲結構則是藉助指示元素存儲地址的指針表示數據元素之間的邏輯關系。不同的問題求解選用不同的存儲結構。
3、指針操作
在使用指針時,指針的有秩序掃描非常重要。例如在模式匹配中,如果直接進行匹配,當有不完全匹配時,主串的指針需要回溯。
在KMP演算法中,我們先可以求出每個元素的next函數值,從而在發生不完全匹配時,主串的指針不必要回溯,只需要模式串的元素回到當前元素的next函數值所指的元素再進行匹配即可。當主串和模式串有很多不完全匹配時,KMP演算法可以大大提高效率。
4、查找的效率
有很多快速查找的演算法都可以提高查找的效率,如建立索引,折半查找等,都是在記錄和關鍵字之間進行比較,從而尋求關系。這一類查找建立在比較的基礎之上。查找的效率依賴於查找過程中所進行的比較次數。
在哈希表中,使得記錄的存儲位置和關鍵字之間建立一個確定的存儲關系,因而在查找時,只需要根據這個對應的關系f 找到給定值K 的像f(k)。用這個思想建立哈希表。如在基因組匹配時,用哈希表非常方便。
5、數據類型的選擇
數據類型的選擇也會影響演算法效率,在對時間和空間要求非常嚴格時,盡可能的使用佔用空間較小的數據類型。使用動態開辟空間會使得效率降低,所有在能確定或估計出需要的空間大小的情況下盡量使用靜態數字。個人覺得用vector雖然方便,但是效率並不高。
6、存儲方式
用堆操作還是用棧操作,對於不同的問題需要仔細選擇。在串和隊列的有關操作中用堆操作合適,在樹的操作中用棧操作合適,如建立二叉樹中序遍歷的遞歸演算法或非遞歸演算法,用棧操作好。
『伍』 演算法設計的過程一般是什麼樣子
和你做數學題目的過程一樣,已知條件是什麼?已知量是什麼?要求什麼?需要輸出一個什麼結果?
演算法設計就是把問題解決步驟用計算機編程語言來表示出來
『陸』 演算法設計
第5章:常用演算法設計(軟體設計篇)免費下載
鏈接:https://pan..com/s/1EsbJAHii_AXsOL6JuSnRHw
《演算法設計》是2007年清華大學出版社出版發行的圖書,作者是Jon Kleinberg / Éva Tardos。
『柒』 演算法設計原則是什麼
原則:首先說設計的演算法必須是"正確的",其次應有很好的"可讀性",還必須具有"健壯性",最後應考慮所設計的演算法具有"高效率與低存儲量"。
所謂演算法是正確的,除了應該滿足演算法說明中寫明的"功能"之外,應對各組典型的帶有苛刻條件的輸入數據得出正確的結果。
在演算法是正確的前提下,演算法的可讀性是擺在第一位的,這在當今大型軟體需要多人合作完成的環境下是換重要的,另一方面,晦澀難讀的程序易於隱藏錯誤而難以調試。演算法的效率指的是演算法的執行時間,演算法的存儲量指的是演算法執行過程中所需最大存儲空間。
演算法是程序設計的另一個不可缺的要素,因此在討論數據結構的同時免不了要討論相應的演算法。這里有兩重意思,即演算法中的操作步驟為有限個,且每個步驟都能在有限時間內完成。
確定性表現在對演算法中每一步的描述都沒有二義性,只要輸入相同,初始狀態相同,則無論執行多少遍,所得結果都應該相同。
可行性指的是,序列中的每個操作都是可以簡單完成的,其本身不存在演算法問題,例如,"求x和y的公因子"就不夠基本。
輸入值即為演算法的操作對象,但操作的對象也可以由演算法自身生成,如"求100以內的素數",操作對象是自然數列,可以由變數逐個增1生成。
演算法的健壯性指的是,演算法應對非法輸入的數據作出恰當反映或進行相應處理,一般情況下,應向調用它的函數返回一個表示錯誤或錯誤性質的值。
『捌』 演算法的設計原則是什麼
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{
『玖』 設計演算法的原則
設計演算法的原則:
1、正確性:演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無歧義性、能正確反映問題的需要、能夠得到問題的正確答案。
2、可讀性:設計演算法的目的,一方面是為了讓計算機執行,但還有一個重要的目的就是為了便於他人的閱讀,讓人理解和交流,自己將來也可閱讀。如果可讀性不好,時間長了自己都不知道寫了什麼,可讀性是評判演算法(也包括實現它的程序代碼)好壞很重要的標志。
3、健壯性:當輸入的數據非法時,演算法應當恰當地做出反應或進行相應處理,而不是莫名其妙的輸出結果。並且處理出錯的方法不應是中斷程序的執行,而應是返回一個表示錯誤或錯誤性質的值,以便於在更高的抽象層次上進行處理。
4、高效率與低存儲量:通常,演算法的效率指的是演算法的執行時間;演算法的存儲量指的是演算法執行過程中所需要的最大存儲空間,兩者的復雜度都與問題的規模有關。演算法分析的任務是對設計的每一個具體的演算法,利用數學工具,討論其復雜度,探討具體演算法對問題的適應性。
(9)演算法設計的擴展閱讀:
演算法的「正確」通常在用法上有很大的差別,大體分為以下4個層次:
1、演算法程序沒有語法錯誤;
2、演算法程序能夠根據正確的輸入的值得到滿足要求的輸出結果;
3、演算法程序能夠根據錯誤的輸出的值滿足規格說明的輸出結果;
4、演算法程序對於精心設計、極其刁難的測試數據都能滿足要求的輸出結果。
對於這4層含義,層次要求最低,因為僅僅沒有語法錯誤實在談不上是好的演算法。而層次(4)是最困難的,人們幾乎不可能逐一驗證所有的輸入都得到正確的結果。因此,演算法的正確性在大部分情況下都不可能用程序來證明,而是用數學方法證明的。