資料結構 演算法

2022-08-19 02:51:09 字數 2823 閱讀 8068

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(int

n);int

main()

int fact(int

n)

5.分治演算法

演算法思路:使用分治演算法設計程式時,一般可按以下步驟進行:

(1)分解:將要求解的問題劃分成若干規模較小的同類問題;

(2)求解:當子問題劃分的足夠小時,用較簡單的方法解決;

(3)合併:按求解問題的要求,將子問題的解逐層合併,即可構成最終的解。

#include #define maxn 64

int 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 3

intmain()

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 2

intmain()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個或多個輸入,至少乙個輸出,輸出可以是列印輸出或者返回乙個值 有 窮 性 演算法在執行有限步驟後,自動結束而不會出現無限迴圈,並且每乙...