步驟1:從某個初始解出發;
步驟2:採用迭代的過程,當可以向目標前進一步時,就根據區域性最優策略,得到一部分解,縮小問題規模;
步驟3:將所有解綜合起來。
換酒問題題目:
小區便利店正在**,用 numexchange 個空酒瓶可以兌換一瓶新酒。你購入了 numbottles 瓶酒。
如果喝掉了酒瓶中的酒,那麼酒瓶就會變成空的。
請你計算最多能喝到多少瓶酒?
% greedy algorithm
(ga)貪心/貪婪演算法
%購入了 numbottles 瓶酒
num_bottles =
input
('please input the number of bottles:');
%用 numexchange 個空酒瓶可以兌換一瓶新酒
num_exchange =
input
('please input the number of exchange:');
%初始化
sumb = num_bottles;
% 喝到酒的數目
empty = num_bottles;
% 空瓶數目
%貪心:當前喝完所有飲料後變為空瓶加上已有空瓶後,最大限度的、貪心的兌換飲料,依次類推,
% 直到手上的空瓶不足以兌換出一瓶飲料止。
while
fix(empty / num_exchange)~=
0% fix函式用於取整數商,表示當前空瓶還能兌換酒時:進入迴圈;否則不足以兌換酒:迴圈退出
bottle =
fix(empty / num_exchange)
;% 利用當前空瓶最大限度地兌換酒,得到當前酒的數目
sumb = sumb + bottle;
% 更新喝到酒的數目
empty =
mod(empty,num_exchange)
+ bottle;
%更新空瓶數目:空瓶=兌換後剩餘空瓶+兌換得到的酒瓶
endsumb %最終喝到酒的瓶數
MATLAB實現貪心演算法
在這裡是為了實現 用貪心演算法模擬出隨機產生的20個點間的最短路徑。蟻群演算法實現,有興趣可以對比一下 matlab實現蟻群演算法 n 20 用於記錄點數 x zeros 1,n 產生乙個與經過點數相同的行向量 y zeros 1,n best 1 1 n 生成乙個用來儲存點順序的矩陣 handle...
演算法之貪婪演算法
雖然設計乙個好的求解演算法更像是一門藝術,而不像是技術,但仍然存在一些行之有效的能夠用於解決許多問題的演算法設計方法,你可以使用這些方法來設計演算法,並觀察這些演算法是如何工作的。一般情況下,為了獲得較好的效能,必須對演算法進行細緻的調整。但是在某些情況下,演算法經過調整之後效能仍無法達到要求,這時...
貪婪演算法GreedyAlgorithm
尋找最優解。從當前狀態出發,根據區域性狀態 而非全域性的最優決策 進行 選擇 在滿足約束條件的前提下,使目標函式的增速達到極值,選擇乙個能夠最快達到要求的輸入元素。根據一系列選擇得到的解,每一次選擇都是那時狀態的最佳解。事實上,最後得到的將不是全域性的最優解。貪婪選擇 每次選擇將會簡化為子問題,而且...