1.程式設計的靈魂:資料結構+演算法
程式=資料結構+演算法+程式語言
2.遞推演算法
(1)順推法:是指從已知條件出發,逐步推算出要解決問題的方法。例如:斐波拉契數列就可以通過順推法不斷遞推算出新的資料。
(2)逆推法:是從已知結果出發,用迭代表示式逐步推算出問題開始的條件。
eg:兔子的繁殖過程(順推法)
1 #include 2#define num 13
3int
main()4;
7for(i=2;i)811
for(i=0;i)
1215
getch();
16return0;
17 }
3.列舉(窮舉)演算法
本質:從所有候選答案中去搜尋正確的解,使用該演算法需要滿足兩個條件:(1)可預先確定候選答案的數量;(2)候選答案的範圍在求解之前必須有乙個確定的集合。
4.遞迴演算法
一種直接或間接地呼叫自身的演算法。
具體實現過程:通過函式或子過程來完成,在函式或子過程的內部,編寫**直接或間接地呼叫自己,即可完成遞迴操作。
eg:求階乘
#include int fact(intn);int
main()
int fact(int
n)
5.分治演算法
演算法思路:使用分治演算法設計程式時,一般可按以下步驟進行:
(1)分解:將要求解的問題劃分成若干規模較小的同類問題;
(2)求解:當子問題劃分的足夠小時,用較簡單的方法解決;
(3)合併:按求解問題的要求,將子問題的解逐層合併,即可構成最終的解。
#include #define maxn 64int a[maxn+1][maxn+1]=;
void gamecal(int k,int n)//
處理編號k開始的n個選手的日程
else
printf("\n");
for(i=1;i<=m;i++)
getch();
return 0;
}
6.貪婪演算法
基本思路:從問題的某乙個初始解出發逐步逼近給定的目標,以盡可能快地求得更好的解。當達到演算法中的某一步不能再繼續前進時,就停止演算法,給出近似解。
由貪婪演算法的特點和思路可看出,該演算法存在以下問題:
(1)不能保證最後的解是最優的;(2)不能用來求最大或最小解問題;(3)只能求滿足某些約束條件的可行解的範圍。
eg:換零錢
1 #include 2#define maxn 9
3int parvalue[maxn]=;
4int num[maxn]=;
5int exchange(intn)6
13while(n>0 && i14else
if(n<10 &&n>=5)20
else i++;24}
25return0;
26}27int
main()
2841
getch();
42return0;
43 }
7.模擬演算法
演算法思路:在程式語言中,可使用隨機函式來模擬自然界中發生不可**情況。c語言中使用srand()和rand()函式可生成隨機數。
1 #include 2 #include 3intmain()
4while(m!=n);
17 printf("
答對了!\n");
18 printf("
共猜測了%d次.\n
",i);
19if(i<=5
)20 printf("
你太聰明了,這麼快就猜出了!");
21else
22 printf("
還需改進方法,以便更快猜出來!");
23getch();
24return0;
25 }
8.試探演算法
演算法思路:為了求得問題的解,先選擇某一種可能情況進行試探,在試探過程中,一旦發現原來的選擇的假設情況是錯誤的,就退回一步重新選擇,繼續向前試探,如此反覆進行,直至得到解或證明無解。
eg:生成彩票號碼組合
假設有一種彩票,每注由7個1~29的數字組成,且這7個數字不能相同,編寫程式生成所有的號碼組合。
1 #include 2intmain()330
}31}32
33}34}
35}36 }
上面的程式不具有代表性和通用性, 採用遞迴的方法可以解決這個問題:
1 #include 2#define maxn 7 //
設定每一注彩票的位數
3#define num 29 //
設定組成彩票的數字
4int
num[num];
5int
lottery[maxn];
6void combine(int n, intm)7
16else
//若m=1輸出一注號碼
1723}24
}25intmain()
2632
for(i=0;i)
3336
combine(num,maxn);
37getch();
38return0;
39 }
資料結構 資料結構演算法
分治法 對於乙個規模為n的問題,若該問題可以容易地解決 比如說規模n較小 則直接解決 否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解這些子問題,然後將各子問題的解合併得到原問題的解。動態規劃法 這種演算法也用到了分治思想,它的做法是將問題例項分解為更小的 相似的子...
資料結構與演算法 演算法 演算法和資料結構
資料結構與演算法 演算法 好吧,在這裡,您被優秀或優秀的軟體開發人員所隔開。在這種情況下,我會告訴您一開始或至少在我的情況下,並且我知道大多數時候,對於我認識的大多數人,您會覺得自己是乙個無能的人或白痴。基本上,我怎麼可能不理解這一點,然後您會感到沮喪。在這種情況下,我會告訴您情況並不像您想的那麼糟...
資料結構 演算法
程式設計 資料結構 演算法 演算法的定義 演算法是解決特定問題求解步驟的描述,在計算機中為指令的有限序列,並且每條指令表示乙個或多個操作。演算法的特性 輸入 輸出 0個或多個輸入,至少乙個輸出,輸出可以是列印輸出或者返回乙個值 有 窮 性 演算法在執行有限步驟後,自動結束而不會出現無限迴圈,並且每乙...