貪心演算法之裝箱

2021-10-01 06:39:13 字數 1477 閱讀 5300

貪心演算法之裝箱問題:

有若干個體積為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.區域性最優解不一...