資料結構之貪心演算法(揹包問題的思考)

2021-08-04 10:07:07 字數 2937 閱讀 9936

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 找到當前最...