rkki Mäkinen ja Timo Poranen Algoritmit TITOJNKÄSITTLYTITIDN LAITOS TAMPRN YLIOPISTO D 2008 6 TAMPR 2009
TAMPRN YLIOPISTO TITOJNKÄSITTLYTITIDN LAITOS JULKAISUSARJA D VRKKOJULKAISUT D 2008 6, TOUKOKUU 2009 rkki Mäkinen ja Timo Poranen Algoritmit 2. korjattu painos TITOJNKÄSITTLYTITIDN LAITOS 33014 TAMPRN YLIOPISTO ISBN 978 951 44 7733 1 ISSN 1795 4274
!"##""$%" %&'$(")"*+*", -# $"./*0$""%/. 1 2$3%&%($4")/5$6%( &*"'*$% $%"* 7 1 &+*.'%%(!%&.".+* &*"'*$% $(%( 7 1 2$3%&%($4")/5(!.&'* $(%( 8 11 9&))( 4")/5/.#'*( /%$(%( &*"'*$. : 17 -*+%((. %(%"%/ ) 1 7 ;*#$"%"". +**"$+..*(*/$ 1 < =.'*.".+$"* "$%"#&*'%("%$"* : < -%+$""+)!.. 1> <?$(# '** 17 @ 9$ %&''$ */*&*0#$"* 18 A 1 B*0#"* 0* 4*//$"% 7 1 2(** $(%( #40%/ #$("$ 71 11 4(%%" */C#&$" $" 78 17 D%&..""*+*" */C#&$" $" 7: 17 D%/$!.." 0* α β '*&$("* 7: 17 F&*(G4 *(6 H #.(6 < 1< D*$'*//$%%( %"$("))(!%&.".+*" */C#&$" $" < 1< I$./#$". 0))46" <1 1< J%(%%""$%" */C#&$" $" <7 1@ K(6.'"$##(!%&.".+* */C#&$" $%(..(($""%/. <@ 18!!&#'$ #$("$*/C#&$" %$"* <: 18 L!"$ #$("$#(C%/ *" @> 18 ;ID @1 A MN O O PQ 7 9&$//$"%( 0#.''#0%( ')$""%/#(C%/ * @<
7 2%"%& $($"$"%( ))&%//$"%( *."# **""$%( %'+$+*/%(""$.. @: Q N < (."4$( =#&&$$( D&*""$( */C#&$" $ 81 < F#%&$( =##&%( */C#&$" $ 8@ <1 * H $($( *&!$( */C#&$" $ 8, P @ I+..("*$(%( %"$("), @ 4"%()$, @1 I..((*".( +%&'#( 6 %"$(") 0* +*4+*"$ 4"%()$,7 @7 D*/*."%#/.0%( %"$("),@ @< D*&$.".#(C%/ *,, @@?*'**"!*&$.".'%" : OO Q 8 9("&#!$* :< 8 I"**""$%" '##6*. %(%"%/ )" :8 81 ($+%&**/$" '##6$" 0* %(%"%/ )" :, 87 -%!%/$( $+$( '##6*. :: 8< =.'*.".+$$( /$"#$4$(!%&.".+* '##6*. %(%"%/ ) ::, I4%&##6 */C#&$" $" >, -*?%C* */C#&$" $" >7,1 =#("% *&/# */C#&$" $" >@,7 I*".((*$"%"". %"$(")!.. >: : $((*''*$*/C#&$" $%(..(($""%/."%'($$'#$"* < : **'* +#$ * < : ;.&(*."%'($$''* @ :1 -#4'# $"%'($$''* @ : D%&.*/C#&$" %0*, : -$"*( &*(''*., : 9./%&$( '/$ "%'($$''* : :1 -*0$""%/. "*./.'#* > :7 =*"&$$$%( '%&"#/*'.
;) ) #($"% #( "*&'#$"%"". ')"%"")+)'$ ;*!%&%%( /$#!$"#( "$%"#0%(')$""%/"$%"%$ 6%( /*$"#'%( #!$("#0*'#//* /C#&$" $" =#($"%%( #4%$/.'% $"#(* #( ") ')"")) 0# "*$( */*( #!!$'$&0** I.#$"%/"*+$* /%$%$"'$) #+*" %$ %&'$'$ F&**&6$( 0* F&*"/%( #& %($( 0*.$6%( J##6&$G4$( 0* ;* *$*( 7 /%$( H %&C$( 0* ;*&6#$( 8 % ') -%+$"$($( : '$&0*" /C#&$" $%( *(*/#$("$$( '%'$""+)" J&*4* $( 0*.$6%( < 0* I%6C%$G'$( 0* /*0#/%" ( 7 %$"'%" 9&$"$%"$ '*((*""** 4.# $#$6*.# %('$%/$(%( #!!$'$&0* 1 =.." '$&0*//$../.%""%/#( '$&0*" '%'$""+)" */C#&$" $$'*( %&$ %&$"$*/.%$ $$( -.'$0*/"* %6%//"%"))( %((*''#"$%"#$(* *"% *"$$'*(!%&."%$"* %$ $(6.'"$#!%&$** "% /#C*&$" $.('"$#!%&."**"$#" 0* "#6%(()'5$/*'%((*( */'%%" //* #( '%&&*""..."* $*!#"%($ 0* /#C*&$" $.('"$#$6%( # $(*$..'$* 0#$"* 0*"'#* "#$".+*"$ ') "%"))( # a m 0* n #+*" &%**/$/.'.0* a 0 ($$( a 0 = 1 a 1 a 1 = a = 1 a (a m ) n = a mn = (a n ) m a m a n = a m+n. # /#C*&$" $( '*("*/.+.//* %$ #/% %&'$"") ($$( '*("*/.'. 0)"%"))( %&'$"% )"") )$( "%46))(.%$( %$ %&'$'$ *!"##""$"%( %&'$("50%( 4"%6%) # a b 0* c #+*" 1
(#//**..&%!$* &%**/$/.'.0* ($$( a = b log b a log 1 = 0 log(ab) = log a + log b log b a = a log b a log b = b log a log b a = log c a log c b 1 log b a = log b a 1 = log b a 1 log b a = log a b log log n = log(log n) log k n = (log n) k. =%&'$(") a "*&'#$""**..&$("* '#'#(*$/.'.* x 0#//*!)"%% x a?*"**"$ a "*&'#$""**!$%($(") '#'#(*$/.'.* x a I%.&**+$*. *'**+#0* "*&+$"**( 5 "#$".+*"$ n i = i=1 n i 2 = i=1 n(n + 1) 2 n(n + 1)(2n + 1) 6 n 2 i = 2 n+1 1 i=0 n i=0 a i = an+1 1 a 1, 0# a 1 0* n ia i i=0 = nan+2 (n + 1)a n+1 + a (a 1) 2, 0# a 1 7
J F&**&6 *(6 D F&*"/% D&%("$G% B*// ::@ ;B #& %( 9 -%$%&#( - $+%" *(6 I"%$( I%G#(6 96$"$#( ;4% =K; D&% >> 1 I 9+%( #!."%& IG$%(G% D&% :8: 7 = ; J##6&$G4 *(6 ;* *$* $/% >> < - J&*4* 29 (."4 *(6 L D*"*4($' 66$#( %/% :,: @ *0* 66$#( %/% :: 8 /%$( H %&C *(6 9 ;*&6# 66$#( %/% >>@, ; -%$C4"#(! " # =#&C*( $ *. *(( :: : -%+$"$( I%G#(6 96$"$#( D%*&#( 96.G*"$#( >>8 > =*( H %& % 66$#( %/% :,: =%4/4#&( & ' (' )*+ I!&$(C%& :,7 =$G4*/%$G, - &. /% I!&$( C%& :: 1 = D%(""#(%( 0 1 L"*"$%"# ::8 7 I%6C%$G' *(6 D /*0#/%" 66$#( %/% ::@ < I"#&%& '! #!."%& IG$%(G% D&% :,, @ 9 ;*&0*( & 234 IK= :,1 <
@
=$')/$!&$"))( ") )//$%( ))&$""%/( $0*"* +*$( $(".$"$$+$%"$ '.+*$/% **( */C#&$" %0* +#$"*$$$( ($$") *(#* %$ %&'$'$ "#$ $("*#40%$6%( 0#.'#$'$ 0#$//* #( *$(*'$( %.&**+*" # $(*$..6%" % /C#&$" $ #( +#$"*+* $/ *$"* '$$("%)//) ))&%//$%//) **''#"#//* 4 #'*$%( '$"")$%( #40%%( #( #/"*+* %//*$(%( %"") %$ (( %&$ $%/$"") %(.#&$"."*+*"* 1 & % #'*$(%( #40% #( +#$"*+*.#&$""** ))&%//$%) *0** 0* ))&%//$$( *!.+)/$(%$( 9$ %&'$'$ '*$'$//* #40%/ #$("$'$%/$//) '$&0#$"%"." #40%/ *" ")"")+)" () ) +**"$.'%" ;) )( +.#'$ ")) %$"'%) */C#&$" $" '$&0#$"%"**( #40%/ #$("$'$%/"%( $/ *.'$* 0)/ 0$""%/%+)//)!%.6#'##6$//* B*/.""*%* ") )!%.6#'##6$ +#$"*$$$( '))(")) 0#('.( ") )//$%"$ ))&$"%//( /*'%((*( *//$(.'*$%'$ ;)//*$$* *//%0* #+*" %$ %&'$'$ ;.&$(C$( '#(% 0* = *(6# GG% =*G4$(% /C#&$" $ #( 0# %( #40%%" 0#'*$%* "$/*("%%* ))&))+)".#&$"%" "*+*( "#$ $("* *'%/%%( '$')$""%$%"$ =..* "*!*.'%* */C#&$" $ #( -.+.*, "*&'*"%/"*+*" *".((*$"%"." */C#&$" $" #+*" %!)6%"%& $($"$$) L $(*$..'$"* 0* %.&** %"") %&$/*$$* */C#&$" %0* #( +*$( (. %&#$".+* ))&) ;#$**/"* %$ %&'$'$.('"$#$"* /.#((#//$"%( /.'.0%( 0#.'#/"* $//% $"%//%%( #( /$(. %&#$ ".+* ))&) *$''$.('"$#" %$+)" $$ #/% 4 % G#!."* H /% I* #$( #( #/% ** #(C%/ $* 0#$4$( +*"*"**( '//) "*$ %$ 0#"'* %$+)" #/% 4 % #/+* H /% 6%G$6* H /% +**( 4.(#/+* H /%.(6%G$6* H /% ;*&'*"%//**( %.&**+$* #(C%/ $* L/'##( P 1 A 0#'$( */C#&$" $ D)4"'5 A 5""%%//) L/'##( x P 2 G 0#'$( +%&''# L('# G +)&$"%"")+$) k //* +)&$//) L/'##( P 3 S 0#.''# '#'#(*$/.'.0* 9"$ 0#.'#( S %6$**($ L(C%/ $$( P1 /$$""+$) "!$//$$) */C#&$" $"%#&%%""$$* ' '$) #+*" %$ %&'$'$ P %.&**+*" L('# #/% 3 ** */C#&$" $* 0#'* &*"'*$%% #(C%/ *( P D*/0#('# ( &*"'*$% P $%%( './.. *$'** 0* "$/** '.( ')"%"))( *((%"".* */C#&$" $* D*/0#('# P ( &*"'*$% 8
$%%( +)4$("))( './.. *$'** L('# *((%"". */C#&$" $!*&* *46#//$(%( =$"%( *$'* 0* "$/*+**"$.'%" &$$!!.+*" "#$$"**( L(C%/ * P1 #( &*"'%* *"#(!))"5#(C%/ * L(C%/ $//* P2 0* P3!.#/%"**( #( &*" '*$.*/C#&$" $" L(C%/ *"* P3 "$%6%"))( 5 '.$('*!*/0#( *$'** %( &*"'*$% $%%( +)4$("))( './.. # /56%"))( */C#&$" $ 0#('* *$'*+**"$. #( 0..&$ ") )( */*&*0*(..&.$(%( #( /56%"" #!"$ **/$(%( */C#&$" $ #(C%/ *//% P3 *$'$//% #(C%/ $//% %$ ".( (%"* *$'*+**"$.'%( */*&*0#0* 9$ %&'$'$ #(C%/ *"* P2 %$ %6% "$%6%") +#$6**('# % &*"'*$"*!#/(# $%* *0** L(C%/ * P2 '../.. ( D ")6%//$"%( #(C%/ $%( /.#' '**( L/'##( P 0#'$( #(C%/ * 0* A */C#&$" $ 0#'* &*"'*$%% #(C%/ *( P L(C%/ *//* P #(.%$ $"%( %&$'#'#$$* 4 $("*(G% =%&'$"))( "*!*.'%( '#'#* /.+.//* n ;$/*( "%%"* &$$!!.%( n +#$ #//* %$ %&'$'$ "*!*.'%( %$"") $%%( "*&+$""*+$%(.$"$!*$''#0%( "*$ H $""$%( /.'. ))&) "*$ 0#'$(.. #!$+*"$ +*/$""...&% ;$/*("%%"* &$$!!.%( *46#/ /$$* +*/$("#0* +#$+*" #//* %$ %&'$'$ +%&"*$/.0%( /.'. ))&) "$%"( $/.'*(.#&$".'%&"#0%( ))&) */$#40%/ *( '.".'%&"#0%( ))&) "*$ %$()'%//#*$'* %/$ */C#&$" $(.#&$""* $%%( "#6%//$..6%* './.+* *$'* /C#&$" $( A *(*/$( "*&'#$".'%(* #( %/+$"")) '.$('*!*/0#( A /.+.( n.(' "$#(* "*&+$"%% *$'** 0* "$/** 44 0* "*!*.'%* %$( "6"))( 0#4"* **( *!"##""$$* /)&*0* *&+$#$"* 0#"'* $/ *$%+*" $"%( *$'* "*$ "$/*+**"$. ')"")" '.( n '*+** &*0*""* /C#&$" $%( *$'* 0* "$/*+**"$."%( "*&''* /*'% $(%( #(.%$( +*$'%** /%%() &$$" ")) %"") "$%6%"))( '*+.( "!!$ ;)") +*&"%( ))&$"%//))( '#/ % %&'$(")"*!** 0#$* "*&''#0* '%&"#$ $* %$ 4.# $#$6* ;*&'*"%//**(.('"$#$"* f : N R 0* g : N R ;)//5$( ))&$"%//))( f #( O(g) 0# #( #/% ** %//*$%"!#$"$$+$%" +*'$#" c 0* n 0 %"") f(n) c g(n) '.( n n 0 f #( Ω(g) 0# #( #/% ** %//*$%"!#$"$$+$%" +*'$#" c 0* n 0 %"") f(n) c g(n) '.( n n 0 f #( Θ(g) 0# #( #/% ** %//*$%"!#$"$$+$%" +*'$#" c 1 c2 0* n0 %"") c 1 g(n) f(n) c 2 g(n) '.( n n 0,
=))&$"%/ $) #/%+$"* $"%$*&+# %&'%$")!))")$$$( 0# #/%"%""*$$$( %"").('"$#" **+*" +*$( %$ (%C*"$$+$$* *&+#0* ;)//*$(%( #/%". #( ")$( *46#//$(%( $//) *! "##""$$* %&'$("50) ')"%"))( 0*"'#* +*$( &%.&$+**"$."%( 4"%6%) /%%() "*& +$"**( %&'$(")) O(g) 0#"* ')"%"))( 0#'. $//#$('$( '.( 5 Θ(g) #!$$ 96%//) %&'$""$$( f #( O(g).%$( %&'$"))( 5 f = O(g) ;)) %$ '.$"%('**( #/% '% "*+*(# *$%"* 4")..&..6%"* $') #( ") 4.# $#$6* ')$"%/")%) O %&'$( "50) $)/")+$) /*.%''%$"* I* *!)"%% "$%"%('$( 5 Ω 0* Θ %&'$((5$//% ;*&''**( #""*%( //) ))&$"%//" '#/ % %&'$(")"*!** ))&$""%/%+)" '.'$(.('"$#$6%( 0#.''#0* 9$ %&'$'$ %&'$(()//) O(n ))&$"%//))( %//*$(%(.('"$#$6%( 0#.''# 0#4#( '../.+*" 2 ) '*$''$ (%.('"$#" 0#$//% +#$6**( +*/$"* //) #/%+*" %46#" ")"")+)" +*'$#" c 0* n0 '.( -*.%''%%* g(n) = n 2 2n 3 + 4n 2 + n 3 = 2n 3 + O(n 2 ) O %&'$(") "./'$"**( ($$( %"") O(n +#$"*$$$( "*&+$""*%* '#&+*"* 0#//*$( '# 0#.''##( 2 ) '../.+*//*.('"$#//*.""* ")) 4"%6%) %$ #//* '$$((#".(%$"* $') ($ %(# *$(%(.('"$# % #/$$ O %&'$(()//%!)"%+)" %$ %&'$'$ ))((5" f(n) = O(f(n)) '.( #( +*'$# co(f(n)) = O(f(n)) = O(cf(n)) c O(f(n)) + O(f(n)) = O(f(n)) O(O(f(n))) = O(f(n)) O(f(n))O(g(n)) = O(f(n)g(n)) O(f(n)g(n)) = f(n)o(g(n)) #'. '$&0*//$..6%* ')"%"))(!$''. o "* "*&'#$""* **( %$ "$.''** O "* %.&** +*"$ f #( o(g) 0# '*$'$//* +*'$#$//* c > 0 #( #/% ** %//*$(%(!#$"$$+$(%( +*'$# n 0 %"") f(n) c g(n) '.( n n0 9$ %&'$'$ 2n #(.""* o(n %$ #/%?*"**+*"$ ))&$"%//))( "*&'#$""* 2 ) 2n 2 o(n 2 ) ω **( %$ "$.''** Ω * -#C*&$" $( '*("*/.+.//* %$ O %&'$(()( 4"%6%) #/% %&'$"") '.(4*( '*("*/.'. #( ''5")..&%!$ +*'$# ;) ) 0#4".. $$") %"") '*("*/.+.(..((# +*"** +*'$#//* '%&"# $"* ''5")!$%(%!$%( 0* %$ +*'$#$"%( '*("*/.'.0%( /$)'$ %$ 5'))( %'!# (%("$* #/%+** /#C*&$" $( '*("*/.'.* +#$ '.$"%('**( '#&+*"* "#$%//*!"##""$%" %&'$(")"*+*" /$$""+)" /)4%$%"$ &*0* *&+#( ')$""%%%%(?#$6**( %$ %&'$'$ "#6$"** %"") 0# lim n f(n) g(n) = a, :
'.( a #(!#$"$$+$(%( &%**/$/.'. ($$( f(n) #( Θ(g)?*"**+*"$ "*!*.'%%( f(n) lim n g(n) = 0 /$$"" # $(*$.. f(n) #( o(g(n)) 0* "*!*.'%%( f(n) lim n g(n) = # $(*$.. f(n) #( ω(g(n)) $//) '.( L/'##( f(n) = am D#/(# $ n m + a m 1 n m 1 +... + a 1 n + a 0 f(n) #( +#$6**( '$&0#$""** O(n m ) n 1 f(n) a m n m + a m 1 n m 1 +... + a 1 n + a 0 = ( a m + a m 1 /n +... + a 1 /n m 1 + a 0 /n m )n m ( a m + a m 1 +... + a 1 + a 0 )n m. 96%//) #/%+*( ))&$"%/ )( %($ )$%( '#46*( +*'$#" +#$6**( (" +*/$"* %.&**+*"$ c = a m + a m 1 +... + a 1 + a 0 0* n0 = 1 ;*+*//$$* &%.&$+**"$.'$* %$$("+$).('"$#$6%( '*+.+*.4"%0* #+*" %$ %&'$'$ %.&**+*" +*'$# %/$ 5""%%( '#'# %$ +*$'."* &%.&$"*&!%%%%( O(1) /#C*&$" $(%( ")//5$( 5"%"") %$ +#$6* /.'%* '#'#(**( O(log n) /$(%**&$(%( O(n) %$ %&'$'$ #(%" /*0$""%/.*/C#&$" $" O(n logn) O(n 2 ) (%/$5//$(%(.*6&*"$G O(n 3 ) '.."$#//$(%( G. H $G ')")((5//$(%( %())!$%($//) n ( *&+#$//* O(2 n ) %'!#(%("$**/$(%( O(n!)?*$''* *!"##""$%" *$'*+**"$."%( /)&*0*" #+*"'$(.%$( ")&'%$ )" */C#&$" $%( +%&"*$/.!%&."%%" ($$( #( ") #""** 4.# $##( %"") 0#$6%('$( */C#&$" $%(!*4$ *" "*!*.'%" %$$("+)" ')")((5( "$/*("%$* ($$( 4*& +#$( %"") +#$6**( "#$ $* '%'$ ))&)$"%( *$'*+**"$."%(!%&."%%//* 0# */C#&$" $* ".//**( ')"") ))( 4*&+#$( #( #40%/ #$(($( 4%/!!#. ")&'%)) >
!$%($//) ( *&+#$//* +#$ *!"##""$%"$ "%4#'* */C#&$" $ "#$ $* 4%$'#"$ n (#!%* */C#&$" $ +#$ "*&+$"* %(% )( "$/** '.$( 4$"**!$ */C#&$" $ 0* (. %%&$%( */C#&$" $( "*&''.. 0* (. %%&$(%( "* H $$/$.. #+*" 4") ")&'%$") '.$( */C#&$" $( (#!%.!"##""$"%( /)&*0#0%( ')""55( /$$"" % %/'%) %". %"") "./#'%" #+*" &$$!!. *""# $* "#"%.".'%"* $//) &%.&$"*&+% $/ *$"**( 0#('.( "*!*.'%%( /$$""+)(..&%%( *+.//* ;#$**/"* *!"##""$(%( "./# %$ +)/"") )"") '%&&# $"))( */C#&$" $( ')"") " $%") ')")((5( "$/*("%$* $//) +*'$# n0 +#$ #//* ($$(..&$ %"") % /$"")) '*$''$ ')")((5( "$/*("%$* +*"**( "./%+*" *&+#"!"##""$$//% /)&*0#$//% +*$4"#%4"#$$* *(*/#$("$ %(%"%/ $) #+*" '%'$ ))&)$%( "*!*.'%( *(*/$.#&$"%"".0%( #!%&**"$#$6%( "*&'*( /.'. ))&)( /*'% $(%( 0* */C#&$" $%( '#'%%//$(%( *(*/#$("$ %'$ ))&)$(%( *(*/$ "*&+$"%% "$%"#* "*$ #/%".'$* 5""%$6%( 0*'*. $"* 0* % #(.%$( *"% **""$%"$!*4$ *( "*!*.'%( *(*/$* %/+)"$ +**"$+*!** I.#&$"%"".0%( #!%&**"$#$6%( "*&''* *&+# #( $%/%')") /*'%* %$ %&'$'$ $//#$( '.( +%&"*$//**( * **( "*&'#$".'%%( /**6$"".0* "#$$**(.$".""*+$* */C#&$" %0* 0#$6%( "#$ $("*!%&.".. 0#( '.( 4"%$%( #!%&**"$#( "#$"* $%%( /C#&$" $%( '#'%%//$"* *(*/$* +#$6**( ')"")) */C#&$" $%(..(($""%/.( *!.(* $//) 4+$(..(($"%//." '#'%%" +#$+*"!*/0*"** */C#&$" $(!.//#('*./*" #'%%//$"* *(*/$* +#$6** ')"")) 5 $//#$( '.(.." '%$(#" #+*" /$$*( #($."'*$$* ;%4")+)() #( %"$) n */'$#$%"* '#'#(*$/.'."*./.'#"* *&+#* # L x #( "*./.'#* ($$(!*/*."%"**( %(!*$''* "*./.'#*.."#$(!*/*."%"**( *&+# > x ;*!*.'%( '##'$ +#$6**( +*/$"* */'$#$6%( /.'. ))&) n )"%"))( '.+*( */C#&$" $* j := 1 j n L(j) x j := j + 1 1 j > n j := 0 7 j.+* 9"$(") $+$" 0* 1.#&$"%"**( '%&&*( 0* #/%!$%(.#&$".'%%( './.. 0#'$( +*'$#*$ '* /C#&$" $( *$'*+**"$. &$$!!.. $$ &$+$(.#&$".'%&&#$"* D*4$ ** "*!*.' %*.#&$".'%&"#0* #( n 0*!*&4*** "*!*.'%* %'$ ))&)$(%(.#&$".'%&"#0%( /.'. ))&) ()"")$$ #/%+*( (#$( n/2 0#"* %.&*$$ '%'$ ))&)$%( "*!*.'%( *$'*+**"$.'%'$ O(n) ;*&'*"%//**( '%'$ ))&)$%( "*!*.'%( *$'*+**"$."* '.$"%('$( 4$% *( "*&'% $( ;*&'#$""*'##( q "#6%(()'5$"") %"") x #( "*./.'#* L 0* #/'##( Ii "*!*. 0#* x #( "*./.'#(!*$'** i.( #/%"%"**( %"") */'$#$6%( $0*$("$ "*./.'#* #(
"**$%"$ 0*'*.".(." +#$6**( +%&"*$/.0%( /.'. ))&) '%'$ ))&)$%) "*!*.'%* k '$&0#$""**.#6#* k = = q n = n p(i i )i + (1 q)(n + 1) = i=1 n i=1 q(n + 1) 2 n i=1 q i + (1 q)(n + 1) n i + (1 q)(n + 1) = q n(n + 1) + (1 q)(n + 1) n 2 + (1 q)(n + 1) = ( 1 q 2) (n + 1). # "$%6%"))( %"") x #( "*./.'#* " q = 1 ($$( k = (n + 1)/2 # "** %$ %&'$'$ ($$( q = 1/2 k = 3(n + 1)/4. L40%/ *( #$%( *$'*+**"$.'$//%!)"%+)" /%%() %.&**+*" '$('%&"*$%" (&''$))( (5" $0#$". 0* "./#".')'" +#$6**(.#&$""** +*'$#*0** %4"#/*.%%( *$'*+**"$. #( %46#( 0* 4$"** *( 4**&*( *$'*+**"$."%(. * $/.'*( *$'*+**"$. #(.#&$".'%&"#0%( /.'. ))&) '%&"** /#!%".%46#( "%"*.' %( 0* $/.'*( &.(C#( *$'*+**"$."%(. * # $0#$".')' "*$ +*$''*!* 4"%%(/*'. *0*"%//**(.#&$"%""*+*( +*'$#*0** &$$!!. *""* #!%&**"$#( '#4"%%(* #/%+$%( /.'.0%(..&..6%"* ($$6%( %$"") $%%( "*&+$""*+$%( H 6))( $""$%( ")) /.'. %$"'%) ))&)") ')"%"))( ;*&'%!$* ($$( "./#'$* *(#"".* **"*$$$( '$''5'."*((."* ( /#C*&$" $%//*.($" '."*((.!%&$**" G#" )$( "%4 "%%//* 0#* 0#'*$%* #!%&**"$#* 4.# $#$6**( % '.$('*!*/0#( H $""%0) #( ')$"%/")+) #!%&**"$#( "#"%.""* $%'$ -#C*&$" $(%( '."*((.!%&$**"% %")) %//*$%" '%$(#"%'#$%" '#("&.'"$#" 0#$* &*'%("%$"* '##6*"**( 4+$(..&$'$ /.+.$'$ 0#$"* $""%( ')$"%/ /))( %$ %&'$'$ *&$" %%""$$//* #!%&**"$#$//* ;*&'*"%//**( '.+** %$"%"") /# $"./*0$""%/.* L/%"%"**( %"").('"$# %&C% L1, L 2 /# $""** /*0$"%//." /$"*" L1 0* L2 46%'$ /*0$"%//.'$ /$"*'$ *0** O( L1 + L 2 ) =%& '$(") L "*&'#$""** */'$#$6%( /.'. ))&)) /$"** L -$"*( */'.!%&)$(%( $)/"5 %$ +*$'."* %&C% '.".0%( /.'. ))&))( 0#"%( *$'*+**"$.'%"!*4$ ** '%'$ ))&)$%) 0*!*&4*** "*!*.'%* #+*" * **..&../.#' '** $'*+**"$. T(n) +#$6**( %$"")) 6$3%&%($4")/5() T(n) { c 1, 2T(n/2) + c 2 n, '.( n = 1 '.( n > 1.
#&" i, j i = j xi 1 m := (i + j 1)/2; 7 %&C%(#&" i, m #&" ) < m + 1, j).+* -# $"./*0$""%/. 2$3%&%($4")/5( #** T(1) c1 *(#"**( &%.(*%46#'$ /% ** #** $/ #$""** &%'.&$$+$$$( '.".$4$( './.+*( *0*( 0* '*$''%%(..4.( /*'%("**( 2T(n/2) +%& c2 n "*$/." /$"*( 0*'* $(%( 0* 46$") $(%( './.+*( *0*(.( #/%"%"**( %"") n #( '*''#%(!#"%($ ($$( #(C%/ *( 0*'# %(%% "**( =5 4% $( 4.# *"**( %"") ") ) #/%". %$ /#.''** "*&'*"%/.( /%$"") ;*+#$""%%(* #( %$""))) T(n)./0%".*.#6#* %/$ n ( 0* +*'$#$6%( *+.//* ' $('%&"*$(%( "*!* 6$3%&%($4")/5( &*"'*$% $%'$ #( *&+*"* #$'%* &*"'*$. 0* %( 0)/ '%%( +*& $".* *&+*.'%( #$'%%//$..6%"* &+*"**( (" %"") T(n) an log n+b 0#$//*$( +*'$#$//* a 0* b 0* #"%"**( "%4")+)'$ ##$""** *&+*. $(6.'"$#( *+.//* #$'%*'$.( n = 1 ($$(?*'$#( c1 #( $$ #/"*+* +)4$("))( 4")..&$ a 1 log 1 + b = b b '.$( c1 ;%46))( $(6.'"$# #/%". '.( 0* +)$"%"))( %"") T(k) ak log k + b k < n?#$6**( '$&0#$""** T(n) an log n + b. T(n) 2T(n/2) + c 2 n 2(a n 2 log n 2 + b) + c 2n = an log n 2 + 2b + c 2n = an(log n log 2) + 2b + c 2 n = an log n an + 2b + c 2 n. K(6.'"$#"#6$". #/$$ +*/ $ 0# +$$ %'$ '$&0#$"%"".* /*.%'%""* +#$"*$$$( *&+$#$6* /5!)$( /*.%''%%//* an log n + b ;) ) #( *46#//$"* 0# +*'$# a +*/$"**( #!$+*"$ I%/+$ "%"))( $//*$(%( *&+# +*'$#//% a #( *((%""*+* 9!)4")/5 #( +#$ ** 0# an log n an + 2b + c 2 n an log n + b an + b + c 2 n 0 %/$ a c 2 + b/n. #'* #/%"%""$$( %"") n > 1 ($$( +#$6**( +*/$"* a c2 + b. # $$ +*/$"**( b = c 1 0* a = c 1 + c 2 ($$( #( +#$ ** T(n) (c 1 + c 2 )n log n + c 1 %/$ /# $"./*0$""%/.( *$'*+**"$. #( O(n log n). 1
2$3%&%($4")/5( &*"'*$. *&+*.'%%(!%&.".+*//* %(%"%/ )//) */'** /%%() $//) %"") /*'%"**( &*"'*$. 0#$//*$(!$%($//) "*!*.'$//* 0*!&$"))(!))""%/% ))( &*"'*$.( /%$(%(.#"# -5"(%%( &*"'*$.( #$'%%//$.. #( "$%"%('$( "#6$"%""*+* "*+*//$%"$ ')"%"))( $(6.'"$#"* ;*&'*"%//**( %$ %&''$()!$'*/*0$""%/.(.$G'#&" '%'$ ))&)$") *$'*+**"$."* ;)) %$ %&'$) *&+*. %$!%&.".!$%("%( "*!*."%( "."'$ $%%( +**( *$'*$%!**( "$%"## %!$'*/*0$""%/."* D$'*/*0$""%/.*4*( /*0$"%//**( "*./.''# A[1...j] %.&**+*"$?*/$"**( 0*'#*/'$#'$ 0#'$( /*0$"%/"*+$"* /.+.$"* )&0%"%"))( "*./.''# ($$( %"") #*"*./.''# A[1...k 1] $)/")) 0*'#*/'$#"*!$% (% )" 0* A[k...j] $")..&% *" "*$ 4")..&%" */'$#" 1 *"'%"**( &%'.&$$+$%"$ #*"*./.'#$"* A[1...k 1] 0* A[k...j]. *'# #$$( A[1...k 1] 0* A[k...j] +#$6**( "%46).('"$#//*!*&"$"$#( 0#'* %$"%"))( '.+** 1.".(!*&"$"$#( i, j *$'*+**"$. #( O(j i 1). $("%C%&!*&"$"$#( i, j $("%C%&!$+#" */'$# $("%C%& l, r l := i r := j 1 *! A[l], A[r] 7 A[l].alkio <!$+#" l := l + 1 < A[r].alkio!$+#" r := r 1 @ 8 l > r l.+* 1 -$"*( #$". *'#*/'$# +#$6**( +*/$"* #(%//* %&$ "*+*//* I%.&**+** #/%"%"**( ')"%"")+)( %/ /*$"* %(%""%/) %"") %"$"))( "*./.'#( */."* '*'$ %&$..&"* */'$#"* 0* +*/$"**( ($$")..&%!$ # /*0$"%/"*+$* /.'.0* #( +)4% )( '.$( '*'$ ($$( (6!$+#"!*/*.""** *&+#( (#//*.+*( 7.$G'#&" */$#40%/ ** #/%"%"**( (6!$+#".('"$#(!*/*.""*+*( ()$( +*/$".( 0*'#*/'$#(! 1, n O(n log n)" ;#6$"%"**( +)$"% $$() %&$'#$"*!*.'%* %"") $'))( *&+# %$ %$$(( "*. /.'#* 4") '%&"**.%* $( 0* %"") '*$''$ */'.0)&0%"'%" #+*" 4") "#6%(()'5$$) )"%"))( %&'$(")) p(i) $$") "#6%(()'5$6%") %"")!*&"$"$#( 1, n ".#""** #*"*. /.'#" 0#$6%( '##" #+*" i 0* n i */'$#"* ;)//*$%" 0*#" **6**( '.( 0*'#*/'$# #(.. &..0)&0%"'%) (i+1) /*0$"%/"*+$"* /.+.$"* ;#6%(()'5$ $//% %"")..&..6%/"**( 7
.$G'#&" i, j $("%C%&!$+#" */'$#!$+#"$(6% $("%C%& 0*'#*/'$#( $(6%'$!$+#"$(6% (6!$+#" i, j!$+#"$(6% 0 1!$+#" := A[!$+#"$(6% ]. */'$# 7!*&"$"$#(!$+#" k := i, j, <.$G'#&" i, k 1 @.$G'#&" k, j 8.+* 7 D$'*/*0$""%/. /.'. #( "*./.'#(!*$'** #( 1 #""* % "./$$ +*/$".'$ 0*'#*/'$#'$ #( "*. (i + 1) n /.'#( "#$%*!*$'** #/"*+* $")!$%(%!$ /.'. ;) )( "*!*4". *( "#6%(()'5$ #( i ;#6%(()'5$ $//% %"") "*./.'#( %($ )$%)!*$'** #( /*0$"%/"*+$"* /.+.$"* n 1..&..6%/"**( (i+1) /.'. 0* %"") $$") "./%% 0*'#*/'$# #( 1 i ;#$(%( *46#//$.. #( n n 1 %"")..&..6%/"**( (i + 1) /.'. #( "*./.'#(!*$'** 0*!*$'** #( $")!$%(%!$ /.'. ;) )('$( "*!*4". *( "#6%(()'5$ #( 1 i?#$6**( $$ '$&0#$""** n n 1 %/$ p(i) = 1 i n n 1 + i 1 n n 1 = %'$ ))&)$%//% *0*//% **6**( 6$3%&%($4")/5 T(n) = T(n) = I#+%//%"**( (" '**+** { { 2i n(n 1). c 1, n 1 i=1 p(i)[t(i) + T(n i)] + c 2n, c 1, n 1 i=1 2i [T(i) + T(n i)] + c n(n 1) 2n, n 1 f(i) = 1 n 1 (f(i) + f(n i)), 2 i=1 i=1 0#'*!)"%% '*$'$//*.('"$#$//* f.( n > 1 **6**( T(n) 1 2 = n 1 ( i=1 2i n(n 1) i=1 '.( n = 1 '.( n > 1 '.( n = 1 '.( n > 1 ( ) 2(n i) ( ) ) T(i) + T(n i) + T(n i) + T(i) + c 2 n n(n 1) 1 n 1 ( ) T(i) + T(n i) + c2 n = 2 n 1 T(i) + c 2 n. n 1 n 1 )$( 4")/5 #( **"..#"##( T(n) = { c 1, 2 n 1 n 1 i=1 T(i) + c 2n, < i=1 '.( n = 1 '.( n > 1
;#6$"%"**( %"") *&+** *//* **". &*"'*$. T(n) cn log n '.( c #( +*'$# 0* n 2 #( #$'%*.( n = 2 ($$( *&+*.'%(.'**( T(2) 2c log 2 = 2c 4")/5(!%&."%%//* #( T(2) 2 2 1 T(i) + 2c 2 = 2c 1 + 2c 2. 2 1?#$6**( $$ +*/$"* c c1 + c K(6.'"$# 2 #/%". '.( /.'$ +#$6**( '$&0#$""** T(i) ci log i 2 i < n i=1 i=1 T(n) 2 n 1 T(i) + c 2 n = 2c 1 n 1 n 1 + 2 n 1 T(i) + c 2 n. n 1 K(6.'"$# #/%".'%(!%&."%%//* +#$6**( +$$ %'$ '$&0#$"%"".* /*.%'%""* *&+$#$6* /5!)$( /*.%''%%//* 2 n 1 ci log i + 2c 1 n 1 n 1 + c 2n. i=2 L"%"**( ')""55( %&'$(") b = 2c 1 n 1 + c 2n = = = i=2 i=2 I%( *+.//* +#$6**( '$&0#$""** 2c n 1 i log i + b = 2c ( n/2 i log i + n 1 n 1 ( n/2 2c i(log n 1) + n 1 i=1 n 1 i=1 i=n/2+1 ) i log n + b n 1 i=n/2+1 ) i log i + b ( n/2 2c n 1 ) (log n 1) i + (log n) i + b n 1 i=1 i=n/2+1 ( 2c ( ) ( n ( n )) ( 3n ( n )) ) log n 1 n 1 4 2 + 1 + log n 4 2 1 + b ( 2c (n 2 n 1 2 n ) ( n 2 log n 2 8 + n ) ) + b. 4 ;*&'*"%//**( %&$'%%( "%& %0) 2c ( n 2 ) 0* n 2c ( n 2 + n n 1 2 2 n 1 8 4 0* ) I**6**( ( 2c n 2 n 1 2 n ) = 2c n (n 1) = cn 2 n 1 2 ( 2c n 2 n 1 8 + n ) = 2c n 2c (n + 2) 4 n 1 8 n 1 n 8 (n 1) = cn 4. ;)4)( %((%) #( #(($"."". ##$""* **( %"") T(n) cn log n cn + b.( +*/$"**( 4 ($$( c 4c 1 + 4c 2 cn + b 0 ;)//5$( #( T(n) cn log n 4 @
*"'*$"**(..6%//%%( '#46*( 6$3%&%($4")/5 " #/%"%"**( %"") n #(.#"#* 2 k I#+%/"* *//* "#$".+*"$ *((%"".* 4")/5) +#$6**( '$&0#$""** T(n) 2T(n/2) + c 2 n 2(2T(n/4) + c 2 n/2) + c 2 n 2 ( 2(2T(n/8) + c 2 n/4) + c 2 n/2 ) + c 2 n... ;#$"* *//* ")") i '%&"** **6**( T(n) 2 i T(n/(2 i )) + ic 2 n. #'* n = 2 k **6**( %&$"$%"$ T(n) 2 k T(1) + kc 2 n c 1 n + c 2 n log n %/$ T(n) #( O(n logn) //) #/%+** &*"'*$.* #/%"%"**( %"") n = 2 k ;) ) #/%". %$ /#.''** "*&'*"%/.( /%$"") # ($ $"")$( #/%"%"**( %"") T(n) #( '*+*+*.('"$# '."%( &%.&$+**"$. "%( '#46*//* 0#'%%('$( *$(* #( *$*(/*$"* ($$( +#$6**(!))"%//) %.&**+*"$ # n %$ #/% '*''#%(!#"%($ ($$( % #( 0#$6%('$( '*''#%(!#"%($%( +)/$).(' 2 k 1 < n < 2 "$#( k T '*+*+..6%(!%&."%%//* #( ")//5$( T(2 96%//) "#6$"%""$$( k 1 ) T(n) T(2 k ) %"") //% T(2 0#//*$( +*'$#//* k ) c2 k log 2 k c "!)"%% '*''#%(!#"%($%( +)/$) #/%+*//%?#$6**( $$ +*/$"* ))&$"%/ )( n T(n) c2 k log 2 k c(2n) log(2n) = 2cn log n + 2cn.'*$%" +*'$#" 5 n //% %/$!)"%% T(n) = O(n log n) #'* * *(/*$(%(!))""%/ #( *46#//$(%( /%$%"$'$( +#$6**( #(C%/ *( '##( #/%""** #/%+*( #!$+**.#"#* ;*&'*"%//**( 6$3%&%($4")/5) T(n) = { 1, 2T(n/2) + 2, I#+%//%"**( "#$".+*"$ *((%"".* 4")/5) I**6**( '.( n = 2 '.( n = 2 k 0* n > 2. T(n) = 2T(n/2) + 2 = 2(2T(n/4) + 2) + 2 = 4T(n/4) + 4 + 2 = 4(2T(n/8) + 2) + 4 + 2 = 8T(n/8) + 8 + 4 + 2 =... i = 2 i T(n/2 i ) + 2 j. j=1 #'* &%.(*%4"# #( ))&$"%/" *&+#//* n = 2 +#$6**(!.&'* $"* "#$"** k 1 '%&"** I**6**( k 1 T(n) = 2 k 1 T(n/2 k 1 ) + 2 j = 2 k 1 T(2) + 2 k 2 j=1 = 2 k 1 + 2 k 2 = 2 k /2 + 2 k 2 = 2 log n /2 + 2 log n 2 = n/2 + n 2 = 3n/2 2. 8
A ;*&'*"%//**( 6$3%&%($4")/5) { '.( 1, n = 1 T(n) = '.( 2T(n/2) + log n, n = 2 k 0* n > 1. I#+%//%"**( "** "#$".+*"$ *((%"".* 4")/5) I**6**( T(n) = 2T(n/2) + log n = 2(2T(n/4) + log(n/2)) + log n = 4T(n/4) + 2 log(n/2) + log n = 4(2T(n/8) + log(n/4)) + 2 log(n/2) + log n = 8T(n/8) + 4 log(n/4) + 2 log(n/2) + log n =... i 1 = 2 i T(n/2 i ) + 2 j log(n/2 j ). j=0.( i = k = log n **6**( k 1 k 1 T(n) = 2 k T(n/2 k ) + 2 j log(n/2 j ) = n + 2 j log 2 k j j=0 j=0 k 1 k 1 k 1 = n + 2 j (k j) = n + k 2 j j j=0 j=0 j=0 = n + k(2 k 1) ((k 1)2 k+1 k2 k + 2) = n + k2 k k k2 k+1 + 2 k+1 + k2 k 2 = n + k2 k+1 k k2 k+1 + 2 k+1 2 = 2 k+1 k 2 + n = 2n log n + n 2 = 3n log n 2. Q ;*&'*"%//**( 6$3%&%($4")/5) { '.( 1, n = 1 T(n) = '.( 2T(n/2) + 6n 1, n = 2 k 0* n > 1. I#+%//%"**( "#$".+*"$ *((%"".* 4")/5) I**6**( 2 j T(n) = 2T(n/2) + 6n 1 = 2(2T(n/4) + 6n/2 1) + 6n 1 = 4T(n/4) + (6n 2) + (6n 1) = 4(2T(n/8) + 6n/4 1) + (6n 2) + (6n 1) = 8T(n/8) + (6n 4) + (6n 2) + (6n 1) =... i 1 = 2 i T(n/2 i ) + 6in 2 j..( i = k = log n **6**( j=0 k 1 T(n) = 2 k T(n/2 k ) + 6n log n 2 j = nt(1) + 6n log n 2 k + 1 j=0 = n + 6n log n 2 log n + 1 = 6n log n + n n + 1 = 6n log n + 1.,
P ;*&'*"%//**( 6$3%&%($4")/5) { '.( 1, n = 1 T(n) = '.( 3T(n/2) + n 2 n, n = 2 k 0* n > 1. I#+%//%"**( "#$".+*"$ *((%"".* 4")/5) I**6**( T(n) = 3T(n/2) + n 2 n = 3(3T(n/4) + n 2 /4 n/2) + n 2 n = 9T(n/4) + 3(n 2 /4 n/2) + (n 2 n) = 9(3T(n/8) + n 2 /16 n/4) + 3(n 2 /4 n/2) + (n 2 n) = 27T(n/8) + 9(n 2 /16 n/4) + 3(n 2 /4 n/2) + (n 2 n) =... i 1 i 1 = 3 i T(n/2 i ) + n 2 (3/4) j n (3/2) j. j=0 j=0 =.#'*"**( %($( '*4"* 0)/'$ )$") 4"%%(/*'%""*+** 0* n 2 i 1 j=0 (3/4) j = n 2(3/4)i 1 3/4 1 = 4n2 ((3/4) i 1) i 1 n (3/2) j = 2n((3/2) i 1). j=0 )$6%( *+.//* T(n) +#$6**( '$&0#$""**.#6#* T(n) = 3 i T(n/2 i ) + 4n 2 4n 2 (3/4) i + 2n 2n(3/2) i.?*/$"**( "** i = log n ;)//5$( **6**( T(n) = 3 log n + 4n 2 4n 2 (3/4) log n + 2n 2n(3/2) log n = n log 3 + 4n 2 + 2n 4n 2nlog 3 2nnlog 3 n log 4 n log 2 = n log 3 + 4n 2 + 2n 4n log 3 2n log 3 = 4n 2 + 2n 5n log 3. ;*&'*"%//**( 6$3%&%($4")/5) { '.( n = 1 T(n) = 1, at(n/b) + d(n), : '.( n > 1,
'.( a 0* b #+*" +*'$#$"* 0* d 0#'$(.('"$# L"%"**( "%4")+)'$ "#6$"** %"") "*&'*"%/"*+**.#"#* #/%+*( 4")/5( &*"'*$.//* #( %$" k 1 T(n) = a k + j=0 a j d(b k j ), '.( n = b k. ;%& $) a k *(#"**( &*"'*$.( 4# #C%%($%'$ #*'$ 0*. */*.%'%""* %!)4# #C%%($ %'$ #*'$ I#+%//%""*%* 6$3%&%($4")/5(!.&'* $ %(%""%/) **6**( ( n ) ( ( n ) ( n )) T(n) = at + d(n) = a at + d + d(n) ( b b 2 b n ) ( n ) ( ( n ) ( n )) = a 2 T + ad + d(n) = a 2 at + d ( b 2 b b 3 b 2 n ) ( n ) ( n ) = a 3 T + a 2 d + ad + d(n) =... b 3 b 2 b ( n ) i 1 = a i T + b i j=0 ( n ) a j d. b j B.# $#$ *//* %"") n = b k +#$6**( +$$ %$(%( /*.%'% '$&0#$""**.#6#* k 1 a k + j=0 a j d(b k j ), '.( n = b k. ( n ) + ad + d(n) b.('"$#"* d *(#"**( 4 %4 0# d(nm) = d(n)d(m). 9$ %&'$'$.('"$# d 1 (n) = n α #(./"$!/$'*"$$+$%( $//) (nm) α = (n) α (m) α I%( $0**(.('"$# d2 (n) = log n %$ #/%./"$!/$'*"$$+$(%( $//) d2 (nm) = log nm log n log m = d 2 (n)d 2 (m) 96%//) **". "./# +#$6**( +$%/) '$&0#$""** '$('%&"*$%!**(.#"##( 0# "$%6%"))( %"") d #(./"$!/$'*"$$+$(%(.('"$# ;)//5$( #( +#$ ** k 1 k 1 a j d(b k j ) = d(b) k j=0 j=0 ( a d(b) ) j = d(b) k ( k a d(b)) 1 a 1 d(b) = ak d(b)k a 1, d(b) '.( a d(b) ;) )( %$"'%( *+.//* +#$6**( "#6$"** %.&**+* ')""5'%/!#$(%( /*.% T(n) = a! b " { 1, at(n/b) + d(n), n = 1 n > 1 O ( n log a) b, T(n) = O ( n log d(b)) b, O ( n log b d(b) log b n ), >! a > d(b)! a < d(b)! a = d(b)"
.( a > d(b) ($$( a k d(b) k a 1 d(b) #( ;)//5$( #( %/$.( ($$( O(a k ) T(n) O(a k ) O(n log b a ) a < d(b) a k d(b) k a 1 d(b) #( ;)//5$( #( %/$.( ($$(./"$!/$'*"$$ O(d(b) k ) T(n) O(d(b) k ) O(n log b d(b) ) a = d(b) +$..#/%".'%( 0)/'%$")!))""%/) %$ +#$6* "%46) ;)//5$( +#$6**( '.$"%('$( '$&0#$""** k 1 j=0 aj d(b k j ) = d(b) 0* #( k k 1 j=0 1 = d(b)k k = n log b d(b) log b n T(n) O ( n log b d(b) log b n ) ;*&'*"%//**( 4")/5$") 0* T(n) = T(n) = T(n) = { { { 1, 4T(n/2) + n, 1, 4T(n/2) + n 2, 1, 4T(n/2) + n 3, '.( n = 1 '.( n > 1 '.( n = 1 '.( n > 1 '.( n = 1 '.( n > 1. *$'$* 4")/5$) #( a = 4 0* b = 2 0#"%( &*"'*$.( 4# #C%%($(%( #* #( a log n b = n log b a = n /$ 2 )) 4")/5) #( d(b) = 2 < 4 = a 0#"%(?* T(n) = O(n log 4 2 ) = O(n 2 ) "**+*"$ '%'$ )$%) 4")/5) #( /$ ** 4")/5) #(!.#/%"**( 0* d(b) = 2 2 = 4 = a T(n) 0* = O(n log 2 4 log 2 n) = O(n 2 log n) d(b) = 2 3 > 4 = a T(n) = O(n 3 ) *"'*$"**( 4")/5 T(n) = { 1, 2T(n/2) + n log n, '.( n = 1 '.( n > 1. ;)) 4")/5) #( a = b = 2 4")/5( 4# #C%%($(%( #* #( a k = n log b a = n log 2 2 = n..('"$# d(n) = n log n %$ #/%./"$!/$'*"$$+$(%( 0#"%( -*.%""* %$ +#$6* #+%/"** 9!)4# #C%%($(%( #* #( k 1 k 1 k 1 a j d(b k j ) = 2 j 2 k j log 2 k j = 2 k (k j) j=0 j=0 j=0 = 2 k 1 k(k + 1) = 2 log n 1 log n(log n + 1) = n 2 (log2 n + log n).
9!)4# #C%%($(%( #* ))&)) $$ 4")/5( T(n) '*+.+*.46$( T(n) #( O(n log 2 n) ;) )( */*'#46*( */.* *((%".( 6$3%&%($4")/5( &*"'*$. +#$6**( %6%//) %$"%"(!%&."%%//* *("** 4# #C%%($%( 0* %!)4# #C%%($%( #*(. *(*.#6#* k 1 a k + a j d(b k j ). j=0.( 6$3%&%($4")/5 %$"")) &%'.&$$+$%( */C#&$" $( *$'*+**"$."* ($$( 4# #C%%($(%( #* +*"** #*#(C%/ $%( &*"'*$..( './.+** *$'** 0* %!)4# #C%%($(%( #*..4.( /* '%("**( #(C%/ *( 0*'* $(%( &*"'*$.( '#'#* $(%( #$"* './.+** *$'**.(!&$ "))( "%4#"* **( */C#&$ $* #( "$%6%"")+) '.!$ #* ))&)) *$'*+**"$.'%( # %$ %&'$'$ 4# #C%%($(%( #* #( ))&))+) %$ '*((*"* "%4#"** &*"'*$.( '#'#* $"* #$"* +**( */C#&$" $( "%4#"* $%'$ #(C%/ * #( 0*%""*+* #$$( "#$%//* "*+*//* -# $"./*0$""%/.( *$'*+**"$."* '.+** 6$3%&%($4")/5 T(n) { c 1, 2T(n/2) + c 2 n, '.( n = 1 '.( n > 1. ;) )( */*'#46*( %&'$((5$//) #( $$ a = b = 2 0* d(n) = c2 B# #C%%($%'$ #*'$ n **6**( 2 log 0* %!)4# #C%%($%'$ #*'$ n = n k 1 k 1 2 j c 2 2 k j = 2 k c 2 = c 2 2 k k = O(n log n). j=0 j=0 /C#&$" $( "%4#"* $%'$!$")$$!") "%4#"* **( /# $".+*$4%""* ;) ) %$ %/+)"$ '))( #/% *46#//$"* =54% $( 4.# *"**('$( %"") /# $"./*0$""%/. #( *!"##""$ %"$ #!"$ **/$(%( %&))) /**0** /*0$""%/. %(%"%/ $%( /.#'** 96%//$%( %$ #/%./"$!/$'*"$$+$(%( %$ %&'$( 6$3%&%($4")/5.('"$#?*'$#//* %$ #/% -*.%%( +**"$ **.#"#* $//) %$ '.$"%('**( #/% +*$'."."* %!)4# d(n) # = c 2 n c C%%($%( #*( *!"##""$%%( ')"")" $%%( 2 ;) )!$")) /%$%"$'$(!*$''*(*.(' "$#( d +*'$#'%&&#$( +#$6**(.(#4"** 0# &*"'*$.'$ &$$"")) *!"##""$(%( "./# -*.% +#$6**( $$ '$&0#$""**..6%//%%( 4$% *( /%$% )).#6#* %.&**+*( /*.%%( "*!**( T(n) = { a b c! e " 1, at(n/b) + cd(n) + e, O ( n log a) b, T(n) = O ( n log d(b)) b, O ( n log b d(b) log b n ), n = 1 n > 1! a > d(b)! a < d(b)! a = d(b)"
;*&'*"%//**( %$ %&''$() 6$3%&%($4")/5) { 1, T(n) = 2T(n 1) + n, 9&$ n ( *&+#$//* **6**( %.&**+*" 4")/5" '.( n = 1 '.( n > 1 T(n) = 2T(n 1) + n T(n 1) = 2T(n 2) + n 1... T(n i) = 2T(n i 1) + n i... T(2) = 2T(1) + 2.?*/$"**( /*+%("*0$'$ 2 0, 2 1,...,2 i,...,2 n 2 0* '%&&#"**( **6." 4")/5"!.#/$""*$( /*+%( "*0$//* I**6**(..6%" 4")/5" T(n) = 2T(n 1) + n 2T(n 1) = 2 2T(n 2) + 2(n 1)... 2 n i T(n i) = 2 n i 2T(n i 1) + 2 n i (n i) 2 n 2 T(2) = 2 n 2 2T(1) + 2 n 2 2. -*'% *//* () ) 4")/5"!.#/$""*$( 4"%%( **6**(... n 2 n 1 T(n) = 2 n 1 T(1) + (n i)2 i = (n i)2 i. i=0 )$( T(n) #( **"..#"##( 0#"* #( $%+%((%"" 0# %6%//$%( */*'#46*( %$ %&'$) I**6**( T(n) = 2 n+1 n 2 i=0 ;*&'*"%//**( #+%//."* 0#* "%46))( 0#(#!%&)'')$$) #!%&**"$#$"* * **( "$%"#&*'%( "%%%%( 0* 4*/."**( "$%")) '#'# #!%&**"$#0#(#(.#&$".*$'* L!%&**"$#0#(#(.#&$".*$'** +#$6**( *&+$#$6* '$"")$"%( #!%&**"$#$6%(!*4$!$%( "*!*."%(!%&."%%//* )$( **"* +* *&+$# +#$ '.$"%('$( #//* /$$*(!%$ $"$(%( $//)!*4$( "*!*. %$ %4') +#$'**( "#$".* '%&&*"* "#$%%( ;#$(%(!%&$("%$(%( "*!* #( ')"")) '%'$ ))&)$%( "*!*.'%( *(*/$) L(C%/ *(* #( ")//5$( #!$+$%( "#6%(()'5$0*'*. $%( /5") $(%( 1
"* ;*&'*"%//**(!$(#* 0#"* ')$"%//))( T #!%&**"$#$//* 0#"'*.#6#".+*" k (k 0) '."."* 0* 46%") '*!!*/%""* '."."* =$') #( *$'*+**"$. '.( "%46))( m '*+**"$. #( T #!%&**"$#$"* '$''5) '$"")$%( */.(!%&$( "40))(!$(##( 46%(!#! "*$!.4 '.".( *$ T #!%&**"$#(!*4$ *( "*!*.'%( *$'*+**"$. #( m D*4$ *( "*!*.'%( *$'*+**"$. *("** $$ '#'# #!%&**"$#0#(#( *$'*+**"$.'%' $ I%//*$$* O(m 2 ) T #!%&**"$#$"* 0#"'* "*&+$"%+*" *$'** '$''5) %$ ( #!%&**"$#( m m 0#(#* +#$ '.$"%('**( #//* '.$( '$ '*!!*/%.( "%46))( m '*!!*/%""* ($$(!$(##( +$%6))( 4"%%() T #!%&**"$#$"* m */'$#"* =5!#! '.".0* +#$ ")//5$( #//* '#&'%$("**( '*!!*/%""* L!%&**"$#0#(#( *0*("*&+% #( $$ '#&'%$("**( m 2m ;*#$"%"". +**"$+..*(*/$!&'$$ 0#4"* **( '#'# 0#(#( +**"$ *( *0*( *(*/#$ */ /* #!$+*"$ '$"")$$) #!%&**"$#$"* ;*#$"%"".* +**"$+..*(*/$) +#$6**( "*&'*"%//* *$(*'$( '*46%"* %&$/*$%"* '%'%())( * *(*&+#$%"* ()'5'./ *"* 44 4."*'$( #!%&**"$#0#(#( #!%&**"$#"* '#4"$ #( ')"%"")+$) n ' $''5) # #!%&**"$# "*&+$"%% +)4% )( *$'** ($$( ')"") )"5( *$'* 0)) ))"55( # n '$''5) %$ &$$") ($$( ')"%"))( ))"50) "*$ #"%"**( /*$(** # */6# #( /#!.*!#$ "$$+$(%( ($$( 46%( #!%&**"$#( "*#$"%"". *$'*+**"$. #( n.//*'$( T #!%&**"$#//* #( ')"5))( '$''5) ;#$%//* '$'5/ /) *'%"**(!.4 "#$%//* *'%"**( 0#'$(!#! "*$!*((**( % ))"55( #'*!#! '.".0* #( '#&'%$("**( 4")!*/0#( '.$(!.4 '.".0* ($$( ))"5" &$$"")+)"!#! '.".0%( *'* $%%( 46%( T #!%&**"$#( "*#$"%"". *$'*+**"$. #( 4 4 0*"%//**( %"") "$%"#&*'%("%%( 0#'*$%%( "$/*("%%%%( D /$$"" &% **/$/.'. Φ(D) 0#"* *(#"**(!#"%("$**/$'$ #.#&$"%"**( 4%/!!#0* #!%&**"$#$"* ($$(!#"%("$**/$ '*+** '*//$$" #!%&**"$#"!$%(%(")+)"!#"%("$**/$* L!%&**"$#( i "*#$"%"". *$'* ))&$"%//))( 4")/5//) '.( a = t + Φ(D ) Φ(D) a t = Φ(D) = Φ(D ) = "#6%//$(%( *$'*!#"%("$**/$ %((%( #!%&**"$#"* 0*!#"%("$**/$ #!%&**"$#( 0)/'%%( ;*&'*"%//**( #!%&**"$#0#(#* 0#* #( m #!%&**"$#"* -*'%"**( 4"%%( #!%&**"$#$6%( "*#$"%"." *0*" m a i = i=1 m (t i + Φ i Φ i 1 ) = i=1 m t i + Φ m Φ 0, '.( Φ0 #(!#"%("$**/$ #!%&**"$#0#(#( */'*%* 0* Φm %( /#!!.%* ;#6%//$(%( *$'* +#$ 6**( '$&0#$""**.#6#* m t i = i=1 i=1 m a i + Φ 0 Φ m. i=1 # %/$ Φ0 ($$( "*#$"%"".* *$'** +#$6**( ')"")) *&+$#$"*%* "#6%//$"* Φ m 0 Φ 0 Φ *$'** /5!)$( ;) ) #( m 0* '.( *46#//$"* %$ %&'$'$ $//#$( '.( +*/$"**(!#"%("$**/$ ($$( %"") ;) ) +*"**!*(''$$&$( ()'% ") $/ *( /*$(*(#""#* Φ 0 = 0 Φ i 0 i > 0 7
?*/$"**(!$(#%$ %&'$)!$(#(!#"%("$**/$'$ Φ(!$(# )!$(#* #/%+$%( */'$#$6%( /.'. ))&) #!$(#* #( r */'$#"* 0*.#&$"%"**( T #!%&**"$# 0#'* "%'%% k!#! #!%&**"$#"* ($$( a = t + Φ(!$(# ) Φ(!$(# ) = (k + 1) + (r (k 1)) r = 2. =.'*.".+* /$"* #( %$ %&''$ (.'*.".+$"* "$%"#&*'%("%$"* 0#$"* "*&'*"%//**( 0*"'#* "*&'% $( ;*&'#$".'%(* #( %/+%("))!%&$("%$%( +**"$+..*(*/$( 0* "*#$ "%".( +**"$+..*(*/$( +)/$") %&#* & 41 #( "%4")+)() //)!$")) */'$#0#.''#* 0#"* ')$"%//))( #!%&**"$#$//* *GG% x %"$ */'$# x 0#.'#"* $(%&" x /$)) */'$# x 0#.''##( 6%/%"% x!#$"* */'$# x 0#.'#"* I*(*'$&0*#(C%/ * +#$6**( &*"'*$"* "%4#''**"$ ')"") )//) %&$/*$$* H $(**&$!.$"* I%. &**+** "*&'*"%//**( '.$"%('$( #(C%/ *( &*"'*$% $"* 0)&0%") )""5 )( /$('$"%"( /$ "*( *+.//* /'$# %"$"))( /$"*"* ') )//) /$"** /)!$ */."* /)4"$%( /'$#"* /$)"")%) +*& $"*. 6."**( */.'$ $$") %"") */'$# %$ +$%/) #/% /$"** /'$#(!#$"* $%'$ % */.'$ %"$"))( '."%( #!%&**"$#* *GG% L!%&**"$#$6%( '."*((.'$"* #/%"%"**( %.&**+** /$"*( ((%( */'$#( %"$(") "*$!#$"# *'** '$''5) i i */'$#( /$) *'** i + 1 '$''5) 0# /$"*(!$".. %((%( /$)") #( i #!%&**"$# $(%&" x +#$ /$)") x ( $4$( "*4*(* '#4"**( /$"** $/ *( /$)'."*( (.'$* #!%&**"$#( *GG% 4"%6%) +#$6**( $$&")) $/ *$%'$ $4$( "*4*(* '#4"**( x x /)4% )'$ /$"*( */'.* '*$''$.."!%&)'')$"%( */'$#$6%( +*$46#" *'*+*" 46%( '$'5( # /$"*( */'$#$4$( '#46$".+*" +$$""*.'%" 0*'*.".$$+*" '*$''$%( */'$#$6%( '%'%( "* *$%"$ %$ */'$#$6%( 0)&0%"'%//) #/$$ %&'$"") ;) ) #( ')")((5) '.$"%('$( 4 +$( 4*&+$(*$"* ;#$**/"* 0# */'$#$6%( +$$""*."#6%(()'5$6%" ".((%""*$$$( %".')"%%( ($$( */'$#" '*((*""*$$ "$%"%('$( 0)&0%")) +$$""*."#6%(()'5$'$%(.'**( /*'%+**( 0)&0%"'%%( *"'#* #/%"%"**( %"") +$$""*."#6%(()'5$'$) %$ ".((%"* %".')"%%( $&0*//$..6%* #( "."'$"". %.&**+$* 0)&0%"%/4%.&$"$$''#0* % = 0#* %"$"" 0* /$)"" */'$# $$&&%"))( /$"*( */'..( ; 0#* %"$"( 0* $") %6%/")+)( */'$#(!*$'*" +*$46%"**( /$)'%" "%46))( /$"*( */'..( <
0#*!$6%"))( //) +$$""*./*'.&%$"* 0* )$/"%"))( */'$#" /*'.&%$6%(.'**( /*'%+**..&..0)&0%"'%) L"%"**( ')""55( %&'$(") px */'$#( x +$$""*."#6%(()'5$6%//% 0*'*. ** p 0* A (p) 0*'*. **( p /$$""+)//% %"$(")'."*((."%( #6#".*&+#//% '.( ')"%"))( 4%.&$ "$$''** A )&0%"%/4%.&$"$$''#0* +%&&*"**(.%$( #!"$ **/$%%( "**""$%%( 0)&0%"'%%( 0#"* ')"%"))( %&'$(")) 2D # # D%&$("%$%"$ 4%.&$"$$''#0* #( +%&"*$/". %"$(")'."*((."%( #6#".*&+#0%(!%&."%%//* '%'$ ))&)$%( "*!*.'%( *(*/$ L(!""" "#6$"* **( %.&**+*" "./#'%" '*$'$//% 0*'*. $//% p (p) = (p) (p) 2 (p) (p) '*$'$//* 0* 4")..&.. #( +#$ ** +*$( '.( /$"** #( '*'$ */'$#"* "*$ (p) */'$#$//* p x = 1/n x )")((5) #( '.$"%('$( 4.# *"". %"") = "#$ $$ /%%()!*&% $( '.$( ; ;) )!%&.".. $$4%( %"") = ( '."*((..!!%(%% '#4"$ #6#".*&+#**(!*/0#( (#!%* $( '.$( ; ( '."*((. I%.&**+** "*&'*"%//**( /$"*4%.&$"$$''#0%( "*#$"%"".0* *$'*+**"$.'$* L/%"%"**( */.'$ %"") */'$#0#.''# #( '$$("%) " #!%&**"$#0#(#.#6#"..!%/')"))( *GG% #!%&** "$#$"* L!%&**"$#0#(#( S +**"$ *"* *0*"* #+%//%""*%* 4%.&$"$$''** A ')"%"))( %& '$(")) CA (S) A! S C (S) 2C(S). *$''$%( 4%.&$"$$''#0%( *$'*+**"$..#6#".. %$ ") ))+$") 0* ") )) +$") +%&"*$/.$"* /$"*( */'$#$6%( 0* %"$"")+)( */'$#( +)/$//) ;) ))+$) +%&"*$/.0* #( '*$'$//* 4%.&$"$$'#$//* 4") #("* $$"")) $$ ##$""** %"") = 4%.&$"$$''* "%'%% '#& '%$("**( '*'$ '%&"** ($$(!*/0#( %$ ") ))+$) +%&"*$/.0* '.$( 2D ;) ) +#$6**( "#6$"** %&$'%%( 0#'*$%//% */'$#!*&$//% (A, B) = 4%.&$"$$'*( "%'% )" %$ ") ))+)" +%&"*$/." */ '$#$6%( A 0* B +)/$//) &$$!!.+*"!%/')"))( A ( 0* B ( '%'$()$%") 0)&0%"'%") /$"* * /'$#$6%( '%'$()$(%( 0)&0%"!.#/%"**( &$$!!.. $$") '.!** #( +$$ %'$ %"$"" +$$""*.'%".$4$( */'$#$4$( %$+)" $$4%( +*$'."* L/%"%"**( %"") #!%&**"$#0#(#* S #( m '*!!*/%""* *GG% A 0* n '*!!*/%""* *G G% B #!%&**"$#$"* /%$"") /#.''** *""* +#$6**( #/%""** %"") 2D m n. '*!!*/%""* /$"** #'*$%%( */'$# B #( = %((%( ( %$ */'$#"* A %$ ") ))+$) A, B +%&"*$/.0* "%46))( $$ m ") ))+))( +%&"*$/..( /$$"" ( 0* ( 0)&0%"'%( A B +*$4". $(%( ;)//*$$* +*$4"#0* +#$ #//* '#&'%$("**( 2m -*.%%( 7 &*0* #( "$.''* " $") %$ +#$!*&*("** ;) )( ##$""* $%'$ "*&'*"%//**( */.'$ /$"** 0#* #( (%/0) */'$#"* L!%&**"$#0#(#//* S = (ABCD) t #( C (S) = (1 + = 4%.&$"$$'*(.'*$(%( '."*((. &$$!!.. /$"*( */'.$)//5") # /$"* #( 2+3+4)t @
*/.'$ 0)&0%"'%) D C B A ($$( C (S) /%$%"$ +#$ = (4 + 4 + 4 + 4)t = 16t #//* C (S) = t 0* k."*((."%(.4"%%'$ **6**( i=1 i C (S) = tk 2 C (S) C (S) = tk2 t k i=1 i = k2 k(k + 1)/2 = 2k k + 1..( k '*+** ($$(.46% /)4%" '*4"* 0* +*/$"% *//* k "*&!%%'$..&%'$!))"))( $%/$+*/"*$%( /)4%//% '*''#"* ; 4%.&$"$$'*//% %$ +#$6* "#6$"** -*.%%( 7 '*/"*$"* "./#"* ;) ) ()46))( "*& '*"%/% *//* /$"** 0#('* */'.$)/"5 #( A B C D L!%&**"$#0#(#( (D) t "./#'%(* +*$4"*+*" */'$#" D 0* "#$".+*"$!*$''#0**(.""* %$+)" %"%(% '#4"$ /$"*( */'.* L!%&**"$#0#(#( '."*((. #( 10t L!"$ **/$%* "**""$%* 0)&0%"'%) D 0* #+*" /$"*( */.* 0* '."*((. #( (1 + 2)t #( $$ C (S) > 2C (S). I%.&**+** "*&'*"%//**( 6(** $$* */'$#0#.''#0* L"%"**( "%4")+)'$ "#6$"** I/%* "#&$( 0* ;*&0*($( +*4+* "./# 0#'* '#&+** 2D 4%.&$"$$'*( -*.%%* 7 $%/$+*/"*$%//* 4%.&$"$$'*//* L"%"**( ')""55( %.&**+*" %&'$(()" F A (S) X A (S) = C A (S) = m = $/ *$"%( +*$4"#0%( /.'. ))&) $(%&" = 0* *GG% #!%&**"$#$6%( 4"%6%) *'.//$"%( +*$4"#0%( /.'. ))&) '#'#(*$'."*((. $/ *( *'.//$$* +*$4"#0* #!%&**"$#0#(#(!$".. #'* = 4%.&$"$$''* "%'%% +*$( $/ *$$* +*$4"#0* #( X (S) = 0 '*$'$//* #!%&**"$# 0#(#$//* S Q! A!! S! m C (S) 2C A (S) + X A (S) F A (S) m. = 4%.&$"$$'*//* ;#6$".'%* "*&'*"%//**( &$((*''*$( '*4"* /$"** ;#$"* ()$") //)!$6%"))( 0* "#$"* '$/!*$/%+*//* 4%.&$"$$'*//* A -$"#$4$( "%46))( *$(* ") )//%%( * *" #!%&**"$#" )"%"))( /$"#$"* +*"**+*"$ ($ $"'$) = /$"* 0* A /$"*?*/$"**(!#"%("$**/$.('"$#'$ /$"#$* #/%+$%( $(+%&$#$6%( /.'. ))&) $(+%&$#//* "*&'#$"%"**( %/ /*$"* */'$#!*&$* (i, j) 0#('* */'$#$6%( '%'%()$(%( 0)&0%" #( %&$/*$(%( = /$"** '.$( A /$"** /'."$/*("%%* #/% *" /$"*" #+*" "40$) 0#"%(!#"%("$**/$ #( */.'$ > #'*!#"%("$**/$ #( /.'. ))&) ($$( % #( *$(* %$ (%C*"$$+$(%( ;*#$"%"". *$'* *&+$#$ $$ "#6%//$"* *$'** /5!)$( L/'##( i #!%&**"$#( '#4"%%(* #/%+*( */'$#( $(6%'$ A /$"** 0* #!%&**"$#( '. c "*((. A A /$"** -*.% "./%% "#6$"%"".* '.( ()"%"))( %"") = /$"** "*#$"%"". *$'*+**"$. #( %&$ #!%&**"$#$//% %.&**+* *GG% 2i 1 = 2c A 1 $(%&" 2(i + 1) 1 = 2c A 1 8
6%/%"% i = c A 2c A 1 $/ *$(%( +*$4"# A /$"** 1 *'%"". +*$4"# A /$"**?)$""%%( %!)4")/5( #$'%*(!.#/%( "%& $" 0* 2CA **6**( '#/ %"* %($ )$%") (S) m #!%&**"$#"* ;%& $" 0*!.#/%"**( **6**( '*46%"* 0)/'$ )$%") #!% XA (S) F A (S) &**"$#"* ;*&'*"%//**( %&$'%%( '."*'$( #!%&**"$#"* ;*&'*"%//**( */.'$ *GG% #!%&**"$#"* 0#'* '#46$".. A /$"*( $$4%( */'$##( 0#'* #(!*$'** i L/%"%"**( %"") ") ) */'$# #( = /$"**!*$'** k L/%"%"**( %6%//%%( %"") #( ($$6%( */'$#$6%( /.'. ))&) 0#"'* %6%/")+)" %"$"") */'$#"* = /$"**.""* #+*" x %( i 0)/0%) A /$"** ;)") %.&** %"") 4"%$$) %6%/")0$) %"$"$//) */'$#$//* #( k 1 x '*!!*/%""* = /$"*( 4%.&$"$$''* $$&")) %"$"( */'$#( /$"*(* */'..( ;) ) *$4%.""** i!#"%("$**/$(.."#'%( $//) #* $(+%&$#$"*!#$"...""* "#$**/"*..$* $(+%&$#$"* "./%% "$/*//% D#$".+$%( $(+%&$#$6%( /.'. ))&) #( xi 0*..$* $(+%&$#$"* (" '*!!*/%""* " +#$6**( ))&)") "*#$"%"". *$'* = /$"** %&'$(") k 1 xi Φ "*&'#$""**!#"%("$**/$(.."#"* a = t + Φ = k + (k 1 x i ) x i = 2k 2x i 1 = 2(k x i ) 1 2i 1.?$$ %$(%( %!)4")/5!)"%% $//) 4"%$$) %6%/")0$) +#$ %"$"$//) */'$#$//* #//* '#&'%$( "**( i 1 0* k xi i. I%.&**+*'$ "*&'*"%//**( * $"))( = /$"*//% 0#"%( "#6%//$(%( A /$"** *$'* "%4")+)) #( > $/ /%$"%( *$"* +*$4"#* /*'.".))("50%( I% %$ "$%"%('))(.'*$%"$ *' A = 4%.&$"$$''* /$"* +#$ "%46) $/ *$%( +*$46#( +*$( 0#('.( $(%&" "*$ *GG% #!%&**"$#( 4"%6%) $$&")) '%$%( */'$#( *$(* # *( /$"*(* %($ )$%'$ ) $/ *$(%( +*$4"#!#$"** $$ 46%( $(+%&$#( 0#"%(!#"%("$**/$!$%(%(%% A 46%//) /$"*( "%'%?* "**+*"$ A /$"*( *'%"". +*$4"# %$ *'* $"))( = /$"*//%.""* % +#$ '*+*""**!#"%("$**/$* 46%//) K(%&" #!%&**"$#* #( */.'$ "."'$""*+* #('# /$)"")+) */'$# 0# /$"** ;)"%( "#6%//$ (%( *$'* #/% $* /$"#$* #( * * $$!!.%( $$") $4$( '#4"**( A /$"* /$))..6%( */'$#( (" 0#'$( ))&)..$* $(+%&$#$"* I..&$ $//**( ") ) ))&) #( i /$"#0%(!$".. %((%(..6%( */'$#( /$)") ;*#$"%".//% *0*//% a $$!)"%% a i + 1 + i = 2i + 1 = 2(i + 1) 1 = 2c A 1.?$%/) #( ')$""%/% )"") 6%/%"% #!%&**"$#( "*!*. L/%"%"**( '."%( *GG% #!%&**"$#( '#46*//* %"") #!%&**"$# '#46$".. $$4%( A /$"*( */'$##( 0#'* #(!*$'** 0* %"") i ") ) */'$# #( = /$"**!*$'** k 96%//%%( '."%( *GG% #!%&**"$#('$( '#46*//* #/%"%"**( %"") xi #( ($$6%( */'$#$6%( /.'. ))&) 0#"'* %6%/")+)" '%$") */'$#"* /$"**.""* #+*" %( 0)/0%) = A /$"** /'$#(!#$"* $(%( +#$ *$(#*"**( +)4%(")) $(+%&$#$"* +)4%(('%(..&.. #( xi ;*#$"%"".* *$'** +#$6**( (" *&+$#$6* %.&**+*"$ a = k x i i 2c A 1. )$( /*.%%( "#6$". #( +*/ $,
;*&'*"%//**( 0#4#('$( "$%"#&*'%("%%%%( '#46$".+** #!%&**"$#0#(#* L!%&**"$#$6%( "#"%.".'%( '*((*/"* #( &*"'*$%+** "$%6%"))('5 '#'# #!%&**"$#0#(# %".')"%%( +*$ #('# "$%6#* '%&&*//**( +*$( '$ #!%&**"$# 0#'* #(.#&$"%""*+* /#!!..( %((%( '.$( %/+$)) $') #!%&**"$# #( %.&**+* # '#'# #!%&**"$#0#(# "$%6%"))( %".')"%%( *(#"**( 0#(#( "#"%.""*+** */C#&$" $* # $(% */C#&$" $'$ # #!%&**"$#" "$%6%"))( '$ '%&&*//**( #( '%%) #(/$(% */C#&$" $ I*(*'$&0*#(C%/ *( "*!*.'%* # $(% */C#&$" $ +#$$ "#$ $* %$ %&'$'$ ($$( %"") % /*'$$ %&$ */'$#$4$( /$$""+$%( +$$""*."%( /.'. ))&)" %".')"%%( 0* 0)&0%")$$ /$"*( '$$("%))( +$$""*. &%'+%($%(.'**( /*'%+**( 0)&0%"'%%( = 0* ; 4%.&$"$$'*"!.#/%"**( "#$ $+*" #(/$(%!%&$*""%%//* )"%"))( */C#&$" $( A '."*((.'%"* #(C%/ **( P /$$""+)) #!%&**"$#0#(#* I %&'$(")) ca (I) 0* #/'##( #!"$ **/$%( #(/$(% "*$ # $(% */C#&$" $( '."*((. c opt (I) L(/$(% */C#&$" $* A *(#"**( 4 444 G#!%"$"$+% #(C%/ ** P 0# #( #/% ** %//*$%" +*'$#" a 0* b %"") '*$'$//* #!%&**"$#0#(#$//* I #( +#$ ** c A (I) ac opt (I) + b. $/!*$/.''$(%( */C#&$" $ "#$ $$ $$ '*$'$//* 5""%$//) '#&'%$("**( a '%&"** 4$"** $( '.$( #!"$ **/$(%( */C#&$" $ 0#'* +#$ #//* 5 # $(% */C#&$" $ %/$ $//) +#$ #//* %".')"%%( "$%6#* '#'# 5"% 96%//) #/%+*(!%&."%%//* "$%6%"))( %"") = 4%.&$"$$''* #( '$/!*$/.''$(%( */C#&$" $ *(*'$&0*#(C%/ *( "*!*.'%* $/!*$/.''$$) */C#&$" %0* #( /5"(" 5 #($//%.$//% #(C%/ $//% 0#"'* ')")((5( "$/*("%$* +**"$+*" #(/$(% # $(*$..""* ;)//*$$* #+*" %$ %&'$'$ #(%" "5$6%(0)&0%"%/( 0* "$%"#'#(%%(.$"$(4*//$("**( /$$"+)" #(C%/ *" $/!*$/.''$%" */C#&$" $" #+*" ')")((5) ##$""*.".(%%" "%4#''** $'$ '.$(!% &$("%$%( *(*/$(!%&."%%//*!*&%!$(*!$6%"" */C#&$" $" * **( "*!**( '.$( = 4%.&$"$$''* #( ')")((5) /%%()!*&%!$ '.$( ; 4%.&$"$$''* +*$''* #6#".*&+#"*& '*"%/.0%(!%&."%%//* +#$"*$$$('$( #/%""**!)$(+*$"*$"* =$%/%('$$("#$(%( '$/!*$/.''$$$( */C#&$" %$4$( /$$""+)!$$&&% #( % %"") ($$6%( ")" #!!$*.'*.". **( %&$/*$$$( 5""%$$$( =.."%( (% %$+)" +#$$ '*$'$//* *46#//$$//* 5""%$//) #//* +*$( +*'$#'%&"*$%"$ 4$"**!$* '.$( #!"$ $*/C#&$" $ ;$%"#&*'%("%$"* +#$6**( &$"")) "%4#"**..6%//%%(0)&0%"%/4%.&$"$$'#$//* 0#$"* #+%/ /%"**( 0#'*$%( */'$#+$$""*.'%( 4"%6%) ;!$//$%"$ 4%.&$"$$'*"!&'$+)" $$&") ))( */'$#( 0#4#(.%*"$ +$$"*"**( 4%/!# $( "*+#$"%""*+*'$ ;)) '#46** %/+$"%"))( (.'*.".+$$( %/ *60."$(C "$%"#&*'%("%$$$( /$$""+$)!%&.')$""%$") 0* %$"%"))( 0#$"*'$( %$ %&''%0).'*.".+$"* "$%"#&*'%("%$"* $'*$% $(!&$""$$( '%4$"") ))( 4%.&$"$$''#0* 0#"'* "*'*$$+*" "$%"#&*'%("%%( "% 4#''..6%( '%'$ ))&)$%) "*$!*4$ ** "*!*.'%* '.( "$%"#&*'%("%%( */'$#$//* #/% "%"**( #/%+*( '$$("%)" +$$""*."#6%(()'5$6%" %'$ ))&)$") "*!*."* ')"%"")%) #( #(C%/ *(* #!$+*( "#6%(()'5$0*'*. *( /5") $(%( D*4$ *( "*!*.'%( ')""5 +#$ :
"** 0#4"** "#6%//$"* "$/*((%""* 4.#(#!**( *&+$##( '.( "*&'*"%//**( 0#(#* "$%"#&*'%( "%%%%( '#46$".+$* #!%&**"$#$"* D*4$ *( "*!*.'%( *(*/$) **6**( "./#'%'$ '$"$"%( #!%&**"$#$6%(!*4$!$%( "*!*.'$%(. * 0* 4.# $#""* 0)"%"))( (%.. "#'%" 0#$"* #!%&**"$#" *46#//$%"$ "%'%+)" "$%"#&*'%("%%%%( 0* ()$( %4') 4%/!#""*+*" 54%!$) #!%&**"$#$"* 9&$"$%"$ ") ) "./%% %$$( "."'$""*%*.'*.".+$* "$%"#&*'%( "%$"* ;*#$"%".* *(*/$) /*'%"**( '%'$ ))&)$(%( +**"$+.. /$!*4$ *( "*!*.'%( #!%&**"$#0#(#( '$"")$%( #!%&**"$#( *$'*+**"$. +#$ %$ %&'$'$ #//* +%&&*((#//$(%( "$%"#&*'%("%%( */'$#$6%( /.'. ))&))( (.""* "*&'*"%/"*%* "*&!%%'$!$"'$) #!%&** "$#0#(#0* #!%&**"$#$6%( '%'$ ))&)$(%( *$'*+**"$. +#$'$( #//* O(log n) #$*$( # +%//.'$* #( ")&'%)) %"") 0#'*$%( '$"")$%( #!%&**"$#( './.""* * *$'* #(!$%(%!$ '.$( 0#'$( *((%"". &*0* ;)//5$(.'*.".+** "$%"#&*'%("%%* 0#'. *"".+*" +*$'%*" #!%&**"$#" +#$+*" #//* /$$*( 4$"*$"* =.'*.".+$//% "$%"#&*'%("%$//% #+*" "!$//$$) %.&**+*" # $(*$..6%" 9$ "*//%((%"* "$%"#* "$%"#&*'%("%%( "$/*"* +&"?-!..* #/%+*" '#&'%."$%6#" #'*$%( #!%&**"$#( 4"%6%) #+%//%"**( 4 4 4%.&$"$$''** "$%"#&*'%( "%%(..""* $%'$ B%.&$"$$''** #+%//%"**( #'%*"$ # &$$!!. *""* "$%"#&*'%("%%( "$/*"* #'* "$/*"$%"#0* %$ "*//%((%"*.'*.".+*" "$%"#&*'%("%%" ))")+)" "$/** =.'*.".+*" "$%"#&*'%("%%" #+*".%$( 4%/!!#0* "#"%.""** =#+% "# &#(" 4%.&$"$$'*( +*"$(% 0)&0%"!.$"* ')$"%/")%) #( #+% "# &##" ))("5 0#'* (#"** 0..&%'$ %( #/.( 0#4#( +$$ %'$ #( +$$"*"". I% %$ '.$"%('**( #/% "%4#'* "*#$"%".*'**( $%/%) L( ($ $"")$( #/% ** $%/$+*/"*$%(!$"'$) #!%&**"$#0#(#0* 0#$6%( '%'$ ))&)$(%( *$'*+**"$. ")") %(%"%/ )) ')"%"")%) #( +%&&*((#//$(%( #/.0%( /.'. ))&))( *//$ #!%&**"$#0#(# +#$6**(.#6#"** $4$( "*4*(* n #/.$%%( n > 3 n!*&$//$(%(0)&0%"!..4.( %.&**+*"$ "%46))( *GG% #!%&**"$#" 0)&0%"'%) *+*$ $$( 1, 2,..., n ;./#'%(* #!%&**"$#0#(#( */'.#*"* #( +*% *//% +$(#, 1, 2,..., n 2 2!.. 0#'* "%'%% 0#(#( /#!!.#*( #!%&**"$#" '*//$$'$ L!%&**"$#0#(#( '."*((. #( > n 2 %/$ #!%&**"$#$6%( "*#$"%"". *$'*+**"$. #( Ω(n) %%!/* "&%% $6%*(* #( /$$"")) #+% "# &##" ))("55( 4*'.!#/.//* "%4")+)" &#"**"$#" ;*&'*"%//**( %$ %&''$() '.+** < %$"%"")!.."* -)46%"")%) 0..&%"* '#4"$ %"$"")+)) #/.* ")) %$ %&'$) #/. < +#$6**( */ '.!%&)$(%(!.. 0*'** '#/ %%( #*!..4.( %"$"")+)) #/.*!$%(% )" #/." +*%(!.. %"$"")+)) #/.*..&% *" #/." #$'%*!.. 0* "#$"*$%'$ ')$""%/% )""5 )" #/.".+** @ #( %$"%"" +*%( 0* #$'%*!.. $$() "$/*("%%* '.( #//**( /56%"" #/. < B*'.!#/.//* %6%"))( '*'$ #/.* '%&&*//**( 0* 0# #/% *" *'%/%%" "%4 6))( #$'%*//% +*"**+*"$ +*% *//%.#&$"%"**( &#"**"$# +*% *//% +*" #$'%*//% 1> 8
3 4 10 1 9 12 2 7 11 13 5 8 6.+* < 9$ %&''$!.. 9$ %&'$) % %($ )$%" "*+#$"%""*+*" #/." #+*" 7 0* > 0* ($$") /)4"%+)" /$('$" 4*'.!#/.//* #+*" %&$..("$$( I%.&**+*" #/." #+*" : 0* 8 0#$"* '. *"*'$( /)46%" ")%) %.&*"**( +*%!$* /$(''%0) 0#"%( "%46))( &#"**"$# #$'%*//% -#!.'$ 4*'.!#/.//* **+."%"**( %"$"" #/. < 9"$(()( "./#'%(* #/%+*(!..( 0..&$ #( %"$"" #/. 0* %( #$'%* +*" +*%( /*!$ #( #$'%*( +*" +*% *(!..( 0..&$ 9"$"( #/.( #$ '%* +*" +*%( */$!.. */'.!%&)$%)!..* /$$"%"))( #$'%**( +*" +*%!**(!.. 4.( /%4"$%( 0*"'%%'$ 0#"%( %(!*$''* #( ") )//$%"$ ))&)"" 9$ %&'$) % $$ #/. @ /$$"%"))( #$'%*(!..( #/.( 8 +*% *'$ /*!%'$ 3 4 7 10 12 1 9 11 13 2 8.+* @.+*( <!..4.( /$$""+)" +*%(!.. 0* #$'%*!.. '.( %"$"))( */'$#"* < *$''$ /%+$""+)(!..( (#& **/$"!..#!%&**"$#"!%&.".+*" *GG% #!%&**"$##( D.$ 6%( T1 0* T2 46$") $(%( 0#$( #( *46#//$"* +*$( 0#!..( T1 '*$''$ *+*$ %" #+*"!$%(%!$) '.$( '*$''$!..( T2 *+*$ %" ;)//5$( +#$6**(!..* T1 "%46) *GG% #!%&**"$# 0#'* '#46$".. */'$##( 0#//* #(..&$( *+*$( ;)//5$( '%$(%( */'$# "./%%!..( T1 0.. &%'$ 0* %( #$'%* */$!.. 0)) "40)'$ D.. T2 +#$6**( /$)") '%$%( 0..&%( #$'%*'$ */$!..'$ 46$") $(%( #( %$"%"" '.+** 8 /'$#( x.4"%%( "%4")+)!..( 0*'* $(%(!/$" (x) "#"%."%"**( #!%&**"$#//* *GG% (x) 0#'* (#"** */'$#( x!..( 0..&%'$ 0* *46#//$"** 0# *( '. *(!..( */$!..( $& 1
splay T T T 1 T 2 1 2.+* 8 -%+$""+$%(!.$6%( 46$") $(%( &#""* $%( %&$//$%'$!..'$.+**, #( %$"%"" #!%&**"$#( #/% *" +%&$#" x 0)) 0#'#!$%(%!$%( "*$..&%!$%( *+*$("%(.#6#"* *(!..( 0..&%'$ splay tai T T T 1 T 2 T 1 T 2.+*, -%+$""+)(!..( #!%&**"$#!/$" x /'$#( x /$)) $(%( insert(x) */#$"%"**( "%'% )//) #!%&**"$# *GG% (x) # x /5"!.."* %$ $") +#$6* $((% %()) /$)") # x %$ #/%!..*!))" 4*'.!#/'. x )) %"$" ")%) /%4"%%( 0#"* %$ +#$6* %()) 0*"'** %"%%(!)$( #46$"%"**( *GG% #!%&**"$# ")4)( */'$##( 0* (#"%"**( %!..( 0..&%'$ D..(..$ 0..&$ #( */'$#"* x /)4$(()!$%(%!$ "*$..&%!$ */'$#?#$6**( $$ 0*'**!.. '*4"%%( #**( ($$( %"") #*" "./%+*" %(!..( +*% *'$ 0* #$'%*'$ */$!..'$ 0#('* 0..&%'$ "./%% x ' '.+* : split x T T 1 T 2 T 1 T 2.+* : -%+$""+)(!..( #!%&**"$# $(%&" x /'$#( x!#$"# 6%/%"% (x) */#$"%"**( "%'% )//) *GG% (x) D..( 0..&%'$ (#.%%(!#$ "%""*+*( */'$#( x +*%( 0* #$'%* */$!.. 46$"%"))( #!%&**"$#//* 0#$( /'$#(!#$"# /%+$" "+)")!.."* #( %$"%"" '.+** > access x join T T T T 1 2.+* > /'$#( x!#$"* $(%( /%+$""+)")!.."* -%+$"#!%&**"$#( "*#$"%"". *$'*+**"$. n #/.$%*!..* #( O(log n) #'*.." #!%&**"$#"!%&.".+*" *GG% #!%&**"$##( &$$"")) "./#'%( "#6$"* $(%( $//% 1 T
;#6$"."* +*&"%( '$$((%"))( /%+$""+)(!..( 0#'*$%%( #/..( i '$$("%) wt(i) > 0 I#/.( i 44 s i #( */'$#$6%(!*$(# $$() */$!..* 0#('* 0..&$ i #( I#/.( r(i) #( log s(i) 0* "*&'*"%/"*+*( /%+$""+)(!..(!#"%("$**/$ #( %( #/.0%( *"%$6%(. * ;#6$".'%* 4*'.!#/'.*!#/'. 0..&%"* +$$"*""..( */'$##( "*&'*"%//**( '*'$ * '%/"* '%&&*//**( D#"%("$**/$(.."#'%( /*'% $%'$ #( 4.# $#$"*+* 4*'.!#/.( #/.0%( */$!.$6%(.."#'%" '.( "%46))(.'*.""* $#!%&**"$#( '../.+*" &#"**"$#" #'*$%//% '*46%( *'%/%%( #*//% +#$6**( %&$'%%( "#6$"** "#6$".'%( '$"$'#46*" /5"+)" *&"$''%/$"* I/%*"#& *(6 ;*&0*( I%/ *60."$(C H $(*& %*&G4 "&%% 0' 1 1 :,< @< @,@ %"") 0# t #( '%$%( 4*'.!#/.( #*( /$( #/. 0* v #( %( */$( #/. ($$( "*#$"%"". *$'* "#6%//$%( *0*( '$''5) %/$ 4*'.!#/.//* %6%"( *"'*( 0*!#"%("$**/$(.."#'%(. * #( '#&'%$("**( 3(r(t) r(v)) + 1 = O(log s(t) s(v) ). A x y B C (a) A B x y C A x y B z C D (b) A B x C y z D A y x B z C D (c) y x A B C D.+* #"**"$#" 4*'.!#/.//* %"$"")%) #/.* x #'*$%//% "*!*.'%//% #( #/% ** 5 %"&$(%( +*"$(% ;./# **+."%"**( '.( %$ %&'$'$ '.+*( "*!*.'%* (b) 4.# $#$6**( *"%$6%(.."#'%" #/.$* x y 0* z ;#$(%(!%&."*!*. #( % 0#* '*'$ *'%/"* %6%"%) './0%"**( +.#&#"%//%%( +*% *//% 0* #$'%*//% '.+* (c) 9&$'%%( #( +$%/) ')$"%/")+) % "$/*((% '.+* (a) 0#* 4*'.!#/.(!$".. #(!*&$"#( 0* '*'$ *'%/"* '%&&*//* %"%(% 0* $%( /$)'$ 4*'.!#/.//* #( '$ /$ ))&)$(%( )& ) B*'.!#/'.* %6%"%) #/.0%( &##/$" +*$4".+*" ($$( %"") /*'%""*%* '#'# 4*'.!#/.( '."*((..'**( "./%+*" t v +*$( 0..&%( *"% r(t) 0* %"$"")+)( */'$#( *"% r(v).$6%( 4*'.!#/.( #/.0%( *"%$6%(.!$".%*. *"*!#$ P n! t" (v) 3(r(t) r(v)) + 1 = O(log s(t) s(v) ). -*.%%"* @ %.&** %"") '*$''$%( "*+*(# *$"%( /%+$""+))(!..4.( '#46$".+$%( #!%&**"$#$6%( *GG% $(%&" 6%/%"% 0#$(!/$" "*#$"%"". *$'*+**"$. #( O(log n) -*.% @ #( +#$ ** '*$'$//*!*$(#0%( wt(i) > 0 +*/$((#$//* ;*&'*"%//**( "$/*((%""* 0#* m *GG% #!%&**"$#"* '#46$"%"**( /%+$""+))(!..4.( 0#* #( n #/.* 0* 0#'*$ %( #/.(!*$(# #( 1 ;)//5$( #/.(..&$( *46#//$(%( '#'# #( s+ 0*!$%($( = 1 n 11 z
*46#//$(%( '#'# #( s -*.%%( @.'**( 46%( #!%&**"$#( "*#$"%"". *$'* #( = 1 n '#&'%$("**( a = 3(r(t) r(v)) + 1 = 3(log s(t) log s(v)) + 1 3(log 1 log 1 n + 1) = 3 log 1 n + 1 = 3 log n + 1. D#"%("$**/$!$%(%(%% #!%&**"$#0#(#(.#&$".'%( *$'*(* '#&'%$("**( Φ = n (log s + log s ) = i=1 n log n = n log n, j=1 0#"%( #!%&**"$#0#(#( "#6%//$(%( *$'* #( '#'%$("**( a + Φ = m(3 log n + 1) + n log n = O((n + m) log n + m). # 46%( #!%&**"$#(!*4$ *( "*!*.'%( *$'*+**"$. #/$$ O(logn) '."%( #( "$ /*((% %$ %&'$'$?-!.$6%( '#46*//* #/$$ #!%&**"$#0#(#( '."*((. O(m log n) # $$ "*&'*"%//**( "*&!%%'$!$"'$) #!%&**"$#0#(#0* #( /%+$""+)!.. 4") "%4#'* '.$(?-!.. ;)//5$( ($ $"")$( '%&"#0*(* #/%+*( "%& $( n +*$'.". *!"##""$%%( *$'*+** "$.'%%( 4)+$))?*/$"% *//* #/.0%(!*$(#" %&$ "*+#$( +#$6**( -*.%%"* @ 0#4"**.$"*'$( $%/%( '$$("#$$* "./#'$* -%+$"#!%&**"$# #( *(*/#C$(%( #+% "# &#(" 4%.&$"$$'*( '*(* -.#((#//$(%( *& +*. #( $$ %"") 5 /%+$""+)"!.." #/$$+*" '$/!*$/.''$$) ;)") ( 6(* $G #!"$ */$" '#(0%'"..&$* %$ '.$"%('**( #/%!""" "#6$"* **( ;)) */*'#46** "*&'*"%/"*+* "$%"#&*'%((% ( % 4 '% 4%*! "#"%.""**!&$# &$"%%""$0#(#( ;%4")+)() #( //)!$")) '#'#%/ ** *((%".(!%&.0#.'#( */'$#+$%&*$"* #* 0#.''#0* 0*.#&$""** ($$//% %.&**+$* #!%&**"$#$"* 6%/%"% $( h!*/*."* #*0#.'#( h!$%($ )( */'$#( *&+# 0*!#$"*!$%($( */'$# 0#.'#"* $(%&" x, h /$)) */'$# x #*0#.''##( h %/6 h1, h 2 /$)) '*$''$ #*0#.'#( h2 */'$#" #*0#.''##( h1 0* ".4#* h2 %') *'% (.// h.#6#"* "40) #*0#.''# 0#('* ($ $ #( h #'*$(%( 0#.''# %$"%"))( H $(**&$!..(* 0#('* 0#'*$%* #/.* #( */'$# 0#('* *&+# #(!$%(%!$ '.$( '*$''$%( %( 0)/'%/)$"%( *&+#" **( 0..&%* #( *$(* %(!$%($( */ '$# F$(**&$!..( 4 4 4 '."."**( 0..&%"* */'*+** #$'%$"* ##$""$ $* %.&**+**!#/'.* +*"**+*"$ % 4 */'** 0..&%"* 0* %.&** +*%!$* ##$""$ $* 17