5hfxuvlyq - departamento de ingeniería telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22...

22
1 Copyright © 2001 [email protected] Java: Recursión y Complejidad / 1 5HFXUVLyQ &DUORV’HOJDGR.ORRV ,QJHQLHUtD7HOHPiWLFD 8QLY&DUORV,,,GH0DGULG Copyright © 2001 [email protected] Java: Recursión y Complejidad / 2 0pWRGRUHFXUVLYR 8QPpWRGRUHFXUVLYRHVDTXHOTXH GLUHFWDRLQGLUHFWDPHQWH VHOODPDDVLPLVPR 3DUDTXHHOPpWRGRUHFXUVLYRGHILQD XQDFRPSXWDFLyQTXHWHUPLQD ODVOODPDGDVUHFXUVLYDV KDQGHVHUPiVVHQFLOODV GHDFXHUGRFRQDOJXQDPpWULFD

Upload: doanphuc

Post on 06-Mar-2018

213 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

1

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 1

5HFXUVLyQ

&DUORV�'HOJDGR�.ORRV

,QJHQLHUtD�7HOHPiWLFD

8QLY��&DUORV�,,,�GH�0DGULG

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 2

0pWRGR�UHFXUVLYR

❚ 8Q�PpWRGR�UHFXUVLYR�HV�DTXHO�TXH�GLUHFWD�R�LQGLUHFWDPHQWH�VH�OODPD�D�VL�PLVPR�

❚ �3DUD�TXH�HO�PpWRGR�UHFXUVLYR�GHILQDXQD�FRPSXWDFLyQ�TXH�WHUPLQD�OD�V��OODPDGD�V��UHFXUVLYD�V�KDQ�GH�VHU�PiV�VHQFLOOD�V��GH�DFXHUGR�FRQ�DOJXQD�PpWULFD�

Page 2: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

2

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 3

(MHPSOR��

❚ public static long s (int n){if (n==1)

return 1;else

return s(n-1)+n;}

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 4

(MHPSOR��

❚ s(3) = �OODPDGD�UHFXUVLYD�

❚ s(2)+3 = �OODPDGD�UHFXUVLYD�

❚ (s(1)+2)+3 = �OODPDGD�UHFXUVLYD�

❚ (1+2)+3 = �VXPD�

❚ (3+3)= �VXPD�

❚ 6

Page 3: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

3

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 5

(MHPSOR��

❚ public static long s (int n){if (n==1)

return 1;else

return s(n+1)+n;}

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 6

(MHPSOR��

❚ s(3) = �OODP��UHF��

❚ s(4)+3 = �OODP��UHF��

❚ (s(5)+4)+3 = �OODP��UHF��

❚ ((s(6)+5)+4)+3 = �OODP��UHF��

❚ (((s(7)+6)+5)+4)+3 = �OODP��UHF��

❚ ((((s(8)+7)s(7)+6)+5)+4)+3 =

❚ ...

❚ 1R�WHUPLQD

Page 4: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

4

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 7

¢4Xp�GHEH�WHQHU

XQ�PpWRGR�UHFXUVLYR"

❚ &RQGLFLRQDO❙ &DVR�QR�UHFXUVLYR 1

❙ &DVR�UHFXUVLYR s(n-1)+n

�TXH�VH�DSUR[LPD�KDFLDOD�FRQGLFLyQ�GH�SDUDGD� (n==1)

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 8

7LSRV�GH�UHFXUVLyQ�

5HFXUVLyQ�OLQHDO

❚ 5HFXUVLyQ�OLQHDO�Pi[LPR�XQD�OODPDGD�UHFXUVLYDSRU�UDPD�GHO�FRQGLFLRQDO�

❙ 5HFXUVLyQ SRU�OD�FROD�~OWLPD�RSHUDFLyQ�HQ�UDPD�OODPDGD�UHFXUVLYD�

❙ 5HFXUVLyQ QR�SRU�OD�FROD�RSHUDFLyQ�SHQGLHQWH�

Page 5: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

5

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 9

7LSRV�GH�UHFXUVLyQ�

5HFXUVLyQ�QR�OLQHDO

❚ 5HFXUVLyQ QR�OLQHDO

❙ 5HFXUVLyQ�HQ�FDVFDGD��RS�I����I������

❙ 5HFXUVLyQ�DQLGDGD��I����I������

❙ ���

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 10

(MHPSOR���

)DFWRULDO

......

1205

244

63

22

11

10

fac(n)nfac(n) = n!

fac(5)=5*fac(4)=5*24=120

fac(5)=5*4*3*2*1

Page 6: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

6

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 11

5HFXUVLyQ�QR�SRU�OD�FROD��

)DFWRULDO

❚ public static long fac (int n){if (n<=1)

return 1;else

return n*fac(n-1);}

factermina para

n>=0

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 12

5HFXUVLyQ SRU�OD�FROD��

)DFWRULDO

❚ public static long fact (int n,m){if (n<=1)

return m;else

return fact(n-1,n*m);}

❚ public static long fac (int n){return fact(n,1);}

Page 7: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

7

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 13

(MHPSOR���

)LERQDFFL

......

85

54

33

22

11

10

fib(n)n

fib(5)=fib(4)+fib(3)=

5+3

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 14

5HFXUVLyQ HQ�FDVFDGD�

)LERQDFFL

❚ public static long fib (int n){if (n<=1)

return 1;else

return fib(n-1)+fib(n-2);}

Page 8: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

8

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 15

)LERQDFFL

fib(4)

fib(3) fib(2)

fib(2) fib(1)

fib(1) fib(0)

1 1

12

3 2

5

fib(1) fib(0)

1 1

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 16

)LERQDFFL�OLQHDO

❚ public static long fibo (int n,x,y){if (n<=1)

return x+y;else

return fibo(n-1,y,x+y);}

❚ public static long fib (int n){return fibo(n,0,1);}

Page 9: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

9

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 17

fibo(4,0,1)

fibo(3,1,1)

fibo(2,1,2)

)LERQDFFL

