package
com.lip.datastructure;
/***貪心演算法:裝箱問題的思考
* @author lip
*裝箱問題可以是時間調問題的延伸,當乙個箱子沒有容積限制,那麼就是時間排程問題
*在時間排程問題中:存在兩個可以討論的問題。1.平均最短時間 2.總的最短時間
*這兩個問題都和裝箱問題中問題如此類似。
*//*
* 上面是我理解的裝箱問題,本來是想說揹包問題的
* 揹包問題的描述:有n件物品和乙個容量為v的揹包。第i件物品的重量是w[i],價值是v[i]。
* 求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。
*//*
* 貪心演算法可以解決裝箱問題,也可以解決揹包問題,但是由貪心演算法求出的解的可能不是最優解。
* 如:事實上,作為乙個理性人,我們都是貪心的。當你面對一堆金銀珠寶的時候,你有乙個揹包,你的選擇肯定會是優先選擇價效比最高的珠寶。
* 那麼,從這個角度來說,我們可以用貪心演算法來解決揹包問題,即使不是問題的最優解。但是,這個解卻是乙個理人人的通常選擇的貪心 策略。
*/public
class
pack
; int
box=;
intresult=loadinbox(type.offline, box, weight);
for(
inti=0;i
// /***********0-1揹包問題**************/
// int weight=;
// int value=;
// int c=20;
// int position=loadinpack(c, value, weight);
// int sum=0;
// int sumw=0;
// for(int i=0;i
//
// else break;
// }
// system.out.println("最大的收益為:"+sum);
// system.out.println("有多少空間沒有利用:"+(c-sumw));
} /***********************裝箱問題********************************/
/*** @param type
* @param box 箱子
* @param weight 貨物重量
* @return
*/public
static
intloadinbox(type type,
intbox,
intweight)
} result[i]=j+1
; box[j]-=weight[i];
j=(j+1
)%box.length;
} }
else
if(type==type.online)
//先裝乙個箱子
} } }
return
result;
} public
static
void
print(
intweight,
intresult,
intk)
/*** * @author lip
* 解決裝箱問題有兩種方式,一種是聯機,一種是離線。
* 所謂聯機就是將乙個箱子完全放滿貨物後,再開始處理下乙個箱子
* 離線就是將所有的貨物都讀取進來,按照從大到小的順序將貨物分配給箱子,直到各個箱子都被裝滿
*/public
enum
type
; /**************************0-1揹包問題(貪心演算法)************************************/
/***
* @param c 揹包容量
* @param value 每個物品的價值
* @param weight 每個物品的容積
*//*
* 當使用貪心演算法解決揹包問題時,那麼考慮到貪心策略,就是要保證當前選擇是最好的。
* 那麼另外乙個參考量「價效比」就被引用,p=value/weight
* 一直選擇價效比最高的物品放入到揹包中,直至揹包被放滿
*/public
static
int loadinpack(
intc,
intvalue,
intweight)
} if(pos==-1)
//雖然剩下空間,但是再也找不到合適的了
break
; if
(c>=weight[pos])
else
} return
position;
} }
貪婪演算法執行效果:
離線裝箱:
聯機裝箱:
貪心演算法解決0-1揹包問題:
揹包問題(貪心演算法)
揹包問題 程式8 4 2.cpp 定義控制台應用程式的入口點。揹包問題 貪心演算法 include stdafx.h define maxnumber 20 typedef struct node object float find object wp,int n,float m i 0 while...
貪心演算法 揹包問題
詳細見原帖 我寫的是自己的感悟 揹包問題 有乙個揹包,揹包容量是m 150。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。物品 a b c d e f g 重量 35 30 60 50 40 10 25 價值 10 40 30 50 35 40 30 ...
貪心演算法 揹包問題
貪心演算法 當前最優解 例如在刪除數的乙個例子中,乙個長度不大於240位的整數中,隨機刪除n個數,要求使得剩餘的數 從左到右的,組成乙個最小的整數 貪心步驟 例如 乙個數 1457326 n 4 1 找到當前最大的數 7 刪除 145326 2 找到當前最大的數 6 刪除 14532 3 找到當前最...