[导入][原]算法设计与分析2 - 嵌套箱问题

<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CWinty%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"> <link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5CWinty%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_editdata.mso"> <link rel="OLE-Object-Data" href="file:///C:%5CDOCUME%7E1%5CWinty%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_oledata.mso"> <!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing> <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:SpaceForUL/> <w:BalanceSingleByteDoubleByteWidth/> <w:DoNotLeaveBackslashAlone/> <w:ULTrailSpace/> <w:DoNotExpandShiftReturn/> <w:AdjustLineHeightInTable/> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face {font-family:"MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-alt:"MS 明朝"; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"\@MS Mincho"; panose-1:2 2 6 9 4 2 5 8 3 4; mso-font-charset:128; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:-1610612033 1757936891 16 0 131231 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1804762257; mso-list-type:hybrid; mso-list-template-ids:-2029857690 1545267864 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 {mso-level-start-at:0; mso-level-number-format:bullet; mso-level-text:■; mso-level-tab-stop:18.0pt; mso-level-number-position:left; margin-left:18.0pt; text-indent:-18.0pt; font-family:宋体; mso-bidi-font-family:"Times New Roman";} @list l1 {mso-list-id:2131394409; mso-list-type:hybrid; mso-list-template-ids:1924542050 321178628 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l1:level1 {mso-level-text:"%1\)"; mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]-->
二、嵌套箱问题

2 、一个d 维箱(x1,x2,...,xn)嵌入另一个d 维箱 (y1,y2,...,yn) 是指存在1,2,…,d 的一个排列π,使得 xπ(1)<y1 ,xπ(2) <y2, ... , xπ(d)<yd

<!--[if !supportLists]--> 1)  <!--[endif]--> 证明上述箱嵌套关系具有传递性;

<!--[if !supportLists]--> 2)  <!--[endif]--> 试设计并实现一个贪心算法,用于确定一个d维箱是否可嵌入另一个d维箱;

<!--[if !supportLists]--> 3)  <!--[endif]--> 给定由n d 维箱组成的集合 { B1,B2,B3,...,Bn} ,试设计并实现一个贪心算法找出这n d维箱中的一个最长嵌套箱序列,并用nd 描述算法的计算时间复杂性。

 

1)  箱嵌套关系的传递性

证明:

设有 3d 维箱 B1(x1 , x2 , ... , xd)B2 (y1 , y2 , ... , yd)B3(z1 , z2 , ... , zd)B1 可嵌入 B2B2 可嵌入 B3

B1 可嵌入 B2 ,则存在排列π使得:

xπ(1) < y1xπ(2) < y2 ,..., xπ(d) < yd       ——<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>1</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->1<!--[endif]--><!--[if supportFields]><![endif]-->

B2 可嵌入 B3 ,则存在排列θ使得:

yθ(1) < z1yθ(2) < z2 ,..., yθ(d) < zd       ——<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>2</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->2<!--[endif]--><!--[if supportFields]><![endif]-->

   由<!--[if supportFields]><span lang=EN-US style='font-size:14.0pt;font-family:宋体'> eq \o\ac(</span><span style='font-size:14.0pt;font-family: 宋体'>○<span lang=EN-US>,<span style='position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>1</span>)</span></span><![endif]--> <!--[if !supportFields]-->1<!--[endif]--><!--[if supportFields]><![endif]--> 式可得:

xθ(π(1)) < yθ(1)xθ(π(2)) < yθ(2) ,..., xθ(π(d)) < yθ(d)  ——<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>3</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->3<!--[endif]--><!--[if supportFields]><![endif]-->

由<!--[if supportFields]><span lang=EN-US style='font-size:14.0pt;font-family:宋体'> eq \o\ac(</span><span style="font-size:14.0pt;font-family:宋体">○<span lang=EN-US>,<span style="position:relative;top:-2.0pt;mso-text-raise:2.0pt">2</span>)</span></span><![endif]--> <!--[if !supportFields]-->2<!--[endif]--><!--[if supportFields]><![endif]--><!--[if supportFields]><span lang=EN-US style='font-size:14.0pt;font-family:宋体'> eq \o\ac(</span><span style="font-size:14.0pt;font-family:宋体">○<span lang=EN-US>,<span style="position:relative;top:-2.0pt;mso-text-raise:2.0pt">3</span>)</span></span><![endif]--> <!--[if !supportFields]-->3<!--[endif]--><!--[if supportFields]><![endif]--> 可得:存在排列 λ = θπ 使得:

xλ(1) < z1xλ(2) < z2 ,..., xλ(d) < zd

根据d维箱的定义可得, B1 可嵌入 B3 。因此,嵌套箱关系具有传递性。

 

2)  d 维箱的嵌套关系

