最优化问题是计算机领域的一个很重要的问题,很多现实的问题本质上都是最优化问题,或者说都可以转化为最优化的问题。比如说怎么规划旅游线路最省钱,在指定的时间里做更多的事情等等,这些都是最优化问题。为了解决最优化问题,计算机界提出了各种算法。
其中有五大常用算法,它们是贪婪算法,动态规划算法,分治算法,回溯算法以及分支限界算法。
1) 贪婪算法
在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的是在某种意义上的局部最优解。可以通过一系列局部最优的选择,扩展到整体比较满意的解。贪婪算法可以获取到问题的局部最优解,不一定能获取到全局最优解,同时获取最优解的好坏要看贪婪策略的选择。
例如背包问题中,我们放物品可以选择按物品价值最大的先放;可以选择按重量最小的物品来放;也可以选择单位重量的价值最大来放。
物品类:
1 /// <summary> 2 /// 物品类用于存储物品的属性 3 /// </summary> 4 public class Goods{ 5 6 //编号 7 public int flag; 8 //重量 9 public int weight; 10 //价值 11 public int value; 12 //单位重量 13 public double vw; 14 15 /// <summary> 16 /// goods的构造函数 17 /// </summary> 18 /// <param name="flag">编号</param> 19 /// <param name="weight">重量</param> 20 /// <param name="value">价值</param> 21 /// <param name="vw">单位重量价值</param> 22 public Goods(int flag, int weight, int value, double vw) 23 { 24 this.flag = flag; 25 this.weight = weight; 26 this.value = value; 27 this.vw = vw; 28 } 29 }