!#"!$!%'&(&*)!+!
,.-0/2143514687914:;=<><>?
@BADCFEGHJI KMLONPRQ.I KML
@BSTVUXWZY\[]C_^'G`2acbXad[fehgji.klad[dm!LjnZK5oZNpK\qVPdq5H5LrsCFTJTVY\TtPRLJI KML5ucIwvyY\x zZYMT|{~}J[E.adTm€L4nZK5LZN
nMnMQ\H4n5nMn5njmM.‚ƒ…„4b]Y\†>YMT{kˆ5‡ [XadTVUskˆ…‡ r‰YZŠ‹bXad[!PdLVI K5L5ucI
@BŒfYZŽ'=Y\‡ TJ^Ž9Yx bXadT4b]Y\‘adTGoMLVI
@B{~acblgj^5UX^M[’Y\‡ TVUXaˆ[Rm4“~A”vOGjK–•—Q\qOŽm.q˜•KMoŽmJ™#•|q5H!ŽmVšœ›!GJš•—Q\qOŽm.žhš•q5HOŽI
@BvŸkˆYM‡ _ŽJ‘aRE.aˆ ¡G~¢J£\¤=¥Z¦¨§\©«ª‹¬R¤=£!YMT4bXad‚zjTJCFTJ^4Y\[DŽ9Yfx ­ˆ®‰®Shq\N¯iJ FY5EI9ŒfYMTŠˆY\x [UXz4[]CFW’Y#Ž9Yx iYMx EJY
U¨C°E.5[XTVYy.‚ƒfbXaˆjbXaˆT±‘0YMx U¨bXa#zj}JTJTVY ¡Y5‡ UXY5U
}.b]YMTfŠ¨M‡ [U¨bXM[]CFTJ^5UX^M °YMUdI€ST4bXaR‚z4TVC_TJ^4Y\[œU¨5‘
C_T4b]a€}JŽJŽ.Šsgj F _ad[E.acbXb]Yzj[]Y’W–z5M‘‘aˆ[Y\b¨b”i'aRU¨ °Y\^Mb]Y5Uˆ²
³ M‡ []aˆ ¯YM‡ UXTJC_TV^5U]Y\T4bXaR‚z4TVC_TJ^4Y\[5‘EJY\b]Y5Ulb][X}Jz4b]}J[Xad[DCvhYMUXzMad _ ¡mJY’Wy{~[]M[”{klaˆ[]TJaˆ[
@´„jzj[XCFW–blg.E. FC_^Mb”j‚ƒ…E.C°UXŽ'5TJaˆ[YOŽ'Y\ŽJŽ=aˆ[]acbŽ9Y#x aˆb¨b ¯Y\‡ ‘ŽJ FC_^MbhUdY\‡ b¨bdI
@B{œM‡ [‰k¨YOWZY\[‰klaœTjgy}JŽJŽV^MC_Š‹bŽ9Y#x T4g4bXbiJ FY5EI
@´„jzj[XCFW˜adTVEJYMU¨b”Ž9Y#x aˆT…UXCFEJYY’W˜Ž'Y\ŽJŽ=aˆ[]acbRI
@Bµ…¶'·¹¸»º
½J¼ ¾¿DY\ F °Y#UXWZY\[”UXz’Y#‘\b]C_W5aˆ[YMU~WY\‡ ¡²
@B`2'YM‡ TJ^5Y’W.E.[Y\^zZYMT
^5adU>Š¨5‡ [MT5‡ E.CF^\b Y\x TJ^4YJmˆz5M‘ŽJ FCF‚ˆaˆ[YME.a2ad _ Faˆ[4Ulb][X}Vz5b]}J[]aˆ[YME.a ¡4‡ U¨TVC_TJ^4Y\[RI
@BÀg.‚zZY!b]C_ F ¡²
P
PMI”ST4b]YM^Y\b¨b!E.} URYZ‡ bXbXad[CFT ad _ad‘aˆT4bXadT qVmKVmQ.mŸPMm™yacbXb
aˆŠ‹bXaˆ[€aˆb¨b–rsCE.adTJTVYM[E.TJCFTJ^4uC
Š¨M‡ k¨Y\TVEJaœEVYZb]Y5Ulb][X}Vz5b]}J[]aˆ[€rs‘ƒVY–U¨b]YMTVEJY\[EJYM _^5M[]C b]‘#ad[XT'YœŠ¨M‡ [CFTVURYZ‡ bXbXTJCFTJ^4u
r»Y4u˜žYMTJ _CF^\biVC_TYM‡ [¨bURM‡ z4bX[’YM‡ Em.}.b]YMTiVYM FYMTVUXaˆ[]C_TJ^'I~r¨PˆŽ'u
rsi'u„jŽV FY’g4bX[’YM‡ EIDr‰K\Ž'u
r»‚du±r¡Q.m q4u¯N¡bX[’YM‡ EI M‘ C_ƒ9YMx ^Y\b¨b€CE.aRUXU]Y˜b][RY5‡ E ƒ'Y\[€Y\ F FYCFTJ[XaTJ.E.ad[œ‘#ad _ °Y\T0Q.‚ƒ q
iVYM[XTI2Sh _ °Y€ ¯M‡ W _CF^M^5aˆ[Ž9YOx UXYM‘#‘–Y€E’kl}VŽyU5Y€x bX[’YM‡ E.aˆbY\‡ [Ž=aˆ[XŠsaˆz4b9i'Y\ °Y\TVUXaˆ[YZbRIžY\[‰kla
TJ.E# °Y\^M[Y\[‘aˆ F FYMTPD.‚ƒK
aˆ Faˆ‘adT5bRm\.‚ƒ!b][RY5‡ E.acbŸƒVYM[adT#URM‡ z4b][RY5‡ EJU¨ad^MadTVU¨zZYMŽOU¨5‘
^5aˆTJad[]YM _C°U¨ad[]YM[~EJacbiJCFTY\‡ [Y#Ud5‡ z5b][RY5‡ E.acbUˆI”r‰K\Ž'u
r»EVuvhadY\Ž r»aˆT0WZY\TV _CF^…iJCFTY\‡ [ ¨‘C_TJN¡ƒJaRY\Ž UXM‘ FYM^M[Y\[€‘C_T'UlbYaˆ Faˆ‘aˆT4bXaˆbC[]\b]aˆT'ucI
r‰K\Ž'u
C_b]Y–ƒj}J[hbX[’YM‡ E.adT…i4gj^5^5U”}JŽVŽfUlb]aˆ^–Š¨5‡ [U¨bXaˆ^yacŠ‹bXad[hWZY\[‰kla!CFTVURYZ‡ b¨b]TJCFTJ^˜.‚ƒŠ¨M‡ []zj FYM[]Y#WZYME
U¨5‘ ƒYM‡ TVE.aˆ[R² r‰Y5u~[’YM‡ ‚z5aˆ[DE.acbhE..‚zyY\b¨bhE.}[]C bY\[E.aˆbhU¨ F}.bX^5C_ _bXCF^5Y#iJCFTYM‡ []Y#Ud5‡ z4bX[’YM‡ E.aˆbdI
Q.I”SWj^'5‡ [”M‘W’YM[¨bj‚ƒaˆb¨bY’WyŠ¨M‡ k¨Y\TVE.a€ŽYMx U¨b4Y\x adTVE.adT8YM‡ [hU]Y\T4baˆ F _ad[”Š»Y\ °UXz5bR
² 9TVEJY5UlbhUXWZY\[
‘adEzM5[X[]aˆz4b‘MbXCFWMaˆ[]CFTJ^^M.Ejb]YM^MaRUˆI
r»Y4u ‘aˆT–Y\ F^M5[XC_bX‘ ƒ'Y\[E.adTY5U¨gj‘Ž.b]\bXC°UXz’Yœz5M‘ŽJ Fac.C_bXacb]aˆT rlP’uŸU5Yx bY\[9E.adT–Y\ F b]CFE
FC_zZY Y\x TJ^#b]CFEYZbXbac.aˆzjW5aˆ[Y!5Y’W.UXacbXbDCFTVEJY\b]YVIDr¡QZŽ'u
rsi'uvc‡ k¨E.adTŽYx acb¨biVC_TYM‡ [¨bURM‡ z4bX[’YM‡ Ey‘adE TVjEJaˆ[!Y\‡ [YM _ _bXC°E rs FM^ ucIr‰Q\Ž'u
r»‚dueacbh^=Y\‡ F _ad[”Y\ F b]CFEYZbXb rs FM^ u
• rs FM^ u«Ir¡QZŽ'u
r»EVuvc‡ k¨E.adTŽYx acb¨bOr¡Q.m q4upN‰b][RY5‡ EyUXM‘ °Y\^5[]YM
[ aˆ Faˆ‘aˆT4bOYM‡ [Y\ F b]CFE rs FM^ u«Ir‰Q\Ž'u
rsaRuŒfYMT´zZYMT UXM[XbXad[]Y…aˆb¨b–Š¨YM‡ b–Ž9Y x bXC°E.aˆT r œ FM^ uOC”‘aRE.aˆ _b]YM ”^MaˆTVM‘ YZbXbŠ¨M‡ [Ulb
URYZ‡ bXb]YœCFT˜E.aˆ‘acb¨bacŠ‹bXad[acbXb9CVadT–U¨zjCFŽJŽJ FCFU¨b]YVmM.‚ƒ–U¨aREJY\TŽJ F.‚z’Y
}.b~E.aˆ‘CJM[E.TJCFTJ^
Šs[jY\x T}JTVEJaˆ[UlbY[YMEJaˆTyCU¨zjCFŽJŽJ FCFU¨b]YMTIr‰Q\Ž'u
KJIwr»Y4u ³ M‡ k¨Y\T'E.a€ŽJ[]M^M[Y\‘tƒVYM[U¨5‘ CFTVEJYZbYacbXb”Š¨Y\‡ _byY’W˜ƒJad bY\ ¡I
!
#"$%
&(')*#$%
+-,$!+/.. $
"0"$. %1
&2'3465784,2#9:4.. "$#"$.
<
' ='0"
;4
žC_ FzMadT Y\‡ [ N¡z5M‘ŽJ Fac.C b]acb]aˆT0ƒJ4U!ŽJ[]M^5[]YM³ ‘#‘aˆb!}.b¨b][Xg.‚z4b#UXM‘ Šs}JTJz4bXCFMT´Y’W m
¯Y\‡ TJ^4E.aˆT–ƒV5UCFTVEJY\b]Y\Š¨Y\‡ _bXacb?>Œ…\b]C_W5aˆ[YJ² 5‡ [Šs}J F 'Ž='YM‡ TJ^OUXzZY N¡z5M‘ŽJ Fac.C_bXacb]aˆT
WZY\[Y#aˆT XUXzZY\[]Ž!}VŽJŽVUXz’Y\b¨b]TJC_TV^VIhr‰K\Ž'u
rsi'u ³ M‡ k¨Y\T'E.a€ŽJ[]M^M[Y\‘tƒVYM[U¨5‘ CFTVEJYZbYacbXb”Š¨Y\‡ _byY’W˜ƒJad bY\ @$A=I
B &C/D
* 1E AF(
!
$G IH A 1
&(')*4J%
:4, A :4.. GK4%
&(')*#$%
+-,$!+/.. GK L/..1
&(')*4J%
:4, A :4.. $
6M%N
H OG;4P% (
LQ..-4
GK;42?RRN
<
<
' ='!
<
žC_ FzM adTfY\‡ [9YM _^5M[]C b]‘#adTVU ³ N¯zMM‘ŽJ Fac.C_bXaˆb9}.b¨b][Xg.‚z4b9UXM‘ Šs}VTJz4bXCFMTyY’W€Š¨YM‡ b]acbU9U¨bXM[XN
Faˆz .‚Sƒ A?>Œ…MbXCFWMaˆ[YJ² 5‡ [Šs}J _ .Ž='YM‡ TJ^UXzZY N¯zM5‘ŽJ _aˆ.C b]acbXadTOWZY\[YaˆT ]U¨zZYM[XŽ
}JŽVŽVU¨zZY\b¨bXTVC_TJ^'Ihr»KMŽ'u
r»‚du Sh‡ [˜E.acb–zM5[X[]aˆz4bYZb¨b–ŽJ[]M^5[]YM‘‘#aˆbUXM[XbXad[]YMT[ ?> ‘(k¨YJm~‘\bXCFWMad[]YV² ‘ TJa¨kcm
FMzZY\ FC°U¨ad[]YOŠsaˆ FacbR²hrsq5Ž'u
qVI ³ M‡ k¨Y\TVE.aœ^5[]YMTJTJ‘–YZb][XC°U~[XadŽJ[XaRU¨adT4bXaˆ[Y\[~aˆTWjCFz5bYMEM[]C_z4bYME˜^5[]Y\ŠlI
G
R
G
R
R
R
R
R
R
R
R
R
R
R
R
R
R
5
5
R
AYM _adTCV‘–YZb][XC°U¨adT[XadŽJ[XaRU¨adT4bXaˆ[Y\[2i9YMx ^5YM[XTVY5UW4CFz4bXad[dIŸbXbUlb][XaR‚zrsNpu2i=acblg.E.ad[9YZbXb9i9YMx ^MaˆT
UXYMzjTVYMUdI
r»Y4u C_b]Y^5[]Y\ŠsaˆT²„Y\‡ b¨b}.bWjCFz4bXaˆ[]TVY#Ž9Y#x i9YMx ^5Y\[]TVYVI~r¨PˆŽ'u
rsi'uŒfYMT8z’YMT±YMTjW>YM‡ TVEJYeC klz.U¨bX[YMU€Y\ F^M5[XC_bX‘(Š¨5‡ [!YZbXb VTJTVYz5M[Xb]YMU¨bXa#WY\‡ ^5aˆT ‘ad _ °Y\T
b]W2Yx TJ.E.ad[hC2aˆT ^M[YZŠlI
„.M‘(C2 FYMi K˜WjCF _ ‘–Y\T MŠ‹b]Yyi9YMx E.aWMaˆb]Y˜WjCF _zZYyTJ.E.aˆ[œU¨5‘
FC_^5^Mad[OŽ9Y x E.aˆT z5M[Xb]Y5Ulb]a–W>YM‡ ^MadT0j‚ƒBƒ4}V[O Y\x TJ^fWYM‡ ^MaˆT YM‡ [r‰E.W.UUX}J‘‘–Y\TBY’W8E.a
CFTJ^YMx aˆTVEJai9YMx ^5YM[XTVY5U€WjC_z4b]aˆ[«u«I {~adUXzj[XCFW8C~5[]E ƒ4}V[eC klzjU¨bX[YMU#Y\ F^M5[XC_bX‘ ^=M‡ [Š¨M‡ [
Y\b¨bOi=aˆ[’Y\‡ zjTVYE.aRUXU]YbXWŸY…x UXYMzMad[dIfr‰eh}8ŠˆYMx [!E.aˆ FŽ'=Y\‡ TJ^…5‘ E.}8iVYM[]YzZY\T8i=aˆ[’Y\‡ zjTVY
¯Y\‡ TJ^4E.aˆT ‘aˆT CFT4bXaTJ.E. _C°U¨b]Y\TI u±e} i=aˆƒ5‡ WMaˆ[
CFT5b]a^5a!Šs}J F °Ulb’Y\‡ TVE.CF^ŽVU¨ad}VE.5zM.EN
E.aˆb”[RY5‡ ‚zMaˆ[M‘*EJ}˜Š¨M‡ []zj FYM[]YM[9WjCF _zZY#EJYZbYMU¨bX[]}Jz4bX}J[]aˆ[DE.}Y\TjWY\‡ TVE.ad[.‚ƒyŠ¨M‡ []z4 °Y\[Y\[
TJ5^M^5[]YMTJT4b~WjCF _z5aˆT[X5 _ E.a!UXŽ=aˆ °Y\[”}JTVEJaˆ[”i=aˆ[’Y\‡ zjTJCFTJ^MadTI”rsqMŽ=u
r»‚dueC klz.U¨bX[YMU#Y\ F^M5[XC_bX‘ Y\[]i=acb]YM[U¨bXad^MWjCFUdI žCFU]Y ƒ4}V[#YM _^5M[]C b]‘#adT8Šs}JTJ^5aˆ[Y\[O^5aˆTJ5‘
Y\b¨bŸWjCFU]YhWjCF _zZY‘aˆ F FYMTJ[XaRU¨}V bYZb”r‹bXCF F FU¨b4YMx TVEOƒV5U2EJYZbYMU¨bX[]}Jz4bX}J[]aˆ[]TVY4uUXM‘ eC klz.U¨bX[YMU
YM _^5M[]C b]‘ r»aˆTJ FC_^Mb
E.CFT i=adUXzj[XCFWjTJCFTJ^˜ZWZY\T'u” FYM^M[Y\[”Š¨5‡ [
Y\b¨bzj}JTVTVY–[]acbX}V[XTJad[]YyE.aˆT
z5M[Xb]YMU¨bXa
WY\‡ ^5aˆTj‚ƒE.adTJTVYWY\‡ ^4U ¯Y\‡ TV^5E‘#ad _ °Y\TS|.‚ƒ ³ C^M[YZŠsadTZWZYMTI”r»K\Ž=u
r»EVu Sh‡ [E.aˆbC5YM _ F‘…Y\‡ TJƒJaˆb ¯Y\‡ ‘ŽJ FC_^MbYZbXbY\TjWY\‡ TVEVYadT€^M[Y\TJTV‘Y\bX[]CFU=Š¨5‡ [YZbXb[]aˆŽJ[]adUXaˆT4bXad[]Y
adT^5[]Y\ŠVTY\‡ [2‘–Y\TC_‘ŽJ Faˆ‘adT5b]aˆ[Y\[ŸeC klz.U¨bX[YJ²žY\[XŠ¨M‡ [aˆ F _ad[WZYM[¨Š¨5‡ [CFT4bXQa >Œf\bXCFWMad[]Y
‘adEƒZkˆYM‡ _Ž…Y’W N¯zM5‘ŽJ _aˆ.C b]acbXad[dI”r¡QZŽ'u
™.I FY5UXUXaˆT ''C"/ C4Y’WZY#“M F Fad‚«b]C_5TVU~zZY\Ty °Y\^5[]YO^M.Ejblg.‚zj _CF^\bDUlb]M[Y! FCFU¨bX5[dI2vOYM‡ [€Y\‡ [
acbXb}.b]E.[Y\^}J[”i=adUXzj[XCFWjTJCFTJ^MadTY’W–zj °YMU]U¨adT
aRU¨C dYMiJ FacNpY\[][]Y’g CF‘ŽJ Faˆ‘aˆT4b]Y\bXCFMT MŠ!bXƒVa F"Q CFT5b]aˆ[XŠ»YM‚ˆaMI*IFIFIADƒJa
"
NE 2" E E " E Q '2?&2' EY\TV#
E "/Q '(?&2' 5Ž'ad[]Y\N
b]C_5TVUy[]}JTCFT ‚c5TVU¨b]Y\T4b˜b]C_‘a5I ADƒJa Y5EJE MŽ=aˆ[YZb]C_5T [X}JT'UyCFT Y\‘M[XbXC ˆaRE
‚ˆMTVU¨b]YMT5b
bXCF‘aMmŸIFI_I YM‚:ƒ ''F"/ CFTVU¨b]Y\T'‚caOƒ'YMUœYy‚dY\ŽVY5‚cC_blgMI€ADƒJa‚ˆYZN
ŽVY5‚cC_blgCFUbXƒJaœU¨C ˆah\ŠbXƒVaY\[][Y’gO}VUXadE#b]U¨bXM[]a”b]ƒJahad _ad‘#adT4b]UC_T–b]ƒJah FC°UlbRI ¯b
C°UœY\ ~''Y’g.U
FYZbœ"/ _ aRYMU¨b
YMU
°Y\[]^MaOY5UbXƒJa# _C°U¨bœUXC daMI!SUœaˆ Faˆ‘aˆT4b]UœYM[Xa#YMEJE.aRE…b]
YMT
mMC_b]U‚dY\ŽVY5‚cC_blg–^M[] U~YM}.bX5‘–YZbXC°‚ˆYM _ FgMI
r»Y4u ³ M‡ []zj FYM[]Y±i=acblg.E.ad FUXaˆT Y’W XADƒJafY5EJE MŽ=aˆ[YZb]C_5T []}JTVU˜C_T YM‘#5[¨b]C dadE ‚c5TVU¨b]Y\T4b
b]C_‘a V²r‰Q\Ž'u
rsi'užCFU]Y ƒj}J[‘–Y\T´ ¡YM‡ ‘ŽJ _CF^MadTBzZY\T´C_‘ŽJ Faˆ‘adT5b]aˆ[8Y ''F"/ ^MadTJM‘ Y\b¨b–U¨zj[]C_WZY
adTfzj FY5UXU”C 4Y’W’Yad _ Faˆ[CEJacb]YM klad[]Y5EŽVUXaˆ}VE.5zM.EI”eacb[’YM‡ ‚z5aˆ[”5‘ E.} W4C°U]Y\[WjCF _zZY
b]C_ F FU¨b4YMx TVEJUXWZY\[]CFYMiJ _ad[ r Vad FEJU 5u˜‘–Y\T i=aˆƒ5‡ WMad[U]Y\‘!bƒ4}V[‘–Y\T C_‘ŽJ Faˆ‘aˆT4b]aˆ[Y\[
Š¨5‡ k¨YMTVE.a~MŽ=aˆ[YZbXCFMTVaˆ[i=adUXzj[XCFWjTVY”C X‚ˆMTVU¨bX[]}V‚«b]M[U¨}J‘‘–Y\[]g ”.‚ƒ ¨‘aˆbXƒJ.E!UX}J‘#N
‘–Y\[]g JG
C‰KI ''F"/1 2N“5TVUlb][X}'‚«b]U2YMTOaˆ‘Ž.blg€ FC°Ulb ”C b]ƒ#YMTOCFTJC_bXC°Y\ .‚ˆYMŽVYM‚ˆC blg€MŠJbXadTI
CFC‰I 10?D œN aˆbX}J[]TVUhbXƒJa!ad _ad‘aˆT4b
Y\bbXƒJaU¨Ž=ad‚ˆC VaRE…Ž=5UXC b]C_5T…C_T
b]ƒJC°U” _C°U¨bdI
C_CFC‰I B &C/DDDN J& NSŽJŽ=aˆTVEVUŸbXƒVahU¨Ž=ad‚ˆC 'adE#aˆ Faˆ‘aˆT4bb]œbXƒJa”adTVE\Š=bXƒVCFU9 _C°UlbRI
CFW=I B &C/DDDN ?D E N pTVUXaˆ[Xb]UDb]ƒJaOUXŽ'aR‚cC VadEad _ad‘#adT4bhYZb
b]ƒJa!UXŽ'aR‚cC VadEŽ=5UXC b]C_5TCFTbXƒJC°U” FCFU¨bdI
r‰H\Ž'u
oJI T‘C_TJN¡‘–YZjN¯ƒJadYMŽ0Y\‡ [”aˆTfEVYZb]Y5Ulb][X}Vz5b]}J[‘adEaˆ†=adz4bXCFW’Y‘aˆbX.E.aˆ[i9YMx EJaœŠ¨M‡ [hY\b¨bbY–}.b
‘C_TVU¨b]Y
.‚ƒU¨bR5‡ []U¨b]Yaˆ Faˆ‘adT5b]acbŸC.aˆTEJY\b]YMU]Y\‘ FC_TV^VI`9[XaR‚cC°UUXM‘ aˆT#W’YMTJ FC_^
ƒJadYMŽYM‡ [ŸE.aˆT
acbXbhŠs}J F FU¨bRYM‡ TVE.CF^\bhiVC_TYM‡ [¨bhbX[’YM‡ E0r ]‚c5‘#ŽV _aˆbXa!iJCFTVYM[XgybX[]aˆa 4u«m'‘#adTfaˆ Faˆ‘adT5b]aˆT…CaˆT…‘CFT.N
‘–YZjN¡ƒVadY\Ž´Y\‡ [œM[E.TVY5E.aOŽ9Yx acbXb!Y\TJTVY\bœURYZ‡ bXbdIOSh _ °YTJ.E.aˆ[€UXM‘w FC_^5^Mad[Ž9YOx kˆY\‡ ‘T4b€E’kl}JŽ
rsaˆjad‘Ž'ad _WjC°U9[]\b]aˆT'u2ƒ'Y\[9Tjg.‚zj FYM[U¨5‘wY\‡ [‘CFTVE.[]aY\‡ Tfr»aˆ F _ad[9 FC_zZYO‘#aREVuUXCFTVY˜YZ‡ bXbX FC_TV^5Y\[Rm
‘adEJYMT#YM _ °Y
TJ.E.aˆ[UXM‘ FCF^M^Mad[2Ž9Y
x }VEJEJY€E’kl}VŽ#ƒ'Y\[URM‡ zjTjgj‚zj °Y\[2U¨5‘*Y\‡ [ŸU¨bR5‡ [X[]a
YM‡ Tr»aˆ F _ad[
_CFzZYœ‘adEVu9U¨CFTVY–YZ‡ bXbX FC_TV^5Y\[RIr TfY\‡ b¨bX FCFTJ^€bXCF F VTJ.E.adT ±YM‡ [aˆT–TJ.E–UXM‘ VTJTVU9CVE.aˆ _bX[’YM‡ EJacb
‘adE[XMbXadT ŸI u
r»Y4u C_b]YadT ‘C_TJN¡‘–YZjN¯ƒJadYMŽ UXM‘(C_TVTJaˆƒ9YMx _ Faˆ[œad _ad‘#adT4bXaˆT´PMm Q.m KJm qVm ™.m oJm njm HJm JmFPdLV² i.N
UXaˆ[]WMad[]Y#YZbXb”EJacb VTJT'U”‘0Y\x TJ^4Y#U4YMx EVY\TVY‘C_T.N¯‘–YZjN¯ƒJadYMŽVY\[RI~r¡QZŽ'u
rsi'uvh}J[CF‘ŽJ Faˆ‘aˆT4bXad[]Y5U”MŽ=aˆ[YZb]C_5TJaˆT UXM‘ []acbX}V[XTJad[]YM[E.acbœUlb’M‡ [UlbYaˆ Faˆ‘aˆT4b]acb
C‘#CFT.N¯‘–YZjN¡ƒVadY\Ž=aˆT r»}.b]YMT YZbXb˜b]Y0i=M[XbyE.aˆbOu > žhCF _z5aˆT Y\‡ [E.aˆT Y5U¨gj‘Ž.bXMbXC°U¨zZY
b]CFEJUXzM5‘ŽJ _aˆ.C b]acbXadTƒJ5U >IDr‰K\Ž'u
r»‚duvh}J[OCF‘ŽJ _ad‘aˆT4bXad[]Y5U!MŽ=aˆ[YZb]C_5TJaˆT D UXM‘ b]YM[!i=M[XbE.D acb#‘C_TVU¨b]Yf aˆ FacN
‘aˆT4b]acbC9aˆTB‘#CFT.N¯‘–YZjN¡ƒVadY\FŽ >tžhC°UXY [XaRU¨}V bYZbXaˆbY’W8YZb¨b}.D b¨Š¨5‡ []Y Ž9Y x
‘CFT.N¡‘–Y\4N¯ƒJaRY\Ž=aˆTC9r»Y4u«IShUXgj‘Ž.bXMbXC°U¨zzMM‘ŽJ Fac.C_bXaˆbDƒV5U 2 > r‰™ZŽ=u
eh} UXz’Y i'aRU¨zj[]C_WZY C_‘ŽJ Faˆ‘adT5b]aˆ[]C_TV^5Y\[]TVY…ƒY\‡ [#‘#aREBƒ\kˆY\‡ FŽ´Y’W8ŽVUXaˆ}VE.5zM.EI r 5Y’WZY\z5.E
YM‚d‚caˆŽJbXaˆ[YMU~.‚z.U5YVx I u
iVUXaˆ[]WMaˆ[YhY\b¨b9CJbdI acI
š A YM‡ [ƒJaRY\ŽVYM[ŸaˆT–EJYZbYMU¨bX[]}Jz4bX}J[2Š¨5‡ [ Fac.C_zZY€EYM‡ [Ÿ‘–Y\T FYM^M[Y\[
ŽVY\[”Y’WyURM‡ zjTjg.‚zj FYM[.‚ƒaˆ Faˆ‘aˆT4bdIŒfaˆT‘YMTz’YMTyŠ¨5‡ []U¨b4Y5x UœY\‡ WMadT °Y\^5[]YEJYZbYMU]Y\‘ FC_TJ^4Y\[
EY\‡ [URM‡ zjTjg.‚zMad _T˜.‚ƒaˆ Faˆ‘aˆT4b]acbOY\‡ [U]Y\‘‘–YUXYMz>I
Tentamen
Datastrukturer D
DAT 035/INN960
(med kortfattade lösningar)
19 december 2008
• Tid: 8.30 - 12.30
• Ansvarig: Peter Dybjer, 0736-341480 (innan 10.30). Håkan Burden, 073077287777, och Staffan Björensjö (after 10.30).
• Max poäng på tentamen: 60.
• Betygsgränser, CTH: 3 = 24 p, 4 = 36 p, 5 = 48 p, GU: G = 24 p, VG = 48 p.
• Hjälpmedel: handskrivna anteckningar på ett A4-blad. Man får skriva på båda
sidorna och texten måste kunna läsas utan förstoringsglas. Anteckningar som
inte uppfyller detta krav kommer att beslagtas!
Föreläsningsanteckningar om datastrukturer i Haskell, av Bror Bjerner
• Skriv tydligt och disponera papperet på ett lämpligt sätt.
• Börja varje ny uppgift på nytt blad.
• Skriv endast på en sida av papperet.
• Kom ihåg: alla svar ska motiveras väl!
• Poängavdrag kan ges för onödigt långa, komplicerade eller ostrukturerade lösningar.
• Lycka till!
1
1. Antag att du sätter in elementen 4, 3, 2, 1, 5 ett efter ett (i denna ordning) i
följande datastrukturer (mha standardalgoritmerna för insättning)
(a) Vanligt binärt sökträd, utan balansering. (1p)
Svar:
4
/ \
3
5
/
2
/
1
(b) Splayträd. (3p)
Svar:
4
3
\
(zig 3-4)
4
2
\
3
\ (zig 2-3)
4
1
\
2
(zig 1-2)
\
3
\
4
5
/
2
/ \
1
4
/
3
(zig-zig 5-4-3 + zig-zig 5-2-1)
(c) (2,4)-träd. Kom ihåg att i dessa träd har alla inre noder mellan 2 och 4
barn. Alla löv ligger på samma djup så trädet är perfekt balanserat. Varje
nod lagrar mellan 1 och 3 element, och trädet har en sökträdsegenskap som
generaliserar det binära sökträdets. (3p)
Svar: Först sätter man in de tre första elementen i rotnoden. När man
sedan sätter in det fjärde elementet får man overflow i rotnoden:
1,2,3,4
Alltså splittrar man den och får
2
/ \
1 3,4
(Man kan också lägga 3 i rotnoden, osv.) Slutligen får man
2
/ \
1 3,4,5
(d) Heap (en vanlig binär “min-heap” som lagrar minsta elementet i roten).
(3p)
Svar:
4
3
/
4
(bubbla upp 3)
2
/ \
4
3
(bubbla upp 2)
2
/ \
4
3
(5 hamnar på rätt plats från början)
/
5
Rita hur träden byggs upp steg för steg efter varje insättning och förklara vad
som händer! I (a) räcker det dock att du ritar det slutgiltiga binära sökträdet.
2. Avgör om vart och ett av följande påståenden är sant eller falskt! Endast svar
med korrekt motivering godtages.
(a) Om en algoritm har den asymptotiska komplexiteten O(1) så tar den alltid
lika lång tid att exekvera oavsett indata. (2p)
Svar. Nej, O(1) betyder bara att det finns en konstant C så att T (n) ≤ C
för alla n < n0 . Av detta följer inte att T (n) = C för alla n för någon
konstant C.
(b) Höjden på ett binärt sökträd med n noder är alltid O(log n). (2p)
Svar. Nej, höjden på ett binärt sökträd kan i värsta fall vara O(n) om
det är helt obalanserat.
(c) Det gäller alltid att O(log2 n) = O(log4 n). (2p)
Svar. Ja, eftersom log2 n = 2 log4 n så gäller att om T (n) ≤ C log2 n så
T (n) ≤ 2C log4 n och om T (n) ≤ C log4 n så T (n) ≤ (C/2) log2 n.
(d) Höjden på ett (2,4)-träd som lagrar n element är alltid O(log n). (2p)
Svar. Ja. Värsta fallet är när varje nod bara lagrar ett element och alltså
är ett binärt fullständigt balanserat träd. Ett träd med höjden h då lagra
n = 2h+1 − 1 element. Alltså är 2h ≤ n, dvs h ≤ log n. Så h är O(log n).
(e) Man kan sortera ett fält på tiden O(n log n) i medeltal genom att först
sätta in elementen i fältet ett efter ett i en skipplista, och sedan plocka ut
dem i ordning från understa raden i skipplistan. (2p)
Svar. Ja, den understa raden i en skipplista är sorterad. Varje insättning
tar O(log n) i medeltal och varje utplockning tar O(1). Insättningarna
kommer alltså att dominera tidsåtgången vilken alltså blir O(n log n) i
medeltal.
3. (a) Följande program har som indata ett fält A av heltal.
int f(int[] A) {
int n = A.length;
int s = 0;
for (int i = 0; i < n; i++) {
s = s + A[0];
for (int j = 1; j <= i; j++) s = s + A[j]
}
return s
Vilken är O-komplexiteten hos programmet uttryckt som funktion av n,
längden hos indatafältet A? Motivera! För full poäng ska O-komplexiteten
vara en “skarp” uppskattning. (3p)
Svar. Den yttre loopen körs n gånger och den inre loopen körs 0 + 1 +
· · · + (n − 1) = n(n − 1)/2 gånger. Eftersom varje tilldelning till s tar O(1)
kommer den totala exekveringstiden av den inre loopen att dominera och
vara O(n2 ).
(b) Följande program har som indata ett fält A av heltal < N.
void f(int[] A, int N){
int n = A.length;
int[] B = new int[N];
for (int j = 0; j < N; j++) B[j] = 0;
for (int i = 0; i < n; i++) B[A[i]]++;
for (int j = 0; j < N; j++) {
int i = 0;
while(B[j] > 0){
A[i++] = j;
B[j]--;
}
}
return;
}
Vilken är algoritmens O-komplexitet uttryckt som funktion av fältets storlek n och N? Motivera! För full poäng ska O-komplexiteten vara en “skarp”
uppskattning. (3p)
Svar. Den första for-slingan tar O(N), den andra O(n) och den tredje
O(N + n), eftersom den körs N gånger och den inre while-slingan tar O(n)
totalt. Alltså blir den totala tidsåtgången O(N + n).
(c) Är det korrekt att programmet sorterar A? Om ja, motivera! Om nej,
lokalisera felet! (4p)
Svar.
Programmet ifråga är nästan “counting sort”, en variant av
“bucket sort” där man sorterar heltal genom att räkna antalet förekomster
i indatafältet. Det har dock smugit sig in ett fel, genom att variabeln i
nollställs varje gång i den tredje slingan. På grund av detta kommer t ex
A[0] att skrivas över varje gång while-slingan påbörjas. Om indata fältet
exempelvis är 1,2 kommer det att bli 2,2 efter exekveringen. I stället ska
i initialiseras utanför while-slingan.
4. Följande grannmatris representerar en viktad oriktad graf.
A
B
C
D
E
F
A
-
1
4
5
-
-
B
1
-
2
-
2
-
C
4
2
-
5
6
4
D
5
-
5
-
-
2
E
-
2
6
-
-
6
F
-
-
4
2
6
-
Talen i matrisen representerar bågarnas vikter. Ett streck (-) betyder att bågen
saknas.
(a) Rita grafen! Sätt ut vikterna på bågarna. (1p)
(b) Man kan använda Dijkstras algoritm för att finna kortaste vägen mellan
två noder i en graf. Som i lab 3 vill man ofta både veta vilka noder som
ligger på den kortaste vägen och hur lång vägen är (dvs summan av de
ingående bågarnas vikter). Beskriv i ord hur Dijkstras algoritm gör för
att beräkna dessa två saker. (Du får delpoäng om du bara kan beräkna
längden men inte nodlistan.) Du behöver inte ge fullständig pseudokod det räcker om du förklarar vilka datastrukturer du använder och förklarar
noggrannt vilken roll de spelar under beräkningen. (4p)
Svar. På sid 587 i G & T finns pseudokod för en version av Dijkstra
som bara beräknar längden av kortaste vägen från en given nod v till
en godtycklig annan nod u. (Ett fullgott svar på tentan kräver att de
viktigaste idérna bakom denna pseudokod beskrivs klart.) Observera i
synnerhet att algoritmen använder sig av en prioritetskö Q som bestämmer
i vilken ordning algoritmen “besöker” de olika noderna i grafen och ett
avstånd D[u] av den kortaste vägen från den givna startnoden v till u.
Om man dessutom vill returnera en lista med noderna på den kortaste
vägen från v till u lagrar man för varje nod u inte bara längden D[u] av
den kortaste vägen från v till u utan även den nod P [u] som kommer innan
u på denna kortaste väg. Från början sätter man D[u] till oändligheten och
P [u] till en nollpekare. Sedan uppdaterar man både D[u] och P [u] med allt
kortare avstånd och vägar efterhand som man besöker nya noder. Dijkstars
algoritm som den beskrivs i boken terminerar när man besökt alla noder.
Då kommer D[u] att vara den korrekta längden av den kortaste vägen och
P [u] att vara föregångaren till u på denna väg.
När Dijkstras algoritm används för att beräkna kortaste vägen mellan två
givna noder v och u kan man terminera algoritmen efter det att u besökts.
Man kan då ge som utdata längden D[u] och vägen u, P [u], P [P [u]], . . . i
omvänd ordning (denna väg kan förstås dessutom reverseras om så önskas)
(c) Dijkstras algoritm arbetar stegvis. Visa hur algoritmen fungerar genom
att visa vilka mellanresultat (tillstånd hos datastrukturerna) som Dijkstras
algoritm (enligt din beskrivning ovan) lagrar för att kunna returnera den
kortaste vägen och denna vägs längd mellan A och F i grafen ovan. (3p)
Svar. Vi visar efter varje besök av en ny nod tillståndet hos prioritetskön
och värdena på D[u] och P [u] för alla noder u i prioritetskön.
A
B
C
E
D
F
(B, 1, A), (C, 4, A), (D, 5, A)
(C, 3, B), (E, 3, B), (D, 5, A)
(E, 3, B), (D, 5, A), (F, 7, C)
(D, 5, A), (F, 7, C)
(F, 7, C)
Första raden betyder alltså att när vi har besökt A så ligger B först i Q
med D[B] = 1 och U [B] = A, osv.
(d) Är det i allmänhet lämpligt att använda en grannmatris för att representera
en graf när man implementerar Dijkstra! Varför eller varför inte? Motivera
med hjälp av O-komplexiteter. (2p)
Svar. Nej, det är i allmänhet lämpligare att använda grannlistor. Varje
gång en nod u besöks går man genom dess grannar och uppdaterar D[u]
och P [u]. Om man använder en grannmatris måste man gå genom alla
noder i grafen för att finna dessa grannar. Om man däremot använder
grannlistor finns us grannar direkt åtkomliga. Totalt behöver man alltså
under exekveringen inspektera grannmatrisen O(n2 ) gånger om det är n
noder i grafen men bara inspektera grannlistorna O(m + n) om det är m
bågar i grafen. Om inte grafen är “tät” eller liten är grannlistan alltså klart
bättre än grannmatrisen. Ett annat men oftast mindre viktigt argument
är att grannlistornas utrymmeskomplexitet O(m + n) också är bättre än
grannmatrisens O(n2 ) om inte grafen är tät.
5. Klassen ArrayList i Java Collections kan lagra godtyckligt stora listor. Här är
ett utdrag ur beskrivningen av klassen
Resizable-array implementation of the List interface. ... The
size, isEmpty, get, set, iterator, and listIterator operations run in constant time. The add operation runs in amortized
constant time, ... Each ArrayList instance has a capacity. The capacity is the size of the array used to store the elements in the list. It
is always at least as large as the list size. As elements are added to
an ArrayList, its capacity grows automatically.
(a) Förklara betydelsen av “The add operation runs in amortized constant
time”! (2p)
Svar. Det betyder att tiden det tar att utföra n add-operationer i följd
efter varandra är O(n), dvs i mdeletal tar var och en av dessa operationer
O(1).
(b) Visa hur man lämpligen kan implementera ArrayList genom att skriva
en klass i Java eller i detaljerad pseudokod. Det räcker om du visar vilka
tillståndsvariabler (“fields”) man behöver samt hur man implementerar
följande operationer beskrivna i “constructor summary” och “method summary”:
i. ArrayList() - Constructs an empty list with an initial capacity of ten.
ii. E get(int index) - Returns the element at the specified position in
this list.
iii. void add(E o) - Appends the specified element to the end of this list.
iv. void add(int index, E element) - Inserts the specified element at
the specified position in this list.
(8p)
Svar.
public class ArrayList <E> {
// Elements are stored in es, with current
// capacity available as es.length
private E[] es;
// The number of occupied entries in the es array.
private int size;
public ArrayList(){
// The initial capacity is 10, as specified
es = (E[])new Object[10];
size = 0;
}
public E get(int index) {
// Check that the index is valid
if (index >= size || index < 0)
throw new IndexOutOfBoundsException();
// Get the element directly for the array
return es[index];
}
public void add(E e) {
// The position size is after the last object
add(size, e);
}
public void add(int index, E e) {
// Check that the index is valid
if (index > size || index < 0)
throw new IndexOutOfBoundsException();
// Double the capacity if no more room
if (es.length == size) {
E[] news = (E[])new Object[2*size];
for (int i = 0; i < size; i++)
news[i] = es[i];
es = news;
}
// Shift elements to make room for the new element
for (int i = size; i > index; i--)
es[i] = es[i-1];
// Insert the new element and increase the size
es[index] = e;
size++;
}
}
6. En min-max-heap är en datastruktur med effektiva metoder både för att ta ut
minsta och största elementet i en datasamling. Precis som en vanlig heap är den
ett fullständigt binärt träd (“complete binary tree”), men elementen i en minmax-heap är ordnade på ett annat sätt. Alla noder som ligger på jämnt djup
(exempelvis roten) har nycklar som är mindre än (eller lika med) sina ättlingar,
medan alla noder som ligger på udda djup har söknycklar som är större än (eller
lika med) sina ättlingar. (En ättling till noden n är en nod som finns i delträdet
med roten n.)
(a) Rita en min-max-heap som innehåller elementen 1,2,3,4,5,6,7,8,9,10! Observera att det finns många sådana min-max-heapar. (2p)
(b) Hur implementeras operationen max som returnerar det största elementet
i min-max-heapen (utan att ta bort det)? Vilken är den asymptotiska
tidskomplexiteten hos max. (3p)
(c) Hur implementeras operationen deleteMin som tar bort det minsta elementet i en min-max-heap? Visa resultatet av att utföra deleteMin på
min-max-heapen i (a). Asymptotisk komplexitet hos deleteMin? (5p)
Du ska beskriva implementeringarna här med hjälp av pseudokod. (Javakod
accepteras också.)
Observera att i t.ex. G & T är heapar en datastruktur för lexika där man lagrar
par av söknycklar och element. Men man kan förstås även lagra datasamlingar
där söknyckeln och elementet är samma sak.