<!--[if !supportLists]-->    <!--[endif]--> 贪心选择性质 :

对于d维箱X (x1 , x2 , ... , xd),Y (y1 , y2 , ... , yd), 排列 πθ 是分别使 XY 非递减有序的排列,有如下 结论:XY(表示X可嵌入Y)的充要条件是,对任意1idx π(i) < yθ(i)

 

证明 :

      a. 充分性 :

当 对任意1idx π(i) < yθ(i) 时,令 λ = πθ-1, 那么

x λ(i) = x π(θ -1 (i)) < yθ(θ-1 (i)) = yi 即存在一个排列 λ 使得对于 任意1idx λ(i) < yi ,所以 XY

   b. 必要性:

用数学归纳法证明。

当维数为1,XY 可得 x1 < y1 那么 x π(1) < yθ(1) 成立 。

假设维数为 d 时,结论成立,即 : XY时,对于任意1id,有 x π(i) < yθ(i) 那么当维数为 d + 1 时, 对于任意1id+1XY,则存在 λ 使得 :

xλ(1) < y1 xλ(2) < y2 ..., xλ(d) <yd xλ(d+1) <yd+1  ——<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>1</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->1<!--[endif]--><!--[if supportFields]><![endif]-->

先观察<!--[if supportFields]><span lang=EN-US style='font-size:14.0pt'> eq \o\ac(</span><span style='font-size:14.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:14.0pt'>,<span style='position:relative;top:-2.0pt; mso-text-raise:2.0pt'>1</span>)</span><![endif]--> <!--[if !supportFields]-->1<!--[endif]--><!--[if supportFields]><![endif]--> 式前 d, xλ(1) < y1 xλ(2) < y2 ..., xλ(d) <yd

由假设可知,对任意1id,有存在排列 πθ 使得 x π(i) < yθ(i)

:

x π( 1)x π( 2) ... ≤ x π( d)  ——<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>2</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->2<!--[endif]--><!--[if supportFields]><![endif]-->

y θ( 1)y θ( 2) ... ≤ y θ( d) ——<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>3</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->3<!--[endif]--><!--[if supportFields]><![endif]-->

x π(1) < yθ(1)x π(2) < yθ(2) ,..., x π(d) < yθ(d)  ——<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>4</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->4<!--[endif]--><!--[if supportFields]><![endif]-->

此时, πθ 只对<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>1</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->1<!--[endif]--><!--[if supportFields]><![endif]--> 式前 d 项进行排列,并不包含 xλ(d+1) yd+1 。可以将 xλ(d+1) 按大小顺序插入到<!--[if supportFields]><span lang=EN-US style='font-size:14.0pt'> eq \o\ac(</span><span style='font-size:14.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:14.0pt'>,<span style='position:relative;top:-2.0pt; mso-text-raise:2.0pt'>2</span>)</span><![endif]--> <!--[if !supportFields]-->2<!--[endif]--><!--[if supportFields]><![endif]--> 式 ( 设插入位置为 j) ,从而有新的排列 π’ 使得 xi ( 1id+1 ) 非递减有序。

