貪心vs動態規劃
c demo感受
貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。
個人對貪心演算法的理解是:貪心是有條件的,我們也常說貪心策略選擇,具有一定的時效性。而通常,基於選擇的性質,往往貪心演算法會做乙個排序。
這種演算法很相似,傳送門:之前自己總結的動態規劃的內容,於是將他們比較了一下,同時借助了一下思維導圖,如下(大家拍磚斧正):
自己順了一遍之後,用c#實現了一下貪心演算法,路過的小夥伴多提建議,其中進行簡單排序的地方,用了一下堆排序,順便溫習一下堆排序時間複雜度:o (nlgn)。我們一起學習,共同進步~
#region 實體goods--劉雅雯--2023年9月23日16:46:58
/// /// 物品類用於儲存物品的屬性
///public
class goods
}#endregion
#region 堆排序進行篩選--劉雅雯--2023年9月23日16:45:21
/// /// 排序演算法--將單位重量的價值,降序排列,利用堆排序
//////
物品集///
單位重量價值,降序的物品集
public goods sort(goods goods )
for (int j = goods.length; j>=1; j--)
return goods;
}///
/// 堆排序的篩選過程
//////
陣列///
第i位置(放較小的數)
///陣列的個數
public
void
sift(goods goods, int k,int n)
if (goods[k-1].vw > goods[j-1].vw) //比較父節點和較小的乙個孩子
}goods[i-1] = tempgoods[0];//之前存起來的數,找到了她的位置
}
}#endregion
#region 貪心演算法揹包問題--劉雅雯--2023年9月23日16:46:10
/// /// 貪心演算法
//////
揹包的總容量
///物品
///public
float greedyknapsack(int w,goods goods )
for ( i = 1; i <= goods.length; i++)
else
}//只有部分物品可以放進去
if (i<=goods.length)
return state;
}#endregion
private
void
greedy_click(object sender, eventargs e)
;goods newgoods = new goods[5];
float state = new
float[5];
//得到goods按照單位重量價值降序排列的newgoods
newgoods = sort(goods);
state= greedyknapsack(100, goods);
for (int i = 1; i <= state.length; i++)
label2.text = label2.text + "\r\n" + "揹包的總價值為:" + value;
}
執行的結果如下,頁面有些醜,這次的側重點在邏輯上,望見諒~
演算法,很大的程度上鍛鍊自己的邏輯思考,最近研究演算法這方面的感受深刻,嚴謹的小夥伴,在演算法的路上不斷精進。
0 1揹包問題 回溯 貪心演算法 C Demo
回溯演算法的效率不是很高,就起本質而言,屬於窮舉,不同的是提供了乙個窮舉的思路 回溯。回溯演算法也稱試探法,基本思想是 從一條路往前走,能進則進。回溯法採用試錯的思想,它嘗試分步的去解決乙個問題。在分步解決問題的過程中,當它通過嘗試發現現有的分步答案不能得到有效的正確的解答的時候,它將取消上一步甚至...
揹包問題(貪心演算法)
揹包問題 程式8 4 2.cpp 定義控制台應用程式的入口點。揹包問題 貪心演算法 include stdafx.h define maxnumber 20 typedef struct node object float find object wp,int n,float m i 0 while...
貪心演算法 揹包問題
詳細見原帖 我寫的是自己的感悟 揹包問題 有乙個揹包,揹包容量是m 150。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。物品 a b c d e f g 重量 35 30 60 50 40 10 25 價值 10 40 30 50 35 40 30 ...