`
shmilyyy
  • 浏览: 10719 次
  • 性别: Icon_minigender_1
  • 来自: 辽宁
社区版块
存档分类
最新评论

五种常见算法之贪心算法

阅读更多
贪心算法


贪心算法:贪心算法总是做出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。

贪心算法基本思路:从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的求的更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。

贪心算法存在的问题:
1.不能保证求的最后解是最佳的。
2.不能用来求最大或最小解问题。
3.只能求满足某些约束条件的可行解的范围。

贪心算法的基本要求:
1.贪心选择性质:指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。
2.具有最优子结构性质:一个问题的最优解包含其子问题的最优解。


贪心算法解决背包问题:


物品类:Goods
package com.greed.yy;

public class Goods {
	//物体的重量
	private double w;
	//物体的价值
	private double v;
	//物体的单位价值
	private double p;
	
	public Goods(double w,double v){
		this.w = w;
		this.v = v;
		this.p = v/w;
	}

	public double getW() {
		return w;
	}

	public void setW(double w) {
		this.w = w;
	}

	public double getV() {
		return v;
	}

	public void setV(double v) {
		this.v = v;
	}

	public double getP() {
		return p;
	}

	public void setP(double p) {
		this.p = p;
	}
	
	
}



//主类:
package com.greed.yy;

/**
 * 用贪心算法解决背包问题
 * 
 * @author yuyang_csu
 *@data 2013-4-9
 */
public class Package {
	// 物品个数
	private int n;
	// 声明背包容量的数组
	private double c;
	// 声明储存物品的数组
	private Goods[] goods;

	public Package(int n, Goods[] goods, double c) {
		this.n = n;
		this.goods = goods;
		this.c = c;
	}

	// 对每个物品的单位价值进行排序
	public Goods[] sort() {
		Goods[] p = new Goods[goods.length];
		for (int i = 0; i < p.length; i++) {
			p[i] = goods[i];
		}

		for (int i = 1; i < p.length; i++) {
			Goods tmp = p[i];
			for (int j = i; j >= 1 && p[j].getP() > p[j - 1].getP(); j--) {
				p[j] = p[j - 1];
				p[j - 1] = tmp;
			}
		}
		return p;
	}

	// 装包
	public double knapsack() {
		double total = 0;
		Goods[] g = sort();
		for (int i = 0; i < g.length; i++) {
			double w = g[i].getW();
			if(w>c && c!=0){
				total+=c*g[i].getP();
				c=0;
			}else{
				c-=w;
				total+=g[i].getV();
			}
		}
		return total;
	}
	
	public static void main(String[] args) {
		Goods []goods = {new Goods(10,60),new Goods(20,100),new Goods(30,120)};
		Package p = new Package(3,goods,50);
		System.out.println(p.knapsack());
	}

}

分享到:
评论

相关推荐

    基于多种常见算法实现动态规划项目c++源码+详细注释(回溯、贪心、递归、分支限界、分治等算法).zip

    基于多种常见算法实现动态规划项目c++源码+详细注释(回溯、贪心、递归、分支限界、分治等算法).zip基于多种常见算法实现动态规划项目c++源码+详细注释(回溯、贪心、递归、分支限界、分治等算法).zip基于多种常见算法...

    贪心算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    贪心算法 c

    贪心算法的基本思想、流程;  使用贪心方法解决装载问题和背包问题;  几种常见的作业调度问题:活动安排问题、带限期作业安排 问题 * 、多机调度问题 ** ;  两个图论优化问题: 最优生成树的 Prim 算法和 ...

    MATLAB 实现各类常见算法

    MATLAB 实现遗传算法 二叉树 分治策略 退火算法 概率算法 贪心算法 枚举算法 回溯算法等 有源代码 有原理及改进等

    图论模型及其算法以及贪心算法

    这是一个曹立国老师关于图论算法的资料,介绍了信息学竞赛中常见的图论算法,我无意中获得的,拿来与大家,很有帮助的,希望能对你有帮助

    C语言实现钱币找零问题,贪心算法

    贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。下面是一个使用C语言实现的贪心算法示例,即“钱币找零问题”,目标是用最少的钱币...

    C 语言实现钱币找零问题,使用贪心算法实现

    贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。下面是一个使用C语言实现的贪心算法示例,即“钱币找零问题”,目标是用最少的钱币...

    C 语言实现“钱币找零问题”,使用贪心算法

    贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法策略。下面是一个使用C语言实现的贪心算法示例,即“钱币找零问题”,目标是用最少的钱币...

    x2-文本小节-常见算法时间复杂度.md

    - 三大算法思维:贪心,二分,动态规划 - 常见数据结构 ## 注意事项 - 算法,有难度,轻耐心学习 - 不仅关注题目本身,更要关注知识点和解题思路 - 按顺序学习(本章课程按顺序设计的) ## 看几个面试题 列举几...

    单链表算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    递归算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    二叉树算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    KMP算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    分治算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    剪枝算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    推荐算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    回溯算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    爬山算法.zip

    贪心算法:贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。常见的贪心算法包括最小生成树算法中的Prim算法、Dijkstra算法等。 字符串匹配算法:字符串匹配算法用于在一个字符串(文本)中查找一个...

    algorithm:常见算法

    算法 常见算法 排序算法 查询算法 随机算法 动态规划算法 贪心算法 回溯算法 分支限定 分治算法 哈希算法 常用的数据结构 栈 阴离子 树 跳跃表 压缩表

    暴力、递归与分治、动态规划、贪心算法、回溯经典习题

    暴力、递归与分治、动态规划、贪心算法和回溯是算法设计中常见的几种思路和方法,经典习题是帮助我们更好掌握这些算法思想的重要途径。以下是对这些经典习题的详细说明: 1. 暴力解法习题 暴力解法往往是最直观、最...

Global site tag (gtag.js) - Google Analytics