fib(4)

5

5

55

fibo(1,2,3)

5

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 18

)LERQDFFL�QR�UHFXUVLYR

���√��Q � ���√��Q

ILE�Q� ²²²²²²²²²²��QÂ√��

Page 10: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

10

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 19

5HFXUVLyQ DQLGDGD�

0RUULV

❚ public static long mor(int n, m){if (n==m)

return (m+1);else

return mor(n,mor(n-1,m+1));}

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 20

0RUULV

❚ mor(4,0) =

❚ mor(4,mor(3,1)) =

❚ mor(4,mor(3,mor(2,2)) =

❚ mor(4,mor(3,3)) =

❚ mor(4,4) =

❚ 5

Page 11: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

11

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 21

5HFXUVLyQ DQLGDGD��

$FNHUPDQQ

❚ public static long ack (int n, m){if (n==0)

return (m+1);else if (m==0)

return ack(n-1,1);else

return ack(n-1,ack(n,m-1));}

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 22

5HFXUVLyQ�PXWXD

❚ public static boolean impar (int n){if (n==0)

return false;else

return par(n-1);}

❚ public static boolean par (int n){if (n==0)

return true;else

return impar(n-1);}

impar

par

Page 12: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

12

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 23

5HFXUVLyQ�YV��,WHUDFLyQ

❚ /D�UHFXUVLyQ�SRU�OD�FROD�VH�SXHGH�FRQYHUWLU�GH�IRUPD�LQPHGLDWD�HQ�LWHUDFLyQ��EXFOH��

❚ 3DUD�RWUDV�IRUPDV�GH�UHFXUVLyQ�VH�UHTXLHUHQ�WpFQLFDV�GH�WUDQVIRUPDFLyQ�GH�SURJUDPDV�\�SRVLEOHPHQWH�HVWUXFWXUDV�GH�GDWRV�PiV�FRPSOHMDV�

"The transformation from recursion to iterationis one of the most fundamental concepts ofcomputer science." -- D. Knuth 1974

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 24

)DFWRULDO

❚ public static long fact (int n,m){private int N,M;

N=n; M=m;while !(N<=1)

{N=N-1; M=N*M;}return M;

}

❚ public static long fact (int n,m){if (n<=1)

return m;else

returnfact(n-1,n*m);

}

Page 13: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

13

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 25

&RPSOHMLGDG

