贪心法的基本思路:从问题的某一个初始解出发逐步逼近给定的目标,以尽可能快的地求得更好的解。当达到某算法中的某一步不能再继续前进时,算法停止。
该算法存在问题:
1. 不能保证求得的最后解是最佳的;
2. 不能用来求最大或最小解问题;
3. 只能求满足某些约束条件的可行解的范围。
贪心算法的运用-背包问题
背包问题和0/1背包问题的主要区别就是物品可不可以再分割。背包问题中的物品可以再进行分割,而0/1背包问题中的物品则反之。贪心算法往往只从局部去考虑问题,所以在解决0/1背包问题时得不到最优解。
贪心算法运用于背包问题的c++实现:
物品
A
B
C
D
F
重量
1
2
3
4
5
价值
3
10
6
3
5
程序代码: view plaincopy to clipboardprint?
//GreedyAlgorithm.h
#include<iostream>
using namespace std;
class GreedyAlgorithm{
public:
GreedyAlgorithm(int _weight[],int _value[],int capacity);
double *ComputeRatio();
void SortRatio(double _Ratio[]);
double ComputeProfit();
private:
int *weight;
int *value;
int capacity;
double profit;
};
//GreedyAlgorithm.cpp
#include"GreedyAlgorithm.h"
//================================
//函数名称:GreedyAlgorithm
//函数功能:初始化对象
//函数参数说明:_weight[] 物品重量,_value[] 物品价值,_capacity 背包容量
//函数返回值:void
//创建时间:2009-04-28
//更新:
//================================
GreedyAlgorithm::GreedyAlgorithm(int _weight[],int _value[],int _capacity){
this->weight=_weight;
this->value=_value;
this->capacity=_capacity;
this->profit=0;
return;
}
//====================