下面介紹一下最常用的八大演算法思想
一、比較「笨」的列舉演算法
基本思路:
1、確定列舉物件、列舉範圍和判定條件
2、注意列舉可能的解,驗證每個節是否是問題的解
列舉演算法步驟:
1、題解的可能範圍,補能遺漏任何乙個真正解,也要避免有重複
2、判斷是否真正解的方法
3、使可能解的範圍降至最小,以便提高解決問題的效率
#include int main()
} }return 0;
}
二、遞推演算法思想
1、順推法:從已知條件出發,逐步推算出要解決問題的方法。(斐波那契數列)
#include #include using namespace std;
void get_tuzi(int mouth);
int main()
void get_tuzi(int mouth)
printf("%.2f",corpus[47]);
}
三、遞迴演算法思想
特點:1、遞迴過程一般通過函式或子過程來實現。
2、遞迴演算法在函式或子過程的內部,直接或者間接地呼叫自己的演算法。、
3、遞迴演算法實際上是把問題轉化為規模縮小了的同類問題的子問題,然後在遞迴呼叫函式或者子過程來表示問題的解。
注意以下幾點:
1、遞迴式在過程或函式中呼叫自身的過程。
2、在使用遞迴時,必須有乙個明確的遞迴結束條件,稱為遞迴出口
3、遞迴演算法通常顯得很簡潔,但是執行效率低,一般不提倡
4、在遞迴呼叫過程中,系統用棧來儲存每一層的返回點和區域性量,如果次數過多。容易溢位,一般不提倡使用。
(漢諾塔問題、階乘問題)
#include using namespace std;
void hannuo(int n,char a,char b,char c);
int main()
void hannuo(int n,char a,char b,char c)
void mult(char a,char b,char s)
,flag=0;
char result[65];
alen=strlen(a);
blen=strlen(b);
for (i=0;i=0;i--)
for (i=blen-2;i>=0;i--)
if (sum!=0)
for (i=0;i=0;i--) s[i]=result[k-1-i];
s[k]='\0';
while(1)
}
#include #include using namespace std;
int a[65][65]=;
void gamecal(int k,int n);
int main()
gamecal(1,n);
cout<
五、貪心演算法思想
從問題的某乙個初始解出發,逐步逼近給定的目標,一遍盡快求出更好的解。當達到演算法中的某一部不能再繼續前進時,就停止演算法,給出乙個近似解
存在的問題
1、不能保證最後的結果是最優的
2、不能用來求最大或最小解的問題
3、只能求滿足某些約束條件的可行解的範圍
基本思路
1、建立數學模型來描述問題
2、把求解的問題分成若干個子問題
3、把子問題的區域性最優解合併成原來界問題的乙個解
基本過程
1、從問題的某一初始解出發
2、while能向給定總目標前進一步
3、求出可行解的乙個解元素
4、由所有解元素組合成問題的乙個可行解。
貪心之錢找零
#include #include using namespace std;
#define maxn 9
int parvalue[maxn]=;
int num[maxn]=;
void exchange(int n)
else i++; }}
int main()
box;
void init_list(box **h)
box* find_p(box *h,int volume)
return p;
}void add_list_tail(box *h,box *p)
q->next=p;
}void print_list(box *h)
}int add_box(int volume)
else
p->size+=volume[i];
} print_list(h);
return count;
}int main()
; ret=add_box(volume);
printf("%d\n",ret);
return 0;
}
六、試探演算法思想
1、針對所給問題,定義問題的解空間。
2、確定易於搜尋的解空間結構
3、以深度優先搜尋空間,並在搜尋過程中用剪枝函式避免無效搜尋。`
經典例子:八皇后
#include #define n 8
int set[n],count,sols;
int judge_place(int row)
void place(int row)
cout<<"sart(a) = "<
八、模擬演算法思想
模擬是對真實事物或者過程的虛擬。在程式設計時為了實現某個功能,可以用語言來模擬該功能,模擬成功也就相應的表示程式設計的成功
八大排序演算法思想介紹
1.插入排序 直接插入排序 希爾排序 2.選擇排序 簡單選擇排序 堆排序 3.交換排序 氣泡排序 快速排序 4.歸併排序 5.基數排序 不穩定排序 簡單選擇排序,快速排序,希爾排序,堆排序 穩定排序 氣泡排序,直接插入排序,歸併排序,奇數排序 一.插入排序 將第乙個和第二個元素排好序,然後將第3個元...
八大基本演算法思想及實現 php實現
快遞排序 歸併排序 查詢排序 遞推演算法 遞迴 f 1 1 f 2 1 des 15 for i 3 i des i 檢視 echo print r f 遞迴演算法 遞迴思想 遞迴一定要有函式 function recursion n echo recursion 15 氣泡排序 氣泡排序 arr ...
八大排序演算法
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...