文件宣告:程式設計的關鍵就是演算法,演算法簡單來說就是程式設計時問題解題步驟或者資料資料的流程。這裡我們將介紹以下幾種常用的演算法:迭代法、窮舉法、遞推法、遞迴發、回溯法、貪婪法、查詢演算法、排序演算法。以下資料均屬於本人在學習過程中產出的學習筆記,如果錯誤或者遺漏之處,請多多指正。並且該文件在後期會隨著學習的深入不斷補充完善。
本章節主要介紹貪婪法。
貪婪法是一種不追求最優解,只希望得到較為滿意答案的一種演算法。貪婪演算法一般可以快速得到滿意的解,因為它省去了為找最優解要窮舉所有可能而需要消耗的大量時間。貪婪演算法常以當前情況為基礎處尋找最優解,而不考慮各種可能的整體情況,所以貪婪演算法不需要回溯。
優點:
演算法簡單,求解速度快。
注意事項:
該演算法得到的解並一定是最優解。
**例項:
//題目:我們拿100元去超市買東西,店主在找零錢時,可選金額有:50元、20元、10元、5元、1元
// 問:店主怎樣才能使找零的張數最少?
//分析:使用貪婪演算法的原理來解決這個問題時,為了使找的零錢最少,我們可以優先從大面值的金額開始,
//然後依次遞減去考慮小面值的金額。
//程式設計:
void
fun(
int money)
//入參表示待找零的金額
;//面額表
int iindex =0;
//面值表索引
int icurrentmoney =0;
//當前累計金額
int ihasmoney = money;
//當前還需金額
int iallpage =0;
//當前累計張數
int ichangetable[20]
=;//記錄找零
int ichangeindex =0;
//找零的索引
while
(iindex <5)
//金額遍歷完,退出
else
//還需找零金額為0時,完成找零,退出迴圈
if(ihasmoney <=0)
}//列印找零結果
cout <<
"本次找零 "
<< iallpage <<
" 張"
<< endl << money <<
" = "
;for
(int i =
0; i < ichangeindex;
++i)
else}}
intmain()
執行結果: 常用演算法設計方法 六 貪婪法
貪婪法是一種不追求最優解,只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解,因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇,而不考慮各種可能的整體情況,所以貪婪法不要回溯。例如平時購物找錢時,為使找回的零錢的硬幣數最少,不考慮找零錢的所有各種發...
演算法設計思想(2) 貪婪法
貪婪法,又稱貪心演算法,是尋找最優解問題的常用方法,這種方法模式一般將求解過程分成若干個步驟,但每個步驟都應用貪心原則,選取當前狀態下最好的或最優的選擇 區域性最有利的選擇 並以此希望最後堆疊出的結果也是最好或最優的解。貪婪法的每次決策都以當前情況為基礎並根據某個最優原則進行選擇,不從整體上考慮其他...
貪婪演算法 動態規劃 分治法比較
1,貪婪演算法 一步步走,每走一步都是當前最優的。使用要求 無後向性,比如n個活動安排,只要安排了某個活動,那麼後面活動怎麼安排和前面的選擇無關。注 每一步都是選最棒的,那麼這個最棒是怎麼定義的?什麼標準 看下面這個例子 貪心法標準的選擇 設有n個正整數,將它們連線成一排,組成乙個最大的多位整數。例...