贪婪算法
- 贪婪准则
- 算法在推进的过程中,每一步都追求最优解
- 贪婪准则一旦确定,中途不能改变
- 贪婪算法求出的最终解不一定是最优解
装箱问题
- 问题描述:有若干个体积为V的箱子,有n个体积为V0,V1,V2,V3…Vn-1的物品
- 要求:把所有物品都装入箱子中,使打开的箱子尽可能少
- 解决思路
-
贪婪准则
- 将所有物品按体积的降序排序
- 每次取出一个物品(当前未装入物品的体积最大值)
- 遍历所有已打开的箱子,将物品放入最早打开的箱子
-
存储形式:链表
-
类型声明
1.排序物品体积时物品的类型
-
typedef struct{
int gno;//物品编号
int gv;//物品体积
}ElemG;
2.装箱时物品的类型
typedef struct node{
int gno;//物品编号
struct node* link;//指向下一个节点的指针域
}GoodsLink;
3.箱子节点
typedef struct box{
int Reminder;//存放箱子剩余体积
GoodsLink *hg;//指向物品的地址
struct box* next;//指向下一个箱子的指针域
}EBOX;
- 算法描述
1.创建物品信息,并初始化
ElemG* Init_Goods(){
int v[N] = {
3,2,5,8,10,1,6,12,19,4}; //物品的体积