&DUORV�'HOJDGR�.ORRV

,QJHQLHUtD�7HOHPiWLFD

8QLY��&DUORV�,,,�GH�0DGULG

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 26

&RPSDUDFLyQ

❚ long fib (int n){if (n<=1)

return n;else

returnfib(n-1)+fib(n-2);

}

❚ long fibo (intn,x,y){if (n<=1)

return x+y;else

returnfibo(n-1,y,x+y);

}❚ /RV�GRV�PpWRGRV�FDOFXODQ�OD�IXQFLyQ�fibFRUUHFWDPHQWH��¢SHUR�FXiO�SUHIHULUtD"❚ (O�VHJXQGR�HV�PiV�HILFLHQWH�

Page 14: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

14

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 27

¢&yPR�PHGLPRV"

❚ 0LGLHQGR�HO�WLHPSR�GH�HMHFXFLyQ��HQ�IXQFLyQ�GHO�WDPDxR�GH�OD�HQWUDGD❙ 1R�SRGHPRV�SUREDU�FRQ�WRGDV�ODV�HQWUDGDV

❙ (V�QHFHVDULR�LPSOHPHQWDU�HO�DOJRULWPR

❙ 'HSHQGH�GHO�VRIWZDUH�\�HO�KDUGZDUH

❚ %XVTXHPRV�RWUD�PHGLGD❙ 0iV�DEVWUDFWD

❙ 0iV�IiFLO�GH�REWHQHU

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 28

¢&yPR�PHGLPRV"

❚ $VRFLDPRV�D�FDGD�DOJRULWPR��I�Q�

❚ (PSOHDUHPRV�HO�FDVR�SHRU SDUD�FDUDFWHUL]DU�HO�WLHPSR�GH�HMHFXFLyQ

❚ (V�PiV�IiFLO�GH�FDOFXODU

❚ ,QWHUHVD�OD�YHORFLGDG�GH�FUHFLPLHQWR�GHO�WLHPSR�GH�HMHFXFLyQ�HQ�IXQFLyQ�GHO�WDPDxR�GH�OD�HQWUDGD

❚ &RPSRUWDPLHQWR�DVLQWyWLFR

Tamaño de la entrada

Page 15: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

15

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 29

¢&yPR�PHGLPRV"

❚ $VRFLDPRV�D�FDGD�RSHUDFLyQ�SULPLWLYD�XQ�WLHPSR�GH�HMHFXFLyQ�FRQVWDQWH�❙ $VLJQDFLyQ

❙ /ODPDGD�D�PpWRGR

❙ 2SHUDFLyQ�DULWPpWLFD��HWF�

❙ ,QGH[DFLyQ�HQ�DUUD\

❙ 6HJXLU�XQD�UHIHUHQFLD

❙ 9ROYHU�GH�XQ�PpWRGR

❙ (WF�

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 30

(MHPSOR

�HQ�SVHXGRFyGLJR�

❚ +DOODU�HO�Pi[LPR�GH�XQ�DUUD\

❚ (QWUDGD��XQ�DUUD\�$�FRQ�Q�HQWHURV

❚ 6DOLGD��HO�HOHPHQWR�PD\RU�GH�$❚ $OJRULWPR��arrayMax(A,n)❚ current=A[0]

for i=1 to n-1 doif current<A[i]

then current=A[i]return current

Page 16: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

16

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 31

(MHPSOR

�HQ�SVHXGRFyGLJR�

❚ current=A[0]for i=1 to n-1 do

if current<A[i]then current=A[i]

return current

❚ 0tQLPR�Q~P��GH�RSHUDFLRQHV��VL�HV�A[0] ������Q���Q����� �Q

❚ 0i[LPR�Q~P��GH�RSHUDFLRQHV��VL�A FUHFLHQWH������Q���Q����� �Q��

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 32

1RWDFLyQ�2

n0

f(n)

c⋅g(n)

f(n) es O(g(n)) sii f(n)≤ c ⋅ g(n) para n ≥ n0

Page 17: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

17

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 33

1RWDFLyQ�2

❚ �Q����HV��2�Q�

❙ F ���Q� �

❙ �Q���≤ �Q❚ ��Q����Q�ORJ�Q����HV��2�Q��

❚ ��ORJ�Q���ORJ�ORJ�Q��HV��2�ORJ�Q�

❚ ���� HV��2���

❚ ��Q��HV���2���Q�

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 34

5HJODV

❚ I�Q���HV��2�D�I�Q��

❚ I�Q�≤J�Q��∧ J�Q��HV�2�K�Q���⇒I�Q��HV�2�K�Q��

❚ I�Q� HV�2�J�Q���∧ J�Q��HV�2�K�Q���⇒I�Q��HV�2�K�Q��

❚ I�Q��J�Q���HV��2�PD[^I�Q��J�Q�`�

❚ J�Q��HV�2�K�Q���⇒ I�Q��J�Q��HV�2�I�Q�K�Q��

❚ J�Q��HV�2�K�Q���⇒ I�Q��J�Q��HV�2�I�Q�K�Q��

Page 18: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

18

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 35

5HJODV

❚ I�Q��HV�SROLQRPLR�GH�JUDGR�G�⇒ I�Q��HV�2�QG�

❚ [!��∧ D!��⇒ Q[ HV�2�DQ�

❚ [!��⇒ ORJ�Q[ HV�2�ORJ�Q�

❚ [!��∧ \!��⇒ ORJ[ Q�HV�2�Q\�

£([SUHVDU�VLHPSUH�HO�RUGHQFRQ�OD�H[SUHVLyQ�PiV�VLPSOH�

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 36

&UHFLPLHQWR

GH�IXQFLRQHV

��� ������������������������������

��� �������������������������

���������������������������������

����������������������

���������������

������������

���������

�QQ�Q�Q ORJ QQ√QORJ Q

Page 19: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

19

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 37

7DPDxR�Pi[LPR

GH�XQ�SUREOHPD

�������Q

�������Q�

���������������Q�

�����������������������QORJ�Q

������������������������Q

��KRUD��PLQXWR��VHJXQGR7LHPSR�GH�HMHFXFLyQ

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 38

(MHPSOR

❚ 'DGR�XQ�DUUD\�$�GH�Q�Q~PHURV

❚ &DOFXODU�RWUR�DUUD\�%��WDO�TXH�

∑LM �$>M@

%>L@ ²²²²²L��

Page 20: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

20

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 39

6ROXFLyQ��

❚ for i=0 to n-1 doa=0for j=0 to i do

a=a+A[j]B[i]=a/(i+1)

return B

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 40

6ROXFLyQ����$QiOLVLV

❚ 3DUWHV�

❙ ,QLFLDOL]DU�\�GHYROYHU�DUUD\�%��2�Q�

❙ %XFOH�L��VH�HMHFXWD�Q�YHFHV

❙ %XFOH�M��VH�HMHFXWD�����������Q Q�Q������YHFHV��2�Q��

❚ 7RWDO�

❙ 2�Q��2�Q��2�Q�� �2�Q��

❙ 2UGHQ�FXDGUiWLFR

Page 21: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

21

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 41

2SWLPL]DFLyQ

❚ B[i]=(A[0]+...+A[i])/(i+1)

❚ B[i+1]=(A[0]+...+A[i]+A[i+1])/(i+2)

❚ B[i+1]=(B[i]*(i+1))+A[i+1]/(i+2)

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 42

6ROXFLyQ��

❚ s=0for i=0 to (n-1) do

s=s+A[i]B[i]=s/(i+1)

return B

Page 22: 5HFXUVLyQ - Departamento de Ingeniería Telemática - …cdk/curs/prog2/00-01/recur-compl.pdf · 22 Copyright © 2001 cdk@it.uc3m.es Java: Recursión y Complejidad / 43 6ROXFLyQ ˛$QiOLVLV

22

Copyright © 2001 [email protected] Java: Recursión y Complejidad / 43

6ROXFLyQ����$QiOLVLV

❚ 3DUWHV�

❙ ,QLFLDOL]DU�\�GHYROYHU�DUUD\�%��2�Q�

❙ ,QLFLDOL]DU�V��2���

❙ %XFOH�L��VH�HMHFXWD�Q�YHFHV

❚ 7RWDO�

❙ 2�Q��2����2�Q� 2�Q�

❙ 2UGHQ�OLQHDO