貪心演算法之裝箱問題:
有若干個體積為v的箱子,有n個物品體積為v1,v2,v3,v4。。。。
要求:將所有物品裝入箱子中,使開啟的箱子盡可能少。
演算法描述:把所有物品按體積降序排序,每次取出乙個物品(該物品為當前體積最大的物品),遍歷所有已開啟箱子,將該箱子放入乙個較早開啟的箱子,若沒有箱子能放下,則開啟乙個新箱子。
#include
#include
#define v 10;
typedef
struct
/* 定義物品 */
elemg;
typedef
struct node//定義物品鏈
goodslink;
typedef
struct box //定義箱子鏈
boxlink;
elemg*
sort
(elemg *g,
int n)
;boxlink*
package
(elemg *g,
int n)
;void
printbox
(boxlink* box)
;elemg*
sort
(elemg *g,
int n)}}
return g;
}boxlink*
package
(elemg *g,
int n)
//掛箱子鏈後完善物品資訊
p->remainder-
=g[i]
.**;
newg=
(goodslink*
)malloc
(sizeof
(goodslink));
//給物品鏈節點初始化
newg->gno=g[i]
.gno;
newg->link=
null
;//給物品鏈掛鏈
//當箱子的物品鏈頭指標為空,則if(
!p->hg)
else
}return bh;
}void
printbox
(boxlink* bh)
printf
("\n");
}}void
printgoods
(elemg *h,
int n)
}int
main()
//排序
g=sort
(g,n)
;printgoods
(g,n)
;//裝箱
bh=package
(g,n)
;//列印
printbox
(bh)
;//釋放
free
(g);
free
(bh)
;}
貪心演算法之裝箱問題
貪心準則 1.貪心準則設計演算法過程的每一步都是最優解 2.貪心準則一旦被設計,中途不可改變 裝箱問題 問題描述 1.有若干個體積為v的箱子 2.有n個物品,體積分別為 v1,v2,v3 要求 將所有物品都裝入箱子中,使箱子盡可能的少 貪心準則 1.將所有物品按照體積降序排列 2.每次取出乙個物品 ...
貪心演算法 裝箱問題
貪心演算法中必須設定乙個貪心準則 來尋求每一步的最優解,但最後往往不是問題的整體最優解。問題 假設有n個物品,其體積為v1,v2,v3,v4.v n,有若干個體積為v的箱子 理論物品的體積應該小於箱子的體積 要求把所有物品全部裝入箱子中,要求開啟的箱子數最少。分析 怎樣合理化分配才能使得開啟的箱子數...
貪心演算法(裝箱問題)
貪心演算法的基本思想是找出整體當中每個小的區域性的最優解,並且將所有的這些區域性最優解合起來形成整體上的乙個最優解。因此能夠使用貪心演算法的問題必須滿足下面的兩個性質 1.整體的最優解可以通過區域性的最優解來求出 2.乙個整體能夠被分為多個區域性,並且這些區域性都能夠求出最優解。3.區域性最優解不一...