page445.html
来自「wqeqwvrw rkjqhwrjwq jkhrjqwhrwq jkhrwq」· HTML 代码 · 共 120 行
HTML
120 行
<HTML>
<HEAD>
<TITLE>Example-0/1 Knapsack Problem</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<img src="cover75.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/cover75.gif" alt="Logo" align=right>
<b>Data Structures and Algorithms
with Object-Oriented Design Patterns in C++</b><br>
<A NAME="tex2html7417" HREF="page446.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page446.html"><IMG WIDTH=37 HEIGHT=24 ALIGN=BOTTOM ALT="next" SRC="next_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/next_motif.gif"></A> <A NAME="tex2html7415" HREF="page441.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page441.html"><IMG WIDTH=26 HEIGHT=24 ALIGN=BOTTOM ALT="up" SRC="up_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/up_motif.gif"></A> <A NAME="tex2html7411" HREF="page444.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page444.html"><IMG WIDTH=63 HEIGHT=24 ALIGN=BOTTOM ALT="previous" SRC="previous_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/previous_motif.gif"></A> <A NAME="tex2html7419" HREF="page9.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page9.html"><IMG WIDTH=65 HEIGHT=24 ALIGN=BOTTOM ALT="contents" SRC="contents_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/contents_motif.gif"></A> <A NAME="tex2html7420" HREF="page620.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page620.html"><IMG WIDTH=43 HEIGHT=24 ALIGN=BOTTOM ALT="index" SRC="index_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/index_motif.gif"></A> <BR><HR>
<H2><A NAME="SECTION0015120000000000000000">Example-0/1 Knapsack Problem</A></H2>
<A NAME="secalgsknapsack"> </A>
The <em>0/1 knapsack problem</em><A NAME=32321> </A>
is closely related to the change counting problem discussed in the
preceding section:
We are given a set of <I>n</I> items
from which we are to select some number of items to be carried in a knapsack.
Each item has both a <em>weight</em> and a <em>profit</em>.
The objective is to chose the set of items that fits in the knapsack
and maximizes the profit.
<P>
Let <IMG WIDTH=14 HEIGHT=15 ALIGN=MIDDLE ALT="tex2html_wrap_inline68467" SRC="img1818.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1818.gif" > be the weight of the <IMG WIDTH=17 HEIGHT=13 ALIGN=BOTTOM ALT="tex2html_wrap_inline58387" SRC="img77.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img77.gif" > item,
<IMG WIDTH=13 HEIGHT=14 ALIGN=MIDDLE ALT="tex2html_wrap_inline58415" SRC="img85.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img85.gif" > be the profit accrued when the <IMG WIDTH=17 HEIGHT=13 ALIGN=BOTTOM ALT="tex2html_wrap_inline58387" SRC="img77.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img77.gif" > item
is carried in the knapsack, and
<I>C</I> be the capacity of the knapsack.
Let <IMG WIDTH=12 HEIGHT=15 ALIGN=MIDDLE ALT="tex2html_wrap_inline68477" SRC="img1819.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1819.gif" > be a variable the value of which is either zero or one.
The variable <IMG WIDTH=12 HEIGHT=15 ALIGN=MIDDLE ALT="tex2html_wrap_inline68477" SRC="img1819.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1819.gif" > has the value one
when the <IMG WIDTH=17 HEIGHT=13 ALIGN=BOTTOM ALT="tex2html_wrap_inline58387" SRC="img77.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img77.gif" > item is carried in the knapsack.
<P>
Given <IMG WIDTH=114 HEIGHT=24 ALIGN=MIDDLE ALT="tex2html_wrap_inline68483" SRC="img1820.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1820.gif" > and <IMG WIDTH=105 HEIGHT=24 ALIGN=MIDDLE ALT="tex2html_wrap_inline68485" SRC="img1821.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1821.gif" >,
our <em>objective</em> is to maximize
<P> <IMG WIDTH=275 HEIGHT=43 ALIGN=BOTTOM ALT="displaymath68461" SRC="img1822.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1822.gif" ><P>
subject to the constraint
<P> <IMG WIDTH=296 HEIGHT=43 ALIGN=BOTTOM ALT="displaymath68462" SRC="img1823.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1823.gif" ><P>
<P>
Clearly, we can solve this problem by exhaustively enumerating
the feasible solutions and selecting the one with the highest profit.
However, since there are <IMG WIDTH=14 HEIGHT=11 ALIGN=BOTTOM ALT="tex2html_wrap_inline60823" SRC="img563.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img563.gif" > possible solutions,
the running time required for the brute-force solution
becomes prohibitive as <I>n</I> gets large.
<P>
An alternative is to use a greedy solution strategy which
solves the problem by putting items into the knapsack one-by-one.
This approach is greedy because once an item has been put into the knapsack,
it is never removed.
<P>
How do we select the next item to be put into the knapsack?
There are several possibilities:
<DL ><DT><STRONG>Greedy by Profit</STRONG>
<DD>
At each step select from the remaining items
the one with the highest profit
(provided the capacity of the knapsack is not exceeded).
This approach tries to maximize the profit by choosing the
most profitable items first.
<DT><STRONG>Greedy by Weight</STRONG>
<DD>
At each step select from the remaining items
the one with the least weight
(provided the capacity of the knapsack is not exceeded).
This approach tries to maximize the profit by putting
as many items into the knapsack as possible.
<DT><STRONG>Greedy by Profit Density</STRONG>
<DD>
At each step select from the remaining items
the one with the largest <em>profit density</em>, <IMG WIDTH=37 HEIGHT=24 ALIGN=MIDDLE ALT="tex2html_wrap_inline68491" SRC="img1824.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1824.gif" >
(provided the capacity of the knapsack is not exceeded).
This approach tries to maximize the profit by choosing
items with the largest profit per unit of weight.
<P>
</DL>
While all three approaches generate feasible solutions,
we cannot guarantee that any of them will always generate the optimal solution.
In fact, it is even possible that none of them does!
Table <A HREF="page445.html#tblalgsknapsack" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page445.html#tblalgsknapsack"><IMG ALIGN=BOTTOM ALT="gif" SRC="cross_ref_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/cross_ref_motif.gif"></A> gives an example where this is the case.
<P>
<P><A NAME="32337"> </A>
<P>
<A NAME="tblalgsknapsack"> </A>
<DIV ALIGN=CENTER><P ALIGN=CENTER><TABLE COLS=8 BORDER FRAME=HSIDES RULES=GROUPS>
<COL ALIGN=CENTER><COL ALIGN=CENTER><COL ALIGN=CENTER><COL ALIGN=CENTER><COL ALIGN=CENTER><COL ALIGN=CENTER><COL ALIGN=CENTER><COL ALIGN=CENTER>
<TBODY>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>
</TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP></TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP></TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP></TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP COLSPAN=3> greedy by</TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>
<P>
<I>i</I> </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> <IMG WIDTH=14 HEIGHT=15 ALIGN=MIDDLE ALT="tex2html_wrap_inline68467" SRC="img1818.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1818.gif" > </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> <IMG WIDTH=13 HEIGHT=14 ALIGN=MIDDLE ALT="tex2html_wrap_inline58415" SRC="img85.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img85.gif" > </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> <IMG WIDTH=37 HEIGHT=24 ALIGN=MIDDLE ALT="tex2html_wrap_inline68491" SRC="img1824.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/img1824.gif" >
</TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> profit </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> weight </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> density </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> optimal solution </TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 100 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 40 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0.4 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>
2 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 50 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 35 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0.7 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>
3 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 45 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 18 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0.4 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>
4 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 20 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 4 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0.2 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>
5 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 10 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 10 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1.0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP>
6 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 5 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 2 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0.4 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 0 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 1 </TD></TR>
</TBODY><TBODY>
<TR><TD VALIGN=BASELINE ALIGN=RIGHT NOWRAP COLSPAN=4>total weight</TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 100 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 80 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 85 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 100 </TD></TR>
<TR><TD VALIGN=BASELINE ALIGN=RIGHT NOWRAP COLSPAN=4>
total profit</TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 40 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 34 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 51 </TD><TD VALIGN=BASELINE ALIGN=CENTER NOWRAP> 55 </TD></TR>
</TBODY>
<CAPTION ALIGN=BOTTOM><STRONG>Table:</STRONG> 0/1 Knapsack Problem Example (<I>C</I>=100)</CAPTION></TABLE>
</P></DIV><P>
<P>
The bottom line about greedy algorithms is this:
Before using a greedy algorithm
you must make sure that it always gives the correct answer.
Fortunately, in many cases this is true.
<P>
<HR><A NAME="tex2html7417" HREF="page446.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page446.html"><IMG WIDTH=37 HEIGHT=24 ALIGN=BOTTOM ALT="next" SRC="next_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/next_motif.gif"></A> <A NAME="tex2html7415" HREF="page441.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page441.html"><IMG WIDTH=26 HEIGHT=24 ALIGN=BOTTOM ALT="up" SRC="up_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/up_motif.gif"></A> <A NAME="tex2html7411" HREF="page444.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page444.html"><IMG WIDTH=63 HEIGHT=24 ALIGN=BOTTOM ALT="previous" SRC="previous_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/previous_motif.gif"></A> <A NAME="tex2html7419" HREF="page9.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page9.html"><IMG WIDTH=65 HEIGHT=24 ALIGN=BOTTOM ALT="contents" SRC="contents_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/contents_motif.gif"></A> <A NAME="tex2html7420" HREF="page620.html" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/html/page620.html"><IMG WIDTH=43 HEIGHT=24 ALIGN=BOTTOM ALT="index" SRC="index_motif.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/index_motif.gif"></A> <P><ADDRESS>
<img src="bruno.gif" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/icons/bruno.gif" alt="Bruno" align=right>
<a href="javascript:if(confirm('http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/copyright.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/copyright.html'" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/copyright.html">Copyright © 1997</a> by <a href="javascript:if(confirm('http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/signature.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/signature.html'" tppabs="http://dictator.uwaterloo.ca/Bruno.Preiss/books/opus4/signature.html">Bruno R. Preiss, P.Eng.</a> All rights reserved.
</ADDRESS>
</BODY>
</HTML>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?