同理,也有 θ’ 使得 yd+1 按大小顺序插入到<!--[if supportFields]><span lang=EN-US style='font-size:16.0pt'> eq \o\ac(</span><span style='font-size:16.0pt;font-family:宋体;mso-ascii-font-family: "Times New Roman";mso-hansi-font-family:"Times New Roman"'>○</span><span lang=EN-US style='font-size:16.0pt'>,</span><span lang=EN-US style='font-size: 11.0pt;mso-bidi-font-size:16.0pt;position:relative;top:-2.0pt;mso-text-raise: 2.0pt'>3</span><span lang=EN-US style="font-size:16.0pt">)</span><![endif]--> <!--[if !supportFields]-->3<!--[endif]--><!--[if supportFields]><![endif]--> 式后 ( 设插入位置为 k)yi ( 1id+1 ) 非递减有序。

因为 xλ(d+1) <yd+1 易知 jk

j = k 时,因为 x m ym ( 1md+1 ) 的对应位置都没有变, 显然 x π’(i) < yθ’(i) ( 1id+1 ) , 所证结论成立。

j<k 时, x1<y1 x2<y2 ,..., xj<xj+1<yj xj+1<xj+2< yj+1 ,..., xk-1<xk< yk -1xk<yk -1 < ykxk+1<y k+1 ,..., xd+1< y d+1

, 对任意1id+1 x π’(i) < yθ’(i) , 所证结论成立。

命题得证。

 

<!--[if !supportLists]-->    <!--[endif]--> 算法实现

由上面所得结论,对两个 d 维箱进行排序后,只要判断排序后两个 d 维箱的嵌套关系就可以得出结果。

-----------------------------------------------------------------------------------------

求两个箱子的嵌套关系的伪代码 :

返回 1 表示 X 嵌套 Y(YX)

返回 –1 表示 Y 嵌套 X(XY)

返回 0 表示 XY 之间无嵌套关系

NEST(X , Y , d):

      Sort(X)     ▹对数组所表示的 d 维箱 XY 进行排序  

Sort(Y)

 

if X[0] > Y[0]

  then for i ← 1 to d – 1

        do if X[i] <=Y[i]

                        then return 0

           return 1    

  else for i ← 0 to d – 1

        do if X[i] >=Y[i]

                     then return 0

           return –1

--------------------------------------------------------------------------------------
<!--[if !supportLists]-->    <!--[endif]--> 时间复杂度分析

NEST() 的主要时间消耗在于排序,使用快速排序时, NEST() 的时间复杂度为 : O(d lgd)

 

<!--[if !supportLists]-->    <!--[endif]--> 算法测试

对应的算法实现 Java 源文件为 NestedBox.java

输入: X(1,6,2,5,9) Y(7,4,8,19,32)

输出 :  Y 嵌套 X

 

3)  最长嵌套箱序列

<!--[if !supportLists]-->    <!--[endif]--> 算法思想

nd 维箱之间的关系用一棵树来表示,其中可嵌套其它箱子的箱子为父节点,被嵌套的箱子作为孩子节点,无嵌套关系的节点为兄弟节点。这样就一个 d 维箱的深度值就是在这棵树中的深度。

<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter"/> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"/> <v:f eqn="sum @0 1 0"/> <v:f eqn="sum 0 0 @1"/> <v:f eqn="prod @2 1 2"/> <v:f eqn="prod @3 21600 pixelWidth"/> <v:f eqn="prod @3 21600 pixelHeight"/> <v:f eqn="sum @0 0 1"/> <v:f eqn="prod @6 1 2"/> <v:f eqn="prod @7 21600 pixelWidth"/> <v:f eqn="sum @8 21600 0"/> <v:f eqn="prod @7 21600 pixelHeight"/> <v:f eqn="sum @10 21600 0"/> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> <o:lock v:ext="edit" aspectratio="t"/> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:30.75pt; height:15.75pt' o:ole=""> <v:imagedata src="file:///C:\DOCUME~1\Winty\LOCALS~1\Temp\msohtml1\01\clip_image001.wmz" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1283445464"> </o:OLEObject> </xml><![endif]--> 深度值的递归定义如下 :

