八大演算法思想

2021-07-15 11:05:21 字數 2900 閱讀 3406

下面介紹一下最常用的八大演算法思想

一、比較「笨」的列舉演算法

基本思路:

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 ...