<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:387.75pt;height:38.25pt' o:ole=""> <v:imagedata src="file:///C:\DOCUME~1\Winty\LOCALS~1\Temp\msohtml1\01\clip_image003.wmz" o:title=""/> </v:shape><![endif]--><!--[if !vml]--><!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.3" ShapeID="_x0000_i1026" DrawAspect="Content" ObjectID="_1283445465"> </o:OLEObject> </xml><![endif]--> 只要找出深度最大的节点,然后递归地输出它嵌套的箱子,结果就是最长嵌套箱序列。

<!--[if !supportLists]-->    <!--[endif]--> 贪心选择性质

假设最长 d 维箱序列的一个最优解是 B1 , B2 , …,B(k>1), 其对应的深度值分别为 H1, H2 , …, Hk (H1 > H2…> Hk)

a.H1 为最大的深度值,则说明问题的最优解以一个贪心选择开始。

b.H1 不是最大的深度值,不妨设 H1<Hj (1<jk) 。但 B1 嵌套 Bj 可得 H1 >Hj 。与假设矛盾。所以 H1 为最大的深度值,这说明问题的最优解以一个贪心选择开始。

<!--[if !supportLists]-->    <!--[endif]--> 最优子结构性质

设嵌套序列 B1 , B2 , …,B(k>1) 是问题的一个最优解,各个箱子的深度值为 H1, H2 , …, Hk (H1 > H2…> Hk) 。由贪心选择性质可知 H1 为最大深度值,其余箱子组成的序列 B2 ,B3 , …,B(k>1) 是在所有箱子中去掉 B1 及与其具有相同深度值的箱子后,在剩下的箱子中查找最长嵌套箱序列的一个最优解。因此,最长嵌套箱序列问题具有最优子结构性质。

<!--[if !supportLists]-->    <!--[endif]--> 算法实现

--------------------------------------------------------------------------------------
求最长嵌套箱序列的伪代码 :

B 为存放 nd 维箱的二维数组

Longest(B , n , d):

A 存放各箱子嵌套关系的二维数组 , 下标从 0 开始 , 列数为 n+1.

A[i,n] 表示箱子 i 的深度值

 

      初始化 A 数组

      for i ← 0 to n

           do A[i , n] ← 0

      计算嵌套关系

      for i ← 0 to n – 1

           do for j ← i+1 to n – 1

                    do A[i , j] ← nest(B[i] , B[j] , d)

                        A[j , i] ← – A[i , j]

     递归地修改嵌套的深度值

      for i ← 0 to n – 1

           do for j ← 0 to n – 1

                  if A[i , j] = – 1

                    then addHeight(A , n , i , j)

      查找深度值最大的箱子作为首嵌套箱

      maxBoxIndex findMax()

      输出最长嵌套箱序列

      trace(maxBoxIndex)

--------------------------------------------------------------------------------------

递归地修改嵌套箱的深度值

addHeight(A , n , i , j):

      if A[i , n] = A[j , n]

        then A[j , n] A[j , n] + 1

                 for k ← 0 to n – 1

                   do if A[j , k] = – 1

                          then addHeight(A , n , j , k)

--------------------------------------------------------------------------------------

查找深度值最大的箱子作为首嵌套箱

findMax(A , n):

      max ← A[0 , n]

      maxBoxIndex ← 0

     

      for i ← 0 to n – 1

        do if A[i , n] > max

               then max ← A[i , n]

                        maxBoxIndex ← i

      return maxBoxIndex

--------------------------------------------------------------------------------------

根据深度值最大的箱子 , 输出最长嵌套箱序列

trace(n , maxIndex):

      while A[max][n] > 0

        do seq ← (max+1) + “” + seq

             m ← 0

             for i ← 0 to n – 1

               do if A[max , i] = 1 and A[i , n] >=m

                       then m ← A[i , n]

                                   temp ← i

             max ← temp

      seq ← (max+1) + “
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值