From 44b9d6ba63864781fce1fe763cac6bda7d9c42c4 Mon Sep 17 00:00:00 2001 From: IsshikiHugh <2511524185@qq.com> Date: Tue, 26 Dec 2023 11:08:34 +0800 Subject: [PATCH] Deployed 90d11f76 with MkDocs version: 1.4.2 --- .../Lec15/index.html | 2 +- .../D3QD_OperatingSystem/Unit6/index.html | 114 ++++++++++- cour_note/D3QD_OperatingSystem/img/58.png | Bin 0 -> 89048 bytes index.html | 2 +- search/search_index.json | 2 +- sitemap.xml | 192 +++++++++--------- sitemap.xml.gz | Bin 762 -> 762 bytes 7 files changed, 205 insertions(+), 107 deletions(-) create mode 100644 cour_note/D3QD_OperatingSystem/img/58.png diff --git a/cour_note/D2CX_AdvancedDataStructure/Lec15/index.html b/cour_note/D2CX_AdvancedDataStructure/Lec15/index.html index 2f6d0cb8..e8a9f9ff 100644 --- a/cour_note/D2CX_AdvancedDataStructure/Lec15/index.html +++ b/cour_note/D2CX_AdvancedDataStructure/Lec15/index.html @@ -1731,7 +1731,7 @@

并行优化 最后更新: - 2023年10月31日 21:14:44 + 2023年12月26日 11:08:14
创建日期: 2023年6月21日 13:40:59 diff --git a/cour_note/D3QD_OperatingSystem/Unit6/index.html b/cour_note/D3QD_OperatingSystem/Unit6/index.html index b5dcf6a9..887f0e46 100644 --- a/cour_note/D3QD_OperatingSystem/Unit6/index.html +++ b/cour_note/D3QD_OperatingSystem/Unit6/index.html @@ -995,15 +995,29 @@
  • + + 文件系统 + + +
  • @@ -1270,15 +1284,29 @@
  • + + 文件系统 + + +
  • @@ -1288,7 +1316,7 @@

    Unit 6: 文件系统 | File System [未完成]

    -

    约 2914 个字 12 行代码 预计阅读时间 15 分钟

    +

    约 3380 个字 18 行代码 预计阅读时间 17 分钟

    导读

    @@ -1447,13 +1475,80 @@

    通用图目录 General graph directory.

    -

    文件系统挂载

    +

    文件系统

    +

    文件系统(file system, FS)在二级存储上,它为操作系统提供快速、便捷的,对硬盘数据的操作。文件系统是操作系统中,以文件的方式管理计算机软件资源的软件,以及被管理的文件和数据结构的集合。

    +
    +common file system types +
      +
    • FAT
    • +
    • FAT32, exFAT
    • +
    • NTFS
    • +
    • ReFS
    • +
    • S51K/S52K
    • +
    • ext
    • +
    • ext2, ext3, ext4(Linux, Android)
    • +
    • proc, sysfs
    • +
    • yaffs
    • +
    • ReiserFS
    • +
    • HPFS
    • +
    • UFS
    • +
    • HFS+(MacOS, iOS | old)
    • +
    • iso9660(CD)
    • +
    • NFS(network FS)
    • +
    • VFS(virtual FS)
    • +
    • ZFS(Open Solaris)
    • +
    • LTFS
    • +
    • APFS(MacOS, iOS | new)
    • +
    • ...
    • +
    +
    +

    文件系统挂载

    文件系统挂载(mount)是指将一个文件系统的根目录挂载到另一个文件系统的某个目录(被称为 mount point),使得这个目录下的文件可以访问到被挂载的文件系统中的文件。只有被挂载了,一个文件系统才能被访问。

    Volume mounted at /users.

    -

    文件系统结构

    +

    文件系统分层设计

    +

    文件系统被分为若干层,向下与 device 交互,向上接受 application programs 的请求,如下是各个分层的设计:

    +
    graph LR;
    +    A["application programs"] --> B["logical file system"];
    +    B --> C["file-organization module"];
    +    C --> D["basic file system"];
    +    D --> E["I/O control"];
    +    E --> F["devices"];
    +
      +
    1. I/O control
        +
      • 向下控制 I/O devices,向上为文件系统提供 I/O 功能;
      • +
      • 包含 device drivers 和 interrupt handlers,是与具体 device 交互的接口层;4
      • +
      +
    2. +
    3. Basic file system
        +
      • 向下一层发射“抽象”(与设备型号无关)的操作指令(由下一层转化为设备直接支持的指令);
      • +
      • I/O 调度有关;
      • +
      • 管理内存缓冲区(memory buffer)和缓存(caches);
          +
        • Buffer 的作用可以参考 ADS 中的外排序中的相关内容来理解;
        • +
        • Caches 用来存储一些会被频繁用到的文件系统元数据,以提高文件系统性能;
        • +
        +
      • +
      +
    4. +
    5. File-organization module
        +
      • 以 basic file system 提供的功能为基础;
      • +
      • 能够实现 file 的 logical block 到 physical block 的映射;4
      • +
      • 同时,file-organization module 也囊括了 free-space manager;
          +
        • Free-space manager 维护那些没有被分配的 blocks,并在 file-organization module 请求的时候提供这些 blocks;
        • +
        +
      • +
      +
    6. +
    7. Logical file system
        +
      • 文件控制块的形式存储文件系统的元数据,即一些结构信息,不包括实际的文件内容信息;
      • +
      • 具体来说,logical file system 会维护 directory 的信息,为之后的 file-organization module 提供一些信息,例如符号文件名;
      • +
      +
    8. +
    +

    FCB

    +

    文件控制块(file control block, FCB)


      @@ -1466,6 +1561,9 @@

      文件系统结构

      File Permissions 

      +
    1. +

      Implementation of File Systems 

      +

    @@ -1473,7 +1571,7 @@

    文件系统结构2023年12月23日 21:55:29 + 2023年12月26日 11:08:14
    创建日期: 2023年12月21日 13:11:17 diff --git a/cour_note/D3QD_OperatingSystem/img/58.png b/cour_note/D3QD_OperatingSystem/img/58.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee147d9929eb4069cdb5074c1031046642e96e1 GIT binary patch literal 89048 zcmeFZbyStz^EV8LlpqKgG?FTvhYl&}QjkXJmd-;XqI7qNba$6@HwQQz5CQ3K4)I7dvLpo|!!}`!hR8NkIw+ix>+D2?8v!osF@Xr4bU+iwLXmep!?cgq_3D&tt;Bso}HXF`>G% z%0OA4K6>2q_UJw8(iwJ&P*((ocC~|6rS)j`lTpbpPp)w#L`RrS$$U_0$ImNO3LeD4 zmp<*R*m;w;JQtt8m#)uSEhL;{ZE2l1Z*qnwBAm@?953-Gq&v>E?R2a7f{c*YhHkm& z>D9*8rw07S3CE+7mIAcMyzjl|ZK-Sl+ekA0qzm@`%l8gS2XlJ5BRQCa;*w2m zi`F$J4VJaa7Y2x>4+wap*G4$Vw0q(PN+_03o1?3$e-i13iAZ5d6NdYJHQM?~#hc7+ zf8oV4Hur6mx>Ql`A(3HSCY6i?U?ML>0ZSFb>mR!Ki7d@KE)*0)c~-8_ccz4q zpE(+BP}!T#0u1LddM|A(FOT#J_#FcYInWFV75EJq_#p;5{Pw(M7)4e?f88pA`OQ1jb@_Fjjj^P+FHxwPWYHrI zq7HJHn`*s%3D?Q;#vV!JJ1Bo;bacMi1#y^ggH8?U5~Q=Yz(ZF9@^*HbsfO$e$&IUm zeqEZMP%%W1Q1HBwP$`j+F+|dz`(P4hQzGB}_0K=>9*GFpKmWTKB{gz~y`&P2-#^`M z8~#qP_-iC26e3K@R1RM%qQA$&8`i$}pUHsMJ#UcqlOGZG-cJ5cZ*P}B#Q)NR_#`5U z@?|wR{S6vG-+w0P;DG!+H!3^6h=2*I1p8l2Fep>&(Ec7cJOb%AFZGK^(f^DBwB8@! zLM;5>Pd>q@c*8`Z5!nC36C{)`CdGd>LB=qo@pc))_-gp~N&pt&{AU!P_5Wkh|DP<< z{~o;l2F(Xq>{l;+>ZdTF3)8fvl#hKcVNbLy7twIZ=ji8c{1326xCg9C7e5PO_CLXB zt-0@F7=REWpVxq-KIoMGuyoG{o!nz2#bZqR>Y>p}jJngp`H=HPCj%AJu!=0pwsC?{ ztUfta1%bDXliCme+rD;~`qj$JdNLHhP$k321zRzr-Ou)z;#ji8Ze`aC3({}zO+3YwQ z29nynY2l&zN04DMNEIR0f*h3({zpL5H!(&I=NxnV(T=Hn&R5eG)}ye^=6NI6r;8Pl znvc&*pWe2el|tH|6PlXfBqw-pKgg9LsGkWfrUh*5%K<|F=#K4I}VWq z_er_`M~6i`QR1zZO{U)QF0Y=n;|e?Mw%mA56lZV~%olP;baxOa&P_Rap0C91R6%s@ z^}MdClE!9Pp_Ua{LtW|)?R*-}qur5=yHJ}JM~W->!p=SZZY+)gR=*_Ai*=YdLCopo zcC5v#-tUE0WV`4T9(Z87Y9bnwcw0%(cI9|ICY`C*f^T#8ZsVcC+nd6QAAbiZ!P>dmu!f`@((nLHZc7_NOpEm^C6y&twFr3T`I9W9B1 zzVQBuZ)d95Dz~nhRQo36>h(sF?s8v&Z~cdLisRI}{b3z^rvdim8;g_I4SWICa(&DK zG9HN6xNzC2-l%oWsAWom$cvc4DG&tz_dK2ZNXI2OP3@rTn&CTRHr<}b^Lwb zWwiEeZ_9r8d{U@iYw+eUnC?CJ{U@LMbG}X<`$~j*F)vfY1P;D5TwiR$n!5Oo$i~`x zPn%DhzUSI5eo4!QnG=)Te)m4NBG z?+~SUwHyX@Q#hBj?0;Sej$OF9K81N44npXeo0Yk{%XcXD4MyBzcgMRaytak}Pqk0O zVf;5AS|ZXsFU*SKd+E~ze%JTCDyW5>PPd!!6FLYnH?L8hb_-v#;ScS@OLm%w8yjO` z?#?rgkXZktewLOkW}X|5)8F4%>Oot{*Q>%e>*J)8S%GJ?aoX$`JDW8$MT21W^3f+K zep|BqJ6h1#S9vrn$SL0&wz`k!?1yY|g)cwNZ$;G3y6-jt=E^#Ocek`PdMr-c&5Wjl z*6<$EPU77+qMiX{QIA8GRQfnA42Ee2!z!R(K9TpXXAm@!o0@FM6>N>7Q6pQNw zApGI&#)lqBm2X+HFB5NO$e&f93U*kPbv_xb$^p5-cPhdf{v=vl7`{Uf+8H#rXLCtJPPCU936Q;oCV|N+Ayhhrbb8{}J`wE|N?|NZuol+!RJo zJ@2;Z;?RCd!vf`5(*@nDexBtz>NoGmT zh4E|pP3!C?*MrM(I$RB?8~ei=65Ci3uSQGT^A?U_ha?<|R0f+GZPk5){Y^daaf}|5 zC9nC!i<&S&5o;@90oQ;E;(dB|g3|BD&tx5{hz-AHR+F0Jrn^;ybM^c%0Bvs9kGSRY zKdN8kKa0`XHSZqc-`y&1{QXt?x7YxmE7_da0@yn1vHAdG@}#Z~L!6FN0*SQ^`9y){ zThkZ=5KP!XaO)$a9g{ve{G5EPMb>%V)x`g(VpzytOJg;1CriV>f_+_=Nwg$&r%-eO z#szub4s+Wqsw>f{Qa-ja_^8t@x5fx~dnV_g!mF){;ZR)`kX-z8pXSn*O7cGA_6Nhl zyWBOpX^kkukQ|7++tnqYau6vaU8nM$fe=fo#e$ON4el8igH!FV(qdCo6g9g0WCH?p zvTNBEuVme|3V=B6L8csP@E#f0k z0{~z0>DP+spN4R^OWW?OC$HRdxdv)Vb(buwXN-3MTVSgL1wE$WA2xO$KHAXcPRyX> z?_l&J)ThlLDK98N+3JJal-8<0i>Yki59L-y%TYOTeiAetM$>9_1or!1;%dc2Cp?Z zO;lGUWy7MIs14PTL+sbW-O##0t8S@DSt{l)m> z`XnoR_B2ZyE@A<~>{K`NnyQ2i?3(#(-qmCdVj9}AB765gL?*S}jqBM$=jNDp#ip#kuhB_=J*h(eNIX~q z;vnAoq25=%gbfZf`s!FT(`;>qJCuTza`y1^P@wR2LNKgx;i@>Pm3*1&J%}9G2h&2C zStuV45_GPZ*3om#z1Y2h@5Ka3K6h9ph|oxYhO4~{b{cke-d{m}Bh*{1p__iB!#A`O zQXVsm&&mCPz+JX}LPb_$K{{b--Ffppi9Md1dpf+_GM+1(l`xc5Yeh*&u#&=Q`opN8 z)GPWJEbBLhr zh9vYwvI*6BE_K*eoMlh=^PR^HL=z7(kj3^9M_FS-51PQbaoUrke3g<3!-5#>Z#QdF zJ9GpT8NfbGrW&K=tPEzR`lUF}zH~UV25h$d)7kd04v`mc=5!4FhE7268YRWgXf)e( z5Z$YCr;Eg~Fz*g9`&ytjIqgP3qsO~gw<9A1VtnQc<)%4u=9Q`+y5U95o~&ZHK5nJF zFml7O*QVa80!98&LzC4|D@eDWxIoDC+N7P`ujH}ZxQz=E>o4>ymQCXeqGWGO)3pwe z9IqdiqT{+|e{r`A%Gq3Yq{PLNO{no7A>psO!Xnv=pRy+NLo?~urlv`~WaH-0A6Y%_ zXC&nZ-*9YF=~`8ENn%}_;eK@tfp0e-XNy zjF#YGC~=#J<#KlHO;>++Y~9s+)N2*QAF@+SpBy8F0yp0zdmu<;@hii+%T!%dnpJ!22^HQFNAcx+l8^=Sg$9$n`OGA|u<>8;Ea*s(0rE(%Z zsa?5M*hSB9e)e?>c>SF_nwuzRx8weaccq`8c9%{G?Ko4-oLvNcjA3K7m~eK6gG9Gu zyR*^)GHk(`O$#!qrq@)Aw7u+@j@}jiDb_Wd++zdNBn5Q*{d#`xbL`4@M%-@eW-r5Y zq25AeT;gM2@*P~Bz1H+kYC?5+PcDRu< zSQ#8ZSd+3iU#fO4uke|7d$Rg6`48s7BO{(S_b^_k@<*3XcjMpo4ONK336m?1? zxU#8$v>jGfC~FGxtW|jc;wnqMXGwSDR<2c&$Jm_+3fYn^kv)5L zYP1$;I)rUw?QxN^g(Er#stAK1{rthe*HSX7vUC5~oJaPVb;*$!ZvKWcQ#*%r6Srf( zvr?0vTdo=Blk_Nv58n&s>KgluboCv#Fa7w24;s{e$*aURhKw1md z5G6)_076G;FqJ~~F;q24{@n|IU9rG1+9kvBn5=H*RK=lXF;OSe=lrEgnw^g2JC)pA z1YT7M+Wx*nHmSWlG^DR_Rq-9|8q=_0Zt}EHjgD%|0EZ&?lSsn`|c+Z~T0Jf7n5D%Gj^;)VW9W zTGTf^VJ|A}lE#_4DKYv*^p&o_TKA2-`(#YAJaZ~t^L%gp(zdCi;2^Dvu5yl(X*FZW zkpfzZ^VOSfu^L^~eeNe!o@q0n&p#EtF2?1A!+RU?`OBje+$2ZS$x{?l0t-JF$?{LW zRW*_)&r*eDq|XoT&QjJn1z4XwBsafTxZ#@hrDAQ_anFB{l?aQ$*kcKAxB$6T7Rogp z{H@uAcmG&`G^Rvrm%_DKG4X_tkf!x8IgaQf$M=haBlqmUtRIlPWf74yU4r?ZLbgq@ z2(%~o^?^vg>)eMV(qc{B)WDjU2R-Sdvl5?I5l2-w8OE?|grj z|CH+JLbZt~v6I;*T!h>e=6F?Z);DjsHf8Z@W{9eqE5_zU?rC;HI{8caFmSVcP7*e8 zP@0rL{|URz8~Et3mO{aL!yUp;gIy5**b2{rSFGR)8-ZR z@afAU6OC*(*Vn1LOO_|uG=!WI@JLz4M|FvlB;v4&@!6++irOYX#)H4VWo6a~`s%5% z8yH?aBW;lvrcJiqKU3%`nfoCz(Jhqs55~6nvm6Q?*PAz=4R_t_S{8N;Va+%aj9fFK zFM8l_)U;MzJex!@aIivhdK>14EMD0_%YQ)REHm014&Fv>g$%2tDpnK^h7;irYm|J@ zQ_!uTUqJ-=;FC}$U@^JmE_J7U_fVcL55A-56^v=mh{KaD2($M2G`wZF;)x{QVRKJV%4h0L!Dy@ zYaEIuCSTZqv{gf9rw6XXO_g~=<`%i~83rw77TN`#Z*y5UvD2}`PZRR&@>FGKcVcC5#40R#hZ(1BZ7z=kUg_6)2QlY)*nVap%}e>-d4)@`VS(; z#Z<&?y_Rd>)vAXksSErH}aH-1<3- zV18nP@fkU*95w^V1V#(C9}GcA z^V~8hTH6gWS7Ehm3P=SCPl4zZkT&K*w0dJrqE9(%IczD@A~%%Hw(wNS)Qlz zkrMxeFF8}p!UKuDZ?cJ9{UnY1TMl;Iw;svE6G2{@7cVtyZF7!MxDtB@YOR1OQ@IC>*i_bg%-|AEd%rl7H*8s91r+LT1!Sy zUkoN%o-Ns|Aa})$ZrP>J2`8?Mzep3mW*JynX%7?l{jlO;S$IQ(q>*V0dFx44>XzWv zsgCCWU^%^KBu#1|Mej;3IV&`%qtIY)o^p2Y5Z@Qfk-wl!QV^z^J$3U(Tc0dy92(;E zig7HTaO&meCmgfPh%)2Xa4u&mvQ*?co@m=DBGoHx6*mM-W{~ld@&sd&vk&@6>Zw>O z?OZe{;~sgdFB_hYRojJBUtHOIR?I2!`%p17yIbVXle@~lNmAq4Z6!FHf^l#CTA5q# zJaGYh3d;;b;}$;HYu|Z9FtMRweUwCD1I2;pQOt-IfRaW$f!zEFht2!U>?`>starYy z97(ihMQiSv5CikrVT)+1~iR6 zg}moz?`*qf;iUH@RsQ3M%$o}rpkdU3$nt3zOTRAsq0;YT zpS?K^b2@mJ6DL$|q!#WH8}7N*h7N-{FKjP&H|g@MZdJhkWTSJ!Su>gdwc1`u$>SED z_uBgY~C6#H0Zd z$c{q3g z3AM1HgbB~KaTGnQ^P6)Rm(L8FR}z44RqTB2XK{w;x?6oZd5tq4-E%z?%AfsM+Cv(( z)Rh_2vZAw3VRt@yX0*5pQ}F<6b$B4mPuSC~yi(;3;;vSYZ1_c5g1Z>nHg&gH5KqMZnDGVbe7G@+aqE-yEW zRS4bgCB@e8m2+Q?yIxjR2-^BFDMp4>GV3U6ig0$|36P?F#0IQl$r3$bh5q3r zX?DBcC#aw-%8|EH)_ZWgVZ2{D<4Ef_SCJLeYdEVgm0~H&0Cju6ce1u`cXZEjSn#wX zlf7sG;8&XiN7r0A!soU0K#njYP+mK>=MWY4JzenfVl5z7Lwmi}xvNiK;zzrk!A;2A za5R=pS7QF>8ZTeiW=^EhYuP9|_By|y*p6W)IC6jZEBB*5`j^bI<9(yMUA(KQBy%Yq z?N8*y4Hp672%xqqY6Z@d7w<*piNfE0aeHYUb}WMSV2EgD0I8#&rGfE%|3*Pkti>-m z!0wWZ5Ja%&ohg5vuBQ#eRnj|7yFQ|C(bVb-wD6cJvTn&X$6@(o1l_KFAoOFcNP(LF zrxFKEebjYIj6#LCQHm~Le@i-#XPrv{qsJd|l{`+2g;|GR8 z5Pzona}%76vZyAt7llnjd>LyKwE&Z6bLpIVqGVpo0ht|z661=`4_Im`<8_Tu_vg0( zddtaeQXTM_GB#yV&VD6lj&mvPMMo(O4VM9Ka|Y$>Rab%vp6WR$w^W8ur2?nCex$;H0*Pf0(l>Dd=NU{O`9AWL zzM$71_2;nDberJ**-`*SisUz&ia~DXZ_XGv)-#4nA$~he6IwOjn}+%b0CSP*#4Xd1 ze_T7vzuR~fx$a}aV(**Q>AZT#eYPEM5W24ZnF^776xxS*%7dr%#a+|rhm@NoG5kBV?b|Ik*9n&m z{ma`xXndprZQeS8OF?~>b3ZX3`aVxv=%uu801oa~L@D(}u1I63ry_2LF<80x_%G5X zA9DJ>>V6d8W}Nsye({y4V^148WLtV_O&jNnrh8G<9AHC1#Urh=@R#!}DAI5Vv&21$ zlFCSU6OO)IQjzS6P2;HKPF9@mMx5Rwz&K zu#5s6@^g|w`W$=GTi|M>zxuskq{h$t#=@ZXV2*k=r=?UcpZj(XG>%_cfX86xm&)N0YIoc&!c7)|cId(%w`!2eYEPoG`t!r{&@e>`z zijs3q0k=^-MqCUpbxaX^7S=Kp6 z6Q!_W*q%dF`4!`4SU2oug6A{cx{~71n+AoN>5tz`B^6wy&JGGn=8|k07mvK{fW� z5UDxZ@OJe=^B1}kLn6S10ZeP@4Klj;0(9hRkI(&6G=F(f_53W8HRL9mu6n+7b5{ah z9QKUuXVqA*@^Zi=&S@A`SWb#j?~c&&2MIs4ni}^nmP?TL_VPJC-52sx@sFEkz^5tB z-`&HzwAMsl5l&!^_iE6KSrNam{j$m|Fn%!OQWrF)6z1<=F2_zd;g>LVxQQz(XpoW6 zcGR(%=C*=mV$t9VB3OoV58hbi3SfGM5UWA8a8e2zCaW#-rxwCUi4v;(wV(DLNeUNU z7~&KZ*XL{X&SUt$2DoIe$)c_4a?nekB7~(1{Xs1eWFqLI4IbpO7ISZXkU-qaNWDwR zQx{yn_WPS(iNScNjYr6C48l;~6O6tZ8t|_!bGKacEJ9yXNHj96<8D~Ij>t-Z#T&yM zA&v~QU|y@=9D)MtQJ_LgGBY<;YKPBA#w00=x;1Ju?c@<{T}%$tp-&t4em-b$A7~KK z3``aNhZ0c_mGV=;z9!J5{%}FZ;kNZrH0sobqmJ#y z!y)T1!BflpKsCKw#ElZnqn}CP#JpkJJBRA$tEq}S7Rw&Sbmen5F2@F($kEN6f36cW z4qcFo&{K@tUlkPMAAj6j{Gq${*+Rze2VH_;q}w2)QJQ5M7yqiZ{V>eooS4)lC&BJV zU7C6QFY;avk)AG$dT&>q8?cpOWMzx< zYX%RnAdtm18od`3mqRgX?Dp+-cZr=5#mvx1 z@vi5BmvbLie^ zW|zptL#GYCkt>xb(k9D_);^p(A!70D-MXE$gXBz~PGb7+>7oXQ_qDZm^bPbw`LEBG zS9C6%a&{@QDD-QDh0$@2$76>mj)848-Fs4@avT%qG|tZTkp8VN|HilV z`Lr6I0{!Nn=r@@+<6k^QX%hF|)jv%sLZ@({TvNaFzK0vE?d7ER&Fm3smmYvO2yR)8 zrM?9l`Rx09YsY;4>HEh#8o=#T#vv7N%=RbE-l7)tk?_J_CS6w1`(4(gIbE#xu6>3& z|M;>hkwoebD}9X*;B)d&*IX4O+8^E_enjk14I3D7dCILqy*PW7O@HY%X>yu{b>-9e zq0O6bVIia7nX&*Lm%FPf$t?r|8xMt{u=ZmM^`v)c=HQa-RJwGuXVrpd+cJRduwqSp z13;*>fsn}VT!rthgAxiuVoiq92zEI%VJ`-fS(&aOSyDE`24QEB$a4eSoO=*|n;;uR?m;3mV7Bk7xDf_>x7 zyt_ivAZXsjK#3FX>uF#uCKi=_cE$J{$>#uoKlK~P_TG)e@wEf4x-D?kMh?65LZE{tk4&am?ds8EUm3{rGVhq5hw_- zod(-IH&6UzzT0%_)SdR}wJFFJXr2Vj1w~CXzuN?Td?m&GN#mBeuO`@ooGuA7G88T& zq6*_q1OU`#=uxX>ru|k!{U0vN@V=HoMKgf`-fq(U!LcbIjx|G<1^qexzaaiE0(*3v!GMAI)@mn&4c;#~J5=5-JH>~h7Jp%6>f?bl;5WsG@_%9B)|dei*x{q7 zMEeV*^9@M3{hv4>tFkj!;4N#O@t|7QtvoqBggG&+cq2fPNbPS1LP zK;CA>gkgnz0U(2XbF+kD?g&-V}*t9z)X}+0TpJ}ruhs2wv@ztbeBfL`c6)j*& z04DU&db=?H0}ktv6Zu_372D0kkg!xfT>>{^xB9d32IH15@^~TwAmk9n+dhUE3)f|-s}Wl2Dqd7ihZx@ z_2^EedJFiM%%Vf@SR4Sb_-SY~3W9P@DUn(AwD;Y1RxoD)dfCt%DSrC(QXGI`=`Mi6 z{Z3G!LJU2JO5?$$tK`XH_<8Zl#O3*Rr@c1gX$k82TpA`DV!p44O^Bt>Lf}A6BU|4S z3_srA45+|5u$yL?d`w3BAa`9ekxom5`F@lh5+65fsY<6oW8BEpK^Dmp;G3rj~117K>$kKzjVff(Ywi zECZ}bl_KW<1z{_d5U7$eftNT4kx>QqZ0YBW#R}ULnU1ZVdQ8{sqnCfoxvI&xMFl~f zDRPK04}kGkX(indbJ0F}#?%mE82;d?3h{b=c%imddD%3@QCX{ z>6?Q84~*! zF?tZr`SrT#d$-ck2^fQ??Z8wB2^1Hp2ig5lX44Dx02PQ}e%$TWfX1xXGW6TR9}RsJ zMGQOg5FpJ-Df@O-A`EeqSwaVjmZ83k1enK)<8sZ^@JpY3drynFS|Xw`{@V zu2d#FAxZhExBEr;H{kk3jQ9Eio9#UlM^UZZBaZF?&X2arDC>XBsc0O;{k;(UkU{9> zW0rv1O;8Y-PwYCv!x%C?5Z-Ak7!W4-Fa3LnZCb^MKMuHmbr?G|TYcOko;gOa?N}L$wGlyX zIL}>KDEZE5kK%UcWf1n@KEv(N*rS+E<;g%*N0pwH#9&M`Pm`I3Q~8b{ZuZ=Q7X6MS zp!Ja0x5`^KPyr{2q|UG|raO++qsNQdLAggP?hU3~T_q6q=!w@~Z$Zn*2v9y5!rH9i zqeKi=)HLn&C$dR0{nRAUqkx=!+N!-Oyal=g<`{3dh~vjC&_4h#{4B<`g49ghc&K_C zQZU3tHB%_`Cs8Ss{Vm57mDRro8z6CUzA>*6lDodUie2iRR{Zz7b zh{ksKO5OHeyTp%S+A)0*pQqg9WxF>pIy;>z?(oR>5mJv7aSMDV6isJu*Ow51A2d>) z^k2_&Rnp5Vz*XMg`2xzo0wp4TkRt2?6J9tfxz$Z1-Qdzi3d2DiySGwv8bi!Gw|oX) zC@#BY29e<%<{J&@go9K@g4omsj9~8L0%;{6WHh2Z(osV#2NYiI+%avayW);;b_C(+ zG6@L66DcWsN#(zMg!RP)DWe3utxshT+N#ugHQRkZlHmUTrXgg#G32XXF}rF#4U5cd zXzAF;_o$$dx7(kK9VOu|w-%gIi3c!;i*H`yAqcWZeT7m#7QqM^#PUO%@t>9vxscmh7fel}U{B_$-*QgL7HL@kAio2?i`v^AyJNozSVJVwF=9gRw z{epF9dnJ2vGNPHSP&g(`a(nh8%v*UQ~8M^uZEg&XLBYzh3jP4S)hoO zQz{7n&GzM9K0<7VDk_y|vQoD}!3M9UWR|&ph9Zq$XkUG-@^!X39l@;v8zPQXnXe9r z&N4KViv|0>%6qa_XO1mf6pv&HSN>4kHj4)8U9_pRzam`G@IaAe%XYU!qozf4qzgxz z(Fjt?XA64c5Z70LBGt&6BUwEGrm%v-Iu{A9(8Y zYbN$FU*CpmBKrupm?KLZp$c`FZ%)ly^*J;39rIor_6qb|H%iz~qSkZA$rOFl)ERpx zn9^X!j<6u!BF4ZD4&>fCpTL=qKQeDGxsbYQ+te2kTrJP^cw%u&p0`o~!I=Mc-O3-a zF7j)>o>s9akJh9wSMSo)#E^%Cn1+t*A!JlU3(y;=Z-NYBUnc0&6%4@NQ%wl^npZU< zHGF5jnYHZDi$^3#5#|_Oy_$Y-t2_U#_rIWTXw*ADy<=AIu%lIQ6h9fBbeJW#VCJJj zE+RsEEP6-Mf1d*3=Mr`*gq^(~#boavvsiG=1CDS;ChGroVmu0`j4iUyqOU7|tAM%6 zro3BT&DdQ2tfmr!rMRiJnC=7eElsotdx#W6b?b$S{nEnx(Ese1Tm8Y8BqMQU-Iu_r z^zzSphy!ix&7JVz1HvP%{}SN?h>)Ww58LN%^3cSBlV9y^Rv$Huxo-Ts!GH!2b$^?< zl^SZwijaKKLmoJ`gm^v=U5EjdyOLu~>_4jWmqt($Ag}9zsm4PpNw4r-CWC82I1M`x z`~M;mP@6Z2(Fh}yE{zh|nwZ)!)^ACoOCT%b-e4TF4FT`k4_Jyd+-f(a5;H(%oySWu z1ex3@bg|t>`>N`y!{9?%MuxMjNC_0a?3(}Z?Y~VR-i!eK;W_!A*)jZ%ZN5s~q+x!E zPxSqU2zv^cNIGv9Yhp4Y1iyl*_ttaL>K&(ap&`Uv=GumSRV*!+<*~2JL5Y$4_+8cS zw)J;RP`3l@^;;m2S4YzZp|&l8#}k_8A!<_^&N`=?dN=jT>?eo?KHCH2``$G^5<){! zeKN!X>yIIN3n@;sX7W#gyMC3)L9XYdMe!=dl1E9Y(BEL~#@|4FLdSX(Eh7JMwPhmQ z9~sSwAQ4T#2NO*I8K|)X`1YlB*m(gq$l8uAAD4~nx8ZZrp9`9;zEb(kcTQw+G8D0P z!aX8C(Y);htpjkW6+y{{h&Uu4 z72Dn^5==4n1aj;NNtW{xAK8f19nsZCt1o{~K83}z2$dYEKsp>4eZE!>hF$ag1n(bk z%-U_Rc`dVe*#Z?p@|A2aRB?*vjD*-X^~^U(SsKEIR%!_OGF-;{pkV(!%h0_mwGLS_3(q3RVGK;EucsT z!vxn4;TZW~16iLQq#zmud&=?SO}_`tWdMm@S)q+idf4i)0Di*99#SzB*ST^kx5xDR z1;cC8Dx1XOYjLCXR`4v)?q0vr^{7FY_<3elk(bLLul1H`%-US(hxR!I{$0|d!@Ee4onZf?EGLyJiiiCvSG*Jd4!T6%lA758Zs5Z|#>Kj3!D>1!|0Nr;$*JffE5_ zERJ<&2}y0w7OMpGT8h1;d9$`~buc0io z$(fZgMwP_}gsZ~JZqRDo)f??|{%=M80Z($JDWelqyQIg-0}j0+qY7^L<}x~`X|-hy5@LF3sN3jzk+qTeIpb!z}fg_hb5HZj$wRs3d^Ng{z&;2L4Ruy-QIR|Jz+^0eWwm#aZ*=e3`HE?qG zi31PtF2x*V_oje5eOC*b*#_2>+>Cfue8er~%TunQMqHuu(1WVXa$i?l%1By7y`Ri+ zJj;4(HEkx=K1!ZDfq&2Y-gn3AJMY;ZusDOZ)K3v}44^u}9MutZdlKv2p70|0LH&(7 z!B1)6V75|ItO#0PTY?lc4R4gGmDp9S^5MfYYsRSenVws1;?FKz!Uaz!Q>ZPrgJ;to~ zeorDjb?u|Pog2x1?6j}m)piRmGa;@=Lz-at)rPwD*O%G<;qBm~XPi^7?KOJuJX%+b zIa~O)b;EXbfzkQLVS+i(H)cI3vz^g_s^=n|$9aiz#Nhx(Si|bPyM^`P*TTSZgcM+N z0_Bgml^jF+fTvDIT{^o_&;Z=c2n)gdDPXg;mZYq26&i!ov*S_K5kb>oJ;_1q;84P|Vz6bp zUS+Y-k+NM;&i$5>#QBc1k!k-IvP@OcT0ptuI6DFEtv2xj4z4{4H7{aJHH^!>Kw*c? zk`~XRFE4HCdvGoe`e&Uac%a7eN^nP}7`fLCfOuAA)b^S5_|?<~&4YC?zvDgK6bijF z0GvQFZBBsS4iSi$er**+r`Q6jO-WZ$el3N~Ejw%LJnD#eQEl21tU}`!n+blBlclJx z^YCIr7PJ!bRHE)kkqQi;=nMW8=pw*q)eME>BY3w=#k!hoUvFh_4?U;$${f^Ya#Ixj z=xN7j{neptQEuQ2OQxfhB<9?5jou2~*>YwsY0#k`F7FQ&y4y6LNIEOv)BRLZ!9y%` z3-tu%tOo*0!z78&z`T8K!7RmJ4Zr1^F3NlWJV?`~+08Ah@6?L|J$dNvSOmjDmWX;o z00Fv}^iR5j5*W=_LF`c{sWCh|&3a3I38+Gud|^HleJ z96Zv4J*KKJdRt93Nydq0=Fq}BU)2`j}5a&LU&qqLrzO6``Ax;{*NAdc;nBR$zz;wp~ ziWf&$F>OBheaeazdXjy0=3UA`ByLwTLIsFA#yLq6tGEB2P+#eR3_NMNa!QV zje!~r52oR0(53L|02<%3{0og#5Zyd_spG$I0k~f>gU&+YEP6Sg_oa)1w=*pG|DotL zpdJs}-aJQ8q)CnUwE3W(ZMlsEe#8oq2}8q8e0K!WOLA{Gv=}WYESI4`)`hkq)Cw7c zPzDG|UMOJQ=6*<#6SOUX3hAl=)p5Xf$C_47XM2hAyWo=Q!8=N#fdXZ1axIzL;OJYcWyRnhpwcB!GqrcOnLCk} z)lNr!a%jUf_4kx43{~%vMdr5J_v#cdmx2G#@ppjv)TilmhCcDRQUV(IDl6&W&o?Xi zrs0@Q{~OP4oVs1N?a-fqJ^KTQ7F|m({;ks>1Ng1XM68{+87MLRjl3ME#OEV{&%Np< z<&Wk`Jjc;6b$_9STyxK+e)vo@2Ovn5q22!w|5sWaFyspS+k}IJ&y30w?&Vx&))iN< zo`tm3^`_SIYeHJCJdYVbKvgW{UvWAB#Hrsz4(CpsM$+5vS?#6cM$KaT60{rylUxLD zZ246$H2}3nP`iF6F#cW2V1y0@c)`I`Rp;$po{$K0ZL0CYyr2%ikUj5XGhVB-_Eo%5 z?HBymfl+foZ1ErIJ;6&~trJYnyG=YYqa?oE+l$}*Q~OERZ9VJJP@QSy?FsU?o(15) zx6O)~lQ{`O589v(6<{atyu0751m0Ar3n|URLc|cdC>!8ZeP7#}jbpD1)ta^M-~KRt zK0+*tQVGw;)_K_%>&LS@feCH(1!|JH=UtX^Tig858~kvEYHNSK#Jt@GJ4Du0QW6c( zbeooPm?TP$U78dA3n)LFpYO{teFYsESk`$zt2>Dx6Kry-6akeffs&Psb4*;YZ z_?iL)S39Kc<_K}R`+~Q|23#f|O=D)>W}yE0`oFjPvP#bXf%C3%{tH)xKRkf***RP!R#=P(iNS z!2Pc4(KEnj3QJ*4yo-cyCmP`e4DV1`j`3ez$q_3nBapPe%|rw12S(&WRQL0qOdwS7 z?hECJ0YI^!(@#_8|1bcNzyy&0-KmLxb#)5{DDGBxHh7mX#w#jq~Bnc#o zNZ1X(G%VtJefq{&{$|@FU>3TT{Q02r@R>!3$z5ER2;{`9u}BicfBB$OIMAm#s0cq} zC}}K*4>>oFvv{UU{n*zuU(bRu0&ts=eev$Ju3R$61c1R@eJHd>d3v!~fE;q%G<3IWZ3YS<~4EsCp~ocg4o zMf=7Rp(HR_K;@cNKgR-*f)!OMfa!irmkgaS%qRMV3Y;w5&aj?{s~4p1bGFvm3C0^w z6;S~@cn9D`7`io46yUjs8!GoBa!WpW@>W#ct5soY=p~J>*h5|#qE6t^4JB4U3)@6q zKD@mfXSvz7vEG_4yCNq-og$@Y3Zd#T}uWOM4K29X*wm0_Fg06E-7YHGCYK zd1oKu$9r9$rwH|Wn?%w?oLIL2rMYcbD_nn`y6=+Bty1&mq@v0qR&x)iXL9|OY!O=7 zjyk0cpbc>|8h~9N1ht{{!X+|Wd9B31Tp{?=C5$2$$$p)p8VZ0dUU;`2aSSMlyd=EK zlr50}PllX1N%E3oh@|785Ge3`c)p^9aZ6ON9*|&o)-tr}V$XRH1#d&A5KjxT`Za~k zF|>woC_!zgE5f^AgOdFP#CsjPUN=yA;K7bj$}*=3XkYL6G8u)2yYSgwdu}{YA;jTg zJ;#|q{_T*u_Ufuw!6x7bgl&+RbI1;v6D-LA-bWEBn(G6~be|B4Y1i}JZi^wEV>x|FCBU|Nb?TP_b|ox^PF z&lSDwaA)PhE=2L#T}HzCfmc5W_h${G7j0={bIYSqR_fJoKY$f7v?p+f02%!_fAct(?+tNYS=8z*WS|9 zH%`mCt`qhVva>K?|D{8LUCs;_)X!X#3?0e#1ztLsg#Cz8NR%6!+D3qmbv|96?*J8t z4(2yrz~eST$D5jC?FW&v%V3=|iwh)Q2ez6UTnW3ORPZ@oMrnH~Odk zhVe5VFIZZBV)d?hLM12+4(h=tb*mSXd0%cHEt#76)$Z$*raiKAPeY8qIEQ|l{}kZ) zv6)KbX7|aS^G@Arec;x0_U!60lRP)vsaASwdBL~-*BbM;J6 z1rm>TS!^`#;56f?9vEJ{XheI@NA%D4yq2(RY$9nCpK(QDK_0IaKah4jV zY5`Ivb?Lgu08wc-1jo)=$vg`U4!a1E>gozbrRHh0nG8>|Kshiqq5w(uyIrnX{1D? zyQI5IT3V1U=?0}AN<=_HLXht6?iP^llx`7_?*6R@_WOSO{hjZOasE1EFdX}S_PWMGBEEb`n&GADjIfdAB>Z$MwV$B4|`gbP`EA_-$?Mc-;qe+3hjHQX=sw>)@srlt` zWLyd5CzxB5y9Q_aCPYRRQ$^tXufXXk2l7s1^3z}5-Y$Ut=geaCHGR=qas8!bj{DrS zSb;J|PaJj>vx&5YT#%36 zkGANjl9L?a?C(93iD;$G+_UT)IdqtTWj8ye@4a)o*Uvt0+8$swSfF=mQ!|}Sw_I4i zSUI(S7}>Zw$i?i{0e>)UGWpEi^XEAA5eN#1bY@zYs5lB5JzMV;x5jW!e}d#iW@ zsL36W%&NAbR2o=1v$3^Ey0Tl!=uhJG1ur_V({#~RZ=om_j;$Rz>_HP^qf%Bp@|Mf3 z0{^`Fb;xMlyvat={5>m&5Y<@OeBp)$dNp#rT6H;s^ZZ^pqS^Y$jp|ekq#g;Q`xW3w z^TV=0rb$i6^lB|>I-QB`RpaH~sm*YogESn$#qs5OO_On98+VeDUHZi-R#G&A@7P9u z<#ry*YRn&)fqy^qBeX%82aFID*zuB^<$q%|F0)Qtv4hC$JMqlK1qby(dY$YOJ*V~W zyQO02HhCe1aVH<$$Caf_f8jVk+2HI6Q*ITltSP>g|=(Z{^>t%sPeK zytHLaPbkho*liJJ!jMwZx9q`4~qBM^7_JNG|n0UnMvc~iFK63rueRhGkA zO{4@192E#?;?r}z5wwX8gS;8a)A%2=h|#Lt*Y>02~zl&^pR35WGioe za&nAq4)S9{4{bQ|*Q7xfdr`n)Sr;*ii36b4D2#lh(CjtoJHYIH(dQ-T{!*M`+(es} zjO0)#o$uuGEQr1s@wf2eXZ`3vsZVH3EN`lt+x^iBzSE{<{_yE34V$hQ;+nPgOy}nn ztSSDn`nNIb30mmb65X^{?^9LLsf!!x*TpPXqm>J_D*d;brs#)*ZzRJ7Km0)pBMvpG zDB4!?eY`6A`#F9g&8#|_zq~*8K=NBd-d%aqjIUfD_@a%&8A}$P-7FypOYgp(pA?x> z(y(g+R0Jk7??ZaF)zItMbY=Yo`{yio>wf1;C?*;v%%e<2!u#!cx5C&e6BHI%Y5Ag> zB&Y59G@2PBm1iw<^#6_4vdrsl_wQe%EDaO<9lPX|cNM$9XHH5618V`+O%}#qnEgIN z6vrTgjt-4;pJN2XDSaVCUWbt>;wcVt*IS)2e~H4kE62R9v|Z{0J1bL_Z*XIGOlWf# z=>NWT_Q=OiCk?nwO$fadFl<%FCzs@3LlYkP5{u#Tm#rE4N=nPVGQx z%u-z!Mu~4%iG5ymjqFTC?$+UVH-Y1`lY?IrV}wqH-3bv3T-1A3Jw_9cOFLW|r?k%K zJlA?80Qm+-GHOlSCgKXOjNc9qVANRQ&|pq#jpO=4F}__ea?Guvs3OfnLvV7GayLh0 zQf&di{`te(YAI@hnq=yFY-n}2{sfmuW+_9=6WE9D+galSO+?FU&qOmw!mNsL1?Uo2 zZAQ`kAtMvmILKtPuh7y_{lo^is*~+QH%7u{%YPR$;T>yL>7o<$)Vq6XmsC!O5hFvl z$0G=SWZH-3OjMNu5(P}bME^MiJ*SDcKlV%-Lrf>vH_7QH-wp&M>|v8nt}b#(bd zOI7ASJ2Nl{#J{9?y2kqC=Y{BuSl5cf9{E6kSDySSEm49kXKiNMhv8{zYjTj8RE=fOh zJhl$03EkdRiSE5h4+R=`wh4+PREHV*rIY?C+vHTeBqb#~JThUJx_#s)fxJnJu0vY1 zNnw$H5Z$teoiHG=hZpg>&A5LiR5TCck~wqL1t}}_%ck~vNK=N%8t$fcoV+JlG09XA zCo0n7{66#4T)l|wn(KGw)>r(HN2d}j`K~r@GRyDDbDd$EmiDI>4ORziCrI;Wi!6$w zaERkzgQHj~z|#+FIP6XClxB(f_B^84*Ws{O55#~rDlWv=86}aTO^jsdPasJNF62+< zm-?LZy`6##-e@1mVNkGQVzoeqhbeImFt*;Sc#@4^48`cA%>309BeSr?el4b>4~xH) zKh@ondi0V#u2HnPSxgYZJ@0C?kdB|NsNl82-t8`zT_v{Wur?xhWdH^otMdGzSbL(MYkB_AHWFcZ8f=!};Tnu$&82KK2tb}^JfECNrp2_dvHPP zn#{m`0h4g&B_KR{qr*Z3#iX@I59X2OmqwlrccCLLTU`et9IT<91(ojwaTDJ}1yN*w zg}Ji7t82AdHSI-Om$~xMzLpa1wcaLVRu^ne6ZJUYaGNxtppS8l$2+vCh@5;wQrGg0 zrA>eWec;mKC;PKkB?)4iuijh0u2LQK=w!N1&ZdQjzfGXDUFVe|Iay$`6M{H>-8#}e z`Za1j?4rfAzQ)FiXUs=k@g3-$fNdvS8f7~0ijD7mNb{~~G_Z^b9?Qa?*s|69P@)G3b*|8-{G+LY(dA zj*5==@vf66MF?%i;XK9M?`3mBS*HgJXF(&f;#!Rbxv~i2NB&YM#%216fQ%Mina?|K z5I=t|co|>E7bjNneap1KM@6Ot(~jz|^Ex^Qhq9P?rqg6~F1O3fX7=_OgvaU@vME$0 zYM7=p#HmZ`S@C|wEl(cVA;OKujd5eC*mRpxKUQS)x;5t;LSTA(PKu|RV?+c$%Rnpc z)`Wb49Qy2gR>l(YcmWw|S#Tb#sa37jNZoM`-C!CzmLcZuU>t8q=3;#<2!Oh2I>}X6 zFFfbnVu18GWXVT|q=InZ%s{6`f}JzMOavRTE(|MNO@B`cmW!1?u2=q)lup-!i!Dp} zyilTyg(Jhg;kC{5UCvGGKrEXywR_K3m0rPxcrMZIlvh z@+C(?iKvMRRkr47&zMK=wwq$6 z;tgaa6{SX}PYa-%e$4GTpUuH2%WU;}Qf}mM6Yyg;05mkI*V=MGMjZA;#oV9zV0HWU zlPM|Z;jIA$l*4>7X5t~CE9(?WtloTCQzD_ya8;+AM;N~bjgEJQ>IoN%a|*lU`4In; zM~#9t{E+~uU~P?RFOL0E?bT>k1+!KB$8$nc8)^7JJEYOge&@Qlef>Ud$ykb?Kh@*d zk1Z^ZDmUw>VyP&(h=dw9_1f8Z&_1)7r5J@SC45{2hZ{~gW_!+Dko{4q>V9Ob%0teZ zVPEw6hP~#7W!2q{M9*r#IoA_@Q!eZ*Kb7=sXohC&tFFuZ1dRikyIJ6p>Ac3}r&$mz ziVOP=P9VLI>r7t}OeoCj6S)ZoNLVDqFS~6!8fs9^kmT%7i53y^6C+zI;8ATk%s;D} z#)yw7nJ!=n9|iCz~ZqC`n*@0exeYM&ozx#eu*Man^&t;i9O z{%WU!SU}?nh-;j3Qr`Q!cS3^gns&IL=_NVwYCUkG!a6lTS3h z0?w2JE#E8-ZDZbtxXrRC73VbSNTY)jXN(~?^N4CH*tCRdKzb6%xt6zv&OL`A*ZgZG z_$)YOqMz&4vgr1vCAImuS3F9yX>agGgaMjg05OD?=cg;JjR4pLN_LP*hwtYt^o&fQbLG$jov)9uPKeTeVX65 zk&z{`X;$j?g5O;lg7t2n;HRKVdAIVl*9B8Qg^>jw<%Vnb>#^G*B7G(k^XC!Hm;wZ` z&luSDtaV?CHyzZdyI1=9VZ{Z1^dJmql8jTW}QDC>x!(Z zBqj;RWzLO5D5%_K2_D+uoYJDlcf_;vojgfW(!RC8zN2j44_Pp*Uw;v~Q&KZuFs0ID zWJm%x1Mm%VwkwZog^;F(&ApJ8e78g5(aFX{eyAu2@mBWP)J>@UaFr;oI-U99xsl-V zML;NrxeAK2V)GTy|J+t&>YZrzDdd4QBb#x7Uozfi!+nw>i6+;~BPYojS!jHXE}(K1 z@sFtelkFe!@Sb*~&5wI34|Zg&4+*9(sN2CtXWTTSHk+L}e^J2EN-z^LRS7{1SC(Tm z9ye9#)KiZ=lB(n@OfDoPw(j*6cvJc$D#t!nQ;Pz{v4W{cJ7HNw$H(9-fIHC-X52r? zd5+b!62H{}FkC!2qoSA)t4{bDgVYcZ))LQ z^aS^!3~+Lr+!S^4R$Y6bXI_m>I(63sTax3@p}=Ek_G3TT4yM)=uWSO`xf3fO%ZXB} zydEPm_9{*u@1|olY^v8J>jmtGz30e~s}BIK@8|qvbq#A5@u-3jx#fDDS!_hUYXDeJ z;dUZYlv-R-@I;l3&q=#^U<}UX51LADYWSvq?}V5=+uFg-oP5`xu+?@{y93ApIrhVZL@xTQ;XeY&_H9VE?CzzgaeRz`2*cK`LW+s4yD6<#9$uF@9uOl5-|^NJ zELIB~TpN}&>2#awV-psYb>iO~ekPCB_PXe|y(ve1cI@PM_#z6_bqJCtoewjW{%MEe@rfd&r zTr@X+jdvbugrjcZM4yG6e9h{AH}1~Bnl%k$;=pheT4_H%B6a4_o)v)HG^*$iXjsOI z$`5;YG2BZd5a8k#ySb|cX#TwWeb~no45^L0cr}X~n{*C6(dqp4xc3@`LFt^5B#o~t zruOkp{rnHesZ(gAsGixaq0l#VJ(KUfq#{Q2?{c<(yB$@g?Ms}VBUK6Ubb zZk#qBUOGM1ouH)N+MIZ#uZvsWJ|(i`vgk&0SzKVIi(ZtLiXcm56ir%@i8kZ}Z`~vuSmz#b$OQx3V54c-yF-p-gfS0pFY;MIy zWzXB3OZRh*lIv`C+R-9qvjT0E2cLDY{tx4zfe z`Y!WM^FfnV$y^tq#HwPEv6Ou>wk6i+4iLmaY>s!YDGugB>^2mLRuk!V8Gfz-`tlGV zt&|z+5ahrOy~bom0XS&f=;x|mWIam*yFv6NsG*;Rg2fCqn!k)e3}3BpcAa%+ zg!WQai(TO4kYpLKyw^029f7P##*0MbMyR!u2Q#b;@*MRWu$Gqyk^3^bP%QsLz~TEk zOj3nhh_7LpYi;yj!CaidAj z$+NG(zAo*6_qGHTjks}K?rC_m(^WQij2=aQ$2*Y3_@~CZt(7#-EAWG)D-7ei z8EcK7dYc8f?(r7cGK_{BNiNRrv1mn*m?QW=yuh-A0qo-zfxtjbV?p=(Ao!vKFt};j2_ya1@&^{j~K1W%xJI;-SO2{&iwmujC07!gwDR z&F1R20dnZYtoRiHHEWxYYJN{2|fJ}x*ud4uq#Peikul1jqh@D$f3H5mSh zJ*rrl?jr~2D0(cErrvjvq|{u_ZF15|Go7v-T?ihz-}rbQJE^&wu(6&A9Mx8ZyvhPSd1W_mT9fb7H*iqHc;CC${vD-|kGK*4f}vL73+3yOL<)M)#Cu zvXfm*3a~LGuhNX%GXLvqy|&J3tc9&?S+XGAgOgaSALoXH6I~gwka;B$SeKLHMtx45 zHw~Hf3^6{MChw(9ZE# z=f%AkUYk-rAGu!(YBh1X{OB}-)4VNQf2T&Dyk@^N1(z{7mqo&8-F%C|x2LzCj# zCTOPetxryD!E9~E#K9r!#ii}`JMOT87J!ij_+b%dY>;QhoFX`robVBDAF#mvhE78a z^ak*0Nk%_xa#qy2z6qPS;@T;L02-)+&Q$Z$Cp|HTeA|Vq+?vp|XVO%d1`>6%lBmAw zVb$N3(R1`dr{}AT7lC`N%gP{)c=!o0s;)hj`73v%ZkL10?V^~=j2SsAz%@_cGTKAK z9r;}V$l(LmY$lYp9@eP*>+a)Y=%o&`w0Kw0G_GR`uyhut6c5>h<3QU(qDhW*kFLPL zmB(v5TX1h!RpcS7OaPGbR1_rh_$xshdInzsYxUYp@KoL@B50*OD41kmARCuBIe8tWWHz`1TP4nprPVQxM**+ zdrY0=IBE{rUv3X*z_H#ZORpnlJQYp7ft%C@U><1p!$^kIS)RwQ(s#DLXk7O08etCH za>@%i@1d!Df>16Fm7L(tXc-Zv?c_3&d377d+y6U(hmmkA)-Z6qRCgrv)IE?Qffr{A z(vEl_?HtD4;k!00j3B2K0v+aa6mY-(JGqS#kbCgUq}2aA3GV-1uET+5Q-%9JeFf^I zA4L?QNpRzv>1FrXc|iN%=Oh3F*`@T{`gf)w9fP!~XBI!3jEYeCkXXKiZU%-HwZ zdHK3B`7uDT%a4-){nq0f52_Ib%U4vB^Fd>+OXE8KpN+Y0nQi)qoPpJ(-Af^ z*A0+X1Cl->*l~OAUn4~aYZqdzOsEZ%uzcPv#trE12WZccVhnkTM^&V^dAK+aQFot7?D%8@ctS~amBSvyB5)g@1bYI4NE|bJiiw-*2#wq(d zW~mu5_F4=YivTDZSnL1boWsvg$fudVU(5oo-gnbOOISJzAi(T|K7Lo0t)n-Ukdal$-?Z2|d*Kd;sDaL#WB2E%wromnn3j zUNl;Ivr;v;(5PHF?T0tC@^z3y8#5G(4|N|7%2Yk0X-0Lv_<}ym;#wrBO56FtDxQ|z zhIE2Sao7i0{D3StkhOagk;0siO9>84m{^XmUWFJdI$9DtKe#^`aA7}#ObqBdMc6Mg z$mK-CPNE5BPPcLBL-Ug)sgj(-%34HEbFwVBvd84Avwx? z&~OCu(4j;lJa3SpjU6V0vC#MQFspcdu-&|>`ThVyG0ZtM^4&dBkr#-tZl9$J6`>AM z`rNWH_1d%>wf$;HI%uO-V^<&Muud4;@V-uvp{K*3`1*m@z^9BlnSNyo#SCX{y;MJ+ zp6~VVhV-h8{8B56cx#yHhmOVyv}`1q3ALjV9}LpsNOq8sR_z-z@>j&0l*vtI_1*m7 z+$`zaJx1ey2{NqVjzH4M(+omk=4tnE}8AuiMQ%STv34!QH2U>LDbk4sCyfekF7eSg0O|m6 zFq_MNj8!^yEadU`#Acy&1=8}JCK)%IGJ`5sC06YHs4bF6?De;LXH!r3{M zU;}e;->FDZfauR(XWnxxalwqWjG+21wARg>5XM<(%r{eLu}ybL$OlP~ru7NQL_uL% zt-KxV>d;##eVE8d?FNjB`gr5vvSvQ#1UDWgK>c!xKwmXROZE45@uVf@Nb&nCig&v6 zh17=sAi=@#9|IR{2sQQ^mC}I%4Gv+A<-e&wum*kmXZ@r9Y#?LbgYs!3fl}q_qwZ(o z6wrtgaar_bE$E{{+56&n%UttKOHF(6OFkprhwC(begiN_g4x;KG(WmXUf^}uPzH)X zDcMi>&<>5p(&R7>XqR|y=xkBO9b&N&kVqB#5h zcxFdDLJEI`lqvslh1aIdIt5zt71prOkW%Y#Pcar33bllhe4o=w%kr@h_j(%KS7-rg zQX<%AL!0&{1(YJNlo)Z3#91gy53D2~OG@$I3{K1QRbcXsxs5qdB%nLo7q!cGlKdoB1{_Y>x=mK^zBCOyD;qv<3El4@RXe~?NeUapP6Isr4xab z!Af;i_(nZT4ueJN6AMS`F>g+wcZQbng*~r@0$)O2uV1$UAF70K5japUra>9)y-H*r zUGiw7Qq<%X;0X;Pss}tXjgClX`bPn}Pz4;CY~M=|{|Fw{6#bE-csWHX(fhCK)M?hy z@^!-vMxt1x(2u@=qfIsvF~Wg9N&7y^tVo8FxMp#*oDDn}5kdA1;&M}XdiU+Y5YoU9 z61CRxP(8O{eeCkX{xDc;7#ok#)9KW1eH6GY$Ia2ih031&kCuWqj(?S#Kx_UY-ikS_ zAXOgPNLF>jj>tzeAb&fMJvQwqE;U1j5_w;}IJL+DAs!z6eQWvPLJVvV&72$AO1ZU@ zBlnJ9Z^QU*57Zpi%>=DnoSd|&Pia6B*X+&w>RjPQom)nF(%U3j^Gw$fsQY|`8>JFCNMzElR)D$* z8Itr+#p!JLiWa7OewsUP!1_Xb208bGBmYkW58+5ZR^|9V?;YLwi)`vBdNtuVcKfwY zlD#A}d*DBk!~#j$M5YO$l5|il9g|*Nb2%DOGdGy5qJOQlPjLn&IUYlUNNEibLB&i4hG%(0Icj1%0B!`ndnoRn&(1XOJeBg|mN7c=3QR zv=sDz0Y}DUN}z`N6fNBIAd#o5*)T+3Kd@AUJY)XHh3kQ@jji`h-uIJdFce-@cjcc4 zMJy|HR`^nbitv6v=&6GeI080d0rW{E9ZsB{`%fI)Pfv=-nVBi*$luFL@+OAf0^wbSJ0><*k^kLSM#67NNNOUe)Ix znQof&#X`>O6XI4KOG{uB;{dV?fcf@&}R-5;Ha+J6MW1A_F} z8`DF}0WiivGe$d!BRzqWbu_!~K=a$Tn`2fhkpf^h(~Fk`HF*2=$4z4!a}vx3srqQuyxI>|1OJ5u^X~5E{@!gp785 zpuYJE^W*K$f;i{Xss5J+s_dpjnGZ()-zbj(tP+{|;)(Se=}l9i!CwZ4rLmfluc0Ob z9W)8Zx%H*)G4ugZRD|RGDmkKoCQDvXJZ2B|gcd%m)?Lkn0Wq{+go}Ivl45`E$p+uH zjA<>@tQZH^y%Hg{LT`mEY~&oQIIwe8$@@0)tDY@7iG`^A5!KGGjTFypYQt6r}dec%$*x4CIqIf_E|Ev#)H7?-uoKx}RBdCH%VPK22s@|-2ex=W) zawO&c!oo!ty^Js)#f0UvvqpBpWaYgX>#h$jjhg`J&|ftZCZKPnRwI^f)KwRA4@HA2 zBw%OvN`1GcN>U&o-F?2PvT%>V=<@JPrSk7D85EQL=U<4;Gg(HudHIuB4KPf?)4!@E zMYn1xSS50+a}Fk~M&r5n(jg0Oa6nZ`>T?aZWqkVbrY@m{Ru-znM@VZFEGE6rPHK{z zKLk4wa7j8X7@BFKAGX^EcWQUPnJOpoC^YMEiN22B-6|R6Q60D$J*d$G0E3APkk1-) z;)?J?>)vho;SOB_#-E}j(?M%}CT9SS?%wk6p_cvqHH2NPj50Dt|4FTda#r4CdM|sq z){ut@Z-!G$ye0t>BSErVUN2~YU}G}Fl~+NML(_oiw9dJjMWeIK@N*(BCrNS{7301E zh%z7;Qqn%Z@8P9zouNbpS~a#s!Q9uk6_+;=v+T`%dUqyLJQ=GmVDaXq?&QPLTxn7UXVo<$K@V?(*S6wf_FcVl91`j z_&Ihk6QcR7QpPEavsZ?=SI&FIwrW4d;<8q&+B&aO<}=zqF_Qyy`VrSM4yd|5liOb( zbQN4)LUgO&?^>VC3aS@eq#NRX3Fpkyi*||}JY%33>KPixj1VAUwrH1U++hrFHrK_? zYdmhIOgh_;mNOmUU zZmxYTf1oec3if83O{XwD6Acl_TrlzGttfUc&+o^#<;)A4?IMrR$r&XXukAQl5+AYwE=lwouX2VZq=u zO3QSOGs$$dX!#>&*>RHMa-*(#4C_g#TkohWMeG#iE~f+S5?~4=37iU_Ir@HtlZJ!e zsR+}ushXJMtJtlT>!^@oFpG}ZSj*tXn;o(GdrZikrBL})%2<}yIwo2^$b_*?K1gpP zk0kG+L}-2Yt|L<64H2KC{Z!q3P@%;53PKu(9)mnI^hO|7nvbMwss{TjE-D`_xGDte zmF!P6bv$P+^sD?kf-@Co!Wd;T%^aP8WIio)cG^b?pUlBf4X|_t0C%SUU&RXm*Ey&y zdw%aa)TJQRr2w27jWY`0?b1)Q`NK1&; zE2P_r5X#Eh2CWM)GgfAWY`RIhMQ&93VK|K{w7;raD(*AsDf7Cy%mX(REEKXm%*smXqcu9Ndy_Sy_lx5H-g(^N&F5wEO}p)h}+^!NCf9Z-XK$Mc0NyqMz`5^LFcXa9j5{ZDrSd*Dry|& zlfKcTzl}=I`b15uc|mpNyZh%hw(q{2;Hc}2=x*FMFI?mu81Yb6yJnyP7bCD0+y-47 zDtM|^vo}!JA|$%9t?s>?dhCd!Ak=@?j!w2ah-}Dmjs1lH~ntARHPL z)-=kg?xm72_>~rrPb>)GF`+Wny%ALB`=k+U*u#~_G}34`Jx%RKYt(Bpsy3FLf66SB zZnZr0oU0C+Af4VDbtGAcDP@>#8?wR%g+nc7uO(!m)5iOpnJT8)!yqV@JEK73&3SYR{N(&>kxQ8VTr8qDn zS-7=7G>oKUv{ugN^mfp7YIz?tTb^~Yn^w`CoHDt`$Rjc4h==bOyV{f@WSs}``c3gGpJyZfteDbB-blwy$6V?XL#(7+O%$ti?;T!AD0_{ zF3*(YAz8qba1NlI%)oNNd+mrAI32kA-&K@_ zqA#Xyncm^e9ieig%@Z&NGSqngCZ0H)B5^#4X4KAqzuL8Ja!d9wy@E~y`E;gVKE#cW z-2`7+VXO`|948Kt;@05EHCxug5)5H36lM%hN%B`SxOv?UT~a*H-a@bDXc)ZrVp5+q zFsY>(ieiN7S%eZ6fZ?nwN?5_0ZrMR)9f~wD$dwm?acpI zQfNT)?3{ZHwYoU@aErHh6~JEBIc<@A`{Bc8<8sx5UZ5uIm32f`&WgtUup~*X1$GMV zOK`uB)=F^0S99rpN0{@6Qx^H{ku`ajfm3x(E&#gZQ~6_W{27YcW;pArZ)Y6{9_v%P_2T0C^uEYQbv@OS6v zAI1Xve%7vBsu-P7#$ZiETz!xC|Mj4sU}3MLvoJ^Spb;f~{gS0CQ~)zx9|tsY(_DiteD5%zAjw6;c7{wDEX9f1GHj}s}d6sqIdm>eEX zrIw3LCH6XhcLIR;`F1TAk^_mnD%=yzp6*V2o@aR=m2u4G^6QkodP(D9P(!F67>je~ zofn%llU;tQ`D)fs)Zi<{I2 z;@EShFN#`zz+1MXaa%{LKc%leqpK2sUyS;*BH#$z+n3WBikFeCkhIlfqm?M=UaeJY z|4zl9p^3%fTmAkgl=$^`CK+Bgs%N|N6^9X+s%8a6)o=P3YZ9xTvI8p-!iw&t=0B1}@I1sNkqhXWOD6-9LXwg?vG1<@2rTsA@{?Kt_%(mG?rOJi zOyDZfK^26Cio-b3doREM-d|yVc{C)9;}KvEbzvn&xaRX~2SMj{Z=syT4?)7g_Zy`m zu$aL8Pzu9@FQpl^Drr#&;P;YTR{|{qh+I^`R9&gUbl?qrVd*P1Ueo{M^I#ncnA7m!dB@VpzmU%!n2Y(ev>japalaiOcVfjy1u#Vf& zg>&`2E+iPsIz*>rF|xh^7qO{uqpX;L(CR!@wx3pc)Lgky1-T%dku;?YA}?<|$zU-05EF<^lOM>I zbS{O(3CG>AxFx}2Q@)vP=@Q500o+q%XQt{1m+k^$WRw9Q*D=TAe};sPLY@ztm!9Bv zOoEkjentu^A&=6@?)+>6@A2Vdbb-|0Ln(XFc2tTlz)~T`bPDCHTjK7_d&`738;{+z z)`Z0U`oMIoqJcmF1%QR4!CejSyPoY~%r8hYVH5$Fv%czL)sz}VD6iy+mIYPK@9mPN z?Cjo?;~6chqAWE{6C69W!F9kAqpj7_uqiI&Dxn^p3>R=Zh*_-$evjb5MXR=<|My?!q?eDf01O5cV2*Na~3Rdmr0z% zZN|^$`s3IqRzJ*-mIDe`!O^DJNzOy>;-;hBhDjAK@fBhBpJF6#BqtFL`&z1<3-!0_ zhK)6{Zo-#C+=GzV)f6Toa&PRU$0I&O)aL?i$7A5G z%$DbawOpP1bsv4w`CmKc0aQ^jGS2AF+TGv3Zs@#T2pk=cZ3*!zdfd8drZEhn5s`tL z@BD<+J)}BW;Rsqcnx>-lAQtn*+|2!K%`JeJrKvEzmbkY0XQ|}~_D_SiH2Qz1S!aUE zHn4VA4KXF4qj@0(^m@1i&k=){inGUaB|#X-@s|7wM0Y>HT&u?N`ut$)po{p(uD33f zc>smEQOTy}=9IS&$69X9~n}ZQsYLxXk|&0FV=Qwo~q| zb7sJ13XYIt7uaL6Z8(`UO`m!;NR>Pi?E9iVERYAu=$!TA7bYGA4_6Z551I9=q5Sc0 z{Ysn2hAK;4QG}`VG1T?m`^5{meW_CWjur=_p*iAtVR;wLBZEv#j9Omi{K(rIbCYz7R1V($5TfDit+Z30Si2t z`;RBMf1Iy{v*q#ZklzOmWdY|NP9TERX-v&Ki$KR7e5X+vALYtxr+x9G&)5n|0jLDo z+$Z0kq5%C?4=r0|IxML!uW`#Id?jI5{;MCOmp>?ccU}0Bx$gqbuUmf0Q%fE~j$-f{ z@259>@@U|*f@!y8;y%Njv6d98k~&EnAp;TP}@ zC=+1YBNJX`h#vBN1s_rxfJ#g#%VU%Rs9vg?N&JaENLLVF@O1e)v~dz~+v=Dvhukb- zUSf{U`Y~r%R(`0L^lCo(J#b`()2R0l!w%v&bc7-Sw@IT?8y@apW6bc#W8Z={n8Wt- z#k))ONflb%)>}~@C?uhb%#4BAfNiPg@$WjnLdDPg-Je8IcL}cPD%RB{SFcocU5k(!M`|N2 z=6sFL)BIpHK2+Qa0XvR4`0| z@<@$8iSFXNt^TTbG$&w)+FZ8JD`98FiYB=5Yav^s zF+x?GQCmz0;BYDMJhdjr-9WxuMj-Ym)f7|_*0;188{d41DSKOg*qblW7me&I+5|7W zN-8XldiYB{)B;RElm*>S$0=r5zdW77Lfwrf);h-c$?Bo`LlHf1k>vxiP?&oVVztES zM|2kAiFxu}y6Q{y9$aa{gTKO03yqXEaw8Shtok0wh@$4A8hn~R8RUQ_5#_rdi^9O>@jbFGs#(Jb!Hw@XIu&rX#2<_26)VdJ0UVZ2g=WWRKQ_{K>g1Z3xW`wgJKFhHtGl>u?<*0*Q_;I@ zs6N3Hw=guHuh{Z;s*9(-D+w zf4ykNnz=VE#TY+=&>`L>DDZCAMD= zua=;Qes$j>`H=X>GoV58m#EXiO{@HqwESy-5_gv`^r#(>a5BT5Cx<3SxEG@Kotrsk zII?X|;5Pz)M2bD-%hjYr7m)v@1Zh8Li{T+=yh5;B`MB>T_gY}p6T^fh6Bm&@`WO5` zEZe!ySJ5Oc`cvqTy&MoEFR;ff{HIY_&$^44rX+E3cHL39^BsZXHGNN{m?H-%IeK#Q zIsxjJD;#0d12;?56a?30L8L`-8dq@-gbo;@3&|0@4bgcRFSS&tzE{;kD+2^QTR#T>Q!l$M!AzC}wt= z9!jA+ry7iMHe@}vk?3Km3o3T}G7NXJ@I}8){mik?Ub}K9*q`p5byI|?ntfqT9@vfK zvNr5jn~X+KJ7`Es>=?Y{#Ysbe|UTAs4SPZ{a->tx&)*{LO{AZ z1Qd{N1OWl*?iMNOmhLX;25F?b8xf?tk>A|le%@!l>-+xuTg&CzxVi6Zu8DJI&N+_H z7&k0Q*U3D0Bfsf4=dj;W(sYnNW-57~7vOo<<7$hJj)hJxtTH%7v-uV22jkSaL-tab zZYT-a)F+RQcvF|^leejSE_SRdX4Pb`zSc)T?Mr-SLMm6#c0_0m$~x{gyf_T8%Jf*- zVGPRk+35A^2ccpVE4$GU>^!qbY?cu23@SjH`!@~ZqBg81ca%SxTJ6UR6#iLjxa^C$ zA2q0+ORmsxKFPFtTt%Dh9;o~$!-mYh1I^4IJ4r+a%#flojNsb%bozAz`nD+v69184z-_@FRp5^ zohn z1BsH&RN&Q{p`Fjdpp2b9{NfDY<#P!$+5BB`3a9s7Yt~Pqr&`e>ZndnytCi7s->qB(}_a%9)?xVKXwG8L{IiJ681gEX?H)`bF@I1Fh;{fhUYL$hn2bR*JsrO7TR^% z6z7kyv}hh$SU$8Rt~+eO(^yt;mu>q3-jkc}v8L$i@-<4uWQKm5Wp?wPaJuk0?s?QV zBD`NoZzG4@CM+hhsNc93n~ZMMjSpw;+{MJ{RG)pIV3Id=Z?4#p+1twOjo-eYomRQ zvGKY%6tAjgd0&{CBo&QlIT$JN4Nq-@{X$Tj9T~1%T?xZtcKVGQ0yBdfb~}3|zRS7l z)0Q2*IUklyY=Pe#?O~Iqlv&Edu#$^B>nY8ilZaso+Zoq+7nf67hSgBSiR*`YZ7@rE@|J#rltsJ5V z<+XmaskeS;U8S}cRhNC;>fP9t9CHJ!Z}jLkhJ1#*D+f8+5svaETRiWEl^4$jdJJEn zhW{{KRr5T&3(@=9)QgGqs#n^4RSyEwHui`6En1}!cU)0we}|-es9@e2Oo^^MeeZQy^b}E3p5pV_fTdyAX27MpsyHrL z^S7QpcUbJ|trTMa9jHKIIAoh&DwJ~DfCS+|xppN>iN++rMc-{YpQvswJlEpEN`AlMu?lUTo7C2YBKfpcHH?u$RI zZeBEq+Lr~v*gUnBOZwn5VvAcXH`#-;NbIkbpFrEahHt9nai-`)fw5W{z)IP z1bl?`zY+{*LizUK6<_UVY;wN_4VNc@e}=v%!}Y>AaP zy~yx=X+o28iltd=xNkYk`!-~VgiDoRI@afJdlvj>;`KF53H}@YI~< zWJB2C0UcJf>Py+yPobs5H);EEZ^p2EZ6q@UI&Cqr z70qBg-gTC%v*^CjczS|YELQ`?zyq!YgGXsoCSzz9z~CJx8CeU1_H?t0RGX6D0jx%4 z3CS!}&Ac3%T}pM1O&;pHu&gH;_6-ZlhP}7e_n)iB5b0Uk`haN_V0v-Bez};@skP z_xe06h#wfMtYCtU@Xh8Nxi^%fQfS}@v4Joi2Ran0rHI*Pnj?tF&`1>RVbzL za~wqRMDnoxGlQDR=Cagut`SrUZi}A0$zqAasX z(8w*+1Eg~%*9PJO@h>93<>|*TT@aR?k5z*OmvKe!6d0HSBF`6z*-YmPF+I6U-T`-< z345UFj{9jWSG%!44^n~)-*d3mDjcah?TAsqvhOztNE&Lv{>RlVg;0!{r;u1$W6YWQqnA}rx`pCg|XlgBZhCnFM7eLBNuSx1GhWhpx; zEqJkqtbgF-r+6+W&oGcvin;qF)Stionzn{W@hj7rY_v;3iqZT_RwOD0i6X1qKm&~1 z`&)8(l8k3!H8PSVjbJl4v{fi!{!+nN+S-C(_tv*V!{e|Mm!itI)nH1}(g^Pw(Yy-n7J)@kd*>nqs^|*DmQL2 z%QPHD?TilGd zT1f++PZ?jp%}K?~!j?Gmt$_M2fEgNArByyHm9J{5L8^x`$+H1Ne}Az_c}TmdJRnnX zvs%+~pck$8`^Kp{iwZ0ezC8WM9jRfq>FR1`ZpCnd_+mFQXRyS3vJx)#?#l)xP0oCm zJm%Xz!%gQVaKVUKVv#drkl>VYZi>l*LmMKs+Huq%pWQT*X%w2^&9}A>IJ(G9KP3n~ zYT3nz#NVSuN@8^~1u$#M^60^bJ!5~t1e0{Wc)el42`61-={KRgjX1{sT zRL@+ArNQoZhS`|c+Ot#^2eZNI;f7CWr{1IOSM#<*k9S2j?$m_F!;?^Ooijsg=qs4u zP`bRY2L$gfhs44Pv`XY%12HTs5HUQg=CAtdccZ64Y`Cb$(4WXH^ zwPLJOki^xJ;10z3)Lf9rzTWx;U@^9wM9!LQ7bgpQ9nl~idN8vexb8O>GU1W+2tKP= z55XBxmToUH2l(|M_96l}y9EY$3V`Dkgh+#E#HzmXTBclSw0&9OO97Bmp*VzS!H=86 zdMRJp);umy=BP|s6}=r7oh68@mc31yfbj9_70%QOIK-9%G~lK$baG_VD;{e#)TwR? z=1mhSTiBOSqcxT~yHO#v+32AcBi0qj(XO&0Fn-KpNt@&qG#tJ9{S!Yuo?LxG7*nC` z`yR&^M?%qDdlu(fjIQY(!alBUlsr)sXj3cxuED|FLE7-Kg^1OHhU(sr>fPCVh)|En z6C6v}3LArNg#<0HA0y?wz6_<8M!^!wu3OWD_)i%$B!k^&V*Ln@Fnzcw_r;L|eq z)a$v|`b{8P@XW2P^7SF1p8|gLj0&8%)=ija9#&^l+nJxJnbe7cc-7%*SDAKi1no`t z=kD2>KCkYDY$k=0~dv_FjR6egr=Wdb?VW_?UfR(FO@Uak?#Cc(zTjI zbqDcfg>P2t2utK;f8!vr@V)Fps;-r$iH>$E$vJmG=lx}b1tuVn5lNmfWyv3zP<c`i_(tG>|Ejx<$dhow&Fk5jzw)kV#24A^;|ZM zuml6H1PH-6E~EO!^g#bRPI|%ViV%HN-|h~Rnn|7Fq*pZbD)_e5(KKmj+}1#Pq?vi4 zg=rDtrN?fEd%-kh(wW|&N%7@^yXauod?)t4=hPP`H}w316puP6?AU{4m~6_U(f-?f zjtl{~SkN_pgL2V)TxaS}b)<$w0N;g2`o<)OW{kPuGRP>-<;_{Nyt_jPpisNr)%z4I zg2F$He$-A0OXxOuj4zUa5^d#}=ko*3a3CQ@Ia>yG#iuo<2Fd4}Vnlll4oNKfz{SdE zMglyM$rVJgbXhj0I>{ssvwe6%)nWFs7&Momncj?DJ&-#Yd30C@b~*BEs&loEnNjuB zx6U2P_PW!K!y+vkrq+l(qi=KMtHIv3?HnQz#p>vG_9t?X6V|0@+6dWy)hK&-g1Piu zO7lc$cv*7{_3RqW`2`^FtNQODi{v7Po~ry7dg5{vpx<|T8{2VRnQ-#Cj<{2D`{&4B zhTcxVwWR+eIMVk**f%dRw$I@MJ#P}Fv%Gc6k}1tJsV|w-Ua!7yE5&aqic`}Iv_qv# zR}l>Nmd3-r7~ovWBQd}X(|KO>R6wZyd^5dXDrqw&E6xSpxl*Ml;F+~7l65qR%O=@r zS^u&>x{VW=(lddbVX4s9GH1~wEQT34VoPeT=9zE&gfljhTuTIbP2GE=X-zUdU;Etc zfrG(PirDu$R>rM=RId7TPT~R?6#R{m6+gF7-!MZHMNQIEz`!x%q58bbxRGStWj22c zW&i{q3TC-2+q&k9h%x1oQV$*b{gi-frQ?bL?ZVh|hqHKQYFuxSqw7Bl9MW}rxypJ0 zFiMI@9ccJ%I2b%kJ;Wu%bpp7y$%*C!8E%bKx!_m|nEL|eySvk*9<2Np=tiI}0PkAH7ov@x|`nm5dTDg9B=?AQ51aQu+ z`(OY2Gc+lE8yW|aFM_`t!oYnXVutfeqKy!3dq&01{aS=>#;hlttlI3a;Rfg#qQikA z2XV!ADn{nLSI0&rzTq9OQB7gVJsm$E{P;g%TR?MIZ(*7 zH^HS;AO4YHLJEKgG&wAF=zPJwlwQ+K4Lgk$Krth|0}HOOD|%Ub(AF`lFZv$|63|@E ziQCZ6D4<}f0V>gi^G0eZ)3rvrpLzkHjB)wqYyVYyflsWz_TnE}cYf!jgd_g`=;x2E zJdkS^{81EOjm#>0yVQwGCw=%=Ck*5kG&(>qwC-x|^a1?#Vx#lcUcys)9(k&Puq4Y7t=3%lCF`78P{dF0&K3 z_5Binl4gq%gRS0vx1jzFqpf43%ZVKN@Pp+7qV(#8DATy7zDPU>UH=N8^q>iu)K-zc zFZ@fvgbHe_w@!sm;eV7`q~4f7AM^6?@$%k(Yo%U5Q+F(DBUS(7-mA= zS8fh=vs!*`D%I#eeHi>Jy7wd36pHV9@{sqG3=-OS9xK;C!lX9wqvh2Rnz54W#UAg3 zte|v|MhNIqkYbaAHw%3f^a}D5@O=g`)@AW*eqD>+G|aYVRY(+8Ok|n1h<)z9+xZ$e z&I}(MXRr{tAVQSPygQGW2-SQ{NeO>=s0xAX_vT5V@ z#X*rRJhM=}W~p+aF!z+|AJHyE;l3(4Lkg++4vJx#HhiL?AQoB;<~~W?x*A0RQ^^Ol z`TsKNG09ntkmpj*yk=chcS(JBNRJ{Sk%`?;Pmyis@b!QZ@@-iVMZQeESt8_>MSum+ zx6qcAJ-B`|a8h7c&6>kik;afA!T#O5&wpjJ3c$aYM6ShgZ)T83_&9`|yEe0{;V{pU z;F6MzBG+rNRFP+t8~JoZ-l3=bp#w&MT9FX%dII?=9Mv06e#kz=3c z@hCTa^~1PW2E$~>yY=3|NP`1)!lVB^?dhNmx;SqGl7*jR=82$GX+?_Ct8;<4t3hE%C^`U;!HJon}*R%P0qdMyFyqz6e1dA97X;7**b|Kh1k}_)LVl;5B*d!0o3TI z*v!3+tb;O*`nB-8(kC2!RHv3xovZ{+26CZ)h4K*jen&*PFr>`_Bp%J;GRk(B12aLQ zbDtvb90GF~q~anWHc@)n>if@>AqZWNlP90)JpHlbB*=+qOp(&0$L%T+Jv1Zz_1+Zl z1L7f!rPjO`)_#S3`Wwn8&+KzW#SYs>ub%vfg(R;c>6r3vtaZUdBZUh+0mD?$tC#A& zGonHTEbY_|#>O_jn4wP`S4dKSsOEoZ)u&;H6X%C%B3QR5ZN#anI1I(gU(5G2m=$+O zKXkt=FdV60Meag^20;FN_=3G~j4W$(A~eUamYMF4nE~6&?JUf`v&-}#BPE4IC9ZKb zf5;0fkb1pVAY{$&(fb|9Q9?Lv7@HWhEq$3|67TT!Aqr7KjNQf=X7}}@hv{{88l=CF zOP}$KR@!nXOYJskGpi21aL6daeccd^Q^J1)$b_MY=bYfC#>Zv%5K8);Lcn#j%WMa<=(=NYl; zqC&cQ^yfz|(F6uVR>1m<6=$?S5i)LQ71hO&6+Ory@-Te=rS_$VMsL<$F{`x6w3Fan z*=8BVBdF9H+!2pGeOj=gHm`m!*2@4*8TuypK4y?Uhwj>#nR81%5v3rZMQ$2Xjm{rFs)n|w3+chSa-#dUHDtzpr2&*!t`#~)#g!Z)3 zob_pUDU}hh{q|-AD@^7W5v=Td z`7J$Ep{ZW;kLQ&ZVuC=VPlSve?>yM$YA6&lk)iZvWR&sdeo0*ySE|nX$CK~1&*`^@>?|*&aAws~P30CBU zkx!DH!J>W@zj{7I!=ucWq~66T?iUDPi&{5ZzPHemdMklAkozenWW8kHy0wg&yZ3Y!+g%gRD*szSa^TvU|a z6@>pk25Yz>KFoa{d+er4Hoq5#>|EG*KzwUE7qSMfolrha>#sk z@ZN<)>fHvq0q$Tp!+k^|hb8qG`4KGitiD2ha=?bF)-QG-$5vxsNwr5Q%VkpX;yw9`i4lNzR}-J zh_VnCX*-iyt3#1=9Bqrc7Br(Zx+*|*x5kICH z6^FcfX~Yv5!sL*@(i*_roc_e1=e}FKd}9z^VTrJTyh*(!I?h{+G#eO8jKho+B6&l zV9`%{%#fcX6NP*hg}ZdxgYnqj%mnCX=Cjg9^33>+o4vW_nh}6}?KlgV^E8^T_#8pt zVn6?xPss4f_7R@pebD;X{QLq6;eGc8z7+lv@3r^26YX zRKuTv>5}$|OFEl--;5+F4hXmT?+xyk!05?dv4aBkjWn4l_63P{Ijasynaq;I`Cdv> zVa=M8;N2mM86nV|(DYC5o3j$ES$NX7KC~8o8Yq9g5Mtq1Dxx9L9e&kL-oFes7y;#6Am!|}c-V%Cell=D7 z8Sj;u0w*T?4R=Rn!61!AO>jk^=fn3$LKp&kiq-d|f(S&RbG`3rp-B<1M-cepw|}M{ zejKb75*6V!tj~+6k2j?FJCd?MxS*Da-o0OIOGBd%Q`x{NnDayk#w#;q8sO6+cLvk> z=Vx#p{Ix3oi)ug)h0%(lfgR)(TVO$5F5eYTY)I6n9^1s6Oq)PaZfFguAsP_6Y@rU+ zV(zC1axae$jdnv70s3Rd$QUT;W*wF49IN;i#5`!m3h?a?4}%vP6be3L1@8XyFTH&= zD2+O-#9#92)#c}^Uke)bu53OvFvJskbEq}H-Pr`nK28Pt*lgn-pDCn|Q9e3Hy33;J ziF#|WI~Ob}e#atKUXwa=A`-Vkdl(LRM%or+AGPp&9T9w3i5v<+?}CSy|Hs=e#~>Py zH}$DSxltRx;a`0wlK6KC`w~3B?y}q-QYHkMN2~aY&op3+l9H-O&rbM^IH~wYavFGC zDgI8b|0^x^JWOHrnnTSdx*T$s^fj zz@kcM025rb=~sWyhD3z>Bw&fqkG4uzvE^oz;qgG@@OFz?f>0b=Y(!gsxk1C(qSc%H z>-`2<_lp&O7lsYW7x8aA-x=Vr+iea@n^QehfG{YgPY=^Q>4+SCbG{C!!e`k|fjCYq zZ=x|Th4PhH`DC{^y{R=FH-1DSJAcj3L_SN?C@L8RC*LYfizaq6`Plm{Lju)sM$S+Q z_5B7H5fhKoqtRsIg-0qZ9I^;&B6gpKoDl>~5R`?h8TVssjzJm59Bh%tV>K=CYm*5c z+Aaa1<1X6L#OFRT3qgy#&yG=1@PS8DnR@4#+?VOmUaZu2HMm#b5dQl$$2LQp+AKcP z$0M09(A5S}@V>TNG$pj%4`q+*XdwoB#Dw z_sFEZbz3>0mHInfd3|SWxyj&|ane8CNcG&Be7a=8SassvZR%dg$|5rLVHpcAx$9Td zbWNRc=5O^gWhRyxxA2X^C8lk((}_Icf|W4*D=RpZXIU@nPDWt|lVt8Yi8(q*8<}ev zr920X7lA~&dq8YPfCn{MEov28)*uiL{&r`p!CP5pn_JR=}7O00E)MIqR7Bzy-H-$IVq9)hkvwZ~5; zhNqV=NTsN<%&NH@j-+MFb&z@a2SVj0`%)H7PfT2oPs$N~bMH51{A#&N;6`S*nCF_P zw>SNdVRQuqc7LPJ$oub(|9+t;8zX0zVbb|5$35Fn@I3rXqDyJs$rvj6^=bJ9Yoc8` z{kFFk)vMA9b@3OB2p^)h)}<{gOLF4~CQ==>_lVD3wo6MLW{s);^MHR9KJYuB`es7F z1T};6*QLrxzXq-0PZ**Z@aFxM7)_by$1CPZ|BRq_@^qH(KaL3IQ>D)&O5UjCH5wJ0 zIN05Y+@3a0Lhnp_u+^7=dg*TKdUId)6vz$2TAYDhzgr6G!WQLOZY;0Rvh*~a;sf};rl6NB)D+Px*W4U6mK zTRX%enfwHWMK(=(j$dN(SHSc{KK;;BMSR_wc3Y0!|y9#~Uj^1_k9Olow zQY@LDk%5BI48}l37EYs~6dqsHmVt5Z1i$K=DONovnu%gfPIdrbIc2$n#6tk!fzXVs z{LCKEOjy&vQl$*^5(`JC==IuIhlMC$mlXZOEEavJoQN@+^*8y%uj6wiUX1lFaj7h{ z0EfRbF$<{6sFfZS$h<*{?fsNNgGM?@uV}z%zraCJZ08wsFp8RkjEKoc(HD#id922) zEA)xk+PS=pwqN>|7TvFC{x4DlL~?(+WX4)!cKex%6G;`&4;G|Jjg+dM4qMnerY{f- z$$j%+e8)wt(M$B5bMP3~$-UB}wMXWIv0-e)&w)56xOR z`-B6*s6sfi=DJxe?Z2spe`R=RpiN8aa%RDGHw)m7y?3Qszg{PyQ20f-#L2w2Ofjl! zuQ)G=74*!NO0T(O3o{MK|4XDvvjUCg%lZN7en161f;+A<9uuE3KkVKI$OM-BK!-7O z<(-`J8T*Bvovr}GqTcFyZqEY1X$YUm8`pN-&AuvXuK!PG{RxIAb$2Ag{X!Pd6c}3? zd47hA&hr4Ef?`#;al`3%A!O7_RP>W4ru1|ZhY^X&LF%mbya7c}@^AkiJ3v4ZN&=LT zI$NW6)ey?a-FNmBZ6iBoS8}sW1MF8Rlt(6)*RloeijEYDbGq&RoH8AHEdMYwARrv( zXtRKatc91Az*+6u{FhxF7qP0V6*^Ty&N{OI1;1;!{;YB}&pYJ;3o@z;m0rQewf~t? z#31YPFHs@)uVV)d@E(c~|FB|NnefEY_0qC9%N2gpU~$W(G{e~zmc3Lebs@fvc8L3G*hG z-oyL{lVkuoB`u8M@qMTC71|eYKSB1+dD|^vsbp_!6t6t765pWIhu^Ykf5Fv075}g~ zkb`i9I`s$m?^}xonmUZQcotyK`l`ROi`u*0s2JfZIti}OQ>=Y&^-(U30iuP6%*+2G zG7Q7IoNT6}^6xO!xcM9HsW9Z;6>X8!3A>~lZM${YifbADjV2Ht9&Q}x`TgV55rXlU zMIf%@db5R3&IQKr-l+eIQtUwVaxL7=P zrXTowemHHa!EwI?5FzFlx*k7l3sxZ%1!B{^`#dc<1|E-Ho`!WNPQ})D>UtoVQNQem z>>j|DAr&;&Rd5~r{c`KoqY<{QVEnNni_{5KRS+^AEBNlIcp#pJfnPjSvz7h326)-9 zR{#)3+mpv#-VUsPVNY@pBGxO>0iwU%-(_~MANdnN#@Dq4{jG8y=;Ajurhn-Uq{!Yf z95Z4NXX@5Z`OG$KqkHxZsW&#_I0L3snft>@3uX8tZ}kepd{iPH%3;jJhmzBL1_dHJ zQTrF?AqQc2qb}zqrz}9n-RB-5f2W~?Quz++zq_xR``0G*P5`+XEycJ*>VGj65I_eM z*)01Pyg>%CrO)phh=L>w{`vENJY9}&YJC0IkB7|I--!rhj_S}|ivIN+MKGldzu8PeIaOHa6I?&Gx7F+KW7{pls%z-o=^RM zN=fQ10>Ue=Tr1b9khbKJz&Hf6M{r~6cOw&W? zPZiW*=ipH3KRgn8D0pv_P~j0DJ+X2XR_#rBU-{cI$5a6m5Lx?sjl^|f7oBeHPkZS~ z*-Wz}!ia$*($O+jRfY})1;wQ8GvXF-W2-EATo+%RC0dRHJNPMWwdIobg6opI3Ajkh zPL>;$LNht^^wgx~_Dm5ltQ_Wk{RK|hL)yM%TbWPHqY!};Vbth9^5}?n35d>tx zimhlM^u>rR2Mq~MHDCVG7g�yiwNz`A3kS#vU@TA#=im^e>Eyi_Ea`j8{SB&svw8 zuw?nf5YIA#LN0ia7?E!1WI6 z9qpFASPK`JMvLa84U3srHv0Z@?F2w?z1RVeAm<~709Yk+@P;8cAceeE14^dS<_zY` zhxv(1f+srnYGP@N3epFbu$QB@^(UiJxgO2dgYZ!yH&=a(ThuGCtlhH(ID#6h2W<9C zd56?>`~T)pu+8w>3_yKmcZPU(97rt#nv*K^*9SgadF{WFZKk>P;XOV*+CHz!?lwgUV8~ z$?*WEDrgU7DTXSgid}1!MUQK9dmyzf91^%yatEY}t=v=(g+H%Z4uo6&At^u*C08+G zL%)E(x~Qai>&0m+JPD2Ti8l$7cDqL$AZ1jo_z@JmbC`K$PH`>%Gl1y~jGY1q-#~rD z<#JS*Kt9ZUZywlaj8f#$1W&>fC|Pk=k&4R7%GBq$CIMjKokYzvP}eF1nH_p3jltVk zbmcT2`l*}6E;2CN3C5V3m<0myfu?0smHLEnWN-pIq0Qqdx7Ch7lMHFFL%RqplVV7yU<42LqJB@`PRi)foP#yB zr^BSn=*DJ?<&yLHLXkW98b;t`l#kQ432YNXlwbUU zu8^DJkifI-1#@&ZuSLE)m$TuaeBqZY{!Ea(q-BrCe&iJ{`}I+u?C(rlO?lm zZ=z+B0q?k>b7y1jTVnP%j#f@+kBFYtEO<2RIYDCfxWUoU6GKb&eU`y}2$KN@9@Vab zERwNy8QRz3h6vw+YzX@EF-R>a!xKBDQO5;Ah|X8{q_w9)kDB7=EGlFGz~EgvCpJF; zL_}3J^a@Wr=|9y0tf;t?m$Z4J`SX|xL59I=d~1B8+d|dx);H`LOjn8 zE-}QpGEoIm59$K;VV?a*o5G9fEt`eAIjq|*;yHaq;6K;7=(=C*ad+!@N40&ALI8NB z_X|(iv7j$tf4@U9l@+|L1VUHvZof`GuOYv9Gg4I zxYVINEt9ZC&;lTs`flgJB<{y#b-R0lG9GH);Oeg`{~<$Phn>+5)<0{@Px zU~y<;FpItoqMr+qe)Pvym_PAg0EJb~vfyHg$mXEc+0|yH#&wT-1D2TLCa5NEy2mPL z+9=h1{Hdl{I^e^^d_S6gL>9`p=mwXn;wB7xngbZ3BE|Jv1qC`S9#8b3eN1fd#X8?P zF2)y17MUMhFDkL zJ8mF_UlRpg=LB$Jo~xEM&MgyTb>h6V^Z^)UVjyYT^lt4uB7X$s3g8qbB(>`-BkW8< zC_YOEYB(gr)o2oKn{EEst5b$f{q7K>g{vvE3xS6tdI-9&NBc4v-?OImSk0o-QcT@w zO9j*md%ce4C8ltcKc!q2Nexp6)6aZTmapOAJa~0(pvib5gKYrHAI~@9kVDh$uyewD zl$A|#p4sJWCm)_z#LQ=?B}?@b#N{ewMNp^J0xfCX>yvMw;t$SuAxT#p5kw!DTMnC_ zl0?a!i8=+p>qasiLYWX)kb~R5(_Xl@!DIW8L=Od#*1duof;;VaNBL*S%2`M$wz5d= ze3#gDC*2Cz!x$M;UY^Eyx9Ot5Xqs17)H=<01mms|-kvjf^vt=u4tp9`9^-OqgVrMB zW$EyIUa`sG+uA*o0oX8_OPPDn_wbzBu)k3LvuhH#8xa4f&|8@j3(;_16` z{xU?)Xa8MD7~jQZkn8rO=pM_M`orHPTsXL-X3<5xjUaOqa;uo3 z-tZ*cmMEo6G7r1yadFK;PIWl3O-m>Kw4Zi!J1YP9QnWVYvd9VcBbbarVn7X3wC2NCY5f&*C_HxM~Ed{!5NcKxV7Jfe$JU`2BvvS z>|f~Wv5wyjwcHiM%gx**`6J_J98kPKp*wRA3Sg;*YDbS=6RFSl8sQk_x*_cfd(+Z%u^LpM>V*_UtGVUc%kh4gkU&9f?EAHQk1)JC#WmmcPKC?7 z->z-j9ID47QMWml;={^E%_9gp8=SR=?_LOuv0+Lk2sun?jJm#er9_W-)G>oXPHBs1 z#D?hYeof@4=BmkDOS4(FbPVNTccFkvkyN%1ZW}9ouSfJnyV0`z}-36u%X&OPsZiw(2(MST|pkg@vcqAq&#KCFY-fktC0%yCn`6 z%qd(e00OEoSf!#An6Yv|)xOap4Ku?92qro6@6^EqwxOc z484o$(H)!gH;hhnyd}ef{EEw`b1s<&2vcXiCZy^7y9Xq;fCA(tRrj}9PH1|g_=&oFJ_BFeL#y=zB2@>^vEe=tV;%hb;ThV* z=dtj|Jh$%xeQp}dle^Zx2;9Z{$BbXfXf~a%!l5@ffpoZlYA}*oof)P|>V@y_Y+w-3^r>6tR7 zZ%hnG&!S@s{b@GUNWGZ07A)V#4WZ5G0bB1eQ> zwtZ`5fVB|Tg_Vd-j$Li;e59uNl{>)bqUBfl)cS8kH(-`Zk>>kVqfR?G;y|c-+tY0IBqiS&oTzuzCe=s=fQwK%*DG3o0I{>zBuY2Q=p2=n+2y?IvL?c3<|}M~bgXYgfONoxzNRAmDi%pEF(8Y-sqS(YBSkQ$XMF z9!80O!4(k|-uY!SgkXYOg2n-yWax;hJ!~sZ>9|ELH>BUw#2Qt!o!8T-um;esM8r=b zzcmjo!iX?7n!nGkk!GM@^C*kom9HpHVqlcia-$i6k9<0mU28d_84zxRfb^U5g0t&s_xC85pNSdkro?n|f zsXgzYsyYpQTy+i1_3T(<0mI)?J2-slUQPE<3Y)tg8})wYNPOIBR~=)Z%>mW2?M>^w ziSc?)T5A57@=X5A^;0YW5sJQZ4-O!BZ?vt8mVoy>uFr2p@ry0nb!bBDF@MZwr_f%X z_19@%VOQ;)v5yhzN)yP?9lj-@NQN&F&cm7c$(ix?NPFa_xD>p|vFa)#ebctSn!qe> zc!0!uTfTdt6ASgR`*r_PRc9_9RwSi?uue}OEb`WCla`4^RB{UJK0|fGQfa*<(87m* z7AQ!0#D~LVH3NA1KXO~;CLih1baMaV&+~!?F>j^~87>K~;&mE1$d9W2G$yyPXAI3}iZuIC6avQ04u|VDJJ#L#KQM`O8xbyQn@hjG z!w4%4i(QN7b+l++__ZKlI!SLDpS7S`#G5}V&9_2hSW7<_ocKDOq0^mUT;B}q$H9z$ zU(6EIy8ATAMmCqk-Qh3I(j3dyBgH%UI=G$HlS}4GO^pqAiOao@|iqAhUJllv)W!|#1p+|Hs8T<0F5MRi309r|yl z);N4PU9Z|E#J|g&L2fNbCXQ=2_6|w4!u_|Nq-!s=$Gq@7f7+x z-ax)QCten4>*)>a5iM+OZLZOiVuaPy)BEf*y$HcTONW3oc0as7B%%TM(0;UJZUwEA>OKO&(Wpv=EB3#HTgp9%G zS}*O@&sj|3<1~2;eLW+RwY>2QAgZ3hyIs#H%C!!aKMO0bvXgyf(0)W2&H;7Cmn-vi z*PqG@zhZS3P~5($Ko-Y|Xf2yy%{=+;{N+3?R*D$P-I;%fL8#tl(=Es#B`CL2Tr)8z z$)jS0F8c;Na{WR2B2n%lN$<0 ziYF?syPiO$KR(RN2uBa;{H}<4&Or5jTFWr;_>Rksf;EaXqZJapy9_c32bs63ihjDj z*s3e%Lj>urGrqVvocxuwORZHpiNj;|JSO8G9}aQO2%6=Z^sHtpjd}QzTL^P@LS7_| zz_ks$Dg*vV8S|H6VNIn_EEsRb<&Q6ftvX{=H5|pLMZF zt`AM%BCTqkJT5$x7gME>N#2z!JH`=AtuyrFW@MdLq_Gi7v;Bl-z{iv7-Ux2mo{z2>pZ zKw^iqSAe))g+vE6UvC!il$Lu{)lL0&vC-~A^=^g65#-==wx8uAipLi2J15!@wI7{h}Ln^}My8GFYc5`f0IBN7U83PS{RZNUQkc zJenImhf*#dB<$%{~vqb85Pyiv?~Y*N>EfX2m%6Z|G1oC_TIIttE#K3pQqY`yvA)$v$R!j zdJJ%mB0UBt*4|f8F_ha+`i}|p8Ha5ec{PRw+~VO@j&bP&%~X>B9s_Zzy0`~QQloK( zYq7YB=Dd%609g**H~`n!CGHna*(gA~7`1aS=O?V|#;@Q^5YkF!ZbG13M zsYBd|4OP~?r0t}u(TXX=P_UnQp1o}x(7iyyBecjt{_9$@T>KexFaQ3yG0`3mZci1aSRCxTy?6-ZXt!*P_ccb4yI~2AzK+OI zHK&Xy6+0g>)<&L^Lu~ElP_nPqwZC9v#ZSN)Ni}s!bB^VeSbGx2K0`EB8+jn8ybinn zum$7VOC}uOs@C&Z4G-zPZ2o&!C#@xIXwT)S;2%TxsQDV{W2Pm!6AB#4!6NzR-G zxM$ZL_AtTb9j0u?>bw_wyk6m4r_jm}Yu+cmI&OOV(P_$$0rxhi+75bOrTg{flwTZ5 zEEiw)W`A7DvaL8W_2+t?-757h<9GB9D9Jukf1l6&t|Yga{5{v!FExy(TkCXhDZ{GI z_U9thf8>^pDJAmQB!rs#juga@VfozxrE6pCI?LV6fWmChU(`|Clzfo+c2Ukyl{4=x z$+;B20frCARY80TDzN>RgpVn1O8I_@d(6k1%k58==S2;m@@L&~W4XYO@gjdK_+5S< zcf-+Ng)Y>h17yL+UX-wOP-G<)pXYYlrMq&gnape2ZUeW7w@Zw7tKgON$;0N;UZ&(6 z!YC%v>G`sg^_mwoZ1y!}V{TSvH&ez%%ah7+HWUYlPnq$y!tmgHNv-2RiS!aQCN7(MJ9W$B;QoF|d7V3)*rIU?Owk z?})ctbWeI-X;DoexR(syFbXQ<{w+njOFrl!+Hv{o_*sywe!)*L1)ceeJor{B+is35T6dr`I)EsC#lqmQtYq+T-B6Vf5tQ99jQ34;DYd1 z-m}T&w=B8X-6b7s<4>mS-*s>&M;f^N!A`rUy3@9tTs!S*bC#%d+!aaBC5X#qZEWMB zo=irrYgq|2re{Cl-WmiU08V)J&AOP``*VB_`>CJH)cMeIIYj%kmgBA|BX zW3vRX^6CqZjjqdiVf86q?xb+*pV=59G)iY7(e_6 zi$V&uS4}9iDTM(0EqB*PwY_W|7lY50pOr+Kw8#}Fh8~8BJYS&LCWh(ujUS5+Ms0Ld z;5wvVX@JWw!`FCxRZXh%y7aSalC=B5W}Y=o3}0&w*fh&csstyj$6q!1XrZ~`P=doZ z-D@;Y6RWG$tg&%ho1%QowbvN5L9bgYgst4CbGsPRbprb!C;>fsx8yiyjNsWjvM?2bPu@c+eTO|*~U%W`BlJxS(Reddz57c{XK;>ZgU~RlB&&vV% zWNK?MElfZ}Q~?Nl2npQ&KLQVLmGE!wX5@MuDZ}GGu23^_;$$c)vsI+`+7~;weZ1Qk zNTd!A%7wrE2pdX)gYA4J$Iwv0fs5I6X#@@{NBuC%O7SqK73U0?ca573rtZV{mdRjK zKN$vXR01u=nHps{Di3FVnYc|HNm$hwj9nP#ViX&!u;J~8XYRfk4zej}KK?5>;HET*u4@`0GOf+NT^{Dri_M5QDY>tLp z4Ak{L-70XbM%ML@yNvZ&ukoxC5n7~1z0p{E{<4XluOyBn<&@ic@XutVvj+OSiwsO- zO~x~jp4pt-s^JD+XI;tdHxdk6*d9=B{30FDe&&EJ?|Ck= zQC{iA9(=s}S#k`g6`$L0E{y$*y2rj#BwNmG>Gwv<6!NoGo;LUIbR0Nm-F6T;mywi> zdR0wb+WEzi^OS4zxuCjVkN;d9W8>@j?pKWguB0Cnk5l0*8_)UKss^!iHvjls&>KIR~n^LqdFalt6ZHmUYfLf0!dqXdRi@xWMr^z8QF29X?=IIU0GLJwL!))>GoQp_>jl7dMxq1#>Y z9mmRxlntHnMF`Ypb^K9#bOi%zOvWb(wXd;2fxZunBt`%hr|q6wvZ`Fs+vL!YN;>y@ ziVYFH$cRf+WB;HmS4%5y04v#gz%51f_wl zpq)S_*l76Pl|c-I(TD`m>Pb;?Ff^)Q$iUFfW095i&eO0M;zBP3-9jpb8RIP~^|b}* zf4*tQyD8>eA>T#{4aw!tn3a5{E10#x$=UyWv-k#*d;Rma|KB$Pe+eR{b>UEoazYOX z`s>OBAVai!x(D4q&%5HAiiMjL9G;>7pKmyrfC2vB6l?Lxv&Kt3Xy{L8L>uss>N`By zQ{txq#~tL5^IJX(F@sZ}$1fbn8;(B@4P^r+be=@T>^|~FMG#IG7Qp57F=OHmR9tBk zSUx57$%kz4Qn8;5fZgtD4Lk-)xPCjvY}06`J+V0s=g1Ios$Qnu|4Y|az|iA-Dktm7 zJxGDHe&8`UY(MTpo`lySI^|&+CPOGlEJ#TyxH1&Ym+9oVTi)Kj@1K=?-(^4cNdS1# z9JADB0{sJ3I&e+Nbw1@yD9hvE(Rmoy0mC#F!tk$7B_)R-&9i+G0oOoY&c*gccX`MGnbq3 zlG%wR!7%z_V&f*=_?2M+NgnJ|%RDkpwaah~skzBk)BS3bjlhyBw}h{v+6FK2>TNId zJ6*piM*3YD38_&DgTTY_8(f<&2W6>VOno(1wBgU97QHDY9}*6`>xEX}9q?{?v>dAR z;N7&bR$D%%%nGmS5C*`Ccg3z<i?oBayt`jQgP#^ z7)nja4|)s?lj3BVsjrY~p`;@^b?-x>=c7nyaF2lUP%Da7&~H>RDGrxEIyjvcz3XUL zL`6xBVR!c$Rct?c*Zt)|B&554|2hP-bKhTDd=$G&TEd(IKbSFyFsm4TS4n^HRpRs= z^vK}ep#`eG@=z7hM+vU^rmk>4A}hl@a&_Bg<-6J~wEcJi`#I9?LkAIr&;A2Jfz}Rk z0v@=W#R{wgyVWN9ORDRJ;vMJ~;K*}emeCArkSwq}pBOc*yAh!dLp0{z4?}tj@`)`8 za!Df@6aUx-YC;b0s{_2>>d7n>_>gi1L!W_B!G`r!;qK$AuT*Xw^X+~snrBh{N^1qu zP^4+m^_dp7eKH0`JIgygBZ4$kNC^|XACB3rG@LL;Ng6#Xay-bPQiOmd&sbZKgAWSq zDZYpm*U{r z;&8!;a==`>JAPAmis=!01Tw(DX5cYGmj&XQhrNl=(+)IW)QZ4&Efw#p++(DEklXB_ zytsNh6(17#1rXR!T?Z{NaZkM=y5rR#wETFl3OFfXGN?u zvHjHz8!owmL1WdvVXAk1#43Uc73Y$pm2rQ*zeWe(H>9*KU5Sx6ASC;aVT}u+ETs!X z7fSos*Kp*9ot|`|LwpNJ01`d~w?Qw-jkyo%qr-@m0K%%c`QtnlTSk|(9-Bs=${5}B z=Ro2s7`JF$7KWkWS!BSZ5Jk?FR`%-!MXqV>>rYeR^k*cYHeVw#p}+xxAv7c4Mwvp7 z&%qS2mN7OG+)GH}%*Pok?5G@k9Tr_$X=`l3Qe5c3w>abnX#^w&Al$&2GNi$W6aftC z+8ma#534h;$_8miRV}g{^(S#Ab)?XOGd}~LEIRg zH%2LgG{@|A4;`t<{oD4UE|q!X-ZK^c4h)7h);h0AH85SY{N<316{4RmN@ zP}+Voi{DIJk!9EXk`@Cr6LNG_$LJ?$vx$~VpWUIFW&d`dkqFmH%ZZi0fzV zHhRUAAKL?&?l=VUp|g|}aPw0d=$#WE*N3_~8FP*cP<^~b(lQ~p!!EeN2@_T$1UHjP zSpz?W38rI1$|S`g@G6PWX6h?Q>@3>Y&S>Sg9$6L1T9aMF%eeg^i5(BE{`)}v!2=mE z=!#q)tlAI&l{C0wy`=B-xj4$Akg2k?QQYAW=Q5g@LphPZ1vFPH(53j=-aL(Z`&#sH z^seQVH41xIQWdKTR=DE`Iso1Q0Z=cJZ4LTBj$J%k@y02H)`r8s?MtJ;{bAhM6$Nr_ z@X#y19zcSfy>xy^ep6o~{{~tgr;u`=5g4o4a1T9&PT7DRst7%0wHSiI_kOAar4yFK zJ%2iK1AlTTsErLdSfJD7n+hzzMu~$gp<(}wNpW3JX?L8q-_o3@*oObNpT%(VY5?fH z-=%}dczkd<@%#pJ8tJT3Hgtt4243u1jF~8(Ox0KA?~GXu4mTyP=}rvm6=*2U-En@X zixxKl@i5Ku2J@QTi1tA7PR;eUT~oiU-iA^c+oWJ9JUZS7ie@5;%LfjUXjsqAWxi4Dkpge; zta?-Sg+7l|L~}qhnF?*BdB8j>-t>`y4;t}4IQ5lnrG%5XI2Pp^3EUU{bAp(Usb1qFbf3Av z86S5J3fH$8I?+?^-Jbc1S(eESz2#`aX2BJEQGNZ>$NT6E{5lBK9Phr!LBV$wQ@|lq zwz)H7anuGD(V#irFm3Ls$R#9Qwtu=BJ&%u80X|RxdBL|JNN`4A_FT^sU#Fte7#A+K z_lX(<)aabj#|K239d|G!xDLb^qN4%3d@G9~QLYJo)s(%ryrp{v2Vr~(>kNh;kWfVZ z_ZlEZ7n|>ppovp(B=?MlvRUJrVkCAA#s}<5k8J$aK?uuo^-Hn4_-fs1b;M)_<+H{HhcV&Nddw;+2NW zS^a?Q4|bE*#pWta7G$`tc;=EtULe)MYR&_3)0`kupKEQK!)53dO{q$m>jXYJAHrn- ziel=sgQgX8LtkM51rF@S3_D@mC|$R>wL_Gqcumzp-*vxAMi-kY)bByyX%fKeR(2|O za&Jkc+`hiJ8GM+^tn(nT&B+=uS+vh-^@(cD%&Dd)ag)_v8S>?5u)bV>6Bfw{R)_F3 zADmwzL&A%Sgr&#ge0DZPHSLv5^9`9Mlz4gkJrAJd688?6-t=-fbD=l-j?L#X)Jq|N z!$I(-6vI9pRZ+yf^ucLj@XIxp%lu0l1R^tyICMI57uSGz;G1?MN^>_S+ILHJR4{Q4kka4F_WrwU_%kq0kcxfS$Twt zAi&f0#RFdl3!`FIMQ46Xv;+f?1i=(2=px}8=F?V&WW^ILW99oCRdekpZF-)i==;fn z#VskLauuXJISfiME6z9B#z|)c2$i5Ie<($zRR^9Z#&2;018Z5!2sB7s=-};o|M9s^ z;!GNmr1f_OZiH^QsNSuNd2@y=@vbrTHMb;vgEICd(DRN994qCdEX`U0)|g|b$HR3t z86<&dU&Kv1qK2H|%}p}UwC-rPU%eA-a=v(KMRDBq`QF{Hb~#KUi;*^^iT!SLRUT!( zdMit0l9gY0&)mDt32QLaD`-*_nlQ2YS>+T;-37jmg`#s z0%Kk zYxzhmI;00!H?Jmqt!#`ciO3jEILdPubxR%HJF28Mf2OQRIO&Qnw^tP@z|V%sU~cS1 zuQep`GwJVI>o%!)qn`7wAi^Bf-3ll>J}@P|-Z@3*Qs(+8(&yjRFWQwZ^Gs=|^`B{C z$*=%8lNFKMd9p*@foV)cAY&G9zm+r4bAf4hcm=$QSzWG6n; z+g3uv@>;*pp02JpKw9&n&gVG=x-UI>2pg0&DsS;aHZp*DgQGlU^up)r&*Lcxm+aWR z-)2tC0ff!wk<4W#lvr&#nGN|~6!f~CE6VR|tagevN^M*Mk;h%O)|N#mWbRyD<;gOa z-TFjT*->X$8p`t-+2d=cXG_;Trid;_h(`km8d7oq)t)El=v@Jv#xW@vd zTHwiRAUp<^4oKH+Cf-B!FR2H<;JljHv``5VF|%U?Q9Sv*>RVX9iF?MTUtZPiRAw(5 ztX_+C(si#M&}BdC3pwtULc;j%N*(=jJFVPx79>i&>^k#pYg_ob<5=WBl8d<%2m`jF zb<#bwA1pyHr27P#Zxq-IcDh6W;2?_K(Pp*sqtey&d_q1!X| z)VMqIdYv8?tap?d@bnwF{p^~j!Y{;Ka2zuDD{)G@tTs$EQ}@hVYOS=CwDQ@)TQlSe zl|?tB0_;0)TUhVB|z<(G;ZjEz-e_3@tXCB!n` zi*}G$288HJ{mT$R4rJ#wdU6+vPY=2N{JP!vbm0^w!#lg>zUne3%+sSSDd58agBdjO zR;^LBA`L9d1`W(W&BTLG%1JlAtWlir3Q-p_DDUV<5~la~Y8zUd$$0=w1;$0SOKZh7&ODpen7d$nk088+ z4L_=cT9>3)^sMznWtM3}(c;s~o4*wcpp4NHsxo$lATAxCnc7)T$PqD!`%f0*gb{;~@mK{GXz#35v|Rd3bGW zgsQu_jhkY?wr0TJ_E`j?v6_$+d6DTATHV|6=o4H*^9#SAU3f1oo(IHZvzb($%T!H`K+tYl z%Kgm_QGaKGD5oI8MBV+%gh1Rd&j|~4axU^tGObUPQ{6=upVFuGzHBgTgzuZA{PBC+ zqxe`lcV32(65Uqy=szTJ!?|9WvZd0Kk!{7H*{D*tP^_tB@4qU=o#gGPk6eAQ)^4yB zNR_LDnlYH@oxm(Jwk8DmUkgJIXfO_#l+Eu@yDopYc~{Q7M~z-yH9q-Fdj2zaj-M<^ zYYgXz)_h39=?dk#&qn%w zPEh5?M@j5)+1b;#S4Qgq8~Ob`aUZX5jlsCgzO47=}m1ObfaqcXtIRsODqI9S2HH=F zVja__ZaYU`>&nZ}tfs>1$$0c4vx$)wwYndC_<(&REli~y;J+9y6g z$n|c$H2LzpgR^W>M9gGbKRO;qyHpfEfS=jPw-9Lwiw>jS;Cwn|aWhZRZ~Jz}aO|ZV zb>If)nZ;0PKb=?z^xbbXsj5;v8pC&)7QqW;e8_R4@bphlh$e!=XGmXoh;~PqsQhHR zPujS2!buka$W8xv(l&6}uD@SM1ryMYV@3f7`X~HYy>imwWZi0X_zzV^7*5x^Y(r7X z81`rpZrj;#j7?E$N+#GIh@Vo>xLgV{%YhOI*$Z^7QxlKsLAw(X1z*b$Eau3M{F``7 zFD*WFPC>6bD za=`3^ZuOA!L>a#FFW8bU(`P>F8!?4KbRwlrY0Z?|q}MoJGqtye5Im68_|h)^HLR~m zdcIs?YWc~+v3I)Z*pK=xZ}Q^4334arGr}Xz!7$Lt+>Sc^pO9`7&5m{zU*Ia(GktuJ zsmdCGEnUI1`PsgDQBDClEkbUfqPz@@K$=nPqE9{;4d%{2k&J# zqC=|BzC>WVllpnt(#0?RH?{i$*Wv@TMG_}6Ud055+&YRMo%p_*g8hPxjp+ z=c5@IxAVCOBvqWNGA|khkrjz0DPU)4;oa73qw!_94FU-U$7BpEr0!TO2Y;zVUzw+6 z8+Bhys`6p2>esh*xIjl0#DJ#qsPW%9+&!Szefx!n=n#mZPiF^+qxdTa-n$R_&#E|8 zdv1t#MiG&5)l=EeeSSsFgU&A2=s^sU=+eVRhc~;HuYnZ$o*GXZb7D=CvM*jAOMahC z_H&q)z7~s3^0I#Ivg~2b1fJydb^*GD6p632A5N?cktmy3#({1(dH*+FTQXj77%eyo zL^41*wP=L5Q;ua6<0NeXiNdg87zC(k!mm!Us zzTVqcv?(zgnsvToIW*iMh~du_bSpj@?e>aV7JGQPBBJj}i!rr;vIr?!PTwbKaj(b2`~<_m<6;z=&vh7fegd0Q69JddEOP@x4>X;;AEl|hQ6C`9yHqj zUo5Q3P^qxIo#%%Sz*ei4FF5X?bKDCFd&L{f0irut?lqq2@IdDsADz}+@F%yT01`y- z;%t?d7e2%Wtktl;&f6O?5Uw2eTuXltoaUGwwIF=$QpHYaYsq^t_ZKh>ME$_`r=8DV z7--v{gXNAnICMEMXgdcRV13go*2keNTG>Mhf3BP!p^7Q)Y&Qex8rdds^;pq(N_w~Ksq=tO) z*42e)lE*NDguS;D`Tk`((>-~KW>G(vcX}^Oh!7a&|-O^A1 zoKv%N9>)X$;U@6wop=y)7F=BwmjG9nIl>&)()14RwkCF$a*H(ubWl6FxLdLIOM~lr z=8GDXk?Kieqg}OI;rK^ASM)ZduWqOB)?#VZ(Fk^pvr0>d_b4hwLWLku@dT-JG1nSB z7b)&Iuv8Q0@BJ-jt7ej{tikK2^W*T&`DlF-_8%?zbesa`>&|t&*}0`Uzq#38y8Q89 zGXu0eLHG5N=%Zv6W9K;h-tzOx72;+gt1G!R6W(<**ZX^VreV>KE@Md0ooWAu`;Hcr zz7DpF42qAU*wWD zky852QqB&2zfByfO9{<-!#Je#Ok^1oi8b6O9FJ=Sr(7C6j^?93To7vvh?hHE9MoOJ zMjN=bLdVbhdzm@ch?O0`&6zv_-1X=Ee8GuJ!gEWHbU{$6gwP{4j|s3UbLs(k)JEcX zF|BALn(wttH2x56YxIzg6+5CC(6Bc&;@hJ1owVWa*vQYB)O+$8+QD%m{dCeApYY%f^-&=po zbKB$`1qw9p7~9+H6xcXxd((~Q%{t@mlI(pt8P!~;t1PZI*l;)^y`g`T*=^&X{n>kf z57czYhqf%~^V4@s?=g1Iu+sIud;g4R_&Lix?HpgK8|#HSV1NoE-1E(>L(S4%}2$+Dugu zeAB73eO{iTH3E=GbP$=&JU)lWBbZHT9R>EI`*U^7`JbZUCFB%5{*!{s;gT&qI#KBwR)?_Pb%w<(TH4@2iy1^%r*L(_cp5c zMOIv{no%2jIRE^M*(#?{F1yAFb|e6fHRqf4Iy)Mk6Po?n1Ma{t^^88P)k0;WBXT6KIbpjQ53fN@4f?vW)=esu|HQ^~sj_FOtY**Lh1(%J|8B4XA`Cx$}J zY?RZWW+$V@2NSxmM}9RE8Iw>dW;tPbw>Yt8f4qOu(Mna7r_1vmo|tXrQf6FSkJ0ms z>GDy;oRccSkX`uxp`=FRhJu+JA-@MqP5NJm7!gE0kXhHseWKElH(qh$2j^0|MQu9D z`hL3$Y2t43(hJp>*0P3utPhv&cp;UhS1EajYcfU5iCnD|n>nUf`ZpOFsb6H*q^qCK z-cx*TeFV_)ok2V*ua+{R1!~+6)N-z+w1m|^9*FPL^DUM zZ*Y)b^Njy^w>wS*32$+`7?8i>`xo}9zVL5@h#_bX0ryv+bq>pH5UHM>^hP2hcK31k zScGljHECX>qSL28WMFw!z?o@LkSl(SN`kA+ zM0#ZJZY#&}-y`U^&po8k31k{s`nP5&Dt=`EA`FoxN3Eq>g3$0Aa z`0e^~7r%|b>2?CnZ3Xd*uInyCxwRi%cDb8lp1%Mo&KG}J?a>0|2`3rEJ_>6G^XGh&@$^m&QhQB`MJAH2^6kDW4%n>V>TV}raB1!gBDSXSde72Ig zyHE1?^U?!O62i!%)-($n7sB2XMvynJfz6Kb+DSbEUp2bT&mBK*ZiJ{%6nzz>%3rDd zrOuE7%P-FCxaZk`P5Mkv%}wpPIo-vGz(b&(BWcLD!4PRY3hQ;eBb&S>Cml3k1<<7H&2i@3&g+ z331uX;njO=R?%a&bR)_6^R%JambsN?oiW3vp)BUb;wp8o)1D!@$PWDdBrC|p7s&uT z)8V7&3)vJI?3tP_3Ln^cupz_b)4t%p+Sw2)Gs3R-zB#cc*0OJ;^L{=IpKK1{!4aYn zl3)3OQX}592>Z^d3i6cHLp|5;J%V|9sPS4=lB_N4t}VI!DR1u`WQ2MsDe?@NL13t{ zl1s%pu(c4~a_@!+^(%+vvX}e_aQgF@w(QJ&<-KI$-WOTlcsyywjJ@;AZ9#jK555S4 zI$p`ZR1b521t@|lemkiGnEH=sX~b3}8&;@l6j?-=Y>K<4j~0U0N#YJvlTjQ(j672X ztXA#&*s%@t=R6suS<)leqz2~4dn?gDj_6H7Ee(6}cdS-+EjX4&=5&b-eu!$n{d0?l zjR7_W+PbtYm^z`BZrE*oUmPzSDis+_+JBg(D7spn)@w30tLW~~-xYpKvMl!m9PJfz zmX=y#zm#|;Ts-Kzb4!XATJm~OSz!BC$VmkfEUuFGK7+LcaD4o{TlAvDM_|m0=E!v+ zmdRcMwZYR-m9Sut7fnZ6TMU4}W;#BP{rL62(I@eJ@|4lK=Aan(@X#&MQKb+kO*pKB{J3D@cTX5$Ag)uNn1Pefdj4w zd+D>0JUu}g4;HWOB(;g$#&R?KrY!}5)qUVNMOd-3MAELmuzm%nl@3&G>jbSN?Z==c zb<|SdNNw?+0P-+Mm%ZOdH@dkNRQOq!m)~+KVtC4$u#A8czCC_FZx1(xeRtE8z9t_+ z@uhOU>y%2<8}A`N=KTQ~pZ{$*NVmg$)T&5`ZvG$`?GYXRdJUX2&tE&eM~TOWWc55* zEBg@L20v8jEB3Hz>9}vvECTxM1wP54XBB+FcxF%=y#y)-Pttsyb1iOYlORdOR*LPl zHRDL{&aSZ+)MIX?5{?ej*d-D$s4lN|({(zh5Q06kFsXfSBJ1Rn8Bi3_@Tq^Sy?I}P z$kwU>G1-*z&b##DQKpnt{xjIu@SMi$KPDi)%&NE;n*e)anI?h1BCmh3qh%@M?M$b3 zk#(0^3WMuwpZ{uzq4>s=T=cO+CP~0?AN6V9T?1@3{ZHMZ#{z5pOGR+nl6;ZEJ6nPG z=G2{>Uv9py*_{dA`r*G;2l_rumO8%wc|VwKMqEqzRbL17U}k3ayvTY&I?dkKB<}Y0 z1U_8?H&2AJM_eJQB5GQ=^Q=TZk?lgWXEa&H-Nl{&?9>1pZbH`w9o&vROp)e%4kBvR zL4!LVhx#*8JeOQ!``DKlB@E9>BgIkL`Wnc7#vceQ#oP%$+o2ocW(q%-gL6xU$LtM# zvQfo@&jW)GF%9*xxs{bF>)2o&1db84W@fI0a6h_(_fj=rN*`{ISa2VzsXya+OSQ zH1qXK1Q1kJr`zo{gC(Snh)#hWn(Pug`=hj<(Z$g<@A<4pxYF7UoBL5k_YHM5`))+} z-98sGZ!f9*SplB4dFO}_7#mdM5`y0a2pO=QLBp&|sAKzJ?Gu6XtZwUD>e_VQBgbKb z712oLSdNIZ>2$@(Qn@f1SO7jbFa)bVsdx=L&>~nTo=-$vZ}&D#`KlSg_{`ECSR$(= zONbjJxLu5zCGQRCgFcSc^Lqv@@NWlGS863O|Jfk~pmbUZutM-O0H>Mqc;3@@ptq=A z{hpPytpAdsA6x8;1Lcu-=qh1mVs5}St+tQ%hYpyQm)dRuKR1S#LHR|uzwFW4e*uVxDEoo z8+8|xzoMxpRRXLRt?{+{Hvcqs?u)KYi_7NQ|GFh#>>BXiW!AfD^JkE(z8>}2RjE4p zNsB-Jr2B+vJx2SVGF~zRc z-N*pG47N`6)*EOr_0^`KRmYY#X%XS59kV>OW8~6cb~KV5DX|siJ#s}PUz-Iw;B=>1 z^1N`BqBjxm_JbG+&*R6zZ(6N3j@5}VI}XK0EjU~bCY)b9>;Jx&%6hN{=K4vWGjLQc zKh(?X_fhU$^B#~^uLfC)!K> z)D&{z7a$OTy33;Y0&DedxN`NL?D}^Z{SZdXh?r3IFax$nOGLh_$bKb;NLgFph42_+XXFvxD0dETq+i zEIVLjla`=c{A>`mHnIA9svgp%bM?17X&Hf{->>PCB7{H(zx!tM$rCOSs;e`sTTz2M z(=vqIlBb(8ry9S{>*oCHrY_D8?#}BJfWAUnksBqbq`M|MDYJv!k{eZxRCkgWn$d>T{0p_Gk()v@Vp5XK-lo zRihRxZ}VuVv}-Hv5_PoM56>;*VZ^A!q0&9kj}Zn2iB`f%ULbXk2aV_$4Xld=JqMq^$YmbJ zJTw0D?zS2i1r<|9*_0R3x@K=^0kopq(h}BkEAV6`bYpeacvW|PR`a5EFG{z1UiQv5 zRggx8DpqBb)cjnk{>sS~?B+KsU-!ReVW?O$8Ysak9er%Zc!-=jH*He#S)|lm;jjag zSBf+9dU4PeiB~1S6aNe8yqm(tRy4>qyCpBitHHeBw9@sxRQzZzqLY(R$~vq#w`0y8 zWV~dF4>^+zfFX*y2XslLHnKbT60EU!?}P|`RJ-xbn~Nc1s?Av;u4K-ZRR6UX3+#uo zn7-Gj$pTnp^MLq_(1w)^eypuOYV3$zhzOG`Z8(ET0MAnOCa9b+`-Sb>23^5e@Dytm0v~ zrnT3cs^G-HVnLu-AM+Ap?UT0^p8JzXl_;rloxVxiHSBzT3-!%g@-!Cv;Z`LtG_&I8 zGJZpgy=qWTyc<0zNn!Ju=E+&QDrLJ}6d-O(7FOc?8J@E98;n3_W;a+xw@!}z@}Sx{aDKfo*;VsjD4~2#or(ZKWXJm`1R3QDhK8sbI;L*l}?zt z|Hem9ZxVT~eVTk^m1si0b0Dzc?vaD_d zhrd@SzOV&5JEDVUfkN9M)BESmfT6B1n&C-{v#U(s&Q*GjL;1_H#Pfw2bGd4!Tt9b(YyN&2;v<3A%LOg4$K^QYmBwE>jkyST zl7&qqA4kp8LRRlx8EpC>PdQxJO(DfuI2YbKqvGl*yeUoI_SM^?Lv;zF4uaL@`kgYp z?(VNo#je<3`l^A=xN*gM_+|c5BpB3BsZ`+$9p7Ij+R&5pXgt$Mg-hOZ>5*R0cHP=2 z?pGJ2k9v9EO*D4fZT&M3vgxV1B)X8wYgF%}f+BsQeRc62Q2l!PBxU_Y92{F@Q@ zBRgNf4~Jm;xguLX_l(HEeEQV+(4kiCPU5%zsimGzE3ez?5#7Sgi)06-42eSpQGaM4 zc+Wx6*3?tOj9#9cc>{7@1DG7?lxuAf-|$W%DZAAMY8ugx(iymz3h{ce4L0P|Qlt&I zEYx0n(ZQwVD#P_SUdnP>2wI$BCT+Xnb^KP>ox#&}9fV53$0Y zSqR6u3ff{LlD`%W(r8jgOlY5vPEKUmW^?8*xx7i-IfBQ&IJ$AP=&i)R*-J;P%uy0K zYK`dZC~D_e5v|EA5}b=W)=ZH=UU+W#A1P(p_DkyQGIqS`JE=?G)eQS=<+M-EU*vJb z@-#EX*<>N=K=QC2XX{4mJ?{OJwhd*PMxCPZ;B4Kn?gme1fK2(j{3}Izw`Z%XHTpaCxK7+sf01L4f z{eK{oEK~!A{<#IN`~N@se^~{-G@r%LMgaCYV|dL%W5J4z?!{_GAl+$a%+TJDOq?c2cKp9 ze0TK#;Ewh!HNuk7_UI3i57M7XXnuo$@A^b#>`@?Fj}q(NEH81CzEhk_yvE2_7VfADMY**19{=jHr-q>HzNg@Qb_6qIAypxK zaB7chQ@Y~6Hgb)hl5>1=YJl^-%&W%z^AAs}7AW?}tq&q}YNSaau)3u;S1`?BE&h!* z+4{YuaZGW9D+4aq5+JBQv?tO4Uy&PtMtDqC%5Unhx@+==eA?@1XWb3F{{zSEX3ykY z(}P%HnFTAGhp?K?3ffUvi6-BM_y_df+;d43{ZM7Pl5+wZyyBg zyIxW`|5-kQq2<2;k-qX?m+_U^@E-*_M*cKSMa8WNLpGuS{qAonQUhQMHu)JNyV;CI zejZ#^K1vDH$t+=I?_PVm^49he&){diY5gNt5Kaws_IhNQyO;Vf}Z02N;LMcIxF?P8GFFswNT z$Zm)*LIT(1uUVMa4h&L-h42Ru8ql)o4`TNf5zMZL*}NA(+haAj!hqyDq|JR2b3y~M z4wq5da;L9OO%dPGsEkh#B%YU?33AKdxC4Fg)h>JFU+W*Wz$F-1fbNWlFoG~e4h244 zJL7JBN;X`9LrzCHnLn(k!_c_icwo#(6@{yiXCSfp7)pcF71(kbV;tSgR5@$|1=_s| zsGJJ`)oD711U*pV5C%~u)(Uzg3zqd2_FKg`EvmgX=HePkrODcUD}A*Dd5rl;1^yR_ zmvE#m@D{>;eGnN&BU>tsAR*&gW$|7~|G0Id8D3Q5WA(=H6U^~fq4SdO<|5bMY=$rOxE}>(p$*j^60Dj1yoelOJ*GR z=o1e-duh=3N*SIF7ZcnVCs7J5C(yiw6PgBVGjD;8I0wA4_=qc z&G}2)I^^0?C^@LECfrRthExIpQddnAAaL~@2b%MSV;nzm!%zAvPS1Kchv5&icKz7w zMiR7R{i|s}3v&u}_gz+8%UBPkuWw?AjF(#YJxo3~zD7I58$g=r!ub3E8l=+e=F_4~ zF^k&ti@z2gHc2Tze-Y(Ed=2e)Zy-2iNO%DHcX;M4RNk)&GNy!azd3rDAw|~~T%&I5 zX@7~Sf(bT3Slla^Ux6|dq#-Qr;!EEqP1^BiV>r&UIM!H5S}9;L6WQ%mZg~lp?r;l? zw(Pe)$RaiTeD>+A@{1CM(-=iKY+FNmdvY^1&lLEmBX=Myu2jlRpod2<(b-MQgB0pk z=`ci7BZXX5y0AD!WH}wBK#S9JC10lz^0l^0*zp|55fVgM2p~n5;9+4nY+|OkI~RPF zCYg!4S~)nko#7(vq21&7c-YD0l5hLpah<~mAWjXs<|hPnNapyz5eB$p{V9nGN2?|1 zKOGf(@i8f=qDii^?QvXVLcXHt%N^%YN%J6+4^Y;)1esj}l2hHZzyz-Wrf7skUtwpZ zW>8bJ({~%{yk4U?h95&PWy@Bpp4`Ax@qYHb7POtr{W}2QDQpzUb#ib3bbAb%8T1esC;4t~55A0ZNI!RS=8s*>F0VE?>u!bRNe$`aJDgUR1i%74wVz7X5~#;jq&!oM5cfTQ z>8eyCi|mj^g$10WWXfJW3QX#}3}UAzR?!YDNnIZH=*9C3Bw9P)O+GA~T z2>Cx~mC*pN;)36T{GrmviDIRBUrad#q!awFhkQn{`#Cm99`~ZDZiAc+5P|NBFBN!a zxKuhG_&`haZ>pOgPfY;zh2D>>lTIGlK)_k{mu9EEj8LG!pvTM^0u9>|7T@OJD@y4L zxI=to*t@omNDT%Eh2FyfY-#Ohhb;7rA?&xZntaTqe*8*I;5TusY~ri-P79TPj6^b5+)+`^(I0w6{p@d|;lJkrSzxIL z;YOpbBJBYdB})M4!1yLtm1)|B=S(OK<%pt4}7zec1*dz^;I||L=tkm{hj3#)EzTXgz$~>}W2b*Dbo57h3ic?CAl^QNtwQ zAt1ge>BNgL1q1Gdov9N0mt1~X5(K!>r03)3j|EFZ~Zfynz%rgP2mT9K34$l-{i)yO#k3(Fq-8Cy5|d>)(IE7C~$_V8`b<6Z7R8mE_i zuiDTv%6-hGD#rUvpV3U|Z+AwN-=YA4>IIF0b}A>nWyfl1Tp5O=MfTBQmUfdUQp5(o zc%U_If5O=ifQNhjZou+Q8Ctgf&6R)hzuG&`pr*F)-3ua$fFK@0I*Q_<2poC`3nC&! z;T)A3rS}$k#{wcs5v3E5uJqnRC-gu<5ds1toe&`Ode=rh$2)W9e!Ta~-x(bzlkDv5 zz4lt~`>yx*Jmiw2P7%^;VK*D51K-GYuI;bzP55Z0e>4-qd2YQ*ZETxjc^Vbq*txT( zg%d;Eb{xfq3*{={JKc8ASC!R~Q%7eYeTHc+2q*QEGNBoW>j_Px#MU+FHaPzA1$0Ao zjU8-Al3Et>@DDQ%NY_QpaReJLE9$%cx%@r77hDQyh9oQv_$u6_GT|(R6CRN%SIa9M zpCNJHv&kEZ^Znh4+Y`E`EwXvT>Fa1v^Hd#YvkZe`G94z6SO3giG^uCRJkIglJGFpu zBf?GRi|FtlFMtZr@$Zo~^lO$el+`;HZ>+`h)Lg1^x;jw!$_aMc1=-pM26y{NgompU zdAnJ9cdS^7zJvBthslXDYoT3mg&MS zo??c^{!8$zoWA@S8rRwl22>qXJ5~|DpfjjH>Lie zXW?_N3)XnjGd~$A#aY6^0q17y(BXE^Xh@9xx1gs$s}OpIJiyxfQvgVWYH#|Bk$Rp% z&7!orR;{?!66$Wi-xQ5}&vGbHm7Lb%oQLH`xhTq}*g>0Rhi$H7gQVwv;Hg?SJ$RD- z)#FnQ-F`v;L){qhfydkx6R$@=02)sT~og2HD)RXp;%<%eW08_zdcsZW-{hj)8EoD7v;DqlvnLKpg!F%)o3 zD*L_Kkh8|?H9jLv0rT-VC1MOMG-;-z2z6$b~`(L zed$p>k}5hyLThbDq#I35eocpng3O4e!bUHbc86ZRHNMc~dKK`t?Gx*GY^ClY1a-@G zk&Z-*fFuYYr$(dzp9_(TXb#V4WhQ;G%&|Um&{6kH_*BTr+WIf11cx&Lb`;kOrqybC zhK+KzH8CZWBLFel{-RV_oUlIz>&!+IBWt+WFY$Ap0SwDe1|jo0=-s6h13g}#QRURE z+H-V!$8$k()J}2C#z3%XB}KjHWsq%lS#dg)znxx>_VW4j!< zl(H^1?NZN5iY8Ix&O+N1_iNM&^$vLMYmWqka5BAxnyd^@;#j+>iFVEB9|^=EWaN~N zXtdwelq}C(5Vw3kWZy{J7~whU5*{PSf2bbuZkgLZuWMmoH@vb`udLTgZ9m4Bi)<<$>eLVJ{ha_FMY+SKsw019VZgcrs%N=1hpH%eF zw6m3>2Yc7mE3N{WV_fxHN>uIo*eBk79t#yepIRFT#^C14fZ_vf3gC(@U9^8j_C*Fw z`R-ku@cyp7;;DEONt#SRU+btJCtwGromD!X!D<8T#97{3VY&35JO2RLd_WBGQ_m>u z?s&9O$X{SlDR8b*k29nk@pPuA$0t30JvuP(CsF%Mh-%D$!}?vkEiNOLY*X(k2FrQW zH1r>cR*&$BEQVJ3RE7%@*3m z1-GbFkF&(j;mh*2-%`x|;6Hxntv=KN$vETbI6DR1vZosY%o$z|ymum#xfst3J8Wxq zTB8;5g-_lf=%pmTd}P_@s1UE-0M=4gj4U!@zh(%iOF$u{7)m;g87=^fWJq(!J2A%C z<6w8cT_U-rqqjOs`*iNfuReg=N-2_KErM3A_NDnX~o8M*2S49E769fB>qukx3>4)2De#pvQdrGz3+i(ogdk+5xECOB&jI%2aBVG zLCOPsnw<%W+wGdUN0fwz?PJ56@Lj|#(Y;z=S@ z)+PN9O~GGk471z9iI&#F(WgX&m|v-T4qv^q1&tGN5D9vXeR$>I8R-kXDJnm~N-n7N z!%N=cXs#Ea*DtM_$sop}FdC9T3Wrw#8`Qc*LDCo;{#I{lRwxEmo?Oon@bgj{a`vTfUh>x zJ3@Y1FAEz4=sFR4J=@(X%&#~|4ZkI#Nk>=hfUUd9WLA)__=LI>y6)(nqjrN*;5Zh#HyAr&R~rc6_?l z&5Wx*W@TaU+Z)U+pt@VDU=siF`P2TfPR(`xuKJgx3EpQUcAh<{%^-eA;9_@dy=b~T zUjGZ7`#o7yPVzlGn100_N&}nQZMbn~sAoz7&ff5P< z^2!_ID_7&`k=R`V(>>zgp#|lrU>02@_BDU5xzBnQ{MTGWxZKkt@F^j;+2km^7CALL z(uGmnjF(TTARfaBPwp-+vf5SmzR|I(u}}OF66`|ak-r!?0sC(+s3xR)>mbzOvi%v8 zqgD9d{?wzjY&ik|D{(fZ+S>cJV5egxJgIV#OZMpA{;q;Cd_p74q{^A5SWUK_??s1T zRrar+29^B?G~H7_ewxfe%a;Np0x#4Lhi>J2@e?}(>;96IXD*~p0|?gD%#=6XhuK+l zf?`hQpAk@#At;i(IaXxz$4|AOTyg-uq$R}Kf=9igRL$t;&Tyhf=wweztItyljP;mi+sL!Bs|#b~+#R)F z0&m_XJ%_0e&;cO-)1MgGVMDM`EKt1t=e^d^NV*>n#5-RXr9qpMN%#F*T3T-4GayN} zWBzx+fVz9`?yu1V2HG;Hn0RXc5Uu$+Ry4u*#lB$pcg&GdRFij>PMCazBs6E`$f2jP z7bds9I3#M&^dr0eZGHn#AV^9s?1vqFiHw2YQ&#pvn)2iS9?rkwmfyI$p!@w1s8;!N z?4zlLty3lw$y|Zj&mUWWZs-DDptk8636=qLoVK9P4|{P80o)X(gAeyHUL-=9DbjuV zFW|Q+zQ4Ok4D+0`W=a4Xz1#C0LS0O0CoCBO32?OdbI8BmSEOZMxwp2tf&*RmMN_g> z#J1>_?hV$qeJ)|wQ-AEjTPqsi z&abC5P4wOr2WE)^vdF=1(DZ7(RI_P-Aj)q>1OBJOJc$wJL2w?>AGGG~(1kdQbXcOo z3ZKdD=9p_@3}5{txwntK98x-74aV}wFZ*o^PWR=(6^pi~BnI=YiE}`&pD^2I7)u`g*Vq@DiEX>V?`Lpw%F&7P)nnIc} zfUPZ*^fzT`gU-R6uA?Ru>h_hH|v!PO;(z|0u$Oz*<0V(n~ zd4}5fHve3`I;)gb3X7Cwk|*%_Gd^wq&UUs?O-Otplp{gfeqaN%W>Xgd3zInRP`Scn zrU89BJbb_1q@xtbPS~as+2yx$tCm(NyF0GcdTEcd$!A3F?GkJ4B%%zygT_eX)A8#% zMW$UMzS5g|MJanL^oLO|2A0xh&AwF~q($i&wzP6yKX+B5bI&uaF*rne$DFj_FuAz7 zQ37KIkHIfdKp@-6B9#a_h+>YPcdhRbs_Km2!;e*t#+J^+BSL7K%sQhV;I@}iAuova0O4L_vkx#H{!1myLa6wwg1rl`H#z4_yiEg2L2?x;EmXpr06ClE28Y{d_i^)$XTOzymO| zWl{o01Sq4{bOSa03FKbYSPZaBYWLdeRoNhYUh^?MEDpwBF|(dCqyr@}c`?yK#OO%l|(kr2@gp}8rwo}qF(nHB$d>=MJHRN-zb z%A{{Oer|NpIH^^w@}hc+BjS|Zx;ll z)ibHdXx}*vP{N0m$!9>nPD;P~GuL5vGt%L~mJ0mbr}l%3MGt0$$>B1Zru#h;Ov6>N z@5LU=Z2@g4SeDS8YK>pxu@b%2m7KTfqMsH zQe86UTBthTG>fN13bdcrIIqb< zO&|W{AimRk0i7vdQcbK~`$)w~YWpdzELsX|*isX7z4vA*TnC%UcI61t1!%gUYS--w*6{du-$Y7qyA!sEBb7EtNtVc)I`S}aZaBTl>@+a;@Rlp$xa=JWj?una~N0Wg4 z07{s7f41EFf4@FKd_%4PxvD?iK zG=EUvnnY+{cv*ld*V_3EKAg0l_ndl+q7>38l5$LbL25kE*d;JERY>RS1T%32C@&O! zFmt=5Dcj#3@$4~SsC&3EZ?M+^3#^1Rn$1AoV^Y=|j=2?>GAqD`N)_@pu&+Pi@)B~U zYU|DgLFXe6&qMDSEoftYi^5~;G?;kED7?tWymxc*%I6npzn;7Fa#%L{3MAG4bzbJ0 z{w7OCEopsVUioWOMXI-jta}B~0kizd)1+O7U3NhY(-G{2+D`Jln8jqu&c9>@?@-uS zdvCR!&sStMyHc7S;>E+#y0CmY0aKxaHE`Ge-h6E>8Fwc4ivMQiLaxi@g}X8*8fASEs4S6hC!-bIO_kHAy9PggG%LLW(e}HeNaM7B>PO}=Slq)0k~Z~qFMJ(gGH|qh*`wHL z?GlZ=9HUp0lRhP0u~Kq8{6ozV-7OA-`mW8vU4SaJ4ZQU?TV??l?<@Ag@n_rk5Qw!OeFTtjm8Zb9iEW zfjdmOt}N^Y@=&|s#(9h3ZU#9^ztkEOit7P7*VKZ)tHwrfGCblPN-Wd&o|j;UlnM?Q z#yy$tjL|A>Pqu3f=mv>9Ee@@mcOHX@$p37J)oWcLSq%~IVQvxOiEU&j*`6qJdas4M z?|jNww0u8Y6fagfx>;jawf<1{jE-l~QJ4p`v86v>2f8qyPtOM1>^vLTESR8C&8q&# zCfiBa>PcBNjq`Gj{nlXZL5aGMV0y)%IXkV7^Kd0lB~jF|Mtz9lJLE;&s$!Nd&KQwA zxmHWAG{C2`rOp~2s)2p+$6=fo|BLGV5yBV=6L`DZJ z#5du`lWp|4FfLcOkDE0ysND)~1M1WXP)5`3OSZKGM0S?f70{mWqGDw54L`U!$+Is#Ac7NpK$3yTv2KK-aaR^iF1Z)qwO{S}OAA2oHP#`O~3*I?tA}Iln5? zq{8Gc4LL7KSr9&Mq|wO*lW)&My@2aLPDM`<6KnTcNswIe18N<_Rc>ZYzUj`yP3mZRMx319i!-(e5tfge#pa zeRE#bC?}|*CCKnCi}M;Ts?jO7Y*xigKU%Swt&io@!rvAvVh>D5%MTBBYk1td32ZgF zU(v8svoBFgUBV{|We>p?v&)cu7D*TFiI<&^nH8piW2F;|(o_H8i6Kd6U0y#sy90u5 z{X=FF?b+6UlmJd^kc6!xRa)h#dtYN8Sl%7m@1A9A)yA%h+%uG)vw3rsJ<(&wBBME2 zceEA=u62S~)!>00C@utbD5&r++;vWo-$W3bg1%m4Wl7BercJ#(j$MEmewpl z-KOW!cIE3%R$jqvWul9Ud_*b-5z02K?&kfvMHM8>n!PNGDRezEsL! zymPuoLuT$W0!=8(sC1=u^1jJ}jnCE!-^LOg3A(lw&91Gw>A0wbKM~}+*t05Z6Hw%# zX1kwa+$dvV2>ezV3Xmn=u-7Lnpm#+1x^E*q5ik!X_y`N+~c>~nR-}Kx-@Kf?q@fbge zxu1GvDLFy#y{0Q+_|Gj-`-5Y6CzO%UcV}X!r(KAs+nyeM!tS*9n0z8Bj95kVM9nNu ztZC#v3XvTcMT65kuo55Ke~iOS#!13TmaRM%+Yk>zM@lQ&BWfk%e9oMe#Ixb3ArOf-H+`sHI*?8UJu`=K$15S4E?rENLIsZI^9r6uotGni4>o$=)N6NLEq z+-|BzY`)XBY=d?qcg#o)4F)b$BkzexKAzL}jP|6M**RSZ!ykrSFu`3Sw{NR(3XylF z@r0Wzn*}I3o(#G}Z#P=me?fN1*r3|&ubQu#vLjomULr1OaTdBWcM3rbWRx*^-OHX#q+v{%(SpC1?d^|Mk>LWfLqzk ziZx?kOJqY=h75JFw<}rmUXtTwn7Q+PM}9{g$?a22=Y>Fr^jR&G#^hR9TMH!2eN1Tw z_rU9%<2E)eCZK0 z!yO63C3C@(XwTQ8oCwEnO+hUpNTgu-M3mw6#i*+=Mo+kS^$RUdE+T zGrr0@tZf_Rm!}pbg?pge)w2 zI9GOT&PLYdJ37`wxNP4ih?GF#(G@FxJdm|(igTtr5vCR;NRV#P!?YEebfh!BwzafK z`Lgg5?di5KkTVykhh#8O06P$;#Hj8dF2)ciI)T$keIrTV9=t_CZDN(s87= z1=8Vqo}I98@abxnZe!_&cc7oum6Jv>?EM*z^$0dG4;_`@I`cFp3EwHj0$VwTwJ1`z zeuD9Ld@cQ|GMRC{EFHDft~EBcGypZ}YzBk09{hqu2gV@3@Sa5>UQ$^mg!` zOg*Jly=@9sj-Q|KQ<4S;l~xP?bw~<6rZBlj3iSah&=){Qy{`d2(ye*<$5;3r^KU_KXLZQNl=`6e=bZe>VHn-=QaMHtMPvy8~(n>q~!mgHk{BGI0pWxDr?-zz47GP F{{ltNDj@&> literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 7e7fd338..cb5f4f51 100644 --- a/index.html +++ b/index.html @@ -1133,7 +1133,7 @@

    欢迎!

    站点统计

    -本站目前共 96 页,累计 219699 字! +本站目前共 96 页,累计 220165 字!

    diff --git a/search/search_index.json b/search/search_index.json index bd5615c9..21d980ff 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-\\.]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"\u6b22\u8fce\uff01","text":"

    \u7ea6 108 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u6211\u4eec\u767b\u4e0a\u9ad8\u5854\uff0c\u770b\u5230\u7684\u5374\u53ea\u6709\u9ed1\u591c\u3002 \u2014\u2014\u5b89\u5fb7\u70c8\u00b7\u7eaa\u5fb7\u300a\u5730\u7cae\u300b

    \ud83e\udd7a \u5982\u679c\u975e\u8981\u652f\u6301\u4e00\u4e0b\u7684\u8bdd\u2026\u2026\u8fd9\u4e2a\u4e8c\u7ef4\u7801\u4e5f\u4e0d\u662f\u4e0d\u53ef\u4ee5\u626b\uff01

    \u63a8\u8350\u9605\u8bfb

    \u7ad9\u70b9\u7edf\u8ba1

    \u672c\u7ad9\u76ee\u524d\u5171 96 \u9875\uff0c\u7d2f\u8ba1 219699 \u5b57\uff01

    "},{"location":"coming/","title":"\u5185\u5bb9\u6b63\u5728\u7f16\u8f91\u4e2d\u2026\u2026","text":"

    \u7ea6 47 \u4e2a\u5b57

    Missing

    \u672c\u90e8\u5206\u7684\u5185\u5bb9\u6b63\u5728\u7f16\u8f91\u4e2d\uff0c\u5c1a\u672a\u4e0a\u4f20\uff01

    \u81ea\u5b9a\u4e49 admonition

    definition

    proof

    property

    extra

    section

    key-point

    advice

    not-advice

    eg

    "},{"location":"link/","title":"\u4f60\u597d\uff01","text":"

    \u7ea6 192 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \ud83d\udcdc \u4ecb\u7ecd

    \u4f60\u597d\uff01\u6211\u60f3\u4e3a\u8fd9\u4e2a\u5c0f\u7f51\u7ad9\u8d4b\u4e88\u4e00\u4e9b\u793e\u4ea4\u4ef7\u503c\uff0c\u60f3\u8ba4\u8bc6\u66f4\u591a\u5389\u5bb3\u7684\u4eba\uff01\u6b22\u8fce\u5927\u5bb6\u5728\u8fd9\u91cc\u804a\u5929\uff0c\u6216\u662f\u7559\u4e0b\u53cb\u94fe\u4ea4\u6362\uff01

    \ud83d\udd17 \u53cb\u94fe

    \u9889\u65f6\u4eba\u5f71 \u8fd9\u662f\u6211\u7684\u535a\u5ba2\uff01\u65f6\u4e0d\u65f6\u66f4\u65b0\u4e00\u4e9b\u548c\u6280\u672f\u6ca1\u5173\u7cfb\u7684\u6587\u7ae0\u3002

    \u54b8\u9c7c\u6684 \u7684 \u4ee3\u7801\u7a7a\u95f4 \u81ed\u5149\u5934\uff0c\u66b4\u63cdxyx\uff01

    \u9e64\u7fd4\u4e07\u91cc \u7684 \u7b14\u8bb0\u672c \ud83e\udd24 xg \u6559\u6b7b\u6211\uff01

    Zicx \u7684 \u7b14\u8bb0\u672c \ud83e\udd24 \u662f\u8d85\u5f3a\u65ed\u5b9d\uff01

    sakuratsuyu \u7684 \u7b14\u8bb0\u672c \ud83e\udd24 \u65e0\u654c\u9ea6\u54e5\u5e26\u5e26\u6211\uff01

    Bowling \u7684 \u7b14\u8bb0\u672c \u88ab\u795e\u4ed9\u5b66\u5f1f\u8584\u7eb1 orz

    MinJoker \u7684 \u7b14\u8bb0\u672c \u88ab\u795e\u4ed9\u5b66\u5f1f\u8584\u7eb1 orz

    Zizheng's Blog \u4f6c\uff01

    \u66ae\u77bb Blog \u4ee5\u6211\u89c2\u7269\uff0c\u6545\u7269\u7686\u7740\u6211\u4e4b\u8272\u5f69\u3002

    \ud83d\udd17 \u6709\u610f\u601d\u7684\u94fe\u63a5

    \u5728\u8fd9\u91cc\u6536\u96c6\u4e00\u4e9b\u6709\u610f\u601d\u7684\u94fe\u63a5\uff01

    "},{"location":"cour_note/","title":"\u6249\u9875","text":"

    \u7ea6 20 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u4e00\u5207\u5b89\u4e50\uff0c\u65e0\u4e0d\u6765\u81ea\u56f0\u82e6\u3002 \u2014\u2014\u590f\u76ee\u6f31\u77f3\u300a\u5fc3\u300b

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/","title":"\ud83d\udd2e \u6982\u7387\u8bba\u4e0e\u6570\u7406\u7edf\u8ba1","text":"

    \u7ea6 164 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    Notes

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/","title":"[1.x] \u6982\u7387\u8bba\u7684\u57fa\u672c\u6982\u5ff5","text":"

    \u7ea6 1144 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u6837\u672c\u7a7a\u95f4\u4e0e\u968f\u673a\u4e8b\u4ef6","title":"\u6837\u672c\u7a7a\u95f4\u4e0e\u968f\u673a\u4e8b\u4ef6","text":"

    \u968f\u673a\u8bd5\u9a8c(random experiment)\u7684\u7279\u70b9\uff1a

    1. \u53ef\u4ee5\u590d\u73b0\uff1b
    2. \u6bcf\u6b21\u8bd5\u9a8c\u7684\u7ed3\u679c\u4e0d\u5b9a\uff0c\u4f46\u4e8b\u5148\u53ef\u4ee5\u77e5\u9053\u8bd5\u9a8c\u7684\u6240\u6709\u53ef\u80fd\u7ed3\u679c\uff1b

    \u800c\u968f\u673a\u8bd5\u9a8c\u7684\u6240\u6709\u53ef\u80fd\u7ed3\u679c\u6784\u6210\u7684\u96c6\u5408\u4e3a\u6837\u672c\u7a7a\u95f4(sample space)\uff0c\u8bb0\u4e3a \\(S\\)\uff0c\u5176\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u4e3a\u6837\u672c\u70b9(sample point)\u3002\u800c\u6837\u672c\u7a7a\u95f4\u7684\u4efb\u4e00\u5b50\u96c6\u6210\u4e3a\u968f\u673a\u4e8b\u4ef6(random event)\uff0c\u7b80\u79f0\u4e8b\u4ef6\u3002

    \u4e8b\u4ef6\u7684\u76f8\u4e92\u5173\u7cfb

    \u4ece\u5de6\u5230\u53f3\u5206\u522b\uff1a\u5305\u542b | \u548c\u4e8b\u4ef6 | \u79ef\u4e8b\u4ef6 | \u9006\u4e8b\u4ef6 | \u5dee\u4e8b\u4ef6

    \u5176\u4e2d\uff0c\u548c\u3001\u4ea4\u3001\u9006\u4e8b\u4ef6\u6709\u5982\u4e0b\u8fd0\u7b97\u89c4\u5f8b\uff1a

    \u4e32\u8054\u7cfb\u7edf\u4e0e\u5e76\u8054\u7cfb\u7edf\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u9891\u7387\u4e0e\u6982\u7387","title":"\u9891\u7387\u4e0e\u6982\u7387","text":"

    \u9891\u7387 = \u9891\u6570 / \u8bd5\u9a8c\u603b\u6b21\u6570

    \u82e5\u6837\u672c\u7a7a\u95f4 \\(S\\) \u4e2d\u7684\u4efb\u4e00\u4e8b\u4ef6 \\(A\\)\uff0c\u5b9a\u4e49\u6982\u7387 \\(P(A)\\) \u6ee1\u8db3\u4ee5\u4e0b\u4e09\u6761\u516c\u7406\uff1a

    1. \u975e\u8d1f\u6027 \\(P(A)\\geq0\\)\uff1b
    2. \u89c4\u8303\u6027 / \u6b63\u5219\u6027 \\(P(S)=1\\)\uff1b
    3. \u53ef\u5217\u53ef\u52a0\u6027\uff1a\u5bf9\u4e8e \\(S\\) \u4e2d\u4e0d\u76f8\u5bb9\u7684\u4e8b\u4ef6 \\(A_i\\)\uff0c\u6709 \\(P(\\bigcup\\limits^{+\\infty}_{j=1}A_j)=\\sum\\limits_{j=1}^{+\\infty}P(A_j)\\)\uff1b

    \u7531\u6b64\u5f97\u5230\u5982\u4e0b\u51e0\u6761\u6982\u7387\u7684\u6027\u8d28\uff1a

    1. \u5bf9\u4e8e\u6709\u9650\u4e2a\u4e24\u4e24\u4e0d\u76f8\u5bb9\u7684\u4e8b\u4ef6\u7684\u548c\u4e8b\u4ef6\uff0c\u6709 \\(P(\\bigcup\\limits^n_{j=1}A_j)=\\sum\\limits_{j=1}^nP(A_j)\\)\uff1b
    2. \\(P(A)=1-P(\\overline A)\\)\uff1b\u7279\u522b\u7684\uff0c\u53ef\u4ee5\u5f97\u5230 \\(P(\\varnothing)=0\\)\uff1b
    3. \u5f53 \\(A\\supset B\\) \u65f6\uff0c\\(P(A-B) = P(A)-P(B)\\) \u4e14 \\(P(A)\\geq P(B)\\)\uff1b
    4. \u6982\u7387\u7684\u52a0\u6cd5\u516c\u5f0f\uff1a\\(P(A\\cup B)=P(A)+P(B)-P(AB)\\)\uff1b\u63a8\u5e7f\u5373\u5bb9\u65a5\u539f\u7406\uff1b
    5. \u52a0\u6cd5\u516c\u5f0f\u7684\u63a8\u8bba\uff1a\\(P(A\\cup B)\\leq P(A)+P(B)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u7b49\u53ef\u80fd\u6982\u578b","title":"\u7b49\u53ef\u80fd\u6982\u578b","text":"

    \u5982\u679c\u968f\u673a\u4e8b\u4ef6\u6ee1\u8db3\uff1a

    1. \\(S\\) \u4e2d\u6837\u672c\u70b9\u6570\u6709\u9650\uff1b
    2. \\(\\forall i,j \\in\\{1,2,...,n\\},\\;P(e_i) = P(e_j)\\)\uff0c\u5373\u7b49\u53ef\u80fd\uff1b

    \u5219\u8be5\u8bd5\u9a8c\u95ee\u9898\u4e3a\u7b49\u53ef\u80fd\u6982\u578b\uff08\u53e4\u5178\u6982\u578b\uff09\u6709\u5982\u4e0b\u6027\u8d28\uff1a\u82e5\u603b\u4e8b\u4ef6\u4e2a\u6570\u4e3a \\(N\\)\uff0c\\(A\\) \u4e3a \\(n\\) \u4e2a\u57fa\u672c\u4e8b\u4ef6\u7684\u548c\u4e8b\u4ef6\uff0c\u5219 \\(P(A)=\\frac{n}{N}\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u6761\u4ef6\u6982\u7387","title":"\u6761\u4ef6\u6982\u7387","text":"

    \u5982\u679c \\(P(B)>0\\)\uff0c\u90a3\u4e48\u5b9a\u4e49\u5728 \\(B\\) \u53d1\u751f\u7684\u6761\u4ef6\u4e0b \\(A\\) \u53d1\u751f\u7684\u6761\u4ef6\u6982\u7387(contidional probability)\u4e3a\uff1a\\(P(A|B)=\\frac{P(AB)}{P(B)}\\)

    \u6761\u4ef6\u6982\u7387\u662f\u5728\u65b0\u7684\u6837\u672c\u7a7a\u95f4\u4e0b\u7684\u6982\u7387\u5ea6\u91cf\uff0c\u5b83\u6ee1\u8db3\u6982\u7387\u7684\u5b9a\u4e49\u548c\u6027\u8d28\u3002

    \u5b9a\u4e49\u5b8c\u5907\u4e8b\u4ef6\u7ec4\u4e3a \\(S\\) \u7684\u4e00\u4e2a\u5212\u5206 \\(B_1,B_2,...,B_n\\)\uff0c\u5b83\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

    1. \\(B_iB_j=\\varnothing,i,j,...,n,i\\not=j\\)\uff1b
    2. \\(\\bigcup\\limits^n_{i=1}B_i=S\\)\uff1b

    \u8bbe \\(S\\) \u4e3a\u4e00\u6837\u672c\u7a7a\u95f4\uff0c\\(A\\) \u4e3a\u8be5\u8bd5\u9a8c\u7684\u4e8b\u4ef6\uff0c\\(\\{B_i\\}\\) \u4e3a \\(S\\) \u7684\u4e00\u4e2a\u5212\u5206\uff0c\u5219\u6709\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u4e8b\u4ef6\u72ec\u7acb\u6027\u4e0e\u72ec\u7acb\u8bd5\u9a8c","title":"\u4e8b\u4ef6\u72ec\u7acb\u6027\u4e0e\u72ec\u7acb\u8bd5\u9a8c","text":"

    \u8bbe \\(A,B\\) \u4e3a\u4e24\u4e2a\u968f\u673a\u4e8b\u4ef6\uff0c\u82e5\u6709 \\(P(AB)=P(A)*P(B)\\)\uff0c\u5219 \\(A,B\\) \u76f8\u4e92\u72ec\u7acb(independent)\u5176\u5b9e\u9645\u610f\u4e49\u662f\uff0c\u4e8b\u4ef6 \\(A\\) \u7684\u53d1\u751f\u4e0e\u4e8b\u4ef6 \\(B\\) \u7684\u53d1\u751f\u4e92\u4e0d\u5f71\u54cd\u3002\u90a3\u4e48\u5c31\u6709\u7ed3\u8bba\uff1a\\(while\\;\\;P(AB)=P(A)*P(B)\\;\\;,\\;\\;P(A|B)=P(A)\\)\uff1b

    \u5f53\u51fa\u73b0\u4e24\u4e2a\u4ee5\u4e0a\u7684\u968f\u673a\u4e8b\u4ef6\u65f6\uff0c\u5982\u4e09\u4e2a\u968f\u673a\u4e8b\u4ef6 \\(A,B,C\\)\uff0c\u5f53\uff1a\\(P(AB)=P(A)*P(B)\\;,\\;P(AC)=P(A)*P(C)\\;,\\;P(BC)=P(B)*P(C)\\) \u90fd\u6210\u7acb\uff0c\u5219\u79f0\u4e8b\u4ef6 \\(A,B,C\\) \u4e24\u4e24\u72ec\u7acb\uff1b\u5982\u679c\u540c\u65f6\u8fd8\u6ee1\u8db3\uff1a\\(P(ABC)=P(A)P(B)P(C)\\) \u5219\u79f0\u4e8b\u4ef6 \\(A,B,C\\) \u76f8\u4e92\u72ec\u7acb\u3002

    \u66f4\u666e\u904d\u7684\uff1a\u5b9a\u4e49 \\(\\{A_i\\}\\) \u76f8\u4e92\u72ec\u7acb\u5f53\u4e14\u4ec5\u5f53 \\(\\forall{i_j},\\;P(\\prod_{j=1}^k A_{i_j})=\\prod_{j=1}^kP(A_{i_j})\\)

    \u72ec\u7acb\u8bd5\u9a8c\u4e0e\u91cd\u590d\u8bd5\u9a8c\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/","title":"[2.x] \u968f\u673a\u53d8\u91cf\u53ca\u5176\u6982\u7387\u5206\u5e03","text":"

    \u7ea6 1166 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u968f\u673a\u53d8\u91cf\u662f\u5b9a\u4e49\u5728\u6837\u672c\u7a7a\u95f4 \\(S\\) \u4e0a\u7684\u5b9e\u503c\u5355\u503c\u51fd\u6570\u3002\u5e38\u7528\u5927\u5199\u5b57\u6bcd \\(X,Y,Z\\) \u6765\u8868\u793a\u968f\u673a\u53d8\u91cf\uff0c\u7528\u5c0f\u5199\u5b57\u6bcd \\(x,y,z\\) \u8868\u793a\u5176\u53d6\u503c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","title":"\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","text":"

    \u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf(discrete random variable)\u5982\u679c\u968f\u673a\u53d8\u91cf\u53d6\u6709\u9650\u4e2a\u6216\u53ef\u5217\u4e2a\u503c\uff0c\u5219\u6b64\u968f\u673a\u53d8\u91cf\u4e3a\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf\uff0c\u800c\u82e5\u5176\u53ef\u80fd\u53d6\u503c\u4e3a \\(\\{x_i\\}\\)\uff0c\u5219\u79f0 \\(P\\{X=x_k\\}=p_k\\;,\\;k=1,2,...\\) \u4e3a \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b(probability mass function)\uff0c\u4e5f\u53ef\u4ee5\u7528\u5217\u8868\u7684\u65b9\u5f0f\u8868\u8fbe\u3002\u56e0\u4e3a\u6837\u672c\u7a7a\u95f4 \\(S=\\{X=x_1,X=x_2,\\,...\\,,X=x_n\\,...\\,\\}\\) \u4e2d\u5404\u6837\u672c\u70b9\u4e24\u4e24\u4e0d\u76f8\u5bb9\uff0c\u6240\u4ee5\uff1a\\(1=P(S)=\\sum\\limits_{i=1}^{+\\infty}P(X=x_i)=\\sum\\limits_{i=1}^{+\\infty}{p_i}\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u4e24\u70b9\u5206\u5e03","title":"\u4e24\u70b9\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    x 0 1 P 1-p p

    \\[ P\\{X=k\\}=p^k(1-p)^{1-k}\\;,\\;\\;\\;k=0\\;or\\;1 \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u53c2\u6570\u4e3a \\(p\\) \u7684 \\(0-1\\) \u5206\u5e03\uff0c\u4e5f\u79f0\u4e3a\u4e24\u70b9\u5206\u5e03\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim B(1,p)\\) \u6216\u8005 \\(X\\sim 0-1(p)\\)

    \u5b9a\u4e49\u4f2f\u52aa\u5229(Bernoulli)\u8bd5\u9a8c\u4e3a\uff1a\u5728 \\(n\\) \u6b21\u72ec\u7acb\u91cd\u590d\u8bd5\u9a8c\u4e2d\uff0c\u6bcf\u6b21\u53ea\u6709 \\(A\\) \u548c \\(\\overline A\\) \u4e24\u79cd\u7ed3\u679c\uff0c\u4e14\u6982\u7387\u4e0d\u53d8\uff0c\u5219\u8fd9\u4e00\u7cfb\u5217\u8bd5\u9a8c\u4e3a\u4f2f\u52aa\u5229\u8bd5\u9a8c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u4e8c\u9879\u5206\u5e03","title":"\u4e8c\u9879\u5206\u5e03","text":"

    \u82e5\u968f\u673a\u53d8\u91cf \\(X\\) \u8868\u793a \\(n\\) \u91cd\u8d1d\u52aa\u529b\u5b9e\u9a8c\u4e2d\u4e8b\u4ef6A\u53d1\u751f\u7684\u6b21\u6570\uff0c\u5176\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P\\{X=k\\}={\\rm C}_n^kp^k(1-p)^{n-k}\\;,\\;\\;k=0,1,2,...,n \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u53c2\u6570\u4e3a \\((n,p)\\) \u7684\u4e8c\u9879\u5206\u5e03(binomial distribution)\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim B(n,p)\\)

    \u6839\u636e\u4e8c\u9879\u5f0f\u5b9a\u7406\uff0c\u4e8c\u9879\u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    \\[ \\sum\\limits_{k=0}^n{\\rm C}_n^kp^k(1-p)^{n-k}=1 \\] "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u6cca\u677e\u5206\u5e03","title":"\u6cca\u677e\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P(X=k)=\\frac{e^{-\\lambda}\\lambda^k}{k!}\\;,\\;\\;\\;k=0,1,2,... \\]

    \u5176\u4e2d \\(\\lambda > 0\\)\uff0c\u5219\u79f0 \\(X\\) \u670d\u4ece\u53c2\u6570\u4e3a \\(\\lambda\\) \u7684\u6cca\u677e\u5206\u5e03(Poisson distribution)\uff0c\u8bb0\u505a \\(X \\sim P(\\lambda)\\)

    \u5f53 \\(n\\) \u8db3\u591f\u5927\uff0c\\(p\\) \u5145\u5206\u5c0f(\u4e00\u822c\u8981\u6c42 \\(p<0.1\\))\uff0c\u4e14 \\(np\\) \u4fdd\u6301\u9002\u5f53\u5927\u5c0f\u65f6\uff0c\u53c2\u6570\u4e3a \\((n,p)\\) \u7684\u4e8c\u9879\u5206\u5e03\u53ef\u4ee5\u7528\u6cca\u677e\u5206\u5e03\u8fd1\u4f3c\u63cf\u8ff0\uff0c\u5176\u4e2d \\(\\lambda = np\\)\uff0c\u5373\uff1a

    \\[ {\\rm C}_n^kp^k(1-p)^{n-k} \\sim \\frac{e^{-\\lambda}\\lambda^k}{k!}\\;\\;\\;\\;\\;(n\\rightarrow\\infty,p<\\varepsilon,\\lambda=np) \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u8d85\u51e0\u4f55\u5206\u5e03","title":"\u8d85\u51e0\u4f55\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P\\{X=k\\}=\\frac{{\\rm C}_a^k{\\rm C}_b^{n-k}}{{\\rm C}_{a+b}^n}\\;,\\;\\;\\;k=l_1,l_1+1,...,l_2 \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u8d85\u51e0\u4f55\u5206\u5e03(hypergeometric distribution)\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim H(n,a,p)\\)

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P\\{X=k\\}=p(1-p)^{k-1}\\;,\\;\\;\\;k=1,2,... \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u53c2\u6570\u4e3a \\(p\\) \u7684\u51e0\u4f55\u5206\u5e03(geometric distribution)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","title":"\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","text":"

    \u5b9a\u4e49\uff1a\u8bbe \\(X\\) \u4e3a\u968f\u673a\u53d8\u91cf\uff0c\\(x\\) \u4e3a\u4efb\u610f\u5b9e\u6570\uff0c\u51fd\u6570 \\(F(x)=P\\{X\\leq x\\}\\) \u4e3a\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u51fd\u6570\uff0c\u7b80\u79f0\u4e3a\u5206\u5e03\u51fd\u6570(distribution function)\u3002\uff08\u79bb\u6563\u968f\u673a\u53d8\u91cf\u540c\u6837\u53ef\u4ee5\u6709\u5206\u5e03\u51fd\u6570\uff09

    \u5219\u6709\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    \\[ P\\{x_1<X\\leq x_2\\}=P\\{X\\leq x_2\\}-P\\{X\\leq x_1\\}=F(x_2)-F(x_1) \\]

    \u5f53 \\(X\\) \u4e3a\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf\u65f6\uff0c\u8bbe \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a \\(P\\{X=x_i\\}=p_i\\;,\\;\\;i=1,2,...\\)\uff0c\u5219 \\(X\\) \u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x) = P\\{X\\leq x\\}=\\sum\\limits_{x_i\\leq x}P\\{X=x_i\\} \\]

    \u5173\u4e8e \\(F(x)\\) \u6709\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    1. \\(F(x)\\) \u5355\u8c03\u4e0d\u51cf\uff1b
    2. \\(0\\leq F(x) \\leq 1\\) \u4e14 \\(F(-\\infty)=0\\)\uff0c\\(F(+\\infty)=1\\)\uff1b
    3. \\(F(x)\\) \u53f3\u8fde\u7eed\uff0c\u5373 \\(F(x+0)=F(x)\\)\uff1b
    4. \\(P(a<X\\leq b)=F(b)-F(a)\\)\uff1b

    \u5982\u679c\u5bf9\u4e8e\u968f\u673a\u53d8\u91cf \\(X\\)\uff0c\u5176\u5206\u5e03\u51fd\u6570\u4e3a \\(F(x)\\)\uff0c\u82e5\u5b58\u5728\u4e00\u4e2a\u975e\u8d1f\u7684\u5b9e\u51fd\u6570 \\(f(x)\\)\uff0c\u4f7f\u5bf9\u4e8e\u4efb\u610f\u5b9e\u6570 \\(x\\)\uff0c\u6709\uff1a

    \\[ F(x) = \\int_{-\\infty}^{x}f(t)dt \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff0c\u5e76\u4e14\u79f0 \\(f(x)\\) \u4e3a \\(X\\) \u7684\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(probability density function)\uff0c\u7b80\u79f0\u4e3a\u5bc6\u5ea6\u51fd\u6570\u3002

    \u5173\u4e8e \\(f(x)\\) \u6709\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    1. \\(f(x) \\geq 0\\)\uff1b
    2. \\(\\int_{-\\infty}^{\\infty}f(x)dx=1\\)\uff1b
    3. \\(\\forall x_1,x_2\\in \\mathbf{R}\\;\\;(x_1<x_2)\\;,\\;\\;P\\{x_1<X\\leq x_2\\}=F(x_2)-F(x_1)=\\int^{x_2}_{x_1}f(t)dt\\)\uff1b
    4. \u5728\\(f(x)\\) \u7684\u8fde\u7eed\u70b9 \\(x\\) \u5904\uff0c\\(F'(x)=f(x)\\)
    5. \\(P\\{X=a\\} = 0\\)\uff0c\u5373\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\u4efb\u53d6\u4e00\u4e2a\u5b9a\u503c\u7684\u6982\u7387\u4e3a\u96f6\uff0c\u56e0\u6b64\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\u843d\u5728\u5f00\u533a\u95f4\u4e0e\u76f8\u5e94\u95ed\u533a\u95f4\u4e0a\u7684\u6982\u7387\u76f8\u7b49\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u5747\u5300\u5206\u5e03","title":"\u5747\u5300\u5206\u5e03","text":"

    \u8bbe\u968f\u673a\u53d8\u91cf \\(X\\) \u5c31\u6709\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x)=\\begin{cases} \\frac{1}{b-a}, & x\\in(a,b) \\\\[1ex] 0, & \\text{else} \\end{cases} \\]

    \u5219\u79f0 \\(X\\) \u670d\u4ece\u533a\u95f4 \\((a,b)\\) \u4e0a\u7684\u5747\u5300\u5206\u5e03\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim U(a,b)\\)

    \u800c\u5f97\u5230\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x)=\\begin{cases} 0, & x<a \\\\[1ex] \\frac{x-a}{b-a}, & a\\leq x<b \\\\[1ex] 1, & x\\geq b \\end{cases} \\]

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u6307\u6570\u5206\u5e03","title":"\u6307\u6570\u5206\u5e03","text":"

    \u82e5\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x)=\\begin{cases} \\lambda e^{-\\lambda x}, & x>0 \\\\[1ex] 0\uff0c& x\\leq0 \\end{cases} \\]

    \u4e5f\u6709\u5730\u65b9\u5199\u6210\u8fd9\u6837\uff1a

    \\[ f(x)=\\begin{cases} \\frac{1}{\\theta} e^{-\\frac{1}{\\theta} x}, & x>0 \\\\[1ex] 0\uff0c& x\\leq0 \\end{cases} \\]

    \u5176\u4e2d \\(\\lambda > 0\\)\uff0c\u5219\u79f0 \\(X\\) \u670d\u4ece\u53c2\u6570\u4e3a \\(\\lambda\\) \u7684\u6307\u6570\u5206\u5e03(exponential distribution)\uff0c\u8bb0\u4e3a \\(X\\sim E(\\lambda)\\)

    \u6307\u6570\u5206\u5e03\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x)=\\int_{-\\infty}^{x}f(t)\\mathrm{d}t= \\begin{cases} 1-e^{-\\lambda x}, & x>0 \\\\[1ex] 0\uff0c& x\\leq0 \\end{cases} \\]

    \u6307\u6570\u5206\u5e03\u5177\u6709\u65e0\u8bb0\u5fc6\u6027\uff0c\u5373 \\(P(X>s | X>t_0)=P(X>s-t_0)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u6b63\u6001\u5206\u5e03","title":"\u6b63\u6001\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x)=\\frac{1}{\\sqrt{2\\pi}\\sigma}e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}}\\;, \\;\\;\\; |x|<+\\infty \\]

    \u5176\u4e2d \\(\\sigma>0\\;,\\;|\\mu|<+\\infty\\) \u4e3a\u5e38\u6570\uff0c\u5219\u79f0 \\(X\\) \u670d\u4ece\u53c2\u6570\u4e3a \\((\\mu,\\sigma)\\) \u7684\u6b63\u6001\u5206\u5e03(normal distribution / Gauss distribution)\uff0c\u6216\u8005\u79f0 \\(X\\) \u4e3a\u6b63\u6001\u53d8\u91cf\uff0c\u8bb0\u4e3a \\(X\\sim N(\\mu,\\sigma^2)\\)\u3002

    \u5176\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x)=\\int_{-\\infty}^{x}\\frac{1}{\\sqrt{2\\pi}\\sigma}e^{-\\frac{(t-\\mu)^2}{2\\sigma^2}}dt \\]

    \u5728\u4e0a\u9762\u51fa\u73b0\u7684\u5f0f\u5b50\u4e2d\uff0c\\(\\mu\\) \u4e3a\u4f4d\u7f6e\u53c2\u6570\uff0c\u51b3\u5b9a\u4e86\u5206\u5e03\u56fe\u50cf\u7684\u5bf9\u79f0\u8f74\u4f4d\u7f6e\uff1b\\(\\sigma\\) \u4e3a\u5c3a\u5ea6\u53c2\u6570\uff0c\u51b3\u5b9a\u4e86\u5f62\u72b6\uff0c\\(\\sigma\\) \u8d8a\u5c0f\uff0c\u56fe\u50cf\u8d8a\u96c6\u4e2d\u3002

    \u7279\u522b\u7684\uff0c\u5f53 \\(\\mu=0\\;,\\;\\sigma=1\\) \u65f6\uff0c\u5982\u679c\u8bb0\u8fd9\u65f6\u7684\u6b63\u592a\u53d8\u91cf\u4e3a \\(Z\\)\uff0c\u5373 \\(Z\\sim N(0,1)\\) \u5219\u5b83\u670d\u4ece\u6807\u51c6\u6b63\u6001\u5206\u5e03(standard normal distribution)\u3002\u5219\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a\uff1a

    \\[ \\varphi(x)=\\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{x^2}{2}}\\;, \\;\\;\\;|x|<+\\infty \\]

    \u5219\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ \\Phi(x) = \\int_{-\\infty}^{x}\\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{t^2}{2}}dt \\]

    \u800c\u5bf9\u4e8e\u4e0d\u662f\u6807\u51c6\u6b63\u6001\u5206\u5e03\u7684\u6b63\u6001\u5206\u5e03\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u7ebf\u6027\u53d8\u6362\uff08\u6807\u51c6\u5316\uff09\u6765\u8f6c\u6362\u4e3a\u6807\u51c6\u6b63\u6001\u5206\u5e03\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u5206\u5e03","title":"\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u5206\u5e03","text":"

    \u5982\u679c\uff1a

    \u5219\u8bb0 \\(y=g(x)\\) \u7684\u53cd\u51fd\u6570\u4e3a \\(x=h(y)\\)\uff0c\u5f97\u5230 \\(Y\\) \u7684\u5bc6\u5ea6\u51fd\u6570\u4e3a\uff1a

    \\[ f_Y(y)=\\begin{cases} f_X(h(y))\u00b7|h'(y)|\\;, & y\\in D,\\\\[1ex] 0, & y\\not\\in D \\end{cases} \\]

    \u6709\u5173\u6b63\u6001\u5206\u5e03\u7684\u91cd\u8981\u7ed3\u8bba\uff1a

    \u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(Y=aX+b \\sim N(a\\mu+b,a^2\\sigma^2)\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/","title":"[3.x] \u591a\u5143\u968f\u673a\u53d8\u91cf\u53ca\u5176\u5206\u5e03","text":"

    \u7ea6 406 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","title":"\u4e8c\u7ef4\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8054\u5408\u5206\u5e03\u5f8b","title":"\u8054\u5408\u5206\u5e03\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5206\u5e03\u5f8b","title":"\u8fb9\u9645\u5206\u5e03\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5206\u5e03\u5f8b","title":"\u6761\u4ef6\u5206\u5e03\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u968f\u673a\u53d8\u91cf\u7684\u5206\u5e03\u51fd\u6570","title":"\u4e8c\u7ef4\u968f\u673a\u53d8\u91cf\u7684\u5206\u5e03\u51fd\u6570","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8054\u5408\u5206\u5e03\u51fd\u6570","title":"\u8054\u5408\u5206\u5e03\u51fd\u6570","text":"

    \\(F(x,y)=P\\{X\\leq x,Y\\leq y\\}\\) \u4e3a \\((X,Y)\\) \u7684\u8054\u5408\u6982\u7387\u5206\u5e03\u51fd\u6570\uff0c\u7b80\u79f0\u8054\u5408\u5206\u5e03\u51fd\u6570\uff08Joint Distribution Function\uff09\uff0c\u5176\u5177\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    1. \u56fa\u5b9a\u5176\u4e2d\u4e00\u4e2a\u53d8\u91cf\uff0c\u5219\u8be5\u4e8c\u5143\u51fd\u6570\u5173\u4e8e\u53e6\u5916\u4e00\u4e2a\u53d8\u91cf\u5355\u8c03\u4e0d\u51cf\uff1b
    2. \\(0\\leq F(x,y)\\leq 1\\)\uff0c\u4e14 \\(F(x,-\\infty)=F(-\\infty,y)=F(-\\infty,-\\infty)=0\\;,\\;F(+\\infty,+\\infty)=1\\)\uff1b
    3. \\(F(x,y)\\) \u5173\u4e8e \\(x\\) \u548c \\(y\\) \u5206\u522b\u53f3\u8fde\u7eed\uff08\u79bb\u6563\uff09\uff1b
    4. \\(x_1<x_2\\;,\\;y_1<y_2\\) \u65f6\uff0c\u6709\uff1a \\(P\\{x_1<X\\leq x_2\\;,\\;y_1<Y\\leq y_2\\}=F(x_2,y_2)-F(x_1,y_2)-F(x_2,y_1)+F(x_1,y_1)\\geq 0\\)
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5206\u5e03\u51fd\u6570","title":"\u8fb9\u9645\u5206\u5e03\u51fd\u6570","text":"

    \\(F_X(x)=P\\{X\\leq x\\}=P\\{X\\leq x ,Y<+\\infty\\}=F(x,+\\infty)=\\int_{-\\infty}^{+\\infty}f(x,y)dy\\) \u4e3a \\(X\\) \u5173\u4e8e\u8054\u5408\u5206\u5e03\u51fd\u6570 \\(F(x,y)\\) \u7684\u8fb9\u9645\u5206\u5e03\u51fd\u6570\uff08Marginal Distribution Function\uff09\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5206\u5e03\u51fd\u6570","title":"\u6761\u4ef6\u5206\u5e03\u51fd\u6570","text":"

    \\(F_{Y|X}(y|x)=P\\{Y\\leq y | X = x\\}=\\frac{P\\{Y\\leq y,X=x\\}}{P\\{X=x\\}}\\) \u4e3a \\(\\{ X=x \\}\\) \u6761\u4ef6\u4e0b \\(Y\\) \u7684\u6761\u4ef6\u5206\u5e03\u51fd\u6570\uff08Conditional Distribution Function\uff09\u3002

    \u8fdb\u4e00\u6b65\u63a8\u5e7f\uff0c\u82e5 \\(P(X=x)=0\\)\uff0c\u4f46\u5bf9\u4efb\u610f\u7ed9\u5b9a\u7684 \\(\\epsilon\\)\uff0c\\(P(x<X\\leq x+\\epsilon)>0\\)\uff0c\u5219\u5728 \\(\\{ X=x \\}\\) \u6761\u4ef6\u4e0b\uff0c\\(Y\\) \u7684\u6761\u4ef6\u5206\u5e03\u51fd\u6570\u4e3a \\(F_{Y|X}(y|x)=\\lim_{\\epsilon \\rarr 0^+}P\\{Y\\leq y|x<X\\leq x+\\epsilon \\}\\)\uff0c\u4ecd\u8bb0\u4e3a \\(P\\{Y\\leq y | X = x\\}\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","title":"\u4e8c\u7ef4\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8054\u5408\u5bc6\u5ea6\u51fd\u6570","title":"\u8054\u5408\u5bc6\u5ea6\u51fd\u6570","text":"

    \u8bbe\u4e8c\u5143\u968f\u673a\u53d8\u91cf \\((X,Y)\\) \u7684\u8054\u5408\u5206\u5e03\u51fd\u6570\u4e3a \\(F(x,y)\\)\uff0c\u82e5\u5b58\u5728\u4e8c\u5143\u51fd\u6570 \\(f(x,y)\\geq 0\\)\uff0c\u5219\u5bf9\u4e8e\u4efb\u610f\u7684\u5b9e\u6570 \\(x\\)\uff0c\\(y\\) \u6709 \\(F(x,y)=\\int_{-\\infty}^x\\int_{-\\infty}^yf(u,v)\\mathrm{d}u\\mathrm{d}v\\)\uff0c\u5219\u79f0 \\((X,Y)\\) \u4e3a\u4e8c\u7ef4\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff08Bivariate Continuous Random Variable\uff09\uff0c\u79f0 \\(f(x,y)\\) \u4e3a \\((X,Y)\\) \u7684\u8054\u5408\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08Joint Probability Density Function\uff09\uff0c\u7b80\u79f0\u4e3a\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\u3002 \u5176\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

    1. \\(f(x,y)\\geq 0\\)\uff1b
    2. \\(F(+\\infty,+\\infty)=\\int_{-\\infty}^{+\\infty}\\int_{-\\infty}^{+\\infty}f(u,v)\\mathrm{d}u\\mathrm{d}v=1\\)\uff1b
    3. \u5728 \\(f(x,y)\\) \u7684\u8fde\u7eed\u70b9 \\((x,y)\\) \u4e0a\u6709 \\(\\frac{\\partial^2F(x,y)}{\\partial x\\partial y}=f(x,y)\\)\uff1b
    4. \\((X,Y)\\) \u843d\u5165 \\(xOy\\) \u5e73\u9762\u4efb\u610f\u533a\u57df \\(D\\) \u7684\u6982\u7387\u4e3a\uff1a\\(P\\{(X,Y)\\in D\\}=\\iint \\limits_{D} f(x,y)\\mathrm{d}x\\mathrm{d}y\\)\uff1b
    5. \u7531\u4e8e\u5176\u51e0\u4f55\u610f\u4e49\u4e3a\u843d\u5728\u4ee5 \\(D\\) \u4e3a\u5e95\uff0c\u4ee5\u66f2\u9762 \\(z=f(x,y)\\) \u4e3a\u9876\u9762\u7684\u67f1\u4f53\u4f53\u79ef\uff0c\u6240\u4ee5\u5f53 \\(D\\) \u9762\u79ef\u4e3a \\(0\\) \u65f6\u6982\u7387\u4e3a \\(0\\)\uff1b
    6. eg\uff1a\\(P(X=1,Y=1)=0\\)\uff0c\\(P(X+Y=1)=0\\)\uff0c\\(P(X^2+Y^2=1)\\not =0\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5bc6\u5ea6\u51fd\u6570","title":"\u8fb9\u9645\u5bc6\u5ea6\u51fd\u6570","text":"

    \\(f_X(x)=\\int_{-\\infty}^{+\\infty}f(x,y)dy\\) \u4e3a\u8fb9\u9645\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08Marginal Probability Density Function\uff09\uff0c\u7b80\u79f0\u8fb9\u9645\u5bc6\u5ea6\u51fd\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5bc6\u5ea6\u51fd\u6570","title":"\u6761\u4ef6\u5bc6\u5ea6\u51fd\u6570","text":"

    \u5728\u7ed9\u5b9a \\(\\{X=x\\}\\) \u7684\u6761\u4ef6\u4e0b\uff0c\\(Y\\) \u7684\u6761\u4ef6\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08Conditional Prob-ability Density Function\uff09\u4e3a \\(f_{Y|X}(y|x)=\\frac{\\int^y_{-\\infty}f(x,v)\\mathrm{d}v}{f_X(x)}=\\frac{f(x,y)}{f_X(x)}\\;,\\;\\;f_X(x)\\not= 0\\)\uff0c\u7b80\u79f0\u6761\u4ef6\u5bc6\u5ea6\u51fd\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u5747\u5300\u5206\u5e03\u4e0e\u4e8c\u7ef4\u6b63\u6001\u5206\u5e03","title":"\u4e8c\u7ef4\u5747\u5300\u5206\u5e03\u4e0e\u4e8c\u7ef4\u6b63\u6001\u5206\u5e03","text":"

    \u5747\u5300\u5206\u5e03

    \u5982\u679c\u4e8c\u5143\u968f\u673a\u53d8\u91cf \\((X,Y)\\) \u5728\u4e8c\u7ef4\u6709\u754c\u533a\u95f4 \\(D\\) \u4e0a\u53d6\u503c\uff0c\u4e14\u5177\u6709\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x,y)= \\begin{cases} \\frac{1}{\\text{Area of } D},&(x,y)\\in D\\\\[1ex] 0,&\\text{else} \\end{cases} \\]

    \u5219\u79f0 \\((X,Y)\\) \u670d\u4ece \\(D\\) \u4e0a\u7684\u5747\u5300\u5206\u5e03\u3002\u5f97\u5230\uff1a

    \\[ P\\{(X,Y)\\in D\\}=\\frac{\\text{Area of }D_1}{\\text{Area of }D}\\;,\\;\\;\\text{while }D_1\\subset D \\]

    \u6b63\u6001\u5206\u5e03

    \u5982\u679c\u4e8c\u5143\u968f\u673a\u53d8\u91cf \\((X,Y)\\) \u5177\u6709\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x,y)= \\frac{1}{ 2 \\pi \\sigma_1 \\sigma_2 \\sqrt{1-\\rho^2} } \\exp \\{ \\frac{-1}{ 2(1-\\rho^2) } [ \\frac{ (x-\\mu)^2 }{ \\sigma_1^2 } - 2\\rho\\frac{ (x-\\mu_1)(y-\\mu_2) }{ \\sigma_1\\sigma_2 } + \\frac{ (y-\\mu_2)^2 }{ \\sigma_2^2 } ] \\} \\]

    \u4e14\u6709 \\(|\\mu_1|<+\\infty\\)\uff0c\\(|\\mu_2|<+\\infty\\)\uff0c\\(\\sigma_1>0\\)\uff0c\\(\\sigma_2>0\\)\uff0c\\(|\\rho|<1\\)

    \u5219\u79f0 \\((X,Y)\\) \u670d\u4ece\u53c2\u6570\u4e3a \\((\\mu_1,\\mu_2,\\sigma_1^2,\\sigma_2^2,\\rho)\\) \u7684\u4e8c\u5143\u6b63\u6001\u5206\u5e03\uff08Bivariate Normal Distribution\uff09\uff0c\u8bb0\u505a \\((X,Y)\\sim N(\\mu_1,\\mu_2,\\sigma_1^2,\\sigma_2^2,\\rho)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u968f\u673a\u53d8\u91cf\u7684\u72ec\u7acb\u6027","title":"\u968f\u673a\u53d8\u91cf\u7684\u72ec\u7acb\u6027","text":"

    \u5982\u679c\u5bf9\u4e8e\u4efb\u610f\u7684\u4e24\u4e2a\u5b9e\u6570\u96c6\u5408 \\(D_1\\)\uff0c\\(D_2\\)\uff0c\u6709 \\(P\\{X\\in D_1,Y\\in D_2\\}=P\\{X\\in D_1\\}\u00b7P\\{Y\\in D_2\\}\\)\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf \\(X,Y\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5373 \\(X\\)\uff0c\\(Y\\) \u72ec\u7acb\u3002\u5373\u540c\u65f6\u6709 \\(P\\{X\\leq x,Y\\leq y\\}=P\\{X\\leq x\\}\u00b7P\\{Y\\leq y\\}\\)\uff0c\u5373 \\(F(x,y)=F_X(x)\u00b7F_Y(y)\\) \u65f6\uff0c\\(X\\)\uff0c\\(Y\\) \u72ec\u7acb\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u5377\u79ef\u516c\u5f0f","title":"\u5377\u79ef\u516c\u5f0f","text":"

    \u5f53 \\(X\\) \u548c \\(Y\\) \u76f8\u4e92\u72ec\u7acb\u65f6\uff0c\\(Z=X+Y\\) \u7684\u6761\u4ef6\u4e0b\uff1a

    1. \\(F_Z(z) = \\iint \\limits_{x+y\\leq z}f(x,y)\\mathrm{d}x\\mathrm{d}y=\\int_{-\\infty}^{+\\infty}[\\int_{-\\infty}^{z-x}f(x,u-x)\\mathrm{d}y]\\mathrm{d}x = \\int_{-\\infty}^{+\\infty}[\\int_{-\\infty}^{z}f(x,u-x)\\mathrm{d}u]\\mathrm{d}x=\\int_{-\\infty}^{z}[\\int_{-\\infty}^{+\\infty}f(x,u-x)\\mathrm{d}x]\\mathrm{d}u =\\int_{-\\infty}^{z}f_Z(u)\\mathrm{d}y\\)\uff1b

    2. \u5176\u5bc6\u5ea6\u51fd\u6570\u516c\u5f0f\u79f0\u4e3a\u5377\u79ef\u516c\u5f0f\uff1a\\(f_X*f_Y=\\int_{-\\infty}^{+\\infty}f_X(x)f_Y(z-x)\\mathrm{d}x=\\int_{-\\infty}^{+\\infty}f_X(z-y)f_Y(y)\\mathrm{d}y\\)\uff1b

    \\(M=max(X,Y)\\;\\;and\\;\\;N=min(X,Y)\\) \u7684\u5206\u5e03\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/","title":"[4.x] \u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81","text":"

    \u7ea6 1774 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u6570\u5b66\u671f\u671b","title":"\u6570\u5b66\u671f\u671b","text":"

    \u8bbe\u79bb\u6563\u968f\u673a\u53d8\u91cf\\(X\\)\u7684\u6982\u7387\u5206\u5e03\u7387\u4e3a \\(P\\{X=x_i\\}=p_i,\\;\\;i=1,2,...\\)\uff0c\u82e5\u7ea7\u6570 \\(\\sum_{i=1}^{+\\infty}|x_i|p_i<+\\infty\\)\uff08\u7edd\u5bf9\u6536\u655b\uff09\uff0c\u5219\u79f0\u7ea7\u6570 \\(\\sum_{i=1}^{+\\infty}x_ip_i\\) \u4e3a \\(X\\) \u7684\u6570\u5b66\u671f\u671b(Mathematical Expectation)\u6216\u5747\u503c(Mean)\uff0c\u7b80\u79f0\u4e3a\u671f\u671b\uff0c\u8bb0 \\(E(X)=\\sum_{i=1}^{+\\infty}x_ip_i\\)\u3002 \u5982\u679c \\(\\sum_{i=1}^{+\\infty}=|x_i|p_i=+\\infty\\) \u5219\u79f0\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6570\u5b66\u671f\u671b\u4e0d\u5b58\u5728\u3002

    \u8bbe\u8fde\u7eed\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u5bc6\u5ea6\u51fd\u6570\u4e3a \\(f(x)\\)\uff0c\u82e5 \\(\\int^{+\\infty}_{-\\infty}|x|f(x)\\mathrm{d} x<+\\infty\\)\uff08\u7edd\u5bf9\u6536\u655b\uff09\uff0c\u5219\u79f0\u79ef\u5206 \\(\\int^{+\\infty}_{-\\infty}xf(x)\\mathrm{d} x\\) \u4e3a \\(X\\) \u7684\u6570\u5b66\u671f\u671b\u6216\u5747\u503c\uff0c\u7b80\u79f0\u4e3a\u671f\u671b\uff0c\u8bb0 \\(E(X)=\\int^{+\\infty}_{-\\infty}xf(x)\\mathrm{d} x\\)\u3002 \u5982\u679c \\(\\int^{+\\infty}_{-\\infty}|x|f(x)\\mathrm{d} x=+\\infty\\) \u5219\u79f0\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6570\u5b66\u671f\u671b\u4e0d\u5b58\u5728\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u5e38\u89c1\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b","title":"\u5e38\u89c1\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b","text":"

    \u6cca\u677e\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b \u8bbe\u968f\u673a\u53d8\u91cf \\(X\\) \u670d\u4ece\u6cca\u677e\u5206\u5e03 \\(P(\\lambda)\\;(\\lambda>0)\\)\uff0c\u5219\uff1a \\(E(X)=\\sum_{k=0}^{+\\infty}k\u30fb P\\{X=k\\}=\\sum_{k=0}^{+\\infty}k\u30fb\\frac{\\lambda^{k}}{k!}e^{-\\lambda}=\\lambda\\sum_{k=1}^{+\\infty}\\frac{\\lambda^{k-1}}{(k-1)!}e^{-\\lambda}=\\lambda\\) \u7531\u6b64\u5f0f\u53ef\u77e5\uff0c\u5df2\u77e5\u6cca\u677e\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u53ef\u4ee5\u786e\u5b9a\u6cca\u677e\u5206\u5e03\u3002

    \u6307\u6570\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b \u8bbe\u968f\u673a\u53d8\u91cf\\(X\\)\u670d\u4ece\u6307\u6570\u5206\u5e03 \\(E(\\lambda)\\;(\\lambda>0)\\)\uff0c\u5219\uff1a \\(E(X)=\\int_{-\\infty}^{+\\infty}xf(x)\\mathrm{d}x=\\int_{0}^{+\\infty}x\\lambda e^{-\\lambda x}\\mathrm{d}x=-\\int_{0}^{+\\infty}x\\mathrm{d}e^{-\\lambda x}\\\\=-(xe^{-\\lambda x})\\big|_{0}^{+\\infty}+\\int_{0}^{+\\infty}e^{-\\lambda x}\\mathrm{d}x=\\frac{1}{\\lambda}\\) \u7531\u6b64\u5f0f\u53ef\u77e5\uff0c\u5df2\u77e5\u6307\u6570\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u53ef\u4ee5\u786e\u5b9a\u6307\u6570\u5206\u5e03\u3002

    \u6807\u51c6\u6b63\u6001\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b \u8bbe\u968f\u673a\u53d8\u91cf\\(X\\)\u670d\u4ece\u6807\u51c6\u6b63\u6001\u5206\u5e03 \\(N(0,1)\\)\uff0c\u6ce8\u610f\u5230\u5176\u7684\u5bc6\u5ea6\u51fd\u6570\uff1a\\(\\varphi(x)=\\frac{1}{\\sqrt{2\\pi}}e^{-x^2/2},\\;x\\in \\R\\) \u4e3a\u5076\u51fd\u6570\uff0c\u90a3\u4e48 \\(x\\varphi(x)\\) \u662f\u5947\u51fd\u6570\uff0c\u6240\u4ee5 \\(E(x)=0\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u6570\u5b66\u671f\u671b","title":"\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u6570\u5b66\u671f\u671b","text":"

    \u8bbe \\(Y\\) \u662f\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u51fd\u6570\uff1a\\(Y=g(X)\\)\uff08\\(g\\) \u662f\u8fde\u7eed\u51fd\u6570\uff09\u3002

    \\(X\\) \u662f\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf\uff0c\u5b83\u7684\u5206\u5e03\u5f8b\u4e3a \\(P(X=x_k)=p_k,\\;\\;k=1,2,...\\)\uff0c\u82e5 \\(\\sum_{k=1}^{+\\infty}g(x_k)p_k\\) \u7edd\u5bf9\u6536\u655b\uff0c\u5219\u6709\uff1a \\(E(Y)=E(g(X))=\\sum_{k=1}^{+\\infty}g(x_k)p_k\\)\u3002

    \\(X\\) \u662f\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff0c\u5b83\u7684\u6982\u7387\u5bc6\u5ea6\u4e3a \\(f(x)\\)\uff0c\u82e5 \\(\\int_{-\\infty}^{+\\infty}g(x)f(x)\\mathrm{d}x\\) \u7edd\u5bf9\u6536\u655b\uff0c\u5219\u6709\uff1a \\(E(Y)=E(g(X))=\\int_{-\\infty}^{+\\infty}g(x)f(x)\\mathrm{d}x\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u6570\u5b66\u671f\u671b\u7684\u6027\u8d28","title":"\u6570\u5b66\u671f\u671b\u7684\u6027\u8d28","text":"
    1. \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C) = C\\)\uff1b
    2. \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C\u30fbX)=C\u30fbE(X)\\)\uff1b
    3. \u8bbe \\(X,Y\\) \u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219 \\(E(X+Y)=E(X)+E(Y)\\)\uff1b
      • \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u968f\u673a\u53d8\u91cf\u7ebf\u6027\u7ec4\u5408\u7684\u60c5\u51b5\uff1a\\(E(c_0+\\sum^n_i{c_iX_i})=c_0+\\sum^n_i c_iE(X_i)\\)\uff1b
    4. \u8bbe \\(X,Y\\) \u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff0c\u5219 \\(E(X\u30fbY)=E(X)\u30fbE(Y)\\)\uff0c\u4f46\u9006\u547d\u9898\u4e0d\u6210\u7acb\uff1b
      • \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff1a\\(E(\\prod_i^nX_i)=\\prod_i^nE(X_i)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u65b9\u5dee\u4e0e\u53d8\u5f02\u7cfb\u6570","title":"\u65b9\u5dee\u4e0e\u53d8\u5f02\u7cfb\u6570","text":"

    \u8bbe \\(X\\) \u4e3a\u968f\u673a\u53d8\u91cf\uff0c\u82e5 \\(E\\{[X-E(X)]^2\\}\\) \u5b58\u5728\uff0c\u5219\u79f0\u5176\u4e3a \\(X\\) \u7684\u65b9\u5dee\uff0c\u8bb0\u4f5c \\(Var(X)\\) \u6216 \\(D(X)\\)\uff0c\u5373 \\(Var(X)=D(X)=E\\{[X-E(X)]^2\\}\\)\u3002 \u8bb0 \\(\\sigma(X)=\\sqrt{(Var(X))}\\) \u4e3a \\(X\\) \u7684\u6807\u51c6\u5dee\u6216\u5747\u65b9\u5dee\u3002

    \u6570\u5b66\u671f\u671b\u5b58\u5728\u662f\u65b9\u5dee\u5b58\u5728\u7684\u5fc5\u8981\u4f46\u4e0d\u5145\u5206\u6761\u4ef6\u3002

    \u65b9\u5dee\u523b\u753b\u4e86 \\(X\\) \u53d6\u503c\u7684\u5206\u6563\u7a0b\u5ea6\uff1a

    \u800c\u5176\u8ba1\u7b97\u65b9\u6cd5\u53ef\u4ee5\u5229\u7528\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u6570\u5b66\u671f\u671b\uff0c\u8bb0 \\(g(X)=(X-E(X))^2\\)\uff0c\u7136\u540e\u8ba1\u7b97 \\(E(g(X))\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u5e38\u89c1\u5206\u5e03\u7684\u65b9\u5dee","title":"\u5e38\u89c1\u5206\u5e03\u7684\u65b9\u5dee","text":"

    \u6cca\u677e\u5206\u5e03\u7684\u65b9\u5dee \\(\\because E(X^2)=E(X(X-1)+X)=E(X(X-1))+E(X)=\\sum_{k=0}^{\\infty}k(k-1)\\frac{\\lambda^ke^{-\\lambda}}{k!}+\\lambda=\\lambda^2+\\lambda\\\\ \\therefore Var(X)=E(X^2)+E^2(X)=\\lambda\\)

    \u6307\u6570\u5206\u5e03\u7684\u65b9\u5dee \\(\\because E(X^2)=\\int_{-\\infty}^{+\\infty}x^2f(x)\\mathrm dx=\\int_0^{+\\infty}x^2\\lambda e^{-\\lambda x}\\mathrm d x=-x^2e^{-\\lambda x}\\big|^{+\\infty}_0+\\int^{+\\infty}_{0}2xe^{-\\lambda x}\\mathrm dx=\\frac{2}{\\lambda^2}\\\\ \\therefore Var(X)=E(X^2)-E^2(X)=\\frac{1}{\\lambda^2}\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u65b9\u5dee\u7684\u6027\u8d28","title":"\u65b9\u5dee\u7684\u6027\u8d28","text":"
    1. \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C) = 0\\)\uff1b
    2. \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C\u30fbX)=C^2\u30fbVar(X)\\)\uff1b
    3. \u8bbe \\(X,Y\\) \u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219 \\(Var(X\\pm Y)=Var(X)+Var(Y)\\pm2E\\{[X-E(X)][Y-E(Y)]\\}=Var(X)+Var(Y)\\pm 2Cov(X,Y)\\)\uff1b
      • \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u968f\u673a\u53d8\u91cf\u4e4b\u548c\u7684\u60c5\u51b5\uff1a\\(Var(\\sum_{i=1}^{n}X_i)=\\sum_{i=1}^{n}Var(X_i)+2\\sum_{1\\leq i<j\\leq n}Cov(X_i,X_j)\\)\uff1b
      • \u7279\u522b\u5730\uff0c\u5982\u679c \\(X,Y\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5219 \\(Var(X\\pm Y)=Var(X)+Var(Y)\\)\uff1b
      • \u8fdb\u4e00\u6b65\u5730\uff0c\u5982\u679c \\(X_i\\;(i=1,2,...,n)\\) \u5f7c\u6b64\u72ec\u7acb\uff0c\u5219 \\(Var(c_0+\\sum_{i=1}^{n}c_iX_i)=\\sum_{i=1}^{n}c_i^2Var(X_i)\\)
    4. \\(Var(X)\\leq E[(X-c)^2]\\)\uff0c\u5e76\u4e14\u5f53\u4e14\u4ec5\u5f53 \\(E(X)=c\\) \u65f6\u7b49\u53f7\u6210\u7acb\uff1b
    5. \\(Var(X)=0\\;\\;\\Leftrightarrow\\;\\;P(X=c)=1\\;\\;and\\;\\;c=E(X)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u53d8\u5f02\u7cfb\u6570","title":"\u53d8\u5f02\u7cfb\u6570","text":"

    \u53d8\u5f02\u7cfb\u6570(Coefficient of Variation)\u53c8\u53eb\u201c\u6807\u51c6\u5dee\u7387\u201d\uff0c\u662f\u8861\u91cf\u8d44\u6599\u4e2d\u5404\u89c2\u6d4b\u503c\u53d8\u5f02\u7a0b\u5ea6\u7684\u4e00\u4e2a\u6570\u5b57\u7279\u5f81\u3002\u5b83\u53ef\u4ee5\u6d88\u9664\u5355\u4f4d\u6216\u5e73\u5747\u6570\u4e0d\u540c\u5bf9\u4e24\u4e2a\u6216\u591a\u4e2a\u8d44\u6599\u53d8\u5f02\u7a0b\u5ea6\u6bd4\u8f83\u7684\u5f71\u54cd\u3002

    \u8bbe\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u6570\u5b66\u671f\u671b \\(E(X)=\\mu\\)\uff0c\u65b9\u5dee \\(Var(X)={\\sigma}^2 \\neq 0\\)\uff0c\u5219\u79f0 \\(C_v = \\frac{\\sigma}{\\mu}\\) \u4e3a \\(X\\) \u7684\u53d8\u5f02\u7cfb\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u534f\u65b9\u5dee\u4e0e\u76f8\u5173\u7cfb\u6570","title":"\u534f\u65b9\u5dee\u4e0e\u76f8\u5173\u7cfb\u6570","text":"

    \u968f\u673a\u53d8\u91cf \\(X,Y\\) \u7684\u534f\u65b9\u5dee \\(Cov(X,Y)=E\\{[X-E(X)][Y-E(Y)]\\}=E(XY)-E(X)E(Y)\\)

    \u968f\u673a\u53d8\u91cf \\(X,Y\\) \u7684\u76f8\u5173\u7cfb\u6570 \\(\\rho _{_{XY}}=\\frac{Cov(X,Y)}{\\sqrt{Var(X)Var(Y)}}=Cov(X^*,Y^*)\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u534f\u65b9\u5dee\u7684\u6027\u8d28","title":"\u534f\u65b9\u5dee\u7684\u6027\u8d28","text":"
    1. \\(Cov(X,Y)=Cov(Y,X)\\)\uff1b
    2. \\(Cov(X,Y)=E(XY)-E(X)E(Y)\\)\uff1b
    3. \\(Cov(aX,bY)=abCov(X,Y)\\;,\\;\\;a,b\\in\\R\\)\uff1b
    4. \\(Cov(X+Y,Z)=Cov(X,Z)+Cov(Y,Z)\\)\uff1b
    5. \\(Cov(X,X)=Var(X)\\)\uff1b
    6. \\(Cov(c,Y)=E(cY)-E(c)E(Y)=0\\;,\\;\\;c\\in\\R\\)\uff1b
    7. \\(Cov(X+Y,X-Y)=Cov(X,X)-Cov(Y,Y)=Var(X)-Var(Y)\\)\uff1b
    8. \\(Cov(X^*,Y^*)=Cov(\\frac{X-E(X)}{\\sqrt{Var(X)}},\\frac{Y-E(Y)}{\\sqrt{Var(Y)}})=\\frac{Cov(X,Y)}{\\sqrt{Var(X)}\\sqrt{Var(Y)}}=\\rho_{_{XY}}\\)\uff1b
    9. \\(Cov(aX+bY,cX+dY)=acVar(X)+bdVar(Y)+(ad+bc)Cov(X,Y)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u76f8\u5173\u7cfb\u6570\u7684\u6027\u8d28","title":"\u76f8\u5173\u7cfb\u6570\u7684\u6027\u8d28","text":"
    1. \\(|\\rho_{_{XY}}|\\leq 1\\)\uff1b
    2. \\(|\\rho_{_{XY}}|=1 \\;\\; \\Leftrightarrow \\;\\; \\exists a,b\\in \\R,\\;s.t.\\;P(Y=a+bX)=1\\)\uff1b
      • \\(\\rho_{_{XY}}=+1\\)\u65f6\uff0c\\(b>0\\)\uff1b
      • \\(\\rho_{_{XY}}=-1\\)\u65f6\uff0c\\(b<0\\)\uff1b
    3. \u4e0a\u8ff0\u4e24\u6761\u6027\u8d28\u53ef\u4ee5\u5408\u5e76\u5199\u6210\uff1a \u5f53 \\(Var(X)Var(Y)\\neq 0\\) \u65f6\uff0c\u6709 \\(Cov^2(X,Y)\\leq Var(X)Var(Y)\\)\uff0c\u5176\u4e2d\u7b49\u53f7\u5f53\u4e14\u4ec5\u5f53 \\(X\\) \u4e0e \\(Y\\) \u4e4b\u95f4\u6709\u4e25\u683c\u7684\u7ebf\u6027\u5173\u7cfb\uff0c\u5373\u5b58\u5728\u5e38\u6570 \\(a,b\\)\uff0c\u4f7f \\(P(Y=a+bX)=1\\)\uff1b

    \u76f8\u5173\u7cfb\u6570 \\(\\rho_{_{XY}}\\) \u662f\u7528\u6765\u8868\u5f81 \\(X,Y\\) \u4e4b\u95f4\u7ebf\u6027\u5173\u7cfb\u7d27\u5bc6\u7a0b\u5ea6\u7684\u91cf\u3002\u6b64\u5916\uff0c\u8003\u8651\u4ee5 \\(X\\) \u7684\u7ebf\u6027\u51fd\u6570 \\(a+bX\\) \u6765\u8fd1\u4f3c\u8868\u793a \\(Y\\)\uff0c\u5747\u65b9\u8bef\u5dee \\(e(a,b)=E\\{ [Y-(a+bX)]^2 \\}\\) \u4e5f\u53ef\u4ee5\u7528\u6765\u8861\u91cf \\(X,Y\\) \u4e4b\u95f4\u7ebf\u6027\u5173\u7cfb\u7d27\u5bc6\u7a0b\u5ea6\u3002

    \u6ce8\u610f\u533a\u5206\u72ec\u7acb\u6027\u548c\u76f8\u5173\u6027\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u591a\u5143\u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81","title":"\u591a\u5143\u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81","text":"

    \u8bbe \\(n\\) \u5143\u968f\u673a\u53d8\u91cf \\(X=(X_1,X_2,...,X_n)^T\\)\uff0c\u82e5\u6bcf\u4e00\u4e2a\u5206\u91cf\u7684\u6570\u5b66\u671f\u671b\u90fd\u5b58\u5728\uff0c\u5219\u79f0 \\(E(X)=(E(X_1),E(X_2),...,E(X_n))^T\\) \u4e3a \\(n\\) \u5143\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6570\u5b66\u671f\u671b\uff08\u5411\u91cf\uff09\u3002

    \u8bbe \\(n\\) \u7ef4\u968f\u673a\u53d8\u91cf \\(\\vec{X}=(X_1,X_2,...,X_n)^T\\)\uff0c\\(Cov(X_i,X_j)\\;\\;(i,j=1,2,...,n)\\) \u90fd\u5b58\u5728\uff0c\u5219\uff1a

    \\[ \\begin{bmatrix} Var(X_1) & Cov(X_1,X_2) & ... & Cov(X_1,X_n)\\\\ Cov(X_2,X_1) & Var(X_2) & ... & Cov(X_2,X_n)\\\\ ... & ... & ... & ... \\\\ Cov(X_n,X_1) & Cov(X_n,X_2) & ... & Var(X_n) \\end{bmatrix} \\]

    \u79f0\u4e4b\u4e3a \\(\\vec{X}\\) \u7684\u534f\u65b9\u5dee\u77e9\u9635\uff0c\u5b83\u662f\u4e00\u4e2a\u5bf9\u79f0\u7684\u975e\u8d1f\u5b9a\u77e9\u9635\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#n\u7ef4\u6b63\u6001\u53d8\u91cf\u91cd\u8981\u6027\u8d28","title":"n\u2009\u7ef4\u6b63\u6001\u53d8\u91cf\u91cd\u8981\u6027\u8d28","text":"
    1. \\(n\\) \u7ef4\u6b63\u6001\u53d8\u91cf \\((X_1,X_2,...,X_n)^T\\) \u4e2d\u7684\u4efb\u610f\u5b50\u5411\u91cf \\((X_{i_1},X_{i_2},...,X_{i_k})^T\\)\uff0c\\(1\\leq k\\leq n\\) \u4e5f\u670d\u4ece \\(k\\) \u5143\u6b63\u6001\u5206\u5e03\uff1b
      • \u7279\u522b\u5730\uff0c\u6bcf\u4e00\u4e2a\u5206\u91cf \\(X_i,i=1,2,...,n\\) \u90fd\u662f\u6b63\u6001\u53d8\u91cf\uff1b
      • \u53cd\u4e4b\uff0c\u82e5\u6bcf\u4e2a \\(X_i\\) \u90fd\u662f\u6b63\u6001\u53d8\u91cf\uff0c\u4e14\u76f8\u4e92\u72ec\u7acb\uff0c\u5219 \\((X_1,X_2,...,X_n)\\) \u662f \\(n\\) \u7ef4\u6b63\u6001\u53d8\u91cf\uff1b
    2. \\(n\\) \u7ef4\u968f\u673a\u53d8\u91cf \\((X_1,X_2,...,X_n)\\) \u670d\u4ece \\(n\\) \u7ef4\u6b63\u6001\u5206\u5e03\u7684\u5145\u8981\u6761\u4ef6\u662f \\(X_1,X_2,...,X_n\\) \u7684\u4efb\u610f\u7ebf\u6027\u7ec4\u5408 \\(\\sum_{i}^{n} l_iX_i\\) \u670d\u4ece\u4e00\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u5176\u4e2d \\(l_1,l_2,...,l_n\\) \u4e0d\u5168\u4e3a \\(0\\)\uff1b
    3. \u82e5 \\((X_1,X_2,...,X_n)\\) \u670d\u4ece \\(n\\) \u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u8bbe \\(Y_1,Y_2,...,Y_k\\) \u662f \\(X_i\\) \u7684\u7ebf\u578b\u51fd\u6570\uff0c\u5219 \\((Y_1,Y_2,...,Y_k)\\) \u4e5f\u670d\u4ece\u591a\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u8fd9\u4e00\u6027\u8d28\u88ab\u79f0\u4e3a\u6b63\u6001\u53d8\u91cf\u7684\u7ebf\u6027\u53d8\u6362\u4e0d\u53d8\u6027\uff1b
    4. \u82e5 \\((X_1,X_2,...,X_n)\\) \u670d\u4ece \\(n\\)\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u5219 \\(X_1,X_2,...,X_n\\) \u4e92\u76f8\u72ec\u7acb\u7684\u5145\u8981\u6761\u4ef6\u662f \\(X_i\\) \u4e24\u4e24\u4e0d\u76f8\u5173\uff0c\u4e5f\u7b49\u4ef7\u4e8e\u534f\u65b9\u5dee\u77e9\u9635\u4e3a\u5bf9\u89d2\u77e9\u9635\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/","title":"[5.x] \u5927\u6570\u5b9a\u5f8b\u53ca\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","text":"

    \u7ea6 1182 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u5927\u6570\u5b9a\u5f8b","title":"\u5927\u6570\u5b9a\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4f9d\u6982\u7387\u6536\u655b","title":"\u4f9d\u6982\u7387\u6536\u655b","text":"

    \u8bbe \\(\\{Y_n,n\\geq1\\}\\) \u4e3a\u4e00\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u82e5\u5bf9\u4e8e \\(\\forall\\varepsilon>0\\)\uff0c\u5747\u6709 \\(\\lim_{n\\to+\\infty}P\\{|Y_n-Y|\\geq\\varepsilon\\}=0\\)\uff08\u6216\u8005 \\(\\lim_{n\\to+\\infty}P\\{|Y_n-c|<\\varepsilon\\}=1\\)\uff09\uff0c\u5219\u79f0 \\(\\{Y_n,n\\geq1\\}\\) \u4f9d\u6982\u7387\u6536\u655b(Convergence in Probability)\u4e8e \\(Y\\)\uff0c\u8bb0\u505a \\(Y_n\\xrightarrow{P} Y\\;,\\;\\;n\\to+\\infty\\)\u3002

    \u7279\u522b\u5730\uff0c\u5f53 \\(Y=c\\) \u4e3a\u4e00\u5e38\u6570\u65f6\uff0c\u79f0 \\(\\{Y_n,n\\geq1\\}\\) \u4f9d\u6982\u7387\u6536\u655b\u4e8e\u5e38\u6570 \\(c\\)\u3002

    \u4f9d\u6982\u7387\u6536\u655b\u6709\u5982\u4e0b\u91cd\u8981\u6027\u8d28\uff1a

    \u82e5 \\(X_n \\xrightarrow{P} a\\)\uff0c\\(Y_n \\xrightarrow{P} b\\)\uff0c\u5f53 \\(n\\to+\\infty\\) \u65f6\uff0c\u51fd\u6570 \\(g(x,y)\\) \u5728\u70b9 \\((a,b)\\) \u8fde\u7eed\uff0c\u5219\uff1a

    \\[ g(X_n,Y_n) \\xrightarrow{P} g(a,b) \\;,\\;\\; n\\to+\\infty \\]

    \u7279\u522b\u5730\uff0c\u82e5 \\(X_n \\xrightarrow{P} a\\)\uff0c\\(f(x)\\) \u5728\u70b9 \\(a\\) \u8fde\u7eed\uff0c\u5219\uff1a

    \\[ f(X_n) \\xrightarrow{P} f(a) \\;,\\;\\; n\\to+\\infty \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4e24\u4e2a\u91cd\u8981\u4e0d\u7b49\u5f0f","title":"\u4e24\u4e2a\u91cd\u8981\u4e0d\u7b49\u5f0f","text":"

    \u9a6c\u5c14\u53ef\u592b(Markov)\u4e0d\u7b49\u5f0f

    \u82e5\u968f\u673a\u53d8\u91cf \\(Y\\) \u7684 \\(k\\) \u9636\uff08\u539f\u70b9\uff09\u77e9\u5b58\u5728\uff08\\(k\\geq1\\)\uff09\uff0c\u5373 \\(E(Y^k)\\) \u5b58\u5728\uff0c\u5219\u5bf9\u4e8e \\(\\forall \\varepsilon > 0\\)\uff0c\u5747\u6709\uff1a

    \\[ P \\{ |Y| \\geq \\varepsilon \\}\\leq \\frac{E(|Y|^k)}{\\varepsilon^k} \\;\\; \\text{or} \\;\\; P\\{Y\\geq \\varepsilon\\} \\leq \\frac{E(Y^k)}{\\varepsilon^k} \\]

    \u7279\u522b\u5730\uff0c\u5f53 \\(Y\\) \u53d6\u975e\u8d1f\u503c\u7684\u968f\u673a\u53d8\u91cf\u4e14\u5b83\u7684 \\(k\\) \u9636\u77e9\u5b58\u5728\u65f6\uff0c\u6709\uff1a

    \\[ P\\{Y\\geq \\varepsilon\\} \\leq \\frac{E(Y^k)}{\\varepsilon^k} \\]

    \u5207\u6bd4\u96ea\u592b(Chebyshev)\u4e0d\u7b49\u5f0f

    \u82e5\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u6570\u5b66\u671f\u671b \\(E(X)=\\mu\\)\uff0c\u65b9\u5dee \\(Var(X) = \\sigma^2\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall \\varepsilon > 0\\)\uff0c\u5747\u6709\uff1a

    \\[ P\\{ |X-\\mu|\\geq \\varepsilon \\} \\leq \\frac{\\sigma^2}{\\varepsilon^2} \\;\\; \\text{or} \\;\\; P\\{ |X-\\mu|< \\varepsilon \\} \\geq1- \\frac{\\sigma^2}{\\varepsilon^2} \\] "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u5e38\u89c1\u7684\u51e0\u79cd\u5927\u6570\u5b9a\u5f8b","title":"\u5e38\u89c1\u7684\u51e0\u79cd\u5927\u6570\u5b9a\u5f8b","text":"

    \u5927\u6570\u5b9a\u5f8b\uff08\u4e00\u822c\u5f62\u5f0f\uff09

    \u8bbe \\(\\{Y_i,i\\geq1\\}\\) \u4e3a\u4e00\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u82e5\u5b58\u5728\u5e38\u6570\u5e8f\u5217 \\(\\{c_n,n\\geq 1\\}\\)\uff0c\u4f7f\u5f97 \\(\\forall \\varepsilon > 0\\)\uff0c\u5747\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|\\geq \\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|< \\varepsilon\\}=1 \\]

    \u6210\u7acb\uff0c\u5373\u6709 \\((\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n)\\xrightarrow{P}0\\;\\;,\\;\\;n\\to+\\infty\\)\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf\u5e8f\u5217 \\(\\{Y_i,i\\geq1\\}\\) \u670d\u4ece\u5f31\u5927\u6570\u5b9a\u7406(Weak Law of Large Numbers)\uff0c\u7b80\u79f0\u670d\u4ece\u5927\u6570\u5b9a\u5f8b\u3002

    \u7279\u522b\u5730\uff0c\u82e5 \\(c_n\\) \u4e0e \\(n\\) \u65e0\u5173\uff0c\u5219\u53ef\u4ee5\u5199\u4e3a\uff1a

    \\[ \\frac{1}{n}\\sum_{i=1}^{n}Y_i \\xrightarrow{P} c \\;\\;,\\;\\; n\\to+\\infty \\]

    \u5173\u4e8e\u670d\u4ece\u5927\u6570\u5b9a\u5f8b\uff0c\u6a59\u4e66\u7ed9\u51fa\u7684\u5b9a\u4e49\u5f0f\u662f\uff1a

    \\[ \\lim_{n\\to \\infty}P\\big(\\big|\\frac{1}{n}\\sum_{i=1}^{n}X_i-\\frac{1}{n}\\sum_{i=1}^{n}E(X_i) \\big|<\\varepsilon\\big)=1 \\]

    \u63a5\u4e0b\u6765\u7ed9\u51fa\u51e0\u79cd\u5e38\u89c1\u7684\u5927\u6570\u5b9a\u5f8b\uff0c\u5b83\u4eec\u7684\u533a\u522b\u4f53\u73b0\u5728\u6761\u4ef6\u4e0a\uff1a\u6709\u4e9b\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff0c\u6709\u4e9b\u662f\u76f8\u4f9d\u7684\u968f\u673a\u53d8\u91cf\uff1b\u6709\u4e9b\u662f\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\uff0c\u6709\u4e9b\u662f\u4e0d\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u3002

    \u4f2f\u52aa\u5229(Bernoulli)\u5927\u6570\u5b9a\u5f8b

    \u8bbe \\(n_A\\) \u8868\u793a \\(n\\) \u91cd\u4f2f\u52aa\u5229\u8bd5\u9a8c\u4e2d\u4e8b\u4ef6 \\(A\\) \u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0\u4e8b\u4ef6 \\(A\\) \u5728\u6bcf\u6b21\u8bd5\u9a8c\u4e2d\u53d1\u751f\u7684\u6982\u7387\u4e3a \\(p\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{n_A}{n}-p|\\geq \\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\frac{n_A}{n} \\xrightarrow{P} p \\;\\;,\\;\\; n\\to+\\infty \\]

    \u8f9b\u94a6(Khinchin)\u5927\u6570\u5b9a\u5f8b

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14\u6570\u5b66\u671f\u671b\u4e3a \\(\\mu\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall\\varepsilon>0\\)\uff0c\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}X_i-\\mu|\\geq \\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\frac{1}{n}\\sum_{i=1}^{n}X_i\\xrightarrow{P}\\mu\\;\\;,\\;\\;n\\to+\\infty \\]

    \u6ce8\u610f\uff0c\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u7684\u6761\u4ef6\u4e2d\uff0c\u53ea\u8981\u6c42\u671f\u671b\u5b58\u5728\uff0c\u4e0d\u8981\u6c42\u65b9\u5dee\u5b58\u5728\u3002 \u6b64\u5916\uff0c\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u6709\u5982\u4e0b\u63a8\u8bba\uff1a

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u82e5 \\(h(x)\\) \u4e3a\u8fde\u7eed\u51fd\u6570\uff0c\u4e14 \\(E(|h(X_1)|)<+\\infty\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall\\varepsilon>0\\)\uff0c\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum^{n}_{i=1}h(X_i)-a|\\geq\\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\frac{1}{n}\\sum_{i=1}^{n}h(X_i)\\xrightarrow{P}a\\;\\;,\\;\\;n\\to+\\infty \\]

    \u5176\u4e2d \\(a=E(|h(X_1)|)\\)\uff0c\u5373\u968f\u673a\u53d8\u91cf \\(\\{ h(X_i) , i \\geq 1 \\}\\) \u4e5f\u670d\u4ece\u5927\u6570\u5b9a\u5f8b\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","title":"\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u72ec\u7acb\u540c\u5206\u5e03\u65f6","title":"\u72ec\u7acb\u540c\u5206\u5e03\u65f6","text":"

    \u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14 \\(E(X_i)=\\mu\\;\\;,\\;\\;Var(X_i)=\\sigma^2\\;\\;(\\sigma>0)\\)\uff0c\u5219 \\(\\forall x\\in \\mathbf{R}\\)\uff0c\u6709\uff1a

    \\[ \\begin{aligned} \\lim_{n\\to+\\infty}P\\left\\{ \\frac{ \\begin{aligned} \\sum_{i=1}^{n}X_i-E(\\sum_{i=1}^{n}X_i) \\end{aligned} }{\\begin{aligned} \\sqrt{\\mathrm{Var}(\\sum_{i=1}^{n}X_i)} \\end{aligned}}\\leq x\\right\\}&= \\lim_{n\\to+\\infty}P\\left\\{ \\frac{ \\begin{aligned} \\sum_{i=1}^{n}X_i-n\\mu \\end{aligned} }{\\begin{aligned} \\sigma\\sqrt{n} \\end{aligned}}\\leq x\\right\\} \\\\ &=\\frac{1}{\\sqrt{2\\pi}}\\int_{-\\infty}^{x}e^{-\\frac{t^2}{2}}\\mathrm{d}t \\\\ &=\\Phi(x) \\end{aligned} \\]

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\\(E(X_i)=\\mu\\;\\;,\\;\\;Var(X_i)=\\sigma^2\\;\\;(\\sigma>0)\\) \u7684\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\u7684\u90e8\u5206\u548c \\(\\sum_{i=1}^{n}X_i\\) \u7684\u6807\u51c6\u5316\u91cf\u8fd1\u4f3c\u4e8e\u4e00\u4e2a\u6b63\u6001\u53d8\u91cf\uff1a

    \\[ \\frac{ \\begin{aligned} \\sum_{i=1}^{n}X_i-n\\mu \\end{aligned} }{\\begin{aligned} \\sigma\\sqrt{n} \\end{aligned}} \\overset{\\text{approximately}}{\\sim} N(0,1)\\;\\;,\\;\\;\\text{where }n\\text{ is big enough} \\]

    \u7b49\u4ef7\u5730\uff0c\u4e5f\u53ef\u4ee5\u5199\u6210\u5982\u4e0b\u5f62\u5f0f\uff1a

    \\[ \\frac{ \\begin{aligned} \\frac{1}{n}\\sum_{i=1}^{n}X_i-\\mu \\end{aligned} }{\\begin{aligned} \\frac{\\sigma}{\\sqrt{n}} \\end{aligned}} \\overset{\\text{approximately}}{\\sim} N(0,1)\\;\\;,\\;\\;\\text{where }n\\text{ is big enough} \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4e8c\u9879\u5206\u5e03\u7684\u6b63\u6001\u8fd1\u4f3c","title":"\u4e8c\u9879\u5206\u5e03\u7684\u6b63\u6001\u8fd1\u4f3c","text":"

    \u68e3\u83ab\u5f17-\u62c9\u666e\u62c9\u65af\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u662f\u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u7684\u63a8\u8bba\uff1a

    \u8bbe \\(n_A\\) \u8868\u793a \\(n\\) \u91cd\u4f2f\u52aa\u5229\u8bd5\u9a8c\u4e2d\u4e8b\u4ef6 \\(A\\) \u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0 \\(P(A)=p\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall x\\in\\mathbf{R}\\)\uff0c\u5747\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{\\frac{n_A-np}{\\sqrt{np(1-p)}}\\leq x\\}=\\frac{1}{\\sqrt{2\\pi}}\\int_{-\\infty}^{x}e^{-\\frac{t^2}{2}}\\mathrm{d}t=\\Phi(x) \\]

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u5f53 \\(n\\) \u5f88\u5927\u65f6\uff0c\u4e8c\u9879\u5206\u5e03\u53ef\u4ee5\u7528\u6b63\u6001\u5206\u5e03\u53bb\u8fd1\u4f3c\uff08\u671f\u671b\u4e0e\u65b9\u5dee\u4e0d\u53d8\uff09\uff1a

    \\[ n_A \\overset{\\text{approximately}}{\\sim} N(np,np(1-p)) \\;\\;,\\;\\;\\text{where }n\\text{ is big enough} \\]

    \u5176\u4e2d \\(n_A = \\sum_{i=1}^{n} X_i\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u72ec\u7acb\u4e0d\u540c\u5206\u5e03\u65f6\u4e0d\u8981\u6c42","title":"\u72ec\u7acb\u4e0d\u540c\u5206\u5e03\u65f6(\u4e0d\u8981\u6c42)","text":"

    \u674e\u96c5\u666e\u8bfa\u592b\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14 \\(E(X_i)=\\mu_i\\;\\;,\\;\\;Var(X_i)=\\sigma_i^2\\;\\;(\\sigma>0)\\)\uff0c\u82e5 \\(\\exists\\varepsilon>0\\) \u4f7f\u5f97\uff1a

    \\[ \\lim_{n\\to+\\infty}\\frac{1}{B_n^{2+\\varepsilon}}\\sum_{i=1}^{n}E|X_i-\\mu_i|^{2+\\varepsilon}=0\\;\\;\\;\\text{where}\\;\\;\\;B_n^{2}=\\sum_{i=1}^{n}\\sigma_i^2 \\]

    \u5219\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{ \\frac{1}{B_n} \\sum_{i=1}^n(X_i-\\mu_i)\\leq x \\} = \\frac{1}{\\sqrt{2\\pi}}\\int_{-\\infty}^{x}e^{-\\frac{t^2}{2}}\\mathrm{d}t=\\Phi(x) \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/","title":"[6.x] \u7edf\u8ba1\u91cf\u4e0e\u62bd\u6837\u5206\u5e03","text":"

    \u7ea6 1730 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u57fa\u672c\u6982\u5ff5","title":"\u57fa\u672c\u6982\u5ff5","text":"

    \u540e\u9762\u63d0\u5230\u7684\u6240\u6709\u6837\u672c\uff0c\u6307\u7684\u90fd\u662f\u7b80\u5355\u968f\u673a\u6837\u672c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u7edf\u8ba1\u91cf","title":"\u7edf\u8ba1\u91cf","text":"

    \u8bbe \\((X_1,X_2,...,X_n)\\) \u662f\u6765\u81ea\u603b\u4f53 \\(X\\) \u7684\u4e00\u4e2a\u6837\u672c\uff0c\\(g(X_1,X_2,...,X_n)\\) \u662f \\(X_1,X_2,...,X_n\\) \u7684\u51fd\u6570\uff0c\u82e5 \\(g\\) \u4e2d\u4e0d\u542b\u4efb\u4f55\u672a\u77e5\u53c2\u6570\uff0c\u5219\u79f0 \\(g(X_1,X_2,...,X_n)\\) \u4e3a\u4e00\u7edf\u8ba1\u91cf\u3002\u6362\u8a00\u4e4b\uff0c\u7edf\u8ba1\u91cf\u662f\u6837\u672c\u7684\u4e0d\u542b\u4efb\u4f55\u672a\u77e5\u53c2\u6570\u7684\u51fd\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6837\u672c\u5747\u503c","title":"\u6837\u672c\u5747\u503c","text":"\\[ \\overline{X}=\\frac{1}{n}\\sum_{i=1}^{n}X_i \\]

    \u6837\u672c\u5747\u503c\u53cd\u6620\u4e86\u603b\u4f53\u7684\u671f\u671b\uff08\u5747\u503c\uff09\u3002

    \u6837\u672c\u5747\u503c\u7684\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6837\u672c\u65b9\u5dee","title":"\u6837\u672c\u65b9\u5dee","text":"\\[ S^2=\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2 \\]

    \u6837\u672c\u65b9\u5dee\u53cd\u6620\u4e86\u603b\u4f53\u7684\u65b9\u5dee\uff0c\u5e38\u4f5c\u4e3a\u603b\u4f53\u65b9\u5dee \\(\\sigma^2\\) \u7684\u65e0\u504f\u4f30\u8ba1\u3002

    \u6837\u672c\u65b9\u5dee\u7684\u6027\u8d28\uff1a

    \u6b64\u5916\uff0c\\(S=\\sqrt{S^2}=\\sqrt{\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2}\\) \u79f0\u4e3a\u6837\u672c\u6807\u51c6\u5dee\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6837\u672c-k-\u9636\u77e9","title":"\u6837\u672c k \u9636\u77e9","text":"

    \u6837\u672c \\(k\\) \u9636\uff08\u539f\u70b9\uff09\u77e9\uff0c\u5e38\u4f5c\u4e3a\u603b\u4f53 \\(j=k\\) \u9636\u539f\u70b9\u77e9 \\(\\mu_k\\) \u7684\u4f30\u8ba1\uff1a

    \\[ A_k=\\frac{1}{n}\\sum_{i=1}^{n}X_i^k,\\;\\;k=1,2,... \\]

    \u6837\u672c \\(k\\) \u9636\u4e2d\u5fc3\u8ddd\uff0c\u5e38\u4f5c\u4e3a\u603b\u4f53 \\(j=k\\) \u9636\u4e2d\u5fc3\u77e9 \\(\\nu_k\\) \u7684\u4f30\u8ba1\uff0c\\(B_2\\) \u53ef\u4f5c\u4e3a\u603b\u4f53\u65b9\u5dee \\(\\sigma^2\\) \u7684\u6709\u504f\u4f30\u8ba1\uff1a

    \\[ B_k=\\frac{1}{n}\\sum_{i=1}^{n}(X_i-\\overline{X})^k,\\;\\;k=2,3,... \\]

    \u6837\u672c \\(k\\) \u9636\u77e9\u7684\u6027\u8d28\uff1a

    \u6837\u672c\u4e0e\u603b\u4f53\u7684\u5404\u9636\u77e9\u5bf9\u6bd4\u8868\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u4e09\u5927\u62bd\u6837\u5206\u5e03","title":"\u4e09\u5927\u62bd\u6837\u5206\u5e03","text":"

    \u7edf\u8ba1\u91cf\u7684\u5206\u5e03\u79f0\u4e3a\u62bd\u6837\u5206\u5e03(Sampling Distribution)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u00b2-\u5206\u5e03--\u5361\u65b9\u5206\u5e03","title":"\u03c7\u00b2 \u5206\u5e03 / \u5361\u65b9\u5206\u5e03","text":"

    \u8bbe \\(X_1,X_2,...,X_n\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\uff0c\u670d\u4ece \\(N(0,1)\\)\u3002\u5219\u79f0 \\(\\chi_{n}^{2}=\\sum_{i=1}^{n}X_i^2\\) \u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\(n\\) \u7684 \\(\\chi^2\\) \u5206\u5e03\uff0c\u8bb0 \\(\\chi_{n}^{2}\\sim \\chi^2(n)\\)\u3002

    \\(\\chi^2\\) \u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\uff08\u4e0d\u8981\u6c42\uff09\uff1a

    \\[ f_{\\chi^2}(x)= \\left\\{ \\begin{aligned} &\\frac{1}{2^\\frac{n}{2}\\Gamma(\\frac{n}{2})}x^{\\frac{n}{2}-1}e^{-\\frac{x}{2}},&x>0, \\\\ &0,&\\text{else}, \\end{aligned} \\right. \\]

    \\(\\chi^2\\) \u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#t-\u5206\u5e03--\u5b66\u751f\u6c0f\u5206\u5e03","title":"t \u5206\u5e03 / \u5b66\u751f\u6c0f\u5206\u5e03","text":"

    \u8bbe \\(X\\sim N(0,1)\\)\uff0c\\(Y\\sim \\chi^2(n)\\)\uff0c\u4e14 \\(X,Y\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf \\(T=\\frac{X}{\\sqrt{Y/n}}\\) \u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\(n\\) \u7684 \\(t\\) \u5206\u5e03\uff0c\u8bb0\u505a \\(T\\sim t(n)\\)\u3002

    \\(t\\) \u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\uff08\u4e0d\u8981\u6c42\uff09\uff1a

    \\[ f_t(x)=\\frac{\\Gamma[(n+1)/2]}{\\sqrt{\\pi n}\\Gamma(\\frac{n}{2})}(1+\\frac{x^2}{n})^{-\\frac{n+1}{2}},\\;\\;-\\infty<x<+\\infty \\]

    \u5176\u4e2d \\(\\Gamma(\\alpha)=\\int_0^{+\\infty}t^{\\alpha-1}e^{-t}\\mathrm{d}t\\)\uff0c\\(\\Gamma(\\alpha+1)=\\alpha\\Gamma(\\alpha)=\\alpha!(if\\;\\alpha\\in\\Z)\\)\uff0c\\(\\Gamma(0.5)=\\sqrt{\\pi}\\)\u3002

    \\(t\\) \u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#f-\u5206\u5e03","title":"F \u5206\u5e03","text":"

    \u8bbe \\(U\\sim\\chi^2(n_1)\\)\uff0c\\(V\\sim \\chi^2(n_2)\\)\uff0c\u4e14 \\(U,V\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf \\(F=\\frac{U/n_1}{V/n_2}\\) \u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\((n_1,n_2)\\) \u7684 \\(F\\) \u5206\u5e03\uff0c\u8bb0 \\(F\\sim F(n_1,n_2)\\)\u3002

    \\(F\\) \u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\uff08\u4e0d\u8981\u6c42\uff09\uff1a

    \\[ f_F(x)=\\frac{ \\Gamma(\\frac{n_1+n_2}{2})(\\frac{n_1}{n_2})^{n_1/2}x^{(n_1/2)-1} }{ \\Gamma(\\frac{n_1}{2})\\Gamma(\\frac{n_2}{2})[1+(n_1x/2)]^{(n_1+n_2)/2} },\\;\\;x>0 \\]

    \\(F\\) \u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u62bd\u6837\u5206\u5e03","title":"\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u62bd\u6837\u5206\u5e03","text":"

    \u8bbe \\(X_1,X_2,...,X_n\\) \u662f\u6765\u81ea\u6b63\u6001\u603b\u4f53 \\(N(\\mu,\\sigma^2)\\) \u7684\u6837\u672c\uff0c\\(\\overline{X}\\) \u662f\u6837\u672c\u5747\u503c\uff0c\\(S^2\\) \u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a

    1. \\(\\overline{X}\\sim N(\\mu,\\frac{\\sigma^2}{n})\\)\uff1b
    2. \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff1b
    3. \\(\\overline{X}\\) \u4e0e \\(S^2\\) \u76f8\u4e92\u72ec\u7acb\uff1b
    4. \\(\\frac{\\overline{X} - \\mu}{S/\\sqrt{n}}\\sim t(n-1)\\)\uff1b
    5. \u8fd9\u91cc\u6ce8\u610f\u533a\u522b\u4e00\u4e0b\uff1a\\(\\frac{\\overline{X} - \\mu}{\\sigma/\\sqrt{n}}\\sim N(0,1)\\)\uff1b

    \u8bbe \\(X_1,X_2,...,X_n\\) \u548c \\(Y_1,Y_2,...,Y_n\\) \u662f\u5206\u522b\u6765\u81ea\u6b63\u6001\u603b\u4f53 \\(N(\\mu_1,\\sigma_1^2)\\) \u548c \\(N(\\mu_2,\\sigma_2^2)\\)\uff0c\u5e76\u4e14\u5b83\u4eec\u76f8\u4e92\u72ec\u7acb\uff0c\\(\\overline{X},\\overline{Y}\\) \u662f\u6837\u672c\u5747\u503c\uff0c\\(S_1^2,S_2^2\\) \u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a

    1. \\(\\frac{S_1^2/\\sigma_1^2}{S_2^2/\\sigma^2_2}\\sim F(n_1-1,n_2-1)\\)\uff1b
    2. \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{\\sigma_{1}^{2}}{n_1}+\\frac{\\sigma_{2}^{2}}{n_2}}} \\sim N(0,1)\\)\uff1b
    3. \u5f53 \\(\\sigma_1^2=\\sigma_2^2=\\sigma^2\\) \u65f6\uff1a \\(\\frac{(\\overline X - \\overline Y) - (\\mu_1-\\mu_2)}{S_\\omega\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}}\\sim t(n_1+n_2-2)\\)\uff0c\u5176\u4e2d \\(S^2_\\omega=\\frac{(n_1-1)S_1^2+(n_2-1)S^2_2}{n_1+n_2-2}\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/","title":"[7.x] \u53c2\u6570\u4f30\u8ba1","text":"

    \u7ea6 2182 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 11 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u70b9\u4f30\u8ba1","title":"\u70b9\u4f30\u8ba1","text":"

    \u8bbe\u603b\u4f53 \\(X\\) \u7684\u5206\u5e03\u51fd\u6570\u4e3a \\(F(x;\\theta)\\)\uff0c\\(\\theta=(\\theta_{1},\\theta_{2},...,\\theta_{k})\\) \u662f\u672a\u77e5\u7684\u5f85\u4f30\u53c2\u6570\uff0c\\(X_1,X_2,...,X_n\\) \u662f \\(X\\) \u7684\u4e00\u4e2a\u6837\u672c\u3002\u70b9\u4f30\u8ba1\u5c31\u662f\u8981\u5bf9\u6bcf\u4e00\u4e2a\u672a\u77e5\u53c2\u6570 \\(\\theta_{i}\\) \u6784\u9020\u4e00\u4e2a\u9002\u5f53\u7684\u7edf\u8ba1\u91cf \\(\\hat{\\theta_{i}}=\\theta_{i}(X_1,X_2,...,X_n)\\)\uff0c\u7528\u4f5c\u5bf9\u672a\u77e5\u53c2\u6570 \\(\\theta_{i}\\) \u7684\u4f30\u8ba1\uff0c\u79f0\u4e3a \\(\\theta_{i}\\) \u7684\u4f30\u8ba1\u91cf\u3002

    \u82e5\u5df2\u77e5\u6837\u672c\u7684\u89c2\u5bdf\u503c\u4e3a \\(x_1,x_2,...,x_n\\)\uff0c\u5219\u79f0 \\(\\hat{\\theta_{i}}=\\theta_{i}(X_1,X_2,...,X_n)\\) \u4e3a \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u503c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u77e9\u6cd5","title":"\u77e9\u6cd5","text":"

    \u601d\u60f3\uff1a\u7528\u6837\u672c\u77e9\u53bb\u4f30\u8ba1\u76f8\u5e94\u7684\u603b\u4f53\u77e9\uff0c\u6362\u8a00\u4e4b\uff0c\u7528\u539f\u70b9\u77e9 \\(A_k\\) \u53bb\u4f30\u8ba1 \\(\\mu_{k}\\)\uff0c\u7528\u4e2d\u5fc3\u8ddd \\(B_k\\) \u53bb\u4f30\u8ba1 \\(\\nu_{k}\\)\u3002

    \u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff08\u5047\u8bbe\u6709 \\(k\\) \u4e2a\u5f85\u6c42\u672a\u77e5\u53c2\u6570\uff09\uff1a

    1. \u5217\u51fa\u603b\u4f53\u7684\u524d \\(k\\) \u9636\u77e9 \\(\\mu_{i}=E(X^i)=h_i(\\theta_{1},\\theta_{2},...,\\theta_{k})\\;\\;,\\;\\;i=1,2,...,k\\)\uff1b
    2. \u4ece\u65b9\u7a0b\u7ec4\u4e2d\u89e3\u51fa\u8fd9 \\(k\\) \u4e2a\u53c2\u6570 \\(\\theta_{i}=g_i(\\mu_{1},\\mu_{2},...,\\mu_{k})\\;\\;,\\;\\;i=1,2,...,k\\)\uff1b
    3. \u5c06\u4e0a\u4e00\u6b65\u89e3\u51fa\u7684\u53c2\u6570\u7684\u8868\u8fbe\u5f0f\u4e2d\u51fa\u73b0\u7684\u603b\u4f53\u77e9\u7528\u76f8\u5e94\u7684\u6837\u672c\u77e9\u66ff\u6362 \\(\\hat{\\theta_{i}}=g_i(A_{1},A_{2},...,A_{k})\\;\\;,\\;\\;i=1,2,...,k\\)\uff1b

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u6781\u5927\u4f3c\u7136\u6cd5","title":"\u6781\u5927\u4f3c\u7136\u6cd5","text":"

    \u601d\u60f3\uff1a\u7528\u201c\u6700\u50cf\u201d \\(\\theta\\) \u771f\u503c\u7684\u503c\u53bb\u4f30\u8ba1 \\(\\theta\\)\uff0c\u6362\u8a00\u4e4b\uff0c\u5728\u53c2\u6570\u7a7a\u95f4\u4e2d\u627e\u4e00\u4e2a \\(\\theta\\)\uff0c\u4f7f\u5f97 \\(L(\\theta)\\) \u8fbe\u5230\u6700\u5927\u3002

    \u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff08\u82e5\u5f85\u4f30\u53c2\u6570\u4e0d\u6b62\u4e00\u4e2a\uff0c\u5219\u5bf9\u6bcf\u4e2a\u5f85\u4f30\u53c2\u6570 \\(\\theta_{i}\\) \u5747\u6267\u884c\u5982\u4e0b\u64cd\u4f5c\uff09\uff1a

    1. \u6784\u9020\u4f3c\u7136\u51fd\u6570 \\(L(\\theta)=L(\\theta;x_1,x_2,...,x_n)=\\prod_{i=1}^{n}f(x_i;\\theta)\\)\uff1b
    2. \u6c42\u89e3 \\(\\theta\\)\uff0c\u4f7f\u5f97 \\(L(\\theta)\\) \u8fbe\u5230\u6700\u5927\u503c\uff0c\u79f0\u8fd9\u4e2a \\(\\theta\\) \u4e3a\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u91cf\uff0c\u8bb0\u4f5c \\(\\hat{\\theta}\\)\uff1b

    \u6c42\u89e3\u4f3c\u7136\u51fd\u6570\u6700\u5927\u503c\u70b9\u7684\u5e38\u7528\u65b9\u6cd5\uff1a

    \u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u6cd5\u7684\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u4f30\u8ba1\u91cf\u7684\u8bc4\u4ef7\u51c6\u5219","title":"\u4f30\u8ba1\u91cf\u7684\u8bc4\u4ef7\u51c6\u5219","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u65e0\u504f\u6027\u51c6\u5219","title":"\u65e0\u504f\u6027\u51c6\u5219","text":"

    \u82e5\u53c2\u6570 \\(\\theta\\) \u4f30\u8ba1\u91cf \\(\\hat{\\theta}=\\theta(X_1,X_2,...,X_n)\\) \u7684\u6570\u5b66\u671f\u671b\u5b58\u5728\uff0c\u4e14\u6ee1\u8db3 \\(E(\\hat{\\theta})=\\theta\\)\uff0c\u5219\u79f0 \\(\\hat{\\theta}\\) \u662f \\(\\theta\\) \u7684\u4e00\u4e2a\u65e0\u504f\u4f30\u8ba1\u91cf\u6216\u65e0\u504f\u4f30\u8ba1(Unbiased Estimation)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u6709\u6548\u6027\u51c6\u5219","title":"\u6709\u6548\u6027\u51c6\u5219","text":"

    \u8bbe \\(\\theta_1\\) \u548c \\(\\theta_2\\) \u662f\u53c2\u6570 \\(\\theta\\) \u7684\u4e24\u4e2a\u65e0\u504f\u4f30\u8ba1\uff0c\u5982\u679c\u5bf9\u4e8e \\(\\forall \\theta\\in\\Theta\\)\uff0c\\(Var(\\theta_1)\\leq Var(\\theta_2)\\)\uff0c\u4e14\u4e0d\u6052\u53d6\u7b49\uff0c\u5219\u79f0 \\(\\theta_1\\) \u6bd4 \\(\\theta_2\\) \u6709\u6548\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u5747\u65b9\u8bef\u5dee\u51c6\u5219","title":"\u5747\u65b9\u8bef\u5dee\u51c6\u5219","text":"

    \\(E[(\\hat\\theta-\\theta)^2]\\) \u662f\u4f30\u8ba1\u91cf \\(\\hat\\theta\\) \u7684\u5747\u65b9\u8bef\u5dee(Mean Square Error)\uff0c\u8bb0\u4e3a \\(Mse(\\hat\\theta)\\)\u3002

    \u5728\u5747\u65b9\u8bef\u5dee\u51c6\u5219\u4e0b\uff0c\u4f30\u8ba1\u91cf\u7684\u5747\u65b9\u8bef\u5dee\u8d8a\u5c0f\u8d8a\u597d\u3002\u82e5 \\(Mse(\\hat\\theta_1)\\leq Mse(\\hat\\theta_2)\\) \u4e14\u4e0d\u6052\u53d6\u7b49\uff0c\u5219\u79f0 \\(\\hat\\theta_1\\) \u4f18\u4e8e \\(\\hat\\theta_2\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u76f8\u5408\u6027\u51c6\u5219","title":"\u76f8\u5408\u6027\u51c6\u5219","text":"

    \u82e5\u5bf9\u4e8e \\(\\forall \\varepsilon >0\\)\uff0c\u6709 \\(\\lim_{n\\to+\\infty}P\\{|\\hat\\theta_n-\\theta|<\\varepsilon\\}=1\\)\uff0c\u5373 \\(\\hat\\theta _n \\xrightarrow{P}\\theta\\)\uff0c\u5219\u79f0 \\(\\hat\\theta_n\\) \u662f \\(\\theta\\) \u7684\u76f8\u5408\u4f30\u8ba1\u91cf(Consistent Estimation)\u6216\u4e00\u81f4\u4f30\u8ba1\u91cf\u3002

    \u6709\u5982\u4e0b\u5b9a\u7406\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u533a\u95f4\u4f30\u8ba1","title":"\u533a\u95f4\u4f30\u8ba1","text":"

    \u70b9\u4f30\u8ba1\u662f\u7531\u6837\u672c\u6c42\u51fa\u672a\u77e5\u53c2\u6570 \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u503c \\(\\hat{\\theta}\\)\uff0c\u800c\u533a\u95f4\u4f30\u8ba1\u5219\u8981\u7531\u6837\u672c\u7ed9\u51fa\u53c2\u6570 \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u8303\u56f4\uff0c\u5e76\u6307\u51fa\u8be5\u533a\u95f4\u5305\u542b \\(\\theta\\) \u7684\u53ef\u9760\u7a0b\u5ea6\u3002

    \u4e0b\u9762\u7ed9\u51fa\u533a\u95f4\u4f30\u8ba1\u7684\u4e00\u4e9b\u57fa\u672c\u6982\u5ff5\uff1a

    \u53cc\u4fa7\u7f6e\u4fe1\u533a\u95f4\u548c\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\u7684\u5173\u7cfb\uff1a

    \u8bbe \\(\\theta_{L}=\\theta_{L}(X_1,X_2,...,X_n)\\)\uff0c\\(\\theta_{U}=\\theta_{U}(X_1,X_2,...,X_n)\\) \u5206\u522b\u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha_{1}\\) \u548c \\(1-\\alpha_{2}\\) \u7684\u5355\u4fa7\u7f6e\u4fe1\u4e0b\u9650\u53ca\u4e0a\u9650\uff0c\u4e14\u5bf9\u4e8e\u4efb\u4f55\u6837\u672c\u90fd\u6ee1\u8db3 \\(\\theta_{L}<\\theta_{U}\\)\uff0c\u5219 \\((\\theta_{L},\\theta_{U})\\) \u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha_{1}-\\alpha_{2}\\) \u7684\u53cc\u4fa7\u7f6e\u4fe1\u533a\u95f4\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u8bc4\u4ef7\u533a\u95f4\u4f30\u8ba1\u7684\u539f\u5219","title":"\u8bc4\u4ef7\u533a\u95f4\u4f30\u8ba1\u7684\u539f\u5219","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u67a2\u8f74\u91cf\u6cd5","title":"\u67a2\u8f74\u91cf\u6cd5","text":"

    \u67a2\u8f74\u91cf\u6cd5\u662f\u5bfb\u6c42\u533a\u95f4\u4f30\u8ba1\u7684\u5e38\u7528\u65b9\u6cd5\u3002

    \u67a2\u8f74\u91cf\u662f\u6837\u672c \\(X=(X_1,X_2,...,X_n)\\) \u548c\u5f85\u4f30\u53c2\u6570 \\(\\theta\\) \u7684\u51fd\u6570\uff0c\u5373 \\(G=G(X_1,X_2,...,X_n;\\theta)\\)\uff0c\u5e76\u4e14\u8981\u6c42 \\(G\\) \u7684\u5206\u5e03\u5df2\u77e5\u4e14\u4e0d\u4f9d\u8d56\u4e8e\u4efb\u4f55\u672a\u77e5\u53c2\u6570\u3002

    \u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff1a

    1. \u6784\u9020\u67a2\u8f74\u91cf \\(G(X;\\theta)\\)\uff1b
    2. \u5bf9\u4e8e\u7ed9\u5b9a\u7684\u7f6e\u4fe1\u5ea6 \\(1-\\alpha\\)\uff0c\u786e\u5b9a\u4e24\u4e2a\u5e38\u6570 \\(a,b\\)\uff0c\u4f7f\u5f97\uff1a \\(P\\{ a<G(X;\\theta)<b \\}\\geq 1-\\alpha\\)\uff1b
    3. \u82e5\u80fd\u4ece \\(a<G(X;\\theta)<b\\) \u53cd\u89e3\u51fa\u4e0d\u7b49\u5f0f\uff1a \\(\\theta_{L}(X)<\\theta<\\theta_{U}(X)\\)\uff0c \u90a3\u4e48 \\([\\theta_{L},\\theta_{U}]\\) \u5c31\u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff0c\u4e5f\u79f0\u540c\u7b49\u7f6e\u4fe1\u533a\u95f4\uff1b

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","title":"\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u5355\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","title":"\u5355\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","text":"

    \u8bbe \\(X_1,X_2,...,X_n\\) \u6765\u81ea\u603b\u4f53 \\(N(\\mu,\\sigma_{2})\\)\uff0c\\(\\overline{X}\\) \u548c \\(S^2\\) \u5206\u522b\u4e3a\u6837\u672c\u5747\u503c\u548c\u6837\u672c\u65b9\u5dee\uff0c\u7f6e\u4fe1\u5ea6\u4e3a \\(1-\\alpha\\)\uff1a

    1.\u00a0\\(\\sigma^2\\) \u5df2\u77e5\u65f6 \\(\\mu\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{\\overline X-\\mu}{\\sigma/\\sqrt{n}}\\sim N(0,1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X-\\frac{\\sigma}{\\sqrt{n}}z_{\\alpha/2},\\overline X + \\frac{\\sigma}{\\sqrt{n}}z_{\\alpha/2}\\right)\\)\u3002

    \u82e5\u53ea\u8003\u8651\u5355\u4fa7\u7f6e\u4fe1\u9650\uff0c\u4ee5\u5355\u4fa7\u7f6e\u4fe1\u4e0b\u9650\u4e3a\u4f8b\uff0c\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X-\\frac{\\sigma}{\\sqrt{n}}z_{\\alpha},+\\infty\\right)\\)\u3002

    2.\u00a0\\(\\sigma^2\\) \u672a\u77e5\u65f6 \\(\\mu\\) \u7684\u7f6e\u4fe1\u533a\u95f4:

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{\\overline X-\\mu}{S/\\sqrt{n}}\\sim t(n-1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\frac{S}{\\sqrt{n}}t_{\\alpha/2}(n-1),\\overline X + \\frac{S}{\\sqrt{n}}t_{\\alpha/2}(n-1)\\right)\\)\u3002

    3.\u00a0\\(\\sigma^2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff08\u5f53\u4f5c \\(\\mu\\) \u672a\u77e5\uff09\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\frac{(n-1)S^2}{\\chi^2_{\\alpha/2}(n-1)},\\frac{(n-1)S^2}{\\chi^2_{1-\\alpha/2}(n-1)}\\right)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","title":"\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","text":"

    \u8bbe \\(X_1,X_2,...,X_{n_1}\\) \u6765\u81ea \\(N(\\mu_{1},\\sigma_{1}^{2})\\)\uff0c\\(Y_1,Y_2,...,Y_{n_2}\\) \u6765\u81ea \\(N(\\mu_{2},\\sigma_{2}^{2})\\)\uff0c\u8fd9\u4e24\u4e2a\u6837\u672c\u76f8\u4e92\u72ec\u7acb\uff0c\\(\\overline{X}=\\frac{1}{n_1}\\sum_{i=1}^{n_1}X_i\\)\uff0c\\(\\overline{Y}=\\frac{1}{n_2}\\sum_{i=1}^{n_2}Y_i\\)\uff0c\\(S_1^2\\) \u548c \\(S_2^2\\) \u5206\u522b\u4e3a\u5b83\u4eec\u7684\u6837\u672c\u5747\u503c\u548c\u6837\u672c\u65b9\u5dee\uff0c\u7f6e\u4fe1\u5ea6\u4e3a \\(1-\\alpha\\)\uff1a

    1.\u00a0\\(\\sigma_1^2,\\sigma_2^2\\) \u5df2\u77e5\u65f6 \\(\\mu_1-\\mu_2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{\\sigma_{1}^{2}}{n_1}+\\frac{\\sigma_{2}^{2}}{n_2}}} \\sim N(0,1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm z_{\\alpha/2}\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2}}\\right)\\)\u3002

    2.\u00a0\\(\\sigma_1^2=\\sigma_2^2=\\sigma^2\\) \u672a\u77e5\u65f6 \\(\\mu_1-\\mu_2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline X - \\overline Y) - (\\mu_1-\\mu_2)}{S_\\omega\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}}\\sim t(n_1+n_2-2)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm t_{\\alpha/2}(n_1+n_2-2)S_w\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}\\right)\\)\u3002

    3.\u00a0\\(\\sigma_1^2\\not =\\sigma_2^2\\) \u4e14\u672a\u77e5\u65f6 \\(\\mu_1-\\mu_2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u5f53\u6837\u672c\u5bb9\u91cf \\(n_1\\) \u548c \\(n_2\\) \u90fd\u5145\u5206\u5927\u65f6\uff08\u4e00\u822c\u8981\u5927\u4e8e \\(50\\)\uff09\uff0c\u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{S_{1}^{2}}{n_1}+\\frac{S_{2}^{2}}{n_2}}} \\sim N(0,1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm z_{\\alpha/2}\\sqrt{\\frac{S_1^2}{n_1}+\\frac{S_2^2}{n_2}}\\right)\\)\u3002

    \u5bf9\u4e8e\u6709\u9650\u5c0f\u6837\u672c\uff0c\u4ecd\u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{S_{1}^{2}}{n_1}+\\frac{S_{2}^{2}}{n_2}}}\\)\uff0c\u53ef\u4ee5\u8bc1\u660e\u5176\u8fd1\u4f3c\u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\(k\\) \u7684 \\(t\\) \u5206\u5e03\uff0c\u5176\u4e2d \\(k=\\frac{(\\frac{S_1^2}{n_1}+\\frac{S_2^2}{n_2})^2}{\\frac{(S_1^2)^2}{n_1^2(n_1-1)}+\\frac{(S_2^2)^2}{n_2^2(n_2-1)}}\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm t_{\\alpha/2}(k)\\sqrt{\\frac{S_1^2}{n_1}+\\frac{S_2^2}{n_2}}\\right)\\)\u3002

    \u5b9e\u9645\u4f7f\u7528\u4e2d\uff0c\u4e5f\u5e38\u7528 \\(min(n_1-1,n_2-1)\\) \u8fd1\u4f3c\u4ee3\u66ff\u4e0a\u8ff0\u81ea\u7531\u5ea6 \\(k\\)\u3002

    4.\u00a0\\(\\frac{\\sigma_1^2}{\\sigma_2^2}\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff08\u5f53\u4f5c \\(\\mu_1,\\mu_2\\) \u672a\u77e5\uff09\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{S_1^2/S_2^2}{\\sigma_1^2/\\sigma_2^2}\\sim F(n_1-1,n_2-1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\frac{S_1^2/S_2^2}{F_{\\alpha/2}(n_1-1,n_2-1)},\\frac{S_1^2/S_2^2}{F_{1-\\alpha/2}(n_1-1,n_2-1)}\\right)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u975e\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","title":"\u975e\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","text":"

    \u901a\u5e38\u628a\u8fd9\u4e2a\u975e\u6b63\u6001\u5206\u5e03\u6839\u636e\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8fd1\u4f3c\u6210\u4e00\u4e2a\u6b63\u6001\u5206\u5e03\uff0c\u4ece\u800c\u5229\u7528\u4e0a\u6587\u7684\u65b9\u6cd5\u6784\u9020\u67a2\u8f74\u91cf\uff0c\u5e76\u6c42\u89e3\u7f6e\u4fe1\u533a\u95f4\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap08/","title":"[8.x] \u5047\u8bbe\u68c0\u9a8c","text":"

    \u7ea6 133 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap08/#\u5904\u7406\u5047\u8bbe\u68c0\u9a8c\u95ee\u9898\u7684\u57fa\u672c\u6b65\u9aa4","title":"\u5904\u7406\u5047\u8bbe\u68c0\u9a8c\u95ee\u9898\u7684\u57fa\u672c\u6b65\u9aa4","text":"
    1. \u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b
    2. \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b
    3. \u9009\u62e9\u663e\u8457\u6027\u6c34\u5e73\uff0c\u6c42\u62d2\u7edd\u57df\u4e2d\u7684\u4e34\u754c\u503c\uff08\u7ed9\u51fa\u62d2\u7edd\u57df\uff09\uff1b
    4. \u6839\u636e\u5b9e\u9645\u6837\u672c\u4f5c\u51fa\u5224\u65ad\uff1b

    \u6216\u8005

    1. \u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b
    2. \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b
    3. \u8ba1\u7b97\u68c0\u9a8c\u7edf\u8ba1\u91cf\u7684\u89c2\u5bdf\u503c\u548c\\(P\\_\\)\u503c\uff1b
    4. \u6839\u636e\u7ed9\u5b9a\u7684\u663e\u8457\u6c34\u5e73\\(\\alpha\\)\u4f5c\u51fa\u5224\u65ad\uff1b

    "},{"location":"cour_note/D1QD_CXiaoCheng/","title":"\ud83d\udd2e C\u5c0f\u7a0b \u7410\u788e\u77e5\u8bc6\u70b9\u6574\u7406","text":"

    \u7ea6 4827 \u4e2a\u5b57 53 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 25 \u5206\u949f

    \u7528\u6765\u6574\u7406C\u5c0f\u7a0b\u7684\u4e00\u4e9b\u7ec6\u788e\u77e5\u8bc6\u70b9\u3002 \u6392\u7248\u6ca1\u6709\u903b\u8f91\uff0c\u5185\u5bb9\u4e5f\u4e0d\u5b8c\u6574\u3002 \u8be5\u6587\u6863\u9488\u5bf9\u6211\u4e2a\u4eba\u3002 \u6709\u4e00\u4e9b\u4e0d\u5728\u8003\u8bd5\u8303\u56f4\u5185\u7684\u4e1c\u897f\uff0c\u6211\u89c9\u5f97\u6709\u610f\u601d\u4e5f\u4e22\u4e0a\u53bb\u4e86\u3002

    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u60f3\u4e0d\u51fa\u6807\u9898\u7684\u90fd\u653e\u8fd9","title":"\u60f3\u4e0d\u51fa\u6807\u9898\u7684\u90fd\u653e\u8fd9","text":" \u9898\u9762\u7b54\u6848
    #include <stdio.h>\n\ndouble myFunction(int x){\nreturn x;\n}\n\nint main(){\nprintf(\"%lf\",myFunction(3.14));\n}\n

    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u6570\u636e\u7c7b\u578b\u4e0e\u5b57\u8282\u5206\u914d","title":"\u6570\u636e\u7c7b\u578b\u4e0e\u5b57\u8282\u5206\u914d","text":"\u6570\u636e\u7c7b\u578b \u5b57\u8282\u6570 \u8bf4\u660e char 1 int 4 short 2 long 4 long long 8 unsigned 8 float 4 \u6709\u6548\u4f4d\u6570\u4e00\u822c\u57287~8\u4f4d double 8 \u6709\u6548\u4f4d\u7f6e\u4e00\u822c\u572815~16\u4f4d \u6240\u6709\u6307\u9488(64x/32x) 8/4 struct\u3001\u6570\u7ec4 - \u5185\u5b58\u4e3a\u6240\u6709\u6210\u5458\u53d8\u91cf\u7684\u5185\u5b58\u548c\uff08\u4f46\u662f\u9700\u8981\u8003\u8651\u5bf9\u9f50\uff09 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u7f16\u8bd1\u7f16\u8bd1\u9884\u5904\u7406","title":"\u7f16\u8bd1\u3001\u7f16\u8bd1\u9884\u5904\u7406","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u8f93\u5165\u8f93\u51fa\u4e2d\u7684\u683c\u5f0f\u63a7\u5236\u7b26","title":"\u8f93\u5165\u8f93\u51fa\u4e2d\u7684\u683c\u5f0f\u63a7\u5236\u7b26","text":"\u63a7\u5236\u7b26 \u8bf4\u660e %d \u5341\u8fdb\u5236\u6574\u578b %ld \u5341\u8fdb\u5236\u957f\u6574\u578b %md \uff08\\(m \\in \\text{R}\\)\uff0c\u5982 %2d \uff09 m \u4e3a\u6307\u5b9a\u7684\u8f93\u51fa\u5b57\u6bb5\u7684\u5bbd\u5ea6\u3002\u5982\u679c\u6570\u636e\u7684\u4f4d\u6570\u5c0f\u4e8e m\uff0c\u5219\u5de6\u7aef\u8865\u4ee5\u7a7a\u683c\uff0c\u82e5\u5927\u4e8e m\uff0c\u5219\u6309\u5b9e\u9645\u4f4d\u6570\u8f93\u51fa\u3002\u5982\u679c\u52a0-\u8868\u793a\u5de6\u5bf9\u9f50\uff1b\u5982\u679c\u52a0+\u6216\u4e0d\u52a0\u8868\u793a\u53f3\u5bf9\u9f50\u3002 \u5982%-2d\uff0c%+3d %u \u5341\u8fdb\u5236\u65e0\u7b26\u53f7\u6574\u578b %lu \u5341\u8fdb\u5236\u65e0\u7b26\u53f7\u957f\u6574\u578b %c \u5b57\u7b26 %f %e \u5bf9\u4e8e scanf \u4ec5\u8868\u793a\u5355\u7cbe\u5ea6\u6d6e\u70b9\u6570\u5bf9\u4e8e printf \u4e0e %lf \u7b49\u4ef7\u3002\u4e0d\u6307\u5b9a\u5b57\u6bb5\u5bbd\u5ea6\uff0c\u7531\u7cfb\u7edf\u81ea\u52a8\u6307\u5b9a\uff0c\u6574\u6570\u90e8\u5206\u5168\u90e8\u8f93\u51fa\uff0c\u5c0f\u6570\u90e8\u5206\u8f93\u51fa 6 \u4f4d\uff0c\u8d85\u8fc7 6 \u4f4d\u7684\u56db\u820d\u4e94\u5165 %.mf\uff08\uff0c\u5982%.6f\uff09 \u8f93\u51fa\u5b9e\u6570\u65f6\u5c0f\u6570\u70b9\u540e\u4fdd\u7559 m \u4f4d %lf %le \u5bf9\u4e8e scanf \u4ec5\u8868\u793a\u53cc\u7cbe\u5ea6\u6d6e\u70b9\u6570\u5bf9\u4e8e printf \u4e0e %f \u7b49\u4ef7\u3002\u4e0d\u6307\u5b9a\u5b57\u6bb5\u5bbd\u5ea6\uff0c\u7531\u7cfb\u7edf\u81ea\u52a8\u6307\u5b9a\uff0c\u6574\u6570\u90e8\u5206\u5168\u90e8\u8f93\u51fa\uff0c\u5c0f\u6570\u90e8\u5206\u8f93\u51fa 6 \u4f4d\uff0c\u8d85\u8fc7 6 \u4f4d\u7684\u56db\u820d\u4e94\u5165 %.mlf\uff08\uff0c\u5982 %.6lf\uff09 \u8f93\u51fa\u5b9e\u6570\u65f6\u5c0f\u6570\u70b9\u540e\u4fdd\u7559 m \u4f4d %p \u5730\u5740 %s \u5b57\u7b26\u4e32 %o \u516b\u8fdb\u5236\u6574\u578b %lo \u516b\u8fdb\u5236\u957f\u6574\u578b %x %X %#x %#X \u5341\u516d\u8fdb\u5236\u6574\u578b %lx %lX \u5341\u516d\u8fdb\u5236\u957f\u6574\u578b"},{"location":"cour_note/D1QD_CXiaoCheng/#\u5e38\u89c1\u8f6c\u4e49\u5b57\u7b26","title":"\u5e38\u89c1\u8f6c\u4e49\u5b57\u7b26","text":"\u8f6c\u4e49\u5b57\u7b26 \u610f\u4e49 ASCII\uff08Dec\uff09 ASCII\uff08Hex\uff09 \\b \u9000\u683c(BS) \uff0c\u5c06\u5f53\u524d\u4f4d\u7f6e\u79fb\u5230\u524d\u4e00\u5217 008 0x08 \\n \u6362\u884c(LF) \uff0c\u5c06\u5f53\u524d\u4f4d\u7f6e\u79fb\u5230\u4e0b\u4e00\u884c\u5f00\u5934 010 0x10 \\r \u56de\u8f66(CR) \uff0c\u5c06\u5f53\u524d\u4f4d\u7f6e\u79fb\u5230\u672c\u884c\u5f00\u5934 013 0x13 \\t \u6c34\u5e73\u5236\u8868(HT) 009 0x09 \\' \u5355\u5f15\u53f7 039 0x27 \\\" \u53cc\u5f15\u53f7 034 0x22 \\\\ \u53cd\u659c\u6760 092 0x5C \\ddd 1~3\u4f4d\u7684\u516b\u8fdb\u5236\u6574\u6570\u6240\u4ee3\u8868\u7684ASCII\u7b26\u6bd4\u5982 \\041 \u6216\u8005 \\41 \u8868\u793a ! - - \\xhh 1~2\u4f4d\u7684\u5341\u516d\u8fdb\u5236\u6574\u6570\u6240\u8868\u793a\u7684ASCII\u7b26\u6bd4\u5982 \\x21 \u8868\u793a ! - -"},{"location":"cour_note/D1QD_CXiaoCheng/#\u5e38\u7528\u6570\u5b66\u51fd\u6570","title":"\u5e38\u7528\u6570\u5b66\u51fd\u6570","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u5faa\u73af\u8bed\u53e5","title":"\u5faa\u73af\u8bed\u53e5","text":"

    \u5982\u4e0b\u7684\u5faa\u73af\u8bed\u53e5\uff1a

    for(\u8868\u8fbe\u5f0f1;\u8868\u8fbe\u5f0f2;\u8868\u8fbe\u5f0f3){\n\u8bed\u53e5\n}\n
    \u5176\u6d41\u7a0b\u5e94\u5f53\u5982\u4e0b\uff1a

    graph LR\n    A[\u8868\u8fbe\u5f0f1] --> B{\u8868\u8fbe\u5f0f2};\n    B -->|Yes| C[\u8bed\u53e5];\n    C --> D[\u8868\u8fbe\u5f0f3];\n    D --> B;\n    B ---->|No| E[\u7ed3\u675f\u5faa\u73af];
    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u5206\u652f\u8bed\u53e5","title":"\u5206\u652f\u8bed\u53e5","text":" \u9898\u9762\u7b54\u6848
    if(x < 60){\n//\u8bed\u53e5\n}\n
    \u9898\u9762\u7b54\u6848
    int x = 0 , y = 0;\nif((++x) || (++y)){\n//\u8bed\u53e5\n}\n
    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u4f5c\u7528\u57df","title":"\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f&\u4f5c\u7528\u57df","text":"\u9759\u6001\u53d8\u91cf \u81ea\u52a8\u53d8\u91cf \u8fd9\u4e00\u7ec4\u5173\u7cfb\u7684\u7740\u91cd\u70b9\u5728\u5185\u5b58\u5b58\u50a8\u4f4d\u7f6e\u548c\u751f\u547d\u5468\u671f\u7684\u95ee\u9898 \u5168\u5c40\u53d8\u91cf \u5c40\u90e8\u53d8\u91cf \u8fd9\u4e00\u7ec4\u5173\u7cfb\u7684\u7740\u91cd\u70b9\u5728\u4f5c\u7528\u57df

    -\u5c40\u90e8\u53d8\u91cf\u7684\u6709\u6548\u4f7f\u7528\u8303\u56f4\u6700\u5927\u7a0b\u5ea6\u4fdd\u8bc1\u4e86\u5404\u90e8\u5206\u4e4b\u95f4\u7684\u72ec\u7acb\u6027\uff0c\u964d\u4f4e\u4e86\u5404\u4e2a\u6a21\u5757\u4e4b\u95f4\u7684\u8026\u5408\u5ea6 -\u5168\u5c40\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u662f\u4ece\u5b9a\u4e49\u5f00\u59cb\u5230\u6587\u4ef6\u7ed3\u675f

    \u7cfb\u7edf\u5b58\u50a8\u533a \u7528\u6237\u5b58\u50a8\u533a \u7a0b\u5e8f\u533a\uff08\u4ee3\u7801\u5185\u5bb9\uff09 \u6570\u636e\u533a \u9759\u6001\u5b58\u50a8\u533a \u5168\u5c40\u53d8\u91cf \u9759\u6001\u5c40\u90e8\u53d8\u91cf \u52a8\u6001\u5b58\u50a8\u533a \u5404\u4e2a\u6a21\u5757\u4e0b\u7684\u52a8\u6001\u5c40\u90e8\u53d8\u91cf \u5404\u4e2a\u6a21\u5757\u4e0b\u7684\u52a8\u6001\u5c40\u90e8\u53d8\u91cf ... "},{"location":"cour_note/D1QD_CXiaoCheng/#\u8865\u7801","title":"\u8865\u7801","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u8fd0\u7b97\u7b26\u4f18\u5148\u7ea7\u540c\u7ea7\u9075\u5faa\u7ed3\u5408\u65b9\u5411\u89c4\u5f8b","title":"\u8fd0\u7b97\u7b26\u4f18\u5148\u7ea7(\u540c\u7ea7\u9075\u5faa\u7ed3\u5408\u65b9\u5411\u89c4\u5f8b)","text":"

    \u5982\u6709\u51b2\u7a81\uff0c\u8bf7\u4f18\u5148\u53c2\u8003 \u8fd9\u91cc\u3002

    \u4f18\u5148\u7ea7 \u8fd0\u7b97\u7b26 \u540d\u79f0\u6216\u542b\u4e49 \u4f7f\u7528\u5f62\u5f0f \u7ed3\u5408\u65b9\u5411 1 [] \u6570\u7ec4\u4e0b\u6807 \u6570\u7ec4\u540d[\u5e38\u91cf\u8868\u8fbe\u5f0f] \u5de6\u5230\u53f3 () \u5706\u62ec\u53f7 \uff08\u8868\u8fbe\u5f0f\uff09/\u51fd\u6570\u540d(\u5f62\u53c2\u8868) . \u6210\u5458\u9009\u62e9\uff08\u5bf9\u8c61\uff09 \u5bf9\u8c61.\u6210\u5458\u540d -> \u6210\u5458\u9009\u62e9\uff08\u6307\u9488\uff09 \u5bf9\u8c61\u6307\u9488->\u6210\u5458\u540d ++ \u540e\u7f6e\u81ea\u589e\u8fd0\u7b97\u7b26 \u53d8\u91cf\u540d++ -- \u540e\u7f6e\u81ea\u51cf\u8fd0\u7b97\u7b26 \u53d8\u91cf\u540d-- 2 - \u8d1f\u53f7\u8fd0\u7b97\u7b26 -\u8868\u8fbe\u5f0f \u53f3\u5230\u5de6 (\u7c7b\u578b) \u5f3a\u5236\u7c7b\u578b\u8f6c\u6362 (\u6570\u636e\u7c7b\u578b)\u8868\u8fbe\u5f0f ++ \u524d\u7f6e\u81ea\u589e\u8fd0\u7b97\u7b26 ++\u53d8\u91cf\u540d -- \u524d\u7f6e\u81ea\u51cf\u8fd0\u7b97\u7b26 --\u53d8\u91cf\u540d * \u53d6\u503c\u8fd0\u7b97\u7b26 *\u6307\u9488\u53d8\u91cf & \u53d6\u5730\u5740\u8fd0\u7b97\u7b26 &\u53d8\u91cf\u540d ! \u903b\u8f91\u975e\u8fd0\u7b97\u7b26 !\u8868\u8fbe\u5f0f ~ \u6309\u4f4d\u53d6\u53cd\u8fd0\u7b97\u7b26 ~\u8868\u8fbe\u5f0f sizeof() \u957f\u5ea6\u8fd0\u7b97\u7b26 sizeof(\u8868\u8fbe\u5f0f) 3 / \u9664 \u8868\u8fbe\u5f0f/\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 * \u4e58 \u8868\u8fbe\u5f0f*\u8868\u8fbe\u5f0f % \u4f59\u6570\uff08\u53d6\u6a21\uff09 \u6574\u578b\u8868\u8fbe\u5f0f/\u6574\u578b\u8868\u8fbe\u5f0f 4 + \u52a0 \u8868\u8fbe\u5f0f+\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 - \u51cf \u8868\u8fbe\u5f0f-\u8868\u8fbe\u5f0f 5 << \u5de6\u79fb \u53d8\u91cf<<\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 >> \u53f3\u79fb \u53d8\u91cf>>\u8868\u8fbe\u5f0f 6 > \u5927\u4e8e \u8868\u8fbe\u5f0f>\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 >= \u5927\u4e8e\u7b49\u4e8e \u8868\u8fbe\u5f0f>=\u8868\u8fbe\u5f0f < \u5c0f\u4e8e \u8868\u8fbe\u5f0f<\u8868\u8fbe\u5f0f <= \u5c0f\u4e8e\u7b49\u4e8e \u8868\u8fbe\u5f0f<=\u8868\u8fbe\u5f0f 7 == \u7b49\u4e8e \u8868\u8fbe\u5f0f==\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 != \u4e0d\u7b49\u4e8e \u8868\u8fbe\u5f0f!= \u8868\u8fbe\u5f0f 8 & \u6309\u4f4d\u4e0e \u8868\u8fbe\u5f0f&\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 9 ^ \u6309\u4f4d\u5f02\u6216 \u8868\u8fbe\u5f0f^\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 10 | \u6309\u4f4d\u6216 \u8868\u8fbe\u5f0f|\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 11 && \u903b\u8f91\u4e0e \u8868\u8fbe\u5f0f&&\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 12 || \u903b\u8f91\u6216 \u8868\u8fbe\u5f0f||\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 13 ?: \u6761\u4ef6\u8fd0\u7b97\u7b26 \u8868\u8fbe\u5f0f1? \u8868\u8fbe\u5f0f2: \u8868\u8fbe\u5f0f3 \u53f3\u5230\u5de6 14 = \u8d4b\u503c\u8fd0\u7b97\u7b26 \u53d8\u91cf=\u8868\u8fbe\u5f0f \u53f3\u5230\u5de6 /= \u9664\u540e\u8d4b\u503c \u53d8\u91cf/=\u8868\u8fbe\u5f0f *= \u4e58\u540e\u8d4b\u503c \u53d8\u91cf*=\u8868\u8fbe\u5f0f %= \u53d6\u6a21\u540e\u8d4b\u503c \u53d8\u91cf%=\u8868\u8fbe\u5f0f += \u52a0\u540e\u8d4b\u503c \u53d8\u91cf+=\u8868\u8fbe\u5f0f -= \u51cf\u540e\u8d4b\u503c \u53d8\u91cf-=\u8868\u8fbe\u5f0f <<= \u5de6\u79fb\u540e\u8d4b\u503c \u53d8\u91cf<<=\u8868\u8fbe\u5f0f >>= \u53f3\u79fb\u540e\u8d4b\u503c \u53d8\u91cf>>=\u8868\u8fbe\u5f0f &= \u6309\u4f4d\u4e0e\u540e\u8d4b\u503c \u53d8\u91cf&=\u8868\u8fbe\u5f0f ^= \u6309\u4f4d\u5f02\u6216\u540e\u8d4b\u503c \u53d8\u91cf^=\u8868\u8fbe\u5f0f |= \u6309\u4f4d\u6216\u540e\u8d4b\u503c \u53d8\u91cf|=\u8868\u8fbe\u5f0f 15 , \u9017\u53f7\u8fd0\u7b97\u7b26 \u8868\u8fbe\u5f0f,\u8868\u8fbe\u5f0f,\u2026 \u5de6\u5230\u53f3"},{"location":"cour_note/D1QD_CXiaoCheng/#\u6307\u9488\u76f8\u5173","title":"\u6307\u9488\u76f8\u5173","text":"

    \u4e22\u4e00\u4e2axxjj\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u00a0\u00a0\u70b9\u51fb\u8df3\u8f6c

    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u547d\u4ee4\u884c\u53c2\u6570","title":"\u547d\u4ee4\u884c\u53c2\u6570","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u6587\u4ef6\u64cd\u4f5c","title":"\u6587\u4ef6\u64cd\u4f5c","text":" \u6587\u672c\u6587\u4ef6 \u4e8c\u8fdb\u5236\u6587\u4ef6 \u4f7f\u7528\u65b9\u5f0f \u542b\u4e49 \u4f7f\u7528\u65b9\u5f0f \u542b\u4e49 \"r\" \u6253\u5f00 & \u53ea\u8bfb \"rb\" \u6253\u5f00 & \u53ea\u8bfb \"w\" \u65b0\u5efa(\u6e05\u7a7a) & \u53ea\u5199 \"wb\" \u65b0\u5efa & \u53ea\u5199 \"a\" \u6253\u5f00 & \u8ffd\u52a0 \"ab\" \u6253\u5f00 & \u8ffd\u52a0 \"r+\" \u6253\u5f00 & \u8bfb\u5199 \"rb+\" \u6253\u5f00 & \u8bfb\u5199 \"w+\" \u65b0\u5efa(\u6e05\u7a7a) & \u8bfb\u5199 \"wb+\" \u65b0\u5efa & \u8bfb\u5199 \"a+\" \u6253\u5f00 & \u8bfb & \u8ffd\u52a0 \"ab+\" \u6253\u5f00 & \u8bfb & \u8ffd\u52a0 \u8bf4\u660e \u4f7f\u7528\"w\"/\"w+\"\u65f6\uff0c\u6587\u4ef6\u5185\u5bb9\u4f1a\u88ab\u8986\u76d6\uff08\u56e0\u4e3a\u6e05\u7a7a\u540e\u518d\u5199\u5165\uff09 \u4f7f\u7528\"a\"/\"a+\"\u65f6\uff0c\u8f93\u5165\u5185\u5bb9\u4f1a\u5199\u5728\u6587\u4ef6\u5185\u5bb9\u540e\u9762 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"

    \u8d34\u4e00\u4e9b\u5176\u4ed6\u5b66\u957f\u7684\u6587\u7ae0\uff1a

    "},{"location":"cour_note/D1SJ_Intro2CS/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7cfb\u7edf\u6982\u8bba | Introduction to Computing Systems","text":"

    \u7ea6 12 \u4e2a\u5b57

    "},{"location":"cour_note/D1SJ_StanfordCS231n/","title":"\ud83d\udd2e Deep Learning for Computer Vision | CS231N","text":"

    \u7ea6 3443 \u4e2a\u5b57 17 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f

    \u8bfe\u7a0b\u4ecb\u7ecd

    Course Website: \ud83d\udd17

    Course Video: \ud83d\udd17

    Course Description

    Assignments

    \u53c2\u8003\u8d44\u6599 "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-1-introduction-to-convolutional-neural-networks-for-visual-recognition","title":"Lecture 1: Introduction to Convolutional Neural Networks for Visual Recognition","text":"

    \u5176\u6838\u5fc3\u601d\u60f3\u662f\u5c06\u590d\u6742\u7684\u89c6\u89c9\u4fe1\u606f\u7b80\u5316\u4e3a\u7b80\u5355\u5bf9\u8c61\u7684\u7ec4\u5408\u3002

    \u4eba\u4eec\u610f\u8bc6\u5230\u76f4\u63a5\u8bc6\u522b\u7269\u4f53\u6bd4\u8f83\u56f0\u96be\uff0c\u4e8e\u662f\u60f3\u5230\u4e86 \u5206\u5272\u56fe\u5f62(image segmentation) \u2014\u2014\u5373\u5148\u505a\u5c06\u50cf\u7d20\u5206\u7ec4\uff1a

    \u6709\u7aef\u8054\u60f3 FDS \u7684 Voting Tree

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-2-image-classification-pipeline","title":"Lecture 2: Image Classification Pipeline","text":" "},{"location":"cour_note/D1SJ_StanfordCS231n/#data-driven-approach","title":"Data-Driven Approach","text":"
    1. Collect a dataset of images and labels;
    2. Use Machine Learning to train a classifier;
    3. Evaluate the classifier on new images;
    4. \u5f97\u5230\u7684\u6a21\u578b\u6709\u4e24\u4e2a\u6838\u5fc3 API\uff1a\u4e00\u4e2a\u7528\u4e8e \u8bad\u7ec3(train)\uff0c\u4e00\u4e2a\u7528\u4e8e \u9884\u6d4b(predict)\u3002
    5. \u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e0d\u4ecb\u610f\u8bad\u7ec3\u65f6\u95f4\u957f\uff0c\u4f46\u5e0c\u671b\u9884\u6d4b\u6548\u7387\u9ad8\u3002

    CIFAR-10 & CIFAR-100: \ud83d\udd17

    Distance Metric to compare images

    \u6211\u4eec\u5c06\u5206\u7c7b\u95ee\u9898\u770b\u4f5c\u5728\u201c\u7a7a\u95f4\u201d\u4e2d\u7684\u67d3\u8272\u95ee\u9898\uff0c\u70b9\u8868\u793a\u8bad\u7ec3\u6570\u636e\uff0c\u5176\u989c\u8272\u8868\u793a\u5176\u88ab\u6807\u8bb0\u7684\u5206\u7c7b\uff1b\u800c\u753b\u677f\u4e2d\u5176\u4ed6\u90e8\u5206\u7684\u989c\u8272\u5219\u8868\u793a\u5f53\u70b9\u843d\u5728\u8fd9\u4e2a\u4f4d\u7f6e\u65f6\u5019\u4f1a\u88ab\u5206\u7c7b\u4e3a\u54ea\u4e00\u79cd\u3002

    \u4e2d\u95f4\u201c\u9ec4\u8272\u90e8\u5206\u201d\u8fd9\u79cd\u5b64\u7acb\u7684\u5c0f\u5c9b\u5728\u5b9e\u9645\u5bf9\u6570\u636e\u8fdb\u884c\u9884\u6d4b\u5de5\u4f5c\u65f6\u53ef\u80fd\u4e0d\u662f\u5f88\u597d\u3002

    \u8fd9\u4e9b\u90e8\u5206\u53ef\u80fd\u6709\u566a\u58f0\u6216\u662f\u865a\u5047\u7684\u3002

    L1 (Manhattan) distance: (stupid in most cases)L2 (Euclidean ) distance: (better by comparison)

    K-Nearest Neighbors: \ud83d\udd17

    Interactive Demo: \ud83d\udd17

    Instead of copying label from nearest neighbor, take majority vote from K closest points.

    \u4f8b\u5982\uff0cK=1 \u65f6\u4e2d\u95f4\u7684\u9ec4\u8272\u533a\u57df\u7531\u4e8e\u9644\u8fd1\u90fd\u662f\u7eff\u70b9\uff0c\u6240\u4ee5\u5728 K \u589e\u957f\u7684\u65f6\u5019\u7eff\u8272\u5728\u8ba1\u7b97\u4e2d\u7684\u6743\u91cd\u53d8\u5927\uff0c\u6240\u4ee5\u6700\u540e\u88ab\u6807\u8bb0\u4e3a\u7eff\u8272\u3002s

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#hyperparameters","title":"Hyperparameters","text":"

    Setting Hyperparameters (\u8c03\u53c2)

    \u5373\uff0c\u6211\u4eec\u9700\u8981\u786e\u4fdd\u8db3\u591f\u7684\u8bad\u7ec3\u96c6\uff0c\u5e76\u901a\u8fc7\u9a8c\u8bc1\u96c6\u8fdb\u884c\u8c03\u53c2\uff0c\u5e76\u5728\u4e00\u5207\u90fd\u5b8c\u6210\u4ee5\u540e\u624d\u4f7f\u7528\u6d4b\u8bd5\u96c6\u6765\u9a8c\u8bc1\u6a21\u578b\u7684\u51c6\u786e\u5ea6\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#linear-classification","title":"Linear Classification","text":"

    Parametric Approach

    \\[ f(x,W)=Wx+b \\]

    \u8fd9\u91cc\u7684 10 numbers \u8868\u793a\u7684\u662f CIFAR-10 \u4e2d\u7684 10 \u4e2a\u7c7b\u522b\u5bf9\u5e94\u7684\u5f97\u5206\u3002

    \u5982\u679c\u5c06\u9ad8\u7ef4\u7a7a\u95f4\u7684\u60c5\u51b5\u6620\u5c04\u5230\u5e73\u9762\u7684\u51e0\u4f55\u89d2\u5ea6\u6765\u7406\u89e3\uff0c\u5c31\u597d\u50cf\u5728\u5212\u4e00\u9053\u9053\u76f4\u7ebf\u6765\u8fdb\u884c\u5212\u5206\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-3-loss-functions-and-optimization","title":"Lecture 3: Loss Functions and Optimization","text":" "},{"location":"cour_note/D1SJ_StanfordCS231n/#multi-class-svm-loss","title":"Multi-class SVM Loss","text":"

    \u5982\u4f55\u7406\u89e3\u90a3\u5f20\u56fe\uff1f(hinge loss?)

    Let \\(s = f(x_i,W)\\), then SVM loss is:

    \\[ L_i = \\sum_{j \\not = y_i } \\left\\{ \\begin{align*} &0 &\\text{if } s_{y_i} \\geq s_j + 1\\\\ &s_j-s_{y_i}+1 &\\text{otherwise} \\end{align*} \\right. = \\sum_{j \\not = y_i } \\text{max}(0,s_j-s_{y_i}+1) \\]

    def L_i_Vectorized(x, y, W):\n    scores = W.dot(x)\n    margins = np.maximum(0, scores - scores[y] + 1)\n    margins[y] = 0\n    loss_i = np.sum(margins)\n    return loss_i\n
    \\[ f(x,W) = Wx\\\\ L = \\frac{1}{N}\\sum_{i=1}^{n}\\sum_{j\\not = y_i}\\text{max}(0,f(x;W)_j-f(x_i;W)_{y_i}+1) \\]

    To solve it, we use regularization.

    The regularization term.

    Occam's Razor

    So your standard loss function usually has two terms, a data loss and a regularization loss, and there's a hyperparameter(mentioned already in L2) here, lambda, which trades off between the two.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#regularization","title":"Regularization","text":"

    There are many regularizations used in practice, and the most common one is probably L2 regularization or weight decay.

    In common use:

    The whole idea of regularization is just any thing that you do to your model, that sort of penalizes somehow the complexity of the model, rather than explicitly trying to fit the training data. Each regularization has its own feature, you should choose them depends on the problems.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#softmax-classifier-multinomial-logistic-regression","title":"Softmax Classifier (Multinomial Logistic Regression)","text":"

    eg for Softmax Classifier.

    Compare the two.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#optimization","title":"Optimization","text":"

    ## Vanilla Gradient Descent\n\nwhile True:\n    weights_grad = evaluate_gradient(loss_fun, data, weight)\n    weights += - step_size * weights_grad ## perform parameter update\n
    step_size is a hyperparameter here, it's also called a learning rate sometimes. Stochastic Gradient Descent (SGD) - The basic Gradient Descent will be messy when \\(N\\) is large! - So we need to start with approximate sum using a minibatch of examples. - 32 / 64 / 128 common

    ## Vanilla Gradient Descent\n\nwhile True:\n    data_batch = sample_training_data(data, 256) ## sample 256 examples\n    weights_grad = evaluate_gradient(loss_fun, data_batch, weight)\n    weights += - step_size * weights_grad ## perform parameter update\n
    "},{"location":"cour_note/D1SJ_StanfordCS231n/#aside-image-features","title":"Aside: Image Features","text":""},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-4-introduction-to-neural-networks","title":"Lecture 4: Introduction to Neural Networks","text":""},{"location":"cour_note/D1SJ_StanfordCS231n/#computational-graphs","title":"Computational graphs","text":"

    eg. for the linear classifier.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#backpropagation","title":"Backpropagation","text":"

    \u901a\u8fc7\u5c06\u7b97\u5f0f\u5199\u6210\u8fd9\u79cd\u201c\u8282\u70b9\u56fe\u201d\u7684\u5f62\u5f0f\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u8ba9\u6211\u4eec\u770b\u6e05\u8ba1\u7b97\u8fc7\u7a0b\u5e76\u65b9\u4fbf\u6211\u4eec\u8ba1\u7b97\u68af\u5ea6\u3002\u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982 \\(f(x,y,z)=(x+y)z\\)\uff0c\u5c06\u5176\u5199\u6210\u8282\u70b9\u56fe\u5982\u4e0b\uff0c\u5e76\u8ba1\u7b97\u6240\u9700\u8981\u7684\u53c2\u6570\u3002

    \u7136\u540e\u6211\u4eec\u4ece\u56fe\u7684\u672b\u7aef\u5f00\u59cb\u8ba1\u7b97\uff0c\u5f97\u5230\u8fd9\u4e9b\u8282\u70b9\u6570\u636e\uff1a

    \\(\\left\\{ \\begin{aligned} &\\frac{\\partial{f}}{\\partial{f}}=1,\\\\ &\\frac{\\partial{f}}{\\partial{z}}=q=3,\\\\ &\\frac{\\partial{f}}{\\partial{q}}=z=-4,\\\\ &\\frac{\\partial{f}}{\\partial{x}}=\\frac{\\partial{f}}{\\partial{q}}\\frac{\\partial{q}}{\\partial{x}}=-4,\\\\ &\\frac{\\partial{f}}{\\partial{y}}=\\frac{\\partial{f}}{\\partial{q}}\\frac{\\partial{q}}{\\partial{y}}=-4 \\end{aligned} \\right.\\)

    backprop (red lines)

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6211\u4eec\u5728\u8ba1\u7b97\u8fc7\u7a0b\u4e2d\u53ea\u9700\u8981\u5c06\u201c\u76f8\u90bb\u201d\u68af\u5ea6\u4e58\u4ee5\"local gradient\"\u5373\u53ef\u8ba1\u7b97\u51fa\u6240\u9700\u8981\u7684\u65b0\u7684\"local gradient\"\u3002\u800c\u53ea\u9700\u8981\u518d\u6cbf\u7740\u8def\u5f84\u518d\u5c06\u6240\u6709\u7684\"local gradient\"\u7d2f\u4e58\u8d77\u6765\uff0c\u5c31\u80fd\u5f97\u5230\u6bcf\u4e00\u4e2a\u53d8\u91cf\u5173\u4e8e\u8868\u8fbe\u5f0f\u7684\u68af\u5ea6\u3002

    \u7279\u522b\u7684\uff0c\u7531\u4e8e\u8282\u70b9\u662f\u6211\u4eec\u8ba4\u4e3a\u5b9a\u4e49\u7684\uff0c\u800c\u4e14\u8be5\u65b9\u6cd5\u6240\u4f9d\u8d56\u201c\u94fe\u5f0f\u6cd5\u5219\u201d\u4e5f\u5141\u8bb8\u51fd\u6570\u7684\u81ea\u7531\u7ec4\u5408\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4eba\u4e3a\u201c\u5408\u5e76/\u5206\u5272\u201d\u4e00\u4e9b\u8282\u70b9\uff0c\u4f8b\u5982\u5728\u4e0a\u9762\u90a3\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u6700\u540e\u56db\u4e2a\u8282\u70b9\u5408\u5e76\u4e3a\u4e00\u4e2a\"sigmoid function\"(i.e. \\(\\frac{1}{1+e^{-x}}\\))\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#patterns-in-backward-flow","title":"Patterns in backward flow","text":"

    \u53e6\u5916\u4e00\u79cd\u7406\u89e3\u7b97\u7b26\u5728\u8ba1\u7b97\u56fe\u4e2d\u7684\u4f5c\u7528\u7684\u601d\u8def\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0cmax() \u8fd0\u7b97\u5728\u68af\u5ea6\u4f20\u9012\u8fc7\u7a0b\u4e2d\u53ea\u8d77\u5230\u8def\u7531\u5668\u7684\u4f5c\u7528\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c06\u5176\u4f20\u9012\u5230\u8f83\u5927\u7684\u90a3\u4e2a\u53d8\u91cf\u90a3\u4e00\u4fa7\uff0c\u4f46\u4e0d\u6539\u53d8\u68af\u5ea6\u7684\u503c\uff1b\u800c\u5bf9\u4e8e\u8f83\u5c0f\u7684\u90a3\u4e2a\u53d8\u91cf\uff0c\u68af\u5ea6\u4f20\u9012\u88ab\u963b\u65ad\uff0c\u76ee\u6807\u53d8\u91cf\u7684\u68af\u5ea6\u4e3a \\(0\\)\u3002

    \u5c06\u8fd9\u4e2a\u6d41\u7a0b\u8fc1\u79fb\u5230\u795e\u7ecf\u7f51\u7edc\u4e0a\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5c06\u8fd9\u4e9b\u6570\u5b57\u53d8\u4e3a Jacobian matrix \u5373\u53ef\u3002

    \u5728\u5177\u4f53\u5b9e\u73b0\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u4f1a\u5b9e\u73b0\u4e00\u4e2a forward() \u7528\u4e8e\u8ba1\u7b97\u51fd\u6570\u7684\u8f93\u51fa\uff0c\u4ee5\u53ca\u4e00\u4e2a backward() \u7528\u4e8e\u6309\u7167\u4e0a\u9762\u63d0\u5230\u7684\u65b9\u6cd5\u8ba1\u7b97\u68af\u5ea6\u3002

    Summary

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#neural-networks","title":"Neural Networks","text":"

    \u901a\u8fc7\u51fd\u6570\u53e0\u52a0\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u795e\u7ecf\u7f51\u7edc\u3002

    \u4e0e\u751f\u7269\u795e\u7ecf\u7684\u4e00\u4e2a\u7c7b\u6bd4

    Summary

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-5-convolutional-neural-networks","title":"Lecture 5: Convolutional Neural Networks","text":""},{"location":"cour_note/D1SJ_StanfordCS231n/#convolutional-neural-networks","title":"Convolutional Neural Networks","text":"

    \u4e4b\u524d\u63d0\u5230\u8fc7\u7684 Fully Connected Layer \u4f1a\u5c06\u591a\u7ef4\u7684\u6570\u636e\u62c9\u4f38\u4e3a\u5411\u91cf\u7684\u5f62\u5f0f\uff0c\u76f8\u6bd4\u4e4b\u4e0b\uff0c Convolution Layer \u5219\u4f1a\u4fdd\u7559\u8f93\u5165\u6570\u636e\u7684\u5f62\u72b6 \u7279\u5f81\uff0c\u4e00\u822c\u6765\u8bf4\uff0cfilter \u4f1a\u4e0e\u6570\u636e\u5177\u6709\u76f8\u540c\u7684\u6df1\u5ea6\uff08\u4f8b\u5982 input \u662f 32x32x3\uff0c\u90a3\u4e48 filter \u53ef\u4ee5\u4e3a 5x5x3\uff09\u3002\u901a\u8fc7\u5c06 filter \u4e0e input \u7684\u67d0\u4e00\u4e2a\u540c\u5f62\u72b6\u7684\u5b50\u533a\u57df\u505a\u70b9\u79ef\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u6570\u5b57\u3002

    \u5728\u67d0\u4e2a\u4f4d\u7f6e\u83b7\u5f97\u70b9\u79ef\uff0c\u5373 filter \u5982\u4f55\u4f5c\u7528\u4e8e input

    \u91c7\u7528\u591a\u4e2a filters \u5e76\u5c06\u7ed3\u679c\u53e0\u52a0\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u591a\u4e2a\u6fc0\u6d3b\u56fe(activation maps)\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5904\u7406\u540e\u7684\u6570\u636e\u3002 - ConvNet is a sequence of Convolution Layers, interspersed with activation functions.

    \u5173\u4e8e\u8f93\u51fa\u7684\u6fc0\u6d3b\u56fe\u7684\u5927\u5c0f\uff0c\u6709\u5982\u4e0a\u516c\u5f0f\u3002

    \u901a\u8fc7\u9009\u62e9\u6b65\u957f\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236\u6ed1\u52a8\u7684\u901f\u7387\u3002\u4ece\u67d0\u79cd\u610f\u4e49\u4e0a\u6765\u8bb2\u8fd9\u4e5f\u662f\u5728\u63a7\u5236\u6ed1\u52a8\u7ed3\u679c\u7684\u5206\u8fa8\u7387\uff0c\u4e5f\u662f\u6c60\u5316\u64cd\u4f5c\u80cc\u540e\u7684\u601d\u60f3\u4e4b\u4e00\u3002\u800c\u5177\u4f53\u9009\u62e9\u5927\u6b65\u957f\u8fd8\u662f\u5c0f\u6b65\u957f\u662f\u4f60\u9700\u8981\u5bf9\u5404\u79cd\u56e0\u7d20\u8fdb\u884c\u8003\u91cf\u51b3\u5b9a\u7684\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6b65\u957f\u4e3a 3 \u65f6\u65e0\u6cd5\u5339\u914d\u3002\u800c\u5728\u5b9e\u8df5\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e9b\u624b\u6bb5\u6765\u89e3\u51b3\u8fd9\u79cd\u65e0\u6cd5\u5339\u914d\u7684\u60c5\u51b5\uff0c\u5982\"zero pad to borders\"\u4ee5\u4f7f\u5927\u5c0f\u7b26\u5408\u6b65\u957f\u3002

    \u6ce8\u610f\uff0c\u91c7\u7528\u96f6\u6269\u5c55\u4ee5\u540e\u4e0a\u4e00\u5f20\u56fe\u7684\u516c\u5f0f\u5c31\u65e0\u6cd5\u4f7f\u7528\u4e86\u3002\u8fd9\u4e5f\u6b63\u662f\u96f6\u6269\u5c55\u7684\u4e00\u4e2a\u7279\u70b9\uff0c\u5b83\u53ef\u4ee5\u8ba9\u56fe\u50cf\u7684\u5f62\u72b6\u4e0d\u5fc5\u7f29\u5c0f\u3002

    \u4e00\u9053\u6d4b\u8bd5\u9898\uff1a

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97\u8fd9\u6837\u4e00\u5c42\u4e2d\u6709\u591a\u5c11\u53c2\u6570\u3002

    Ans

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#pooling-layer","title":"Pooling layer","text":"

    just downsample

    A common way to do this is max pooling:

    just take the max value

    \u5bf9\u4e8e\u6c60\u5316\u5c42\uff0c\u5728\u8fdb\u884c\u6ed1\u52a8\u7a97\u53e3\u65f6\u6211\u4eec\u66f4\u5e0c\u671b\u6b65\u957f\u7684\u8bbe\u7f6e\u80fd\u4f7f filter \u6ca1\u6709\u91cd\u53e0\uff0c\u4ee5\u6ee1\u8db3\u5c0f\u8282\u5f00\u5934\u63d0\u5230\u7684\"independently\"\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#fully-connected-layer-fc-layer","title":"Fully Connected Layer (FC layer)","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/","title":"\ud83d\udc8e \u9ad8\u7ea7\u6570\u636e\u7ed3\u6784 | Advanced Data Structure","text":"

    \u7ea6 148 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    \u7ffb\u8f6c\u8bfe\u5802*

    \u5206\u6570\u6784\u6210\uff1a

    \u7b14\u8bb0\u76f8\u5173

    \u53c2\u8003\u7b14\u8bb0\uff1a

    List

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/","title":"Topic 1 | Amortized Analysis","text":"

    \u7ea6 1041 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

    \u8bf4\u660e

    \u8ba1\u5212\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u91cd\u5199\u8fd9\u4e00\u90e8\u5206\u7684\u5185\u5bb9\uff0c\u73b0\u5728\u7684\u5185\u5bb9\u662f\u4ece\u539f\u6765\u7684 Lec01 \u91cc\u76f4\u63a5\u8fc1\u79fb\u8fc7\u6765\u7684\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

    link

    Wikipedia: https://zh.wikipedia.org/wiki/%E5%B9%B3%E6%91%8A%E5%88%86%E6%9E%90

    \u4e0d\u597d\u610f\u601d

    \u6211\u5b9e\u5728\u4e0d\u77e5\u9053\u600e\u4e48\u6e05\u6670\u5730\u8bb2\u660e\u767d\u201c\u644a\u8fd8\u201d\u662f\u4ec0\u4e48\uff0c\u611f\u89c9\u8bb2\u4e0d\u592a\u6e05\u695a\uff0c\u6240\u4ee5\u5c31\u6bd4\u8f83\u7b80\u5355\u7684\u4ecb\u7ecd\u4e86\uff0c\u4f46\u662f\u6211\u4ecd\u7136\u4f1a\u6307\u51fa\u6211\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u8ba4\u4e3a\u5bf9\u6211\u542f\u53d1\u6027\u6bd4\u8f83\u5927\u7684\u5730\u65b9\u3002

    \u6240\u8c13\u7684\u644a\u8fd8\u5206\u6790\uff0c\u5206\u6790\u7684\u662f\u644a\u8fd8\u8fb9\u754c\uff0c\u6216\u8005\u8bf4\u644a\u8fd8\u65f6\u95f4\u590d\u6742\u5ea6\u3002\u5e73\u5e38\u6211\u4eec\u5206\u6790\u65f6\u95f4\u590d\u6742\u5ea6\u65f6\uff0c\u9488\u5bf9\u7684\u5f80\u5f80\u662f\u67d0\u4e2a\u5177\u4f53\u7684\u64cd\u4f5c\u3002\u800c\u644a\u8fd8\u5206\u6790\u7684\u5bf9\u8c61\u5219\u662f\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u7684\u4e00\u7cfb\u5217\u64cd\u4f5c\uff0c\u800c\u8fd9\u4e00\u7cfb\u5217\u64cd\u4f5c\u4e2d\u6709\u6210\u672c\u8f83\u4f4e\u7684\uff0c\u4e5f\u6709\u6210\u672c\u8f83\u9ad8\u7684\uff0c\u800c\u4e14\u64cd\u4f5c\u4e4b\u95f4\u4e5f\u53ef\u80fd\u6709\u4e92\u76f8\u5f71\u54cd\u3002

    \u800c\u644a\u8fd8\u5206\u6790\u5219\u662f\u4ee5\u4e00\u4e2a\u66f4\u5168\u5c40\u7684\u89d2\u5ea6\u6765\u8ba1\u7b97\u201c\u5e73\u5747\u201d\u7684\u64cd\u4f5c\u4ee3\u4ef7\uff0c\u5b83\u8ba1\u7b97\u7684\u662f\u4ece\u521d\u59cb\u72b6\u6001\u5f00\u59cb\uff0c\u8fde\u7eed\u7684 M \u6b21\u4efb\u610f\u64cd\u4f5c\u6700\u591a\u6709 \u7684\u4ee3\u4ef7\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5b83\u4e0d\u540c\u4e8e\u5e73\u5747\u65f6\u95f4\u5206\u6790\uff08\u6240\u6709\u53ef\u80fd\u7684\u64cd\u4f5c\u51fa\u73b0\u6982\u7387\u5e73\u5747\uff0c\u4e5f\u5c31\u662f\u76f4\u63a5\u6c42\u5e73\u5747\uff09\u548c\u6982\u7387\u7b97\u6cd5\u7684\u6982\u7387\u5206\u6790\uff08\u5e73\u5747\u8bdd\u6240\u6709\u53ef\u80fd\u7684\u968f\u673a\u9009\u62e9\uff0c\u4e5f\u5c31\u662f\u52a0\u6743\u6c42\u5e73\u5747\uff09\u4e0d\u540c\uff0c\u644a\u8fd8\u5206\u6790\u548c\u6982\u7387\u5b8c\u5168\u65e0\u5173\u3002

    \u5bb9\u6613\u5f97\u5230\u5982\u4e0b\u7b49\u5f0f\uff1a

    \\[ \\text{worst-case bound} \\geq \\text{amortized bound} \\geq \\text{average-case bound} \\]

    \u6211\u4eec\u77e5\u9053\uff0c\u7531\u4e8e amortized bound \u9650\u5236\u4e86\u6240\u6709\u7684 M \u6b21\u64cd\u4f5c\uff0c\u6240\u4ee5\u5176\u4e0a\u754c\u5c31\u7b49\u4e8e\u6700\u5dee\u7684\u60c5\u51b5\u53d1\u751f M \u6b21\uff08\u5f53\u7136\uff0c\u5f88\u591a\u60c5\u51b5\u4e0b\u4e0d\u4e00\u5b9a\u80fd\u53d6\u5230\u5168\u90fd\u662f\u6700\u5dee\u60c5\u51b5\uff09\uff1b\u540c\u6837\u7684\uff0c\u7531\u4e8e\u9700\u8981\u5bf9\u4efb\u610f\u7ec4\u5408\u90fd\u6210\u7acb\uff0c\u6240\u4ee5\u4e00\u5b9a\u4e0d\u4f1a\u5c0f\u4e8e\u7edf\u8ba1\u5b66\u610f\u4e49\u4e0a\u7684\u5e73\u5747\u60c5\u51b5\u3002

    \u521a\u5f00\u59cb\u5b66\u5230\u644a\u8fd8\u5206\u6790\u7684\u65f6\u5019\uff0c\u770b\u7740\u8fd9\u4e9b\u5185\u5bb9\u6709\u4e00\u79cd\u83ab\u540d\u5176\u5999\u7684\u611f\u89c9\uff0c\u4e0d\u77e5\u9053\u5b83\u5728\u5e72\u561b\uff0c\u540e\u6765\u6211\u624d\u53d1\u73b0\u6211\u8bef\u89e3\u4e86\u644a\u8fd8\u5206\u6790\u7684\u76ee\u7684\u3002\u6240\u4ee5\u6211\u611f\u89c9\u8fd8\u662f\u9700\u8981\u5c31\u6b64\u7ed9\u51fa\u6211\u81ea\u5df1\u7684\u7406\u89e3\u3002

    \u644a\u8fd8\u5206\u6790

    \u5728\u6211\u7406\u89e3\u4e2d\uff0c\u644a\u8fd8\u5206\u6790\u5b9e\u9645\u4e0a\u662f\u4e00\u7cfb\u5217\u8bc1\u660e\u65b9\u6cd5\uff0c\u66f4\u8fdb\u4e00\u6b65\u7684\u8bf4\uff0c\u5728\u6211\u4eec\u4e4b\u540e\u4f1a\u8bb2\u5230\u7684\u4e09\u4e2a\u5206\u6790\u65b9\u6cd5\u4e2d\uff0c\u6709\u4e00\u4e9b\u53ef\u80fd\u96be\u4ee5\u76f4\u63a5\u5f97\u5230\u644a\u8fd8\u590d\u6742\u5ea6\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u4ed6\u4eec\u7684\u8fc7\u7a0b\u66f4\u50cf\u662f\u5df2\u77e5\u4e00\u4e2a\u644a\u8fd8\u8fb9\u754c\uff0c\u5e76\u8bc1\u660e\u5b83\u786e\u5b9e\u662f\u8fb9\u754c\u3002

    \u5e38\u89c1\u7684\u644a\u8fd8\u5206\u6790\u6709\u4e09\u79cd\uff1a\u805a\u5408(aggregate)\u6cd5\u3001\u6838(accounting)\u6cd5\u3001\u52bf\u80fd(potential)\u6cd5\uff0c\u63a5\u4e0b\u6765\u4e00\u4e00\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u805a\u5408\u6cd5","title":"\u805a\u5408\u6cd5","text":"

    \u805a\u5408\u6cd5\u76f8\u5bf9\u7b80\u5355\uff0c\u5c31\u662f\u76f4\u63a5\u7d2f\u79ef\u8fde\u7eed M \u6b21\u64cd\u4f5c\u7684\u4ee3\u4ef7\uff0c\u518d\u9664\u4ee5 M\u3002

    \\[ T_{amortized} = \\frac{\\sum_i{T_i}}{n} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u6838\u6cd5","title":"\u6838\u6cd5","text":"

    link

    \u5173\u4e8e Accounting Analysis \u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1ahttps://www.baeldung.com/cs/amortized-analysis

    \u505a\u4e00\u4e2a\u6bd4\u55bb\u7684\u8bdd\uff0c\u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a

    \u4f60\u53bb\u5403\u5348\u996d\uff0c\u5403\u7d20\u83dc\u8981 \u00a51\uff08\u5bf9\u6807\u6d88\u8017\u8f83\u5c0f\u7684\u64cd\u4f5c\uff09\uff0c\u5403\u8364\u83dc\u8981 \u00a54\uff08\u5bf9\u6807\u6d88\u8017\u8f83\u5927\u7684\u64cd\u4f5c\uff09\uff0c\u73b0\u5728\u4f60\u77e5\u9053\u4f60\u6bcf\u5929\u5403\u5348\u996d\u7684\u644a\u8fd8\u5f00\u9500\u4e3a \u00a52\uff08\u4ece\u8bc1\u660e\u7684\u89d2\u5ea6\u6765\u7406\u89e3\uff09\uff0c\u5e76\u4e14\u6211\u65e0\u8111\u7684\u8ba4\u4e3a\u6bcf\u4e2a\u64cd\u4f5c\u7684\u644a\u8fd8\u4ee3\u4ef7\u90fd\u662f \u00a52\uff08\u5728\u6838\u6cd5\u4e2d\uff0c\u6574\u4f53\u7684\u644a\u8fd8\u5f00\u9500\u548c\u5355\u4e2a\u64cd\u4f5c\u7684\u644a\u8fd8\u5f00\u9500\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5355\u4e2a\u64cd\u4f5c\u7684\u644a\u8fd8\u5f00\u9500\u662f\u53ef\u80fd\u4e92\u4e0d\u4e00\u6837\u7684\uff0cM \u4e2a\u64cd\u4f5c\u6c42\u548c\u53d6\u5e73\u5747\u4ee5\u540e\u624d\u662f\u6574\u4f53\u7684\u644a\u8fd8\u4ee3\u4ef7\uff09\u3002\u90a3\u4e48\u4f60\u4eca\u5929\u5403\u7d20\u83dc\uff0c\u8d26\u6237\u5165\u8d26 \u00a51\uff082 - 1 = 1\uff09\uff1b\u660e\u5929\u4f60\u4e5f\u5403\u7d20\u83dc\uff0c\u8d26\u6237\u4e5f\u5165\u8d26 \u00a51\uff1b\u540e\u5929\u4f60\u5403\u8364\u83dc\u4e86\uff0c\u90a3\u4e48\u8d26\u6237\u5c31\u51fa\u8d26 \u00a52\uff082 - 4 = -2\uff09\u2026\u2026

    \u6838\u6cd5\u5927\u6982\u5c31\u662f\u6309\u7167\u8fd9\u4e48\u4e00\u4e2a\u601d\u8def\u6765\u8bc1\u660e\uff0c\u4e0d\u8fc7\u5177\u4f53\u7ec6\u8282\u548c\u4e0a\u9762\u8fd9\u4e2a\u6848\u4f8b\u8fd8\u662f\u6709\u533a\u522b\u7684\uff0c\u53ef\u4ee5\u8be6\u7ec6\u53c2\u8003\u4e0a\u9762\u90a3\u7247\u6587\u7ae0\uff0c\u6211\u89c9\u5f97\u914d\u56fe\u548c\u8bf4\u660e\u90fd\u5f88\u8be6\u7ec6\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u52bf\u80fd\u6cd5","title":"\u52bf\u80fd\u6cd5","text":"

    link

    \u5173\u4e8e Potential Analysis \u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1ahttps://en.wikipedia.org/wiki/Potential_method \u4ee5\u53ca ltgg \u7684\u8fd9\u671f\u5468\u62a5\u8bb2\u7684\u4e5f\u5f88\u597d\uff1ahttps://www.yuque.com/xianyuxuan/saltfish_shop/weekly002_amortized_analysis#KmnY6

    \u52bf\u80fd\u6cd5\u5f3a\u63a8 ltgg \u7684\u8fd9\u7bc7\u6587\u7ae0\uff0c\u8bb2\u7684\u975e\u5e38\u597d\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/","title":"Lecture 1 | AVL Trees & Splay Trees","text":"

    \u7ea6 7119 \u4e2a\u5b57 385 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 40 \u5206\u949f

    \u8bf4\u660e

    \u539f\u5148\u5b89\u6392\u5728\u8fd9\u4e00\u7ae0\u8282\u7684\u644a\u8fd8\u5206\u6790\u73b0\u5728\u88ab\u8fc1\u79fb\u5230\u4e86\u8fd9\u4e2a\u5730\u65b9\uff1aTopic 1 | Amortized Analysis\u3002

    \u9605\u8bfb\u6280\u5de7

    \u56e0\u4e3a\u6ca1\u6cd5\u5728\u8fd9\u91cc\u7528\u4ee3\u7801\u5199\u52a8\u753b\uff0c\u6240\u4ee5\u6211\u7528 Tab \u6a21\u62df\u4e86\u4e00\u4e0b\u52a8\u753b\u5e27\uff0c\u53ef\u4ee5\u624b\u52a8\u5207\u6362\u8fd9\u4e9b\u6807\u7b7e\u6765\u52a8\u6001\u89c2\u5bdf\u3002\u4e00\u822c\u8fd9\u79cd\u5185\u5bb9\u7684 Tab \u6807\u9898\u90fd\u4f1a\u662f Frame {}\u3002

    Frame 1Frame 2Frame 3

    Like

    Like this

    Like this!

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#avl-\u6811","title":"AVL \u6811","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/avl/

    \u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u4e00\u68f5\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5176\u5bf9\u70b9\u7684\u64cd\u4f5c\u4ee3\u4ef7\u4e3a \\(O(\\log n)\\)\u3002\u7136\u800c\u5728\u6700\u574f\u60c5\u51b5\u4e0b\uff0c\u5b83\u4f1a\u9000\u5316\u6210 \\(O(n)\\)\uff0c\u4f8b\u5982\u8fd9\u662f\u4e00\u68f5\u53ea\u6709\u5de6\u5b69\u5b50\u6811\u7684\u94fe\u578b\u4e8c\u53c9\u6811\uff0c\u90a3\u4e48\u64cd\u4f5c\u8fd9\u91cc\u552f\u4e00\u7684\u53f6\u5b69\u5b50\u8282\u70b9\u5c31\u662f \\(O(n)\\)\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e00\u68f5\u4e8c\u53c9\u6811\u7684\u7ef4\u62a4\u6210\u672c\u57fa\u672c\u4e0a\u4e0e\u5176\u9ad8\u5ea6\u6b63\u76f8\u5173\u3002\u56e0\u800c\u4e00\u4e2a\u5f88\u81ea\u7136\u7684\u60f3\u6cd5\u662f\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8ba9\u4e00\u68f5\u4e8c\u53c9\u6811\u597d\u7ef4\u62a4\uff0c\u90a3\u4e48\u5c31\u5e0c\u671b\u5b83\u7684\u9ad8\u5ea6\u5c3d\u53ef\u80fd\u4f4e\uff0c\u800c\u5728\u70b9\u6570\u56fa\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u79cd\u6734\u7d20\u7684\u601d\u60f3\u662f\u8ba9\u8282\u70b9\u5c3d\u53ef\u80fd\u201c\u5747\u5300\u201d\u5730\u5206\u5e03\u5728\u6811\u4e0a\u3002

    height of a tree

    \u6811\u7684\u9ad8\u5ea6(Height of Tree)\u7b49\u4e8e\u5176\u6839\u8282\u70b9\u5230\u53f6\u5b69\u5b50\u8282\u70b9\u7684\u82e5\u5e72\u8def\u5f84\u4e2d\uff0c\u6700\u5927\u7684\u8ddd\u79bb\uff08\u5373\u8fb9\u7684\u6570\u91cf\uff09\uff0c\u4e5f\u5c31\u662f\u6df1\u5ea6\u6700\u6df1\u7684\u8282\u70b9\u5230\u6839\u8282\u70b9\u5230\u8ddd\u79bb\u3002

    \u7279\u522b\u7684\uff0c\u4e00\u68f5\u7a7a\u6811\u7684\u9ad8\u5ea6\u4e3a -1\u3002

    \u8bf4\u7684\u901a\u4fd7\u4e00\u4e9b\uff0c\u5c31\u662f\u6811\u7684\u5c42\u6570\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#avl-\u6811_1","title":"AVL \u6811","text":"

    \u800c AVL Tree \u662f\u4e00\u79cd\u5e73\u8861(balanced)\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u901a\u8fc7\u300c\u9ad8\u5ea6\u300d\u8fd9\u4e2a\u91cf\uff0c\u5b9a\u4e49\u4e86\u300c\u5e73\u8861\u300d\u8fd9\u4ef6\u4e8b\u3002

    AVL Tree

    1. \u4e00\u4e2a\u7a7a\u4e8c\u53c9\u6811\u662f\u4e00\u4e2a AVL \u6811\uff1b
    2. \u5982\u679c\u4e8c\u53c9\u6811 \\(T\\) \u662f\u4e00\u4e2a AVL \u6811\uff0c\u5219\u5176\u5de6\u53f3\u5b69\u5b50\u6811 \\(T_l\\) \u548c \\(T_r\\) \u4e5f\u90fd\u5e94\u8be5\u662f AVL \u6811\uff0c\u4e14\u6709 \\(|h(T_l) - h(T_r)| \\leq 1\\)\uff1b

    Balance Factor

    \u4e00\u4e2a\u8282\u70b9\u7684\u5e73\u8861\u56e0\u5b50(Balance Factor, BF)\u7528\u6765\u63cf\u8ff0\u4e00\u4e2a\u8282\u70b9\u7684\u5e73\u8861\u72b6\u6001\uff0c\u5bf9\u4e8e\u8282\u70b9 \\(T_p\\)\uff0c\u5b83\u7684\u5de6\u5b69\u5b50\u6811\u4e3a \\(T_l\\)\uff0c\u53f3\u5b69\u5b50\u6811\u4e3a \\(T_r\\)\uff0c\u5219\uff1a

    \\[ BF(T_p) = h(T_l) - h(T_r) \\]

    \u6240\u4ee5\u4e0a\u9762\u7684\u7b2c 2 \u6761\u53c8\u53ef\u4ee5\u5199\u6210\uff1a

    \u8bf4\u7684\u901a\u4fd7\u4e00\u4e9b\u5c31\u662f\uff0cAVL \u6811\u7684\u6bcf\u4e00\u4e2a\u70b9\u90fd\u5e73\u8861\uff0c\u800c\u5e73\u8861\u4e0e\u5426\u53d6\u51b3\u4e8e\u8282\u70b9\u7684\u4e24\u4e2a\u5b69\u5b50\u6811\u5c42\u6570\u4e4b\u5dee\u662f\u5426\u8d85\u8fc7 1\u3002

    \u5728\u8fd9\u79cd\u5b9a\u4e49\u4e0b\uff0cAVL \u6811\u7684\u9ad8\u5ea6\u53ef\u4ee5\u8bc1\u660e\u4e3a \\(O(\\log N)\\)\uff0c\u8bc1\u660e\u5982\u4e0b\uff1a

    Height of AVL Trees

    graph TD;\nA((\"Root\"))\nB[/\"Left Subtree\"\\]\nC[/\"Right Subtree\"\\]\nA === B\nA === C

    \u6211\u4eec\u8bb0 \\(n_h\\) \u662f\u9ad8\u5ea6\u4e3a \\(h\\) \u7684 AVL \u6811\u6240\u5305\u542b\u7684\u6700\u5c11\u8282\u70b9\u6570\uff0c\u5219\u6709\u5982\u4e0b\u9012\u63a8\u5173\u7cfb\uff1a

    \\[ n_h = \\left\\{ \\begin{array}{l} 1 & (h = 0) \\\\ 2 & (h = 1) \\\\ n_{h-1} + n_{h-2} + 1 & (h > 1) \\end{array} \\right. \\]

    \u53d1\u73b0 \\(n_h + 1\\) \u7b26\u5408 Fibonacci \u6570\u5217\u7684\u9012\u63a8\u516c\u5f0f\uff08\u4f46\u662f\u521d\u59cb\u6761\u4ef6\u4e0d\u4e00\u6837\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u7528 Fibonacci \u5bf9\u5176\u8fdb\u884c\u4e00\u4e2a\u4f30\u8ba1\u3002

    \u800c\u5bf9\u4e8e\u5982\u4e0b Fibonacci \u6570\u5217\uff1a

    \\[ F_i = \\left\\{ \\begin{array}{l} 1 & (i = 1) \\\\ 1 & (i = 2) \\\\ F_{i-1} + F_{i-2} & (i > 2) \\end{array} \\right. \\]

    \u5176\u901a\u9879\u4e3a\uff1a

    \\[ \\begin{aligned} F_n &= \\frac{1}{\\sqrt{5}} \\left( \\left( \\frac{1 + \\sqrt{5}}{2} \\right)^n - \\left( \\frac{1 - \\sqrt{5}}{2} \\right)^n \\right) \\\\ &\\approx \\frac{1}{\\sqrt{5}} \\left( \\frac{1 + \\sqrt{5}}{2} \\right)^n \\\\ \\log{(F_n)} &\\approx n \\end{aligned} \\]

    \u800c \\(n_h + 1 \\approx F_{h+2}\\)\uff0c\u6240\u4ee5 \\(h \\approx \\log{(n_h)}\\)\uff0c\u4e5f\u5c31\u662f\u8bf4 \\(h \\approx \\log{N}\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u89c6\u89d2","title":"\u89c6\u89d2","text":"

    \u800c\u6211\u4eec\u8c08\u8bba AVL \u6811\u65f6\uff0c\u6211\u4eec\u5e0c\u671b\u4ee5\u4e00\u4e2a\u52a8\u6001\u7684\u89c6\u89d2\u6765\u8c08\u8bba AVL \u6811\uff0c\u5373\u8ba8\u8bba\uff1a\u67d0\u4e00\u68f5\u6811\u662f\u5426\u662f AVL \u6811\uff1b\u5728\u67d0\u4e2a\u64cd\u4f5c\u540e\uff0c\u5b83\u662f\u5426\u4ecd\u7136\u662f AVL \u6811\uff1b\u82e5\u539f\u5148\u662f\uff0c\u800c\u7ecf\u8fc7\u64cd\u4f5c\u540e\u4e0d\u518d\u662f\uff0c\u90a3\u8981\u5982\u4f55\u5c06\u5b83\u91cd\u65b0\u53d8\u4e3a AVL \u6811\u3002

    \u4ee5\u4e0a\u4e09\u4e2a\u6b65\u9aa4\u662f\u7b80\u5316\u540e\u7684\u5efa\u6a21\uff0c\u5b83\u6210\u4e3a\u6211\u4eec\u89e3\u51b3\u5176\u4ed6\u95ee\u9898\u7684\u6700\u5c0f\u5355\u5143\u548c\u57fa\u7840\u3002

    \u6240\u4ee5\u5728\u8fd9\u79cd\u6a21\u578b\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e24\u4e2a\u4e1c\u897f\uff1a

    Trouble Maker & Trouble Finder

    \u4ee5 \ud83c\udf30 \u6765\u8bf4\u660e\u3002

    Frame 1Frame 2

    \u4e0b\u56fe\u4e3a\u4e00\u4e2a AVL \u6811\uff1a

    graph TD;\nA((\"8, BF=1\"))\nB((\"4, BF=0\"))\nC((\"9, BF=0\"))\nD((\"2, BF=0\"))\nE((\"6, BF=0\"))\nA === B\nA === C\nB === D\nB === E

    \u73b0\u5728\u6211\u4eec\u63d2\u5165 5\uff1a

    graph TD;\nA((\"8, BF=2\"))\nB((\"4, BF=-1\"))\nC((\"9, BF=0\"))\nD((\"2, BF=0\"))\nE((\"6, BF=1\"))\nF((\"5, BF=0\"))\nA === B\nA === C\nB === D\nB === E\nE === F\nE === NULL

    \u6211\u4eec\u53d1\u73b0\uff0c\u6b64\u65f6 8 \u7684\u300c\u5e73\u8861\u56e0\u5b50\u300d\u53d8\u6210\u4e862\uff0c\u4e0d\u518d\u7b26\u5408 AVL \u6811\u7684\u8981\u6c42\uff0c\u800c\u8fd9\u4e00\u5207\u90fd\u662f 5 \u7684\u63d2\u5165\u5bfc\u81f4\u7684\u2014\u2014\u4e8e\u662f\u6211\u4eec\u79f0\u50cf\u8fd9\u91cc\u7684 8 \u4e00\u6837\uff0c\u7531\u4e8e\u67d0\u4e2a\u70b9\u7684\u63d2\u5165\uff0c\u5176\u300c\u5e73\u8861\u56e0\u5b50\u300d\u4e0d\u518d\u7b26\u5408\u8981\u6c42\u7684\u70b9\uff0c\u4e3a Trouble Finder\uff1b\u800c\u50cf\u8fd9\u91cc\u7684 5 \u4e00\u6837\uff0c\u5bfc\u81f4 Trouble Finder \u51fa\u73b0\u7684\u70b9\uff0c\u88ab\u79f0\u4e4b\u4e3a Trouble Maker\u3002

    \u5f62\u8c61\u5730\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\u5c31\u662f\uff0c\u5728\u52a8\u6001\u63d2\u5165 5 \u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51fa\u73b0\u4e86\u4e00\u4e2a \"Trouble\"\uff0c\u5bfc\u81f4\u8fd9\u4e2a\u6811\u4e0d\u518d\u662f AVL \u6811\uff0c\u800c 5 \u662f\u8fd9\u4e2a \"Trouble\" \u7684 \"Maker\"\uff0c8 \u662f \"Finder\"\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u672c\u5c0f\u8282\u6240\u9700\u8981\u8bb2\u7684\u5185\u5bb9\u5c31\u662f#\u89c6\u89d2\u4e2d\u63d0\u5230\u7684\u201c\u91cd\u65b0\u53d8\u4e3a AVL \u6811\u201d\u8fd9\u4e00\u89c6\u89d2\uff0c\u4e5f\u5c31\u662f AVL \u6811\u7684\u7ef4\u62a4\u3002

    \u9996\u5148\uff0c \u6211\u4eec\u9700\u8981\u5bf9 AVL \u6811\u7684\u7834\u574f\u60c5\u51b5\u8fdb\u884c\u5206\u7c7b\uff0c\u6839\u636e \"Trouble Finder\"\u3001\"Related Trouble Finder's Child\"\u3001\"Trouble Maker\"\u8fd9\u4e09\u4e2a\u70b9\u7684\u76f8\u5bf9\u5173\u7cfb\uff0c\u5206\u4e3a LL\u3001RR\u3001LR\u3001RL \u56db\u79cd\uff1a

    \u540c\u5fc3\u5706\u8868\u793a\u8fd9\u4e2a\u70b9\u662f\u9700\u8981\u6211\u4eec\u5728\u540e\u7eed\u64cd\u4f5c\u4e2d\u5173\u6ce8\u7684\u3002

    \u6b64\u5916\uff0c\u867d\u7136\u5b9e\u9645\u60c5\u51b5\u4e0b\u53ef\u80fd\u51fa\u73b0\u591a\u4e2a Trouble Finder\uff0c\u4f46\u662f\u6211\u4eec\u53ea\u5173\u6ce8\u4ee5\u300c\u8ddd\u79bb\u6848\u53d1\u73b0\u573a\u6700\u8fd1\u7684 Trouble Finder\u300d\u4e3a\u6839\u7684\u5b69\u5b50\u6811\uff08\u8fd9\u53e5\u8bdd\u975e\u5e38\u91cd\u8981\uff09\u3002

    LLRRLRRL
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B(((\"Left\\nChild\")))\n    C((\"Right\\nChild\"))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA === H\n    B === E === EA\n    C === F === FA\n    C === G === GA
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B((\"Left\\nChild\"))\n    C(((\"Right\\nChild\")))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA\n    C === F === FA\n    C === G === GA === H
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B(((\"Left\\nChild\")))\n    C((\"Right\\nChild\"))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E(((\"L Right\\nChild\")))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA === H\n    C === F === FA\n    C === G === GA
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B((\"Left\\nChild\"))\n    C(((\"Right\\nChild\")))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F(((\"R Left\\nChild\")))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA\n    C === F === FA === H\n    C === G === GA

    \u7a0d\u4f5c\u89e3\u91ca\uff0c\u4f8b\u5982 LR\uff0c\u8868\u793a\u7684\u662f Trouble Maker \u5728 Trouble Finder \u7684 L \u5b69\u5b50\u8282\u70b9\u7684 R \u5b69\u5b50\u6811\u4e2d\u3002

    \u53e6\u5916\uff0c\u5bf9\u4e8e\u6211\u53ea\u5728 LR \u548c RL \u4e2d\u7740\u91cd\u4e8c\u7ea7\u5b69\u5b50\u8282\u70b9\uff0c\u5e76\u4e0d\u662f\u7b14\u8bef\u3002\u4e4b\u540e\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#ll--rr","title":"LL & RR","text":"

    \u5e9f\u8bdd

    \u5927\u90e8\u5206\u6559\u6750\u90fd\u503e\u5411\u4e8e\u7ee7\u7eed\u7528\u201c\u65cb\u8f6c\u201d\u6765\u6982\u62ec\u8fd9\u4e9b\u65b9\u6cd5\uff0c\u786e\u5b9e\u5176\u5b9e\u4ece\u62bd\u8c61\u89d2\u5ea6\u6765\u8bb2\u81f3\u5c11 LL \u548c RR \u90e8\u5206\u4e5f\u8fd8\u662f\u50cf\u7684\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u8fd9\u5e76\u4e0d\u5229\u4e8e\u8bb0\u5fc6\u548c\u7406\u89e3\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u5c24\u5176\u662f\u5bf9\u4e8e LR \u548c RL \u7684\u90e8\u5206\u3002

    \u6240\u4ee5\u5728 LL \u548c RR \u90e8\u5206\uff0c\u6211\u8fd8\u662f\u4f1a\u5148\u4ecb\u7ecd\u4e00\u4e0b\u6bd4\u8f83\u4f20\u7edf\u7684\uff0c\u7528\u201c\u65cb\u8f6c\u201d\u7684\u65b9\u5f0f\u6765\u7406\u89e3\uff0c\u4e4b\u540e\u6211\u5c06\u5c1d\u8bd5\u7740\u7528\u6211\u81ea\u5df1\u7684\u601d\u8def\u6765\u8bb2\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u65cb\u8f6c\u89c6\u89d2","title":"\u201c\u65cb\u8f6c\u201d\u89c6\u89d2","text":"

    LL \u548c RR \u8fd9\u4e24\u79cd\u60c5\u51b5\u76f8\u5bf9\u76f4\u89c2\u3002\u7531\u4e8e\u5b83\u4eec\u7684\u64cd\u4f5c\u662f\u5bf9\u79f0\u7684\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u4ee5 LL \u4e3a\u4f8b\u3002

        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        subgraph SA[\"New Left Subtree\"]\n\n            subgraph SB[\"New L Left Subtree\"]\n                D[/\"L Left Subtree\"\\]\n                H((\"Trouble\\nMaker\"))\n            end\n\n            B(((\"Left\\nChild\")))\n            E[/\"L Right Subtree\"\\]\n        end\n\n        A === B\n        A === C\n        B === D === H\n        B === E

    \u6839\u636e\u76f8\u5173\u6027\u8d28\uff0c\u6211\u4eec\u5f97\u5230\u8fd9\u4e2a\u6a21\u578b\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    \u4e00\u4e9b\u6027\u8d28

    1. \\(BF(\\text{Trouble Finder}) = h(\\text{New Left Subtree}) - h(\\text{Right Subtree}) = 2\\)\uff1b
    2. \\(h(\\text{New L Left Subtree}) - h(\\text{L Right Subtree}) = 1\\)\uff1b
      • \u5982\u679c\u6b64\u5dee\u4e3a 0\uff0c\u5219\u4e0d\u5e94\u5f53\u6210\u4e3a Trouble Maker\uff0c\u82e5\u6b64\u5dee\u4e3a 2\uff0c\u5219 Left Child \u5e94\u5f53\u4e3a Trouble Finder\uff1b

    \u73b0\u5728\u6211\u4eec\u5e0c\u671b\u5728\u4fdd\u7559\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u4e0b\uff0c\u8981\u8ba9 \\(|BF(\\text{Trouble Finder})|\\) \u53d8\u5c0f\uff0c\u4e00\u4e2a\u5f88\u81ea\u7136\u7684\u60f3\u6cd5\u5c31\u662f\u8ba9 \\(h(\\text{New Left Subtree})\\) \u53bb -1\uff0c\u8ba9 \\(h(\\text{Right Subtree})\\) \u53bb +1\u3002

    \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u8fd9\u6837\u7684\u64cd\u4f5c\u521a\u597d\uff1a

    LL Single Rotation

    \u5728 Frame 2 \u548c Frame 3 \u4e4b\u95f4\u6dfb\u52a0\u7684\u7ec6\u7ebf\u662f\u4e3a\u4e86\u8868\u793a\u8fd9\u91cc L Right Subtree \u7684\u8f6c\u79fb\u65b9\u6cd5\uff0c\u8ba9 2 ~ 3 \u5e27\u7684\u201c\u65cb\u8f6c\u201d\u8fc7\u7a0b\u4e2d\u66f4\u52a0\u6e05\u6670\u3002

    \u6b64\u5916\uff0c\u8fd9\u91cc\u8981\u7d20\u7684\u547d\u540d\u90fd\u662f\u57fa\u4e8e Frame 1 \u7684\uff0c\u5bf9\u4e8e Frame 4 \u6765\u8bf4 L Right Subtree \u663e\u7136\u5df2\u7ecf\u4e0d\u662f L Right Subtree \u4e86\u3002

    Frame 1Frame 2Frame 3Frame 4
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        A === B\n        A --- E\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B --- E\n        B === A\n        A === E\n        A === C\n
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B === A\n        A === E\n        A === C\n

    \u4f60\u751a\u81f3\u80fd\u4ece\u6574\u4e2a\u6846\u5728 2 ~ 3 \u5e27\u7684\u53d8\u77ed\u611f\u53d7\u5230\u8fd9\u4e2a\u6811\u7684\u9ad8\u5ea6\u51cf\u5c11\u4e86x\uff08\u9003\uff09

    \u90a3\u4e48\u8fd8\u6709\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5982\u4f55\u8bc1\u660e\u8fd9\u6837\u53d8\u6362\u80fd\u591f\u4fdd\u6301 AVL \u7684\u6027\u8d28\u5462\uff1f

    \u6211\u4e2a\u4eba\u8ba4\u4e3a\u4e3b\u8981\u6709\u4e24\u4e2a\u7ef4\u5ea6\uff0c\u4e00\u662f\u4fdd\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u4e8c\u662f\u4fdd\u6301\u5e73\u8861\u7684\u6027\u8d28\uff0c\u6211\u7684\u8bc1\u660e\u5185\u5bb9\u6298\u53e0\u8d77\u6765\u4e86\uff0c\u5efa\u8bae\u8bfb\u8005\u53ef\u4ee5\u5148\u81ea\u5df1\u601d\u8003\u4e00\u4e0b\u518d\u5c55\u5f00\u770b\u770b\u6211\u7684\u60f3\u6cd5\u3002

    \u4e8c\u53c9\u641c\u7d22\u6811\u6027\u8d28\u7684\u4fdd\u6301

    \u4e0d\u77e5\u9053\u8bfb\u8005\u662f\u5426\u53d1\u73b0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u6392\u5217\u5f97\u5f53\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5982\u679c\u6211\u4ece\u5de6\u5230\u53f3\uff0c\u4f7f\u7528\u4e00\u6761\u7ad6\u76f4\u7684\u626b\u63cf\u7ebf\u626b\u63cf\u6574\u4e2a\u6811\uff0c\u5c06\u4f1a\u5f97\u5230\u4e00\u4e2a\u5355\u8c03\u5e8f\u5217\uff0c\u8fd9\u4e5f\u6b63\u5bf9\u5e94\u7740\u8fd9\u4e2a\u4e8c\u53c9\u641c\u7d22\u6811\u6240\u7ef4\u62a4\u7684\u6709\u5e8f\u6570\u5217\u3002

    \u57fa\u4e8e\u8fd9\u79cd\u8bba\u8c03\uff0c\u518d\u56de\u5934\u770b\u4e0a\u9762\u90a3\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u751a\u81f3\u662f\u89c2\u5bdf\u6211\u5728 2 ~ 3 \u5e27\u753b\u51fa\u6765\u7684\u8fd9\u4e2a\u4e09\u89d2\u5f62\u7684\u65cb\u8f6c\uff0c\u5c31\u4f1a\u53d1\u73b0\u8fd9\u79cd\u65cb\u8f6c\u5b9e\u9645\u4e0a\u53ea\u662f\u5728\u5c06\u8282\u70b9\u4e0a\u4e0b\u79fb\u52a8\uff0c\u6240\u4ee5\u4e0d\u6539\u53d8\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u3002

    \u5e73\u8861\u7684\u4fdd\u6301

    \u8ba9\u6211\u4eec\u5148\u56de\u987e\u4e00\u4e0b\u5728\u4e0a\u9762\u7ed9\u51fa\u7684\u4e00\u4e9b\u6027\u8d28\u4e2d\u7684\u7b2c 2 \u6761\uff1a \\(h(\\text{New L Left Subtree}) - h(\\text{L Right Subtree}) = 1\\)\u3002

    \u5728\u4ed4\u7ec6\u601d\u8003\u6574\u4e2a\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\u6bcf\u4e00\u4e2a Subtree \u7684\u9ad8\u5ea6\u7684\u53d8\u5316\uff0c\u5373\u53ef\u5f97\u5230\u8bc1\u660e\u3002

    \u800c RR Single Rotation \u5b8c\u5168\u5bf9\u79f0\uff0c\u6240\u4ee5\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u6362\u6839\u89c6\u89d2","title":"\u201c\u6362\u6839\u201d\u89c6\u89d2","text":"

    \u73b0\u5728\u6211\u60f3\u5c1d\u8bd5\u7740\u7528\u6211\u81ea\u5df1\u7684\u65b9\u5f0f\u6765\u7406\u89e3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u9996\u5148\u8ba9\u6211\u4eec\u4eba\u529b\u52a8\u753b\u4e00\u4e0b\u8fd9\u4e2a\u8fc7\u7a0b\uff08\u5212\u6389\uff09\uff1a

    LL Single Rotation

    \u6b64\u5916\uff0c\u8fd9\u91cc\u8981\u7d20\u7684\u547d\u540d\u90fd\u662f\u57fa\u4e8e Frame 1 \u7684\uff0c\u5bf9\u4e8e Frame 4 \u6765\u8bf4 L Right Subtree \u663e\u7136\u5df2\u7ecf\u4e0d\u662f L Right Subtree \u4e86\u3002

    Frame 1Frame 2Frame 3Frame 4Frame 5
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A --- B\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        B(((\"Left\\nChild\")))\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        B(((\"Left\\nChild\")))\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === H\n        A === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B === A\n        A === E\n        A === C\n

    \u9996\u5148\uff0c\u6211\u4eec\u9047\u5230\u7684\u95ee\u9898\u662f\u4ec0\u4e48\uff1f\u662f Trouble Maker \u8fdb\u6765\u4ee5\u540e\uff0cTrouble Finder \u53d1\u73b0 \\(h(T_l) - h(T_r) = 2\\)\u4e86\uff0c\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\u5c31\u662f\u5de6\u5b69\u5b50\u6811\u592a\u9ad8\u4e86\uff0c\u7136\u800c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5de6\u5b69\u5b50\u6811\u4f9d\u7136\u8fd8\u7ad9\u5728\u4e00\u4e2a\u53f0\u5b50\uff08Trouble Finder\uff09\u4e0a\u548c Trouble Finder \u6bd4\u8eab\u9ad8\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u5b83\u4ece\u53f0\u5b50\u4e0a\u8bf7\u4e0b\u6765\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u65e2\u7136\u5de6\u5b69\u5b50\u6811\u592a\u9ad8\u4e86\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4e0d\u5e0c\u671b\u8ba9\u5b83\u518d\u6210\u4e3a\u8c01\u7684\u5b69\u5b50\u6811\uff0c\u56e0\u4e3a\u6210\u4e3a\u8c01\u7684\u5b69\u5b50\u6811\u5fc5\u7136\u610f\u5473\u7740\u8fd9\u6761\u8def\u5f84\u4f1a\u66f4\u957f\u3002

    \u90a3\u4e48\u73b0\u5728\u6211\u4eec\u628a\u5b83\u4ece\u53f0\u5b50\u4e0a\u8bf7\u4e0b\u6765\uff0c\u4e5f\u5c31\u662f\u8bf4\u5272\u88c2\u5b83\u548c Trouble Finder \u7684\u4eb2\u5b50\u5173\u7cfb\uff08\u5bf9\u5e94 Frame 2\uff09\u8ba9\u5b83\u4eec\u540c\u53f0\u201c\u5bf9\u6297\u201d\uff08\u8fd9\u4e00\u6b65\u5728 LL \u548c RR \u53ef\u80fd\u663e\u5f97\u6bd4\u8f83\u591a\u4f59\uff0c\u4f46\u662f\u5728 LR \u548c RL \u5c31\u4f1a\u8ba9\u95ee\u9898\u6e05\u6670\u5f88\u591a\uff09\u3002

    \u7136\u800c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u8ba9\u8fd9\u4e2a\u68ee\u6797\u91cd\u65b0\u53d8\u56de\u4e00\u4e2a\u6811\uff0c\u6240\u4ee5\u5c31\u9700\u8981\u91cd\u65b0\u4ece\u91cc\u9762\u627e\u5230\u6839\u8282\u70b9\uff0c\u663e\u7136\uff0c\u53ea\u80fd\u9009\u62e9 Trouble Finder \u65c1\u8fb9 \u7684 Left Child\u3002\u4f46\u662f\u4e3a\u4e86\u7ee7\u7eed\u7ef4\u62a4\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06 L Right Subtree \u79fb\u690d\u5230 Trouble Finder \u5fc5\u5b9a\u7a7a\u7f3a\uff08\u56e0\u4e3a\u8fd9\u91cc\u539f\u5148\u662f Left Child\uff09\u7684\u5de6\u6307\u9488\u4e0a\u3002

    OK\uff0c\u4f60\u53ef\u80fd\u89c9\u5f97\u8fd9\u4e2a\u89e3\u91ca\u5bf9\u4e8e LL Single Rotation \u6765\u8bf4\u663e\u5f97\u5341\u5206\u591a\u6b64\u4e00\u4e3e\uff0c\u4f46\u662f\u8fd9\u90fd\u662f\u4e3a\u4e86\u7ed9\u540e\u9762\u505a\u7684\u94fa\u57ab\uff0c\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u770b\u8d77\u6765\u7e41\u7410\u5197\u4f59\uff0c\u4f46\u662f\u5df2\u7ecf\u8db3\u4ee5\u89e3\u91ca\u539f\u5148\u7684 Single Rotation \u65e0\u6cd5\u89e3\u91ca\u7684 LR & RL \u64cd\u4f5c\u65b9\u6cd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#lr--rl","title":"LR & RL","text":"

    \u9996\u5148\u6211\u4eec\u9700\u8981\u77e5\u9053\u4e3a\u4ec0\u4e48\u4e4b\u524d\u7684\u65b9\u6cd5\u4e0d\u884c\uff0c\u4e5f\u662f\u6211\u89c9\u5f97\u201c\u65cb\u8f6c\u201d\u8fd9\u4e2a\u505a\u6cd5\u5728\u8fd9\u4e2a\u63a8\u8fdb\u8fc7\u7a0b\u4e2d\u6bd4\u8f83\u5272\u88c2\u7684\u5730\u65b9\uff1a\uff08\u5bf9\u7167 #\u65cb\u8f6c\u89c6\u89d2 \u7684\u5185\u5bb9\u9605\u8bfb\uff09\u6211\u4eec\u53d1\u73b0\uff0c\u7531\u4e8e LL \u4e2d\u7684 Trouble Maker \u5728\u5de6\u4fa7\u5b69\u5b50\u6811\u4e0a\uff0c\u6240\u4ee5\u5728\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\uff0c\u76f8\u5f53\u4e8e\u628a\u5b83\u201c\u62fd\u201d\u4e0a\u6765\u4e86\u3002\u7136\u800c\u5bf9\u4e8e L Right Subtree\uff0c\u65e0\u8bba\u662f\u65cb\u8f6c\u524d\u8fd8\u662f\u65cb\u8f6c\u540e\uff0c\u4e3a\u4e86\u7ef4\u62a4\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u5b83\u90fd\u88ab\u63a5\u5728\u4e86\u6df1\u5ea6\u4e3a 1 \u7684\u8282\u70b9\u4e0a\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4 L Right Subtree \u8d21\u732e\u7684\u9ad8\u5ea6\u5e76\u6ca1\u6709\u6539\u53d8\u3002\u5bf9\u4e8e RL \u7684\u60c5\u51b5\u4e5f\u662f\u540c\u7406\u7684\u3002\u6240\u4ee5\u6211\u4eec\u5e76\u4e0d\u80fd\u4f7f\u7528 LL Single Rotation \u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u5173\u4e8e\u65cb\u8f6c\u89c6\u89d2

    \u5982\u679c\u4ece\u65cb\u8f6c\u89c6\u89d2\u6765\u8003\u8651\uff0c\u786e\u5b9e\u4e5f\u80fd\u8003\u8651\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u4f46\u4e00\u65b9\u9762\u8fc7\u4e8e\u590d\u6742\uff0c\u4e00\u65b9\u9762\u5b9e\u9645\u5b9e\u73b0\u8fc7\u7a0b\u4e2d\u4e5f\u5b8c\u5168\u53ef\u4ee5\u88ab\u4f18\u5316\uff0c\u6240\u4ee5\u6211\u5e0c\u671b\u4f7f\u7528\u6362\u6839\u7684\u89c6\u89d2\u6765\u7406\u89e3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u90a3\u4e48\u6211\u4eec\u6362\u4e00\u4e2a\u601d\u8def\uff0c\u7528\u201c\u6362\u6839\u201d\u89c6\u89d2\u6765\u770b\u5f85\u8fd9\u4e2a\u95ee\u9898\uff1a

    LR Rotation

    \u8fd9\u91cc\u4e24\u4e2a Subtree \u63a5\u5230\u540c\u4e00\u4e2a Trouble Maker \u7684\u610f\u601d\u662f Trouble Maker \u53ef\u4ee5\u51fa\u73b0\u5728\u4e24\u8005\u4efb\u4e00\u4e2d\u3002

    Frame 1Frame 2Frame 3Frame 4Frame 5
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === DA\n        B === E === EA --- H\n        E === EB --- H
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A --- B\n        A === C\n        B === D === DA\n        B --- E === EA --- H\n        E === EB --- H
        flowchart TD\n\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === DA\n        E === EA --- H\n        E === EB --- H
        flowchart TD\n\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === DA\n        E --- EA --- H\n        E --- EB --- H
        flowchart TD\n\n        D((\"L Left\\nChild\"))\n        B(((\"Left\\nChild\")))\n        DA[/\"L Left Subtree\"\\]\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        E === B\n        E === A\n        B === D === DA\n        B === EA --- H\n        A === EB --- H\n        A === C
    \u5173\u4e8e\u8bb0\u5fc6

    \u8bb0\u5fc6\u8fd9\u4e2a\u64cd\u4f5c\u5982\u4f55\u505a\u7684\u8bdd\uff0c\u6211\u7684\u8bb0\u5fc6\u65b9\u6cd5\u662f\u8fd9\u6837\u7684\uff1a

    Frame 1Frame 2Frame 3Frame 4
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === DA\n        B === E === EA --- H\n        E === EB --- H
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A --- B\n        A --- E\n        A === C\n        B === D === DA\n        B --- E === EA --- H\n        E === EB --- H
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        C[/\"Right Subtree\"\\]\n\n        A --- B\n        E --- B \n        E --- A\n        B === D === DA\n        B --- EA --- H\n        A --- EB --- H\n        A === C
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        C[/\"Right Subtree\"\\]\n\n        E --- B \n        E --- A\n        B === D === DA\n        B --- EA --- H\n        A --- EB --- H\n        A === C

    \u7528\u8bed\u8a00\u6982\u62ec\u5c31\u662f\uff0c\u627e\u5230\u5173\u952e\u7684\u90a3\u4e09\u4e2a\u70b9\uff0c\u7136\u540e\u628a\u6700\u4e0b\u9762\u7684\u9876\u5230\u4e0a\u9762\u53bb\uff0c\u5269\u4e0b\u4e24\u4e2a\u4f5c\u4e3a\u5de6\u53f3\u5b69\u5b50\u6811\uff0c\u539f\u5148\u7684\u90a3\u4e2a\u70b9\u7684\u5de6\u53f3\u5b69\u5b50\u6811\u5219\u5bf9\u5e94\u5730\uff0c\u5de6\u5b69\u5b50\u6811\u63a5\u5230\u5de6\u8fb9\u7a7a\u7f3a\u7684\u53f3\u5b69\u5b50\u6811\u4e0a\uff0c\u53f3\u5b69\u5b50\u6811\u63a5\u5230\u53f3\u8fb9\u7a7a\u7f3a\u7684\u5de6\u5b69\u5b50\u6811\u4e0a\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u5176\u4ed6\u95ee\u9898","title":"\u5176\u4ed6\u95ee\u9898","text":"

    \u5982\u679c\u4e00\u4e2a Trouble \u4ea7\u751f\u540e\uff0c\u51fa\u73b0\u4e86\u591a\u4e2a Trouble Finder\uff0c\u8be5\u5982\u4f55\u5904\u7406\uff1f

    \u9996\u5148\uff0c\u8bf7\u56de\u987e\u4e00\u4e0b #\u64cd\u4f5c \u4e2d\u88ab\u52a0\u7c97\u7684\u8fd9\u4e00\u53e5\u8bdd\uff0c\u300c\u4ee5\u300e\u8ddd\u79bb\u6848\u53d1\u73b0\u573a\u6700\u8fd1\u7684 Trouble Finder\u300f\u4e3a\u6839\u7684\u5b69\u5b50\u6811\u300d\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u73b0\u5728\u5df2\u7ecf\u6709\u4e86\u89e3\u51b3\u6700\u8fd1\u7684 Trouble Finder \u7684\u65b9\u6848\u3002

    \u611f\u6027\u7684\u601d\u8003\uff0cAVL \u7684\u201c\u5e73\u8861\u201d\u53ef\u4ee5\u7531\u9012\u5f52\u5f62\u5f0f\u5b9a\u4e49\uff0c\u5177\u4f53\u6765\u8bf4\u8861\u91cf\u7684\u662f\u5de6\u53f3\u5b69\u5b50\u6811\u7684\u201c\u9ad8\u5ea6\u201d\u5dee\u3002\u5f53\u6211\u4eec\u89e3\u51b3\u4e86\u4e00\u4e2a Trouble Finder\uff0c\u610f\u5473\u7740\u6211\u4eec\u8ba9 Trouble Finder \u7684\u6700\u9ad8\u7684\u90a3\u4e2a\u5b69\u5b50\u6811\u9ad8\u5ea6 -1\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u4ee5 Trouble Finder \u4e3a\u6839\u7684\u90a3\u4e2a\u5b69\u5b50\u6811\u9ad8\u5ea6 -1\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u5176\u6240\u6709\u7236\u8282\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u90fd\u4f1a\u76f8\u5e94\u5730\u53d8\u5316\u3002

    \u4e00\u4e2a Trouble \u5f53\u4e14\u4ec5\u6709\u4e00\u4e2a Trouble Maker\uff0c\u800c\u4e14\u5b83\u5fc5\u5b9a\u662f Trouble Finder \u6240\u5173\u6ce8\u7684\u90a3\u4e2a\u201c\u6700\u957f\u8def\u5f84\u201d\u7684\u7aef\u70b9\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6240\u6709\u7684\u5b50 Trouble Finder \u90fd\u5728\u5bf9\u5e94\u7684\u7236 Trouble Finder \u7684\u201c\u6700\u957f\u8def\u5f84\u201d\u4e0a\u3002\u800c\u73b0\u5728\u6211\u4eec\u8ba9\u5b50 Trouble Finder \u552f\u4e00\uff08\u5982\u679c\u4e0d\u552f\u4e00\uff0c\u90a3\u5728\u8fd9\u4e2a Trouble Maker \u5230\u6765\u4e4b\u524d\u5c31\u5df2\u7ecf\u5b58\u5728 Trouble \u4e86\uff09\u7684\u6700\u957f\u8def\u5f84\u4e5f\u5e94\u5f53\u4f1a -1\u3002\u800c\u8fd9\u5fc5\u5c06\u5bfc\u81f4\u5176\u5e73\u8861\u56e0\u5b50\u7684\u7edd\u5bf9\u503c -1\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#splay-\u6811","title":"Splay \u6811","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/splay/

    Splay \u6811\uff0c\u5373\u4f38\u5c55\u6811\uff0c\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\u548c AVL \u6811\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7 Splay \u6811\u5e0c\u671b\u8fbe\u5230\u7684\u76ee\u6807\u662f\u5728\u644a\u8fd8(Amortized)\u590d\u6742\u5ea6\\(O(\\log N)\\)\u7684\u60c5\u51b5\u4e0b\u5b8c\u6210\u5927\u90e8\u5206\u5bf9\u70b9\u64cd\u4f5c\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u4e3a\u4f7f AVL \u4fdd\u6301\u5e73\u8861\uff0c\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4ece\u6839\u8282\u70b9\u5230 Trouble Maker \u8fd9\u6761\u8def\u5f84\u4e0a\u6240\u6709\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u3002\u800c Splay \u5219\u4e0d\u518d\u7ef4\u62a4\u8fd9\u4e9b\u4fe1\u606f\uff0c\u8fd9\u610f\u5473\u7740\u6211\u4eec\u65e0\u6cd5\u4fdd\u8bc1 Splay \u6811\u7684\u72b6\u6001\u90fd\u662f\u5e73\u8861\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u5b83\u5c3d\u53ef\u80fd\u5e73\u8861\u3002\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u5bf9\u4e8e \\(M\\) \u6b21\u4efb\u610f\u64cd\u4f5c\uff0c\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(M\\log N)\\)\uff0c\u5747\u644a\u4e0b\u6765\u8fd9 \\(M\\) \u4e2a\u64cd\u4f5c\u6bcf\u4e00\u4e2a\u90fd\u9700\u8981 \\(O(\\log N)\\)\u3002

    \u5bf9\u4e8e\u4e00\u4e2a\u6811\uff0c\u6211\u4eec\u5bf9\u5176\u8282\u70b9\u8fdb\u884c\u7684\u64cd\u4f5c\u53ef\u80fd\u662f\uff1a\u589e\u70b9\u3001\u5220\u70b9\u3001\u6539\u70b9\u3001\u67e5\u70b9\u7b49\u7b49\uff0c\u800c\u4e0d\u540c\u7c7b\u578b\u7684\u64cd\u4f5c\u5f00\u9500\u53ef\u80fd\u4e0d\u5c3d\u76f8\u540c\u3002\u7b80\u5355\u7684\u8ba1\u7b97\u5176\u5e73\u5747\u503c\u5219\u5ffd\u7565\u4e86\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u4e92\u76f8\u7684\u5f71\u54cd\u6216\u8005\u662f\u64cd\u4f5c\u9891\u7387\u7684\u95ee\u9898\uff0c\u6240\u4ee5\u6211\u4eec\u8fd9\u91cc\u4f7f\u7528\u644a\u8fd8\u590d\u6742\u5ea6\u6765\u63cf\u8ff0\u5176\u6548\u7387\u3002

    \u5173\u4e8e\u644a\u8fd8\u7684\u95ee\u9898\u6211\u4eec\u8fd8\u4f1a\u5728\u4e4b\u540e\u8fdb\u4e00\u6b65\u6df1\u5165\u3002

    \u90a3\u4e48\u8bf4\u4e86\u8fd9\u4e48\u591a\uff0cSplay \u662f\u600e\u4e48\u5b9e\u73b0\u8fd9\u4e00\u76ee\u6807\u7684\u5462\uff1f

    Splay \u7684\u6838\u5fc3\u601d\u60f3\u5c31\u662f\uff0c\u6bcf\u5f53\u6211\u4eec\u8bbf\u95ee\u4e00\u4e2a\u8282\u70b9\uff08\u6bd4\u5982\u67e5\u8be2\u67d0\u4e2a\u70b9\u3001\u63d2\u5165\u67d0\u4e2a\u70b9\uff0c\u751a\u81f3\u662f\u5220\u9664\u67d0\u4e2a\u70b9\uff09\uff0c\u6211\u4eec\u5c31\u901a\u8fc7\u4e00\u7cfb\u5217\u64cd\u4f5c\u5c06\u76ee\u6807\u70b9\u8f6c\u79fb\u5230\u6839\u90e8\uff0c\u5f62\u8c61\u4e0a\u7406\u89e3\u5c31\u662f\u4e0d\u65ad\u65cb\u8f6c\u6574\u4e2a\u6811\u7684\u6784\u9020\uff0c\u77e5\u9053\u628a\u70b9\u8f6c\u5230\u6839\u90e8\u3002

    \u4f8b\u5982\u6211\u4eec\u67e5\u8be2\u70b9 \\(k_1\\)\uff0c\u5219\u4f1a\u901a\u8fc7\u65cb\u8f6c\u5c06\u5b83\u8f6c\u5230\u6839\u3002

    Frame 1Frame 2Frame 3

    \u53ef\u4ee5\u53d1\u73b0\uff0cFrame 1 ~ 2 \u5c31\u662f\u6211\u4eec\u524d\u9762\u63d0\u5230\u8fc7\u7684 LR Rotation\uff0c\u800c Frame 2 ~ 3 \u5c31\u662f\u7ecf\u8fc7\u4e86\u4e24\u6b21 LL Rotation\u3002\u5f53\u7136\uff0c\u5728 Splay \u91cc\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u6709\u4e86\u65b0\u7684\u540d\u5b57\u3002

    \u8fd9\u4e2a\u4f8b\u5b50\u53ea\u662f\u4e3a\u4e86\u7ed9\u8bfb\u8005\u4e00\u4e2a\u521d\u59cb\u5370\u8c61\uff0c\u4e4b\u540e\u6211\u4eec\u5c06\u66f4\u8be6\u7ec6\u3001\u51c6\u786e\u7684\u4ecb\u7ecd\u64cd\u4f5c\u3002

    \uff08\u6ca1\u73a9\u8fc7\u53ef\u80fd\u542c\u4e0d\u592a\u61c2\uff09\u4e0d\u77e5\u9053\u5927\u5bb6\u6709\u6ca1\u6709\u73a9\u8fc7\u90a3\u79cd\u7535\u5b50\u6e38\u620f\uff0c\u5c31\u662f\u6709\u597d\u591a\u8f6c\u76d8\uff0c\u76f8\u90bb\u8f6c\u76d8\u4e4b\u95f4\u6709\u4ea4\u754c\u5904\uff0c\u8fd9\u4e9b\u4ea4\u754c\u70b9\u4e0a\u90fd\u4f1a\u6709\u5706\u7403\uff0c\u5f53\u4e00\u4e2a\u8f6c\u76d8\u65cb\u8f6c\u7684\u65f6\u5019\uff0c\u5176\u5706\u5468\u4e0a\u7684\u7403\u4f53\u90fd\u4f1a\u8ddf\u7740\u8fd9\u4e2a\u5706\u5468\u8f6c\u52a8\u3002\u901a\u8fc7\u4e0d\u505c\u8f6c\u52a8\u76f8\u90bb\u7684\u5706\u76d8\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9e\u73b0\u628a\u67d0\u4e2a\u4f4d\u7f6e\u7684\u5706\u7403\u8f6c\u79fb\u5230\u53e6\u5916\u4e00\u4e2a\u4f4d\u7f6e\u3002\u800c Splay \u5dee\u4e0d\u591a\u662f\u8fd9\u4e48\u4e2a\u611f\u89c9\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"

    \u9996\u5148\u6211\u4eec\u505a\u4e00\u4e2a\u7ea6\u5b9a\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u8282\u70b9 X\uff0c\u6211\u4eec\u8bb0\u5176\u7236\u8282\u70b9\u4e3a P(Parent)\uff0c\u5176\u7236\u8282\u70b9\u7684\u7236\u8282\u70b9\u4e3a G(Grandparent)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u5177\u4f53\u64cd\u4f5c\u57fa\u672c\u5c31\u548c AVL \u6811\u7684\u76f8\u5173\u64cd\u4f5c\u6709\u5f88\u5927\u91cd\u5408\u3002

    \u6548\u679c

    Splaying not only moves the accessed node to the root, but also roughly halves the depth of most nodes on the path.

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u5bf9\u70b9\u64cd\u4f5c","title":"\u5bf9\u70b9\u64cd\u4f5c","text":"

    \u7531\u4e8e Splay Tree \u9664\u4e86\u5728\u5b8c\u6210\u6240\u6709\u64cd\u4f5c\u4ee5\u540e\u90fd\u9700\u8981\u8fdb\u884c\u4e00\u6b21 Splay \u64cd\u4f5c\uff0c\u5176\u4ed6\u90e8\u5206\u90fd\u548c BST \u4e00\u6837\uff0c\u6240\u4ee5\u8fd9\u91cc\u53ea\u7b80\u5355\u4ecb\u7ecd\u4e00\u4e0b Splay \u7684\u90e8\u5206\u3002

    Find X

    \u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230 \\(X\\)\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u5c06 \\(X\\) \u4e0d\u65ad\u65cb\u8f6c\u81f3\u6839\uff0c\u6700\u7ec8\u76f4\u63a5\u53d6\u51fa Root \u5373\u4e3a\u7ed3\u679c\u3002

    Remove X

    \u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230 \\(X\\)\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u5c06 \\(X\\) \u4e0d\u65ad\u65cb\u8f6c\u81f3\u6839\uff0c\u63a5\u4e0b\u6765\u5220\u9664 Root \u8282\u70b9\uff0c\u5e76\u5728\u7ef4\u62a4 BST \u6027\u8d28\u7684\u60c5\u51b5\u4e0b\u9012\u5f52\u5730\u5408\u5e76\u5de6\u53f3\u5b69\u5b50\u6811\u5373\u53ef\u3002

    Find Max

    \u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230\u6700\u5927\u503c\uff0c\u5c06\u5b83\u65cb\u8f6c\u5230\u6839\u90e8\u4ee5\u540e\uff0c\u53ef\u4ee5\u53d1\u73b0\u5b83\u6ca1\u6709\u53f3\u5b69\u5b50\u6811\uff0c\u76f4\u63a5\u5220\u6389\u5c31\u884c\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

    \u524d\u7f6e\u9605\u8bfb

    \u5173\u4e8e\u644a\u8fd8\u5206\u6790\u7684\u57fa\u672c\u77e5\u8bc6\uff0c\u8bf7\u67e5\u770b Topic 1 | Amortized Analysis\u3002

    \u6b64\u5904\uff0c\u6211\u4eec\u5c06\u4f7f\u7528\u52bf\u80fd\u6cd5\u6765\u5206\u6790 Splay \u7684\u644a\u8fd8\u590d\u6742\u5ea6\uff0c\u7531\u4e8e\u8bfe\u4ef6\u7701\u7565\u4e86\u5f88\u591a\u7ec6\u8282\u4e0a\u7684\u89e3\u91ca\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u4f1a\u8865\u5145\u975e\u5e38\u591a\u5185\u5bb9\u3002

    reference

    http://www2.hawaii.edu/~nodari/teaching/f19/scribes/notes06.pdf

    \u5f00\u59cb\u5206\u6790\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u660e\u786e\u5206\u6790\u7684\u76ee\u6807\uff1a

    \u5bf9\u4e8e Splay\uff0c\u5b83\u4e0d\u50cf\u6211\u4eec\u5728 Topic 1 | Amortized Analysis \u63d0\u5230\u7684\u90a3\u4e9b\u6848\u4f8b\u4e00\u6837\uff0c\u5b58\u5728\u660e\u663e\u7684\u51cf\u52bf\u548c\u589e\u52bf\u884c\u4e3a\u3002\u5bf9\u4e8e Splay \u6765\u8bf4\uff0c\u6240\u6709\u6211\u4eec\u63d0\u5230\u7684\u64cd\u4f5c\u90fd\u4f9d\u8d56\u4e8e\u5c06\u76ee\u6807\u70b9\u65cb\u8f6c\u5230\u6839\u6765\u5b9e\u73b0\uff0c\u800c\u8fd9\u4e5f\u6210\u4e3a\u5176\u4e3b\u8981\u5f00\u9500\uff08\u90e8\u5206\u5e38\u6570\u64cd\u4f5c\u663e\u7136\u88ab\u8986\u76d6\uff0c\u63d2\u5165\u4e4b\u7c7b\u7684\u64cd\u4f5c\u4e4b\u6240\u4ee5\u80fd\u88ab\u5ffd\u7565\u7684\u539f\u56e0\uff0c\u53ef\u4ee5\u53c2\u8003 ltgg \u7684\u8fd9\u7bc7\u6587\u7ae0\uff09\u3002\u5176\u4e2d\u6211\u4eec\u4f1a\u7528\u5230\u82e5\u5e72\u6b21 zig\u3001zig-zag\u3001zig-zig \u7684\u64cd\u4f5c\u3002

    \u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\uff0c\u6211\u4eec\u8981\u5206\u6790\u7684\u76ee\u6807\u4e3a\uff1a

    \\[ T_{\\text{rotate }x\\text{ to root}} = T_{\\text{zig}} + \\sum{ {T_{\\text{zig-zag}}}_i } + \\sum{ {T_{\\text{zig-zig}}}_i } \\]

    \u4e0a\u9762\u4e09\u4e2a\u90e8\u5206\u6bcf\u4e00\u4e2a\u90fd\u6709\u53ef\u80fd\u662f \\(0\\)\uff0c\u800c zig \u6700\u591a\u53ea\u4f1a\u53d1\u751f\u4e00\u6b21\uff01

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u8bbe\u8ba1\u4e00\u4e2a\u52bf\u80fd\u51fd\u6570 \\(\\Phi(x)\\)\uff0c\u5e76\u4e14\u6839\u636e\u6211\u4eec\u63d0\u5230\u8fc7\u7684\u52bf\u80fd\u5206\u6790\u6cd5\u7684\u7279\u6027\uff0c\\(\\Phi(x)\\) \u5e94\u8be5\u5177\u6709\u8fd9\u4e48\u51e0\u4e2a\u7279\u5f81\uff1a

    \u4e8e\u662f\u8fd9\u91cc\u6211\u4eec\u8bbe\u8ba1\u7684\u52bf\u80fd\u51fd\u6570\u4e3a\uff1a

    \\[ \\Phi(T) = \\sum_{des \\in T} \\log Size(des) = \\sum_{des \\in T} Rank(des)\\\\ \\begin{aligned} &\\text{Where } des \\text{ means the descendant of } T \\text{,}\\\\ &\\text{and } Size(des) \\text{ means the number of the nodes of } des \\text{.} \\\\ &\\text{And we note } Rank(des) = \\log Size(des) \\approx Height(des) \\text{.} \\end{aligned} \\]

    \u7528\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u5c31\u662f\uff0c\u5bf9\u4e8e\u67d0\u4e2a\u5b69\u5b50\u6811 \\(T\\)\uff0c\u5176\u52bf\u80fd\u51fd\u6570 \\(\\Phi(T)\\) \u7b49\u4e8e\u4ee5\u6240\u6709\u5b83\u7684\u540e\u4ee3\u4e3a\u6839\u7684\u5b69\u5b50\u6811\u7684\u5927\u5c0f\u53d6\u5bf9\u6570\u4ee5\u540e\u6c42\u548c\u3002

    Rank v.s. Height

    \u8fd9\u91cc\u9700\u8981\u6ce8\u610f\u7684\u4e00\u4e2a\u70b9\u662f\uff0c\u867d\u7136 \\(Rank(des) \\approx Height(des)\\)\uff0c\u4f46\u662f\u6211\u4eec\u4e0d\u5e94\u8be5\u7528 \\(Height()\\) \u6765\u4ee3\u66ff \\(Rank()\\)\uff0c\u4e3b\u8981\u539f\u56e0\u662f\u5728\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\uff0c\\(Rank()\\) \u4e0d\u4f1a\u53d8\u5316\uff08\u56e0\u4e3a \\(Size()\\) \u4e0d\u4f1a\u53d8\u5316\uff09\uff0c\u4f46\u662f \\(Height()\\) \u53ef\u80fd\u53d8\u5316\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u679c\u9009\u7528 \\(Height()\\) \u4f5c\u4e3a\u52bf\u80fd\u51fd\u6570\uff0c\u6211\u4eec\u5c31\u4e0d\u5f97\u5df2\u8003\u8651\u6574\u68f5\u6811\uff0c\u800c\u975e\u53ea\u9700\u8981\u8003\u8651\u5f53\u524d\u65cb\u8f6c\u6d89\u53ca\u7684\u5b69\u5b50\u6811\u3002

    \u5173\u4e8e\u6b63\u786e\u6027\u7684\u8bf4\u660e\uff0c\u6211\u4f1a\u653e\u5728\u4e4b\u540e\u7684\u8fc7\u7a0b\u4e2d\u4e00\u4e2a\u4e2a\u63d2\u5165\uff0c\u5b83\u4eec\u4f1a\u88ab\u5305\u88f9\u5728 key-point \u6587\u5b57\u6846\u4e2d\uff0c\u8bf7\u6ce8\u610f\u8fd9\u4e9b\u5185\u5bb9\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u53ef\u4ee5\u5f00\u59cb\u5206\u6790\u4e86\uff0c\u6839\u636e\u6211\u4eec\u7ed9\u5b9a\u7684\u76ee\u6807\uff1a

    \\[ T_{\\text{rotate }x\\text{ to root}} = T_{\\text{zig}} + \\sum{ {T_{\\text{zig-zag}}}_i } + \\sum{ {T_{\\text{zig-zig}}}_i } \\]

    \u6211\u4eec\u5229\u7528\u5747\u644a\u5206\u6790\uff0c\u9700\u8981\u5f97\u5230\u4e00\u4e2a\u5e73\u6ed1\u4e0a\u754c\uff1a

    \\[ \\hat{c}_{\\text{rotate }x\\text{ to root}} = \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\]

    \u800c\u6211\u4eec\u9700\u8981\u8bc1\u660e \\(\\hat{c}_{\\text{rotate }x\\text{ to root}} = O(\\log{N})\\)\uff0c\u73b0\u5728\u6211\u4eec\u9700\u8981\u5206\u522b\u5206\u6790 zig\u3001zig-zag\u3001zig-zig\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig","title":"zig","text":"

    Amortized Analysis for Zig

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= {c_{\\text{zig}}}_i + \\Phi_{i}(X) - \\Phi_{i-1}(P) \\\\ &= 1 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) \\end{aligned} \\]

    \u89c2\u5bdf\u914d\u56fe\uff0c\\(X\\) \u591a\u4e86 \\(P\\) \u548c \\(C\\) \u4f5c\u4e3a\u5b50\u55e3\uff0c\u800c \\(P\\) \u60b2\u60e8\u5730\u5931\u53bb\u4e86 \\(X\\) \u4e00\u65cf\uff0c\u751a\u81f3\u6210\u4e86 \\(X\\) \u7684\u540e\u4ee3\uff0c\u5373 \\(X\\) \u76db \\(P\\) \u8870\uff0c\u56e0\u6b64\u5c31\u6709\u4e0d\u7b49\u5f0f\uff1a

    \\[ \\left\\{ \\begin{aligned} & Rank_{i}(X) - Rank_{i-1}(X) \\geq 0\\\\ & Rank_{i}(P) - Rank_{i-1}(P) \\leq 0 \\end{aligned} \\right. \\]

    \u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u505a\u7b80\u5355\u7684\u7f29\u653e\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= 1 + \\underbrace{Rank_{i}(X) - Rank_{i-1}(X)}_{\\geq 0} + \\underbrace{Rank_{i}(P) - Rank_{i-1}(P)}_{\\leq 0} \\\\ &\\leq 1 + Rank_{i}(X) - Rank_{i-1}(X) \\end{aligned} \\]

    \u4e3a\u4ec0\u4e48\u4e0d\u662f\u53e6\u5916\u4e00\u79cd\u9009\u62e9 / \u4e3a\u4f55\u8fd9\u6837\u7f29\u653e\uff1f

    \u8fd9\u4e00\u90e8\u5206\u5728 cy \u7684 PPT \u91cc\u5e76\u6ca1\u6709\u8be6\u7ec6\u8bf4\u660e\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u8fd9\u662f\u8fd9\u4e2a\u5206\u6790\u65b9\u6cd5\u6210\u7acb\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u56e0\u7d20\uff01

    \u4e5f\u8bb8\u4f60\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u53c8\u6216\u8005\u4f60\u4e86\u89e3\u4e86\u4e4b\u540e\u4e24\u79cd\u5206\u6790\uff0c\u53c8\u56de\u8fc7\u5934\u6765\u601d\u8003\u53d1\u73b0\uff0c\u8fd9\u91cc\u5176\u5b9e\u5b58\u5728\u53e6\u5916\u4e00\u79cd\u66f4\u7d27\u51d1\u7684\u7f29\u653e\u65b9\u6cd5\uff08\u751a\u81f3\u4e0d\u80fd\u8bf4\u201c\u7f29\u653e\u201d\uff09\uff0c\u89c2\u5bdf\u5230 \\(Size_{i}(X) =Size_{i-1}(P)\\)\uff0c\u6240\u4ee5\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= 1 + Rank_{i}(P) - Rank_{i-1}(X) + \\underbrace{Rank_{i}(X) - Rank_{i-1}(P)}_{= 0} \\\\ &= 1 + Rank_{i}(P) - Rank_{i-1}(X) \\end{aligned} \\]

    \u4f46\u662f\u8fd9\u4e0d\u4fbf\u4e8e\u6211\u4eec\u4e4b\u540e\u7684\u4f20\u9012\u3002\u8fd8\u8bb0\u5f97\u6211\u4eec\u8981\u6c42\u7684\u76ee\u6807\u5417\uff1f

    \\[ \\hat{c}_{\\text{rotate }x\\text{ to root}} = \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\]

    \u6211\u4eec\u4e4b\u540e\u9700\u8981\u5bf9\u5404\u79cd \\(\\hat{c}\\) \u8fdb\u884c\u6c42\u548c\uff0c\u800c\u6bcf\u4e00\u6b21\u7684 \\(X,\\;P,\\;G\\) \u90fd\u662f\u4e0d\u540c\u7684\uff0c\u4e3a\u4e86\u5728\u6c42\u548c\u7684\u65f6\u5019\u5b9e\u73b0\u9519\u4f4d\u76f8\u51cf\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u7f29\u653e\u5f97\u5230\u7684\u7ed3\u679c\u5177\u6709\u4e00\u5b9a\u7684\u4f20\u9012\u6027\u8d28\uff0c\u6216\u8005\u8bf4\u5728\u6c42\u548c\u8fc7\u7a0b\u4e2d\u80fd\u591f\u8fbe\u5230\u88c2\u9879\u76f8\u6d88\u7684\u6548\u679c\u3002

    \u800c\u5bf9\u4e8e Splay \u6765\u8bf4\uff0c\u6211\u4eec\u7684\u64cd\u4f5c\u4f20\u9012\uff0c\u6b63\u662f\u901a\u8fc7\u4e0d\u65ad\u5c06\u6211\u4eec\u5173\u6ce8\u7684 \\(X\\) \u70b9\u9012\u5f52\u5730\u5411\u4e0a\u65cb\u8f6c\u5b9e\u73b0\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\\(\\Phi_{i}(X)\\) \u4e2d\u7684 \\(X\\)\uff0c\u5c31\u662f \\(\\Phi_{i-1}(X)\\) \u4e2d\u7684 \\(X\\)\uff0c\u5982\u6b64\u6211\u4eec\u6700\u7ec8\u53ef\u4ee5\u5f97\u5230 \\(\\Phi_{n}(X) - \\Phi_{0}(X)\\)\uff0c\u800c\u5176\u4e2d\u4e00\u4e2a\u662f\u6839\uff0c\u4e00\u4e2a\u662f\u6211\u4eec\u4e00\u5f00\u59cb\u6253\u7b97\u64cd\u4f5c\u7684\u90a3\u4e2a\u70b9\u3002

    \u4e8e\u662f\u6211\u4eec\u7406\u60f3\u7684\u7f29\u653e\u76ee\u6807\u5c31\u662f \\(k(Rank_{i}(X) - Rank_{i-1}(X)) \\;\\; \\text{where } k \\text{ is fixed for all the terms}\\)\u3002

    \u4e0d\u8fc7\u4f60\u53ef\u80fd\u53c8\u8981\u63d0\u95ee\u4e86\uff0czig \u5206\u6790\u7684\u7ed3\u679c\u91cc\u4e0d\u662f\u6709\u4e2a \\({c_{\\text{zig}}}_i = 1\\) \u5417\uff1f

    \u8fd9\u662f\u56e0\u4e3a zig \u6700\u591a\u53ea\u53d1\u751f\u4e00\u6b21\uff0c\u6240\u4ee5\u8fd9\u4e2a\u5e38\u6570\u662f\u6ca1\u6709\u5f71\u54cd\u7684\u3002

    \u771f\u7684\u9700\u8981\u90fd\u7f29\u653e\u5230\u76f8\u540c\u7684 k \u5417

    \u968f\u4e4b\u800c\u6765\u7684\uff0c\u4e00\u4e2a\u9700\u8981\u8ba8\u8bba\u7684\u95ee\u9898\u662f\u300c\\(\\text{where } k \\text{ is fixed for all the terms}\\)\u300d\u771f\u7684\u91cd\u8981\u5417\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u4e09\u4e2a\u90e8\u5206\u7f29\u653e\u51fa\u6765\u90fd\u5177\u6709\u76f8\u540c\u7684 \\(k\\) \u5417\uff1f

    \u9996\u5148\uff0c\u91cd\u8981\u80af\u5b9a\u662f\u91cd\u8981\u7684\uff0c\u53ea\u4e0d\u8fc7\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u7531\u4e8e\u6211\u4eec\u65cb\u8f6c\u7684\u65b9\u5411\u90fd\u662f\u5411\u4e0a\uff0c\u6240\u4ee5 \\(Rank_{i}(X) \\geq Rank_{i-1}(X)\\)\uff0c\u56e0\u6b64\u6211\u4eec\u53ea\u9700\u8981\u6700\u540e\u5c06\u5b83\u4eec\u4e00\u8d77\u90fd\u7f29\u653e\u5230 \\(k_{overall} = \\max\\{k_\\text{zig}, k_\\text{zig-zag}, k_\\text{zig-zig} \\}\\) \u5c31\u53ef\u4ee5\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig-zag","title":"zig-zag","text":"

    Amortized Analysis for Zig-Zag

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zag}}}_i &= {c_{\\text{zig-zag}}}_i + \\Phi_{i}(X)- \\Phi_{i-1}(G) \\\\ &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\end{aligned} \\]

    \u89c2\u5bdf\u914d\u56fe\uff0c\\(X\\) \u53c8\u4e00\u6b21\u7edd\u5730\u53cd\u51fb\uff0c\u6210\u4e3a\u5b83\u5bb6\u957f\u548c\u5b83\u5bb6\u957f\u7684\u5bb6\u957f\u5171\u540c\u7684\u5bb6\u957f\uff1b\\(G\\) \u635f\u5931\u6700\u60e8\u91cd\uff0c\u4e22\u6389\u4e86 \\(A,\\;B\\) \u4e24\u65cf\u5b50\u55e3\u3002

    \u5728\u8fd9\u6b21\u7684\u7f29\u653e\u4e2d\uff0c\u6839\u636e\u6211\u4eec\u4e4b\u524d\u5728 key-point \u91cc\u63d0\u5230\u7684\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u7f29\u653e\u5230 \\(k(Rank_{i}(X) - Rank_{i-1}(X))\\) \u7684\u5f62\u5f0f\uff0c\u5e76\u4e14\u7531\u4e8e zig-zig \u4f1a\u591a\u6b21\u53d1\u751f\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u5f97\u60f3\u529e\u6cd5\u641e\u6389\u8fd9\u91cc\u7684 \\({c_{\\text{zig-zag}}}_i = 2\\)\uff0c\u5426\u5219\u6700\u540e\u5c31\u4f1a\u51fa\u73b0\u4e00\u4e2a \\(2p(n)\\) \u7684 term\uff0c\u800c\u6211\u4eec\u7684\u8bc1\u660e\u76ee\u6807\u662f \\(\\log{N}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u5c06\u8fd9\u4e2a \\(2\\) \u6d88\u6389\u3002\u800c\u4e3a\u4e86\u6d88\u9664\u8fd9\u4e2a \\(2\\)\uff0c\u6211\u4eec\u9700\u8981\u5148\u5f15\u5165\u4e00\u4e2a\u5f15\u7406\uff1a

    Lemma 1

    \u7531\u4e8e \\(y = \\log{x}\\) \u662f\u5355\u8c03\u7684\u51f8\u51fd\u6570\uff0c\u6240\u4ee5\u6709 \\(\\frac{\\log{x} + \\log{b}}{2} \\leq \\log {\\frac{a+b}{2}}\\)\u3002

    \u800c\u5728 Splay \u7684\u5747\u644a\u590d\u6742\u5ea6\u5206\u6790\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u7684 \\(\\log{x}\\) \u6307\u7684\u662f \\(\\log_2{x}\\)\uff0c\u56e0\u6b64\u6709\uff1a

    \\[ \\begin{aligned} \\log{a} + \\log{b} &= 2\\left( \\frac{\\log{a} + \\log{b}}{2} \\right) \\\\ &\\leq 2\\left( \\log{\\frac{a+b}{2}} \\right) \\\\ &= 2\\left( \\log{(a+b)} - \\log{2} \\right) \\\\ &= 2 \\log{(a+b)} - 2 \\\\ \\end{aligned} \\]

    \u770b\u5230\u8fd9\u91cc\u51fa\u73b0\u4e86\u4e00\u4e2a \\(-2\\) \u6211\u4eec\u5c31\u80fd\u957f\u8212\u4e00\u53e3\u6c14\u4e86\uff0c\u8fd9\u4e0b \\({c_{\\text{zig-zag}}}_i = 2\\) \u6b7b\u5230\u4e34\u5934\u54af\uff01\u5bf9\u7167\u914d\u56fe\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a

    \\[ \\begin{aligned} Rank_{i}(P) + Rank_{i}(G) &= \\log{Size_{i}(P)} + \\log{Size_{i}(G)} \\\\ &\\leq 2\\log{\\left(Size_{i}(P)+Size_{i}(G)\\right)} - 2 & \\text{(Lemma 1)}\\\\ &\\leq 2\\log{\\left(Size_{i}(P)+Size_{i}(G)+1\\right)} - 2 \\\\ &\\leq 2\\log{Size_{i}(X)} - 2 \\\\ &\\leq 2Rank_{i}(X) - 2 \\\\ \\end{aligned} \\]

    \u56e0\u6b64\uff0c\u6211\u4eec\u80fd\u591f\u5f97\u5230\u8fd9\u4e9b\u76f8\u7b49\u6216\u4e0d\u7b49\u5173\u7cfb\uff1a

    \\[ \\left\\{ \\begin{aligned} Rank_{i}(X) &= Rank_{i-1}(G) \\\\ Rank_{i}(P) + Rank_{i}(G) &\\leq 2Rank_{i}(X) - 2 \\\\ Rank_{i-1}(P) + Rank_{i-1}(X) &\\geq 2Rank_{i-1}(X) \\end{aligned} \\right. \\]

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u5b9e\u73b0\u7f29\u653e\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zag}}}_i &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\\\ &= 2 + \\left( Rank_{i}(X) - Rank_{i-1}(G)\\right ) + \\left( Rank_{i}(P) + Rank_{i}(G) \\right) - \\left( Rank_{i-1}(P) + Rank_{i-1}(X) \\right) \\\\ &\\leq 2 + 0 + 2Rank_{i}(X) - 2 + 2Rank_{i-1}(X) \\\\ &= 2\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\end{aligned} \\]

    \u7686\u5927\u6b22\u559c\uff01

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig-zig","title":"zig-zig","text":"

    Amortized Analysis for Zig-Zig

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zig}}}_i &= {c_{\\text{zig-zig}}}_i + \\Phi_{i}(X)- \\Phi_{i-1}(G) \\\\ &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\end{aligned} \\]

    \u4e3a\u4e86\u5b9e\u73b0 zig-zig \u7684\u7f29\u653e\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5bf9 Lemma 1 \u8fdb\u884c\u4e00\u4e2a\u6d3b\u7528\u3002\u5bf9\u7167\u914d\u56fe\uff0c\u5f97\u5230\uff1a

    \\[ \\begin{aligned} Rank_{i}(G) + Rank_{i-1}(X) &\\leq 2\\log{\\left( \\underbrace{Size_{i}(G)}_{\\mathbf{C}+\\mathbf{D}+G} + \\underbrace{Size_{i-1}(X)}_{\\mathbf{A}+\\mathbf{B}+X} \\right)} - 2 & \\text{(Lemma 1)} \\\\ &\\leq 2\\log{\\left( Size_{i}(G) + Size_{i-1}(X) + 1 \\right)} - 2 & \\\\ &= 2\\log{\\left( Size_{i}(X) \\right)} - 2 \\\\ &= 2Rank_{i}(X) - 2 \\\\ Rank_{i}(G) &\\leq 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\end{aligned} \\]

    \u8fd9\u4e00\u6b65\u5f88\u96be\u60f3\uff0c\u4f46\u662f\u4e5f\u975e\u5e38\u5173\u952e\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u6709\u5982\u4e0b\u8fd9\u4e9b\u4e0d\u7b49\u5f0f\uff1a

    \\[ \\left\\{ \\begin{aligned} Rank_{i}(X) &= Rank_{i-1}(G) \\\\ Rank_{i}(G) &\\leq 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\\\ Rank_{i}(P) &\\leq Rank_{i}(X) \\\\ Rank_{i-1}(P) &\\geq Rank_{i-1}(X) \\end{aligned} \\right. \\]

    \u4e8e\u662f\u6211\u4eec\u5c31\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u8be1\u5f02\u7684\u7f29\u653e\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zig}}}_i &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\\\ &= 2 + \\left( Rank_{i}(X) - Rank_{i-1}(G) \\right) + Rank_{i}(G) + Rank_{i}(P) - Rank_{i-1}(P) - Rank_{i-1}(X) \\\\ &\\leq 2 + 0 + \\left( 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\right) + Rank_{i}(X) - Rank_{i-1}(X) - Rank_{i-1}(X) \\\\ &= 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\end{aligned} \\]

    \ud83d\ude29 \u81f3\u6b64\uff0c\u6211\u4eec\u603b\u7b97\u662f\u628a\u725b\u9b3c\u86c7\u795e\u7684 zig-zig \u7684\u8bc1\u660e\u4e5f\u7ed9\u641e\u5b9a\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u7ed3\u8bba","title":"\u7ed3\u8bba","text":"

    Amortized Analysis for Splay

    \u81f3\u6b64\uff0c\u5bf9\u4e8e\u4e09\u79cd\u64cd\u4f5c\uff0c\u6211\u4eec\u90fd\u5f97\u5230\u4e86\u5b83\u4eec\u7684\u5747\u644a\u4e0a\u754c\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &\\leq 1 + Rank_{i}(X) - Rank_{i-1}(X) \\\\ {\\hat{c}_{\\text{zig-zag}}}_i &\\leq 2\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\\\ {\\hat{c}_{\\text{zig-zig}}}_i &\\leq 3\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\end{aligned} \\]

    \u6839\u636e\u6211\u4eec\u5728 key-point \u6846\u300c\u771f\u7684\u9700\u8981\u90fd\u7f29\u653e\u5230\u76f8\u540c\u7684 k \u5417\u300d\u4e2d\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u53ef\u4ee5\u5c06\u5b83\u4eec\u7684 \\(k\\) \u90fd\u7f29\u653e\u4e3a \\(3\\)\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &\\leq 1 + 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\\\ {\\hat{c}_{\\text{zig-zag}}}_i &\\leq 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\\\ {\\hat{c}_{\\text{zig-zig}}}_i &\\leq 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\end{aligned} \\]

    \u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7684\u5747\u644a\u4e0a\u754c\uff1a

    \\[ \\begin{aligned} \\hat{c}_{\\text{rotate }x\\text{ to root}} &= \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\\\ &= O(1) + 3\\left( Rank_{N}(X) - Rank_{0}(X) \\right) \\\\ &= O(\\log{N}) \\end{aligned} \\]

    \u53ef\u4ee5\u4ed4\u7ec6\u60f3\u60f3\u6c42\u548c\u5f0f\u662f\u5982\u4f55\u201c\u76f8\u6d88\u201d\u5f97\u5230\u6700\u540e\u7684\u5f0f\u5b50\u7684\uff0c\u8fd9\u91cc\u7684 \\(\\sum {\\hat{c}_\\text{...}}_i\\) \u7684 \\(i\\) \u5e76\u4e0d\u662f\u5728\u6c42\u548c\u5f0f\u4e2d\u5404\u81ea\u8fde\u7eed\u7684\uff0c\u4f46\u662f\u4e09\u4e2a term \u653e\u5728\u4e00\u8d77\uff0c\u5219\u53ef\u4ee5\u56ca\u62ec \\(i\\in\\{1,2,...,N\\}\\)

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/","title":"Lecture 2 | Red Black Tree & B+ Tree","text":"

    \u7ea6 4971 \u4e2a\u5b57 43 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 25 \u5206\u949f

    \u8bf4\u660e

    \u800c\u4e3a\u4e86\u63d0\u9ad8\u7b14\u8bb0\u6574\u7406\u6548\u7387\uff0c\u53ef\u80fd\u4f1a\u8003\u8651\u7528\u66f4\u591a\u7684\u5f15\u7528\u548c\u66f4\u7b80\u5355\u7684\u8bed\u8a00\u3002\u5982\u679c\u60a8\u89c9\u5f97\u6709\u54ea\u91cc\u8bf4\u7684\u4e0d\u591f\u6e05\u695a\uff0c\u8bf7\u76f4\u63a5\u5728\u8bc4\u8bba\u533a\u72e0\u72e0 blame \u6211\uff01

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u7ea2\u9ed1\u6811","title":"\u7ea2\u9ed1\u6811","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/rbtree/

    Wikipedia: https://en.wikipedia.org/wiki/Red%E2%80%93black_tree

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u987e\u540d\u601d\u4e49\uff0c\u7ea2\u9ed1\u6811(Red Black Tree)\u5c31\u662f\u4e00\u79cd\u8282\u70b9\u5206\u7c7b\u4e3a\u7ea2\u9ed1\u4e24\u8272\u7684\uff0c\u6bd4\u8f83\u5e73\u8861\u7684\u4e8c\u53c9\u641c\u7d22\u6811\u3002\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e8e AVL \u6811\uff0c\u7ea2\u9ed1\u6811\u7684\u201c\u5e73\u8861\u201d\u6027\u8d28\u662f\u901a\u8fc7\u9ed1\u9ad8(black height)\u6765\u5b9a\u4e49\u7684\u3002\u63a5\u4e0b\u6765\u4f9d\u6b21\u7ed9\u51fa\u7ea2\u9ed1\u6811\u7684\u5b9a\u4e49\u548c\u9ed1\u9ad8\u7684\u5b9a\u4e49\u3002

    Red Black Tree

    \u7ea2\u9ed1\u6811\u662f\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\u7684\u4e00\u79cd\u4e8c\u53c9\u641c\u7d22\u6811\uff1a

    Properties of RBTree

    @cy's PPT

    1. Every node is either red or black.
    2. The root is black.
    3. Every leaf (NIL) is black.
    4. if a node is red, then both its children are black.
    5. For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.

    ch \u8001\u5e08\u8bf4\uff0c\u5e0c\u671b\u6211\u4eec\u80fd\u628a\u8fd9\u4e94\u6761\u6027\u8d28\u719f\u7ec3\u8bb0\u4f4f\uff0c\u600e\u4e48\u53ef\u80fd\uff08\u9003\uff09\u3002

    \u8bf4\u660e

    \u7531\u4e8e\u8fd9\u91cc\u7684\u201c\u53f6\u5b50\u7ed3\u70b9\u201d\u88ab\u91cd\u65b0\u5b9a\u4e49\u4e86\uff0c\u4e3a\u4e86\u63cf\u8ff0\u65b9\u4fbf\uff0c\u6211\u73b0\u5728\u79f0\u6240\u6709\u4e24\u4e2a\u5b50\u7ed3\u70b9\u90fd\u662f NIL \u7684\u7ed3\u70b9\u4e3a\u672b\u7aef\u7ed3\u70b9\uff08\u4e5f\u5c31\u662f\u901a\u4fd7\u610f\u4e49\u4e0a\u7684\u53f6\u5b50\u7ed3\u70b9\uff09\u3002\u800c\u8fd9\u4e2a\u5b9a\u4e49\u53ea\u662f\u6211\u81ea\u5df1\u8bf4\u8bf4\u7684\uff01

    @Wiki
    1. Every node is either red or black.
    2. All NIL nodes (figure above) are considered black.
    3. A red node does not have a red child.
    4. Every path from a given node to any of its descendant NIL nodes goes through the same number of black nodes.
    @OI Wiki
    1. \u6bcf\u4e00\u4e2a\u8282\u70b9\u8981\u4e48\u662f\u7ea2\u8272\uff0c\u8981\u4e48\u662f\u9ed1\u8272\uff1b
    2. NIL \u8282\u70b9\uff08\u7a7a\u53f6\u5b50\u8282\u70b9\uff09\u4e3a\u9ed1\u8272\uff1b
    3. \u7ea2\u8272\u8282\u70b9\u7684\u5b50\u8282\u70b9\u5fc5\u987b\u4e3a\u9ed1\u8272\uff1b
    4. \u4ece\u6839\u8282\u70b9\u5230 NIL \u8282\u70b9\u7684\u6bcf\u6761\u8def\u5f84\u4e0a\u7684\u9ed1\u8272\u8282\u70b9\u6570\u91cf\u76f8\u540c\uff1b

    black height, bh

    \u7279\u5b9a\u8282\u70b9\u7684\u9ed1\u9ad8\uff0c\u7b49\u4e8e\u8be5\u8282\u70b9\u5230\u53f6\u7ed3\u70b9\u5230\u7b80\u5355\u8def\u5f84\u4e2d\uff08\u4e0d\u5305\u62ec\u81ea\u8eab\uff09\uff0c\u9ed1\u8272\u8282\u70b9\u7684\u6570\u91cf\u3002

    \u63a5\u4e0b\u6765\u4e3a\u4e86\u52a0\u6df1\u7406\u89e3\uff0c\u6709\u4e00\u4e9b\u8fa8\u6790\u53ef\u4ee5\u505a\uff1a

    T1T2 \u9898\u9762\u7b54\u6848

    \u4e0b\u56fe\u7684\u7ea2\u9ed1\u6811\u662f\u5426\u5408\u6cd5\uff1f

    \u4e0d\u5408\u6cd5\u3002

    16 \u53f7\u8282\u70b9\u7684\u53f3\u513f\u5b50\u662f\u4e00\u4e2a\u9ed1\u53f6\u5b50\uff0c\u800c\u8fd9\u4e2a\u53f6\u5b50\u5230\u6839\u7684\u8def\u5f84\u4e0a\u53ea\u6709 3 \u4e2a\u9ed1\u8282\u70b9\uff0c\u800c\u5176\u4ed6\u53f6\u5b50\u5230\u6839\u90fd\u6709 4 \u4e2a\u9ed1\u8282\u70b9\u3002

    \u6240\u4ee5\u6211\u4eec\u9700\u8981\u8b66\u60d5\u53ea\u6709\u4e00\u4e2a\u975e\u53f6\u513f\u5b50\u7684\u7ea2\u8272\u8282\u70b9\u3002

    \u9898\u9762\u7b54\u6848

    \u4e0b\u56fe\u7684\u7ea2\u9ed1\u6811\u662f\u5426\u5408\u6cd5\uff1f

    \u5408\u6cd5\u3002

    \u6839\u636e T1 \u7684\u89e3\u6790\uff0c\u6211\u4eec\u5f97\u5230\u8fd9\u6837\u4e00\u4e2a\u7ed3\u8bba\uff1a

    \u5408\u6cd5\u7ea2\u9ed1\u6811\u4e0d\u5b58\u5728\u53ea\u6709\u4e00\u4e2a\u975e\u53f6\u5b50\u8282\u70b9\u7684\u7ea2\u8272\u8282\u70b9\uff01

    or

    \u5408\u6cd5\u7ea2\u9ed1\u6811\u7684\u7ea2\u8272\u8282\u70b9\u7684\u4e24\u4e2a\u5b50\u8282\u70b9\u4e00\u5b9a\u90fd\u662f\u53f6\u5b50\u6216\u90fd\u4e0d\u662f\u53f6\u5b50\uff01

    \u6b64\u5916\uff0c\u5173\u4e8e\u7ea2\u9ed1\u6811\u7684\u9ad8\uff0c\u6211\u4eec\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    property about height of RBTree

    \u4e00\u4e2a\u6709 \\(N\\) \u4e2a\u5185\u90e8\u8282\u70b9\uff08\u4e0d\u5305\u62ec\u53f6\u5b50\u7ed3\u70b9\uff09\u7684\u7ea2\u9ed1\u6811\uff0c\u5176\u9ad8\u5ea6\u6700\u5927\u4e3a \\(2\\log_2 (N+1)\\)\u3002

    the proof of the property

    \u5173\u4e8e\u9ed1\u9ad8\u548c\u70b9\u6570\u7684\u5173\u7cfb\u3002

    1. \u9996\u5148\u6211\u4eec\u6709 \\(N \\geq 2^{bh}-1\\)\uff0c\u4e5f\u5c31\u662f \\(bh \\leq \\log_2 (N+1)\\)\uff1b
    2. \u7136\u540e\u663e\u7136\u6709 \\(2 bh(Tree) >= h(Tree)\\)
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u63d0\u9192

    \u6211\u4eec\u8fd9\u91cc\u4ecb\u7ecd\u7684\u90fd\u662f bottom-up \u7684\u601d\u8def\uff0c\u4e0d\u540c\u4e8e AVL \u6811\uff0c\u7ea2\u9ed1\u6811\u662f\u5b58\u5728 top-down \u7684\u64cd\u4f5c\u65b9\u6cd5\u7684\uff0c\u800c\u8fd9\u4e5f\u662f\u7ea2\u9ed1\u6811\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u4f18\u52bf\uff0c\u5b58\u5728 top-down \u7684\u5904\u7406\u65b9\u6cd5\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u8fdb\u884c\u66f4\u5feb\u7684\u5e76\u884c\u64cd\u4f5c\u3002\u4f46\u662f\u6211\u4eec\u4e0d\u5728\u8fd9\u91cc\u8be6\u7ec6\u5c55\u5f00\u3002

    \u540c AVL \u6811\u7684\u8c03\u6574\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u7ea2\u9ed1\u6811\u7684\u8c03\u6574\u64cd\u4f5c\u4e5f\u662f\u5de6\u53f3\u5bf9\u79f0\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u4ecd\u7136\u53ea\u8ba8\u8bba\u4e00\u4fa7\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u63d2\u5165","title":"\u63d2\u5165","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u9ed1\u9ad8\u6709\u8d21\u732e\u7684\u53ea\u6709\u9ed1\u8272\u8282\u70b9\uff0c\u56e0\u6b64 NIL \u8282\u70b9\u88ab\u4e00\u4e2a\u7ea2\u8272\u8282\u70b9\u7f6e\u6362\u5e76\u4e0d\u4f1a\u6539\u53d8\u4e00\u9897\u7ea2\u9ed1\u6811\u7684\u9ed1\u9ad8\uff0c\u56e0\u4e3a\u7ea2\u8272\u8282\u70b9\u8fd8\u4f1a\u6709\u4e00\u5c42 NIL \u5b50\u8282\u70b9\uff1b\u7136\u800c\u5bf9\u4e8e\u7ea2\u8272\u8282\u70b9\uff0c\u5374\u6709\u7740\u7ea2\u8272\u7ed3\u70b9\u4e92\u4e0d\u76f8\u90bb\u7684\u9650\u5236\u3002

    \u56e0\u6b64\uff0c\u201c\u63d2\u5165\u201d\u64cd\u4f5c\u7684\u4e3b\u8981\u601d\u8def\u5c31\u662f\uff0c\u5148\u5c06\u6574\u4e2a\u7ea2\u9ed1\u6811\u5f53\u4f5c\u4e00\u4e2a\u666e\u901a\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5c06\u76ee\u6807\u6570\u636e\u63d2\u5165\u5230\u6811\u7684\u672b\u7aef\uff08\u4e5f\u5c31\u662f\u7f6e\u6362\u4e00\u4e2a NIL \u8282\u70b9\uff09\uff0c\u5e76\u5c06\u5b83\u67d3\u4e3a\u7ea2\u8272\uff0c\u518d\u8c03\u6574\u4f7f\u4e4b\u5728\u4fdd\u8bc1\u9ed1\u9ad8\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u6ee1\u8db3\u7ea2\u8272\u8282\u70b9\u4e0d\u80fd\u76f8\u90bb\u7684\u8981\u6c42\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u8bb0\u8fd9\u4e2a\u88ab\u63d2\u5165\u7684\u8282\u70b9\u4e3a x\uff0c\u4efb\u610f\u4e00\u4e2a\u8282\u70b9 node \u7684\u5bb6\u957f\u8282\u70b9\u4e3a node.p\uff0c\u5219\uff1a

    1. \u5982\u679c x.p \u662f\u9ed1\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u4e0d\u9700\u8981\u505a\u4efb\u4f55\u8c03\u6574\uff1b
    2. \u5982\u679c x.p \u662f\u7ea2\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u8fdb\u884c\u8c03\u6574\uff1b
      • \u6b64\u65f6\u56e0\u4e3a\u539f\u6765\u7684\u6811\u7b26\u5408\u7ea2\u9ed1\u6027\u8d28\uff0cx.p.p \u5fc5\u5b9a\u5b58\u5728\uff08\u7ea2 x.p \u4e0d\u80fd\u662f\u6839\uff09\u4e14\u5fc5\u5b9a\u662f\u9ed1\u8272\u7684\uff1b

    \u6839\u636e\u8fd9\u4e9b\u8ba8\u8bba\uff0c\u6211\u4eec\u5c31\u80fd\u5217\u4e3e\u51fa\u6765\u4e00\u4e2a\u7ea2\u8272\u7684\u70b9\u88ab\u63d2\u5165\u540e\uff0c\u5728 2. \u7684\u60c5\u51b5\u4e0b\u6240\u6709\u7684\u521d\u59cb\u60c5\u51b5\uff0c\u5373\u4e0b\u9762\u7b2c\u4e00\u5f20\u56fe\u3002

    \u7531\u4e8e\u7ea2\u9ed1\u6811\u7684\u64cd\u4f5c\u4e2d\uff0c\u6709\u4e00\u90e8\u5206\u9700\u8981\u8fdb\u884c\u9012\u5f52\u8f6c\u79fb\uff0c\u800c\u5176\u4e2d\u4e2d\u95f4\u6b65\u9aa4\u51fa\u73b0\u4e86\u5f88\u591a\u540c\u6784\u7684\u7ed3\u6784\uff0c\u6240\u4ee5\u4e3a\u4e86\u7b80\u5316\u8bf4\u660e\uff0c\u6211\u4eec\u5bf9\u5176\u8fdb\u884c\u7edf\u4e00\uff0c\u6240\u6709\u60c5\u51b5\u90fd\u88ab\u5f52\u7eb3\u4e3a\u4e0a\u9762\u7b2c\u4e8c\u5f20\u56fe\u3002

    \u800c\u7b2c\u4e8c\u5f20\u56fe\u4e2d\u63d0\u5230\u7684\u6a59\u8272\u7ed3\u70b9\uff0c\u4e5f\u5c31\u662f\u6807\u4e3a\u201c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u201d\u7684\u7ed3\u70b9\uff0c\u5b9e\u9645\u8fc7\u7a0b\u4e2d\u5e76\u4e0d\u4e00\u5b9a\u6307\u7684\u662f\u88ab\u300c\u63d2\u5165\u300d\u7684\u90a3\u4e2a\u70b9\uff0c\u4e5f\u53ef\u80fd\u662f\u5728 case 1 \u5411\u4e0a\u9012\u5f52\u65f6\uff0c\u7b80\u5316\u7684\u539f\u6765\u90a3\u9897\u5b50\u6811\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u91cc\u7684\u201c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u53ca\u5176\u5b50\u6811\u201d\uff0c\u5b9e\u9645\u4e0a\u53ef\u80fd\u662f\u6307\u300c\u5bfc\u81f4\u7ea2\u9ed1\u6027\u8d28\u88ab\u7834\u574f\u7684\u7ea2\u6839\u5b50\u6811\u300d\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u6765\u8ba8\u8bba\u5404\u79cd\u60c5\u51b5\u8981\u600e\u4e48\u5904\u7406\u3002

    \u8bf4\u660e

    \u8fd9\u91cc case 1 ~ case 3 \u7684\u7f16\u53f7\u4e3b\u8981\u662f\u4e3a\u4e86\u548c\u8bfe\u7a0b ppt \u5bf9\u6807\uff0c\u4f46\u662f\u63a5\u4e0b\u6765\u4f60\u4f1a\u53d1\u73b0\u6211\u662f\u6309\u7167 case 3 -> case 1 \u6765\u4ecb\u7ecd\u64cd\u4f5c\u7684\uff0c\u8fd9\u662f\u56e0\u4e3a\u6211\u89c9\u5f97\u8fd9\u6837\u5b89\u6392\u66f4\u5408\u7406\uff0c\u800c\u975e\u6392\u7248\u6df7\u4e71\u3002

    Insertion / case 3

    \u5bf9\u4e8e case 3\uff0c \u6211\u4eec\u9ad8\u5174\u5730\u53d1\u73b0\uff0c\u8fd9\u6837\u7684\u4e00\u6b21\u67d3\u8272\u548c\u4e00\u6b21\u65cb\u8f6c\u521a\u597d\u80fd\u8ba9\u8fd9\u68f5\u5b50\u6811\u5b8c\u6210\u8c03\u6574\uff01

    Insertion / case 2

    \u5bf9\u4e8e case 2\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u4e00\u4e2a Rotation \u64cd\u4f5c\u5c06\u5b83\u8f6c\u5316\u4e3a case 3\u3002

    \u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u7ec6\u5fc3\u7684\u5c0f\u670b\u53cb\u5df2\u7ecf\u53d1\u73b0\u4e86\uff0c\u4ece case 2 -> case 3 -> done \u7684\u8fc7\u7a0b \u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a LR Rotation\uff01

    Insertion / case 1

    \u5bf9\u4e8e case 1\uff0c\u56fe\u4e2d\u7684\u4e24\u79cd\u60c5\u51b5\u662f\u7b49\u4ef7\u7684\u3002\u6240\u4ee5\u6211\u4eec\u53ea\u5c55\u793a\u5176\u4e2d\u4e00\u79cd\u3002

    \u6211\u4eec\u53ea\u9700\u8981\u5c06\u56fe\u4e2d\u7684\u6839\u8282\u70b9\u67d3\u7ea2\uff0c\u5c06\u6839\u7684\u4e24\u4e2a\u5b50\u8282\u70b9\u67d3\u9ed1\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u9ed1\u8282\u70b9\u201c\u4e0b\u653e\u201d\u3002

    \u901a\u8fc7\u7b2c\u4e00\u6b65\u64cd\u4f5c\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1\u8fd9\u6574\u4e2a\u5b50\u6811\u5fc5\u5b9a\u5e73\u8861\u3001\u4e0d\u5f71\u54cd\u5bb6\u957f\u8282\u70b9\u7684\u9ed1\u9ad8\uff08\u9664\u4e86\u5bb6\u957f\u662f\u6839\u7684\u60c5\u51b5\uff09\u4e14\u7ea2\u70b9\u4e0d\u90bb\u7684\u3002

    \u7136\u800c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6839\u7684\u5bb6\u957f\u8282\u70b9\u662f\u5426\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u56e0\u6b64\u505a\u5206\u7c7b\u8ba8\u8bba\u3002\u5018\u82e5\u5176\u6839\u7684\u5bb6\u957f\u8282\u70b9\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u8fd8\u9700\u8981\u5411\u4e0a\u9012\u5f52\uff0c\u7ee7\u7eed\u8c03\u6574\uff0c\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8f6c\u5316\u4e3a\u5176\u4ed6 case\uff1b\u82e5\u8fd9\u5b50\u6811\u7684\u6839\u6ca1\u6709\u5bb6\u957f\u8282\u70b9\uff0c\u5219\u76f4\u63a5\u67d3\u9ed1\u7ea2\u6839\u5373\u53ef\uff1b\u800c\u5018\u82e5\u5b50\u6811\u6839\u8282\u70b9\u7684\u5bb6\u957f\u8282\u70b9\u662f\u9ed1\u8282\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u8c03\u6574\u5b8c\u6bd5\u4e86\u3002

    \u5728\u8fd9\u4e09\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u53ea\u6709 case 1 \u7684\u8f6c\u5316\u4f1a\u5bfc\u81f4\u6211\u4eec\u9012\u5f52\u5411\u4e0a\uff0c\u800c case 2 \u5411 case 3 \u7684\u8f6c\u5316\u5e76\u4e0d\u4f1a\u5bfc\u81f4\u6211\u4eec\u6539\u53d8\u5173\u6ce8\u7684\u5b50\u6811\u7684\u8303\u56f4\u3002

    \u4e3a\u4e86\u66f4\u6e05\u6670\u5730\u770b\u51fa\u5404\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u753b\u4e00\u4e2a\u72b6\u6001\u673a\uff1a

    graph LR;\nA[\"case 1\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD([\"finish\"])\n\nA ===>|\"C\"| B --->|\"R\"| C\nA ===>|\"C\"| A --->|\"C\"| D\nA ===>|\"C\"| C --->|\"C&R\"| D

    \u6ce8\u610f\uff0c\u72b6\u6001\u673a\u4e2d\u7684\u7c97\u7ebf\u8868\u793a\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u201c\u5b50\u6811\u201d\u5411\u4e0a\u6500\u5347\u4e86\u4e00\u7ea7\uff1b\u800c\u7ec6\u7ebf\u8868\u793a\u6211\u4eec\u5173\u6ce8\u7684\u5b50\u6811\u4ecd\u7136\u662f\u8fd9\u4e00\u5c42\u7684\u90a3\u4e00\u68f5\u3002\u4ee5\u53ca\uff0cC \u8868\u793a\u67d3\u8272\u64cd\u4f5c\uff0cR \u8868\u793a\u65cb\u8f6c\u64cd\u4f5c\u3002

    \u5176\u4e2d\uff0c\u4efb\u4f55\u4e00\u4e2a\u60c5\u51b5\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u60c5\u51b5\u3002\u6240\u4ee5\u53ef\u4ee5\u6570\u51fa\uff0c\u5230\u8fbe finish \u7684\u8def\u5f84\u4e2d\uff0c\u6700\u591a\u51fa\u73b0 2 \u6b21 Rotation\uff08case 2 -> case 3 -> finish\uff09\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u5220\u9664","title":"\u5220\u9664","text":"

    \u5173\u4e8e\u5220\u9664\u64cd\u4f5c\uff0c\u4e0b\u9762\u8fd9\u4e2a\u89c6\u9891\u8bb2\u7684\u5f88\u6e05\u6670\uff01\u53ea\u4e0d\u8fc7 case 1 \u53ef\u80fd\u8fd8\u6709\u4e9b\u7ec6\u8282\u9700\u8981\u6ce8\u610f\u3002

    \ud83d\udc49 \u7ea2\u9ed1\u6811\u5feb\u901f\u5165\u95e8 - 04\u5220\u9664

    \u8981\u5220\u9664\u67d0\u4e2a\u8282\u70b9 x\uff0c\u6211\u4eec\u9996\u5148\u8981\u627e\u5230\u5b83\uff0c\u5728 BST \u4e2d\u627e\u5230\u67d0\u4e2a x \u7684\u5f00\u9500\u4e3a \\(O(\\log N)\\)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u8981\u5220\u9664\u8fd9\u4e2a\u4efb\u610f\u4f4d\u7f6e\u7684\u8282\u70b9\uff0c\u8fd9\u52bf\u5fc5\u8ba9\u7ea2\u9ed1\u6811\u7684\u7ed3\u6784\u53d1\u751f\u53d8\u5316\u3002\u6b64\u5916\uff0c\u7ea2\u9ed1\u6027\u8d28\u7684\u7ef4\u62a4\u4e5f\u662f\u4e00\u4e2a\u8ba9\u4eba\u5934\u75bc\u7684\u95ee\u9898\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u5bf9\u8fd9\u4e9b\u60c5\u51b5\u505a\u5206\u7c7b\u8ba8\u8bba\uff1a

    \u6ca1\u6709\u975eNIL\u5b50\u8282\u70b9 \u6709\u4e00\u4e2a\u975eNIL\u5b50\u8282\u70b9 \u6709\u4e24\u4e2a\u975eNIL\u5b50\u8282\u70b9 \u76f4\u63a5\u7528NIL\u66ff\u4ee3 \u76f4\u63a5\u5220\u9664\uff0c\u7528\u5b50\u8282\u70b9\u66ff\u4ee3\u5b83 \u5c06\u503c\u4e0e\u5de6\u5b50\u6811\u6700\u5927\u503c\u6216\u53f3\u5b50\u6811\u6700\u5c0f\u503c\u4ea4\u6362\uff0c\u989c\u8272\u4e0d\u6362\uff0c\u7136\u540e\u5220\u9664\u76ee\u6807\u70b9

    \u5176\u4e2d\uff0c\u6bcf\u4e00\u9879\u64cd\u4f5c\u90fd\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u70b9\u7684\u6d88\u5931\uff08\u6bd5\u7adf\u662f\u5220\u9664\uff09\uff0c\u800c\u5982\u679c\u6d88\u5931\u7684\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u5c06\u4e0d\u4f1a\u5f71\u54cd\u9ed1\u9ad8\uff1b\u800c\u5982\u679c\u6d88\u5931\u7684\u662f\u9ed1\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u5c06\u4f1a\u5bfc\u81f4\u9ed1\u9ad8\u51cf\u5c11\u4e00\uff0c\u6b64\u65f6\u6211\u4eec\u9700\u8981\u505a\u8fdb\u4e00\u6b65\u64cd\u4f5c\u3002

    \u8bf4\u660e

    \u867d\u7136\u6211\u60f3\u5c3d\u53ef\u80fd\u62df\u5408 cy \u7684 ppt\uff0c\u4f46\u662f\u6211\u7b2c\u4e00\u904d\u5b9e\u5728\u6ca1\u770b\u61c2\uff0c\u6240\u4ee5 case \u7684\u7f16\u53f7\u6211\u5c31\u6309\u7167\u4e0a\u9762\u90a3\u4e2a\u89c6\u9891\u6765\u4e86\u3002

    \u8fd9\u662f case \u5e8f\u53f7\u7684\u5bf9\u5e94\u5173\u7cfb\uff1a

    my cy's my cy's case 1 case 2 case 2 case 4 case 3 case 3 case 4 case 1

    \u6211\u4eec\u6839\u636e\u60c5\u51b5\uff0c\u5c06\u60c5\u51b5\u5206\u4e3a\u56db\u79cd\uff1a

    \u9700\u8981\u505a\u4e00\u4e0b\u7b80\u5355\u8bf4\u660e\uff0c\u7c7b\u6bd4\u6211\u4eec\u5728#\u63d2\u5165\uff0c\u5728\u5220\u9664\u8fc7\u7a0b\u4e2d\u4e5f\u5b58\u5728\u9700\u8981\u5411\u4e0a\u9012\u5f52\u7684\u60c5\u51b5\u3002\u4e0e\u300c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u300d\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u8fd9\u91cc\u7684\u300c\u9700\u8981\u88ab\u5220\u9664\u7684\u76ee\u6807\u70b9\u300d\uff0c\u4e5f\u5e94\u5f53\u88ab\u770b\u4f5c\u300c\u5bfc\u81f4\u8c03\u6574\u51fa\u73b0\u7684\u5b50\u6811\u300d\uff0c\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u53ef\u4ee5\u5b9a\u4e49\u6210\u300c\u7531\u4e8e\u5220\u9664\u4e86\u67d0\u4e2a\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\uff0c\u8bf7\u8bb0\u4f4f\u8fd9\u4e2a\u5b9a\u4e49\uff0c\u8fd9\u4f1a\u8ba9\u4e4b\u540e\u7684\u9012\u5f52\u64cd\u4f5c\u53d8\u5f97\u81ea\u7136\u3002

    \u4f55\u65f6\u5220\u9664\u90a3\u4e2a\u7ed3\u70b9\uff1f

    \u867d\u7136\u6211\u4eec\u5bf9\u300c\u9700\u8981\u88ab\u5220\u9664\u7684\u76ee\u6807\u70b9\u300d\u8fdb\u884c\u4e86\u9012\u5f52\u7684\u6269\u5c55\u5b9a\u4e49\uff0c\u4f46\u662f\u5728\u7b2c\u4e00\u5c42\u6211\u4eec\u5c31\u53ef\u4ee5\u76f4\u63a5\u5c06\u5b83\u5220\u6389\u4e86\u3002\u800c\u8fd9\u4e2a\u70b9\u88ab\u5220\u9664\u9020\u6210\u7684\u5f71\u54cd\uff0c\u5df2\u7ecf\u7531\u300c\u7531\u4e8e\u5220\u9664\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\u7ee7\u627f\u4e86\u3002

    \u5728\u4e4b\u540e\u7684\u914d\u56fe\u4e2d\uff0c\u6211\u4eec\u90fd\u4e0d\u4f1a\u5c55\u793a x \u662f\u5982\u4f55\u88ab\u5220\u6389\u7684\uff0c\u800c\u662f\u5728\u7ed3\u679c\u56fe\u4e2d\u4fdd\u7559 x\u3002\u5982\u679c\u8bf4 x \u5c31\u662f\u6211\u4eec\u4e00\u5f00\u59cb\u8981\u5220\u9664\u7684\u90a3\u4e2a\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u5e94\u5f53\u5220\u6389 x\uff0c\u76f4\u63a5\u6362\u6210 NIL\uff1b\u5982\u679c x \u662f\u5728\u4f20\u9012\u8fc7\u7a0b\u4e2d\uff0c\u8868\u793a\u300c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\u7684\u6839\uff0c\u90a3\u4e48\u4e0d\u7528\u505a\u989d\u5916\u5904\u7406\u3002

    \u7c7b\u4f3c\u4e8e\u6211\u4eec\u5728\u300cInsertion / case 3\u300d\u91cc\u63d0\u5230\u7684\u201c\u4e0b\u653e\u201d\u9ed1\u8282\u70b9\uff0c\u5220\u9664\u64cd\u4f5c\u7684\u601d\u8def\u57fa\u672c\u4e0a\u662f\u201c\u4e0a\u653e\u201d\u9ed1\u8282\u70b9\uff0c\u6216\u8005\u8bf4\u201c\u5438\u7eb3\u201d\u9ed1\u8282\u70b9\u3002\u8fd9\u4e2a\u201c\u5438\u7eb3\u201d\u7684\u884c\u4e3a\uff0c\u6307\u7684\u662f\u4e00\u4e2a\u9ed1\u70b9\uff0c\u539f\u6765\u53ea\u4e3a\u53f3\u5b50\u6811\u4e2d\u7684\u6240\u6709\u8def\u5f84\u63d0\u4f9b\u4e86\u9ed1\u9ad8\uff0c\u73b0\u5728\u7531\u4e8e\u5b83\u7684 sibling \u5b50\u6811\u4e2d\u5c11\u4e86\u4e00\u4e2a\u9ed1\u8272\u8282\u70b9\uff0c\u6211\u4eec\u5c06\u8fd9\u4e2a\u9ed1\u8272\u8282\u70b9\u8f6c\u79fb\u5230\u5b83\u4eec\u7684\u5bb6\u957f\u8282\u70b9\u8282\u70b9\uff0c\u4e8e\u662f\u8fd9\u4e2a\u8282\u70b9\u540c\u65f6\u4e3a\u5de6\u53f3\u5b50\u6811\u7684\u6240\u6709\u8def\u5f84\u90fd\u8d21\u732e\u4e86\u9ed1\u9ad8\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u9010\u4e2a\u5206\u6790\u53d8\u5316\uff1a

    Deletion / case 1

    \u867d\u7136\u5927\u90e8\u5206\u6559\u7a0b\u90fd\u628a case 1 \u5f53\u4f5c\u4e00\u4e2a case\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5b8c\u5168\u53ef\u4ee5\u628a\u5b83\u6309\u7167 a \u8282\u70b9\u7684\u7ea2\u9ed1\uff0c\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\u3002

    Deletion / case 1.1

    \u5f53 a \u4e3a\u7ea2\u6839\u65f6\uff0c\u7531\u4e8e x \u8d21\u732e\u4e86\uff08\u76f8\u5bf9\u4e8e\u539f\u7ea2\u9ed1\u6811\uff09-1 \u7684\u9ed1\u9ad8\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6574\u4e2a\u5b50\u6811\u8d21\u732e\u7684\u9ed1\u9ad8\u4e0d\u53d8\uff0c\u6211\u4eec\u8003\u8651\u628a w \u7684\u9ed1\u9ad8\u201c\u4e0a\u653e\u201d\u5230 a \u4e0a\uff0c\u4e5f\u5c31\u662f\u4ece\u4e0b\u9762\u201c\u5438\u7eb3\u201d\u4e0a\u6765\u3002

    Deletion / case 1.2

    \u5f53 a \u4e3a\u9ed1\u6839\u65f6\uff0c\u6211\u4eec\u6ca1\u6709\u7a7a\u4f59\u7684\u4f4d\u7f6e\u6765\u201c\u5438\u7eb3\u201d w \u7684\u9ed1\u9ad8\uff0c\u4f46\u662f\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u7684\u4e0d\u5e73\u8861\u662f\u5fc5\u987b\u89e3\u51b3\u7684\uff0c\u800c\u6211\u4eec\u7edd\u4e0d\u80fd\u5bc4\u5e0c\u671b\u4e8e\u201c\u5728\u4e0d\u77e5\u9053\u6709\u6ca1\u6709\u7ea2\u8272\u8282\u70b9\u7684 b \u548c c \u7684\u5b50\u6811\u4e2d\u53bb\u5bfb\u627e\u7ea2\u8272\u8282\u70b9\u201d\u8fd9\u4e2a\u60f3\u6cd5\u3002

    \u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4eff\u7167\u300cInsertion / case 3\u300d\uff0c\u5c06\u6574\u4e2a\u6811\u6807\u8bb0\u4e3a\u7070\u8272\u2014\u2014\u300c\u7531\u4e8e\u5220\u9664\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\uff0c\u7136\u540e\u8fdb\u4e00\u6b65\u6839\u636e\u5176\u5bb6\u957f\u8282\u70b9\u7684\u60c5\u51b5\u9012\u5f52\u5230\u5176\u4ed6 case\u3002\u5176\u4e2d\uff0c\u5f53\u6211\u4eec\u9012\u5f52\u5230 a \u662f\u6574\u4e2a\u6811\u7684\u6839\u65f6\u53ef\u4ee5\u9000\u51fa\uff0c\u56e0\u4e3a\u8fd9\u76f8\u5f53\u4e8e\u6574\u4e2a\u6811\u7684\u9ed1\u9ad8 -1\uff0c\u4e0d\u5f71\u54cd\u7ea2\u9ed1\u6027\u8d28\u3002

    Deletion / case 2

    \u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

    1. \u5c06 w \u67d3\u4e3a a \u7684\u989c\u8272\uff0c\u518d\u5c06 a \u548c c \u67d3\u6210\u9ed1\u8272\uff1b
    2. \u5c06 a \u5de6\u65cb\uff0c\u4f7f w \u6210\u4e3a\u8fd9\u4e2a\u5b50\u6811\u65b0\u7684\u6839\uff0ca \u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff0cb \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff1b
    3. \u8c03\u6574\u7ed3\u675f\uff1b

    Deletion / case 3

    \u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

    1. \u4ea4\u6362 b \u548c w \u7684\u989c\u8272\uff1b
    2. \u5c06 w \u53f3\u65cb\uff0c\u4f7f b \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff0cw \u6210\u4e3a b \u7684\u53f3\u513f\u5b50\uff0cb \u7684\u53f3\u513f\u5b50\u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff1b
    3. \u6b64\u65f6\u60c5\u51b5\u8f6c\u5316\u4e3a case 2\uff1b

    Deletion / case 4

    \u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

    1. \u4ea4\u6362 a \u548c w \u7684\u989c\u8272\uff1b
    2. \u5c06 a \u5de6\u65cb\uff0c\u4f7f w \u6210\u4e3a\u8fd9\u4e2a\u5b50\u6811\u65b0\u7684\u6839\uff0ca \u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff0cb \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff1b
    3. \u6b64\u65f6\u6839\u636e\u5b50\u6811 a \u7684\u60c5\u51b5\uff0c\u8f6c\u5316\u4e3a case 1.1 / case 2 / case 3\uff1b
    \u533a\u5206 case 1.1 \u548c case 1.2\u4e0d\u533a\u5206 case 1.1 \u548c case 1.2
    graph LR;\nA1[\"case 1.1\"]\nA2[\"case 1.2\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD[\"case 4\"]\nE[\"finish\"]\n\nA1 --->|\"C\"| E\nA2 ===>|\"C\"| A1\nA2 ===>|\"C\"| A2\nA2 ===>|\"C\"| B\nA2 ===>|\"C\"| C\nA2 ===>|\"C\"| D\nC --->|\"C&R\"| B --->|\"C&R\"| E\nD ===>|\"C&R\"| A1\nD ===>|\"C&R\"| B\nD ===>|\"C&R\"| C
    graph LR;\nA[\"case 1\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD[\"case 4\"]\nE[\"finish\"]\n\nA --->|\"C\\nfrom case 1.1\"| E\nA ===>|\"C\\nfrom case 1.2\"| A\nA ===>|\"C\\nfrom case 1.2\"| B\nA ===>|\"C\\nfrom case 1.2\"| C\nA ===>|\"C\\nfrom case 1.2\"| D\nC --->|\"C&R\"| B --->|\"C&R\"| E\nD ===>|\"C&R\\nto case 1.1 \"| A\nD ===>|\"C&R\"| B\nD ===>|\"C&R\"| C

    \u6ce8\u610f\uff0c\u72b6\u6001\u673a\u4e2d\u7684\u7c97\u7ebf\u8868\u793a\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u201c\u5b50\u6811\u201d\u5411\u4e0a\u6216\u5411\u4e0b\u8f6c\u79fb\u4e86\u4e00\u7ea7\uff08\u7531 case 4 \u51fa\u53d1\u65f6\u4e0b\u964d\uff0c\u7531 case 1.2 \u51fa\u53d1\u65f6\u4e0a\u5347\uff09\uff1b\u800c\u7ec6\u7ebf\u8868\u793a\u6211\u4eec\u5173\u6ce8\u7684\u5b50\u6811\u4ecd\u7136\u662f\u8fd9\u4e00\u5c42\u7684\u90a3\u4e00\u68f5\u3002\u4ee5\u53ca\uff0cC \u8868\u793a\u67d3\u8272\u64cd\u4f5c\uff0cR \u8868\u793a\u65cb\u8f6c\u64cd\u4f5c\u3002

    \u5176\u4e2d\uff0c\u4efb\u4f55\u4e00\u4e2a\u60c5\u51b5\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u60c5\u51b5\u3002\u6240\u4ee5\u53ef\u4ee5\u6570\u51fa\uff0c\u5230\u8fbe finish \u7684\u8def\u5f84\u4e2d\uff0c\u6700\u591a\u51fa\u73b0 3 \u6b21 Rotation\uff08case 4 -> case 3 -> case 2 -> finish\uff09\u3002

    \u6839\u636e\u524d\u9762\u72b6\u6001\u673a\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u4e0d\u96be\u5f97\u5230\u8fd9\u5f20\u8868\u683c\uff0c\u5b83\u7edf\u8ba1\u7684\u662f Rotation \u5728\u4e0d\u540c\u6570\u636e\u7ed3\u6784\u3001\u4e0d\u540c\u64cd\u4f5c\u4e2d\u51fa\u73b0\u7684\u6570\u91cf\uff1a

    Option AVL Tree RB Tree Insertion \\(\\leq 2\\) \\(\\leq 2\\) Deletion \\(O(\\log N)\\) \\(\\leq 3\\)"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#b-tree","title":"B+ Tree","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/bplus-tree/

    Wiki: https://en.wikipedia.org/wiki/B%2B_tree

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u6982\u5ff5_1","title":"\u6982\u5ff5","text":"

    B+ \u6811\u662f\u4e00\u79cd\u7528\u6811\u72b6\u5f62\u5f0f\u7ef4\u62a4\u6709\u5e8f\u6570\u5217\u6bd4\u8f83\u4fe1\u606f\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5176\u589e\u6539\u64cd\u4f5c\u62e5\u76f8\u5bf9\u4e8e\u4e8c\u53c9\u6811\u7ed3\u6784\u66f4\u52a0\u7a33\u5b9a\u7684\u5bf9\u6570\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u901a\u5e38\u7528\u4e8e\u6570\u636e\u5e93\u548c\u64cd\u4f5c\u7cfb\u7edf\u7684\u6587\u4ef6\u7cfb\u7edf\u4e2d\u3002

    B+ Tree

    \u5982\u4e0b\u56fe\u5c31\u662f\u4e00\u9897 \\(M=4\\) \u7684 B+ \u6811\uff0c\u53ef\u4ee5\u5bf9\u7167\u7740\u8fd9\u4e2a\u4f8b\u5b50\u6765\u7406\u89e3\u6027\u8d28\u3002

    \u66f4\u4e00\u822c\u5730\u6765\u8bf4\uff0cB+ \u6811\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

    property of B+ Tree

    @cy's PPT

    1. The root is either a leaf or has between \\(2\\) and \\(M\\) children.
    2. All nonleaf nodes (except the root) have between \\(\\lceil M/2 \\rceil\\) and M children.
    3. All leaves are at the same depth.

    Assume each nonroot leaf also has between \\(\\lceil M/2 \\rceil\\) and \\(M\\) children.

    \u6240\u6709\u771f\u5b9e\u7684\u6570\u636e\u90fd\u88ab\u5b58\u50a8\u5728\u53f6\u5b50\u7ed3\u70b9\u4e2d\uff0c\u5f62\u6210\u4e00\u4e2a\u6709\u5e8f\u7684\u6570\u5217\u3002\u800c\u975e\u53f6\u5b50\u7ed3\u70b9\u4e2d\u7b2c i \u4e2a\u952e\u503c\u7b49\u4e8e\u5176\u7b2c i+1 \u68f5\u5b50\u6811\u7684\u6700\u5c0f\u503c\uff08\u5728\u4e0a\u56fe\u4e2d\u8868\u73b0\u4e3a\u989c\u8272\u76f8\u540c\u7684\u4e00\u5bf9\u4e0a\u4e0b\u7ed3\u70b9\uff09\uff0c\u56e0\u6b64\u975e\u53f6\u7ed3\u70b9\u6700\u591a\u5b58 \\(M-1\\) \u4e2a\u503c\u3002

    \u53d1\u73b0

    \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\u8fd9\u6837\u4e00\u4e2a\u6027\u8d28\uff1a\u5728\u5b58\u50a8\u6570\u503c\u4e0d\u91cd\u590d\u7684\u60c5\u51b5\u4e0b\uff0c\u975e\u53f6\u7ed3\u70b9\u5b58\u50a8\u7684\u952e\u503c\u90fd\u4e0d\u76f8\u540c\u3002

    \u8bc1\u660e\u5f88\u7b80\u5355\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u975e\u53f6\u5b50\u7ed3\u70b9\uff0c\u5b83\u5b58\u50a8\u7684\u503c\u5fc5\u5b9a\u4e0d\u4f1a\u88ab\u5b83\u7684\u5b50\u8282\u70b9\u5b58\u50a8\uff08\u5982\u679c\u5b83\u7684\u5b50\u8282\u70b9\u4e0d\u662f\u53f6\u5b50\uff09\uff0c\u56e0\u4e3a\u5b83\u5b58\u7684\u662f\u5b83\u7684\u5b50\u8282\u70b9\u7684\u7b2c\u4e00\u4e2a\u5b50\u6811\u7684\u6700\u5c0f\u503c\uff0c\u800c\u5b83\u7684\u5b50\u8282\u70b9\u5b58\u7684\u662f\u7b2c\u4e8c\u4e2a\u5b50\u6811\u5f00\u59cb\u7684\u6700\u5c0f\u503c\u3002

    \u6211\u4eec\u79f0\u8fd9\u6837\u7684\u6811\u4e3a\u4e00\u4e2a \\(M\\) \u9636(order) B+ \u6811\u3002\u5bf9\u4e8e\u5e38\u89c1\u7684 \\(M\\)\uff0c\u6bd4\u5982\u4e00\u68f5 \\(4\\) \u9636 B+ \u6811\uff0c\u6211\u4eec\u4e5f\u79f0\u4e4b\u4e3a\u4e00\u68f5 2-3-4 \u6811\uff0c\u4e00\u822c \\(M\\) \u7684\u9009\u62e9\u4e3a 3 \u6216 4\u3002

    \u7279\u522b\u8bf4\u660e\uff0c\u5bf9\u4e8e B+ \u6811\uff0c\u5c06\u5b83\u7684\u53f6\u5b50\u7ed3\u70b9\u62fc\u63a5\u8d77\u6765\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u6709\u5e8f\u6570\u5217\u3002

    \u62bd\u8c61\u5730\u6765\u8bf4\u5c31\u662f\uff0c\u6211\u4eec\u628a\u4e00\u4e2a\u6570\u5217\u76f8\u5bf9\u5747\u5300\u7684\u5206\u4e3a \\(m\\) \u5757\uff0c\u7136\u540e\u628a\u5206\u754c\u7684\u6570\u62ff\u51fa\u6765\u3002\u5f53\u6211\u4eec\u53bb\u67e5\u627e\u6216\u63d2\u5165\u65f6\uff0c\u53ea\u9700\u8981\u548c\u8fd9\u4e9b\u8fb9\u754c\u6570\u8fdb\u884c\u6bd4\u8f83\uff0c\u5c31\u77e5\u9053\u5b83\u5e94\u8be5\u653e\u5728\u54ea\u4e00\u5757\u91cc\u3002\u518d\u4e0d\u65ad\u7ec6\u5316\u7c92\u5ea6\uff0c\u7528\u7c7b\u4f3c\u4e8e\u201c\\(m\\) \u5206\u201d\u7684\u601d\u60f3\u6765\u627e\u5230\u76ee\u6807\u4f4d\u7f6e\u3002

    \u5728\u6211\u770b\u6765\u8fd9\u4e2a\u5b9a\u4e49\u975e\u5e38\u6e05\u6670\uff0c\u5c31\u662f\u5c06\u6574\u4e2a\u5e8f\u5217\u6309\u7167\u4e0d\u540c\u7c92\u5ea6\u5212\u5206\uff0c\u7136\u540e\u7531\u5927\u5230\u5c0f\u8fdb\u884c\u903c\u8fd1\u3002

    depth of B+ Tree

    \u7531\u4e8e\u5b83\u5728\u7a7a\u95f4\u6700\u6d6a\u8d39\u7684\u60c5\u51b5\u4e0b\u662f\u4e00\u68f5 \\(\\lceil M/2 \\rceil\\) \u53c9\u6811\uff0c\u6240\u4ee5 B+ \u6811\u7684\u6df1\u5ea6\u662f \\(O(\\lceil \\log_{\\lceil M/2 \\rceil} N \\rceil)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u64cd\u4f5c_1","title":"\u64cd\u4f5c","text":"

    \u7531\u4e8e B+ \u6811\u7684\u6027\u8d28\u5341\u5206\u81ea\u7136\uff0c\u6240\u4ee5\u5b83\u7684\u64cd\u4f5c\u4ece\u601d\u60f3\u5c42\u9762\u4e0a\u6765\u8bf4\u4e5f\u975e\u5e38\u7b80\u5355\u3002\u5176\u66f4\u591a\u7684\u96be\u5ea6\u5728\u4e8e\u5b9e\u73b0\u4e0a\u3002

    \u5173\u4e8e\u5b9e\u73b0\u7684\u5efa\u8bae

    \u7531\u4e8e B+ \u6811\u5173\u4e8e\u5185\u90e8\u8282\u70b9\u548c\u53f6\u5b50\u7684\u5b9a\u4e49\u5341\u5206\u5272\u88c2\uff08\u867d\u7136\u7ea2\u9ed1\u6811\u53f6\u4e5f\u5f88\u5272\u88c2\uff0c\u4f46\u662f\u6bd5\u7adf\u7ea2\u9ed1\u6811\u7684\u53f6\u5b50\u4e0d\u9700\u8981\u4ec0\u4e48\u64cd\u4f5c\uff0c\u4f46\u662f B+ \u6811\u9700\u8981\uff09\uff0c\u6240\u4ee5\u5728\u5b9e\u73b0\u8fc7\u7a0b\u4e2d\u4f1a\u9047\u5230\u4e00\u4e9b\u9ebb\u70e6\u3002

    \u6211\u4e2a\u4eba\u5efa\u8bae\uff0c\u5982\u679c\u4f60\u5341\u5206\u719f\u6089 oop\uff0c\u90a3\u4e48\u53ef\u4ee5\u5c1d\u8bd5\u7528\u591a\u6001\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u53cd\u6b63\u6211\u5b9e\u73b0 B+ \u6811\u7684\u65f6\u5019\u5bf9 cpp \u7684 oop \u6211\u8bf4\u4e0d\u4e0a\u5341\u5206\u719f\u7ec3\uff0c\u6240\u4ee5\u6211\u76f4\u63a5\u65e0\u8111\u4f7f\u7528 struct with tag \u5b9e\u73b0\u4e86\u3002

    \u800c\u5728\u5f00\u59cb\u5199\u4ee3\u7801\u4e4b\u524d\uff0c\u6211\u5f3a\u70c8\u5efa\u8bae\u5927\u5bb6\u6309\u7167\u6211\u4e0b\u9762\u505a\u56fe\u7684\u683c\u5f0f\uff0c\u6a21\u62df\u4e00\u904d\u5404\u4e2a\u64cd\u4f5c\uff01\u5e76\u5728\u6a21\u62df\u8fc7\u7a0b\u4e2d\uff0c\u89c2\u5bdf\u6570\u636e\u7684\u6d41\u52a8\u4ee5\u53ca\u8282\u70b9\u7684\u7ed3\u6784\u53d8\u5316\u3002

    \u6b64\u5916\uff0c\u5728\u8ba8\u8bba\u8fd9\u4e9b\u64cd\u4f5c\u65f6\uff0c\u5148\u8ba9\u6211\u4eec\u5ffd\u7565\u5982\u4f55\u4ece\u7a7a\u5efa\u7acb\u8d77\u4e00\u4e2a B+ \u6811\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u67e5\u627e","title":"\u67e5\u627e","text":"

    \u548c\u4e8c\u53c9\u6811\u7684\u67e5\u627e\u5341\u5206\u76f8\u4f3c\uff0c\u6240\u4ee5\u8fd9\u91cc\u53ea\u6a21\u62df\u4e00\u4e0b\u4e3e\u4e2a\u4f8b\u5b50\u3002

    \u4f8b\u5982\uff0c\u6211\u4eec\u5728\u4e0a\u9762\u8fd9\u68f5\u6811\u4e2d\u627e 43 \u8fd9\u4e2a\u503c\uff0c\u6a59\u8272\u90e8\u5206\u8868\u793a\u6211\u4eec\u7684\u7126\u70b9\u3002

    Find(43)

    Frame 1Frame 2Frame 3

    \u6211\u4eec\u53d1\u73b0\u6709 \\(21 \\leq 43 < 48\\)\uff0c\u6240\u4ee5\u987a\u7740\u6807\u8bc6\u7684\u6a59\u8272\u6307\u9488\u5411\u4e0b\u3002

    \u6211\u4eec\u53d1\u73b0\u6709 \\(41 \\leq 43\\)\uff0c\u6240\u4ee5\u987a\u7740\u6807\u8bc6\u7684\u6a59\u8272\u6307\u9488\u5411\u4e0b\u3002

    \u5df2\u7ecf\u8d70\u5230\u53f6\u5b50\u7ed3\u70b9\uff0c\u6700\u540e\u53d1\u73b0\u6211\u4eec\u8981\u627e\u7684 43\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u63d2\u5165_1","title":"\u63d2\u5165","text":"

    \u63d2\u5165\u7684\u65b9\u6cd5\u4e5f\u76f8\u5bf9\u6734\u7d20\u7b80\u5355\uff0c\u5c31\u662f\u627e\u5230\u8be5\u63d2\u5165\u7684\u5730\u65b9\u4ee5\u540e\u63d2\u5165\u5373\u53ef\u3002

    \u53ea\u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u4e00\u4ef6\u4e8b\uff0c\u5f53\u8fd9\u4e2a\u63d2\u5165\uff0c\u5bfc\u81f4\u4e86 B+ \u6811\u7684\u6027\u8d28\u4e0d\u518d\u6210\u7acb\u65f6\uff0c\u5373\u5bfc\u81f4\u5176\u5bb6\u957f\u8282\u70b9\u7684\u5b50\u8282\u70b9\u6570\u91cf\u4e3a \\(M+1\\) \u65f6\uff0c\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u4e2a\u7ed3\u70b9\u5e73\u5747\u5206\u88c2\u6210\u4e24\u4e2a\uff0c\u6b64\u65f6\u663e\u7136\u6709\u4e24\u4e2a\u5b50\u6811\u7684\u8282\u70b9\u6570\u91cf\u90fd\u4e0d\u5c0f\u4e8e \\(\\lceil M+1 \\rceil\\)\u3002\u4f46\u8fd9\u8fd8\u4e0d\u591f\uff0c\u5206\u88c2\u5bfc\u81f4\u5bb6\u957f\u8282\u70b9\u7684\u5bb6\u957f\u8282\u70b9\u7684\u5b50\u8282\u70b9\u53d8\u591a\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u5f97\u5411\u4e0a\u9012\u5f52\u3002

    \u4f9d\u7136\u662f\u8fdb\u884c\u4e00\u4e2a\u6a21\u62df\uff0c\u6211\u4eec\u6a21\u62df\u63d2\u5165 46 \u548c 44\u3002

    Insert(46), no split

    Frame 1Frame 2Frame 3

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u627e\u5230\u8981\u585e\u7684\u4f4d\u7f6e\u4e86\uff0c\u53d1\u73b0\u8981\u585e\u7684\u5730\u65b9\u662f 45 \u7684\u540e\u9762\uff0c\u63d2\u5165\u4ee5\u540e\u53d1\u73b0\u4e00\u5171 4 \u4e2a\u6570\uff0c\u800c \\(M=4\\)\uff0c\u4e0d\u9700\u8981\u5206\u88c2\u3002

    Insert(44), split

    Frame 1Frame 2Frame 3Frame 4Frame 5Frame 6

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u627e\u5230\u8981\u585e\u7684\u4f4d\u7f6e\u4e86\uff0c\u53d1\u73b0\u8981\u585e\u7684\u5730\u65b9\u662f 45 \u7684\u524d\u9762\uff0c\u63d2\u5165\u4ee5\u540e\u53d1\u73b0\u4e00\u5171 5 \u4e2a\u6570\uff0c\u800c \\(M=4\\)\uff0c\u9700\u8981\u5206\u88c2\uff01

    \u5411\u4e0a\u9012\u5f52\uff0c\u6211\u4eec\u60b2\u75db\u5730\u53d1\u73b0\uff0c\u8fd9\u4e2a\u8282\u70b9\u5728\u5206\u88c2\u540e\u6709\u4e86 5 \u4e2a\u5b50\u8282\u70b9\uff0c\u4e0d\u5f97\u4e0d\u518d\u6b21\u5206\u88c2\u3002

    \u5411\u4e0a\u9012\u5f52\uff0c\u6211\u7684\u8001\u5929\u7237\u5440\uff0c\u600e\u4e48\u8fd8\u6ca1\u5230\u5934\uff01\u8fd9\u4e0b\u6211\u4eec\u8981\u5206\u88c2\u6839\u90e8\u4e86\uff01

    \u7531\u4e8e\u6839\u90e8\u88ab\u88c2\u5f00\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u6839\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6811\u7684\u5c42\u6570\u589e\u9ad8\u4e86\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u7ec8\u4e8e\u5b8c\u6210\u4e86\u63d2\u5165\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/","title":"Lecture 3 | Inverted File Index","text":"

    \u7ea6 1461 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u5012\u6392\u7d22\u5f15","title":"\u5012\u6392\u7d22\u5f15","text":"

    \u5012\u6392\u7d22\u5f15\uff08inverted file index\uff09\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u6587\u672c\u68c0\u7d22\u6280\u672f\uff0c\u7528\u4e8e\u5feb\u901f\u67e5\u627e\u5305\u542b\u7279\u5b9a\u5355\u8bcd\u6216\u77ed\u8bed\u7684\u6587\u6863\u3002\u5b83\u901a\u8fc7\u5c06\u5355\u8bcd\u6216\u77ed\u8bed\u4f5c\u4e3a\u5173\u952e\u5b57\uff0c\u5e76\u5c06\u5b83\u4eec\u51fa\u73b0\u5728\u6587\u6863\u4e2d\u7684\u4f4d\u7f6e\u8bb0\u5f55\u5728\u4e00\u4e2a\u7d22\u5f15\u4e2d\uff0c\u4ece\u800c\u652f\u6301\u5feb\u901f\u7684\u6587\u672c\u68c0\u7d22\u3002\u5728\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u7cfb\u7edf\u53ef\u4ee5\u5feb\u901f\u5730\u5b9a\u4f4d\u5305\u542b\u6307\u5b9a\u5355\u8bcd\u6216\u77ed\u8bed\u7684\u6587\u6863\uff0c\u5e76\u8fd4\u56de\u5b83\u4eec\u7684\u76f8\u5173\u4fe1\u606f\u3002\u5012\u6392\u7d22\u5f15\u5e7f\u6cdb\u5e94\u7528\u4e8e\u641c\u7d22\u5f15\u64ce\u3001\u6570\u636e\u5e93\u7cfb\u7edf\u548c\u4fe1\u606f\u68c0\u7d22\u7b49\u9886\u57df\u3002

    \u2014\u2014 ChatGPT

    Info

    Wiki: https://en.wikipedia.org/wiki/Inverted_index

    \u6240\u8c13\u7684\u5012\u6392\u7d22\u5f15\uff0c\u6240\u6709\u7684\u601d\u60f3\u90fd\u51dd\u7ed3\u5728\u4e86\u201c\u5012\u201d\uff0c\u4e5f\u5c31\u662f inverted\u3002\u5982\u679c\u53ef\u4ee5\uff0c\u6211\u89c9\u5f97\u7528\u201c\u9006\u201d\u66f4\u5408\u9002\u3002\u8fd9\u91cc\u7684\u7d22\u5f15\u5bf9\u8c61\u6307\u7684\u662f\u201c\u6587\u6863\u201d\u548c\u201c\u5355\u8bcd\u201d\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u800c\u5012\u6392\u7d22\u5f15\u7684\u610f\u601d\u662f\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u5355\u8bcd\uff0c\u6211\u4eec\u8bb0\u5f55\u5b83\u51fa\u73b0\u5728\u54ea\u4e9b\u6587\u6863\u4e2d\uff0c\u4ee5\u53ca\u8bb0\u5f55\u4ed6\u4eec\u51fa\u73b0\u7684\u6b21\u6570\uff08\u9891\u7387\uff09\u3002

    \u641c\u7d22\u5f15\u64ce\u662f\u4e00\u4e2a\u975e\u5e38\u5e38\u89c1\u7684\uff0c\u5012\u6392\u7d22\u5f15\u7684\u5e94\u7528\u6848\u4f8b\uff0c\u6211\u4eec\u901a\u8fc7\u8f93\u5165\u6211\u4eec\u5173\u6ce8\u7684\u8bcd\u8bed\uff0c\u6765\u7d22\u5f15\u5305\u542b\u8fd9\u4e2a\u8bcd\u7684\u6240\u6709\u6587\u6863\u3002 \u5f53\u7136\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u8003\u8651\u7684\u662f\u82f1\u6587\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u5012\u6392\u7d22\u5f15\u7684\u5b9e\u73b0","title":"\u5012\u6392\u7d22\u5f15\u7684\u5b9e\u73b0","text":"

    \u77e5\u9053\u4e86\u5012\u6392\u7d22\u5f15\u7684\u601d\u60f3\u4e4b\u540e\uff0c\u5176\u5b9e\u73b0\u5c31\u53d8\u5f97\u975e\u5e38\u76f4\u89c2\u4e86\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u4e00\u4e2a\u5b57\u5178\u6765\u63cf\u8ff0\u4e00\u7c7b\u5173\u7cfb\uff0c\u5176\u4e3b\u952e\u4e3a\u5355\u8bcd\uff0c\u952e\u503c\u4e3a\u8fd9\u4e2a\u5355\u8bcd\u51fa\u73b0\u7684\u6240\u6709\u4f4d\u7f6e\u3002

    \u6700\u6734\u7d20\u7684\u7248\u672c\u5c31\u662f\u8ba9\u952e\u503c\u4e3a\u5355\u8bcd\u51fa\u73b0\u8fc7\u7684\u6587\u6863\u7684\u5e8f\u53f7\u5e8f\u5217\uff0c\u800c\u5982\u679c\u6211\u4eec\u8fd8\u9700\u8981\u77e5\u9053\u8bcd\u6c47\u51fa\u73b0\u7684\u4f4d\u7f6e\uff0c\u5219\u53ef\u4ee5\u8ba9\u952e\u503c\u662f\u4e00\u4e2a\u4e8c\u5143\u7ec4\u7684\u5e8f\u5217\uff0c\u5176\u4e2d\u7b2c\u4e00\u4e2a\u5143\u7d20\u662f\u6587\u6863\u7684\u5e8f\u53f7\uff0c\u7b2c\u4e8c\u4e2a\u5143\u7d20\u662f\u5355\u8bcd\u5728\u6587\u6863\u4e2d\u51fa\u73b0\u7684\u4f4d\u7f6e\u3002

    \u4e00\u4e2a \ud83c\udf30

    \u4f8b\u5982\u6211\u4eec\u6709\u5982\u4e0b\u6587\u4ef6\u96c6\uff1a

    \u6587\u6863\u96c6

    Doc Text 1 Gold silver truck 2 Shipment of gold damaged in a fire 3 Delivery of silver arrived in a silver truck 4 Shipment of gold arrived in a truck

    \u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u5982\u4e0b\u7684\u5012\u6392\u7d22\u5f15\uff1a

    \u5012\u6392\u7d22\u5f15

    No. Term Times; (Doc ID: Places) 1 a {3; (2;6),(3;6),(4;6)} 2 arrived {2; (3;4),(4;4)} 3 damaged {1; (2;4)} 4 delivery {1; (3;1)} 5 fire {1; (2;7)} 6 gold {3; (1;1),(2;3),(4;3)} 7 of {3; (2;2),(3;2),(4;2)} 8 in {3; (2;5),(3;5),(4;5)} 9 shipment {2; (2;1),(4;1)} 10 silver {2; (1;2),(3;3,7)} 11 truck {3; (1;3),(3;8),(4;7)}

    \u6240\u4ee5\u5b9e\u9645\u4e0a\u975e\u5e38\u7b80\u5355\uff0c\u6211\u4eec\u53ea\u9700\u8981\u626b\u63cf\u6587\u6863\uff0c\u7136\u540e\u5b58\u4e0b\u6bcf\u4e00\u4e2a\u6587\u4ef6\u5728\u54ea\u91cc\u51fa\u73b0\u8fc7\u5373\u53ef\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u6539\u8fdb","title":"\u6539\u8fdb","text":"

    \u90a3\u4e48\u5230\u6b64\u4e3a\u6b62\u4e86\u5417\uff1f\u975e\u4e5f\u3002\u5018\u82e5\u6beb\u65e0\u8282\u5236\u7684\u5c06\u6240\u6709\u8bcd\u90fd\u5b58\u5230\u5012\u6392\u7d22\u5f15\u4e2d\uff0c\u90a3\u4e48\u6211\u4eec\u7684\u5012\u6392\u7d22\u5f15\u5c31\u4f1a\u53d8\u5f97\u975e\u5e38\u5927\uff0c\u5176\u4e2d\u5fc5\u7136\u6709\u5f88\u591a\u5197\u4f59\u4fe1\u606f\u5b58\u5728\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5bf9\u5012\u6392\u7d22\u5f15\u8fdb\u884c\u4e00\u4e9b\u6539\u8fdb\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u505c\u7528\u8bcd","title":"\u505c\u7528\u8bcd","text":"

    \u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u6211\u4eec\u5b58\u4e0b\u6765\u7684\u8fd9\u4e9b\u5185\u5bb9\u4e2d\uff0c\u6709\u4e00\u4e9b\u4e1c\u897f\u9891\u7e41\u5730\u51fa\u73b0\u5728\u6240\u6709\u6587\u6863\u4e2d\uff0c\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e9b\u8bcd\u53ef\u80fd\u5e76\u4e0d\u4f1a\u6210\u4e3a\u4e00\u4e2a\u7d22\u5f15\uff0c\u4f8b\u5982\u6b63\u5e38\u7684\u82f1\u6587\u6587\u7ae0\u4e2d\u7684 a\uff0cthe \u7b49\u3002\u6240\u4ee5\uff0c\u5bf9\u4e8e\u8fd9\u4e00\u7c7b\u8bcd\u2014\u2014\u6211\u4eec\u79f0\u4e4b\u4e3a\u505c\u7528\u8bcd(stop words)\uff0c\u5bf9\u4e8e\u505c\u7528\u8bcd\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5c06\u4ed6\u4eec\u5b58\u4e0b\u4e86\u3002

    \u54ea\u4e9b\u8bcd\u4f1a\u6210\u4e3a\u505c\u7528\u8bcd\uff1f

    \u4e00\u822c\u4e00\u4e2a\u8bcd\u6210\u4e3a\u505c\u7528\u8bcd\uff0c\u662f\u56e0\u4e3a\u5b83\u65e0\u6cd5\u6210\u4e3a\u4e00\u4e2a\u6709\u6548\u7684\u68c0\u7d22\u5173\u952e\u5b57\uff0c\u5b83\u53ef\u80fd\u662f\u5728\u5927\u91cf\u8d44\u6599\u4e2d\u5927\u91cf\u51fa\u73b0\uff0c\u5bfc\u81f4\u6211\u4eec\u65e0\u6cd5\u5229\u7528\u5b83\u627e\u51fa\u6211\u4eec\u60f3\u8981\u7684\u8d44\u6599\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e00\u4e2a\u5171\u901a\u70b9\u662f\u5b83\u4eec\u901a\u5e38\u90fd\u6709\u7740\u76f8\u5f53\u9ad8\u7684\u51fa\u73b0\u9891\u7387\u3002

    \u4f46\u662f\u6211\u4eec\u4e5f\u4e0d\u80fd\u76f2\u76ee\u5730\u5c06\u6240\u6709\u7684\u8bcd\u90fd\u4f5c\u4e3a\u505c\u7528\u8bcd\uff0c\u56e0\u4e3a\u6709\u4e9b\u8bcd\u5b83\u5728\u67d0\u4e9b\u542b\u4e49\u4e0b\u9002\u5408\u4f5c\u4e3a\u4e00\u79cd\u505c\u7528\u8bcd\uff0c\u4f46\u662f\u5728\u53e6\u4e00\u4e9b\u542b\u4e49\u4e0b\uff0c\u5b83\u5c31\u4e0d\u9002\u5408\u4f5c\u4e3a\u505c\u7528\u8bcd\u4e86\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u95ee\u9898\u5c31\u53d8\u5f97\u6bd4\u8f83\u590d\u6742\u4e86\uff0c\u6240\u4ee5\u8fd9\u91cc\u5e76\u4e0d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u8bcd\u5e72\u5206\u6790","title":"\u8bcd\u5e72\u5206\u6790","text":"

    \u8bcd\u5e72\u5206\u6790(word stemming)\u662f\u4e00\u79cd\u5c06\u5355\u8bcd\u8f6c\u6362\u4e3a\u5176\u8bcd\u5e72\u7684\u6280\u672f\u3002\u4f8b\u5982\uff0c\u8bcd\u5e72\u5206\u6790\u53ef\u4ee5\u5c06\u5355\u8bcd trouble\uff0ctroubled\uff0ctroubles\uff0ctroubling \u90fd\u8f6c\u6362\u4e3a trouble\uff08\u751a\u81f3\u662f troubl\uff0c\u6838\u5fc3\u76ee\u7684\u662f\u8ba9\u5b83\u4eec\u53d8\u6210\u540c\u4e00\u4e2a\u5355\u8bcd\uff09\u3002\u76f8\u540c\u8bcd\u5e72\u7684\u8bcd\u6709\u7740\u7c7b\u4f3c\u7684\u542b\u4e49\uff0c\u5728\u68c0\u7d22 troubled \u7684\u65f6\u5019\uff0c\u5f53\u7136\u4e5f\u53ef\u80fd\u60f3\u627e\u5230\u5305\u542b trouble \u7684\u6587\u6863\u3002\u8fd9\u79cd\u6280\u672f\u4e5f\u53ef\u4ee5\u8ba9\u591a\u4e2a\u5355\u8bcd\u5171\u4eab\u540c\u4e00\u6761\u7d22\u5f15\u8bb0\u5f55\uff0c\u5728\u5b58\u548c\u627e\u7684\u8fc7\u7a0b\u4e2d\u90fd\u80fd\u4f18\u5316\u6548\u679c\u3002

    \u4e0d\u8fc7\u5728\u5177\u4f53\u64cd\u4f5c\u65b9\u9762\uff0c\u8fd9\u4e2a\u4e1c\u897f\u5c31\u663e\u5f97\u6bd4\u8f83\u7e41\u6742\u548c\u66b4\u529b\u4e86\uff0c\u6211\u4eec\u53ea\u80fd\u6839\u636e\u8bed\u6cd5\u89c4\u8303\u8fdb\u884c\u66b4\u529b\u5339\u914d\u548c\u5224\u65ad\uff0c\u8fd9\u91cc\u6211\u4eec\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u5206\u5e03\u5f0f","title":"\u5206\u5e03\u5f0f","text":"

    \u53ef\u60f3\u800c\u77e5\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u641c\u7d22\u5f15\u64ce\u6765\u8bf4\uff0c\u5b83\u6240\u9700\u8981\u7d22\u5f15\u7684\u6587\u6599\u662f\u975e\u5e38\u5e9e\u5927\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u901a\u5e38\u9700\u8981\u5c06\u5176\u5206\u5e03\u5f0f\u5730\u5b58\u50a8\u548c\u7d22\u5f15\u3002

    \u800c\u8fd9\u91cc\u6709\u4e24\u79cd\u5206\u5e03\u5f0f\u7684\u7b56\u7565\uff0c\u5176\u4e00\u662f\u6839\u636e\u5355\u8bcd\u7684\u5b57\u5178\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\uff0c\u5176\u4e8c\u662f\u6839\u636e\u6587\u6863\u8fdb\u884c\u5206\u5e03\u5f0f\u3002

    \u663e\u7136\u6839\u636e\u5355\u8bcd\u7684\u5185\u5bb9\u8fdb\u884c\u5206\u5e03\u5f0f\uff0c\u80fd\u591f\u63d0\u9ad8\u7d22\u5f15\u6548\u7387\uff0c\u4f46\u662f\u8fd9\u6837\u7684\u8bdd\uff0c\u6211\u4eec\u5c31\u9700\u8981\u5c06\u6240\u6709\u5f62\u5f0f\u63a5\u8fd1\u7684\u5355\u8bcd\u90fd\u5b58\u50a8\u5728\u4e00\u4e2a\u5730\u65b9\uff0c\u8fd9\u6837\u5c31\u4f1a\u9020\u6210\u5355\u70b9\u6545\u969c\uff0c\u5bb9\u707e\u80fd\u529b\u5f88\u5dee\uff0c\u6240\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u5e76\u4e0d\u662f\u5f88\u597d\u3002

    \u800c\u7b2c\u4e8c\u79cd\u529e\u6cd5\u5219\u6709\u8f83\u5f3a\u7684\u5bb9\u707e\u6027\u80fd\u3002\u5373\u4f7f\u4e00\u53f0\u673a\u5668\u65e0\u6cd5\u5de5\u4f5c\uff0c\u4e5f\u4e0d\u4f1a\u5267\u70c8\u5f71\u54cd\u5230\u6574\u4e2a\u7cfb\u7edf\u7684\u5de5\u4f5c\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u6027\u80fd\u8bc4\u4f30","title":"\u6027\u80fd\u8bc4\u4f30","text":"

    \u548c\u7edf\u8ba1\u5b66\u7684\u5047\u8bbe\u68c0\u9a8c\u7c7b\u4f3c\uff0c\u4e5f\u548c\u673a\u5668\u5b66\u4e60\u9886\u57df\u7684 Average Precision \u7c7b\u4f3c\u3002

    \u8fd9\u4e9b\u5185\u5bb9\u53ef\u4ee5\u5f88\u597d\u7684\u7c7b\u6bd4\uff0c\u6682\u65f6\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/","title":"Lecture 4 | Leftist Heap & Skew Heap","text":"

    \u7ea6 4406 \u4e2a\u5b57 97 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#leftist-heap","title":"Leftist Heap","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/leftist-tree/

    Wikipedia: https://en.wikipedia.org/wiki/Leftist_tree

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u5de6\u504f\u5806\uff0c\u6216\u8005\u8bf4\u5de6\u504f\u5806(Leftist Heap)\uff0c\u5b83\u76f8\u6bd4\u4e8e\u666e\u901a\u7684\u5806\uff0c\u66f4\u597d\u7684\u4e00\u70b9\u5728\u4e8e\u5b83\u652f\u6301\u5feb\u901f\u7684\u5806\u5408\u5e76\u64cd\u4f5c\u3002\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5c06\u65b0\u7684\u4e1c\u897f\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80\u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u76f8\u5bf9\u8bc1\u4e86\u8fd9\u4e2a

    \u7531\u4e8e\u5de6\u504f\u5806\u4e0d\u518d\u662f\u4e00\u4e2a\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u7ef4\u62a4\u5927\u6839\u5806\u5c0f\u8ddf\u5806\u90a3\u6837\u7528\u6570\u7ec4\u6765\u7ef4\u62a4\u5b83\u4e86\u3002

    \u4e00\u4e2a\u5de6\u504f\u5806\u7684\u7ed3\u70b9\u7ef4\u62a4\u4e86\u5de6\u53f3\u5b50\u5806\u7684\u5730\u5740\u3001\u81ea\u8eab\u7684\u952e\u503c\u3001\u548c\u4e00\u4e2a\u201c\u8ddd\u79bb(dist)\u201d\u3002

    struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n

    'dist' in leftist heap

    1. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u6216\u53f3\u5b69\u5b50\u4e3a\u7a7a\u7ed3\u70b9\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(0\\)\uff0c\u8fd9\u79cd\u7ed3\u70b9\u88ab\u79f0\u4e3a\u5916\u7ed3\u70b9\uff1b
    2. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u548c\u53f3\u5b69\u5b50\u90fd\u4e0d\u4e3a\u7a7a\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(\\min{(dist_\\text{left child}, dist_\\text{right child})} + 1\\)\uff1b

    eg

    \u800c\u5de6\u504f\u5806\u5c31\u5efa\u7acb\u5728\u8fd9\u4e9b\u6027\u8d28\u4e0a\uff1a

    Leftist Heap

    \u5de6\u504f\u5806\u662f\u7ed3\u70b9\u7684\u952e\u503c\u5e94\u5f53\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u7684\u4e8c\u53c9\u6811\uff08\u5373\u5806\u7684\u6027\u8d28\uff09\uff0c\u4e14\u6ee1\u8db3\u300c\u5de6\u504f\u300d\u6027\u8d28\u2014\u2014\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u7684 dist \u4e0d\u5c0f\u4e8e\u53f3\u5b69\u5b50\u7684 dist\u3002

    \u56e0\u6b64\uff0c\u56de\u987e dist \u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6269\u5c55\u6027\u8d28\uff1a

    properties

    1. \u7ed3\u70b9\u7684 dist \u7b49\u4e8e \\(dist_\\text{right child} + 1\\)\uff08\u5047\u8bbe \\(dist_\\text{NULL} = -1\\)\uff09\uff1b
    2. \u5982\u679c \\(dist_i = N\\)\uff0c\u5219\u4ee5 \\(i\\) \u4e3a\u6839\u7684\u5b50\u6811\u81f3\u5c11\u662f\u4e00\u4e2a \\(N+1\\) \u5c42\u7684\u5b8c\u7f8e\u4e8c\u53c9\u6811\uff0c\u81f3\u5c11\u6709 \\(2^{N+1}-1\\) \u4e2a\u7ed3\u70b9\uff1b

    \u6ce8\u610f\uff0c\u5728\u793a\u610f\u56fe\u4e2d\u6211\u4eec\u7701\u7565\u4e86\u7ed3\u70b9\u81ea\u8eab\u952e\u503c\u7684\u6807\u8bb0\uff0c\u4f46\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u5806\uff0c\u5b83\u5c31\u9700\u8981\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373\u7ed3\u70b9\u7684\u952e\u503c\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u952e\u503c\u5f88\u53ef\u80fd\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u6570\uff0c\u5927\u5c0f\u5173\u7cfb\u53ef\u80fd\u8f6c\u5316\u4e3a\u504f\u5e8f\u5173\u7cfb\u3002

    \u7b80\u5355\u601d\u8003\u4e00\u4e0b\uff0c\u4e3a\u4ec0\u4e48\u5de6\u504f\u5806\u4f1a\u8fd9\u4e48\u8bbe\u8ba1\u5462\uff1f\u5b9e\u9645\u4e0a\uff0c\u5408\u5e76\u5806\u9700\u8981\u8003\u8651\u7684\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u70b9\u5c31\u662f\u8981\u80fd\u5728\u4e4b\u540e\u7684\u64cd\u4f5c\u4e2d\u5c3d\u53ef\u80fd\u5730\u7ef4\u62a4\u5806\u7684\u201c\u5e73\u8861\u201d\uff0c\u5426\u5219\u6211\u4eec\u628a\u5806\u7ef4\u62a4\u6210\u4e86\u4e00\u4e2a\u94fe\uff0c\u90a3\u663e\u7136\u662f\u975e\u5e38\u7cdf\u7cd5\u7684\u3002

    \u800c\u5de6\u504f\u5806\u901a\u8fc7\u7ef4\u62a4\u6574\u4e2a\u5806\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80 dist \u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u8bc1\u4e86\u8fd9\u4e2a\u5806\u7684\u76f8\u5bf9\u5e73\u8861\u6027\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\u5c31\u662f\u5408\u5e76\u3002\u800c\u5176\u5b83\u64cd\u4f5c\u90fd\u53ef\u4ee5\u770b\u4f5c\u662f\u5408\u5e76\u7684\u7279\u6b8a\u60c5\u51b5\u3002\u56e0\u6b64\u6211\u4eec\u9996\u5148\u8ba8\u8bba\u4efb\u610f\u4e24\u4e2a\u5de6\u504f\u5806\u7684\u5408\u5e76\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u5e76","title":"\u5408\u5e76","text":"

    \u4f5c\u4e3a\u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\uff0c\u5408\u5e76\u64cd\u4f5c\u81ea\u7136\u5c31\u662f\u8981\u5728\u6ee1\u8db3\u6027\u8d28\u7684\u6761\u4ef6\u4e0b\uff0c\u5408\u5e76\u4e24\u4e2a\u5de6\u504f\u5806\u3002\u5927\u81f4\u601d\u8def\u5c31\u662f\u5148\u7ef4\u62a4\u5806\u7684\u6027\u8d28\uff0c\u5728\u56de\u6eaf\u65f6\u7ef4\u62a4\u5de6\u504f\u6027\u8d28\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5b83\u662f\u4e00\u4e2a\u5148\u81ea\u4e0a\u800c\u4e0b\u518d\u81ea\u4e0b\u800c\u4e0a\u7684\u8fc7\u7a0b\u3002

    \u6309\u7167\u5b9e\u73b0\u65b9\u6cd5\uff0c\u5de6\u504f\u5806\u7684\u5408\u5e76\u53ef\u4ee5\u5206\u4e3a\u9012\u5f52\u5f0f\u548c\u8fed\u4ee3\u5f0f\u4e24\u79cd\u3002\u5176\u4e2d\u524d\u8005\u53ef\u80fd\u66f4\u4e3a\u76f4\u89c9\uff0c\u800c\u540e\u8005\u53ef\u89c6\u5316\u540e\u5219\u66f4\u4e3a\u76f4\u89c2\u3002

    \u4e3a\u4e86\u65b9\u4fbf\u540e\u7eed\u7684\u4ee3\u7801\u63cf\u8ff0\uff0c\u6211\u4eec\u9996\u5148\u7ed9\u51fa\u5de6\u504f\u5806\u7ed3\u70b9\u5728\u672c\u6587\u4e2d\u7684\u5b9a\u4e49\uff1a

    struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u9012\u5f52\u5f0f","title":"\u9012\u5f52\u5f0f","text":"

    \u9012\u5f52\u5f0f\u5148\u6bd4\u8f83\u5f53\u524d\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u6839\u7ed3\u70b9\u7684\u952e\u503c\uff0c\u9009\u62e9\u8f83\u5c0f\uff08\u8f83\u5927\uff09\u7684\u90a3\u4e2a\u4f5c\u4e3a\u6839\u7ed3\u70b9\uff0c\u5176\u5de6\u5b50\u6811\u4f9d\u7136\u4e3a\u5de6\u5b50\u6811\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u53f3\u5b50\u6811\u548c\u53e6\u4e00\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

    \u5f53\u7136\uff0c\u5728\u9012\u5f52\u5730\u66f4\u65b0\u5b8c\u540e\uff0c\u6211\u4eec\u9700\u8981\u68c0\u67e5\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u662f\u5426\u6ee1\u8db3 \\(dist_\\text{left child} \\geq dist_\\text{right child}\\) \u7684\u6027\u8d28\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\uff0c\u6211\u4eec\u5219\u9700\u8981\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u6765\u7ef4\u6301\u6027\u8d28\u3002

    LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// Recursive exit. If any is NULL, return the other as the new root of subtree.\nif (x == NULL) return y;\nif (y == NULL) return x;\n\n// If `x`'s val is smaller than `y`'s, swap them, which means we always operates on `x`.\nif (x->val > y->val) {\nswap(x, y);\n}\n\n// Merge `x`'s right subtree and `y`, and set `x`'s right subtree to the result.\nx->rs = merge(x->rs, y);\n\n// If `x`'s left subtree's dist is smaller than `x`'s right subtree's dist, swap them.\nif (x->ls->dist == NULL || x->ls->dist < x->rs->dist) {\nswap(x->ls, x->rs);\n}\n\n// Update x's dist.\nx->dist = x->rs->dist + 1;\n\n// Return x as the new root of subtree.\nreturn x;\n}\n

    \ud83c\udf30

    \u73b0\u5728\u6211\u4eec\u6a21\u62df\u4e00\u4e0b\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u73b0\u5728\u6211\u4eec\u6709\u4e0b\u9762\u4e24\u4e2a\u5de6\u504f\u5806\uff0c\u5c1d\u8bd5\u5408\u5e76\u5b83\u4eec\u3002

    Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

    \u6211\u4eec\u53d1\u73b0\uff0c\u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u7eff\u6811\u53f3\u5b50\u6811\u548c\u84dd\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

    \u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u84dd\u6811\u53f3\u5b50\u6811\u548c\u7eff\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

    \u6700\u540e\u8fd8\u5269\u4e0b\u4e24\u4e2a\u7ed3\u70b9\u5566\uff01\u5b9e\u9645\u4e0a\u8fd9\u91cc\u76f4\u63a5\u6a21\u62df\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff0c\u9996\u5148\u662f\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u5e76\u9009\u62e9\u4e86 \u277a \u4f5c\u4e3a\u65b0\u6839\uff1b\u63a5\u4e0b\u6765\u5728\u9012\u5f52\u7684\u8fc7\u7a0b\u4e2d\u53d1\u73b0\u9700\u8981\u5408\u5e76 NULL \u548c \u277b\uff0c\u6240\u4ee5\u76f4\u63a5\u8fd4\u56de\u4e86 \u277b\u3002

    \u7136\u800c\u8fd8\u6ca1\u6709\u7ed3\u675f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5904\u7406\u5de6\u53f3\u5b50\u6811 dist \u5927\u5c0f\u5173\u7cfb\u95ee\u9898\u3002

    \u6211\u4eec\u53d1\u73b0 \u277a \u7684\u5de6\u5b69\u5b50\u4e3a NULL\uff0c\u6211\u4eec\u8bb0 \\(dist_\\text{NULL} = -1\\)\uff0c\u53f3\u5b69\u5b50 \u277b \u6709 \\(dist_\\text{right child}=0\\)\uff0c\u6240\u4ee5\u9700\u8981\u4ea4\u6362\u4e24\u4e2a\u5b69\u5b50\u3002

    \u8fd9\u91cc\u4e5f\u8df3\u8fc7\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff1a

    \u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u277a \u7684 dist \u5c0f\u4e8e \u2779 \u7684 dist\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e0d\u9700\u8981\u6539\u53d8\u3002

    \u7ee7\u7eed\u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u2777 \u548c \u2778 \u7684 dist \u76f8\u540c\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e5f\u4e0d\u9700\u8981\u6539\u53d8\u3002

    \u4ece\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u770b\u51fa\u6765\uff0c\u5e76\u4e0d\u662f\u770b\u4e0a\u53bb\u66f4\u5927\u7684\u5b50\u6811\u4e00\u5b9a\u5728\u5de6\u4fa7\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u8fed\u4ee3\u5f0f","title":"\u8fed\u4ee3\u5f0f","text":"

    \u8fed\u4ee3\u5f0f\u662f\u6839\u636e\u5b83\u7684\u5b9e\u73b0\u65b9\u6cd5\u6765\u547d\u540d\u7684\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fed\u4ee3\u5f0f\u53ef\u80fd\u66f4\u6709\u610f\u601d\u3002\u4e8b\u5b9e\u4e0a\u5728\u5f88\u591a\u9898\u76ee\u4e2d\u6211\u89c9\u5f97\u8fd9\u4e2a\u65b9\u6cd5\u505a\u9898\u66f4\u52a0\u65b9\u4fbf\u3002

    \u8fed\u4ee3\u5f0f\u7ef4\u62a4\u4e24\u4e2a\u989d\u5916\u7684\u6307\u9488\uff0c\u5206\u522b\u6307\u5411\u4e24\u68f5\u6811\u8fd8\u6ca1\u88ab\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u5e76\u4e0d\u65ad\u9009\u62e9\u8f83\u5c0f\u7684\u90a3\u4e2a\u5408\u5e76\u8fdb\u53bb\uff0c\u76f4\u5230\u4e24\u4e2a\u6307\u9488\u90fd\u4e3a\u7a7a\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u548c\u5f52\u5e76\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\u975e\u5e38\u76f8\u4f3c\uff0c\u5b9e\u9645\u4e0a\u5f53\u6211\u4eec\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u53bb\u770b\u8fd9\u4ef6\u4e8b\u4ee5\u540e\uff0c\u4f1a\u53d1\u73b0\u8fd9\u91cc\u505a\u7684\u5c31\u662f\u4e00\u4e2a\u5f52\u5e76\u3002

    LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// `tx` & `ty` are the pointers to the roots of the subtrees that haven't been merged.\nLeftistHeapNode * tx = x, * ty = y;\n// `res` is the root of the merged final tree, while `cur` is the latest node that has been merged.\nLeftistHeapNode * res = NULL, * cur = NULL;\n\n// Begin merging.\nwhie (tx != NULL && ty != NULL) {\n// If `tx`'s val is smaller than `ty`'s, swap them, which means we always operates on `tx`.\nif (tx->val > ty->val) {\nswap(tx, ty);\n}\n\n// Specially mark the root on the first merge.\nif (res == NULL) {\nres = tx;\ncur = tx;\n} else {\ncur->rs = tx;\ncur = cur->rs;\n}\n\n// Go on.\ntx = tx->rs;\n}\n\n// Merge the rest of the tree.\nwhile (ty != NULL) {\n// Specially mark the root on the first merge. (rarely happens but not impossible)\nif (res == NULL) {\nres = ty;\ncur = ty;\n} else {\ncur->rs = ty;\ncur = cur->rs;\n}\n\n// Go on.\nty = ty->rs;\n}\n\n// Adjust the left and right subtrees of all the nodes according to the properties of `dist`. \n// It does the same work as the adjust part in the recursive version. I ignore it here.\nres = adjust(res);\n\nreturn res;\n}\n

    \u4f9d\u65e7\u662f\u4ee5\u4e0a\u9762\u8fdb\u884c\u6a21\u62df\u7684\u90a3\u4e2a\u5408\u5e76\u4e3a \ud83c\udf30 \u8fdb\u884c\u6a21\u62df\u3002

    \ud83c\udf30

    \u9996\u5148\uff0c\u6211\u4eec\u5bf9\u56fe\u7247\u7684\u6392\u7248\u7a0d\u5fae\u505a\u4e00\u4e9b\u6539\u53d8\uff0c\u6211\u4eec\u4e0d\u518d\u6309\u7167\u4e4b\u524d\u753b\u5806\u7684\u65b9\u5f0f\u53bb\u753b\uff0c\u800c\u662f\u201c\u5de6\u504f\u201d\u5730\u53bb\u753b\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u8c03\u6574\u4e4b\u524d

    Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

    \u7eff\u8272\u548c\u84dd\u8272\u7684\u7bad\u5934\u5206\u522b\u8868\u793a\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u5c1a\u672a\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u7d2b\u8272\u7bad\u5934\u8868\u793a\u6700\u8fd1\u7684\u5408\u5e76\u53d1\u751f\u7684\u4f4d\u7f6e\u3002

    \u6bd4\u8f83 \u2776 \u548c \u2777\uff0c\u53d1\u73b0 \u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277a\u3002

    \u548c\u4e0a\u4e00\u6b65\u7c7b\u4f3c\u7684\uff0c\u6bd4\u8f83 \u277a \u548c \u2777\uff0c\u53d1\u73b0 \u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u84dd\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277b\u3002

    \u4f9d\u7136\u7c7b\u4f3c\u5730\uff0c\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u53d1\u73b0 \u277a \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u277a \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411 NULL\u3002

    \u8fd9\u65f6\u5019\u6211\u4eec\u53d1\u73b0\u5df2\u7ecf\u6709\u4e00\u4e2a\u6307\u9488\u7a7a\u4e86\uff0c\u4e5f\u5c31\u662f\u7eff\u8272\u6307\u9488\u5df2\u7ecf\u6307\u5411\u4e86 NULL\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u6309\u987a\u5e8f\u628a\u84dd\u8272\u6307\u9488\u6307\u5411\u7684\u5185\u5bb9\u90fd\u63a8\u8fdb\u53bb\u5373\u53ef\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u8fd8\u9700\u8981\u7ef4\u62a4 dist \u4fe1\u606f\u5e76\u6839\u636e\u6027\u8d28\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002\u8fd9\u4e00\u90e8\u5206\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

    \ud83c\udf30/\ud83d\udd25

    \u5f53\u7136\uff0c\u8fd9\u4e48\u6765\u770b\u53ef\u80fd\u8fd8\u662f\u5f88\u4e71\uff0c\u8054\u60f3\u6211\u4eec\u4e4b\u524d\u53d1\u73b0\u5b83\u548c\u5f52\u5e76\u6392\u5e8f\u5f88\u50cf\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u7528\u4e00\u4e2a\u66f4\u52a0\u76f4\u89c2\u7684\u65b9\u5f0f\u6765\u770b\u8fd9\u4e2a\u8fc7\u7a0b\uff1a

    Frame 0Frame 1Frame 2

    \u540c\u6837\u4ece\u8fd9\u5f20\u56fe\u5f00\u59cb\uff0c\u7531\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u5b83\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9012\u5f52\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u6307\u5408\u5e76\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\u7684\u8fc7\u7a0b\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e24\u4e2a\u5de6\u504f\u5806\u6539\u5199\u6210\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\uff01

    \u7531\u4e8e\u6211\u4eec\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u603b\u662f\u627e\u53f3\u5b69\u5b50\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u6cbf\u7740\u6700\u53f3\u6cbf\u8def\u5f84\u628a\u6ca1\u4e2a\u5de6\u504f\u5806\u62c6\u6210\u8fd9\u79cd\u201c\u60ac\u540a\u201d\u7684\u5e26\u72b6\u5f62\u5f0f\uff0c\u6bcf\u4e00\u201c\u6761\u201d\u7684\u503c\u53d6\u51b3\u4e8e\u6839\u7684\u952e\u503c\uff0c\u4e5f\u5c31\u662f\u8fd9\u4e00\u201c\u6761\u201d\u7684\u6700\u9876\u90e8\u3002

    \u5728\u8fd9\u5f20\u56fe\u4e2d\uff0c\u6211\u4eec\u5f97\u5230\u7684\u4e24\u4e2a\u6709\u5e8f\u6570\u7ec4\u5206\u522b\u662f [1, 5] \u548c [2, 6]\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u4eec\u8fdb\u884c\u6392\u5e8f\u3002

    \u7ecf\u8fc7\u6392\u5e8f\uff0c\u5c31\u4f1a\u53d1\u73b0\u5b83\u4eec\u521a\u597d\u7b26\u5408\u6211\u4eec\u5728\u4e0a\u9762\u6b65\u9aa4\u5f97\u5230\u7684\u7ed3\u679c\uff08\u53ef\u4ee5\u5bf9\u6bd4\u7740\u4e0a\u9762\u7684 Frame 4 \u770b\uff09\u3002\u5b9e\u9645\u4e0a\uff0c\u53ea\u8981\u4f60\u56de\u987e\u4e00\u4e0b\u5f52\u5e76\u6392\u5e8f\u7684\u8fc7\u7a0b\uff0c\u518d\u5bf9\u6bd4\u7740\u770b\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5c31\u4f1a\u53d1\u73b0\u4e00\u6a21\u4e00\u6837\u3002

    \u518d\u6b21\u63d0\u9192\uff0c\u8fd9\u4e00\u5c0f\u8282\u8bb2\u7684\u90e8\u5206\u90fd\u5ffd\u7565\u4e86\u4e4b\u540e\u8c03\u6574\u5b50\u6811\u5de6\u504f\u6027\u8d28\u7684\u8fc7\u7a0b\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u5c31\u5355\u7eaf\u662f\u4e00\u4e2a\u7ef4\u62a4\u5806\u6027\u8d28\u7684\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

    \u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u5220\u9664","title":"\u5355\u70b9\u5220\u9664","text":"

    \u8ba9\u6211\u4eec\u4e00\u822c\u6027\u5730\u8003\u8651\u4e00\u4e2a\u7ed3\u70b9\uff0c\u4e0e\u5b83\u76f8\u5173\u7684\u4e3b\u8981\u6709\u4e09\u4e2a\u65b9\u5411\uff1a\u7236\u7ed3\u70b9\u548c\u4e24\u4e2a\u5b69\u5b50\u7ed3\u70b9\u3002

    \u800c\u5355\u70b9\u5220\u9664\u7684\u64cd\u4f5c\u4e5f\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5408\u5e76\u9700\u8981\u88ab\u5220\u9664\u7684\u7ed3\u70b9\u7684\u4e24\u4e2a\u5b50\u7ed3\u70b9\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u65b0\u7684\u6811\u7684\u6839\u4ee3\u66ff\u88ab\u5220\u9664\u7684\u7ed3\u70b9\uff0c\u518d\u5728\u56de\u6eaf\u7684\u8fc7\u7a0b\u4e2d bottom-up \u5730\u66f4\u65b0 dist \u5373\u53ef\u3002

    LeftistHeapNode * del(LeftistHeapNode * cur, ElementType x) {\nif (cur->val == x) {\n// Just return the merge of the children.\nreturn merge(cur->l, cur->r);\n} else {\n// Not this subtree.\nif (cur->val > x) return cur;\n\n// Otherwise, search the `x`.\nif (cur->l != NULL) del(cur->l, x);\nif (cur->r != NULL) del(cur->r, x);\n\n// Adjust the dist bottom-up.\nadjust(cur);\n}\n}\n
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#skew-heap","title":"Skew Heap","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Skew_heap

    \u659c\u5806(Skew Hea)\u662f\u6bd4\u5de6\u504f\u5806\u66f4\u4e3a\u4e00\u822c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u540c\u6837\u6709\u7740\u80fd\u591f\u5feb\u901f\u5408\u5e76\u7684\u6027\u8d28\u3002

    \u5934\u8111\u98ce\u66b4

    \u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u5de6\u504f\u5806\uff0c\u7531\u4e8e\u9700\u8981\u81ea\u4e0b\u800c\u4e0a\u5730\u7ef4\u62a4 dist\uff0c\u6240\u4ee5\u6211\u4eec\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\u3002\u56de\u987e AVL \u6811\uff0c\u540c\u6837\u4e3a\u4e86\u7ef4\u62a4\u5b83\u6bd4\u8f83\u4e25\u683c\u7684\u5e73\u8861\u6027\u8d28\uff0c\u6211\u4eec\u4e5f\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\uff0c\u800c\u7ea2\u9ed1\u6811\u5219\u901a\u8fc7\u4e00\u4e2a\u80fd\u591f\u4ec5\u4ec5\u901a\u8fc7\u53d8\u8272\u5c31\u80fd\u8c03\u6574\u7684\u9ed1\u9ad8\u6765\u89c4\u907f\u4e86\u5fc5\u987b\u81ea\u4e0b\u800c\u4e0a\u7ef4\u62a4\u7684\u95ee\u9898\uff0c\u5b9e\u73b0\u4e86\u5e76\u53d1\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u60f3\u5c06\u5de6\u504f\u5806\u6539\u53d8\u5730\u80fd\u591f\u8fdb\u884c\u81ea\u4e0a\u800c\u4e0b\u7ef4\u62a4\uff0c\u5c31\u9700\u8981\u6539\u53d8\u751a\u81f3\u653e\u5f03\u5b83\u7684\u5de6\u504f\u6027\u8d28\u7684\u4e25\u683c\u6027\u2014\u2014\u800c\u8fd9\u5c31\u662f\u659c\u5806\u7684\u7531\u6765\u3002

    \u659c\u5806\u4e5f\u9700\u8981\u6ee1\u8db3\u5927\u6839\u5806\uff08\u5c0f\u6839\u5806\uff09\u7684\u6027\u8d28\uff0c\u800c\u5b83\u7684\u5408\u5e76\u548c\u5de6\u504f\u5806\u7684\u5408\u5e76\u4e5f\u5341\u5206\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u8fd9\u6b21\u65e0\u6761\u4ef6\u7684\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u5de6\u504f\u6027\u8d28\u5982\u4f55\u53d8\u5316\uff0c\u6211\u4eec\u90fd\u4f1a\u9009\u62e9\u4ea4\u6362\u53c2\u4e0e\u5408\u5e76\u7684\u5de6\u53f3\u5b50\u6811\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5728\u56de\u6eaf\u7684\u65f6\u5019\u624d\u8fdb\u884c\u5de6\u53f3\u5b50\u6811\u7684\u4ea4\u6362\uff0c\u4e8e\u662f\u5c31\u5b9e\u73b0\u4e86\u5b8c\u5168\u7684\u81ea\u4e0a\u800c\u4e0b\u3002

    \u8ba9\u6211\u4eec\u6765\u770b\u770b wiki \u91cc\u7ed9\u51fa\u7684 \ud83c\udf30\uff1a

    \ud83c\udf30 from wikipedia

    Frame 0Frame 1

    \u8fd9\u662f\u6211\u4eec\u9700\u8981\u5408\u5e76\u7684\u4e24\u4e2a\u5806\u3002

    \u7701\u7565\u4e86\u4e2d\u95f4\u7684\u6b65\u9aa4\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u6a21\u62df\u4e00\u4e0b\uff0c\u6bcf\u4e00\u6b21\u5408\u5e76\u64cd\u4f5c\u7ed3\u675f\u4e4b\u540e\u90fd\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002

    \u6211\u4eec\u603b\u662f\u5148\u5f80\u53f3\u4fa7\u5b50\u6811\u9012\u5f52\u4e0b\u53bb\u5730\u5408\u5e76\uff0c\u6ca1\u5b8c\u6210\u4e00\u6b21\u5408\u5e76\u5c31\u4ea4\u6362\u8fd9\u4e2a\u5b50\u6811\u548c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\uff0c\u800c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\u5728\u8fd9\u6b21\u4ea4\u6362\u5b8c\u4ee5\u540e\u5c31\u4e0d\u4f1a\u518d\u53d1\u751f\u6539\u53d8\uff0c\u800c\u8fd9\u4e2a\u5b50\u6811\u5219\u4f1a\u7ee7\u7eed\u8fdb\u884c\u4e0b\u4e00\u6b21\u5408\u5e76\u3002

    \u7701\u7565\u4e0a\u9762\u7684\u7ed8\u56fe\u663e\u7136\u662f\u6211\u61d2\u5f97\u753b\u4e86\uff0c\u76f8\u4fe1\u5927\u5bb6\u5728\u4e86\u89e3\u5de6\u504f\u5806\u7684\u5408\u5e76\u4ee5\u540e\u4e5f\u80fd\u5f88\u5feb\u611f\u53d7\u5230\u659c\u5806\u662f\u5982\u4f55\u5408\u5e76\u7684\u3002

    \u5f53\u7136\uff0c\u5b83\u4e5f\u662f\u652f\u6301\u8fed\u4ee3\u7684\u5199\u6cd5\u7684\uff0c\u548c\u662f\u548c\u4e4b\u524d\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u6211\u4eec\u53ef\u4ee5\u6392\u5e8f\u6bcf\u4e00\u201c\u6761\u201d\uff0c\u7136\u540e\u518d\u5408\u5e76\u3002Wikipedia \u4e0a\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7684\u8fc7\u7a0b\u56fe\uff0c\u4f46\u662f\u90a3\u4e2a\u8fc7\u7a0b\u56fe\u6709\u70b9\u81ea\u4e0b\u800c\u4e0a\u7684\u610f\u601d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u81ea\u4e0a\u800c\u4e0b\u505a\u4e5f\u662f\u4e00\u6837\u7684\u3002\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u53bb\u770b\u770b Wiki \u4e0a\u7684\u8fc7\u7a0b\uff1a\ud83d\udd17\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u7406\u6027\u5206\u6790","title":"\u5408\u7406\u6027\u5206\u6790","text":"

    \u7136\u800c\uff0c\u968f\u4e4b\u51fa\u73b0\u7684\u4e00\u4e2a\u95ee\u9898\u4e0a\uff0c\u6211\u4eec\u7528\u4e86\u8fd9\u79cd\u770b\u8d77\u6765\u6709\u70b9\u4e0d\u7ba1\u4e09\u4e03\u4e8c\u5341\u4e00\u7684\u505a\u6cd5\uff0c\u90a3\u5b83\u7684\u6b63\u786e\u6027\u5982\u4f55\u4fdd\u8bc1\u5462\uff1f

    \u9996\u5148\u8fdb\u884c\u611f\u6027\u7684\u7406\u89e3\u3002\u6211\u4eec\u6bcf\u5408\u5e76\u4e24\u4e2a\u5806\u90fd\u662f\u6cbf\u7740\u6700\u53f3\u4fa7\u8def\u5f84\u5408\u5e76\uff08\u867d\u7136\u4e2d\u95f4\u4f1a\u88ab\u4e0d\u505c\u8f6c\u5230\u5de6\u8fb9\uff09\uff0c\u5373\u6bcf\u6b21\u4f1a\u88ab\u6539\u53d8\u7684\u5b50\u6811\u5de6\u53f3\u987a\u5e8f\u7684\u8282\u70b9\u90fd\u662f\u6700\u53f3\u4fa7\u7684\u8282\u70b9\uff0c\u800c\u518d\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5982\u679c\u6bcf\u6b21\u5408\u5e76\u90fd\u5c06\u53d1\u751f\u7684\u53d8\u5316\u8f6c\u5230\u5de6\u4fa7\uff0c\u4ee5\u6b64\u6765\u51cf\u5c0f\u5408\u5e76\u64cd\u4f5c\u5e26\u6765\u7684\u9ad8\u5ea6\u201c\u7d2f\u79ef\u201d\u3002

    \u8fdb\u4e00\u6b65\u89e3\u91ca

    \u4ee5\u6bcf\u6b21\u53ea\u63d2\u5165\u4e00\u4e2a\u70b9\u4e3a\u4f8b\u5b50\u8bf4\u660e\u95ee\u9898\u3002

    \u8fdb\u4e00\u6b65\u5bf9\u9012\u5f52\u65cb\u8f6c\u5230\u5de6\u4fa7\u505a\u89e3\u91ca\uff0c\u9012\u5f52\u6027\u5730\u8f6c\u5230\u5de6\u4fa7\uff0c\u4f7f\u5f97\u672c\u6765\u6700\u53f3\u4fa7\u7684\u8def\u5f84\u53d8\u5230\u6700\u5de6\u4fa7\uff0c\u5373\u4f7f\u4e4b\u540e\u4ea4\u6362\u4f1a\u91cd\u65b0\u8bbf\u95ee\u5230\u8fd9\u4e2a\u5b50\u6811\uff0c\u4f46\u6b64\u65f6\u9664\u4e86\u6839\uff0c\u5176\u4ed6\u90e8\u5206\u4f9d\u7136\u662f\u6700\u5de6\u4fa7\u7684\u8def\u5f84\uff0c\u4e5f\u4e0d\u4f1a\u518d\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u8fd9\u6b21\u8def\u5f84\u3002

    \u7528\u56fe\u6765\u505a\u89e3\u91ca\u7684\u8bdd\uff0c\u5c31\u662f\u8fd9\u6837\uff1a

    \u6211\u4eec\u53ea\u5173\u6ce8\u4e00\u5f00\u59cb\u4f5c\u4e3a\u6700\u53f3\u4fa7\u7684\u8fd9\u4e09\u4e2a\u7ea2\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e24\u6b21\u64cd\u4f5c\u540e\uff0c\u9664\u4e86\u76f4\u63a5\u4f5c\u4e3a\u6839\u7684\u5b50\u6811\u7684\u90a3\u4e2a\u8282\u70b9\u88ab\u8f6c\u4e86\u8fc7\u6765\uff0c\u5176\u4ed6\u7684\u4e4b\u540e\u7684\u8282\u70b9\u90fd\u662f\u4f5c\u4e3a\u201c\u6700\u5de6\u4fa7\u201d\u7684\u8282\u70b9\u51fa\u73b0\u7684\uff0c\u867d\u7136\u56fe\u4e2d\u53ea\u6709\u8fd9\u4e00\u4e2a\uff0c\u4f46\u662f\u5f53\u6811\u7684\u89c4\u6a21\u53d8\u5927\u540e\uff0c\u8fd9\u4e2a\u4f18\u52bf\u4f1a\u66f4\u52a0\u660e\u663e\u3002

    \u6839\u636e\u8fd9\u4e2a\u7279\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u7406\u89e3\u4e0b\u9762\u8fd9\u9053\u9898\uff1a

    \u9898\u9762\u7b54\u6848 & \u89e3\u91ca

    The result of inserting keys \\(1\\) to \\(2^k\u22121\\) for any \\(k>4\\) in order into an initially empty skew heap is always a full binary tree. (T/F)

    \u5373\u5bf9\u4e8e\u4efb\u610f\u7684 \\(k>4\\) \u7684\u60c5\u51b5\uff0c\u6309\u987a\u5e8f\u5f80\u4e00\u4e2a\u659c\u5806\u91cc\u63d2\u5165 \\(1\\sim2^k-1\\) \u8fd9\u4e9b\u6570\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u90fd\u4f1a\u662f\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\u3002\uff08\u5bf9/\u9519\uff09

    \u7b54\u6848\u662f T\u3002

    \u9996\u5148\uff0c\u4ece\u63d2\u5165\u7684\u5143\u7d20\u7684\u6570\u91cf\u6765\u770b\uff0c\u662f\u6ee1\u8db3\u6ee1\u4e8c\u53c9\u6811\u7684\u5fc5\u8981\u6761\u4ef6\u7684\u3002

    \u800c\u6839\u636e\u6211\u4eec\u4e0a\u9762\u63cf\u8ff0\u7684\uff0c\u8df3\u8fc7\u80af\u5b9a\u6210\u7acb\u7684\u521d\u59cb\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u5f52\u7eb3\uff0c\u8fc7\u7a0b\u5e76\u4e0d\u5b8c\u6574\u4e0e\u4e25\u8c28\uff0c\u4f46\u662f\u5927\u6982\u5c31\u662f\u8fd9\u4e48\u4e2a\u610f\u601d\u3002

    \u5bf9\u4e8e\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\uff0c\u6211\u4eec\u73b0\u5728\u8981\u63d2\u5165\u4e00\u4e2a\u6570\uff0c\u663e\u7136\u8fd9\u4e2a\u6570\u6bd4\u6811\u91cc\u4efb\u4f55\u4e00\u4e2a\u90fd\u8981\u5927\u3002\u800c\u5f53\u8fd9\u4e2a\u6570\u88ab\u63d2\u5165\u540e\uff0c\u5b83\u6210\u4e3a\u6574\u4e2a\u5806\uff0c\u6216\u8005\u8bf4\u6574\u4e2a\u6811\u6700\u5de6\u4fa7\u7684\u4e00\u6761\u3002\u800c\u5728\u63a5\u4e0b\u6765\u7684\u4ea4\u6362\u8fc7\u7a0b\u4e2d\uff0c\u5b83\u4f1a\u4e0d\u65ad\u88ab\u7529\u6765\u7529\u53bb\uff0c\u6700\u7ec8\u7ecf\u8fc7 2^k \u6b21\u540e\u88ab\u7529\u5230\u6700\u53f3\u8fb9\uff0c\u4e5f\u5c31\u662f\u8fce\u63a5\u5b83\u7684\u7b2c\u4e00\u4e2a\u5b69\u5b50\u3002\u663e\u7136\uff0c\u5bf9\u4e8e\u8be5\u5c42\u7684\u6240\u6709\u8282\u70b9\u6765\u8bf4\u90fd\u9700\u8981 2^k \u6b21\u624d\u4f1a\u8fdb\u5165\u5230\u6700\u53f3\u4fa7\u8def\u5f84\u3002

    \uff08\u8fd9\u4e2a\u8fc7\u7a0b\u53ef\u4ee5\u7c7b\u6bd4\u4e8c\u8fdb\u5236\u6570\u7684\u81ea\u589e\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u8282\u70b9\u7684\u6bcf\u4e2a\u524d\u9a71\u5206\u522b\u662f\u5de6\u5b69\u5b50\u8fd8\u662f\u53f3\u5b69\u5b50\u6765\u5206\u914d\u5bf9\u5e94\u7684\u4f4d\u5b50\u662f 0 \u8fd8\u662f 1\u3002\uff09

    \u5f53\u7136\uff0c\u5982\u4e0a\u7684\u6027\u8d28\u53ea\u80fd\u5e2e\u52a9\u6211\u4eec\u611f\u6027\u7684\u7406\u89e3\u8fd9\u4e2a\u6b63\u786e\u6027\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ece\u644a\u8fd8\u5206\u6790\u7684\u89d2\u5ea6\u6765\u5206\u6790\u5176\u6b63\u786e\u6027\uff0c\u5373\u5176\u5747\u644a\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

    \u8fd9\u91cc\u6211\u4eec\u91c7\u7528\u52bf\u80fd\u6cd5\u8fdb\u884c\u5206\u6790\u3002

    \u5206\u6790 skew heap \u7684\u5747\u644a\u590d\u6742\u5ea6\uff0c\u4e3b\u8981\u5c31\u662f\u5206\u6790\u5408\u5e76\u64cd\u4f5c\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u5176\u4ed6\u64cd\u4f5c\u90fd\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5408\u5e76\u64cd\u4f5c\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u52bf\u80fd\u51fd\u6570\uff1a

    \u52bf\u80fd\u51fd\u6570

    \u6211\u4eec\u5b9a\u4e49 \\(\\Phi(Heap) = \\text{number of heavy node in } Heap\\)\u3002

    \u5176\u4e2d\uff0c\u989d\u5916\u9700\u8981\u5b9a\u4e49 heavy node \u548c light node\uff1a

    heavy node & light node

    \u5bf9\u4e8e\u4e00\u4e2a\u5b50\u5806 \\(H\\)\uff0c\u5982\u679c \\(size(H.\\text{right\\_descendant}) \\geq \\frac{1}{2}size(H)\\)\uff0c\u5219 \\(H\\) \u662f heavy node\uff0c\u5426\u5219\u662f light node\u3002

    @ cy'ppt

    A node p is heavy if the number of descendants of p\u2019s right subtree is at least half of the number of descendants of p, and light otherwise. Note that the number of descendants of a node includes the node itself.

    \u663e\u7136\uff0c\u5bf9\u4e8e heavy node \u548c light node\uff0c\u4ee5\u53ca\u5408\u5e76\u64cd\u4f5c\uff0c\u6709\u8fd9\u4e48\u4e00\u4e9b\u6027\u8d28\uff1a

    properties

    1. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f heavy node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u4e00\u5b9a\u53d8\u4e3a\u4e00\u4e2a light node\uff1b
    2. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f light node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u53d8\u4e3a\u4e00\u4e2a heavy node\uff1b
    3. \u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8282\u70b9\u7684 heavy/light \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u5b83\u539f\u5148\u4e00\u5b9a\u5728\u5806\u7684\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\uff1b

    \u5217\u51fa\u516c\u5f0f\uff1a

    \\[ \\hat{c} = c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\]

    \u5176\u4e2d\uff0c\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\\(H_{merged}\\) \u4e3a\u5408\u5e76\u540e\u7684\u5806\u7684\u52bf\u80fd\uff0c\\(H_x\\) \u548c \\(H_y\\) \u5206\u522b\u4e3a\u5408\u5e76\u524d\u7684\u4e24\u4e2a\u5806\u7684\u52bf\u80fd\u3002

    \u6839\u636e property 3\uff0c\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5e76\u975e\u6240\u6709\u8282\u70b9\u90fd\u6536\u5230\u5f71\u54cd\u3002\u6211\u4eec\u53ef\u4ee5\u5355\u72ec\u8bb0\u5f55 \\(l_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 light node \u6570\u91cf\uff0c\\(h_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff0c\\(h^0_{x}\\) \u4e3a \\(H_x\\) \u6240\u6709\u4e0d\u5728\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff08\u5373 \\(\\text{count of heavy nodes of } H_x = H_x + H^0_x\\)\uff09\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u4e0a\u5f0f\u5199\u5f00\uff1a

    \\[ \\left\\{ \\begin{aligned} c &= l_x + h_x + l_y + h_y &(1)\\\\ \\Phi(H_{merged}) &\\leq l_x + h^0_x + l_y + h^0_y &(2)\\\\ \\Phi(H_x) &= h_x + h^0_{x} &(3)\\\\ \\Phi(H_y) &= h_y + h^0_{y} &(4) \\end{aligned} \\right. \\]

    \u5176\u4e2d\u7a0d\u5fae\u505a\u4e00\u4e9b\u89e3\u91ca\uff1a

    1. \\((1)\\)\uff1a\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\u5373\u6211\u4eec\u7684\u679a\u4e3e\u6d89\u53ca\u4e86\u4e24\u4e2a\u5806\u6240\u6709\u7684\u53f3\u4fa7\u8def\u5f84\uff1b
    2. \\((2)\\)\uff1a\u5728\u5408\u5e76\u64cd\u4f5c\u4ee5\u540e\uff0c\u6839\u636e property 1 \u548c property 2\uff0c\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\uff1b
    3. \\((3)\\) \u548c \\((4)\\)\uff1a\u6839\u636e\u52bf\u80fd\u51fd\u6570\u7684\u5b9a\u4e49\u5f97\u5230\uff1b

    \u4e8e\u662f\uff0c\u5c06\u5b83\u4eec\u4ee3\u5165\u5f97\u5230\u7ed3\u679c\uff1a

    \\[ \\begin{aligned} \\hat{c} &= c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\\\ &\\leq (l_x + h_x + l_y + h_y) + (l_x + h^0_x + l_y + h^0_y) - (h_x + h^0_{x}) - (h_y + h^0_{y}) \\\\ &\\leq 2(l_x + l_y) \\\\ \\hat{c} &= O(\\log{N}) \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/","title":"Lecture 5 | Binomial Queue","text":"

    \u7ea6 2196 \u4e2a\u5b57 12 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 11 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#binomial-queue","title":"Binomial Queue","text":"

    \u5806\u7684\u5176\u4e2d\u4e00\u4e2a\u5e94\u7528\u5c31\u662f\u4f18\u5148\u961f\u5217\u3002\u672c\u8282\u8981\u4ecb\u7ecd\u7684\u4e8c\u9879\u961f\u5217(Binomial Queue)\u4e5f\u662f\u4f18\u5148\u961f\u5217\u7684\u4e00\u79cd\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e8e\u4e4b\u524d\u6211\u4eec\u7528\u4e00\u4e2a\u5806\u7ef4\u62a4\u4f18\u5148\u961f\u5217\uff0c\u4e8c\u9879\u961f\u5217\u540c\u65f6\u7ef4\u62a4\u4e86\u5177\u6709\u4e0d\u540c\u7279\u5f81\u7684\u82e5\u5e72\u961f\u5217\u3002

    link

    Wikipedia: https://en.wikipedia.org/wiki/Binomial_heap

    YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns \uff08\u867d\u7136\u8fd9\u4e2a\u89c6\u9891\u662f\u8bb2\u89e3\u6590\u6ce2\u90a3\u5951\u5806\u7684\uff0c\u4f46\u662f\u4e2d\u95f4\u5148\u8bb2\u4e86\u4e8c\u9879\u5806\u3002\uff09

    \u5b66\u4e60\u5efa\u8bae

    \u5728\u6b63\u5f0f\u5f00\u59cb\u672c\u8282\u5185\u5bb9\u4e4b\u524d\uff0c\u8bf7\u5e26\u7740\u8fd9\u6837\u4e00\u4e2a\u5ff5\u5934\uff1a\u5c3d\u529b\u601d\u8003\u4e8c\u9879\u961f\u5217\u4e0e\u4e8c\u8fdb\u5236\u7684\u5173\u7cfb\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u4e8c\u9879\u961f\u5217(Binomial Queue)\u672c\u8d28\u4e0a\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\u3002\u6240\u4ee5\u6211\u4eec\u9996\u5148\u7ed9\u5b9a\u4e8c\u9879\u6811(Binomial Tree)\u7684\u5b9a\u4e49\uff1a

    Binomial Tree

    \u4e8c\u9879\u6811\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373 parent \u8282\u70b9\u7684\u503c\u5c0f\u4e8e\uff08\u5927\u4e8e\uff09 child \u8282\u70b9\u7684\u503c\u3002

    \u4e00\u4e2a\u975e\u5e38\u5173\u952e\u7684\u6027\u8d28\u662f\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u90fd\u662f\u540c\u6784\u7684\uff0c\u4e14 \\(k\\) \u9636\u4e8c\u9879\u6811\u662f\u4e24\u4e2a \\(k-1\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u5f97\u5230\u7684\u3002\u800c\u5176\u5408\u5e76\u65b9\u5f0f\u662f\u76f4\u63a5\u4ee4\u5176\u4e2d\u4e00\u68f5\u6210\u4e3a\u53e6\u5916\u4e00\u68f5\u7684\u6839\u7684\u65b0 child\uff0c\u8fd9\u4e5f\u51b3\u5b9a\u4e86\u4e8c\u9879\u6811\u7684\u6839\u6bcf\u4e00\u4e2a child \u672c\u8eab\u4e5f\u90fd\u662f\u4e00\u4e2a\u4e8c\u9879\u6811\u3002

    \u663e\u7136\u80fd\u591f\u5f97\u5230\uff0c\u4e8c\u9879\u6811\u5e76\u975e\u4e8c\u53c9\u6811\uff1b\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811 \\(B_k\\) \u7684\u6839\u6709 \\(k\\) \u4e2a child\uff0c\\(2^k\\) \u4e2a\u8282\u70b9\uff1b\u518d\u8fdb\u4e00\u6b65\u7684\uff0c\\(B_k\\) \u7684\u7b2c \\(d\\) \u5c42\u4e00\u5171\u6709 \\(C_k^d = \\binom{k}{d}\\) \u4e2a\u8282\u70b9\uff0c\u6709\u8da3\u7684\u662f\uff0c\u6240\u6709\u5c42\u7684\u8282\u70b9\u52a0\u8d77\u6765\u521a\u597d\u7b26\u5408\u4e8c\u9879\u5f0f\u5b9a\u7406\uff0c\u6b64\u6761\u5b9a\u7406\u53ef\u4ee5\u7531\u6570\u5b66\u5f52\u7eb3\u6cd5\u5f88\u5bb9\u6613\u5730\u8bc1\u660e\uff0c\u4e0d\u518d\u8d58\u8ff0\u3002

    \u5173\u4e8e\u5b9e\u73b0

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e8c\u9879\u6811\u662f\u4e00\u4e2a \\(N\\) \u53c9\u6811\uff0c\u6240\u4ee5\u901a\u5e38\u6211\u4eec\u4f7f\u7528\u94fe\u8868 sibling \u7684\u5f62\u5f0f\u6765\u8868\u793a\u4e00\u4e2a\u8282\u70b9\u7684 children\u3002

    \u518d\u5bf9\u4e8c\u9879\u6811\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u603b\u7ed3\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u7ed3\u6784\u552f\u4e00\u786e\u5b9a\uff0c\u4e24\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u540e\u5f97\u5230\u4e00\u4e2a \\(k+1\\) \u9636\u4e8c\u9879\u6811\uff0c\u800c\u4e8c\u9879\u6811\u672c\u8eab\u4e5f\u5177\u6709\u5806\u7684\u6027\u8d28\u3002

    \u4f46\u662f\uff0c\u867d\u7136\u4e8c\u9879\u6811\u5177\u6709\u5806\u7684\u6027\u8d28\uff0c\u770b\u4f3c\u80fd\u72ec\u7acb\u5b8c\u6210\u4f18\u5148\u961f\u5217\u7684\u529f\u80fd\uff0c\u4f46\u662f\u4e8c\u9879\u6811\u5bf9\u70b9\u7684\u6570\u91cf\u5177\u6709\u6bd4\u8f83\u4e25\u683c\u7684\u8981\u6c42\uff0c\u53ea\u6709\u70b9\u7684\u6570\u91cf\u7b26\u5408 \\(2^k\\) \u65f6\uff0c\u624d\u80fd\u4f7f\u7528\u4e8c\u9879\u6811\u8868\u793a\u3002\u56e0\u6b64\uff0c\u89c2\u5bdf\u4e00\u4e2a\u4e8c\u9879\u6811\u80fd\u627f\u8f7d\u7684\u70b9\u7684\u6570\u91cf\u7279\u5f81\uff0c\u6211\u4eec\u8054\u60f3\u5230\u4e8c\u8fdb\u5236\u5bf9\u6570\u7684\u8868\u793a\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u7528\u4e00\u7cfb\u5217\u4e8c\u9879\u6811\u6765\u7ef4\u62a4 \\(N\\) \u4e2a\u8282\u70b9\u7684\u4f18\u5148\u961f\u5217\uff0c\u800c\u5177\u4f53\u7528\u51e0\u9636\u4e8c\u9879\u6811\uff0c\u5219\u53d6\u51b3\u4e8e \\(N\\) \u7684\u4e8c\u8fdb\u5236\u8868\u8fbe\u4e2d\uff0c\u4e3a 1 \u7684\u662f\u54ea\u51e0\u4f4d\u3002

    Binomial Queue

    \u4e8c\u9879\u961f\u5217(Binomial Queue)\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\uff0c\u5176\u4e2d\u6bcf\u4e2a\u4e8c\u9879\u6811\u7684\u9636\u6570 \\(k\\) \u90fd\u662f\u4e0d\u540c\u7684\uff0c\u53cd\u8fc7\u6765\u8bb2\u8fd9\u53e5\u8bdd\uff0c\u96c6\u5408\u4e2d \\(k\\) \u9636\u7684\u4e8c\u9879\u6811\u8981\u4e48\u53ea\u6709\u4e00\u4e2a\uff0c\u8981\u4e48\u6ca1\u6709\u3002

    \ud83c\udf30

    \u9898\u76ee\u5b9e\u73b0\u7684\u4e8c\u9879\u961f\u5217\u4e0d\u4e00\u5b9a\u6709 min \u6307\u9488\uff01\u6ce8\u610f\u9762\u5411\u9898\u9762\u548c\u9009\u9879\u5224\u65ad\u5b9e\u73b0\u3002

    \u800c\u4e3a\u4f55\u8981\u8fd9\u4e48\u8bbe\u8ba1\u4e8c\u9879\u961f\u5217\u7684\u7ed3\u6784\uff0c\u5177\u4f53\u4f53\u73b0\u5728\u64cd\u4f5c\u7684\u8bbe\u8ba1\u4e2d\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u5728\u4e8c\u9879\u961f\u5217\u4e2d\uff0c\u5408\u5e76\u662f\u4e00\u4e2a\u975e\u5e38\u57fa\u7840\u7684\u64cd\u4f5c\uff0c\u4e5f\u662f\u7cbe\u9ad3\u6240\u5728\u3002

    \u800c\u4e3a\u4e86\u611f\u53d7\u8fd9\u4e9b\u64cd\u4f5c\u7684\u7cbe\u9ad3\uff0c\u5728\u7406\u89e3\u4e8c\u9879\u961f\u5217\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u4ee5\u8bd5\u56fe\u4ece\u4e24\u4e2a\u7eac\u5ea6\u540c\u65f6\u7406\u89e3\u8fd9\u4e9b\u64cd\u4f5c\uff1a

    1. \u6811/\u5806\u7684\u7eac\u5ea6\uff0c\u5177\u4f53\u89c2\u5bdf\u6570\u636e\u7684\u8f6c\u79fb\u4e0e\u53d8\u5316\u8fc7\u7a0b\uff1b
    2. \u4e8c\u8fdb\u5236\u7684\u7eac\u5ea6\uff0c\u5c06 \\(k\\) \u9636\u4e8c\u9879\u6811\u62bd\u8c61\u4e3a bit vector \u7b2c \\(k\\) \u4f4d\u7684 1\uff0c\u4ece\u4e8c\u8fdb\u5236\u52a0\u6cd5\u7684\u89d2\u5ea6\u7406\u89e3\uff1b

    \u4e3a\u4e86\u65b9\u4fbf\u540e\u9762\u9610\u8ff0\uff0c\u6211\u4eec\u7b80\u5355\u505a\u4e00\u4e0b\u8bf4\u660e\uff1a

    \u7279\u5f81\u6bd4\u7279\u5411\u91cf

    \u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9a\u4e49\u5b83\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\uff08\u6211\u81ea\u5df1\u53e3\u80e1\u7684\u4e1c\u897f\uff0c\u4e0d\u662f\u672f\u8bed\uff09\u662f\u5b83\u7684\u5143\u7d20\u6570\u91cf\u7684\u4e8c\u8fdb\u5236\u8868\u793a\uff08\u53cd\u8fc7\u6765\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u771f\u503c\u8868\u793a\u961f\u5217\u4e2d\u7684\u5143\u7d20\u6570\u91cf\uff09\u3002

    \ud83c\udf30

    \u4f8b\u5982\u4e0b\u56fe\u7684\u4f8b\u5b50\uff0c\u4e00\u5171\u6709 11 \u4e2a\u8282\u70b9\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u521a\u597d\u5bf9\u5e94 \\(B_3\\) \\(B_1\\) \\(B_0\\)\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u8c61\u5f81\u4e86\u4e8c\u9879\u961f\u5217\u7684\u96c6\u5408\u4e2d\u6709\u54ea\u51e0\u9636\u7684\u4e8c\u9879\u6811\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u5217\u5408\u5e76","title":"\u961f\u5217\u5408\u5e76","text":"

    \u5408\u5e76\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5408\u5e76\u4e24\u4e2a\u96c6\u5408\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5206\u522b\u5408\u5e76\u6bcf\u4e00\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\uff0c\u5f53\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u90fd\u5b58\u5728 \\(k\\) \u9636\u4e8c\u9879\u6811\u65f6\uff0c\u5b83\u4eec\u5408\u5e76\u4e3a\u4e00\u68f5 \\(k+1\\) \u9636\u4e8c\u9879\u6811\u3002\u53ef\u4ee5\u8054\u60f3\uff0c\u8fd9\u9879\u64cd\u4f5c\u201c\u5bf9\u5e94\u201d\u7740\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u76f8\u52a0\uff0c\u800c\u5408\u5e76\u64cd\u4f5c\u5219\u7c7b\u4f3c\u4e8e\u8fdb\u4f4d\u3002

    \u56e0\u6b64\uff0c\u5b83\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a 1bit \u7684\u5168\u52a0\u5668\u3002

    graph LR;\nA([\"T1.B[k]\"])\nB([\"T2.B[k]\"])\nC([\"T.carry[k-1]\"])\nD([\"T.result[k]\"])\nE([\"T.carry[k]\"])\nADD[\"Adder\"]\nA ---> ADD\nB ---> ADD\nC ---> ADD\nADD ---> D\nADD ---> E

    \u4e8e\u662f\uff0c\u6839\u636e\u4e00\u4e2a carry \u4f4d\u3001\u4e00\u4e2a\u88ab\u5408\u5e76\u6811\u548c\u4e00\u4e2a\u5408\u5e76\u6811\u7684\u60c5\u51b5\uff0c\u6709\u4e00\u5171 \\(2^3=8\\) \u79cd\u53ef\u80fd\u3002

    \ud83c\udf30

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u8fd9\u6837\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u9700\u8981\u5408\u5e76\uff1a

    \u5219\u5176\u5408\u5e76\u7684\u64cd\u4f5c\u53ef\u4ee5\u8fd9\u6837\u63cf\u8ff0\u3002

    \u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

    \u7eff\u8272\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u84dd\u8272\u7684\u4e3a 1001\uff0c\u4e24\u8005\u76f8\u52a0\u5f97\u5230 10100\u3002

    Frame 1Frame 2Frame 3Frame 4Frame 5Frame 6

    \\(B_0\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_0\\) \u548c \\(T_{blue}.B_0\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_0\\)\uff0c\\(T.R_0\\) \u4e3a\u7a7a\u3002

    \\(B_1\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\) \u548c \\(T.C_0\\) \u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_1\\)\uff0c\\(T.R_1\\) \u4e3a\u7a7a\u3002

    \\(B_2\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_1\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_2 = T.C_1\\)\uff0c\\(T.C_2\\) \u4e3a\u7a7a\u3002

    \\(B_3\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\)\uff0c\\(T_{blue}.B_1\\) \u548c \\(T.C_2\\) \u90fd\u4e0d\u5b58\u5728\uff0c\u6240\u4ee5 \\(T.R_3\\) \u4e3a\u7a7a\uff0c\\(T.C_1\\) \u4e3a\u7a7a\u3002

    \\(B_4\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_4\\) \u548c \\(T.C_3\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_4\\)\uff0c\\(T.R_4\\) \u4e3a\u7a7a\u3002

    \\(B_5\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_4\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_5 = T.C_4\\)\uff0c\\(T.C_5\\) \u4e3a\u7a7a\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

    \u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u67e5\u8be2\u961f\u9996","title":"\u67e5\u8be2\u961f\u9996","text":"

    \u4e8c\u9879\u961f\u5217\u7684\u961f\u9996\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a\u961f\u5217\u7684\u6700\u5c0f\u503c\uff08\u6700\u5927\u503c\uff09\uff0c\u5c31\u662f\u8fd9\u82e5\u5e72\u4e2a\uff08\\(O(\\log N)\\) \u4e2a\uff09\u4e8c\u9879\u6811\u7684\u6839\u4e2d\u6700\u5c0f\uff08\u6700\u5927\uff09\u7684\u90a3\u4e2a\u3002\u6240\u4ee5\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

    \u4e0d\u8fc7\u6709\u65f6\u5019\u6211\u4eec\u4e5f\u4f1a\u989d\u5916\u7ef4\u62a4\u4e00\u4e2a\u6307\u9488\uff0c\u6307\u5411\u5f53\u524d\u6700\u5c0f\u7684\u90a3\u4e2a\u6839\uff0c\u6b64\u65f6\u5176\u590d\u6742\u5ea6\u4e3a \\(O(1)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u9996\u51fa\u961f","title":"\u961f\u9996\u51fa\u961f","text":"

    \u961f\u9996\u51fa\u961f\u9996\u5148\u8981\u627e\u5230\u961f\u9996\uff0c\u8fd9\u4ef6\u4e8b\u6211\u4eec\u5728#\u67e5\u8be2\u961f\u9996\u5df2\u7ecf\u8ba8\u8bba\u8fc7\u4e86\u3002

    \u627e\u5230\u961f\u9996\u540e\uff0c\u6211\u4eec\u5c06\u5176\u4ece\u4e8c\u9879\u961f\u5217\u4e2d\u79fb\u9664\uff0c\u6211\u4eec\u77e5\u9053\uff0c\u961f\u9996\u5fc5\u7136\u662f\u67d0\u4e2a\u4e8c\u9879\u6811\u7684\u6839\uff0c\u6240\u4ee5\u5220\u6389\u8fd9\u4e2a\u961f\u9996\u4ee5\u540e\uff0c\u5c31\u4f1a\u4ea7\u751f \\(k\\) \u4e2a\u65b0\u7684\u5b50\u6811\u3002

    \u800c\u8ba9\u6211\u4eec\u56de\u987e\u4e8c\u9879\u6811\u7684\u5408\u5e76\u8fc7\u7a0b\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u6240\u4ee5\u5f53\u6211\u4eec\u5220\u6389\u8fd9\u4e2a\u6839\uff0c\u4ea7\u751f\u7684\u6240\u6709\u5b50\u6811\u90fd\u662f\u4e8c\u9879\u6811\u3002

    \u56e0\u6b64\u6211\u4eec\u8054\u60f3\u5230\uff0c\u5c06\u961f\u9996\u51fa\u961f\u95ee\u9898\u8f6c\u5316\u4e3a\u5408\u5e76\u4e8c\u9879\u961f\u5217\u7684\u95ee\u9898\u2014\u2014\u5047\u8bbe \\(T\\) \u7684\u961f\u9996\u662f \\(B_k\\) \u7684\u6839\uff0c\u5219\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u6c42\u89e3 \\(merge(T-B_k, B_k.root.children)\\) \u7684\u95ee\u9898\u3002

    \ud83c\udf30

    \u5047\u8bbe\u6211\u4eec\u6709\u5982\u4e0b\u7684\u4e8c\u9879\u961f\u5217\uff0c\u73b0\u5728\u8fdb\u884c\u5f39\u51fa\u961f\u9996\u7684\u64cd\u4f5c\u3002

    \u7279\u5f81\u6bd4\u7279\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

    \u5982\u4e0a\u961f\u5217\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 10100\uff0c\u5171 20 \u4e2a\u8282\u70b9\u3002\u73b0\u5728\u5220\u6389\u4e00\u4e2a\uff0c\u5e94\u5f53\u6709 19 \u4e2a\u8282\u70b9\u3002

    \u66f4\u5177\u4f53\u7684\uff0c10100 = 10000 + 100\uff0c\u5206\u522b\u4ee3\u8868\u4e24\u4e2a\u4e8c\u9879\u6811\uff0c\u800c\u6211\u4eec\u7684\u6700\u5c0f\u503c\u662f\u4ece 10000 \u6240\u4ee3\u8868\u7684\u6811\u91cc\u5220\u9664\u7684\uff0c\u6240\u4ee5\u65b0\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a\uff1a(10000 - 1) + 100 = 1111 + 100 = 10011\uff0c\u5373 19 \u4e2a\u3002

    \u6ce8\u610f\u89c2\u5bdf\u8fd9\u91cc 10000 - 1 = 1111 \u7684\u53d8\u5316\uff0c\u5bfb\u627e\u5b83\u4e0e\u5177\u4f53\u89c6\u89d2\u4e2d\u7684\u5173\u7cfb\u3002

    Frame 1Frame 2Frame 3Frame 4

    \u9996\u5148\u627e\u5230\u961f\u9996\uff0c\u5373\u6b64\u65f6 min \u6307\u9488\u6307\u5411\u7684\u5730\u65b9\u3002\u89c2\u5bdf\u5b83\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u53d1\u73b0\u5b83\u5177\u6709\u56db\u4e2a\u5b50\u6811\uff0c\u5206\u522b\u662f \\(B_0 \\sim B_3\\)\uff0c\u5bf9\u5e94\u4e86\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u300c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\u300d\u3002

    \u4e8e\u662f\u6211\u4eec\u5c06\u8fd9\u4e2a\u5b50\u6811\u63d0\u53d6\u51fa\u6765\uff0c\u5c06\u539f\u672c\u7684\u4e8c\u9879\u961f\u5217\u62c6\u6210\u4e3a\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u3002

    \u73b0\u5728\u6211\u4eec\u5220\u9664\u201c\u961f\u9996\u201d\uff0c\u53d1\u73b0\u90a3\u68f5\u6811\u5206\u88c2\u6210\u4e86\u56db\u4e2a\u8fde\u7eed\u7684\u4e8c\u9879\u6811\uff0810000 - 1 = 1111\uff09\u3002

    \u73b0\u5728\u95ee\u9898\u5c31\u8f6c\u5316\u4e3a\u4e86\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u5408\u5e76\u7684\u95ee\u9898\u3002\u5728\u6b64\u7701\u7565\u3002

    \u6ce8\u610f\u89c2\u5bdf\u5b8c\u6210\u7684\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u548c\u4e0a\u9762\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u7684\u7ed3\u679c\u3002

    \u63d0\u793a

    \u652f\u6301\u7740\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8fd9\u6837\u8fdb\u884c\u7684\u6027\u8d28\u5c31\u662f\uff0c\u6bcf\u4e00\u4e2a\u4e8c\u9879\u6811\u7684\u6839\u7684 children \u672c\u8eab\u4e5f\u90fd\u662f\u4e8c\u9879\u6811\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#project-fibonacci-queue","title":"Project: Fibonacci Queue","text":"

    Link

    YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/","title":"Lecture 6 | Backtracing","text":"

    \u7ea6 459 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    link

    OI Wiki: https://oi-wiki.org/search/backtracking/

    Wikipedia: https://en.wikipedia.org/wiki/Backtracking

    \u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u6bd4\u8f83\u6563\uff0c\u56e0\u4e3a\u56de\u6eaf\u662f\u4e00\u4e2a\u5f88\u57fa\u7840\u800c\u4e14\u5f88\u6cdb\u7528\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u611f\u89c9\u600e\u4e48\u8bb2\u90fd\u4e0d\u592a\u5408\u9002\u3002\u66f4\u591a\u7684\u662f\u9700\u8981\u5728\u5177\u4f53\u95ee\u9898\u3001\u5177\u4f53\u6a21\u578b\u4e2d\u53bb\u4f53\u4f1a\u3002

    \u52a0\u4e0a\u5982\u679c\u6bcf\u4e00\u4e2a\u5185\u5bb9\u90fd\u8981\u5f80\u6b7b\u91cc\u53bb\u53d9\u8ff0\u7684\u8bdd\u5b9e\u5728\u592a\u7d2f\u4e86\uff0c\u6240\u4ee5\u56de\u6eaf\u8fd9\u4e00\u7ae0\u60f3\u5077\u4e2a\u61d2\uff0c\u5c31\u7b80\u5355\u8bb0\u5f55\u4e00\u4e0b\u8bfe\u4e0a\u63d0\u5230\u8fc7\u7684\u4e00\u4e9b\u6a21\u578b\u5427\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u516b\u7687\u540e","title":"\u516b\u7687\u540e","text":"

    \u975e\u5e38\u7ecf\u5178\u7684\u95ee\u9898\uff0c\u76f8\u4fe1\u63a5\u89e6\u8fc7\u7b97\u6cd5\u7684\u540c\u5b66\u57fa\u672c\u4e0a\u90fd\u7ed5\u4e0d\u5f00\u8fd9\u4e2a\u4e1c\u897f\u3002

    link

    Wikipedia: https://en.wikipedia.org/wiki/Eight_queens_puzzle

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u6848\u4f8b-the-turnpike-reconstruction-problem","title":"[\u6848\u4f8b] The Turnpike Reconstruction Problem","text":"

    \u6536\u8d39\u7ad9\u91cd\u5efa\u95ee\u9898(The Turnpike Reconstruction Problem)\u63cf\u8ff0\u7684\u662f\u4e00\u6761\u88ab\u62bd\u8c61\u4e3a\u76f4\u7ebf\u7684\u516c\u8def\u4e0a\uff0c\u6709 \\(N\\) \u4e2a\u6536\u8d39\u7ad9\uff08\\(x_1, x_2, ..., x_N\\)\uff09\u3002\u73b0\u5728\u7ed9\u51fa\u4efb\u610f\u4e24\u4e2a\u6536\u8d39\u7ad9\u4e4b\u95f4\u7684\u8ddd\u79bb\u7684\u53ef\u91cd\u96c6\u5408 \\(D\\)\uff0c\uff08\u53ef\u60f3\u800c\u77e5\uff0c\u4e00\u5171\u6709 \\(\\frac{N(N-1)}{2}\\) \u4e2a\u5143\u7d20\uff09\uff0c\u6c42\u6536\u8d39\u7ad9\u7684\u4f4d\u7f6e\uff0c\u5373\u7ed9\u5b9a\u4efb\u610f\u4e24\u70b9\u7684\u8ddd\u79bb\u96c6\u5408\uff0c\u6c42\u51fa\u8fd9\u4e9b\u70b9\u7684\u5750\u6807\u3002

    solution

    \u5927\u6982\u601d\u8def\u5c31\u662f\uff0c\u9996\u5148\u5047\u8bbe \\(x_1 = 0\\)\uff0c\u90a3\u4e48\u5f88\u663e\u7136 \\(x_N = \\mathop{max} \\{D\\}\\)\u3002\u540c\u65f6\u6211\u4eec\u4e5f\u5f97\u5230\u8fd9\u6761\u7ebf\u6bb5\u7684\u957f\u5ea6\u4e3a \\(\\mathop{max} \\{D\\}\\)\u3002\u63a5\u4e0b\u6765 \\(D\\) \u4e2d\u4ece\u5927\u5230\u5c0f\u53d6\u51fa\u5143\u7d20\uff0c\u5219\u5fc5\u5b9a\u8ffd\u52a0\u5728 \\(x_1\\) \u53f3\u4fa7\u6216 \\(x_N\\) \u5de6\u4fa7\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002\uff08\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\u5728\u5b8c\u5168\u5b89\u6392\u597d\u4e4b\u524d\u90fd\u662f\u8ffd\u52a0\u5728\u5de6\u4fa7\u6216\u8005\u53f3\u4fa7\u7684\u65e2\u5b9a\u8fb9\u754c\u4e4b\u95f4\u7684\uff09\u3002\u800c\u6bcf\u4e00\u6b21\u8ffd\u52a0\u7684\u9009\u62e9\u90fd\u4ee3\u8868\u51b3\u7b56\u6811\u4e2d\u7684\u4e00\u4e2a\u5206\u652f\uff0c\u53ef\u4ee5\u5229\u7528\u5176\u5b83\u6761\u4ef6\u8fdb\u884c\u526a\u679d\uff08\u4f8b\u5982 \\(D\\) \u4e2d\u6709 \\(x_p - x_0\\) \u5c31\u4e00\u5b9a\u6709 \\(x_N - x_p\\)\uff09\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u0251-\u03b2-\u526a\u679d","title":"\u0251-\u03b2 \u526a\u679d","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/","title":"Lecture 7 | Divide & Conquer","text":"

    \u7ea6 3626 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 18 \u5206\u949f

    \u611f\u89c9\u8fd9\u51e0\u8282\u8bfe\u4e0a\u7684\u5185\u5bb9\u90fd\u633a\u5bbd\u6cdb\u7684\u554ax

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm

    \u5957\u7528 Wiki \u4e0a\u7684\u8bf4\u6cd5\uff0c\u5206\u6cbb\u6cd5(Divide-and-conquer algorithm)\u5c5e\u4e8e\u4e00\u79cd\u7b97\u6cd5\u8303\u578b\uff0c\u5b83\u7684\u57fa\u672c\u601d\u60f3\u662f\u5c06\u4e00\u4e2a\u95ee\u9898\u5206\u89e3\u4e3a\u82e5\u5e72\u4e2a\u89c4\u6a21\u8f83\u5c0f\u7684\u76f8\u540c\u95ee\u9898\uff0c\u7136\u540e\u9012\u5f52\u5730\u89e3\u51b3\u8fd9\u4e9b\u5b50\u95ee\u9898\uff0c\u6700\u540e\u5c06\u8fd9\u4e9b\u5b50\u95ee\u9898\u7684\u89e3\u5408\u5e76\u5f97\u5230\u539f\u95ee\u9898\u7684\u89e3\uff0c\u4e00\u4e2a\u6bd4\u8f83\u7ecf\u5178\u7684\u6848\u4f8b\u5c31\u662f\u5f52\u5e76\u6392\u5e8f\u3002

    \u672c\u8282\u7684\u91cd\u70b9\u5b9e\u9645\u4e0a\u4e5f\u5e76\u4e0d\u662f\u805a\u7126\u4e8e\u5206\u6cbb\u672c\u8eab\uff0c\u800c\u662f\u5176\u590d\u6742\u5ea6\u5206\u6790\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6848\u4f8b-closet-points-problem","title":"[\u6848\u4f8b] Closet Points Problem","text":"

    \u4e8c\u7ef4\u6700\u8fd1\u70b9\u95ee\u9898(Closet Points Problem)\uff0c\u6307\u7684\u662f\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684 n \u4e2a\u70b9\uff0c\u627e\u51fa\u5176\u4e2d\u8ddd\u79bb\u6700\u8fd1\u7684\u4e24\u4e2a\u70b9\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6734\u7d20\u65b9\u6cd5","title":"\u6734\u7d20\u65b9\u6cd5","text":"

    \u6700\u6734\u7d20\u7684\u505a\u6cd5\u5f53\u7136\u662f\u679a\u4e3e\u6240\u6709\u7684\u70b9\u5bf9\uff0c\u4e00\u5171\u9700\u8981 \\(C_{N}^{2} = {{N}\\choose{2}} = \\frac{N(N-1)}{2}\\) \u5373\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5206\u6cbb\u65b9\u6cd5","title":"\u5206\u6cbb\u65b9\u6cd5","text":"

    \u73b0\u5728\u6211\u4eec\u7c7b\u6bd4\u6700\u5927\u5b50\u5e8f\u5217\u548c\u95ee\u9898\u7684\u5206\u6cbb\u505a\u6cd5\u3002

    \u6700\u5927\u5b50\u5e8f\u5217\u548c\u7684\u5206\u6cbb\u505a\u6cd5
    1. \u5c06\u5e8f\u5217\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
    2. \u6c42\u89e3\u8de8\u8d8a\u4e2d\u70b9\u7684\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
    3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5927\u503c\uff1b

    \u6211\u4eec\u53ef\u4ee5\u5c06\u6574\u4e2a\u5e73\u9762\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u5982\u56fe\u4e2d\u7eff\u8272\u7ebf\u5c06\u70b9\u5bf9\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u540c\u6837\u5206\u4e3a\u8fd9\u4e48\u4e09\u6b65\uff1a

    1. \u5c06\u70b9\u5bf9\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u8fd1\u70b9\u5bf9\uff1b
    2. \u5bfb\u627e\u8de8\u8d8a\u5206\u754c\u7ebf\u7684\u70b9\u5bf9\uff0c\u4ece\u4e2d\u5bfb\u627e\u6700\u8fd1\u70b9\u5bf9\uff1b
    3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5c0f\u503c\uff1b

    \u663e\u7136\uff0c\u6211\u4eec\u73b0\u5728\u9700\u8981\u89e3\u51b3\u7684\u5c31\u662f\u8981\u5982\u4f55\u8bbe\u8ba1\u7b2c\u4e8c\u6b65\u7684\u5b9e\u73b0\uff0c\u4ee5\u6c42\u66f4\u4f18\u7684\u590d\u6742\u5ea6\u3002

    \u9996\u5148\u6211\u4eec\u5047\u8bbe\u5728\u7b2c\u4e00\u6b65\u4e2d\uff0c\u6211\u4eec\u6c42\u5f97\u4e24\u8fb9\u6c42\u5f97\u7684\u6700\u5c0f\u8ddd\u79bb\u4e2d\u8f83\u5c0f\u7684\u90a3\u4e2a\u4e3a \\(\\delta\\)\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u679c\u7b54\u6848\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u66f4\u65b0\uff0c\u90a3\u4e48\u5b83\u7684\u8ddd\u79bb\u9700\u8981\u5c0f\u4e8e \\(\\delta\\)\u3002\u800c\u6211\u4eec\u77e5\u9053\uff0c\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u62ff\u51fa\u6765\u7684\u70b9\u5bf9\uff0c\u4e00\u5b9a\u662f\u4e00\u4e2a\u5728\u5206\u754c\u7ebf\u5de6\u4fa7\u4e00\u4e2a\u5728\u5206\u754c\u7ebf \\(L\\) \u53f3\u4fa7\u3002\u6734\u7d20\u7684\u6765\u60f3\uff0c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5916\u7684\u70b9\u5bf9\u4e2d\uff0c\u6211\u4eec\u662f\u4e0d\u9700\u8981\u8003\u8651\u7684\u3002\u800c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5185\u7684\u70b9\uff0c\u90fd\u5b58\u5728\u6210\u4e3a\u7b54\u6848\u70b9\u5bf9\u70b9\u53ef\u80fd\u3002

    \u5982\u56fe\uff0c\u73b0\u5728\u6211\u4eec\u77e5\u9053\uff0c\u53ea\u6709\u843d\u5728\u4e24\u6761\u6df1\u7eff\u8272\u4e4b\u95f4\u7684\u70b9\u624d\u53ef\u80fd\u4f1a\u66f4\u65b0\u7b54\u6848\u3002

    \u73b0\u5728\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\uff0c\u4ece\u5206\u754c\u7ebf\u5de6\u4fa7\u7684\u533a\u57df\u91cc\u62ff\u4e00\u4e2a\u70b9\uff0c\u548c\u5206\u754c\u7ebf\u53f3\u8fb9\u7684\u4e00\u4e2a\u70b9\u505a\u5339\u914d\uff0c\u7136\u540e\u53d6\u6240\u6709\u7ed3\u679c\u4e2d\u7684\u6700\u5c0f\u70b9\u3002\u4e0d\u8fc7\u8fd9\u4ef6\u4e8b\u4ecd\u7136\u53ef\u4ee5\u4f18\u5316\u2014\u2014\u5728\u4e8c\u7ef4\u7684\u6570\u636e\u4e2d\uff0c\u4ec5\u5bf9\u4e00\u4e2a\u7eac\u5ea6\u505a\u7ea6\u675f\u5f80\u5f80\u4f1a\u5bfc\u81f4\u4e8b\u60c5\u53d8\u5f97\u4e0d\u90a3\u4e48\u7a33\u5b9a\uff0c\u6240\u4ee5\u6211\u4eec\u540c\u6837\u8003\u8651\u5728\u53e6\u5916\u4e00\u4e2a\u65b9\u5411\u505a\u7ea6\u675f\u3002

    \u4e5f\u662f\u57fa\u4e8e\u8303\u56f4\u7ea6\u675f\u7684\u8003\u8651\u3002\u5047\u8bbe\u6211\u4eec\u4ee5\u5de6\u4fa7\u7684\u70b9\u4e3a\u57fa\u51c6\uff0c\u4ece\u4e0a\u5f80\u4e0b\u505a\u904d\u5386\u8fd9\u4e9b\u70b9\uff0c\u90a3\u4e48\u5bf9\u4e8e\u70b9 \\(p_{l_i}\\)\uff0c\u5177\u6709\u80fd\u591f\u66f4\u65b0\u7b54\u6848\u7684\uff0c \\(\\mathop{dis} (p_{l_i}, p_{r_j}) \\leq \\delta\\) \u7684 \\(p_{r_j}\\)\uff0c\u4e00\u5b9a\u6709 \\(\\mathop{dis_{\\parallel bound}}(p_{l_i}, p_{r_j}) \\leq \\delta\\)\uff08\u76f4\u89d2\u4e09\u89d2\u5f62\u659c\u8fb9\u6700\u957f\uff09\u3002

    \u56e0\u6b64\uff0c\u5bf9\u4e8e\u9009\u5b9a\u70b9 \\(p_{l_i}\\)\uff0c\u5176\u6240\u6709\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u90fd\u88ab\u6846\u5b9a\u5728\u4e00\u4e2a \\(2\\delta \\times \\delta\\) \u7684\u77e9\u5f62\u4e2d\u3002

    \u800c\u66f4\u5947\u5999\u7684\u662f\uff0c\u8fd9\u4e2a\u7531\u53c2\u6570 \\(\\delta\\) \u6307\u5b9a\u7684\u77e9\u5f62\uff0c\u5de7\u5999\u5730\u7ea6\u675f\u4e86\u843d\u5728\u77e9\u5f62\u4e2d\u7684\u70b9\u7684\u6700\u5927\u6570\u91cf\u3002

    \u5728\u8fd9\u6837\u4e00\u4e2a\u533a\u57df\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u7ea6\u675f\u6240\u6709\u843d\u5728 \\(\\delta \\times \\delta\\) \u7684 L \u533a\u57df\u4e2d\u7684\u70b9\uff0c\u4e92\u76f8\u7684\u8ddd\u79bb\u90fd\u5927\u4e8e\u7b49\u4e8e \\(\\delta\\)\uff0c\u5bf9 R \u533a\u57df\u4e2d\u7684\u70b9\u4e5f\u6709\u76f8\u540c\u7684\u7ea6\u675f\u3002\u4e0d\u96be\u53d1\u73b0\uff0c\u5728\u6700\u7406\u60f3\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u2014\u2014\u95ed\u533a\u95f4\u3001\u5141\u8bb8\u70b9\u91cd\u5408\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u77e9\u5f62\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516b\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u56db\u4e2a\uff09\uff1a

    \u800c\u66f4\u4e00\u822c\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516d\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u4e09\u4e2a\uff09\u3002

    \u65e0\u8bba\u5982\u4f55\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u7ed3\u8bba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u9009\u5b9a\u7684 \\(p_{l_i}\\)\uff0c\u5bfb\u627e\u5176\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u7684\u590d\u6742\u5ea6\u90fd\u662f\u5e38\u6570\u7ea7\u7684\u3002

    \u800c\u679a\u4e3e\u8fd9\u4e9b\u201c\u9009\u5b9a\u70b9\u201d\uff0c\u4e5f\u5c31\u662f\u679a\u4e3e \\(p_{l_i}\\)\uff0c\u5176\u590d\u6742\u5ea6\uff08\u6491\u6b7b\uff09\u662f \\(O(N)\\)\u3002

    \u4e8e\u662f\u6211\u4eec\u80fd\u5f97\u5230\u8fd9\u4e2a\u5206\u6cbb\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8ba1\u7b97\u9012\u63a8\u516c\u5f0f\uff1a

    \\[ T(N) = \\underbrace{2\\; T(\\frac{N}{2})}_{\\text{Step 1. divide}} + \\underbrace{O(N)}_{\\text{Step 2. across}} = O(N\\log N) \\]

    \u800c\u6211\u4eec\u63a5\u4e0b\u6765\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u5982\u4f55\u901a\u8fc7\u8fd9\u4e2a\u9012\u63a8\u5f0f\u5f97\u5230\u7ed3\u679c\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u590d\u6742\u5ea6\u5206\u6790","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u5728\u5f00\u59cb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u51fa\u66f4\u4e00\u822c\u7684\uff0c\u6211\u4eec\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\uff0c\u5373\u6c42\u89e3\u65f6\u95f4\u590d\u6742\u5ea6\u9012\u63a8\u516c\u5f0f\u5f62\u5982\u4e0b\u5f0f\u7684\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff1a

    \\[ T(N) = aT(\\frac{N}{b}) + f(N) \\;\\;\\;\\; a,b \\in Z^+ \\]

    \u4f8b\u5982\uff0c\u4e0a\u9762\u7684\u6700\u8fd1\u70b9\u5bf9\u95ee\u9898\uff0c\u5c31\u662f \\(a = 2,\\; b = 2,\\; f(N) = O(N)\\) \u7684\u60c5\u51b5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4ee3\u6362\u6cd5","title":"\u4ee3\u6362\u6cd5","text":"

    \u4ee3\u6362\u6cd5(substitution method)\u7684\u601d\u8def\u975e\u5e38\u76f4\u767d\uff0c\u9996\u5148\u6211\u4eec\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff08\u6bd4\u5982\u5927\u773c\u89c2\u5bdf\u6cd5\ud83d\udc40\uff09\u6765\u5f97\u5230\u4e00\u4e2a\u9884\u8bbe\u7684\u7ed3\u679c\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u4ee3\u5165\u3001\u5f52\u7eb3\u7684\u65b9\u6cd5\u6765\u8bc1\u660e\u8fd9\u4e2a\u7ed3\u679c\u3002

    \u5927\u80c6\u731c\u6d4b\uff0c\u5c0f\u5fc3\u6c42\u8bc1\uff01

    \ud83c\udf30

    \u9898\u9762\u89e3\u7b54

    \u6c42\u89e3\u590d\u6742\u5ea6\uff1a

    \\[ T(N) = 2\\; T(\\frac{N}{2}) + N \\]

    \u9884\u8bbe\uff1a

    \\[ T(N) = O(N\\log N) \\]

    \u4ee3\u5165\uff1a

    \\[ T(\\frac{m}{2}) = O(\\frac{m}{2}\\log \\frac{m}{2}) \\leq c \\frac{m}{2}\\log \\frac{m}{2} \\] \\[ T(m) = 2\\; T(\\frac{m}{2}) + m \\] \\[ T(m) \\leq 2\\; c \\frac{m}{2}\\log \\frac{m}{2} + m \\leq c m \\log m \\text{ for } c \\geq 1 \\]

    \u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684 \\(m = 2\\) \u5f0f\u5b50\u5c31\u53ef\u4ee5\u6210\u7acb\uff0c\u7531\u5f52\u7eb3\u6cd5\u5f97\u7ed3\u8bba\u6210\u7acb\u3002

    \u4e0d\u8fc7\u5f88\u663e\u7136\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u6211\u4eec\u6c42\u8bc1\u4e86\u4e00\u4e2a\u590d\u6742\u5ea6\u7684\u5047\u8bbe\u6210\u7acb\uff0c\u4f46\u5b83\u5e76\u4e0d\u4e00\u5b9a\u8db3\u591f\u7d27\uff0c\u8fd9\u662f\u731c\u89e3\u6cd5\u7684\u901a\u75c5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u9012\u5f52\u6811\u6cd5","title":"\u9012\u5f52\u6811\u6cd5","text":"

    \u9012\u5f52\u6811\u6cd5(recursion-tree method)\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u901a\u8fc7\u753b\u51fa\u9012\u5f52\u6811\u6765\u5206\u6790\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u5b9e\u9645\u4e0a\u548c\u76f4\u63a5\u6570\u5b66\u63a8\u7406\u7684\u533a\u522b\u4e0d\u662f\u5f88\u5927\uff0c\u4e3b\u8981\u5c31\u662f\u901a\u8fc7\u89c2\u5bdf\u9012\u5f52\u8fc7\u7a0b\u4e2d\u6570\u636e\u589e\u957f\u7684\u6a21\u5f0f\u6765\u8fdb\u884c\u5206\u6790\u3002

    some mathematical tools \\[ a^{\\log_b N} = \\exp^{\\frac{\\ln N}{\\ln b} \\ln a} = \\exp^{\\frac{\\ln a}{\\ln b} \\ln N} = N^{\\log_b a} \\]

    \u5c31\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u5c55\u5f00\u5f0f\u5b50\uff0c\u53ea\u4e0d\u8fc7\u901a\u8fc7\u6811\u72b6\u56fe\u7684\u5f62\u5f0f\u6216\u8bb8\u66f4\u52a0\u76f4\u89c2\u3002

    \u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u5c06\u5b83\u4e0d\u65ad\u5c55\u5f00\u4ee5\u540e\uff0c\u5176\u5f62\u5f0f\u5927\u6982\u4f1a\u662f\u8fd9\u6837\uff1a

    \\[ T(N) = ... = \\underbrace{\\sum_{leaf_i}^{leaves}T(N_{leaf_i})}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

    \u5176\u4e2d\uff0c\u7531\u4e8e\u672b\u7aef\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u4e00\u822c\u90fd\u8db3\u591f\u5c0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a \\(T(N_{leaf_i})\\) \u90fd\u662f\u5e38\u6570\uff0c\u4e8e\u662f\u4e0a\u5f0f\u53c8\u53ef\u4ee5\u53d8\u5316\u4e3a\uff1a

    \\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

    \u5177\u4f53\u6765\u8bf4\u89e3\u91ca\u5176\u542b\u4e49\uff0ccombine \u90e8\u5206\u5c31\u662f\u5728\u6bcf\u4e00\u6b21\u201c\u5206\u6cbb\u201d\u7684\u5904\u7406\u65f6\u95f4\uff0c\u5982\u5408\u5e76\u5f53\u524d\u7684\u5b50\u95ee\u9898\u5206\u6cbb\u540e\u7684\u7ed3\u679c\uff0c\u4f53\u73b0\u5728\u9012\u63a8\u5f0f\u7684 \\(f(N)\\) \u90e8\u5206\uff1b\u800c conquer \u90e8\u5206\u6307\u7684\u662f\u5f53\u201c\u5206\u6cbb\u201d\u7684\u201c\u6cbb\u201d\u5728\u201c\u5206\u201d\u7684\u672b\u7aef\u7684\u4f53\u73b0\uff0c\u5373\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684\u89c4\u6a21\u7684\u95ee\u9898\uff0c\u4e0d\u518d\u9700\u8981\u7ee7\u7eed\u201c\u5206\u201d\u7684\u65f6\u5019\uff0c\u5bf9\u5176\u5904\u7406\u7684\u5f00\u9500\u3002

    \u5b9e\u9645\u4e0a\u5728\u4ee3\u7801\u5c42\u9762\u8fd9\u4e24\u90e8\u5206\u53ef\u80fd\u533a\u522b\u4e0d\u5927\uff08\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5206\u652f\u7684\u4e8b\u60c5\uff09\uff0c\u4e0d\u8fc7\u5728\u6570\u5b66\u610f\u4e49\u4e0a\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\u5b50\u6c42\u89e3\u6211\u4eec\u4e00\u822c\u662f\u9700\u8981\u201c\u9996\u9879\u201d\u7684\uff0c\u6216\u8005\u8bf4\u662f\u201c\u6700\u5e95\u5c42\u201d\u7684\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5e95\u5c42\u201d\u7684\u90e8\u5206\u5c31\u662f conquer \u90e8\u5206\u3002

    \u63a5\u4e0b\u6765\u7ed3\u5408 \ud83c\udf30 \u6765\u5206\u6790\u4e00\u4e0b\uff1a

    \ud83c\udf30

    From cy's ppt.

    \\underbrace \u4e0b\u9762\u90a3\u4e2a\u7b49\u5f0f\u7684\u8bc1\u660e\u5728\u4e0a\u9762\u7684 \"some mathematical tools\"\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6b64\u60c5\u51b5\u4e0b \\(a = 3,\\; b = 4,\\; f(N) = \\Theta(N^2)\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\u6bcf\u6b21\u5206\u4e3a \\(3\\) \u4e2a\u5b50\u95ee\u9898\uff0c\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u662f \\(\\frac{N}{4}\\)\uff0c\u800c\u5408\u5e76\u5f00\u9500\u4e3a \\(\\Theta(N^2)\\)\u3002

    \u6b64\u65f6\u7531\u4e8e\u5206\u6cbb\u7684\u7b56\u7565\u662f\u76f8\u5bf9\u5747\u5300\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u5b8c\u7f8e\u4e09\u53c9\u6811\u3002

    \u663e\u7136\uff0c\u6811\u9ad8\u4e3a \\(\\log_4 N\\)\uff0c\u6839\u8bb0\u4e3a \\(0\\)\uff0c\u6bcf\u4e2a\u5206\u6cbb\u8282\u70b9\u7684 combine \u5f00\u9500\u5df2\u7ecf\u6807\u6ce8\u5728\u56fe\u7684\u8282\u70b9\u4f4d\u7f6e\uff0c\u6a2a\u5411\u7bad\u5934\u6807\u8bb0\u7684\u662f\u5bf9\u8be5\u5c42\u6240\u6709\u8282\u70b9\u7684\u5f00\u9500\u7684\u6c42\u548c\u3002\u7279\u522b\u7684\uff0c\u5bf9\u4e8e\u6700\u5e95\u5c42\uff0c\u5373\u53f6\u5b50\u5c42\uff0c\u5b83\u8868\u793a\u7684\u662f conquer \u90e8\u5206\u7684\u5f00\u9500\uff08\u867d\u7136\u6211\u4e2a\u4eba\u89c9\u5f97\u6ca1\u5fc5\u8981\u533a\u5206\u8fd9\u4fe9\uff09\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u4e0b\u5f0f\u7684\u5f62\u5f0f\uff0c\u5bf9\u5176\u8fdb\u884c\u6c42\u548c\uff0c\u5f97\u5230\u56fe\u7247\u4e2d\u4e0b\u65b9\u7684\u5f0f\u5b50\u3002

    \\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4e3b\u65b9\u6cd5","title":"\u4e3b\u65b9\u6cd5","text":"

    link

    OI Wiki: https://oi-wiki.org/basic/complexity/#\u4e3b\u5b9a\u7406-master-theorem

    Wikipedia: https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)

    \u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e00","title":"\u5f62\u5f0f\u4e00","text":"

    Form 1

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

    1. \u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b
    2. \u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b
    3. \u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

    \u60c5\u51b5\u4e09\u7684\u540e\u9762\u90a3\u4e2a\u6761\u4ef6\u53c8\u53eb regularity condition\u3002

    \u56de\u987e\u6211\u4eec\u5728\u524d\u9762\u8bf4\u7684\u90a3\u53e5\u8bdd\uff0c\u300c\u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u300d\uff0c\u89c2\u5bdf\u4e09\u79cd\u60c5\u51b5\u7684\u533a\u5206\u6761\u4ef6\u90fd\u662f\u6bd4\u8f83 \\(f(N)\\)\uff08\u6bcf\u4e00\u6b21\u7684 combine \u5f00\u9500\uff09 \u548c \\(N^{\\log_b{a}}\\)\uff08\u5373\u6c42\u548c\u5f0f\u4e2d\u7684 conquer \u7684\u5f00\u9500\uff09\uff0c\u5f53 \\(f(N)\\) \u8db3\u591f\u5c0f\u65f6\uff0c\u4ee5 conquer \u5f00\u9500\u4e3a\u4e3b\uff08i.e. case 1\uff09\uff1b\u5f53\u8db3\u591f\u5927\u65f6\uff0c\u4ee5 combine \u4e3a\u4e3b\uff08i.e. case 3\uff09\uff1b\u800c\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\uff08i.e. case 2\uff09\u3002

    examples for form 1 "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e","title":"\u8bc1\u660e","text":"

    proof for form 1

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u9700\u8981\u4f9d\u6b21\u8bc1\u660e\uff0c\u6b64\u5904\u6211\u4eec\u4f7f\u7528\u9012\u5f52\u6811\u6cd5\u8fdb\u884c\u8bc1\u660e\u3002

    \u60c5\u51b5\u4e00

    \ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b

    \ud83e\udea7 \u8bc1\u660e\uff1a\u6211\u4eec\u9996\u5148\u9700\u8981\u7ed8\u5236\u51fa\u5bf9\u5e94\u7684\u9012\u5f52\u6811\uff0c\u6216\u8005\u641e\u6e05\u695a\u5c55\u5f00\u540e\u7684\u60c5\u51b5\uff0c\u56e0\u4e3a\u61d2\u5f97\u753b\u56fe\u6240\u4ee5\u6211\u8fd9\u91cc\u91c7\u7528\u6587\u5b57\u53d9\u8ff0\u3002

    \u6811\u9ad8 \\(\\log_b{N}\\)\uff0c\u5171 \\(\\log_b{N} + 1\\) \u5c42\uff0c\u5219\u6709\uff1a

    \u5f97\u5230\u6c42\u548c\u5f0f\uff1a

    \\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

    \u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

    \\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j O\\left(\\left(\\frac{N}{b^j}\\right)^{(\\log_b{a})-\\varepsilon}\\right)\\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} \\left(\\frac{a}{b^{(\\log_b{a})-\\varepsilon}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} (b^{\\varepsilon})^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{1\\times(1-(b^\\varepsilon)^{\\log_b{N}})}{1-b^\\varepsilon} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{N^\\varepsilon-1}{b^\\varepsilon-1} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times N^\\varepsilon \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{\\log_b{a}} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) \\end{aligned} \\]

    \u81f3\u6b64\uff0c\u60c5\u51b5\u4e00\u8bc1\u660e\u5b8c\u6bd5\u3002

    \u60c5\u51b5\u4e8c

    \ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b

    \ud83e\udea7 \u8bc1\u660e\uff1a\u524d\u9762\u7684\u90e8\u5206\u548c\u60c5\u51b5\u4e00\u7684\u7c7b\u4f3c\uff0c\u6211\u4eec\u901a\u8fc7\u76f8\u540c\u7684\u6b65\u9aa4\u5f97\u5230\u76f8\u540c\u7684\u6c42\u548c\u5f0f\uff1a

    \\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

    \u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

    \\[\\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}a^j\\Theta\\left(\\left(\\frac{N}{b^j}\\right)^{\\log_b{a}}\\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\sum_{j=0}^{(\\log_b{N})-1}\\left(\\frac{a}{b^{\\log_b{a}}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\log_b{N} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}\\log{N}) \\end{aligned}\\]

    \u81f3\u6b64\uff0c\u60c5\u51b5\u4e8c\u8bc1\u660e\u5b8c\u6bd5\u3002

    \u60c5\u51b5\u4e09

    \ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

    \ud83e\udea7 \u8bc1\u660e\uff1a\u60c5\u51b5\u4e09\u7684\u8bc1\u660e\uff0c\u4ece\u6761\u4ef6\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u770b\u51fa\u6765\u548c\u524d\u9762\u7a0d\u8bb8\u6709\u4e9b\u4e0d\u540c\u4e86\u3002\u4e0d\u8fc7\u6c42\u548c\u5f0f\u7684\u5f97\u5230\u8fd8\u662f\u4e00\u6837\uff0c\u901a\u8fc7\u548c\u4e4b\u524d\u4e00\u6837\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u9996\u5148\u5f97\u5230\u6c42\u548c\u5f0f\uff1a

    \\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

    \u63a5\u4e0b\u6765\u7684\u6b65\u9aa4\u548c\u4e4b\u524d\u4e0d\u540c\u3002\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u89c2\u5bdf\u4e0d\u7b49\u5f0f \\(af(\\frac{N}{b})<cf(N)\\)\uff0c\u5728\u6211\u4eec\u7684\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u6211\u4eec\u6709\u5927\u91cf\u7684\u5f62\u5982 \\(a^jf(\\frac{N}{b^j})\\) \u7684\u9879\uff0c\u800c\u8fd9\u4e9b\u9879\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fed\u4ee3\u4e0a\u9762\u90a3\u4e2a\u4e0d\u7b49\u5f0f\u6765\u5b9e\u73b0\uff0c\u5373\uff1a

    \\[ a^jf(\\frac{N}{b^j}) < c\\times a^{j-1}f(\\frac{N}{b^{j-1}}) < ... < c^j f(N) \\]

    \u5c06\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\u5e94\u7528\u4e8e\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u80fd\u591f\u5f97\u5230\uff1a

    \\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j=0}^{(\\log_b{N})-1}c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{c^{1-\\log_b{N}}}{1-c} \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\end{aligned} \\]

    \u800c\u7531\u4e8e \\(c<1\\)\uff0c\u6240\u4ee5 \\(\\log_b{c} < 0\\)\uff1b\u800c \\(N > 0\\)\uff0c\u800c\u4e14\u4e00\u822c\u975e\u5e38\u5927\uff0c\u6240\u4ee5 \\(N^{\\log_b{c}} \\in (0,1)\\)\u3002\u56e0\u6b64\uff0c\u5bf9\u4e8e\u786e\u5b9a\u7684\u5e38\u6570 \\(c\\)\uff0c\u6211\u4eec\u6709 \\(\\frac{1-N^{\\log_b{c}}}{1-c} \\in \\left(0, \\frac{1}{1-c}\\right)\\)\uff1b

    \u56e0\u6b64\uff0c\u4e0a\u5f0f\u4fbf\u80fd\u6539\u53d8\u4e3a\uff1a

    \\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1}{1-c} \\end{aligned} \\]

    \u5e76\u4e14\uff0c\u7531\u4e8e \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u6240\u4ee5\u6839\u636e\u7b26\u53f7\u5b9a\u4e49\u53ef\u4ee5\u5f97\u5230 \\(T(N) = O(f(N))\\)\u3002

    \u800c\u6211\u4eec\u77e5\u9053\uff0c\u8981\u8bc1\u660e \\(T(N) = \\Theta(f(N))\\) \u8fd8\u9700\u8981\u8bc1\u660e \\(T(N) = \\Omega(f(N))\\)\uff1a

    \\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq f(N) \\end{aligned} \\]

    \u7531\u6b64\u5f97\u5230 \\(T(N) = \\Omega(f(N))\\)\uff0c\u6700\u7ec8\u8bc1\u5f97 \\(T(N) = \\Theta(f(N))\\)\uff0c\u81f3\u6b64\uff0c\u60c5\u51b5\u4e09\u8bc1\u660e\u5b8c\u6bd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e8c","title":"\u5f62\u5f0f\u4e8c","text":"

    Form 2

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N) = aT(\\frac{N}{b}) + f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

    1. \u82e5 \\(af(\\frac{N}{b}) = \\kappa f(N) \\text{ for fixed } \\kappa < 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N))\\)\uff1b
    2. \u82e5 \\(af(\\frac{N}{b}) = \\Kappa f(N) \\text{ for fixed } \\Kappa > 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(N^{\\log_b{a}}) = \\Theta(a^{\\log_b{N}})\\)\uff08\u4e2a\u4eba\u611f\u89c9\u540e\u9762\u90a3\u4e2a\u5f0f\u5b50\u66f4\u65b9\u4fbf\u76f4\u89c2\u8bb0\u5fc6\uff09\uff1b
    3. \u82e5 \\(af(\\frac{N}{b}) = f(N)\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N) \\log_b N)\\)\uff1b
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e_1","title":"\u8bc1\u660e","text":"

    proof for form 2

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u57fa\u4e8e\u7ebf\u6027\u5173\u7cfb\u7684\u5f62\u5f0f\u4e8c\u7684\u8bc1\u660e\u5b9e\u9645\u4e0a\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u975e\u5e38\u76f8\u50cf\u3002

    \u5047\u8bbe\u6211\u4eec\u6709 \\(af(\\frac{N}{b}) = c f(N)\\)\uff0c\u53ea\u9700\u8981\u8ba8\u8bba \\(c\\) \u7684\u53d6\u503c\u8303\u56f4\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\uff0c\u5c31\u53ef\u4ee5\u4e00\u6b21\u6027\u5f97\u5230\u7ed3\u679c\u3002

    \u7c7b\u4f3c\u4e8e\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\uff0c\u6211\u4eec\u8fed\u4ee3\u8be5\u5173\u7cfb\u5f0f\uff0c\u5f97\u5230\u5173\u7cfb\uff1a

    \\[ a^j f(\\frac{N}{b^j}) = c^j f(N) \\]

    \u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

    \\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j = 0}^{(\\log_b{N})-1} c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ \\end{aligned} \\]

    \u5929\u5450\uff0c\u8fd9\u4e0d\u5c31\u662f\u5f62\u5f0f\u4e00\u91cc\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u5f0f\u5b50\u5417\uff1f\u7136\u800c\u5f53\u6211\u4eec\u6ee1\u5fc3\u6b22\u559c\u5730\u6253\u7b97\u7167\u7740\u5b83\u8bc1\u660e\u5f62\u5f0f\u4e8c\u7684\u60c5\u51b5\u4e00\u65f6\u4f1a\u53d1\u73b0\uff0c\u6761\u4ef6\u597d\u50cf\u4e0d\u591f\u3002\u6211\u4eec\u73b0\u5728\u5e76\u6ca1\u6709\u663e\u5f0f\u7684 \\(f(N) = \\Omega(N^{\\log_b {a}} + \\epsilon)\\) \u7684\u6761\u4ef6\uff0c\u800c\u8fd9\u4e2a\u6761\u4ef6\u6700\u7ec8\u51b3\u5b9a conquer \u90e8\u5206\u548c combine \u90e8\u5206\u8c01\u5360\u4e3b\u5bfc\u5730\u4f4d\u3002\u4f46\u662f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u53ea\u9700\u8981\u5f97\u5230 \\(f(N)\\) = \\(\\Omega(N^{\\log_b {a}})\\) \u5c31\u591f\u4e86\u3002\u5176\u5b9e \\(af(\\frac{N}{b}) \\sim c f(N)\\) \u8fd9\u4ef6\u4e8b\u672c\u8eab\u5c31\u6697\u542b\u4e86\u5b83\u4e0e \\(N^{\\log_b {a}}\\) \u7684\u5173\u7cfb\uff1a

    \u4e3a\u4e86\u91cd\u590d\u5229\u7528\u8fc7\u7a0b\uff0c\u6211\u76f4\u63a5\u7528 \\(\\sim\\) \u6765\u4ee3\u66ff \\(<,>,=\\) \u4e86\uff0c\u8fc7\u7a0b\u4e2d\u4fdd\u6301\u4f20\u9012\u6027\u3002

    \\[ c f(N) \\sim a f(\\frac{N}{b}) \\sim ... \\sim a^L f(\\frac{N}{b^L}) \\]

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e00\u6b65\u8fd8\u662f\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\u3002\u53ea\u4e0d\u8fc7\u73b0\u5728\u6211\u4eec\u8981\u66f4\u8fdb\u4e00\u6b65\u5730\u770b\u8fd9\u4e2a\u5f0f\u5b50\u3002

    \u5f53 \\(c < 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) > af(\\frac{N}{b})\\)\uff1b\u5f53 \\(c = 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) = af(\\frac{N}{b})\\)\uff1b \\(c > 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) < af(\\frac{N}{b})\\)\uff1b

    \u6211\u4eec\u5047\u8bbe \\(\\frac{N}{b^L}\\) \u8db3\u591f\u5c0f\uff08\u5373\u9012\u5f52\u5230\u6700\u672b\u7aef\uff0c\u53ea\u9700\u8981\u8fdb\u884c conquer \u7684\u65f6\u5019\uff09\uff0c\u5373 \\(\\frac{N}{b^L} = \\Theta(1)\\)\uff0c\u90a3\u4e48\u5c31\u6709 \\(L = \\Theta(\\log_b{N})\\)\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

    \\[ f(N) \\sim \\Theta(a^{\\log_b{N}}) = \\Theta(N^{\\log_b{a}}) \\]

    \u7686\u5927\u6b22\u559c\uff01\u4e09\u4e2a\u613f\u671b\uff0c\u4e00\u6b21\u6ee1\u8db3\uff01

    \u5269\u4e0b\u7684\u8bc1\u660e\u8fc7\u7a0b\u6211\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e09","title":"\u5f62\u5f0f\u4e09","text":"

    Form 3

    \u7b2c\u4e09\u79cd\u5f62\u5f0f\u662f\u5bf9\u4e8e \\((N)\\) \u7684\u7279\u522b\u5f62\u5f0f\uff0c\u5f53\u9012\u63a8\u5173\u7cfb\u6ee1\u8db3\uff1a

    \\[ \\begin{aligned} & T(N) = a T(\\frac{n}{b}) + \\Theta(N^k \\log^p{N}) & \\text{Where } a \\geq 1,\\; b > 1,\\; p \\geq 0 \\end{aligned} \\]

    \u5176\u590d\u6742\u5ea6\u6709\u7ed3\u8bba\uff1a

    \\[ T(N) = \\left\\{ \\begin{aligned} & O(N^{\\log_b{a}}) & \\text{if } a > b^{k} \\\\ & O(N^k \\log^{p+1}{N}) & \\text{if } a = b^{k} \\\\ & O(N^k \\log^{p}{N}) & \\text{if } a < b^{k} \\end{aligned} \\right. \\]

    \u5b9e\u9645\u4e0a\u8fd9\u4e2a\u5f0f\u5b50\u4e5f\u975e\u5e38\u597d\u8ba4\uff0c\u5c5e\u4e8e\u5f62\u5f0f\u4e8c\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u3002\u53ef\u4ee5\u5bf9\u7167\u7740\u770b\uff0c\u975e\u5e38\u5bb9\u6613\u770b\u51fa\u5173\u7cfb\u3002

    \u53ea\u4e0d\u8fc7\u5bf9\u4e8e\u7279\u6b8a\u60c5\u51b5\uff0c\u8fd9\u4e2a\u5f62\u5f0f\u7684\u7ea6\u675f\u66f4\u52a0\u7cbe\u786e\uff0c\u8bc1\u660e\u8fc7\u7a0b\u6709\u7f18\u518d\u8865\u5427x

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec08/","title":"Lecture 8 | Dynamic Programming","text":"

    \u7ea6 4 \u4e2a\u5b57

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/","title":"Lecture 9 | Greedy Algorithms","text":"

    \u7ea6 895 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

    \u679c\u7136\u8d8a\u6765\u8d8a\u5bbd\u6cdb\u4e86

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u8d2a\u5fc3\u7b97\u6cd5(Greedy Algorithms)\u662f\u4e00\u79cd\u5728\u6c42\u89e3\u4f18\u5316\u95ee\u9898\u65f6\u91c7\u7528\u7684\u7b56\u7565\uff0c\u5b83\u5728\u6bcf\u4e2a\u51b3\u7b56\u9636\u6bb5\u90fd\u9009\u62e9\u5f53\u524d\u770b\u8d77\u6765\u6700\u4f18\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4ece\u800c\u5e0c\u671b\u80fd\u591f\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u89e3\u3002\u8d2a\u5fc3\u7b97\u6cd5\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c40\u90e8\u6700\u4f18\u9009\u62e9\uff0c\u901a\u8fc7\u4e00\u7cfb\u5217\u5c40\u90e8\u6700\u4f18\u7684\u9009\u62e9\uff0c\u6765\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u7684\u76ee\u6807\u3002\u8d2a\u5fc3\u7b97\u6cd5\u6613\u4e8e\u5b9e\u73b0\uff0c\u4f46\u5e76\u4e0d\u603b\u662f\u80fd\u591f\u5f97\u5230\u5168\u5c40\u6700\u4f18\u89e3\uff0c\u56e0\u6b64\u5728\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\u65f6\u9700\u8981\u5206\u6790\u95ee\u9898\u7684\u7279\u6027\u4ee5\u786e\u4fdd\u5176\u9002\u7528\u6027\u3002

    \u2014\u2014ChatGPT

    \u8d2a\u5fc3\u601d\u60f3\u548c\u5b83\u7684\u540d\u5b57\u4e00\u6837\u7b80\u5355\u66b4\u529b\uff0c\u5c31\u662f\u5728\u6bcf\u4e00\u4e2a\u6b65\u9aa4\u4e2d\u90fd\u91c7\u53d6\u5c40\u90e8\u6700\u4f18\u89e3\uff0c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u3002\u4f46\u662f\u663e\u7136\u8fd9\u4e2a\u65b9\u6cd5\u5e76\u4e0d\u603b\u80fd\u201c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u201d\u3002\u56e0\u6b64\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u770b\u8d77\u6765\u76f4\u63a5\u66b4\u529b\uff0c\u4f46\u662f\u5982\u4f55\u627e\u5230\u7528\u300c\u8d2a\u5fc3\u300d\u89e3\u51b3\u95ee\u9898\u7684\u8def\u5f84\uff0c\u5f80\u5f80\u662f\u9700\u8981\u52a8\u52a8\u8111\u5b50\u7684\u3002

    \u548c dp \u4e00\u6837\uff0c\u8d2a\u5fc3\u662f\u4e00\u4e2a\u6bd4\u8f83\u601d\u60f3\u6027\u8d28\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u501f\u52a9\u8bb8\u591a\u6848\u4f8b\u6765\u8fdb\u884c\u5206\u6790\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/#\u6848\u4f8b-activity-selection-problem","title":"[\u6848\u4f8b] Activity Selection Problem","text":"

    \u5728\u8bfe\u4ef6\u4e0a\uff0c\u6d3b\u52a8\u9009\u62e9\u95ee\u9898(Activity Selection Problem)\u7684\u9648\u8ff0\u5982\u4e0b\uff1a

    Activity Selection Problem

    Given a set of activities \\(S = { a_1, a_2, ..., a_n }\\) that wish to use a resource (e.g. a classroom). Each \\(a_i\\) takes place during a time interval \\([s_i, f_i)\\).

    Activities \\(a_i\\) and \\(a_j\\) are compatible if \\(s_i \\geq f_j\\) or \\(s_j \\geq f_i\\) (i.e. their time intervals do not overlap).

    Goal: Select a maximum-size subset of mutually compatible activities.

    \u62bd\u8c61\u6765\u8bf4\u5c31\u662f\u4e00\u4e2a\u4e00\u7ef4\u7684\u5bc6\u94fa\u95ee\u9898\u3002\u7ed9\u5b9a\u65f6\u95f4\u7ebf\u4e0a\u7684\u82e5\u5e72\u533a\u95f4 \\([s_i, f_i)\\)\uff0c\u6c42\u51fa\u6700\u591a\u80fd\u4e0d\u91cd\u53e0\u5730\u5728\u8fd9\u4e2a\u65f6\u95f4\u7ebf\u4e0a\u653e\u7f6e\u591a\u5c11\u4e2a\u533a\u95f4\u3002\u9898\u76ee\u989d\u5916\u4fdd\u8bc1\u4e86\u8f93\u5165\u6570\u636e\u662f\u6839\u636e \\(f_i\\) \u6709\u5e8f\u7684\uff0c\u4e0d\u8fc7\u8fd9\u4e0d\u662f\u5f88\u91cd\u8981\u3002

    bad try 1

    \u4e00\u4e2a\u975e\u5e38 naive \u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u54ea\u95e8\u8bfe\u5148\u5f00\u59cb\u6211\u5148\u9009\u54ea\u95e8\u8bfe\uff0c\u8fd9\u4e2a\u60f3\u6cd5\u975e\u5e38\u7684\u8282\u7701\u8111\u7ec6\u80de\uff0c\u4f46\u662f\u663e\u7136\u4e0d\u5bf9\u3002\u6211\u968f\u968f\u4fbf\u4fbf\u6765\u4e2a\u6700\u65e9\u5f00\u59cb\u6700\u665a\u7ed3\u675f\u7684\u8bfe\uff0c\u5c31\u80fd\u76f4\u63a5 hack \u6389\u8fd9\u4e2a\u65b9\u6cd5\u3002

    bad try 2

    \u518d\u6765\u4e00\u4e2a\u5929\u771f\u7684\u60f3\u6cd5\uff0c\u6211\u6bcf\u6b21\u90fd\u9009\u533a\u95f4\u957f\u5ea6\u6700\u5c11\u7684\uff0c\u867d\u7136\u770b\u8d77\u6765\u80fd\u8ba9\u5b83\u201c\u76f8\u5bf9\u6bd4\u8f83\u591a\u201d\uff0c\u4f46\u662f\u663e\u7136\u4e5f\u65e0\u6cd5\u4fdd\u8bc1\u7ed3\u679c\u7684\u6700\u4f18\u6027\uff0c\u4e5f\u975e\u5e38\u597d hack\u3002

    search

    \u800c\u53e6\u5916\u4e00\u4e2a\u66b4\u529b\u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u6211\u53bb\u679a\u4e3e\u6bcf\u4e00\u79cd\u53ef\u80fd\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4fd7\u79f0\u7684\u66b4\u641c\uff0c\u8fd8\u53ef\u4ee5\u7528\u4e0a\u526a\u679d\u7b49\u64cd\u4f5c\uff0c\u867d\u7136\u53ef\u4ee5\uff0c\u4f46\u662f\u592a\u4e0d\u4f18\u96c5\u4e86\uff0c\u800c\u4e14\u65f6\u95f4\u590d\u6742\u5ea6\u672a\u5fc5\u662f\u6211\u4eec\u80fd\u63a5\u53d7\u7684\u3002

    dp

    \u65e2\u7136\u66b4\u641c\u4e0d\u884c\uff0c\u90a3\u8bd5\u8bd5 dp \u5462\uff1f\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5199\u51fa\u5982\u4e0b\u8f6c\u79fb\u65b9\u7a0b\uff1a

    \\[ dp_i = \\left\\{ \\begin{aligned} &1 & i = 1 \\\\ &\\max\\{ dp_{i-1}, dp_{f(i)} + 1 \\} & i > 1 \\end{aligned} \\right. \\]

    \u5176\u4e2d\uff0c\\(dp_i\\) \u8868\u793a\u5230\u7b2c \\(i\\) \u4e2a\u533a\u95f4\u622a\u6b62\u7684\u65f6\u95f4\u4e3a\u6b62\uff0c\u6700\u591a\u6709\u591a\u5c11\u4e2a\u9879\u76ee\u53ef\u4ee5\u88ab\u5b89\u6392\uff1b\\(f(i)\\) \u662f\u6700\u5927\u7684\u6ee1\u8db3 \\(f_j \\leq s_i\\) \u7684\u533a\u95f4\u7684\u7f16\u53f7 \\(j\\)\uff0c\u4e5f\u5c31\u662f\u80fd\u591f\u4e0d\u91cd\u53e0\u653e\u4e0b\u7684\uff0c\u6700\u665a\u7684\u90a3\u4e2a\u6d3b\u52a8\u3002

    \u6211\u4eec\u53d1\u73b0\uff0c\u8fd9\u4e48\u505a\u662f\u53ef\u4ee5\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd9\u6837\u505a\u7684\u8bdd\uff0c\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

    greedy

    \u663e\u7136\uff0c\u8fd9\u4e2a\u6848\u4f8b\u653e\u5728\u8fd9\u4e2a\u5730\u65b9\u80af\u5b9a\u662f\u6709\u8d2a\u5fc3\u89e3\u7684\u3002\u800c\u4e14\u9898\u76ee\u7684 \u201cAssume\u201d \u63d0\u793a\u6027\u5df2\u7ecf\u5f88\u5f3a\u4e86\u3002\u6211\u4eec\u53ea\u9700\u8981\u6309\u7167\u7ed3\u675f\u65f6\u95f4\uff0c\u904d\u5386\u8fd9\u4e9b\u533a\u95f4\uff0c\u80fd\u585e\u4e0b\u5c31\u585e\uff0c\u5373\u53ef \\(O(N)\\) \u8d2a\u5fc3\u6c42\u89e3\u3002

    TODO:

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/","title":"Lecture 10 | NP Completeness","text":"

    \u7ea6 3027 \u4e2a\u5b57 10 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f

    \u5bfc\u8bfb

    \u7531\u4e8e\u672c\u8282\u6d89\u53ca\u8f83\u591a\u6982\u5ff5\uff0c\u5e76\u4e14\u77e5\u8bc6\u6811\u957f\u7684\u5f88\u84ec\u677e\uff0c\u6240\u4ee5\u6211\u51b3\u5b9a\u5c1d\u8bd5\u975e\u7ebf\u6027\u7ec4\u7ec7\u5185\u5bb9\uff0c\u56e0\u6b64\u672c\u6587\u7684\u9605\u8bfb\u987a\u5e8f\u53ef\u80fd\u4e5f\u5e76\u4e0d\u4f1a\u662f\u7ebf\u6027\u7684\u3002

    \u6240\u6709\u63d0\u5230\u7684\u3001\u5e76\u4e14\u672c\u6587\u4f1a\u4ecb\u7ecd\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u90fd\u4f1a\u4ee5\u94fe\u63a5\u548c\u653e\u5927\u955c\ud83d\udd0d\u7684\u5f62\u5f0f\u51fa\u73b0\u3002\u63a8\u8350\u4f7f\u7528\u9f20\u6807\u4e2d\u952e\u7b49\u65b9\u5f0f\u6253\u5f00\u65b0\u6807\u7b7e\u9875\u67e5\u770b\uff0c\u65b9\u4fbf\u56de\u6eaf\u3002

    \u63a8\u8350\u7684\u9605\u8bfb\u987a\u5e8f\u662f\uff0c\u987a\u7740\u8bfb\u4e0b\u53bb\uff0c\u6bcf\u6b21\u51fa\u73b0 \ud83d\udd0d \u90fd\u8fdb\u884c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\u5f0f\u7684\u5b66\u4e60\uff0c\u76f4\u81f3\u770b\u5b8c\u5168\u6587\u3002

    \u5176\u4e2d\uff0c\u5728 \u76f8\u5173\u6982\u5ff5 \u4e4b\u540e\u7684\u90e8\u5206\uff0c\u6211\u4f1a\u4fdd\u8bc1\u5728\u524d\u9762\u90fd\u6709\u63d0\u53ca\uff0c\u800c\u5176\u4e4b\u524d\u7684\u5185\u5bb9\uff0c\u63a8\u8350\u90fd\u5728\u987a\u5e8f\u9605\u8bfb\u4e2d\u6d89\u53ca\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    Links

    OI Wiki: https://oi-wiki.org/misc/cc-basic/

    Wikipedia: https://en.wikipedia.org/wiki/P_versus_NP_problem

    Wikipedia: https://en.wikipedia.org/wiki/NP-completeness

    Wikipedia: https://en.wikipedia.org/wiki/NP-hardness

    \u6839\u636e\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u7531\u4e0d\u540c\u7684\u5b9a\u4e49\u5212\u5206\uff0c\u95ee\u9898\u53ef\u4ee5\u5206\u4e3a\uff1a

    P \u95ee\u9898(polynomial time)\u3001NP \u95ee\u9898(nondeterministic polynomial time)\u3001NPC \u95ee\u9898(NP complete)\u3001NPH \u95ee\u9898(NP hard)\u3002\u9664\u6b64\u4e4b\u5916 \uff0c\u6211\u4eec\u8fd8\u9700\u8981\u989d\u5916\u4e86\u89e3\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898(undecidable)\u3002

    \u7531\u4e8e\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u6bd4\u8f83\u7279\u6b8a\uff0c\u6240\u4ee5\u6211\u5148\u653e\u5728\u524d\u9762\u4ecb\u7ecd\u3002

    Undecidable Problem

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Undecidable_problem

    \u4e0d\u53ef\u5224\u5b9a\u95ee\u9898(undecidable problem)\u662f\u4e00\u7c7b\u7279\u6b8a\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff0c\u5b83\u7684\u7279\u70b9\u662f\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u6c42\u89e3\u5b83\u7684\u7ed3\u679c\u3002

    \u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5178\u578b\u7684\u4f8b\u5b50\u5c31\u662f\u505c\u673a\u95ee\u9898\ud83d\udd0d\u3002

    \u6211\u4eec\u53ef\u4ee5\u7528\u8fd9\u6837\u4e00\u5f20\u56fe\u6765\u8868\u793a\u5176\u4ed6\u51e0\u4e2a\u6982\u5ff5\u7684\u5173\u7cfb\uff1a

    Source: https://en.wikipedia.org/wiki/NP-hardness

    \u53ef\u4ee5\u7c97\u6d45\u7684\u6309\u7167\u56fe\u4e2d\u7684\u201cComplexity\u201d\u8f74\u6765\u7406\u89e3\u5176\u4e2d\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u63a5\u4e0b\u6765\u7ed9\u51fa\u5b83\u4eec\u7684\u8be6\u7ec6\u5b9a\u4e49\uff1a

    P

    P \u53d6\u81ea polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

    NP

    NP \u5373 nondeterministic polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002\u8fd9\u4e2a\u8bf4\u6cd5\u7b49\u4ef7\u4e8e\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\uff08\u5224\u65ad\u7b54\u6848\u662f\u5426\u6b63\u786e\uff09\u3002

    \u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\u7684\u95ee\u9898\u3002

    NPC

    NPC \u5373 NP complete\uff0cNP \u5b8c\u5168\uff0c\u662f NP \u4e2d\u6700\u96be\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u65e0\u9650\u5b9a\u8bcd\u7684\u6700\u96be\u7684\u95ee\u9898\uff01\uff09\u3002\u800c\u6211\u4eec\u79f0\u6ee1\u8db3\u5982\u4e0b\u6761\u4ef6\u7684\u95ee\u9898\u4e3a NPC \u95ee\u9898\uff1a

    1. \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. \u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff1b

    \u7531 2 \u53ef\u4ee5\u6709\u7ed3\u8bba\uff0c\u6240\u6709\u7684 NPC \u95ee\u9898\u96be\u5ea6\u76f8\u540c\u2014\u2014\u4e00\u65e6\u6709\u4e00\u4e2a NPC \u95ee\u9898\u88ab\u89e3\u51b3\uff0c\u90a3\u4e48\u6240\u6709 NPC \u95ee\u9898\uff0c\u4e43\u81f3\u6240\u6709 NP \u95ee\u9898\u90fd\u80fd\u88ab\u89e3\u51b3\u3002

    \u5982\u679c\u6211\u4eec\u8bd5\u56fe\u8bc1\u660e\u4e00\u4e2a\u95ee\u9898\u662f NPC \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8fd9\u79cd\u624b\u6bb5\uff1a

    1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH\uff08\u5728\u4e0b\u9762\uff09\u95ee\u9898\uff1b

    \u7b2c\u4e00\u4e2a\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\u662f Circuit-SAT\ud83d\udd0d \u95ee\u9898\u3002

    P ?= NP & NPC

    \u5173\u4e8e P \u548c NP \u7684\u5173\u7cfb\uff0c\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053 P \u662f\u5426\u80fd\u7b49\u4e8e NP\uff0c\u5373\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u662f\u5426\u5b58\u5728\u591a\u9879\u5f0f\u7b97\u6cd5\u53ef\u4ee5\u89e3\u51b3\u4e00\u5207 NP \u95ee\u9898\u3002

    \u800c\u5176\u4e2d\u7684\u5173\u952e\u5c31\u662f\uff0c\u5982\u679c\u6211\u4eec\u80fd\u627e\u5230 NPC \u95ee\u9898\u7684\u591a\u9879\u5f0f\u89e3\u6cd5\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u8bc1\u660e P = NP\u3002

    NPH

    NPH \u5373 NP hard\uff0cNP \u56f0\u96be\uff0c\u5b83\u4e0d\u4e00\u5b9a\u9700\u8981\u662f NP \u95ee\u9898\u3002\u800c\u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a NPH \u95ee\u9898\u3002

    \u4e5f\u5c31\u662f\u8bf4 \\(NPC = NP \\cap NPH\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u8bfe\u5185\u6848\u4f8b","title":"\u8bfe\u5185\u6848\u4f8b","text":"

    \u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u90fd\u662f\u8bfe\u4ef6\u4e2d\u63d0\u5230\u7684\u4e00\u4e9b\u5177\u4f53\u95ee\u9898\u548c\u6848\u4f8b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#halting-problem","title":"Halting Problem","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Halting_problem

    \u505c\u673a\u95ee\u9898\u662f\u4e00\u4e2a\u5178\u578b\u7684\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\uff0c\u5b83\u6307\u7684\u662f\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u5224\u65ad\u5b83\u662f\u5426\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u505c\u673a\uff08\u5373\u5224\u65ad\u7a0b\u5e8f\u662f\u5426\u4f1a\u6b7b\u5faa\u73af\uff09\u3002

    \u6211\u4eec\u901a\u8fc7\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\uff1a

    \u5047\u8bbe\u5b58\u5728\u51fd\u6570 willHalt(func F) \u53ef\u4ee5\u5224\u65ad\u51fd\u6570 F \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5982\u679c\u4f1a\uff0c\u5219\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u8fd9\u6837\u7684\u51fd\u6570 foo()\uff1a

    void foo() {\nif ( willHalt(foo) ) {\nwhile (true) {} // Endless loop.\n}\nreturn;\n}\n

    \u63a5\u4e0b\u6765\uff0c\u5982\u679c\u6211\u4eec\u60f3\u77e5\u9053 foo() \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5c31\u4f1a\u6267\u884c willHalt(foo)\u3002\u7136\u800c\u5728 foo() \u5185\u90e8\u4e5f\u6709\u4e00\u4e2a willHalt(foo)\uff0c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4f1a\u505c\u673a\uff0c\u5219\u6784\u9020\u4e00\u4e2a\u6b7b\u5faa\u73af\uff1b\u800c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4e0d\u4f1a\u505c\u673a\uff0c\u5219\u9009\u62e9\u8ba9\u5b83\u7acb\u523b\u505c\u673a\uff0c\u4e8e\u662f\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u77db\u76fe\u3002

    \u7406\u89e3\u4e0a\u9762\u8fd9\u6bb5\u5185\u5bb9\u7684\u5173\u952e\u5c31\u662f\uff0c\u8fd9\u91cc\u867d\u7136\u4e0d\u5b58\u5728\u4e8b\u5b9e\u610f\u4e49\u4e0a\u7684\u201c\u6b7b\u5faa\u73af\u201d\uff0c\u4f46\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u903b\u8f91\u4e0a\u7684\u9012\u5f52\uff0c\u800c\u8fd9\u79cd\u201c\u903b\u8f91\u4e0a\u7684\u9012\u5f52\u201d\uff0c\u6b63\u662f\u5bfc\u81f4\u505c\u673a\u95ee\u9898\u6210\u4e3a\u4e00\u4e2a\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u7684\u539f\u56e0\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#hamilton-cycle-problem","title":"Hamilton Cycle Problem","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Hamiltonian_path_problem

    OI Wiki: https://oi-wiki.org/graph/hamilton

    \u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898

    \u7ed9\u5b9a\u4e00\u4e2a\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\u3002

    \u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#traveling-salesman-problem","title":"Traveling Salesman Problem","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Travelling_salesman_problem

    \u65c5\u884c\u5546\u95ee\u9898

    \u65c5\u884c\u5546\u95ee\u9898\u6709\u4e24\u79cd\u5b9a\u4e49\uff0c\u5176\u4e2d\u524d\u8005\u662f NPH\uff0c\u800c\u88ab\u79f0\u4e3a\u201c\u5224\u5b9a\u7248\u672c\u201d\u7684\u540e\u8005\u662f NPC\u3002

    \u539f\u59cb\u5b9a\u4e49\u5224\u5b9a\u7248\u672c

    \u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u6700\u77ed\u3002

    \"Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?\"

    From Wikipedia

    \u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u7ec4\u5408\u4f18\u5316\u7684\u8bed\u5883\u4e2d\u3002

    \u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7 \\(k\\)\u3002

    \u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u590d\u6742\u5ea6\u7406\u8bba\u7684\u8bed\u5883\u4e2d\u3002

    \u9700\u8981\u6ce8\u610f\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u8c08\u8bba\u7684\u90fd\u662f\u5224\u5b9a\u7248\u672c\u7684 TSP\uff01

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u5224\u5b9a\u7248\u672c\u7684-npc-\u8bc1\u660e","title":"\u5224\u5b9a\u7248\u672c\u7684 NPC \u8bc1\u660e","text":"

    \u73b0\u5728\uff0c\u5047\u8bbe\u6211\u4eec\u5df2\u77e5 Hamilton Cycle Problem \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5c1d\u8bd5\u901a\u8fc7\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u7684\u65b9\u5f0f\u6765\u8bc1\u660e TSP \u4e5f\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

    Recommended Reading

    https://opendsa-server.cs.vt.edu/ODSA/Books/Everything/html/hamiltonianCycle_to_TSP.html

    \u9996\u5148\u56de\u987e\u8bc1\u660e NPC \u7684\u6b65\u9aa4\uff1a

    1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH \u95ee\u9898\uff1b

    \u4ee3\u5165\u5230\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u9700\u8981\u8bc1\u660e\uff1a

    1. TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. Hamilton Cycle Problem \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\uff1b

    TSP is NP

    \u8bc1\u660e TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\u5373\u8bc1\u660e TSP \u7684\u89e3\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u88ab\u9a8c\u8bc1\u3002\u800c\u9a8c\u8bc1\u4e00\u4e2a\u89e3\u662f TSP \u95ee\u9898\u7684\u89e3\uff0c\u9700\u8981\u8bc1\u660e\u4e0b\u9762\u4e24\u4e2a\u70b9\uff1a

    1. \u8fd9\u6761\u8def\u5f84\u7ecf\u8fc7\u4e86\u6240\u6709\u8282\u70b9\u6070\u597d\u4e00\u6b21\uff1b
    2. \u8fd9\u6761\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7\\(k\\)\uff1b

    \u663e\u7136\uff0c\u8fd9\u4e24\u6761\u90fd\u53ea\u9700\u8981 \\(O(N)\\) \u7684\u5f00\u9500\u5c31\u80fd\u9a8c\u8bc1\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u5f97\u5230\u7ed3\u8bba\uff1a\\(\\text{TSP} \\in \\text{NP}\\)\u3002

    TSP is NPH

    \u8981\u8bc1\u660e TSP \u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bc1\u660e Hamilton Cycle Problem(HCP) \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\u3002

    \u4e3a\u6b64\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bd4 HCP \u548c TSP \u7684\u5dee\u5f02\u3002

    \u4ee5 HCP \u4e3a\u57fa\u7840\u63cf\u8ff0 TSP\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5728\u4e00\u5f20\u5b8c\u5168\u56fe\u4e0a\u5bfb\u627e\u603b\u957f\u4e0d\u8d85\u8fc7 \\(k\\) \u7684\u54c8\u5bc6\u987f\u73af\u8def\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

    HCP TSP \u56fe \\(G(V,E)\\) \u5b8c\u5168\u56fe \\(G'(V',E')\\) \u65e0\u8fb9\u6743 \u6709\u8fb9\u6743 - \\(\\sum v_i \\leq k\\)

    \u800c\u4e3a\u4e86\u8bc1\u660e \\(\\text{HCP} \\leq_p \\text{TCP}\\)\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e00\u4e2a\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u65b9\u6cd5 f() \u5b9e\u73b0 \\(G(V,E) \\to G'(V',E')\\)\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u505a\u8fd9\u4e9b\u4e8b\uff1a

    1. \u8fde\u63a5 \\(G\\) \u4e2d\u6240\u6709\u6ca1\u8fde\u4e0a\u7684\u8fb9\uff0c\u4f7f \\(G\\) \u6210\u4e3a\u4e00\u5f20\u65e0\u6743\u5b8c\u5168\u56fe\uff1b
    2. \u5bf9\u4e8e\u65e0\u6743\u5b8c\u5168\u56fe\u4e2d\u7684\u6bcf\u4e00\u6761\u8fb9 \\(v^c_i\\)\uff0c\u5982\u679c\u5728 \\(G\\) \u4e2d\u4e5f\u6709\u8fd9\u6761\u8fb9\uff0c\u90a3\u4e48\u4ee4\u5b83\u8fb9\u6743\u4e3a 0\uff0c\u5426\u5219\u4ee4\u5b83\u8fb9\u6743\u4e3a 1\uff0c\u4e8e\u662f\u5f97\u5230\u6709\u6743\u5b8c\u5168\u56fe \\(G'(V',E')\\)\uff1b

    \u53f3\u56fe\u4e2d\u6240\u6709\u7684\u84dd\u8fb9\u8fb9\u6743\u90fd\u4e3a 0\uff0c\u7eff\u8fb9\u8fb9\u6743\u90fd\u4e3a 1\u3002

    \u7531\u4e8e\u5b8c\u5168\u56fe\u7684\u8fb9\u6570\u4e3a \\(\\frac{n(n-1)}{2}\\)\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6b65\u9aa4\u663e\u7136\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u539f\u95ee\u9898\u4e3a\u5728 \\(G\\) \u4e0a\u5bfb\u627e\u54c8\u5bc6\u987f\u73af\uff0c\u7b49\u4ef7\u4e8e\u5728 \\(G' = f(G)\\) \u4e0a\u505a \\(k = 0\\) \u7684 TSP\u3002\u7531\u6b64\u8bc1\u660e \\(\\text{HCP} \\leq_{p} \\text{TSP}\\)\uff0c\u5373 \\(\\text{TSP} \\in \\text{NPH}\\)\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u7531\u4e8e \\(\\text{TSP} \\in \\text{NP}\\) \u4e14 \\(\\text{TSP} \\in \\text{NPH}\\)\uff0c\u6240\u4ee5 \\(\\text{TSP} \\in \\text{NPC}\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#circuit-sat","title":"Circuit-SAT","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

    Circuit-SAT \u53c8\u53eb circuit satisfiability problem\uff0c\u5b83\u662f\u6700\u65e9\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\uff0c\u5373\u901a\u8fc7 NPC \u95ee\u9898\u7684\u5b9a\u4e49\u8bc1\u660e\u3002

    \u5176\u5177\u4f53\u63cf\u8ff0\u5982\u4e0b\uff1a

    Circuit-SAT

    Circuit-SAT \u5373\u4e3a\u786e\u5b9a\u7ed9\u5b9a\u5e03\u5c14\u7535\u8def\u662f\u5426\u5177\u6709\u4f7f\u8f93\u51fa\u4e3a\u771f\u7684\u8f93\u5165\u5206\u914d\u7684\u51b3\u7b56\u7684\u95ee\u9898\u3002

    Source: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

    \u4e0a\u56fe\u4e2d\uff0c\u5de6\u4fa7\u7535\u8def\u6ee1\u8db3\u6761\u4ef6\uff0c\u53f3\u4fa7\u7535\u8def\u4e0d\u6ee1\u8db3\u6761\u4ef6\u3002

    \u6216\u8005\uff0c\u66f4\u62bd\u8c61\u7684\u6765\u8bf4\uff0c\u662f\u5224\u65ad\u4e00\u4e2a\u5177\u6709 \\(n\\) \u4e2a\u5e03\u5c14\u53d8\u91cf\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u662f\u5426\u5177\u6709\u7ed3\u679c\u4e3a True \u7684\u89e3\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#3-sat","title":"3-SAT","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Boolean_satisfiability_problem#3-satisfiability

    3-SAT \u6307\u7684\u662f Circuit-SAT \u95ee\u9898\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u5b83\u5bf9\u5e03\u5c14\u7535\u8def\uff0c\u6216\u8005\u8bf4\u5e03\u5c14\u8868\u8fbe\u5f0f\u7684\u5f62\u5f0f\u6709\u7279\u6b8a\u8981\u6c42\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u8981\u6c42\u5e03\u5c14\u8868\u8fbe\u5f0f\u5f62\u5982\uff1a

    \\[ (x_1 \\vee x_2 \\vee x_3) \\wedge (x_4 \\vee x_5 \\vee x_6) \\wedge \\cdots \\wedge (x_{n-2} \\vee x_{n-1} \\vee x_n) \\] "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#a-formal-language-framework","title":"A formal-language Framework","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u76f8\u5173\u6982\u5ff5","title":"\u76f8\u5173\u6982\u5ff5","text":"

    \u8bf4\u660e

    \u4ee5\u4e0b\u90e8\u5206\u7684\u5185\u5bb9\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u8bf4\u660e\u4e0a\u6587\u4e2d\u90e8\u5206\u5185\u5bb9\u800c\u4ecb\u7ecd\u7684\u6982\u5ff5\uff0c\u5e76\u4e0d\u5177\u6709\u7ec4\u7ec7\u7ed3\u6784\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u56fe\u7075\u673a","title":"\u56fe\u7075\u673a","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Turing_machine

    Wikipedia: https://en.wikipedia.org/wiki/Nondeterministic_Turing_machine

    \u56fe\u7075\u673a\u6709\u4e00\u4e9b\u53d8\u4f53\uff0c\u800c\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u56fe\u7075\u673a\u662f\u4e3a\u4e86\u4ecb\u7ecd P/NP\uff0c\u53ea\u4ecb\u7ecd\u786e\u5b9a\u578b\u56fe\u7075\u673a\u548c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u3002

    \u56fe\u7075\u673a\u7531\u4e00\u4e2a\u65e0\u9650\u957f\u7684\u7eb8\u5e26\u548c\u4e00\u4e2a\u8bfb\u5199\u5934\u7ec4\u6210\u3002\u7eb8\u5e26\u88ab\u5212\u5206\u4e3a\u4e00\u4e2a\u4e2a\u683c\u5b50\uff0c\u6bcf\u4e2a\u683c\u5b50\u4e0a\u6709\u4e00\u4e2a\u7b26\u53f7\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u5728\u7eb8\u5e26\u4e0a\u79fb\u52a8\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u8bfb\u53d6\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u4e5f\u53ef\u4ee5\u6539\u53d8\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u3002\u56fe\u7075\u673a\u7684\u72b6\u6001\u662f\u4e00\u4e2a\u6709\u9650\u96c6\u5408\uff0c\u6bcf\u4e2a\u72b6\u6001\u90fd\u6709\u4e00\u4e2a\u8f6c\u79fb\u51fd\u6570\uff0c\u8f6c\u79fb\u51fd\u6570\u7684\u8f93\u5165\u662f\u5f53\u524d\u72b6\u6001\u548c\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u8f93\u51fa\u662f\u4e0b\u4e00\u4e2a\u72b6\u6001\u3001\u4e0b\u4e00\u4e2a\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u548c\u8bfb\u5199\u5934\u7684\u79fb\u52a8\u65b9\u5411\u3002

    \u66f4\u672c\u8d28\u7684\u6765\u8bf4\uff0c\u56fe\u7075\u673a\u662f\u4e00\u79cd\u8ba1\u7b97\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8868\u793a\u4efb\u4f55\u6709\u9650\u903b\u8f91\u6570\u5b66\u8fc7\u7a0b\u3002\u786e\u5b9a\u578b\u56fe\u7075\u673a\u4e0e\u6211\u4eec\u5e38\u89c4\u7406\u89e3\u7684\u8ba1\u7b97\u673a\u903b\u8f91\u7c7b\u4f3c\uff0c\u5373\u4e0b\u4e00\u6b65\u8981\u505a\u4ec0\u4e48\u53ef\u4ee5\u6839\u636e\u5f53\u524d\u72b6\u6001\u786e\u5b9a\u3002\u800c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u5219\u7c7b\u4f3c\u4e8e\u80fd\u591f\u8fdb\u884c\u65e0\u9650\u5e76\u884c\uff0c\u5e76\u4e14\u6700\u7ec8\u603b\u662f\u9009\u62e9\u901a\u5411\u6b63\u786e\u7b54\u6848\u7684\u65b9\u5411\u7684\u90a3\u6761\u8def\uff08\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5b83\u80fd\u5f00\u5e73\u884c\u5b87\u5b99\uff0c\u5e76\u4e14\u603b\u662f\u8ba9\u4f60\u89c2\u6d4b\u5230\u6b63\u786e\u7684\u90a3\u4e00\u4e2a\u5e73\u884c\u5b87\u5b99\uff09\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","title":"\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_reduction

    \u6211\u4eec\u5f15\u5165 P/NP \u7b49\u8fd9\u4e9b\u6982\u5ff5\uff0c\u662f\u4e3a\u4e86\u8861\u91cf\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u800c\u5982\u4f55\u5728\u5177\u4f53\u7684\u201c\u95ee\u9898\u201d\u95f4\u4f20\u9012\u3001\u6bd4\u8f83\u8fd9\u79cd\u201c\u590d\u6742\u7a0b\u5ea6\u201d\uff0c\u5c31\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u7684\u76ee\u7684\u3002

    graph LR;\nA[\"\u95ee\u9898 A\"]\nB[\"\u95ee\u9898 B\"]\nA ===>|\"\u591a\u9879\u5f0f\u65f6\u95f4\u8f6c\u5316\"| B

    \u5982\u679c\u6211\u4eec\u80fd\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u590d\u6742\u5ea6\u5185\uff0c\u5c06\u95ee\u9898 A \u8f6c\u5316\u4e3a\u95ee\u9898 B\uff0c\u5219\u79f0\u95ee\u9898 A \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u4e3a B\uff0c\u8bb0\u4e3a \\(A \\leq_{p} B\\)\uff0c\u8868\u793a A \u4e0d\u4f1a\u6bd4 B \u96be\u3002

    \u800c\u91c7\u53d6\u6570\u5b66\u8bed\u8a00\u6765\u63cf\u8ff0\uff0c\u5219\u662f\uff1a

    \\[ \\begin{aligned} A \\leq_{p} B \\;\\;\\Leftrightarrow\\;\\; & \\exist f() \\text{ which runs in polynomial time}, \\\\ & s.t. \\;\\; \\forall x \\in A,\\; f(x) \\in B \\\\ & \\text{and}\\; \\forall f(x) \\in B,\\; y \\in A \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/","title":"Lecture 11 | Approximation","text":"

    \u7ea6 5372 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 27 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u7b97\u6cd5","title":"\u8fd1\u4f3c\u7b97\u6cd5","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Approximation_algorithm

    \u5728\u4e0a\u4e00\u7ae0\u4e2d\u6211\u4eec\u4ecb\u7ecd\u4e86 P/NP \u95ee\u9898\uff0c\u800c\u5927\u5bb6\u666e\u904d\u8ba4\u4e3a P \u2260 NP\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5bf9\u4e8e\u67d0\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u65e0\u6cd5\u4f7f\u7528\u591a\u9879\u5f0f\u65f6\u95f4\u89e3\u51b3\uff0c\u800c\u5728\u95ee\u9898\u89c4\u6a21\u53d8\u5927\u65f6\uff0c\u8d8a\u53d1\u4e0d\u53ef\u63a5\u53d7\u3002

    \u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u9000\u800c\u6c42\u5176\u6b21\uff0c\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u6c42\u4e00\u4e2a\u6bd4\u8f83\u4f18\u7684\u89e3\u3002\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u5c1d\u8bd5\u5bfb\u627e\u4e00\u79cd\u591a\u9879\u5f0f\u7b97\u6cd5\uff0c\u4f7f\u5f97\u5176\u7ed3\u679c\u59cb\u7ec8\u5728\u5173\u4e8e\u51c6\u786e\u89e3\u7684\u53ef\u63a5\u53d7\u504f\u5dee\u8303\u56f4\u5185\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7b97\u6cd5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u8fd1\u4f3c\u7b97\u6cd5(approximation algorithm)\u3002

    \u6211\u4eec\u8bbe \\(f(n, x)\\) \u662f\u5bf9\u8f93\u5165\u5927\u5c0f\u4e3a \\(n\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u7ed3\u679c \\(x\\) \u7684\u6700\u574f\u60c5\u51b5\u7684\u4e00\u4e2a\u76f4\u89c2\u91cf\u5316\uff08\u4f8b\u5982 dist, weight...\uff09\uff0c\u82e5\u8bbe \\(x^*\\) \u4e3a\u51c6\u786e\u89e3\uff0c\\(x\\) \u4e3a\u7ed9\u5b9a\u7b97\u6cd5\u7ed3\u679c\uff0c\u5219\u6211\u4eec\u5b9a\u4e49\u8fd1\u4f3c\u6bd4(Approximation Ratio)\\(\\rho\\)\uff1a

    \\[ \\forall n \\rho = \\max\\left\\{\\frac{f(n, x)}{f(n, x^*)}, \\frac{f(n, x^*)}{f(n, x)}\\right\\} \\]

    \u5219\u79f0\u7ed9\u5b9a\u7b97\u6cd5\u4e3a \\(\\rho\\) \u8fd1\u4f3c\u7b97\u6cd5(\\(\\rho\\)-approximation algorithm)\u3002

    \u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5

    \u5728\u770b\u5230\u8fd1\u4f3c\u7b97\u6cd5\u65f6\uff0c\u6211\u8111\u5b50\u91cc\u4e00\u4e0b\u5b50\u6d6e\u73b0\u51fa\u4e86\u968f\u673a\u7b97\u6cd5\u7684\u6982\u5ff5\uff0c\u540c\u6837\u662f\u6c42\u51c6\u786e\u89e3\u7684\u8fd1\u4f3c\u89e3\uff0c\u4e24\u8005\u6709\u4f55\u533a\u522b\u5462\uff1f

    hint: \u6700\u574f\u60c5\u51b5

    \u8fd1\u4f3c\u7b97\u6cd5\u548c\u968f\u673a\u7b97\u6cd5\u6700\u5927\u7684\u533a\u522b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u8bbe\u8ba1\u3001\u5206\u6790\u3001\u8ba8\u8bba\u8fd1\u4f3c\u7b97\u6cd5\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u90fd\u662f\u5b83\u7684\u6700\u574f\u60c5\u51b5\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd1\u4f3c\u7b97\u6cd5\u662f\u5b8c\u5168\u53ef\u63a7\u7684\uff0c\u800c\u7eaf\u7cb9\u7684\u968f\u673a\u7b97\u6cd5\u5219\u662f\u901a\u8fc7\u6982\u7387\u6765\u51cf\u5c11\u574f\u60c5\u51b5\u51fa\u73b0\u7684\u53ef\u80fd\uff0c\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u7ea6\u675f\u3002\u8fd1\u4f3c\u7b97\u6cd5\u6700\u574f\u4e5f\u5c31\u574f\u5230 \\(\\rho\\)\uff0c\u800c\u968f\u673a\u7b97\u6cd5\u6700\u574f\u53ef\u4ee5\u574f\u5230\u6d77\u62c9\u9c81\u5927\u9646\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u8303\u5f0f","title":"\u8fd1\u4f3c\u8303\u5f0f","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_approximation_scheme

    \u8fd1\u4f3c\u8303\u5f0f(approximation scheme)\u6307\u7684\u662f\u5bf9\u4e8e\u67d0\u4e2a\u4f18\u5316\u95ee\u9898\u7684\u4e00\u65cf\u76f8\u540c\u6a21\u5f0f\u7684\u7b97\u6cd5\uff0c\u5b83\u4eec\u6ee1\u8db3\u5bf9\u4e8e\u786e\u5b9a\u7684 \\(\\epsilon > 0\\)\uff0c\u7b97\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

    \u53ef\u4ee5\u7c97\u7cd9\u5730\u7406\u89e3\u4e3a\uff1a\u201c\u8303\u5f0f\u201d\u662f\u4e00\u4e2a\u8f93\u51fa\u4e3a\u7b97\u6cd5\u7684\u7279\u6b8a\u51fd\u6570\uff0c\u800c \\(\\epsilon\\) \u662f\u201c\u8303\u5f0f\u201d\u7684\u4e00\u4e2a\u53c2\u6570\uff0c\u5bf9\u4e8e\u7279\u5b9a\u7684 \\(\\epsilon\\)\uff0c\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u7b97\u6cd5\uff08\u8fd9\u4e9b\u7b97\u6cd5\u6709\u7740\u76f8\u540c\u7684\u6a21\u5f0f\uff09\uff0c\u800c\u8fd9\u4e9b\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u7684\u7b97\u6cd5\uff0c\u90fd\u89e3\u51b3\u540c\u4e00\u4e2a\u95ee\u9898\uff0c\u5e76\u4e14\u5bf9\u4e8e\u4efb\u610f\u56fa\u5b9a\u7684 \\(\\epsilon\\) \u5176\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

    \u800c\u5173\u4e8e \\(\\epsilon > 0\\) \u8fd9\u4e2a\u7ea6\u675f\uff0c\u662f\u56e0\u4e3a\u8fd1\u4f3c\u6bd4\u5fc5\u5b9a\u5927\u4e8e 1\u3002

    \u800c\u6b64\u65f6\uff0c\u8fd9\u4e00\u65cf\u7684\u7b97\u6cd5\u7684\u590d\u6742\u5ea6\u53ef\u4ee5\u8868\u793a\u4e3a \\(O(f(n, \\epsilon))\\)\uff0c\u5982 \\(O(n^{2/\\epsilon}), O((\\frac{1}{\\epsilon})^2n^3)\\)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(polynomial-time approximation scheme, PTAS)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u548c \\(\\frac{1}{\\epsilon}\\) \u90fd\u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u5b8c\u5168\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(fully polynomial-time approximation scheme, FPTAS)\u3002

    \u4e3a\u4ec0\u4e48\u8981\u533a\u5206 PTAS \u548c FPTAS \u5462\uff1f\u6211\u4eec\u89c2\u5bdf \\(\\epsilon\\) \u5bf9\u7b97\u6cd5\u7684\u5f71\u54cd\uff1a\u968f\u7740 \\(\\epsilon\\) \u7684\u51cf\u5c0f\uff0c\u8fd1\u4f3c\u6bd4\u9010\u6e10\u53d8\u5c0f\uff0c\u5373\u51c6\u786e\u5ea6\u63d0\u9ad8\uff1b\u800c \\(\\frac{1}{\\epsilon}\\) \u53d8\u5927\uff0c\u800c\u901a\u5e38\u6765\u8bf4 \\(\\frac{1}{\\epsilon}\\) \u4e0e\u7b97\u6cd5\u590d\u6742\u5ea6\u90fd\u662f\u6b63\u76f8\u5173\u7684\uff0c\u56e0\u6b64\u4f1a\u5bfc\u81f4\u7b97\u6cd5\u590d\u6742\u5ea6\u5347\u9ad8\u3002\u5982\u679c\u8bf4\u8fd9\u4e2a\u8fd1\u4f3c\u8303\u5f0f\u662f FPTAS\uff0c\u90a3\u4e48\u4e3a\u4e86\u63d0\u9ad8\u51c6\u786e\u5ea6\u800c\u7f29\u5c0f \\(\\epsilon\\)\uff0c\u5bfc\u81f4\u7684\u590d\u6742\u5ea6\u53d8\u5316\u662f\u76f8\u5bf9\u53ef\u63a5\u53d7\u7684\uff08\u591a\u9879\u5f0f\u7ea7\u7684\u53d8\u5316\uff0c\u5982 \\((\\frac{1}{\\epsilon})^2n^3\\) \u5173\u4e8e \\(\\frac{1}{\\epsilon}\\) \u662f\u591a\u9879\u5f0f\u7ea7\u7684\uff09\uff1b\u7136\u800c\u5982\u679c\u5b83\u4e0d\u662f FPTAS\uff0c\u90a3\u4e48 \\(\\epsilon\\) \u7684\u7f29\u5c0f\u53ef\u80fd\u5e26\u6765\u6050\u6016\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff08\u5982 \\(n^{2/\\epsilon}\\) \u5173\u4e8e \\(\\epsilon\\) \u662f\u6307\u6570\u7ea7\u7684\uff09\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u82e5\u5e72\u5177\u4f53\u4f8b\u5b50\u505a\u5206\u6790\uff0c\u4ee5\u4fbf\u66f4\u597d\u5730\u7406\u89e3\u8fd1\u4f3c\u7b97\u6cd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-approximate-bin-packing","title":"[\u6848\u4f8b] Approximate Bin Packing","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Bin_packing

    \u88c5\u7bb1\u95ee\u9898\u6307\u7684\u662f\uff0c\u7ed9\u5b9a \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\in [1,N]\\) \u4e2a item \u7684 size \u4e3a \\(S_i \\in (0,1]\\)\uff0c\u4e00\u4e2a bin \u7684\u5927\u5c0f\u4e3a \\(1\\)\uff0c\u5c1d\u8bd5\u5bfb\u627e\u6700\u5c11\u7684\uff0c\u80fd\u591f\u88c5\u8f7d\u6240\u6709 item \u7684 bin \u7684\u6570\u91cf\u3002

    \ud83c\udf30 \u4f8b\u5b50

    \u7ed9\u5b9a 7 \u4e2a item\uff0csize \u5206\u522b\u4e3a \\(0.2, 0.5, 0.4, 0.7, 0.1, 0.3, 0.8\\)\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

    \u8fd9\u662f\u4e00\u4e2a NP hard \u95ee\u9898\uff0c\u73b0\u5728\u6211\u4eec\u8003\u8651\u4e09\u79cd\u8fd1\u4f3c\u89e3\u6cd5\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u4e09\u79cd\u90fd\u662f\u5728\u7ebf(online)\u89e3\u6cd5\uff0c\u5373\u5904\u7406 \\(item_i\\) \u65f6\u6211\u4eec\u4e0d\u77e5\u9053 \\(item_{i+1}\\sim item_{N}\\) \u7684\u60c5\u51b5\u3002\u4e4b\u540e\u6211\u4eec\u4f1a\u518d\u8ba8\u8bba\u79bb\u7ebf(offline)\u505a\u6cd5\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u77e5\u9053\u6240\u6709 item \u7684\u60c5\u51b5\u4ee5\u540e\u518d\u7ed9\u51fa\u7b56\u7565\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-next-fit-nf","title":"(online) Next Fit (NF)","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Next-fit_bin_packing

    NF \u7b56\u7565\u603b\u662f\u9009\u62e9\u5f53\u524d\u6700\u540e\u4e00\u4e2a bin\uff0c\u82e5\u80fd\u591f\u5bb9\u7eb3\uff0c\u5219\u5c06\u5f53\u524d item \u653e\u5165\u5176\u4e2d\uff0c\u5426\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

    NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(2M-1\\) \u4e2a bin\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    proof for 2M-1

    \u6211\u4eec\u4ece NF \u7684\u7ed3\u679c\u51fa\u53d1\uff0c\u8bc1\u660e\u5f53 NF \u7684\u7ed3\u679c\u4e3a\u9700\u8981 \\(2M-1\\) \u6216 \\(2M\\) \u4e2a bin \u65f6\uff0c\u51c6\u786e\u89e3\u4e3a\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

    \u5047\u8bbe \\(S(B_i)\\) \u8868\u793a\u7b2c \\(i\\) \u4e2a bin \u7684 size\uff0c\u5219\u6839\u636e NF \u7684\u5b9a\u4e49\uff0c\u6709\uff1a\\(S(B_{i}) + S(B_{i+1}) > 1\\)\uff08\u662f NF \u7684\u5fc5\u8981\u4e0d\u5145\u5206\u6761\u4ef6\uff09\u3002\u7a0d\u4f5c\u89e3\u91ca\uff0c\u4f7f\u7528\u53cd\u8bc1\u6cd5\uff0c\u5047\u8bbe \\(S(B_{i}) + S(B_{i+1}) \\leq 1\\)\uff0c\u8fd9\u8bf4\u660e\u65e0\u8bba \\(B_{i+1}\\) \u4e2d\u6709\u591a\u5c11 item\uff0c\u90fd\u4e00\u5b9a\u80fd\u653e\u8fdb \\(B_i\\)\uff0c\u800c\u8fd9\u4e0e NF \u201c\\(B_i\\) \u653e\u4e0d\u4e0b\u4e86\u624d\u5f00\u59cb\u653e \\(B_{i+1}\\)\u201d \u7684\u6027\u8d28\u76f8\u8fdd\u80cc\u3002\u4e8e\u662f\u6211\u4eec\u5c06\u6240\u6709\u6876\u4e24\u4e24\u914d\u5bf9\uff1a

    1.\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M-1\\) \u4e2a bin \u65f6\uff1a

    \\[ \\left\\{ \\begin{aligned} S(B_1) + S(B_2) &> 1 \\\\ S(B_3) + S(B_4) &> 1 \\\\ \\vdots \\\\ S(B_{2M-3}) + S(B_{2M-2}) &> 1 \\\\ S(B_{2M-1}) &\\leq 1 \\end{aligned} \\right. \\\\ \\begin{aligned} &\\therefore \\sum_{i=1}^{2M-1} > \\sum_{i=1}^{2M-2} > M-1 \\\\ &\\therefore \\sum_{i=1}^{2M-1} \\geq M \\end{aligned} \\]

    \u5373 item \u7684\u603b size \u81f3\u5c11\u4e3a M\uff0c\u5373\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

    2.\u800c\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M\\) \u4e2a bin \u65f6\uff0c\u53ef\u4ee5\u8f6c\u5316\u4e3a \\(2M-1\\) \u7684\u60c5\u51b5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-first-fit-ff","title":"(online) First Fit (FF)","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/First-fit_bin_packing

    FF \u7b56\u7565\u603b\u662f\u9009\u62e9\u7b2c\u4e00\u4e2a\u80fd\u653e\u4e0b\u5f53\u524d item \u7684 bin\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

    NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-best-fit-bf","title":"(online) Best Fit (BF)","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Best-fit_bin_packing

    BF \u7b56\u7565\u603b\u662f\u9009\u62e9\u80fd\u591f\u5bb9\u7eb3\u5f53\u524d item \u4e14\u5269\u4f59\u7a7a\u95f4\u6700\u5c0f\u7684 bin\uff08\u5373 tightest\uff09\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

    NF \u7b56\u7565\u4e5f\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    \u867d\u7136\u5728\u7ebf\u505a\u6cd5\u7531\u4e8e\u5bf9\u4fe1\u606f\u628a\u63e1\u7684\u4e0d\u5168\u9762\uff0c\u5728\u4e0d\u7279\u6b8a\u6784\u9020\u8f93\u5165\u7684\u60c5\u51b5\u4e0b\u751a\u81f3\u51e0\u4e4e\u4e0d\u53ef\u80fd\u8fbe\u5230\u6700\u4f18\u89e3\uff0c\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u4e2d\u6709\u5f88\u591a\u80fd\u5efa\u6a21\u4e3a\u88c5\u7bb1\u95ee\u9898\u7684\u95ee\u9898\uff0c\u90fd\u8981\u6c42\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\u89e3\u51b3\u3002\u56e0\u6b64\uff0c\u7814\u7a76\u5728\u7ebf\u505a\u6cd5\u8fd8\u662f\u6709\u5176\u610f\u4e49\u7684\u3002

    \u6b64\u5916\uff0c\u5173\u4e8e\u5728\u7ebf\u505a\u6cd5\uff0c\u6709\u4e00\u4e2a\u7ed3\u8bba\uff1a

    theorem

    \u5bf9\u4e8e\u88c5\u7bb1\u95ee\u9898\uff0c\u5982\u679c\u9650\u5b9a\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\uff0c\u5219\u6700\u4f18\u7684\u8fd1\u4f3c\u89e3\u6cd5\uff0c\u5176\u6700\u574f\u60c5\u51b5\u7684\u7ed3\u679c\u4e5f\u81f3\u5c11\u9700\u8981\u51c6\u786e\u89e3\u7684 \\(\\frac{5}{3}\\)\u3002

    PPT \u4e0a\u7684\u539f\u8bdd\u662f\uff0c\u65e0\u8bba\u54ea\u79cd\u5728\u7ebf\u505a\u6cd5\u4e5f\u81f3\u5c11\u9700\u8981\u4f7f\u7528 \\(\\frac{5}{3}\\) \u7684\u51c6\u786e\u89e3\u7ed9\u51fa\u7684\u6570\u91cf\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u4e2a \\(\\frac{5}{3}\\) \u662f\u9488\u5bf9\u6700\u574f\u89e3\u7684\u8ba8\u8bba\u3002\u56de\u987e\u300c\u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5\u300d\u8fd9\u4e2a block \u91cc\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5206\u6790\u8fd1\u4f3c\u89e3\uff0c\u90fd\u662f\u9488\u5bf9\u5176\u6700\u574f\u60c5\u51b5\u6765\u8bf4\u7684\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#offline-first-fit-decreasing-ffd","title":"(offline) First Fit Decreasing (FFD)","text":"

    \u79bb\u7ebf\u505a\u6cd5\u7684\u4f18\u52bf\u5728\u4e8e\u5b83\u80fd\u591f\u83b7\u5f97\u6240\u6709 item \u7684\u4fe1\u606f\u4ee5\u6c42\u7edf\u7b79\u89c4\u5212\u3002\u8fd9\u91cc\u7ed9\u51fa\u7684\u8fd1\u4f3c\u505a\u6cd5\u662f\uff0c\u5c06 item \u6309\u7167 size \u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4f7f\u7528 FF\uff08\u6216 BF\uff0c\u7531\u4e8e\u5355\u8c03\u6027\uff0c\u4e24\u8005\u7b49\u4ef7\uff09\u3002

    \ud83c\udf30 \u4f8b\u5b50

    \u7ed9\u5b9a 7 \u4e2a item\uff08\u540c\u4e4b\u524d\u7684 \ud83c\udf30\uff09\uff0c\u7ecf\u8fc7\u6392\u5e8f\u540e\uff0c\u5b83\u4eec\u7684 size \u5206\u522b\u4e3a $0.8, 0.7, 0.5, 0.4, 0.3, 0.2, 0.1\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

    FFD \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\frac{11}{9}M + \\frac{6}{9}\\) \u4e2a bin\uff08\u4e3a\u5565\u5c31\u8fde wiki \u4e5f\u4e0d\u7ea6 6/9\uff09\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-knapsack-problem","title":"[\u6848\u4f8b] Knapsack Problem","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Knapsack_problem

    \u4e00\u4e2a\u4e0e\u88c5\u7bb1\u95ee\u9898\u5f88\u50cf\u7684\u95ee\u9898\u662f\u80cc\u5305\u95ee\u9898\u3002\u5176\u5927\u81f4\u63cf\u8ff0\u5982\u4e0b\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5bb9\u91cf\u4e3a \\(M\\) \u7684\u80cc\u5305\uff0c\u4ee5\u53ca \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\) \u4e2a item \u7684\u91cd\u91cf\u4e3a \\(w_i\\)\uff0c\u5176\u5229\u6da6\u4e3a \\(p_i\\)\u3002\u8981\u6c42\u5728\u4e0d\u8d85\u8fc7\u80cc\u5305\u5bb9\u91cf\u7684\u524d\u63d0\u4e0b\uff0c\u4f7f\u5f97\u80cc\u5305\u4e2d\u7684\u5229\u6da6\u6700\u5927\u5316\u3002\uff08\u6211\u4e5f\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48 PPT \u4e0a\u4f1a\u628a\u5bb9\u91cf\u548c\u91cd\u91cf\u5173\u8054\u8d77\u6765\uff0canyway\uff0c\u5bb9\u91cf\u9650\u5236\u4e86 item \u7684\u91cd\u91cf\u548c\u3002\uff09

    \u6ce8\u610f

    \u6216\u8bb8\u5728\u5b66\u4e60 dp \u7684\u65f6\u5019\u4f60\u5df2\u7ecf\u63a5\u89e6\u8fc7\u80cc\u5305\u95ee\u9898\u4e86\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u8fd9\u91cc\u8ba8\u8bba\u7684\u80cc\u5305\u95ee\u9898\u6709\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u7279\u70b9\u5c31\u662f\uff0c\u5bb9\u91cf\u548c\u5229\u6da6\u90fd\u662f\u5b9e\u6570\uff0c\u66f4\u76f4\u767d\u7684\u6765\u8bf4\uff0c\u4f60\u6ca1\u529e\u6cd5\u901a\u8fc7\u5c06\u5bb9\u91cf\u6216\u5229\u6da6\u4f5c\u4e3a\u72b6\u6001\u6765 dp \u6c42\u51c6\u786e\u89e3\u3002

    \u800c\u6839\u636e\u6bcf\u4e00\u4e2a\u7269\u54c1\u80fd\u5426\u81ea\u7531\u62c6\u5206\uff0c\u80cc\u5305\u95ee\u9898\u5206\u4e3a fractional version \u548c 0-1 version \u4e24\u7c7b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#fractional-version","title":"Fractional Version","text":"

    \u5982\u679c\u6211\u4eec\u8bb0 \\(x_i\\in[0,1]\\) \u4e3a\u7b2c \\(i\\) \u4e2a item \u7684\u9009\u4e2d\u91cf\uff08\u5373\u5047\u8bbe item \u90fd\u662f\u8fde\u7eed\u53ef\u5206\u7684\uff09\uff0c\u5219\u7ea6\u675f\u6761\u4ef6\u53ef\u4ee5\u8868\u8ff0\u4e3a \\(\\sum_{i}^N w_ix_i \\leq M\\)\uff0c\u73b0\u5728\u6c42 \\(\\sum_{i}^{N} p_ix_i\\) \u7684\u6700\u5927\u503c\u3002

    \ud83c\udf30 \u4f8b\u5b50

    \u5047\u8bbe\u73b0\u5728 \\(M = 20.0\\)\uff0c\u5e76\u4e14 \\(N = 3\\)\uff0c\u5206\u522b\u662f\uff1a

    \u5219\u6700\u4f18\u89e3\u4e3a \\(x_1 = 0, x_2 = 1, x_3 = \\frac{1}{2}\\)\uff0c\u6b64\u65f6 \\(\\sum_{i}^{N} p_ix_i = 31.5\\)\u3002

    \u7531\u4e8e \\(x_i\\in[0,1]\\)\uff0c\u7ed9\u4e86\u6211\u4eec\u6781\u5927\u7684\u9009\u62e9\u81ea\u7531\uff0c\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u4efb\u610f\u591a\u7684\u67d0\u4e2a\u7269\u54c1\u3002\u90a3\u4e48\u975e\u5e38\u6734\u7d20\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\uff0c\u5c3d\u53ef\u80fd\u591a\u5730\u9009\u62e9\u201c\u6027\u4ef7\u6bd4\u201d\u9ad8\u7684\u7269\u54c1\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u6309\u7167 \\(\\frac{p_i}{w_i}\\)\uff08PPT \u79f0\u4e4b\u4e3a profit density\uff09\u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4ece\u5927\u5230\u5c0f\u4f9d\u6b21\u9009\u62e9\u7269\u54c1\uff0c\u76f4\u5230\u80cc\u5305\u88c5\u6ee1\u4e3a\u6b62\u3002

    \u4e0d\u8fc7\u8be5\u505a\u6cd5\u5df2\u7ecf\u662f\u51c6\u786e\u89e3\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u5bf9\u5b83\u8fdb\u884c\u5173\u4e8e\u8fd1\u4f3c\u7b97\u6cd5\u7684\u8ba8\u8bba\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#0-1-version","title":"0-1 Version","text":"

    \u76f8\u8f83\u4e8e fractional version\uff0c0-1 version \u8981\u6c42 \\(x_i \\in \\{0,1\\}\\)\uff0c\u6362\u53e5\u8bdd\u8bf4\u6bcf\u4e00\u4e2a\u7269\u54c1\u8981\u4e48\u9009\u8981\u4e48\u4e0d\u9009\u3002\u8fd9\u662f\u4e00\u4e2a\u7ecf\u5178\u7684 NPC \u95ee\u9898\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528\u8fd1\u4f3c\u7b97\u6cd5\u6765\u6c42\u8f83\u4f18\u89e3\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8d2a\u5fc3\u505a\u6cd5","title":"\u8d2a\u5fc3\u505a\u6cd5","text":"

    \u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\uff0c\u8d2a\u5fc3\u7b56\u7565\u53ef\u4ee5\u662f\u603b\u662f\u9009\u53ef\u4ee5\u653e\u5f97\u4e0b\u7684\u3001\u8fd8\u6ca1\u653e\u5165\u4e2d\u7684\uff0c\u5229\u6da6\u6700\u5927\u7684\u6216 \\(\\frac{p_i}{w_i}\\) \u6700\u5927\u7684\u3002\u8fd9\u4e9b\u505a\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u90fd\u662f 2\u3002

    proof for rho = 2

    \u6211\u4eec\u7528 \\(p_\\text{max}\\) \u8868\u793a\u6240\u6709 item \u4e2d\u6700\u5927\u7684\u5229\u6da6\uff0c\u7528 \\(P_\\text{optimal}\\) \u8868\u793a\u51c6\u786e\u89e3\uff0c\\(P_\\text{greedy}\\) \u8868\u793a\u6211\u4eec\u4f7f\u7528\u8d2a\u5fc3\u505a\u6cd5\u5f97\u5230\u7684\u7b54\u6848\u3002\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u8fd1\u4f3c\u6bd4\u7684\u8ba1\u7b97\u8868\u8fbe\u5f0f\u4e3a\uff1a

    \\[ \\rho = \\max( \\frac{P_\\text{optimal}}{P_\\text{greedy}}, \\frac{P_\\text{greedy}}{P_\\text{optimal}} ) \\]

    \u4e0b\u9762\u662f\u8bc1\u660e\u8fc7\u7a0b\uff1a

    \\[ \\left\\{ \\begin{aligned} & p_\\text{max} \\leq P_\\text{greedy} & (1)\\\\ & P_\\text{optimal} \\leq P_\\text{greedy} + p_\\text{max} & (2) \\end{aligned} \\right. \\]

    \u5c06 \\((1)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\) \u5f97\uff1a

    \\[ \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 1 \\quad (3) \\]

    \u5c06 \\((2)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\)\uff0c\u5e76\u4ee3\u5165 \\((3)\\) \u5f97\uff1a

    \\[ \\frac{P_\\text{optimal}}{P_\\text{greedy}} \\leq 1 + \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 2 \\]

    PPT \u7684\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0d\u7b49\u5f0f\uff0c\u867d\u7136\u6210\u7acb\uff0c\u4f46\u662f\u597d\u50cf\u6ca1\u8d77\u5230\u4f5c\u7528\uff0c\u6211\u5c31\u6269\u5c55\u4e00\u4e0b\u5199\u5728\u8fd9\u91cc\u6c42\u4e2a\u773c\u719f\u4e86\uff1a

    \\[ p_\\text{max} \\leq P_\\text{greedy} \\leq P_\\text{optimal} \\leq P_\\text{frac} \\]

    \u5176\u4e2d \\(P_\\text{frac}\\) \u6307\u7684\u662f\u540c\u6837\u7684\u6570\u636e\u4e0b fractional version \u7684\u7b54\u6848\u3002

    \u8865\u5145\u7ed3\u8bba\uff1a\u80cc\u5305\u95ee\u9898\u5177\u6709 FPTAS\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u52a8\u6001\u89c4\u5212\u505a\u6cd5","title":"\u52a8\u6001\u89c4\u5212\u505a\u6cd5","text":"

    \uff08\u771f\u662f\u6df7\u4e71\uff09

    \\[ W_{i,p} = \\text{the minimum weight of a collection from } \\{1, \u2026, i\\} \\text{ with total profit being exactly } p \\\\ W_{i,p} = \\left\\{ \\begin{aligned} &\\infty && i = 0 \\\\ &W_{i-1, p} && p_i > p \\\\ &\\min\\{W_{i-1, p}, w_i + W_{i-1, p-p_i}\\} && otherwise \\end{aligned} \\right.\\\\ i = 1, ..., n; p = 1, ..., n\\cdot p_\\text{max} \\\\ O(n^2p_\\text{max}) \\]

    \u5982\u679c \\(p_\\text{max}\\) \u5f88\u5927\uff0c\u53ef\u4ee5\u8003\u8651\u5c06\u5b83\u4eec\u8fd1\u4f3c\u53d6\u6574\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u6d6e\u70b9\u6570\u5411\u4e0a\u53d6\u6574\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-the-k-center-problem","title":"[\u6848\u4f8b] The K-center Problem","text":"

    link

    Berkeley's: https://ugtcs.berkeley.edu/src/approx-sp19/scribe-notes-2.pdf

    \uff08\u4e8c\u7ef4\uff09K \u4e2d\u5fc3\u95ee\u9898\u6307\uff1a\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684\u4e00\u7cfb\u5217 site\uff08\u5373\u70b9\uff09\uff0c\u5728\u5e73\u9762\u4e2d\u627e\u51fa \\(k\\) \u4e2a\u4e0d\u540c\u7684 center\uff0c\u8bb0 \\(site_i\\) \u5230\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u4e3a \\(dis_i\\)\uff0c\u6c42 \\(\\max \\{dis_i\\}\\) \u7684\u6700\u5c0f\u503c\u3002

    \u6570\u5b66\u8bed\u8a00\u8868\u8fbe

    \u8bbe \\(C = \\{c_1, c_2, ..., c_k\\}\\) \u4e3a \\(k\\) \u4e2a center\uff0c\\(S = \\{s_1, s_2, ..., s_n\\}\\) \u4e3a \\(n\\) \u4e2a site\uff0c\u6211\u4eec\u5b9a\u4e49 site \u5230\u5173\u4e8e center \u7684\u96c6\u5408 \\(C\\) \u7684\u8ddd\u79bb\u4e3a\uff1a

    \\[ dis(s_i, C) = \\min_{c_i\\in C} \\{ dis(s_i, c_i) \\} \\]

    \u5373 \\(s_i\\) \u5230\u8ddd\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u3002

    \u5b9a\u4e49\u6700\u5927\u7684\u6700\u5c0f\u8986\u76d6\u534a\u5f84\u4e3a\uff1a

    \\[ r(C) = \\max_{s_i\\in S} \\{ dis(s_i, C) \\} \\\\ \\]

    \u73b0\u5728\u8981\u5bfb\u627e\u4e00\u4e2a \\(C\\) \u4f7f\u5f97 \\(r(C)\\) \u6700\u5c0f\uff08\\(|C| = k\\)\uff09\u3002

    \u5f88\u7ed5\uff0c\u975e\u5e38\u7ed5\u3002\u63a5\u4e0b\u6765\u5f00\u59cb\u8bf4\u4eba\u8bdd\u3002

    \u5e73\u9762\u7684\u95ee\u9898\u6211\u4eec\u5c31\u7528\u5e73\u9762\u7684\u601d\u8def\u6765\u770b\uff0c\u5c31\u662f\u4e00\u4e2a\u5e73\u9762\u4e0a\u6709\u4e00\u5806\u70b9\uff0c\u73b0\u5728\u6211\u8981\u5728\u4e0a\u9762\u627e \\(k\\) \u4e2a\u4e2d\u5fc3\u53bb\u753b\u5706\uff0c\u4f7f\u5f97\u8fd9 \\(k\\) \u4e2a\u5706\u80fd\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002\u73b0\u5728\u8981\u6c42\u6700\u5927\u7684\u90a3\u4e2a\u5706\u7684\u534a\u5f84\u6700\u5c0f\u80fd\u591a\u5c0f\u3002

    \u5173\u4e8e\u8ddd\u79bb

    PPT \u4e0a\u5bf9\u8ddd\u79bb\u505a\u4e86\u66f4\u8fdb\u4e00\u6b65\u7684\u8bf4\u660e\uff0c\u4f46\u662f\u5176\u5b9e\u5e76\u4e0d\u662f\u8fd9\u4e2a\u95ee\u9898\u7684\u91cd\u70b9\uff0c\u4f46\u662f\u4e3a\u4e86\u4e25\u8c28\u6027\uff0c\u6211\u8fd8\u662f\u5728\u8fd9\u91cc\u653e\u4e0a\u4e09\u6761\u6027\u8d28\uff1a

    3 property of 'distance'

    \\[ \\begin{aligned} & dis(x,x) = 0 && \\text{(identity)} \\\\ & dis(x,y) = dis(y,x) && \\text{(symmetry)} \\\\ & dis(x,y) \\leq dis(x,z) + dis(z,y) && \\text{(triangle inequality)} \\end{aligned} \\]

    \u788e\u788e\u5ff5

    \u8fd9\u4e2a\u4e1c\u897f\u548c\u805a\u7c7b\u6709\u70b9\u50cf\u3002\u4e3b\u8981\u96be\u70b9\u5c31\u5728\u4e8e\uff0c\u6211\u4eec\u4e0d\u77e5\u9053\u5e94\u8be5\u4ee5\u4f55\u79cd\u7b56\u7565\u53bb\u8986\u76d6\u8fd9\u4e9b\u70b9\uff0c\u8981\u662f\u628a\u4e24\u4e2a\u8ddd\u79bb\u5f88\u8fdc\u7684\u70b9\u5212\u5728\u540c\u4e00\u4e2a\u5706\u5185\uff0c\u90a3\u7b54\u6848\u80af\u5b9a\u5c0f\u4e0d\u4e86\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u6765\u5c1d\u8bd5\u89e3\u51b3\u7684\u8fd9\u4e2a\u95ee\u9898\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#naive-greedy","title":"Naive Greedy","text":"

    \u4e00\u4e2a\u505a\u6cd5\u662f\uff0c\u6211\u4eec\u6bcf\u6b21\u90fd\u9009\u62e9\u6700\u53ef\u80fd\u6210\u4e3a\u4e2d\u5fc3\u7684\u90a3\u4e2a\u70b9\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

    1. \u5982\u679c\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u6240\u6709\u70b9\u7684\u4e2d\u5fc3\uff1b
    2. \u5982\u679c\u4e0d\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u80fd\u4e00\u4e2a\u6700\u80fd\u8ba9 \\(r(C)\\) \u4e0b\u964d\u7684\uff1b

    \u8fd9\u4e2a\u505a\u6cd5\u7684 bug \u6bd4\u8f83\u5927\uff0c\u5047\u8bbe\u6211\u4eec\u7684\u70b9\u662f\u805a\u7c7b\u975e\u5e38\u660e\u663e\u7684\u4e24\u4e2a\u70b9\u4e91\uff0c\u90a3\u4e48\u7b2c\u4e00\u4e2a\u70b9\u5c31\u4f1a\u843d\u5728\u4e24\u4e2a\u70b9\u4e91\u4e4b\u95f4\uff0c\u8fd9\u5f88\u8822\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u6d6a\u8d39\u8fc7\u591a\u65f6\u95f4\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e0a\u3002

    \u6ce8\u610f\uff0c\u968f\u7740 center \u7684\u589e\u52a0\uff0c\u539f\u6765\u4ee5 \\(c_i\\) \u4e3a center \u7684 site \u5f88\u53ef\u80fd\u4ee5\u6700\u65b0\u63d2\u5165\u7684 \\(c_j\\) \u4e3a center\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#2r-greedy","title":"2r-Greedy","text":"

    \u65e2\u7136\u6b63\u5411\u505a\u5f88\u56f0\u96be\uff0c\u90a3\u6211\u4eec\u80fd\u4e0d\u80fd\u53cd\u7740\u505a\u5462\uff1f\u6709\u4e00\u79cd\u5957\u8def\u53eb\u4e8c\u5206\u7b54\u6848\uff0c\u5373\u5148\u731c\u7b54\u6848\uff0c\u518d\u9a8c\u8bc1\u662f\u5426\u662f\u7b54\u6848\u3002\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u8fd9\u4e2a\u601d\u60f3\uff0c\u5373\u5148\u731c\u4e00\u4e2a \\(r\\)\uff0c\u7136\u540e\u5c1d\u8bd5\u7528 \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u6240\u6709\u70b9\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u5047\u8bbe\u51c6\u786e\u89e3\u5bf9\u5e94\u7684\u4e00\u4e2a center \u96c6\u5408\u4e3a \\(C^*\\)\uff0c\u90a3\u4e48 \\(\\forall r(C_x) \\geq r(C^*)\\) \u7684 \\(C_x\\) \u90fd\u5fc5\u5b9a\u5b58\u5728\u8986\u76d6\u65b9\u6848\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6211\u4eec\u80fd\u591f\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u7ea6\u675f\u51c6\u786e\u89e3 \\(r(C^*) \\leq r(C_x)\\)\u3002

    \u5982\u4f55\u201c\u9a8c\u8bc1\u201d

    \u53ef\u662f\uff0c\u4ed4\u7ec6\u4e00\u60f3\u6211\u4eec\u53d1\u73b0\uff0c\u4e8c\u5206\u7b54\u6848\u7684\u8fc7\u7a0b\u4e2d\uff0c\u201c\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\u201d\u8fd9\u4ef6\u4e8b\u4e5f\u4e0d\u597d\u505a\uff0c\u867d\u7136\u6211\u4eec\u6709\u534a\u5f84\uff0c\u4f46\u662f\u6211\u4eec\u4e5f\u5f88\u96be\u627e\u5230\u4e00\u4e2a\u6700\u597d\u7684\u65b9\u6848\u6765\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002

    hint: \u8fd1\u4f3c\u7b97\u6cd5

    \u4e8e\u662f\u6211\u4eec\u7684\u8fd1\u4f3c\u7b97\u6cd5\u5c31\u53ef\u4ee5\u5927\u5c55\u62f3\u811a\u4e86\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u6240\u8c13\u7684\u8fd1\u4f3c\u7b97\u6cd5\uff0c\u6307\u7684\u662f\u4f7f\u7528\u4e8c\u5206\u7b54\u6848\u6c42\u89e3 \\(r(C)\\) \u8fd9\u4e2a\u7b97\u6cd5\uff0c\u800c\u975e\u5224\u65ad \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u80fd\u5426\u8986\u76d6\u6240\u6709\u70b9\u7684\u7b97\u6cd5\u3002\u8fd9\u4e00\u70b9\u975e\u5e38\u91cd\u8981\uff01

    \u800c\u5173\u4e8e\u7b97\u6cd5\u5177\u4f53\u5982\u4f55\u64cd\u4f5c\uff0c\u8bf7\u63a5\u7740\u770b\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u518d\u6b21\u68b3\u7406\u4e00\u4e0b\u8fd9\u4e2a\u7b97\u6cd5\uff0c\u5b83\u5305\u542b\u5185\u5916\u4e24\u5c42\uff0c\u9996\u5148\u5916\u90e8\u901a\u8fc7\u5728\u7b54\u6848\u7684\u5019\u9009\u533a\u95f4\uff08\u5373 \\((0, r_\\text{max}]\\)\uff0c\\(r_\\text{max}\\) \u4e3a\u6700\u8fdc\u7684\u4e24\u4e2a\u70b9\u7684\u8ddd\u79bb\uff09\u4e8c\u5206\u5019\u9009\u503c\uff0c\u63a5\u7740\u901a\u8fc7\u5224\u5b9a\u7b97\u6cd5\u6765\u5224\u5b9a\u63a5\u4e0b\u6765\u7684\u4e8c\u5206\u65b9\u5411\u3002

    \u7136\u800c\uff0c\u7531\u4e8e\u6211\u4eec\u5f88\u96be\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5b9e\u73b0\u51c6\u786e\u7684\u201c\u5224\u5b9a\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u91c7\u53d6\u8fd9\u6837\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u7b56\u7565\u6765\u8fdb\u884c\u5bbd\u6cdb\u7684\u5fc5\u8981\u6761\u4ef6\u7b5b\u9009\uff1a

    \u6d41\u7a0b\u63cf\u8ff0

    \u8bbe \\(C_x\\) \u8868\u793a\u9009\u4e2d\u7684 center\uff0c\\(S_x\\) \u8868\u793a\u5c1a\u672a\u88ab\u4efb\u4f55\u5706\u8986\u76d6\u7684 site\uff0c\\(r_x\\) \u8868\u793a\u5f53\u524d\u4e8c\u5206\u51fa\u6765\u7684\uff0c\u8981\u6211\u4eec\u5224\u65ad\u7684\u534a\u5f84\uff0c\\(S\\) \u4f9d\u7136\u8868\u793a\u6240\u6709 site \u7684\u96c6\u5408\uff1a

    1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff1b
    2. \u5f53 \\(S_x \\not = \\emptyset\\) \u65f6\uff08\u5373\u8fd8\u6709\u70b9\u6ca1\u88ab\u8986\u76d6\u65f6\uff09\uff0c\u91cd\u590d\u8fd9\u4e9b\u64cd\u4f5c\uff1a
      1. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff08\u5373\u5c06 \\(s_i\\) \u5f53\u4f5c\u4e00\u4e2a center\uff09\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff08\u5373 \\(s_i\\) \u5fc5\u5b9a\u88ab\u8986\u76d6\uff09\uff1b
      2. \u5220\u9664 \\(S_x\\) \u4e2d\u6240\u6709\u8ddd\u79bb \\(s_i\\) \u4e0d\u8db3 \\(r_x\\) \u7684\u70b9\uff08\u5373\u5220\u9664\u6ee1\u8db3 \\(dis(s_i, s_j) \\leq r_x\\) \u7684\u6240\u6709 \\(s_k \\in S_x\\)\uff09\uff1b
    3. \u5f53\u6240\u6709\u70b9\u90fd\u88ab\u8986\u76d6\u540e\uff1a
      1. \u5982\u679c \\(|C_x| \\leq k\\)\uff0c\u5219\u8fd4\u56de yes\uff1b
      2. \u5426\u5219\u8fd4\u56de no\uff1b

    \u5982\u679c\u8fd4\u56de yes\uff0c\u5219\u4e0b\u4e00\u4e2a \\(r_x\\) \u5e94\u5f53\u53d6\u66f4\u5c0f\u7684 \\(r_x\\)\uff1b\u5982\u679c\u8fd4\u56de no\uff0c\u4e0b\u4e00\u6b21\u5e94\u8be5\u53d6\u66f4\u5927\u7684 \\(r_x\\)\uff08\u7a0d\u5019\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\uff09\u3002

    \u73b0\u5728\u5bf9\u5176\u505a\u8fdb\u4e00\u6b65\u89e3\u91ca\u3002\u8fd9\u662f\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u505a\u6cd5\uff0c\u65e8\u5728\u6bcf\u6b21\u5bfb\u627e\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4f5c\u4e3a\u65b0\u7684 center\uff0c\u7528\u4e00\u4e2a\u534a\u5f84\u4e3a \\(2r_x\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u70b9\u3002\u901a\u8fc7\u5224\u65ad\u8fd9\u6837\u6240\u9700\u8981\u7684 center \u6570\u91cf\u662f\u5426\u8d85\u8fc7 \\(k\\) \u6765\u5224\u65ad\u662f\u5426\u80fd\u591f\u8986\u76d6\u3002\u63a5\u4e0b\u6765\u5f88\u7ed5\uff0c\u8bf7\u4e00\u6b65\u4e00\u6b65\u7684\u770b\uff1a

    1. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u6210\u529f\u65f6\uff0c\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u53ef\u4ee5\u8986\u76d6\u6240\u6709\u70b9\uff1b
    2. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u5931\u8d25\u65f6\uff0c\u4e0d\u80fd\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u4e0d\u80fd\u8986\u76d6\u6240\u6709\u70b9\uff0c\u56e0\u4e3a\u542f\u53d1\u5f0f\u65b9\u6848\u5e76\u4e0d\u662f\u6700\u4f18\u65b9\u6848\uff1b\u4f46\u662f\u80fd\u8bf4\u660e\u5fc5\u5b9a\u4e0d\u5b58\u5728 \\(r_x\\) \u7684\u8986\u76d6\uff0c\u5373 \\(r_x \\leq r(C^*)\\)\uff08\u8bc1\u660e\u89c1\u4e0b\u65b9 lemma\uff09\uff1b
    lemma

    \u5047\u8bbe\u534a\u5f84\u4e3a \\(r\\)\uff0c\u4ee5 \\(c\\) \u4e3a\u5706\u5fc3\u7684\u5706 \\(C\\) \u8986\u76d6\u4e86 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\u3002

    \u90a3\u4e48\uff0c\u5bf9\u4e8e\u56fa\u5b9a\u7684\u534a\u5f84 \\(r'\\)\uff0c\u8981\u60f3\u53d6\u4efb\u610f\u7684 \\(s_i \\in S\\) \u4e3a\u5706\u5fc3\uff0c\u5f62\u6210\u7684\u5706 \\(C_i\\)\uff0c\u603b\u662f\u80fd\u8986\u76d6 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\uff0c\u5219 \\(r' \\geq 2r\\)\u3002

    lemma \u7684\u8bc1\u660e\u5c31\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\u4e86\uff0c\u8bc1\u660e\u7684\u5173\u952e\u662f\u8003\u8651\u4e24\u70b9\u5206\u5e03\u5728\u76f4\u5f84\u4e24\u7aef\u7684\u60c5\u51b5\u3002

    \u8fd9\u4e2a\u5f15\u7406\u7684\u9644\u52a0\u7ed3\u8bba\u5c31\u662f\uff1a

    \\[ \\forall i \\quad C \\subset C_i \\]

    \u5373\u4ee5 \\(r\\) \u4e3a\u534a\u5f84\u7684\u6700\u4f18\u8986\u76d6\u5706\uff0c\u4e00\u5b9a\u80fd\u88ab\u4ee5\u4efb\u610f \\(s_i\\) \u4e3a\u5706\u5fc3\u3001\\(2r\\) \u4e3a\u534a\u5f84\u7684\u5706\u6240\u8986\u76d6\u3002

    \u5f53\u6211\u4eec\u53d1\u73b0\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 1. \u65f6\uff0c\u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u6211\u4eec\u786e\u5b9e\u5f97\u5230\u4e86\u4e00\u4e2a\u8ddd\u79bb \\(r(C^*)\\) \u66f4\u8fd1\u7684\u4e0a\u754c \\(2r_x\\)\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 1. \u786e\u5b9a\u7684\u4e0a\u754c\uff0c\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

    \u5f53\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 2. \u65f6\uff0c\u6211\u4eec\u4e0d\u77e5\u9053 \\(2r_x\\) \u548c \\(r(C^*)\\) \u7684\u5927\u5c0f\u5173\u7cfb\uff0c\u4f46\u662f\u77e5\u9053 \\(r_x\\) \u548c \\(r(C^*)\\) \u7684\u5173\u7cfb\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 2. \u786e\u5b9a\u7684\u4e0b\u754c\uff0c\u4e5f\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

    \u800c\u6700\u7ec8\uff0c\u6211\u4eec\u4f1a\u5f97\u5230\u4e00\u4e2a\u6700\u7ec8\u7684 \\(r_{x_0}\\)\uff0c\u6ee1\u8db3\uff1a\\(r_{x_0} \\leq r(C^*) \\leq 2r_{x_0}\\)\uff08\u5f0f\u4e2d\u54ea\u8fb9\u80fd\u53d6\u7b49\u53d6\u51b3\u4e8e\u6700\u540e\u843d\u5728 1. \u8fd8\u662f 2.\uff09\u3002

    \u800c\u6211\u4eec\u6700\u7ec8\u7ed9\u51fa\u7684\u7b54\u6848\u662f \\(2r_{x_0}\\)\uff08\u56e0\u4e3a \\(r_{x_0}\\) \u4e0d\u6ee1\u8db3\u6761\u4ef6\uff0c\u4e0d\u662f\u89e3\uff0c\u66f4\u4e0d\u662f\u8fd1\u4f3c\u89e3\uff09\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u6765\u8ba1\u7b97\u8fd1\u4f3c\u6bd4\uff1a

    \\[ \\begin{aligned} & \\begin{aligned} \\because \\;\\;\\; & r_{x_0} \\leq r(C^*) \\leq 2r_{x_0} \\\\ & \\frac{1}{2} \\leq \\frac{r(C^*)}{2r_{x_0}} \\leq 1 \\\\ & 1 \\leq \\frac{2r_{x_0}}{r(C^*)} \\leq 2 \\end{aligned} \\\\ & \\therefore \\; \\rho = \\max\\{ \\frac{ 2 r_{x_0} }{ r(C^*) }, \\frac{ r(C^*) }{ 2 r_{x_0} } \\} = 2 \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#smarter-greedy","title":"Smarter Greedy","text":"

    \u6211\u4eec\u5173\u6ce8\u5230\uff0c\u4e0a\u9762\u90a3\u4e2a\u505a\u6cd5\u603b\u662f\u968f\u673a\u7684\u9009\u53d6\u65b0\u7684 \\(c_i\\)\uff0c\u4f46\u662f\u5bf9\u4e8e center \u7684\u9009\u53d6\uff0c\u6211\u4eec\u5176\u5b9e\u53ef\u4ee5\u603b\u662f\u9009\u62e9\u8ddd\u79bb\u5df2\u6709\u7684 center \u6700\u8fdc\u7684\u70b9\uff0c\u6b64\u5916\uff0c\u5f53 \\(|C| > k\\) \u65f6\uff0c\u6211\u4eec\u4e5f\u6ca1\u5fc5\u8981\u7ee7\u7eed\u505a\u4e86\u3002

    \u6d41\u7a0b\u63cf\u8ff0

    1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff0c\\(S_x = S\\)\uff1b
    2. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
    3. \u5f53 \\(|C_x| \\leq k\\) \u4e14 \\(S_x \\not = \\emptyset\\) \u65f6\uff0c\u91cd\u590d\u4ee5\u4e0b\u6b65\u9aa4\uff1a
      1. \u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u8fd9\u4e2a site \u6ee1\u8db3 \\(\\forall s_j \\in S_x \\quad dis(s_i, C_x) \\geq dis(s_j, C_x)\\)\uff08\u5373\u8fd9\u4e2a\u70b9\u662f\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4e2d\u8ddd\u79bb \\(C_x\\) \u6700\u8fdc\u7684\u70b9\uff09\uff1b
      2. \u5c06 \\(s_i\\) \u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
    4. \u5982\u679c \\(|C_x| \\leq k\\) \u4e14 \\(S_x = \\emptyset\\)\uff0c\u5219\u8fd4\u56de yes\uff1b\u5426\u5219\u8fd4\u56de no\u3002

    \u7531\u4e8e\u8fd9\u4e2a\u505a\u6cd5\u5b9e\u9645\u4e0a\u53ea\u662f\u4f18\u5316\u4e86\u4e00\u4e0b\u542f\u53d1\u5f0f\u7684\u7b56\u7565\uff0c\u5e76\u6ca1\u6709\u6539\u53d8\u5185\u6838\uff0c\u6240\u4ee5\u5176\u8fd1\u4f3c\u6bd4\u4ecd\u7136\u662f \\(2\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u603b\u7ed3","title":"\u603b\u7ed3","text":"

    \u5173\u4e8e\u7b97\u6cd5\u7684\u8bbe\u8ba1\uff0c\u6211\u4eec\u8003\u8651\u8fd9\u4e09\u4e2a\u7ef4\u5ea6\uff1a

    1. \u6700\u4f18\u6027(optimality)\uff1a\u5373\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
    2. \u9ad8\u6548\u6027(efficiency)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u9ad8\u6548\uff1b
    3. \u666e\u904d\u6027(all instances)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u666e\u904d\u9002\u7528\u4e8e\u6240\u6709\u7684\u60c5\u51b5\uff1b

    \u5018\u82e5\u4e00\u4e2a\u89e3\u6cd5\uff1a

    1. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u9ad8\u6548\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u7279\u6b8a\u60c5\u51b5\u80fd\u9ad8\u6548\u6c42\u51c6\u786e\u89e3\uff1b
    2. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u6240\u6709\u60c5\u51b5\u90fd\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
    3. \u540c\u65f6\u6ee1\u8db3\u9ad8\u6548\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u53ef\u80fd\u662f\u4e2a\u8fd1\u4f3c\u7b97\u6cd5\uff1b

    \u5c31\u7b97 N=NP \u6210\u7acb\uff0c\u6211\u4eec\u4ecd\u7136\u65e0\u6cd5\u4fdd\u8bc1\u4e09\u4e2a\u613f\u671b\u4e00\u6b21\u6ee1\u8db3\u3002

    \u4e0d\u662f\u5f88\u660e\u767d\u6700\u540e\u4e00\u53e5\u8bdd\u5982\u4f55\u7406\u89e3\uff0c\u4f46\u662f\u8fd9\u4e00\u90e8\u5206\u5e94\u8be5\u5c31\u662f\u770b\u4e2a\u773c\u719f\uff0c\u4e0d\u662f\u5f88\u91cd\u8981\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/","title":"Lecture 12 | Local Search","text":"

    \u7ea6 365 \u4e2a\u5b57 17 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

    \u5373\u5148\u627e\u5230\u4e00\u4e2a\u53ef\u884c\u89e3\uff0c\u4ee5\u53ca\u91cf\u5316\u5176\u4f18\u7a0b\u5ea6\u7684\u76ee\u6807\u51fd\u6570\uff0c\u518d\u5728\u8fd9\u4e2a\u53ef\u884c\u89e3\u4e0a\u5bfb\u6c42\u4f18\u5316\uff0c\u76f4\u5230\u8fbe\u5230\u5c40\u90e8\u6700\u4f18\u89e3\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-vertex-cover-problem","title":"[\u6848\u4f8b] The Vertex Cover Problem","text":"

    \u9876\u70b9\u8986\u76d6\u95ee\u9898(vertex cover problem)\u6307\u7ed9\u5b9a\u4e00\u4e2a\u65e0\u5411\u56fe \\(G=(V,E)\\)\uff0c\u627e\u5230\u4e00\u4e2a\u6700\u5c0f\u7684\u9876\u70b9\u96c6 \\(S\\subseteq V\\)\uff0c\u4f7f\u5f97\u6bcf\u6761\u8fb9 \\((u,v)\\) \u90fd\u81f3\u5c11\u6709\u4e00\u4e2a\u7aef\u70b9\u5728 \\(S\\) \u4e2d\uff08\u5373 \\(u\\in S \\lor v\\in S\\)\uff09\u3002

    \u8fd9\u4e2a\u95ee\u9898\u7684\u53ef\u884c\u89e3\u4e3a \\(S = V\\)\uff0c\u5373\u5b8c\u5168\u8986\u76d6\uff0c\u5176\u76ee\u6807\u51fd\u6570\u4e3a \\(cost(S) = |S|\\)\u3002\u5373\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528 local search \u6765\u964d\u4f4e \\(|S|\\)\u3002

    \u7ed9\u51fa\u51e0\u79cd\u6848\u4f8b\u4ee5\u53ca\u53ef\u89c6\u5316\uff0c\u8bf4\u660e\u5c40\u90e8\u641c\u7d22\u5bb9\u6613\u5931\u6548\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","title":"\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","text":"

    \u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5(the Metropolis algorithm)\u7684\u8fc7\u7a0b\uff1a

    \u51d1\u5408\u4e00\u4e0b\uff0c\u4e4b\u540e\u6709\u7a7a\u518d\u6539\u3002

    SolutionType Metropolis() {   Define constants k and T;\nStart from a feasible solution S \\in FS ;\nMinCost = cost(S);\nwhile (1) {\nS\u2019 = Randomly chosen from N(S); CurrentCost = cost(S\u2019);\nif ( CurrentCost < MinCost ) {\nMinCost = CurrentCost;    S = S\u2019;\n}\nelse {\nWith a probability e^{-\\Delta cost / (kT)}, let S = S\u2019;\nelse  break;\n}\n}\nreturn S;\n}\n

    \u6ce8\uff1a\u5bf9\u4e8ecase 1\uff0c\u6709\u4e00\u5b9a\u6982\u7387\u53ef\u4ee5\u8df3\u51falocal optimum\u5f97\u5230\u6b63\u786e\u89e3\u3002\u4f46\u662f\u5bf9case 0\uff0c\u6709\u53ef\u80fd\u5728\u52a01\u548c\u51cf1\u4e4b\u95f4\u65e0\u9650\u9707\u8361\u2026\u2026 \u6ce8\uff1a\u5f53\uff08\u6e29\u5ea6\uff09T\u5f88\u9ad8\u65f6\uff0c\u4e0a\u5761\u7684\u6982\u7387\u51e0\u4e4e\u4e3a1\uff0c\u5bb9\u6613\u5f15\u8d77\u5e95\u90e8\u9707\u8361\uff1b\u5f53T\u63a5\u8fd10\u65f6\uff0c\u4e0a\u5761\u6982\u7387\u51e0\u4e4e\u4e3a0\uff0c\u63a5\u8fd1\u539f\u59cb\u7684\u68af\u5ea6\u4e0b\u964d\u6cd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6a21\u62df\u9000\u706b","title":"\u6a21\u62df\u9000\u706b","text":"

    \u6a21\u62df\u9000\u706b(simulated annealing)

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-hopfield-neural-networks","title":"[\u6848\u4f8b] Hopfield Neural Networks","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Hopfield_network

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-maximum-cut-problem","title":"[\u6848\u4f8b] The Maximum Cut Problem","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Maximum_cut

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/","title":"Lecture 13 | Randomized Algorithms","text":"

    \u7ea6 25 \u4e2a\u5b57

    \u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

    \u4e00\u4e9b\u6982\u5ff5\u8bf4\u660e

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#the-hiring-problem","title":"The Hiring Problem","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#modified-quick-sort","title":"Modified Quick Sort","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec14/","title":"Lecture 14 | Parallel","text":"

    \u7ea6 3 \u4e2a\u5b57

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/","title":"Lecture 15 | External Sorting","text":"

    \u7ea6 6424 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 32 \u5206\u949f

    link

    Wikipedia: https://en.wikipedia.org/wiki/External_sorting

    \u5916\u6392\u5e8f\u4e0e\u6570\u636e\u5e93\u7cfb\u7edf\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\u6709\u4ea4\u53c9\u5173\u7cfb\uff0c\u5f53\u9700\u8981\u6392\u5e8f\u7684\u6570\u636e\u8fc7\u5927\uff0c\u800c\u65e0\u6cd5\u88ab\u5b8c\u5168\u653e\u5728\u5185\u5b58\u65f6\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u65e0\u6cd5\u88ab\u5e94\u7528\u3002\u6b64\u65f6\u9700\u8981\u4f7f\u7528\u5916\u6392\u5e8f\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u5728\u66f4\u5927\u7684\u5c3a\u5ea6\u4e0a\u8fdb\u884c\u7c7b\u4f3c\u5f52\u5e76\u7684\u64cd\u4f5c\u3002

    \u800c\u6b63\u56e0\u4e3a\u6b64\uff0c\u5916\u90e8\u6392\u5e8f\u7684\u8fc7\u7a0b\u4e0e\u786c\u4ef6\u8bbe\u8ba1\u6709\u4e00\u5b9a\u5173\u7cfb\u3002

    \u4e0e\u786c\u4ef6\u76f8\u5173\u7684\u4e00\u4e9b\u8bf4\u660e

    \u5177\u4f53\u6765\u8bf4\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u6392\u5e8f\u7684\u5bf9\u8c61\u90fd\u662f\u653e\u5728\u5185\u5b58\u91cc\u7684\u4e00\u4e9b\u6570\u636e\uff0c\u4f8b\u5982\u4e00\u4e2a int \u6570\u7ec4\u3002\u7136\u800c\u5916\u90e8\u6392\u5e8f\u6392\u5e8f\u7684\u5bf9\u8c61\uff0c\u6216\u8005\u8bf4\u8981\u6392\u5e8f\u7684\u90a3\u4e2a\u201c\u6570\u7ec4\u201d\uff0c\u6ca1\u6cd5\u88ab\u5b8c\u6574\u5730\u5b58\u5728\u5185\u5b58\u91cc\uff0c\u5b83\u4eec\u90fd\u88ab\u5b58\u50a8\u5728\u786c\u76d8\u4e4b\u7c7b\u7684\u975e\u6613\u5931\u4ecb\u8d28\u4e2d\uff0c\u800c\u4ece\u8fd9\u79cd\u4ecb\u8d28\u91cc\u8bfb\u53d6\u6570\u636e\u5f80\u5f80\u5177\u6709\u8f83\u5927\u7684\u5f00\u9500\uff0c\u6240\u4ee5\u6211\u4eec\u603b\u662f\u201c\u4e00\u5757\u4e00\u5757\u201d\u4ece\u91cc\u9762\u90a3\u6570\u636e\u3002

    \u6253\u4e2a\u6bd4\u65b9\uff0c\u4f60\u73b0\u5728\u9700\u8981\u5bf9\u4e00\u6574\u4e2a\u56fe\u4e66\u9986\uff08\u786c\u76d8\uff09\u7684\u4e66\u505a\u6392\u5e8f\uff0c\u4f46\u662f\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u6700\u591a\u653e\u4e0b\u4e09\u5341\u672c\u4e66\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4f60\u4e00\u6b21\u6700\u591a\u5904\u7406\u4e09\u5341\u672c\u4e66\u3002\u800c\u4e3a\u4e86\u4ece\u56fe\u4e66\u9986\u4e2d\u83b7\u53d6\u9700\u8981\u6392\u7684\u4e66\uff0c\u4f60\u5f97\u5148\u627e\u5230\u8fd9\u4e9b\u4e66\u5728\u54ea\uff08seek\uff09\uff0c\u7136\u540e\u518d\u628a\u8fde\u7eed\u7684\u4e09\u5341\u672c\u4e66\u62ff\u51fa\u6765\uff08block transfer\uff09\uff0c\u653e\u5230\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u518d\u6392\u5e8f\uff0c\u800c\u4e3a\u4e86\u7ed9\u63a5\u4e0b\u6765\u4e09\u5341\u672c\u4e66\u817e\u4f4d\u7f6e\uff0c\u4f60\u8fd8\u5f97\u628a\u6392\u597d\u7684\u4e09\u5341\u672c\u4e66\u518d\u653e\u56de\u53bb\uff08\u5373\u8bb0\u5f55\u4e0b\u6392\u5e8f\u7ed3\u679c\uff0c\u540c\u6837\u4e5f\u662f\u4e00\u6b21 block transfer\uff09\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u5916\u90e8\u6392\u5e8f\u4e3b\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u6309\u7167\u600e\u6837\u7684\u7b56\u7565\u6765\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u6392\u5e8f\u3002

    \u5bfc\u8bfb

    \u7531\u4e8e ADS \u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u548c\u540c\u65f6\u671f\u6570\u636e\u5e93\u7cfb\u7edf\u8fd9\u95e8\u8bfe\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u6709\u540c\u6709\u5f02\uff0c\u6240\u4ee5\u6211\u6253\u7b97\u5148\u5728\u5927\u6982\u8bb2\u5916\u6392\u5e8f\u7684\u6838\u5fc3\u601d\u8def\uff0c\u518d\u5c55\u5f00 ADS \u8bfe\u7a0b\u4e2d\u7684\u5177\u4f53\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    \u5916\u6392\u5e8f\u7684\u57fa\u672c\u601d\u8def\u5c31\u662f\u5c06\u6570\u636e\u5206\u4e3a\u82e5\u5e72\u4e2a\u5c0f\u5757\uff0c\u7136\u540e\u5bf9\u6bcf\u4e2a\u5c0f\u5757\u8fdb\u884c\u6392\u5e8f\uff0c\u6700\u540e\u518d\u5c06\u8fd9\u4e9b\u5c0f\u5757\u5408\u5e76\u8d77\u6765\u3002\u800c\u6211\u4eec\u5e38\u8bf4\u7684\u5f52\u5e76\u6392\u5e8f\uff0c\u6307\u7684\u662f\u9012\u5f52\u5730\u5c06\u4e24\u5757\u5408\u6210\u4e00\u5757\uff0c\u800c\u6240\u8c13\u7684 \\(k\\) \u8def\uff08\\(k\\)-way\uff09\u5f52\u5e76\uff0c\u5c31\u662f\u5c06 \\(k\\) \u5757\u5408\u6210\u4e00\u5757\u3002

    \u90a3\u4e48\u5982\u4f55\u5f52\u5e76\u5462\uff1f\u6211\u5c06\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u6765\u7b80\u5355\u9610\u8ff0\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u903b\u8f91\u7ef4\u5ea6","title":"\u903b\u8f91\u7ef4\u5ea6","text":"

    \u5916\u90e8\u6392\u5e8f\u6240\u4f7f\u7528\u7684\u5f52\u5e76\u6392\u5e8f\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u548c\u666e\u901a\u7684\u5f52\u5e76\u6392\u5e8f\u4e00\u81f4\uff0c\u603b\u662f\u5c06 \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u5408\u5e76\u4e3a 1 \u4e2a\u6709\u5e8f\u5e8f\u5217\u3002

    \u800c\u8fd9\u91cc\u7684\u201c\u6709\u5e8f\u5e8f\u5217\u201d\uff0c\u5728\u5916\u6392\u5e8f\u4e2d\u88ab\u79f0\u4e3a\u201crun\u201d\uff0c\u5373\u6bcf\u6b21\u5f52\u5e76\u6211\u4eec\u53e6 \\(k\\) \u4e2a run \u53d8\u6210\u4e00\u4e2a run\u3002\u6b63\u7740\u8bf4\u5c31\u662f\uff1a

    run

    \u4e00\u4e2a run \u6307\u7684\u662f\u4e00\u6bb5\u8fc7\u7a0b\u4e2d\u7684\u6570\u636e\uff0c\u5728\u672c\u6587\u4e2d\u7279\u6307\u5f85\u5f52\u5e76\u7684\u6709\u5e8f\u7684\u5e8f\u5217\uff0c\u5728 \\(k\\)-way merge \u4e2d\uff0c\u6211\u4eec\u603b\u662f\u5c06 \\(k\\) \u4e2a run \u5408\u5e76\u4e3a 1 \u4e2a run\u3002

    \u8bf4\u660e

    \u8fd9\u91cc\u7684 run \u7684\u5b9a\u4e49\u662f\u6211\u81ea\u5df1\u8111\u8865\u51fa\u6765\u7684\uff0c\u5e76\u4e0d\u786e\u5b9a\u662f\u5426\u4e25\u683c\uff0c\u4f46\u662f\u53ef\u4ee5\u4fdd\u8bc1\u7684\u662f\uff1a \u4e00\u4e2a run \u5728\u53c2\u4e0e merge \u4e4b\u524d\u80af\u5b9a\u5df2\u7ecf\u6709\u5e8f\u4e86\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a \"have already run\"\uff0c\u800c\u4e3a\u4e86\u4e0d\u6405\u7cca\u8bfb\u8005\u7684\u8111\u5b50\uff0c\u6211\u8fd9\u91cc\u5c31\u4ee5\u8fd9\u4e2a\u5b9a\u4e49\u4e3a\u51c6\u3002

    \u4ece\u6267\u884c\u7684\u987a\u5e8f\u6765\u8bf4\uff0c\u5185\u6392\u5e8f\u4e2d\u7684\u5f52\u5e76\u6392\u5e8f\u662f\u4e00\u4e2a\u81ea\u4e0a\u800c\u4e0b\u4e0d\u65ad \\(\\frac{1}{k}\\) \u5730\u5212\u5206\uff0c\u518d\u81ea\u4e0b\u800c\u4e0a\u4e0d\u65ad\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002\u76f8\u53cd\uff0c\u5916\u6392\u5e8f\u7531\u4e8e\u5176\u7279\u6027\u9650\u5236\uff0c\u5176\u201c\u5f52\u5e76\u6bb5\u201d\u5e76\u4e0d\u662f\u81ea\u4e0a\u800c\u4e0b \\(\\frac{1}{k}\\) \u5212\u5206\u51fa\u6765\u7684\uff0c\u800c\u662f\u6839\u636e\u786c\u4ef6\u5904\u7406\u80fd\u529b\uff0c\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u7136\u540e\u76f4\u63a5\u81ea\u4e0b\u800c\u4e0a\u5f52\u5e76\u3002

    \u800c\u8fd9\u6837\u4e00\u4e2a\u5c06 \\(k \\cdot c\\) \u4e2a run merge \u6210 \\(c\\) \u4e2a run \u7684\u8fc7\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e00\u4e2a pass\u3002\uff08\u5728\u5f52\u5e76\u6811\u4e0a\u4f53\u73b0\u4e3a\u4e00\u5c42\u3002\uff09

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u7269\u7406\u7ef4\u5ea6","title":"\u7269\u7406\u7ef4\u5ea6","text":"

    \u5173\u4e8e\u7269\u7406\u7ef4\u5ea6\uff0c\u6d89\u53ca\u5230\u4e00\u4e9b\u786c\u4ef6\u77e5\u8bc6\uff0c\u5728 ADS \u4e2d\u4e3a\u4e86\u65b9\u4fbf\u8bf4\u660e\u4f1a\u5c06\u5176\u7b80\u5316\uff0c\u6709\u5173 block \u7684\u6982\u5ff5\u5c06\u88ab\u62bd\u8c61\u5316\u4e3a\u201c\u6570\u636e\u5355\u4f4d\u201d\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u5185\u5b58\u7684\u5927\u5c0f\u662f\u6709\u9650\u7684\uff0c\u5212\u5206\u7ed9\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\u4e5f\u5e94\u5f53\u662f\u6709\u9650\u7684\uff0c\u6211\u4eec\u7528 \\(M\\) \u6765\u8bb0\u5b83\uff0c\u5373\u5185\u5b58\u4e2d\u4e00\u6b21\u53ea\u80fd\u5904\u7406 \\(M\\) \u4e2a\u5355\u4f4d\u7684\u6570\u636e\u3002

    \u66f4\u7ec6\u8282\u7684\uff0c\u6211\u4eec\u5e94\u5f53\u66f4\u5177\u7269\u7406\u5927\u5c0f\u6765\u8ba1\u7b97 \\(M\\)\uff0c\u4f8b\u5982\u4e00\u6761\u6570\u636e\u7684\u5927\u5c0f\u662f \\(l \\text{Bytes}\\)\uff0c\u800c\u5185\u5b58\u7684\u5927\u5c0f\u662f \\(m \\text{Bytes}\\)\uff0c\u90a3\u4e48\u4e00\u4e2a\u5185\u5b58\u80fd\u591f\u5bb9\u7eb3\u7684\u6570\u636e\u6570\u91cf\u5e94\u5f53\u4e3a \\(\\lfloor \\frac{m}{l} \\rfloor\\)\u3002

    \u4f46\u662f\u65e2\u7136\u8981\u5f52\u5e76\uff0c\u6211\u4eec\u5c31\u9700\u8981\u5c06 \\(k\\) \u8def\u7684\u6570\u636e\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u80af\u5b9a\u5e0c\u671b\u8fd9 \\(k\\) \u8def\u90fd\u80fd\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u662f\u4e0d\u5207\u5b9e\u9645\u7684\uff0c\u6211\u4eec\u6700\u591a\u516c\u5e73\u5730\u8bfb\u5165\u6bcf\u4e00\u8def\u7684\u524d \\(\\lfloor \\frac{M}{k} \\rfloor\\) \u4e2a\u6570\u636e\u2014\u2014\u4f46\u8fd9\u5df2\u7ecf\u8db3\u591f\u2014\u2014\u5bf9\u4e8e \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u7684\u5408\u5e76\u64cd\u4f5c\uff0c\u5176\u5408\u5e76\u8fc7\u7a0b\u4e2d\u4e5f\u6070\u597d\u53ea\u4e0e\u6700\u9760\u524d\u7684\u3001\u672a\u6392\u5e8f\u7684\u4e00\u90e8\u5206\u6570\u636e\u6709\u5173\u3002

    \u8bf4\u660e

    \u4e4b\u540e\u6240\u63d0\u5230\u7684\uff0c\u6709\u5173\u4e8e\u6392\u5e8f\u6570\u636e\u7684\u201c\u5185\u5b58\u201d\uff0c\u6307\u7684\u90fd\u662f\u5212\u5206\u7ed9\u7b97\u6cd5\uff0c\u7528\u6765\u5b58\u653e\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\uff01

    example

    \u4e3e\u4f8b\u6765\u8bf4\uff0c\u5047\u8bbe\u73b0\u5728\u6709\u4e24\u4e2a run\uff0c\u5206\u522b\u4e3a\uff1a

    1. 1 3 5 7 9
    2. 0 2 4 6 8

    \u4f46\u662f\u5185\u5b58\u53ea\u80fd\u653e 4 \u4e2a\u5355\u4f4d\u6570\u636e\uff0c\u6240\u4ee5\u5bf9\u4e8e\u6bcf\u4e2a run \u603b\u662f\u53ea\u6709\u524d 2 \u4e2a\u6570\u636e\u662f\u53ef\u89c1\u7684\u3002\u4f46\u662f\u8fd9\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u53ef\u4ee5\u786e\u5b9a\u8fd9\u4e24\u4e2a run \u5408\u5e76\u7684\u7ed3\u679c\u4e2d\uff0c\u524d\u4e00\u90e8\u5206\u662f 0 1 2\uff0c\u800c\u81f3\u4e8e 2 \u540e\u9762\u6392\u4ec0\u4e48\uff0c\u5219\u8981\u4ece run2 \u4e2d\u53d6\u51fa\u4e4b\u540e\u7684\u6570\u636e\uff0c\u518d\u4e0e run1 \u4f59\u4e0b\u7684 _ 3 \u5408\u5e76\u3002

    \u6613\u9519\u70b9

    \u6ce8\u610f\uff0c\u5f53\u5176\u4e2d\u4e00\u4e2a\u6bb5\u7684 buffer \u7a7a\u4e86\u4ee5\u540e\uff0c\u6211\u4eec\u4e0d\u80fd\u76f4\u63a5\u628a\u5176\u4ed6\u6bb5\u7684 buffer \u76f4\u63a5\u6392\u5e8f\u8fdb\u53bb\uff0c\u800c\u5fc5\u987b\u5148\u586b\u5145\u8fd9\u4e2a\u7a7a buffer \u7684\u5185\u5bb9\uff0c\u518d\u7ee7\u7eed\u6392\u5e8f\u3002

    \u60f3\u8c61\u8fd9\u6837\u4e00\u4e2a\u60c5\u51b5\uff0c\u7a7a buffer \u5c06\u8981\u8f7d\u5165\u7684\u4e0b\u4e00\u6bb5\u6570\u636e\u662f 3 4 5\uff0c\u800c\u53e6\u5916\u4e00\u4e2a buffer \u5269\u4e0b\u7684\u6570\u636e\u662f 7\uff0c\u90a3\u4e48\u663e\u7136\uff0c3 4 5 \u5e94\u8be5\u5148\u4e8e 7 \u88ab\u6392\u5e8f\u3002

    \u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e5f\u6b63\u662f\u5916\u6392\u5e8f\u80fd\u591f\u8fdb\u884c\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\u3002

    \u5176\u4e2d\u6bd4\u8f83\u7279\u522b\u7684\u6b65\u9aa4\u5c31\u662f\uff0c\u6700\u5f00\u59cb\u7684\u6392\u5e8f\uff0c\u5373\u7b2c\u4e00\u4e2a pass\u3002\u5148\u524d\u6211\u4eec\u5728#\u903b\u8f91\u7ef4\u5ea6\u91cc\u63d0\u5230\u4e86\uff0c\u5916\u6392\u5e8f\u7684\u7b2c\u4e00\u4e2a pass \u4f1a\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u7684\u5927\u5c0f\u5c31\u662f \\(M\\)\u3002\u7528\u8bed\u8a00\u63cf\u8ff0\uff0c\u5c31\u662f\u6700\u65e9\u7684 run \u7684\u5927\u5c0f\u5c31\u662f\u5e73\u5747\u6bcf\u4e00\u8def\u80fd\u591f\u5728\u5185\u5b58\u4e2d\u5904\u7406\u7684\u6700\u5927\u6570\u636e\u5355\u4f4d\u91cf\u3002

    \u7136\u800c\u95ee\u9898\u51fa\u73b0\u4e86\uff0c\u6839\u636e\u6211\u4e4b\u524d\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0crun \u5e94\u5f53\u662f\u6709\u5e8f\u7684\uff0c\u4f46\u662f\u4ece\u539f\u59cb\u6570\u636e\u91cc\u8bfb\u51fa\u6765\u7684\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u662f\u65e0\u5e8f\u7684\u3002\u4f46\u662f\u5bf9\u4e8e\u6700\u521d\u7684 run\uff0c\u5b83\u5fc5\u7136\u80fd\u591f\u6574\u6bb5\u653e\u5230\u5185\u5b58\u91cc\uff08\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u4e5f\u53ea\u6709\u6700\u521d\u7684 run \u80fd\u591f\u5b8c\u6574\u5730\u653e\u5230\u5185\u5b58\u91cc\uff09\uff0c\u56e0\u6b64\u76f4\u63a5\u5bf9\u5176\u8fdb\u884c\u5185\u6392\u5e8f\u5373\u53ef\u3002

    \u903b\u8f91\u8054\u7cfb

    \u4e2d\u7ee7

    \u4ee5\u4e0a\u5185\u5bb9\u662f\u5bf9\u5916\u6392\u5e8f\u6838\u5fc3\u601d\u60f3\u7684\u4e00\u4e2a\u7b80\u5355\u4ecb\u7ecd\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u4ee5 ADS \u6240\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u8303\u5f0f\uff0c\u6765\u4ecb\u7ecd\u4e00\u4e0b\u5177\u4f53\u7684\u8fc7\u7a0b\u548c\u4e00\u4e9b\u6539\u8fdb\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5177\u4f53\u5206\u6790","title":"\u5177\u4f53\u5206\u6790","text":"

    ADS \u4e2d\u76f8\u6bd4\u4e0a\u9762\u4ecb\u7ecd\u7684\u90e8\u5206\uff0c\u53c8\u5f15\u5165\u4e86\u4e00\u4e2a\u53eb tape \u7684\u6982\u5ff5\uff0ctape \u7684\u4e2d\u6587\u662f\u78c1\u5e26\uff0c\u800c\u5728\u8fd9\u4e2a\u6846\u67b6\u4e2d\uff0c\u6211\u66f4\u503e\u5411\u4e8e\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2a\u62bd\u8c61\u7684\u6982\u5ff5\u3002

    \u76f8\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u9645\u8fc7\u7a0b\u4e0e\u4e0a\u9762\u63cf\u8ff0\u7684\u65b9\u6cd5\u53ef\u80fd\u6709\u4e00\u4e9b\u611f\u53d7\u4e0a\u7684\u5dee\u522b\uff0c\u5982\u679c\u53ea\u662f\u4e86\u89e3\u601d\u60f3\u7684\u8bdd\u4e0a\u534a\u90e8\u5206\u5df2\u7ecf\u8db3\u591f\uff08\u5f53\u7136\u540e\u9762\u8fd8\u6709\u4e00\u4e9b\u57fa\u4e8e\u5982\u4e0b\u6a21\u578b\u7684\u4f18\u5316\u8ba8\u8bba\uff09\uff0c\u4f46\u662f\u6bd5\u7adf\u8fd8\u662f\u9762\u5411\u8003\u8bd5\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4ee5 ADS \u8bfe\u4ef6\u7684\u65b9\u6cd5\u518d\u4ecb\u7ecd\u4e00\u6b21\u3002

    \u8bf4\u660e

    \u6211\u4e4b\u540e\u4f1a\u4ee5 run \u4e3a\u5355\u4f4d\uff0c\u6765\u63cf\u8ff0\u5408\u5e76\u8fc7\u7a0b\u3002\u4f46\u662f\u5b9e\u9645\u53d1\u751f\u5728\u8ba1\u7b97\u673a\u91cc\u7684\u6b65\u9aa4\u66f4\u52a0\u590d\u6742\uff1a

    \u9700\u8981\u5148\u5c06\u6bcf\u4e00\u6761 tape \u7684\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\u5185\u5b58\u7684 buffer \u4e2d\uff0c\u7136\u540e\u5229\u7528\u8fd9\u4e9b buffer \u6765\u8fdb\u884c\u6392\u5e8f\uff1b\u5f53\u67d0\u4e2a buffer \u7a7a\u4e86\u4ee5\u540e\u8981\u7acb\u523b\u5c06\u5bf9\u5e94 tape \u7684\u4e0b\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\uff0c\u76f4\u5230\u6ca1\u6709\u6570\u636e\u53ef\u4ee5\u586b\u5145\u4e3a\u6b62\u3002

    \u4e5f\u6b63\u662f#\u7269\u7406\u7ef4\u5ea6\u6240\u8bf4\u7684\u90a3\u4e9b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","title":"\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","text":"

    \u6211\u4eec\u4ee5 2-way merge \u4e3a\u4f8b\uff0c\u7ed3\u5408 ADS \u8bfe\u4ef6\u4e2d\u7684\u914d\u56fe\u6765\u8bf4\u660e\u3002

    \u51c6\u5907

    \u56fe\u4e2d \\(T_1\\) \u662f\u4e00\u6761 tape \u7684\u7f16\u53f7\uff0c\u6211\u4eec\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u5e8f\u5217\u7684\u7269\u7406\u5730\u5740\uff0c\u6216\u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a\u6570\u7ec4\uff0c\u53ea\u4e0d\u8fc7\u5b83\u7684\u5b9e\u9645\u6570\u636e\u662f\u5728\u786c\u76d8\u4e2d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u91cc\u7684 tape \u8868\u793a\u7684\u90fd\u662f\u786c\u76d8\u4e2d\u7684\u6570\u636e\u3002

    \u8fd9\u6761 tape \u4e2d\u6709 13 \u4e2a\u5143\u7d20\uff0c\u6211\u4eec\u8bb0\u5176\u4e3a \\(N = 13\\)\u3002\u800c\u8fd9\u6761\u539f\u59cb\u7684 tape \u88ab\u5212\u5206\u4e3a\u4e86 5 \u6bb5\uff0c\u6bcf\u4e00\u6bb5\u90fd\u6709\u4e0d\u8d85\u8fc7 3 \u4e2a\u5143\u7d20\uff0c\u6b64\u65f6 \\(M = 3\\)\u3002\u5373\u6709 \\(\\lceil \\frac{N}{M} \\rceil = 5\\)\u3002

    Pass 1

    \u73b0\u5728\u6211\u4eec\u8981\u5f00\u59cb merge \u4e86\u3002\u5bf9\u4e8e\u8fd9\u6bb5\u6570\u636e\u6765\u8bf4\uff0c\u8fd9\u662f\u610f\u4e49\u91cd\u5927\u7684\u201c\u4eba\u751f\u7b2c\u4e00\u6b21\u201d\uff0c\u76f8\u6bd4\u4e8e\u5176\u4ed6\u5f52\u5e76\u90fd\u662f\u4ece 2 \u4e2a tape \u5f00\u59cb\u7684 pass\uff0c\u8fd9\u4e00\u6b21\u663e\u5f97\u6709\u4e9b\u7279\u6b8a\u3002

    \u5728\u7b2c\u4e00\u8f6e\u4e2d\uff0c\u9762\u5bf9\u5168\u90e8\u90fd\u662f\u65e0\u5e8f\u7684\u6570\u636e\uff0c\u6211\u4eec\u5c06\u8fd9 \\(\\lceil \\frac{N}{M} \\rceil = 5\\) \u4e2a\u6bb5\u5747\u5206\u5230\u4e24\u6761 tape \u4e0a\uff082-way\uff09\uff0c\u8fd9\u91cc\u7ecf\u5386\u4e24\u4e2a\u6b65\u9aa4\uff1a

    1. \u4f9d\u6b21\u8bfb\u53d6 \\(T_1\\) \u4e2d\u6bcf\u4e00\u6bb5\u6570\u636e\uff08\u521a\u597d\u5360\u6ee1\u5185\u5b58\uff09\uff0c\u5e76\u5bf9\u5b83\u4eec\u8fdb\u884c\u5185\u6392\u5e8f\uff1b
    2. \u5c06\u6392\u5e8f\u5b8c\u7684\u6bb5\uff0c\u8ffd\u52a0\u5199\u5230 \\(T_2\\) \u6216 \\(T_3\\) \u4e2d\uff08\u5177\u4f53\u6bcf\u4e00\u4e2a tape \u5199\u51e0\u6761\uff0c\u4f1a\u6709\u4e13\u95e8\u7b56\u7565\u505a\u8c03\u6574\uff0c\u76ee\u524d\u5148\u5e73\u5206\u7740\u653e\uff09\uff1b

    \u4e8e\u662f\uff0c\\(T_1\\) \u4e2d\u7684\u6570\u636e\u4fbf\u88ab\u8f6c\u79fb\u5230\u4e86 \\(T_2\\) \u548c \\(T_3\\)\u3002\u4e3a\u4e86\u91cd\u590d\u5229\u7528 tape\uff0c\u6b64\u65f6\u7684 \\(T_1\\) \u88ab\u770b\u4f5c\u53ef\u4ee5\u7528\u7684\u7a7a\u78c1\u76d8\u4e86\u3002

    \u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e00\u4e2a pass\u3002

    Pass 2

    \u4e4b\u540e\u7684 pass \u5219\u57fa\u672c\u9075\u5faa\u540c\u6837\u7684\u89c4\u5219\uff0c\u4e0d\u65ad\u53d6\u6bcf\u4e00\u8def\u7684\u7b2c\u4e00\u4e2a run \u5e76 merge\uff0c\u5e76\u4e14\u5c06\u7ed3\u679c\u5199\u5230\u4e24\u4e2a\uff08k \u4e2a\uff09\u95f2\u7f6e\u7684 tape \u4e0a\uff08\u548c\u524d\u9762\u8bf4\u8fc7\u7684\u4e00\u6837\uff0c\u8fd9\u91cc\u6682\u4e14\u5c06\u5206\u914d\u7b56\u7565\u5b9a\u4e3a\u5e73\u5206\u5230\u6bcf\u4e00\u4e2a tape \u4e0a\uff09\u3002

    \u4f8b\u5982\uff0c\u6211\u4eec\u8981\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u6267\u884c\u5f52\u5e76\u64cd\u4f5c\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684\uff0c\u6709 6 \u4e2a\u6570\u636e\u7684 run\uff0c\u5e76\u5199\u5230\u95f2\u7f6e\u7684 \\(T_1\\) \u4e0a\uff1b\u63a5\u4e0b\u6765\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u6b64\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\\(T_1\\)\u3001\\(T_2\\)\u3001\\(T_3\\) \u90fd\u4e0d\u662f\u95f2\u7f6e\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u65b0\u7684 tape\uff0c\u5199\u5230 \\(T_4\\) \u4e0a\u3002

    \u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e8c\u4e2a pass\u3002

    Pass 3

    pass 3 \u548c pass 2 \u7684\u8fc7\u7a0b\u57fa\u672c\u4e00\u81f4\u3002\u73b0\u5728\u7684 tape \u72b6\u6001\u662f \\(\\{T_2, T_3\\}\\) \u95f2\u7f6e\uff0c\u6211\u4eec\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 12 \u4e2a\u5143\u7d20\uff1b\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 1 \u4e2a\u5143\u7d20\u3002\u8fd9\u4e24\u6bb5\u88ab\u5206\u914d\u5230\u4e24\u6761\u7a7a\u95f2 tape \u4e0a\uff0c\u5373 \\(T_2\\) \u548c \\(T_3\\)\u3002

    \u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e09\u4e2a pass\u3002

    Pass 4

    \u540c\u6837\uff0cpass 4 \u548c\u524d\u9762\u4e24\u4e2a pass \u7684\u8fc7\u7a0b\u4e5f\u662f\u4e00\u81f4\u6027\u7684\uff0c\u4e0d\u505a\u8fc7\u591a\u89e3\u91ca\uff0c\u5bf9\u4e8e\u89c4\u6a21\u66f4\u5927\u7684\u6570\u636e\u4e5f\u662f\u4e00\u6837\uff0c\u9664\u4e86\u7b2c\u4e00\u4e2a pass \u6bd4\u8f83\u7279\u6b8a\uff0c\u5176\u5b83 pass \u90fd\u662f\u4e00\u6837\u7684\u3002\u6700\u7ec8\u5f97\u5230\u53ea\u5269\u4e0b\u4e00\u4e2a tape \u4e2d\u5305\u542b\u552f\u4e00\u7684 run \u65f6\uff0c\u6392\u5e8f\u5c31\u7ed3\u675f\u4e86\u3002

    \u81f3\u6b64\uff0c\u6392\u5e8f\u7ed3\u675f\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u4f18\u5316\u7a7a\u95f4","title":"\u4f18\u5316\u7a7a\u95f4","text":"

    \u53ef\u4ee5\u4f18\u5316\u7684\u90e8\u5206\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\uff1a

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#pass-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"pass \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

    \u4f8b\u5b50\u4e2d\u4e00\u5171\u7ecf\u8fc7\u4e86 4 \u6b21 pass\u3002\u5982\u679c\u6211\u4eec\u8bb0 \\(max(\\#run)\\) \u4e3a \\(\\#run\\) \u6700\u591a\u7684 tape \u7684 \\(\\#run\\)\uff0c\u5219\u6bcf\u4e00\u6b21 pass \u4f1a\u4ee4 \\(max(\\#run)\\) \u7f29\u5c0f\u4e00\u534a\uff0c\u76f4\u5230 \\(max(\\#run)\\) \u53d8\u4e3a 1\uff0c\u4e14\u53ea\u6709\u5b83\u4e00\u6761 tape \u8fd8\u6709\u6570\u636e\uff0c\u6807\u5fd7\u7740\u6392\u5e8f\u7ed3\u675f\u3002

    \u5982\u679c\u4e13\u6ce8\u4e8e \\(\\#run\\) \u7684\u53d8\u5316\uff0c\u90a3\u4e48\u4e0a\u9762\u7684\u6a21\u62df\u6b65\u9aa4\u5927\u81f4\u662f\u8fd9\u4e48\u4e00\u4e2a\u8fc7\u7a0b\uff1a

    Pass 1

    \u539f\u5148 \\(T_1\\) \u4e0a \\(\\#run = 5\\)\uff0c\u73b0\u5c06\u5b83\u5206\u914d\u5230\u4e24\u6761 tape \u4e0a\uff0c\u4e8e\u662f\u6709\uff1a

    Pass 2

    \u4f9d\u6b21\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u5747\u5206\u5230\u53e6\u5916\u4e24\u6761 tape \u4e0a\uff08\u672a\u4f18\u5316\u7684\u505a\u6cd5\uff0c\u4f18\u5316\u505a\u6cd5\u53c2\u8003#tape-\u4f18\u5316\uff09\uff0c\u4e8e\u662f\u6709\uff1a

    \u7ee7\u7eed\u53d6\uff0c\u5373\uff1a

    \\(T_3\\) \u4e0a\u5df2\u7ecf\u6ca1\u6709\u4e86\uff0c\u4f46\u662f \\(T_2\\) \u8fd8\u6ca1\u53d6\u5b8c\uff0c\u6240\u4ee5\u53ea\u4ece \\(T_2\\) \u62ff\uff1a

    \u6a21\u62df\u5230\u4ece\u8fd9\u91cc\u5176\u5b9e\u5df2\u7ecf\u53ef\u4ee5\u770b\u51fa\u6765\u4e86\uff0c\u5bf9\u4e8e 2-way merge \u6765\u8bf4\uff0c\u6392\u9664\u672b\u6bb5\u60c5\u51b5\uff0c\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u57fa\u672c\u4e0a\u6bcf\u6b21\u90fd\u662f\u4ece 2 \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{2}\\)\u3002

    \u90a3\u4e48\uff0c\u5bf9\u4e8e \\(k\\)-way merge \u6765\u8bf4\uff0c\u5c31\u662f\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u6bcf\u6b21\u4ece \\(k\\) \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{k}\\)\u3002

    \u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u5f52\u7eb3\u5f97\u5230\u5982\u4e0b\u8ba1\u7b97\u5f0f\uff1a

    \\[ \\begin{aligned} \\#pass &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{(\\#run)}\\rceil }_{\\text{rest passes}} \\\\ &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{ \\lceil \\frac{N}{M} \\rceil }\\rceil }_{\\text{rest passes}} \\end{aligned} \\]

    \u5176\u4e2d\uff0c\\(k\\) \u8868\u793a\u5f52\u5e76\u8def\u6570\uff0c\\(N\\) \u8868\u793a\u6570\u636e\u91cf\uff0c\\(M\\) \u8868\u793a\u5185\u5b58\u4e00\u6b21\u80fd\u5904\u7406\u7684\u6570\u636e\u91cf\u3002

    \u90a3\u4e48\uff0c\u51cf\u5c11 pass \u7684\u65b9\u6cd5\u4e5f\u5f88\u76f4\u89c2\u4e86\uff0c\u53ea\u9700\u8981\u589e\u52a0 \\(k\\) \u5373\u53ef\uff0c\u5373\u91c7\u53d6\u66f4\u591a\u8def\u7684\u5f52\u5e76\uff0c\u5c31\u80fd\u51cf\u5c11 pass\u3002

    \u7136\u800c\uff0c\u5176\u4e2d\u5fc5\u7136\u5b58\u5728\u4e00\u4e2a trade-off \u7684\u5173\u7cfb\uff0c\u867d\u7136 \\(k\\) \u589e\u52a0\u53ef\u4ee5\u51cf\u5c11 \\(\\#pass\\)\uff0c\u4f46\u662f\u5728\u63a5\u4e0b\u6765\u4e00\u8282\u4e2d\u6211\u4eec\u4f1a\u77e5\u9053\uff0c\\(k\\) \u8fc7\u5927\u4f1a\u5bfc\u81f4 tape \u9700\u6c42\u91cf\u589e\u52a0\uff0c\u6b64\u5916\uff0c\\(k\\) \u7684\u589e\u52a0\u4e5f\u4f1a\u5bfc\u81f4\u5185\u6392\u5e8f\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff0c\u4e5f\u4f1a\u589e\u52a0 pass \u5185\u7684 seek \u6b21\u6570\u3002

    \u5f53\u7136\uff0c\u9664\u4e86\u66b4\u529b\u7684\u589e\u52a0 \\(k\\) \u4ee5\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u66ff\u6362\u9009\u62e9(Replacement Selection)\u7b97\u6cd5\uff0c\u6765\u751f\u6210\u6bd4 \\(M\\) \u5927\u7684\u521d\u59cb run\uff0c\u4ee5\u76f8\u5bf9\u51cf\u5c11 pass \u6570\u91cf\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","title":"\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","text":"

    \u66ff\u6362\u9009\u62e9(Replacement Selection) \u5728 hw15 \u4e2d\u88ab\u5e03\u7f6e\u4e3a\u7f16\u7a0b\u9898\uff0c\u6240\u4ee5\u5176\u5b9e\u73b0\u8fc7\u7a0b\u53ef\u4ee5\u7ed3\u5408\u90a3\u9053\u9898\u76ee\u6765\u5b66\u4e60\u3002

    Replacement Selection @ PTA

    When the input is much too large to fit into memory, we have to do external sorting instead of internal sorting. One of the key steps in external sorting is to generate sets of sorted records (also called runs) with limited internal memory. The simplest method is to read as many records as possible into the memory, and sort them internally, then write the resulting run back to some tape. The size of each run is the same as the capacity of the internal memory.

    Replacement Selection sorting algorithm was described in 1965 by Donald Knuth. Notice that as soon as the first record is written to an output tape, the memory it used becomes available for another record. Assume that we are sorting in ascending order, if the next record is not smaller than the record we have just output, then it can be included in the run.

    For example, suppose that we have a set of input { 81, 94, 11, 96, 12, 99, 35 }, and our memory can sort 3 records only. By the simplest method we will obtain three runs: { 11, 81, 94 }, { 12, 96, 99 } and { 35 }. According to the replacement selection algorithm, we would read and sort the first 3 records { 81, 94, 11 } and output 11 as the smallest one. Then one space is available so 96 is read in and will join the first run since it is larger than 11. Now we have { 81, 94, 96 }. After 81 is out, 12 comes in but it must belong to the next run since it is smaller than 81. Hence we have { 94, 96, 12 } where 12 will stay since it belongs to the next run. When 94 is out and 99 is in, since 99 is larger than 94, it must belong to the first run. Eventually we will obtain two runs: the first one contains { 11, 81, 94, 96, 99 } and the second one contains { 12, 35 }.

    Your job is to implement this replacement selection algorithm.

    \u5229\u7528\u66ff\u6362\u9009\u62e9\u7b56\u7565\u4ee5\u540e\uff0c\u6bcf\u4e00\u6b21\u751f\u6210\u7684 run \u4e00\u5b9a\u4e0d\u5c0f\u4e8e \\(M\\)\uff08\u672b\u7aef\u4f59\u6570\u9664\u5916\uff09\uff0c\u4e8e\u662f\u76f8\u5bf9\u6765\u8bf4 \\(\\#pass\\) \u5c31\u4f1a\u51cf\u5c11\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#tape-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"tape \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

    \u5982\u679c\u4f7f\u7528#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u7684\u65b9\u6cd5\uff0c\u90a3\u4e48\u6211\u4eec\u4f7f\u7528 \\(k\\)-way merge \u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape\u3002

    \u8fd9\u5176\u5b9e\u5f88\u597d\u7406\u89e3\uff0c\u6211\u4eec\u6bcf\u4e00\u4e2a pass \u9700\u8981 \\(k\\) \u4e2a tape \u6765\u5b58\u653e\u6bcf\u4e00\u8def\u7684\u5e8f\u5217\uff0c\u800c\u5176\u7ed3\u679c\u8981\u5e73\u5206\u653e\u590d\u5236\u5230\u4e0b\u4e00\u4e2a pass \u6240\u9700\u8981\u7684 \\(k\\) \u4e2a pass \u4e2d\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape \u8f6e\u6362\u7740\u6765\u5b58\u50a8\u6570\u636e\u3002

    \u800c\u8fd9\u4e0d\u5229\u4e8e\u6211\u4eec\u901a\u8fc7\u589e\u52a0 \\(k\\) \u6765\u51cf\u5c11 \\(\\#pass\\)\uff0c\u56e0\u6b64\u6211\u4eec\u8003\u8651\u67d0\u79cd\u7b56\u7565\u6765\u4f18\u5316 tape \u7684\u4f7f\u7528\u3002

    \u5728#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u6211\u591a\u6b21\u6697\u793a\uff0c\u4e4b\u540e\u4f1a\u5bf9\u300c\u5c06\u5f52\u5e76\u540e\u7684 run \u5e73\u5206\u5230\u5404 tape\u300d\u8fd9\u4ef6\u4e8b\u505a\u4f18\u5316\u3002

    \u6211\u4eec\u53ef\u4ee5\u8003\u8651\uff0c\u4e0d\u5e73\u5747\u7684\u5c06\u5f52\u5e76\u540e\u7684 run \u5206\u914d\u5230\u5404\u4e2a tape \u4e0a\uff0c\u5373\u603b\u6709\u4e00\u4e9b tape \u6bd4\u522b\u7684 tape \u591a\u4e00\u4e9b run\u3002\u867d\u7136\u5728\u5e73\u5206\u7684\u7b56\u7565\u4e2d\uff0c\u4e5f\u6709\u53ef\u80fd\u4f1a\u6709\u591a\u51fa\u6765\u7684 run\uff0c\u4f46\u662f\u53ea\u4f1a\u591a\u4e00\u4e2a\uff08\u4e5f\u5c31\u662f\u5c06 \\(x \\mod k\\) \u7684\u4f59\u6570\u5206\u914d\u5230\u5176\u4e2d\u51e0\u4e2a tape \u4e0a\uff09\u3002\u6b64\u65f6\u8fd9\u4e9b\u591a\u51fa\u6765\u7684 run \u53ef\u80fd\u5c31\u662f\u5355\u7eaf\u7684\u4ece\u4e00\u4e2a tape \u522b\u590d\u5236\u5230\u53e6\u5916\u4e00\u4e2a tape \u4e0a\uff0c\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u6ca1\u5fc5\u8981\u7684\u64cd\u4f5c\uff0c\u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u7559\u4e0b\u5b83\uff0c\u5c06\u5f53\u524d tape \u62ff\u5230\u4e0b\u4e00\u8f6e\u7528\u5462\uff1f

    \u4f46\u662f\u7531\u4e8e\u5e73\u5206\u7b56\u7565\u4e0b\uff0c\u8fd9\u4e2a\u60c5\u51b5\u7684\u51fa\u73b0\u5e76\u4e0d\u53ef\u63a7\uff0c\u800c\u4e14\u603b\u662f\u4f1a\u5f15\u8d77\u60ac\u6b8a\u7684 tape \u95f4\u7684\u6570\u91cf\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u80fd\u4e0d\u80fd\u4e3b\u52a8\u5229\u7528\u8fd9\u4e2a\u6027\u8d28\u3002

    \u5b9e\u5728\u60f3\u4e0d\u5230\u600e\u4e48\u8fc7\u5ea6\u4e86\uff0c\u800c\u4e14\u6025\u6025\u6025\uff0c\u6240\u4ee5\u76f4\u63a5\u4e0a\u7ed3\u8bba\u3002

    \u6211\u4eec\u6309\u7167 Fibonacci \u6570\u5217\u7684\u9879\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\)\uff0c\u6b64\u65f6\u6bcf\u4e00\u4e2a pass \u53ea\u9700\u8981\u4e00\u4e2a\u6709\u4e00\u4e2a\u7a7a\u95f2\u7684 tape \u5373\u53ef\u3002

    example

    \\[ \\text{Fibonacci}: {1,1,2,3,5,8,13,21,...} \\]

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u4e24\u4e2a tape\uff0c\u5206\u522b\u6709 23 \u4e2a run \u548c 13 \u4e2a run\uff0c\u5219\uff1a

    \\(T_1\\) \\(T_2\\) \\(T_3\\) \u8bf4\u660e 21 13 - \u521d\u59cb\u60c5\u51b5 8 - 13 \\(T_1\\) \u7684\u524d 13 \u4e2a\u4e0e \\(T_2\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_3\\) - 8 5 \\(T_3\\) \u7684\u524d 8 \u4e2a\u4e0e \\(T_1\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_2\\) 5 3 - \u7565 2 - 3 \u7565 - 2 1 \u7565 1 1 - \u7565 0 - 1 \u7565

    \u4f7f\u7528 Fibonacci \u6211\u4eec\u603b\u53ef\u4ee5\u6eda\u52a8\u7740\u5c06 \\(\\#run\\) \u7684\u89c4\u6a21\u7f29\u5c0f\u3002

    k-way merge with k-order Fibonacci Sequence

    \u5bf9\u4e8e \\(k\\)-way merge\uff0c\u6211\u4eec\u53ea\u9700\u8981\u6784\u9020 k \u9636 Fibonacci \u6570\u5217\uff0c\u7136\u540e\u6309\u7167\u8fd9\u4e2a\u6570\u5217\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u5373\u53ef\u3002

    k-order Fibonacci Sequence

    \u7ed9\u51fa k \u9636 Fibonacci \u6570\u5217\uff08\u4e0e PPT \u7565\u6709\u4e0d\u540c\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\u4e0b\u6807\u4ece\u8c01\u5f00\u59cb\uff0c\u65e0\u4f24\u5927\u96c5\uff09\uff1a

    \\[ \\left\\{ \\begin{aligned} F^k_1 &= 1 \\\\ F^k_2 &= 1 \\\\ & \\vdots\\\\ F^k_n &= F^k_{n-1} + F^k_{n-2} + \\cdots + F^k_{n-k} \\quad (n > k) \\end{aligned} \\right. \\]

    \u8fd9\u4e2a\u7ed3\u8bba\u770b\u8d77\u6765\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u600e\u4e48\u64cd\u4f5c\u7684\u5462\uff1fPPT \u538b\u6839\u6ca1\u8bb2\uff0c\u56e0\u6b64\uff0c\u6211\u5728\u8be2\u95ee ch \u8001\u5e08\u4ee5\u540e\uff0c\u5199\u4e0b\u4e86\u8fd9\u4e2a\u90e8\u5206\uff0c\u65e8\u5728\u8865\u5145 \\(k\\)-way merge \u4f7f\u7528 k \u9636 Fibonacci \u4f18\u5316\u7684\u65b9\u6cd5\u3002

    \u9996\u5148\uff0c\u505a\u4e00\u4e9b\u5f3a\u8c03\uff1a

    1. \u8be5\u65b9\u6cd5\u9648\u8ff0\u8fc7\u7a0b\u4e2d\uff0ck \u8def\u59cb\u7ec8\u76f4\u63a5\u5408\u5e76\u6210\u4e00\u8def\uff08\u5343\u4e07\u4e0d\u8981\u7528\u201citerative\u201d\u7684\u601d\u8def\u6765\u8003\u8651\uff0c\u5c31\u7b97 iterative\uff0c\u8fed\u4ee3\u5b8c\u4e86\u4e5f\u8fd8\u662f k \u8def\u5f52\u4e3a 1 \u8def\uff09\uff1b
    2. \u6211\u4eec\u7684\u76ee\u7684\u662f\u4f18\u5316\u6bcf\u4e00\u4e2a pass \u4e2d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u4e0d\u4e00\u6837\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898\uff08\u4f8b\u5982\u5c34\u5c2c\u7684 \\(n\\) \u548c \\(n+1\\) \u5f52\uff0c\u4e0b\u4e00\u4e2a pass \u5c31\u5f97 \\(1\\) \u548c \\(n\\) \u5f52\u4e86\uff09\uff1b

    \u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a pass\uff0c\u6709 \\(k\\) \u4e2a tape\uff0c\u6211\u4eec\u8bb0\u6bcf\u4e00\u4e2a tape \u7684 \\(\\#run\\) \u4e3a \\(r_i\\)\uff0c\u5219\u6709\uff1a

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6bcf\u4e2a pass \u6700\u5927\u548c\u6700\u5c0f\u7684 \\(\\#run\\) \u5206\u522b\u6709 k \u9636 Fibonacci \u4e2d\u76f8\u90bb\u7684\u4e24\u9879\u3002

    \u8fd9\u91cc\u5206\u5f00\u7528 i \u548c j \u662f\u60f3\u8868\u8fbe\u8fd9\u4e2a\u5339\u914d\u5173\u7cfb\u4e0d\u91cd\u8981\uff0c\u91cd\u8981\u7684\u662f\u6700\u5927\u503c\u6700\u5c0f\u503c\u7531 Fibonacci \u76f8\u90bb\u9879\u6240\u786e\u5b9a\u3002

    \u90a3\u4e48\u5939\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u4e2d\u95f4\u7684\u5176\u4ed6 \\(\\#run\\) \u8981\u5982\u4f55\u786e\u5b9a\u5462\uff1f\u9996\u5148\u6211\u4eec\u8fdb\u884c\u4e00\u6bb5\u63a8\u5bfc\uff1a

    \u5047\u8bbe \\(\\{r_i\\}\\) \u7ecf\u8fc7\u6392\u5e8f\uff0c\u5e76\u4e14\u521a\u597d\u80fd\u51d1\u4e0a\u6211\u4eec\u6240\u9700\u8981\u7684\u6570\u91cf\uff0c\u6709\uff1a

    \\[ r_k > r_{k-1} > ... > r_{2} > r_{1} \\text{where } r_k = F^k_j \\text{ and } r_1 = F^k_{j-1} \\]

    \u5728\u8fd9\u4e00\u4e2a pass \u4e2d\uff0c\u6211\u4eec\u5c06\u6240\u6709 tape \u7684\u524d \\(r1\\) \u4e2a run \u62ff\u51fa\u6765 merge\uff0c\u8fd9\u6837\uff0c\u9664\u4e86 \\(r_1\\) \u8fd9\u4e2a tape\uff0c\u5176\u4ed6 tape \u7684 \\(\\#run\\) \u90fd\u53d8\u4e3a \\(r_i-r_1\\)\u3002\u6b64\u65f6\u6709\u4e0d\u7b49\u5173\u7cfb\uff1a

    \\[ r_1 > r_k - r_1 > r_{k-1} - r_1 > ... > r_{2} - r_1 \\]

    \u8fd9\u91cc\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f \\(r_1 > r_k - r_1\\)\uff1a

    proof of the relation \\[ \\begin{aligned} &\\begin{aligned} \\because r_1 &= F^k_{j-1} \\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} + F^k_{j-k-1} \\end{aligned} & (1)\\\\ &\\begin{aligned} \\text{and } r_k &= F^k_{j} \\\\ &= F^k_{j-1} + F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (2)\\\\ &\\begin{aligned} \\therefore r_k - r_1 &= F^k_{j} - F^k_{j-1} \\quad \\text{ i.e. } (2) - (1)\\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (3)\\\\ &\\begin{aligned} \\therefore r_1 - (r_k - r_1) &= F^k_{j-k-1} > 0 \\quad \\text{ i.e. } (1) - (3) \\\\ \\end{aligned} \\\\ &\\begin{aligned} \\therefore r_1 > r_k - r_1 \\end{aligned} \\\\ \\end{aligned} \\]

    \u5982\u679c\u6211\u4eec\u5c06\u73b0\u5728\u8fd9\u4e2a\u6392\u5e8f\u540e\u7684\u6570\u5217\u8bb0\u4e3a \\(\\{r_i'\\}\\)\uff0c\u5219\u6709\uff1a

    \\[ \\left\\{ \\begin{aligned} r_1' &= r_2 - r_1 \\\\ r_2' &= r_3 - r_1 \\\\ \\vdots \\\\ r_{k-1}' &= r_k - r_1 \\\\ r_k' &= r_1 \\end{aligned} \\right. \\]

    \u6b64\u65f6\u6839\u636e\u6211\u4eec\u5173\u4e8e\u6700\u5927\u6700\u5c0f\u503c\u7684\u9648\u8ff0\uff0c\u53c8\u6709\uff1a

    \\[ \\left\\{ \\begin{aligned} r_1' &= F^k_{j-2} \\\\ r_k' &= F^k_{j-1} \\end{aligned} \\right. \\]

    \u4e8e\u662f\u53ef\u4ee5\u63a8\u5f97\uff1a\\(r_2 = r_1 + F^k_{j-2} = F^k_{j-1} + F^k_{j-2}\\)\u3002\u5173\u4e8e \\(r_3, r_4\\)\uff0c\u4e5f\u662f\u4e00\u6837\u7684\u529e\u6cd5\uff0c\u5c06 \\(r_2\\) \u7684\u7ed3\u8bba\u8fc1\u79fb\u5230 \\(r_2'\\)\uff0c\u518d\u56de\u8fc7\u5934\u5f97\u5230 \\(r_3 = r_1 + r_2'= F^k_{j-1} + F^k_{j-2} + F^k_{j-3}\\)\uff0c\u4ee5\u6b64\u7c7b\u63a8\uff0c\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7ed3\u8bba\uff1a

    \\[ \\left\\{ \\begin{aligned} r_1 &= F^k_{j-1} \\\\ r_2 &= F^k_{j-1} + F^k_{j-2} \\\\ r_3 &= F^k_{j-1} + F^k_{j-2} + F^k_{j-3} \\\\ \\vdots \\\\ r_k &= F^k_{j-1} + F^k_{j-2} + ... + F^k_{j-k} = F^k_{j} \\end{aligned} \\right. \\]

    \u601d\u8003\u9898

    \u53ef\u4ee5\u611f\u53d7\u601d\u8003\u4e00\u4e0b\u8fd9\u4e2a\u7279\u6027\uff08\u8003\u8651 2-way \u5373\u53ef\uff09\u4e0e\u9ec4\u91d1\u6bd4\u4f8b\u7684\u5173\u7cfb\uff01

    hint: \u5982\u4f55\u7406\u89e3 \\(\\frac{a_n}{a_{n-1}} \\approx \\frac{a_{n-1}}{a_n - a_{n-1}}\\) \u4e0e\u8fd9\u4e2a\u6027\u8d28\u7684\u5173\u7cfb\uff1f

    \u5f53\u7136\uff0c\u521a\u597d\u80fd\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\u81ea\u7136\u662f\u5c11\u6570\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u591a\u4f59\u7684\u90e8\u5206\u5747\u5300\u7684\u5206\u5230\u8f83\u591a\u82e5\u5e72 tape \u4e0a\uff0c\u4ee5\u76f8\u5bf9\u7684\u5229\u7528 Fibonacci \u6570\u5217\u7684\u6027\u8d28\uff08\u8054\u7cfb\u601d\u8003\u9898\u7406\u89e3\uff09\u3002

    \u6ce8\u610f

    \u6216\u8bb8\u4f60\u5df2\u7ecf\u5f00\u59cb\u4ea7\u751f\u7591\u95ee\u4e86\uff0c\u5982\u679c\u8fd9\u6837\u6765\u505a\uff0c\u524d\u9762\u5bf9 \\(\\#pass\\) \u7684\u5206\u6790\u662f\u4e0d\u662f\u4e0d\u6210\u7acb\u4e86\u5462\uff1f

    \u6211\u60f3\u5e94\u8be5\u786e\u5b9e\u4e0d\u518d\u5b8c\u5168\u4e00\u6837\u4e86\uff0c\u4f46\u662f\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u4e4b\u540e\u5229\u7528\u90a3\u4e2a\u7ed3\u8bba\u505a\u5b9a\u6027\u5206\u6790\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053\uff0c\u91c7\u53d6 Fibonacci \u7b56\u7565\u6765\u4f18\u5316\u4f1a\u5bfc\u81f4 \\(\\#pass\\) \u589e\u591a\u5373\u53ef\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#k-\u8def\u5185\u6392\u5e8f\u4f18\u5316","title":"k \u8def\u5185\u6392\u5e8f\u4f18\u5316","text":"

    \u968f\u7740 \\(k\\) \u7684\u589e\u52a0\uff0c\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u4e24\u8def\u5f52\u5e76\u90a3\u6837\u76f4\u63a5\u8f93\u51fa\u8f83\u5c0f\u7684\u90a3\u4e2a\uff0c\u800c\u662f\u9700\u8981\u7ef4\u62a4\u6570\u636e\u7ed3\u6784\u6765\u603b\u662f\u8f93\u51fa k \u4e2a\u4e2d\u6700\u5c0f\u7684\u90a3\u4e2a\u2014\u2014\u6211\u4eec\u7528\u5806\u6765\u7ef4\u62a4\u6bcf\u4e00\u4e2a run \u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\u7684\u961f\u9996\u5143\u7d20\uff08\u540c\u65f6\u4e5f\u662f\u6700\u5c0f\u5143\u7d20\uff09\uff0c\u6bcf\u5f53\u5806\u9876\u5143\u7d20\u88ab\u8f93\u51fa\uff0c\u5c31\u9700\u8981\u4ece\u5bf9\u5e94\u7684 run \u4e2d\u8bfb\u5165\u4e0b\u4e00\u4e2a\u5143\u7d20\u3002

    \u6ce8\u610f

    \u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u5806\u662f\u989d\u5916\u7ef4\u62a4\u7684\uff0c\u800c\u6bcf\u6b21\u63a8\u5165\u5806\u4e2d\u7684\u5143\u7d20\u90fd\u662f\u4ece\u5bf9\u5e94\u7684 run \u7684 buffer \u4e2d\u62ff\u7684\uff0c\u800c\u4e0d\u662f\u6bcf\u6b21\u90fd\u4ece\u786c\u76d8\u4e2d\u62ff\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u970d\u592b\u66fc\u6811\u4f18\u5316","title":"\u970d\u592b\u66fc\u6811\u4f18\u5316","text":"

    \u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4e0d\u4f7f\u7528\u76f4\u63a5 \\(k\\) \u8def\u5408\u5e76\uff0c\u800c\u662f\u91c7\u7528\u4e24\u4e24\u5f52\u5e76\u7684\u65b9\u6cd5\uff0c\u4e5f\u5c31\u662f wiki \u4e2d\u63d0\u5230\u7684\u8fed\u4ee3\u5f52\u5e76\uff08\u6ce8\u610f\uff0c\u8be5\u6761\u76ee\u4e2d\u63d0\u5230\u7684\u5f52\u5e76\u5e76\u6ca1\u6709\u8bf4\u660e\u662f\u5916\u6392\u5e8f\u80cc\u666f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fc1\u79fb\uff09\u3002

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u82e5\u5e72\u4e2a run\uff0c\u5e76\u4e14\u6211\u4eec\u5c06\u8981\u8fdb\u884c\u4e24\u4e24\u5f52\u5e76\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u6bcf\u4e00\u4e2a run \u7684\u5927\u5c0f\uff0c\u6839\u636e\u970d\u592b\u66fc\u6811\u7684\u89c4\u5f8b\u6765\u8fdb\u884c\u5f52\u5e76\uff0c\u5373\u603b\u662f\u9009\u6700\u5c0f\u7684\u4e24\u4e2a\u8fdb\u884c\u5f52\u5e76\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5e76\u884c\u4f18\u5316","title":"\u5e76\u884c\u4f18\u5316","text":"

    \u8fd9\u91cc\u5e76\u884c\u7684\u76ee\u6807\u4e3b\u8981\u662f\u4f7f\u7b97\u6cd5\u652f\u6301\u6570\u636e\u7684\u8bfb-\u7528-\u5199\u7684\u6d41\u6c34\u7ebf\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u8981\u60f3\u529e\u6cd5\u8ba9\u8bfb\u4e0d\u963b\u585e\u7528\uff0c\u7528\u4e0d\u963b\u585e\u5199\u3002

    \u5148\u524d\u6211\u4eec\u9700\u8981\u5148\u8bfb\u5165\u6570\u636e\uff0c\u7136\u540e\u8fdb\u884c\u6392\u5e8f\uff0c\u6392\u5e8f\u5b8c\u4e86\u518d\u5199\u5165\u78c1\u76d8\uff0c\u817e\u51fa\u5185\u5b58\u7a7a\u95f4\u4ee5\u4f9b\u4e0b\u4e00\u6b21\u8bfb\u5165\u3002\u90a3\u4e3a\u4ec0\u4e48\u4f1a\u963b\u585e\u5462\uff1f\u56e0\u4e3a\u6211\u4eec\u6ca1\u6cd5\u8bfb\u4e00\u4e2a\u6b63\u5728\u5199\u7684\u6570\u636e\u5757\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e0d\u540c\u7684\u6570\u636e\u5757\u8bfb\u548c\u5199\u5c31\u884c\u4e86\u3002\u5bf9\u4e8e \\(k\\)-way \u4e2d\u7684\u6bcf\u4e00\u8def\uff0c\u6211\u4eec\u90fd\u63d0\u4f9b\u4e24\u4e2a input buffer\uff0c\u4e00\u4e2a\u7528\u4e8e\u5199\uff0c\u4e00\u4e2a\u7528\u4e8e\u6392\u5e8f\u3002\u5f53\u6392\u5e8f buffer \u7a7a\u4e86\u7684\u65f6\u5019\uff0c\u5c31\u548c\u8bfb\u6ee1\u4e86\u7684 input buffer \u4ea4\u6362\uff0c\u65e0\u7f1d\u8854\u63a5\u7ee7\u7eed\u8f93\u51fa\u3002\u4e8e\u6b64\u540c\u65f6\uff0c\u521a\u521a\u88ab\u4ea4\u6362\u8fc7\u53bb\u7684 buffer \u5219\u53ef\u7528\u4e8e\u7ee7\u7eed\u8bfb\u5165\u3002

    \u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u6267\u884c direct \\(k\\)-way merge\uff0c\u5c31\u9700\u8981 \\(2k\\) \u4e2a input buffer\uff08\u8fd9\u91cc\u5f3a\u8c03 direct \u662f\u56e0\u4e3a\uff0c\u5982\u679c\u4f7f\u7528 iterative \u7684\u8bdd\uff0cinput buffer \u53ea\u9700\u8981 4 \u4e2a\uff09\u3002

    \u800c\u5bf9\u4e8e\u8f93\u51fa\uff0c\u6211\u4eec\u53ea\u9700\u8981 2 \u4e2a output buffer \u4ea4\u66ff\u4f7f\u7528\u5373\u53ef\uff0c\u4e00\u4e2a\u7528\u6765\u63a5\u6536\u6765\u81ea\u6392\u5e8f\u7b97\u6cd5\u7684\u8f93\u51fa\uff0c\u4e00\u4e2a\u7528\u6765\u5c06\u6570\u636e\u5199\u5165\u78c1\u76d8\u3002

    \u4f46\u662f\uff0c\u5e76\u884c\u4f18\u5316\u7684\u7f3a\u70b9\u5c31\u662f\u5360\u636e\u4e86\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u2014\u2014\u539f\u5148 \\(k + 1\\) \u4e2a buffer \u5e73\u5206\u7684\u7528\u4e8e\u5904\u7406\u6570\u636e\u7684\u5185\u5b58\uff0c\u73b0\u5728\u9700\u8981\u88ab \\(2k + 2\\) \u4e2a buffer \u5e73\u5206\uff0c\u6240\u4ee5\u6bcf\u4e00\u4e2a buffer \u7684\u5927\u5c0f\u4f1a\u53d8\u5c0f\u3002\u8fdb\u800c\u5bfc\u81f4\u6bcf\u4e00\u6b21\u4ece disk \u4e2d\u8bfb\u53d6\u7684\u6570\u636e\u53d8\u5c11\uff0c\u6240\u4ee5\u8981\u8bfb\u5b8c\u6570\u636e\u6240\u9700\u8981\u7684\u8bfb\u53d6\u6b21\u6570\u5c31\u589e\u52a0\uff0c\u5373 seek \u6b21\u6570\u589e\u52a0\u3002

    "},{"location":"cour_note/D2CX_ComputerOrganization/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7ec4\u6210 | Computer Organization","text":"

    \u7ea6 57 \u4e2a\u5b57

    \u7531\u4e8e\u7b14\u8bb0\u592a\u6d6a\u8d39\u65f6\u95f4\u4e86\uff0c\u6211\u5b66\u4e60\u8ba1\u7ec4\u4f7f\u7528\u7684\u662f xxjj \u7684\u7b14\u8bb0\uff1a

    https://xuan-insr.github.io/computer_organization/1_prelude/

    \u987a\u4fbf\u61d2\u5f97\u81ea\u5df1\u91cd\u65b0\u8c03\u6574\uff0c\u76f4\u63a5\u5728\u4ed6\u7684\u7b14\u8bb0\u4e0a\u4fee\u6539\u7136\u540e PR \u4e86\u3002

    "},{"location":"cour_note/D2HJ_StanfordWriting/","title":"\ud83d\udd2e \u79d1\u5b66\u6587\u7ae0\u5199\u4f5c | Writing in the Sciences","text":"

    \u7ea6 1331 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    \u5410\u69fd

    \u4e0d\u662f\u6211\u8bf4\uff0c\u6211\u611f\u89c9\u8fd9\u8bfe\u7684\u7ec4\u7ec7\u6ca1\u6709\u5f88\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6216\u8005\u8bf4\u5b9e\u9645\u4e0a\u5b83\u5e76\u4e0d\u5c5e\u4e8e\u80fd\u591f\u7528\u6846\u67b6\u6027\u7684\u5185\u5bb9\u6982\u62ec\u7684\uff0c\u800c\u662f\u4e0d\u65ad\u7684\u628a\u7ec6\u8282\u5185\u5bb9\u4e22\u51fa\u6765\u5e76\u5728\u6848\u4f8b\u4e2d\u5206\u6790\uff0c\u6240\u4ee5\u611f\u89c9\u7b14\u8bb0\u5f88\u96be\u505a\u554a\uff0c\u7136\u540e\u611f\u89c9\u7b2c\u4e00\u5355\u5143\u7684\u5185\u5bb9\u662f\u5bf9\u6574\u4e2a\u8bfe\u7a0b\u7684\u5927\u81f4\u6897\u6982\uff0c\u6240\u4ee5\u8fd9\u91cc\u653e\u7684\u4e3b\u8981\u662f\u7b2c\u4e00\u7ae0\u7684\u5185\u5bb9\uff0c\u540e\u9762\u5982\u679c\u6709\u9047\u5230\u6211\u89c9\u5f97\u6709\u5fc5\u8981\u4e14\u65b9\u4fbf\u8bb0\u4e0b\u6765\u7684\u4e1c\u897f\u4f1a\u5fd8\u91cc\u9762\u4e22\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u611f\u89c9\u8fd9\u4efd\u7b14\u8bb0\u7684\u8d28\u91cf\u4e0d\u662f\u5f88\u9ad8\uff0c\u6548\u679c\u4e5f\u4e0d\u662f\u5f88\u597d\u2014\u2014\u5bf9\u4e8e\u66ff\u4ee3\u8fd9\u95e8\u8bfe\u6765\u8bf4\u3002

    \u6897\u6982

    \u79d1\u5b66\u6587\u732e\u662f\u4e3a\u4e86\u89c2\u70b9\u4ea4\u6d41\u5b58\u5728\u7684\uff0c\u800c\u201c\u6587\u7ae0\u201d\u53ea\u662f\u89c2\u70b9\u4ea4\u6d41\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u627f\u8f7d\u5f62\u5f0f\u3002\u6211\u4eec\u8981\u7740\u91cd\u4e8e\u8ba9\u8bfb\u8005\u80fd\u4ee5\u66f4\u5c0f\u7684\u8d1f\u62c5\u7406\u89e3\u6587\u7ae0\u7684\u5185\u6db5\uff0c\u5373\u7528\u7b80\u660e\u627c\u8981\u7684\u3001\u8109\u7edc\u6e05\u6670\u7684\u6587\u5b57\uff0c\u8868\u8fbe\uff08\u6709\u53ef\u80fd\u6bd4\u8f83\u590d\u6742\u7684\uff09\u89c2\u70b9\u548c\u903b\u8f91\u3002

    \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u201c\u4e3a\u8bfb\u8005\u670d\u52a1\u201d\uff0c\u8003\u8651\u5230\u6587\u7ae0\u7684\u9605\u8bfb\u8282\u594f\uff0c\u5c3d\u53ef\u80fd\u8ba9\u6587\u7ae0\u80fd\u591f\u88ab\u884c\u4e91\u6d41\u6c34\u5730\u9605\u8bfb\u4e0b\u6765\uff0c\u800c\u975e\u78d5\u78d5\u7eca\u7eca\u6216\u53cd\u53cd\u590d\u590d\u3002

    \u4e00\u7bc7\u79d1\u5b66\u6587\u7ae0\u662f\u4e3a\u4e86\u4ea4\u6d41\u89c2\u70b9\u800c\u5b58\u5728\u7684\uff0c\u6240\u4ee5\u5b83\u5e94\u5f53\u80fd\u591f\u8ba9\u4eba \u9ad8\u6548 \u5730\u83b7\u53d6\u6838\u5fc3\u5185\u5bb9\uff0c\u6e05\u6670 \u5730\u641e\u6e05\u695a\u6587\u7ae0\u8bf4\u4e86\u4ec0\u4e48\uff0c\u5c24\u5176\u5728\u64b0\u5199\u6587\u7ae0\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u8981\u5c24\u5176\u6ce8\u91cd\u8fd9\u4e9b\uff1b\u5728\u6b64\u57fa\u7840\u4e0a \u4f18\u96c5 \u7684\u6587\u98ce\u80fd\u8ba9\u6587\u7ae0\u66f4\u4e0a\u4e00\u5c42\u697c\uff0c\u800c\u8fd9\u4e9b\u901a\u5e38\u662f\u5728\u4fee\u6539\u4e0e\u6da6\u8272\u4e2d\u4f53\u73b0\u51fa\u6765\u7684\u3002

    \u800c\u4e3a\u4e86\u5b9e\u73b0\u300c\u9ad8\u6548\u300d\u548c\u300c\u6e05\u6670\u300d\uff0c\u4f60\u9996\u5148\u5fc5\u987b\u6e05\u695a\u81ea\u5df1\u5c06\u8981\u8868\u8fbe\u4ec0\u4e48\uff08Have something to say.\uff09\uff0c\u5e76\u4e14\u68b3\u7406\u6e05\u8fd9\u4e9b\u5185\u5bb9\u7684\u8109\u7edc\u548c\u903b\u8f91\u5173\u7cfb\uff08Logical thinking.\uff09\uff0c\u6b64\u5916\uff0c\u4e3a\u4e86\u8f85\u52a9\u6784\u5efa\u8d77\u4e00\u7bc7\u6587\u7ae0\uff0c\u4f60\u8fd8\u9700\u8981\u4e00\u4e9b\u5199\u4f5c\u5957\u8def\uff08A few simple, learnable rules of style.\uff09\u3002

    \u8fd9\u91cc\u6709\u4e00\u4e9b\u5176\u5b83\u4e60\u60ef\u80fd\u591f\u5e2e\u52a9\u4f60\u66f4\u597d\u5730\u5199\u4f5c\uff1a

    1. \u65e5\u5e38\u591a\u8bfb\u591a\u5199\u591a\u6a21\u4eff\uff0c\u4e0d\u4e00\u5b9a\u8981\u548c\u79d1\u5b66\u6587\u7ae0\u6709\u5173\uff1b
    2. \u6539\u6b63\u4e00\u4e9b\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u517b\u6210\u7684\u574f\u7684\u201c\u5b66\u672f\u201d\u5199\u4f5c\u4e60\u60ef\uff0c\u8bb2\u8005\u79f0\u4e4b\u4e3a deprogramming step\uff1b
    3. \u52a8\u7b14\u4e4b\u524d\u5148\u5c1d\u8bd5\u7740\u7528\u8bed\u8a00\u6765\u8bb2\u8ff0\u6587\u7ae0\u5185\u5bb9\uff0c\u6bd4\u5982\u548c\u4f60\u7684\u670b\u53cb\u8c08\u8c08\uff1b
    4. \u5c1d\u8bd5\u8ba9\u6587\u7ae0\u53d8\u5f97\u6709\u5438\u5f15\u529b\uff1b
    5. \u8ba4\u8bc6\u5230\u5199\u4f5c\u4e0d\u9700\u8981\u7075\u611f\uff0c\u4e0d\u8981\u628a\u7075\u611f\u5f53\u4f5c\u501f\u53e3\uff1b
    6. \u8ba4\u8bc6\u5230\u5199\u4f5c\u672c\u8eab\u662f\u56f0\u96be\u7684\uff0c\u800c\u5927\u5bb6\u90fd\u4e00\u6837\uff1b
    7. \u575a\u6301\u53cd\u590d\u4fee\u6539\uff0c\u751a\u81f3\u662f\u5728\u5199\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u4f18\u5148\u628a\u6587\u7ae0\u6210\u54c1\u5199\u51fa\u6765\uff0c\u518d\u4e0d\u538c\u5176\u70e6\u5730\u4fee\u7f2e\uff1b
    8. \u6740\u4f10\u679c\u65ad\uff0c\u4e0d\u8981\u6267\u7740\u4e8e\u5df2\u7ecf\u5199\u51fa\u6765\u7684\u4f46\u662f\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u7684\u6587\u5b57\uff1b
    9. \u627e\u4e00\u4e2a\u597d\u7f16\u8f91\uff0cta \u4eec\u53ef\u80fd\u4f1a\u7ed9\u4f60\u597d\u7684\u610f\u89c1\u548c\u5efa\u8bae\uff1b
    10. \u53bb\u5192\u9669\uff0c\u52c7\u6562\u5730\u53bb\u7a81\u7834\u684e\u688f\uff1b

    \u5177\u4f53\u5230\u5199\u4f5c\u65f6\uff0c\u6211\u4eec\u8981\u5207\u5fcc\u53e5\u5b50\u6666\u6da9\u96be\u61c2\uff0c\u5728\u5199\u4f5c\u8fc7\u7a0b\u4e2d\u6211\u4eec\u53ef\u80fd\u65e0\u610f\u8bc6\u5730\u7528\u6666\u6da9\u590d\u6742\u7684\u8bed\u53e5\u63a9\u76d6\u6211\u4eec\u60f3\u8981\u8868\u8fbe\u7684\u5185\u5bb9\uff0c\u5176\u4e2d\u53ef\u80fd\u7684\u539f\u56e0\u6709\uff1a

    \u5c06\u8bb8\u591a\u52a8\u8bcd\u8f6c\u5316\u4e3a\u540d\u8bcd\u4f7f\u7528

    Verbs drive sentences along and nouns slow them down.

    bad eg

    Adoptive cell transfer (ACT) immunotherapy is based on the ex vivo selection of tumor-reactive lymphocytes, and their activation and numerical expression before reinfusion to the autologous tumor-bearing host.

    \u4f7f\u7528\u6a21\u7cca\u5bbd\u6cdb\u7684\u8bcd

    \u6a21\u7cca\u5bbd\u6cdb\u7684\u3001\u4e0d\u591f\u5177\u4f53\u7684\u3001\u4e0d\u80fd\u8ba9\u8bfb\u8005\u8111\u4e2d\u4ea7\u751f\u76f4\u63a5\u5370\u8c61\u7684\u8bcd\u4f1a\u8ba9\u8bfb\u8005\u611f\u5230\u56f0\u60d1\u3002

    \u4f7f\u7528\u4e0d\u5fc5\u8981\u7684\u7f29\u5199\u6216\u672f\u8bed

    \u9664\u975e\u662f\u4e00\u4e9b\u5e7f\u4e3a\u4eba\u77e5\u7684\u7f29\u5199\uff0c\u5426\u5219\u5f88\u53ef\u80fd\u4e3a\u8bfb\u8005\u5e26\u6765\u56f0\u6270\u3002\u5373\u4f7f\u4f60\u5728\u524d\u6587\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5b83\u4eec\u5f88\u53ef\u80fd\u9700\u8981\u56de\u8fc7\u5934\u6765\u67e5\u9605\u624d\u80fd\u201c\u8bb0\u8d77\u201d\u8fd9\u4e2a\u7f29\u5199\u7684\u542b\u4e49\u3002

    \u4f7f\u7528\u88ab\u52a8\u8bed\u6001

    \u8fdd\u53cd\u4e86\u60c5\u7eea\u4e0a\u7684 \u4e3b-\u8c13-\u5bbe \u7684\u987a\u5e8f\u3002\u5f53\u7136\u8981\u6309\u7167\u5b9e\u9645\u60c5\u51b5\u6765\u8bf4\uff0c\u5173\u952e\u662f\u8981\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u8bed\u6cd5\u53d8\u5316\u3002

    \u4e3b\u8bed\u548c\u52a8\u8bcd\u592a\u9065\u8fdc

    \u8bfb\u8005\u603b\u662f\u5728\u671f\u5f85\u627e\u5230\u4e00\u53e5\u8bdd\u91cc\u7684\u201c\u52a8\u8bcd\u201d\uff0c\u800c\u5982\u679c\u8fd9\u4e2a\u201c\u52a8\u8bcd\u201d\u592a\u96be\u627e\uff0c\u5c06\u4f1a\u5f71\u54cd\u6574\u53e5\u8bdd\u7684\u9605\u8bfb\u6548\u7387\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u4f60\u7684\u5185\u5bb9\u662f\u5426\u590d\u6742\uff0c\u627f\u8f7d\u8fd9\u4e9b\u5185\u5bb9\u7684\u8bed\u53e5\u90fd\u4e0d\u5e94\u5f53\u662f\u590d\u6742\u7684\u3002

    \u603b\u7684\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e9b\u539f\u5219\uff1a

    1. \u5220\u51cf\u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u5bf9\u6b64\u4fdd\u6301 \u654f\u611f \u548c \u65e0\u60c5\uff0c\u4e0d\u8981\u6297\u62d2\u91cd\u6784\u5b57\u53e5\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u5b9e\u9645\u542b\u4e49\u7684\u8bcd\uff0c\u4e00\u4e9b\u53ea\u6709\u8bed\u6c14\u4f5c\u7528\u7684\u8bcd\u7b49\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u610f\u4e49\u7684\u7f29\u5199\u548c\u672f\u8bed\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u524d\u540e\u8bed\u4e49\u91cd\u590d\u7684\u8bcd\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1aadv. \u4eec\uff1b
    2. \u66f4\u591a\u5730\u4f7f\u7528\u4e3b\u52a8\u8bed\u6001\uff08\u4e3b\u8c13\u5bbe\uff09\u800c\u975e\u88ab\u52a8\u8bed\u6001\uff1b
    3. \u56f4\u7ed5 \u52a8\u8bcd \u5199\u4f5c\uff1a\u4f7f\u7528\u5f3a\u52a8\u8bcd\uff0c\u907f\u514d\u5c06\u52a8\u8bcd\u53d8\u6210\u540d\u8bcd\uff0c\u5e76\u5c06\u52a8\u8bcd\u653e\u5728\u9192\u76ee\u7684\u4f4d\u7f6e\uff1b
    4. \u9ad8\u8003\u82f1\u8bed\u4f5c\u6587\u600e\u4e48\u5199\uff0c\u79d1\u5b66\u6587\u732e\u5c31\u4e0d\u8981\u600e\u4e48\u5199\uff1b

    \u51cf\u5c11\u6587\u7ae0\u4e2d\u7684\u6df7\u4e71\u6709\u5982\u4e0b\u65b9\u6cd5\uff1a

    \u8f6c\u5426\u5b9a\u4e3a\u80af\u5b9a

    from to not honest dishonest not harmful safe not important unimportant do not have lack do not remember forget do not pay attention to ignore do not succeed fail

    \u5220\u53bb\u8fc7\u5269\u7684 \"there are\" / \"there is\"

    \u5220\u53bb\u4e0d\u5fc5\u8981\u7684\u4ecb\u8bcd

    "},{"location":"cour_note/D2QD_DigitalDesign/","title":"\ud83d\udd2e \u6570\u5b57\u903b\u8f91\u8bbe\u8ba1 | Digital Design","text":"

    \u7ea6 382 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u6ce8\u610f\uff01

    \u672c\u7ad9\u90e8\u7f72\u5728 GitHub pages \u4e0a\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u5361\u987f\u60c5\u51b5\uff0c\u4f7f\u7528\u4ee3\u7406\u53ef\u4ee5\u6781\u5927\u4f18\u5316\u9605\u8bfb\u4f53\u9a8c\u3002

    \u8bfe\u7a0b\u4fe1\u606f

    \u5f88\u663e\u7136\uff0c\u6211\u70c2\u5c3e\u4e86\uff0c\u7b2c\u4e94\u7ae0\u5185\u5bb9\u5f88\u7b80\u964b\uff0c\u7b2c\u4e03\u7ae0\u57fa\u672c\u6ca1\u5199\uff0c\u5b9e\u5728\u662f\u8003\u524d\u6765\u4e0d\u53ca\u5199\u5b8c\u4e86\u3002\u4f46\u662f\u6211\u53ef\u4ee5\u4fdd\u8bc1\u9664\u6b64\u4e4b\u5916\u7684\u5185\u5bb9\u6211\u90fd\u662f\u4ed4\u7ec6\u63a8\u6572\u540e\u624d\u5199\u51fa\u6765\u7684orz\u3002

    \u6b64\u5916\uff0c\u5bf9\u4e8e\u6211\u5df2\u7ecf\u5199\u4e86\u7684\u5185\u5bb9\u6709\u7591\u4e49\uff0c\u6216\u662f\u5e0c\u671b\u80fd\u8865\u5145\u6211\u6ca1\u5199\u7684\u5185\u5bb9\uff0c\u6b22\u8fce\u63d0\u4ea4 PR\uff01

    List

    \u8865\u5929\u65f6\u5019\u7684\u4e00\u70b9\u60f3\u6cd5\uff0c\u56e0\u4e3a\u8bfe\u672c\u6bcf\u4e00\u7ae0\u90fd\u6709\u4e00\u4e2a summary\uff0c\u6240\u4ee5\u5982\u679c\u8981\u770b\u4e66\u7684\u8bdd\u6216\u8bb8\u53ef\u4ee5\u5148\u770b\u90a3\u4e2a summary \u518d\u770b\u5177\u4f53\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/","title":"Chap 1 Digital Systems and Information","text":"

    \u7ea6 2053 \u4e2a\u5b57 9 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4fe1\u606f\u8868\u8fbe--information-representation","title":"\u4fe1\u606f\u8868\u8fbe | Information Representation","text":"

    \u73b0\u5b9e\u4e16\u754c\u4e2d\u7684\u4fe1\u606f\u5f80\u5f80\u662f \u8fde\u7eed(continuous) \u7684\uff0c\u4f46\u5728\u4eba\u9020\u7269\u7684\u4e16\u754c\u4e2d\uff0c\u5927\u90e8\u5206\u4fe1\u606f\u90fd\u662f \u79bb\u6563(discrete) \u7684\u3002

    \u5728\u7535\u5b50\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u4fe1\u53f7\u5206\u4e3a \u6a21\u62df\u4fe1\u53f7(analog signal) \u548c \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e24\u79cd\u3002\u5176\u4e2d\uff0c\u5728 \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e2d\u53c8\u6709\u591a\u79cd\u8868\u793a\u65b9\u6cd5\uff0c\u5982\u4eca\u6211\u4eec\u6700\u5e38\u7528\u7684\u662f \u4e8c\u8fdb\u5236(binary)\u3002\u5bf9\u5e94\u5230\u7535\u8def\u5c42\u9762\uff0c\u6211\u4eec\u5e38\u5e38\u7528 \u9ad8\u7535\u4f4d(HIGH) \u548c \u4f4e\u7535\u4f4d(LOW) \u6765\u8868\u5f81 1 \u548c 0\u3002

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e2d\uff0c\u9ad8\u4f4e\u7535\u4f4d\u7684\u63a5\u53d7\u8303\u56f4\u662f\u4e0d\u540c\u7684\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8f93\u5165\u7684\u5224\u5b9a\u8303\u56f4\u6bd4\u8f93\u51fa\u7684\u5224\u5b9a\u8303\u56f4\u5927\uff0c\u5373 \u5bbd\u8fdb\u4e25\u51fa\u3002\u5176\u76ee\u7684\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u63d0\u9ad8\u7535\u8def\u5728\u566a\u97f3\u7b49\u5f02\u5e38\u5f71\u54cd\u4e0b\u4e5f\u80fd\u6b63\u5e38\u8868\u73b0\u7684\u80fd\u529b\u3002

    HIGH input LOW input HIGH output LOW output 0.6 ~ 1.1 -0.1 ~ 0.4 0.9 ~ 1.1 -0.1 ~ 0.1

    \u6216\u8bb8\u4f60\u4e5f\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u5728\u56fe\u4e2d\uff0cHIGH \u7684\u63a5\u53d7\u8303\u56f4\u548c LOW \u7684\u63a5\u53d7\u8303\u56f4\u4e4b\u95f4\u8fd8\u5b58\u5728\u4e00\u6bb5\u533a\u57df\u3002\u843d\u5728\u8fd9\u4e00\u90e8\u5206\u7684\u7535\u5e73\u662f \u672a\u5b9a\u4e49(undefined) \u7684\uff0c\u4e5f\u88ab\u79f0\u4e3a\u662f \u6d6e\u52a8(floating) \u7684\u3002\u5982\u679c\u8f93\u51fa\u7684\u7535\u5e73\u662f\u5728\u6d6e\u52a8\u533a\u95f4\u7684\uff0c\u90a3\u4e48\u5176\u8ba4\u5b9a\u503c\u5c06\u662f\u968f\u673a\u7684\u3002

    \u4e8b\u5b9e\u4e0a\uff0c\u5728\u4fe1\u606f\u7684\u5bf9\u5e94\u4e0a\uff0c\u867d\u7136\u5c06\u9ad8\u4f4e\u7535\u5e73\u540c HIGH/LOW \u8054\u7cfb\u662f\u5f88\u81ea\u7136\u7684\uff0c\u4f46\u662f\u5c06\u4ed6\u4eec\u540c true/false \u6216\u8005 1/0 \u8054\u7cfb\u5176\u5b9e\u5e76\u4e0d\u552f\u4e00\u3002\u4f46\u662f\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\uff08\u6211\u4eec\u79f0\u4e4b\u4e3a positive logic\uff09\uff0c\u6211\u4eec\u90fd\u8ba4\u4e3a HIGH ~ true ~ 1\uff0c LOW ~ false ~ 0\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c(b) \u56fe\u4e2d\u7684\u6a21\u62df\u4fe1\u53f7\u5728\u7ecf\u8fc7\u6211\u4eec\u7684\u5668\u4ef6\u540e\uff0c\u4f1a\u88ab\u8ba4\u4e3a\u662f (c) \u56fe\u6240\u793a\u7684\u4fe1\u53f7\u3002\u800c\u8fd9\u4e9b\u64cd\u4f5c\u5728\u786c\u4ef6\u5c42\u9762\uff0c\u6211\u4eec\u901a\u8fc7 \u6676\u4f53\u7ba1(transistors) \u6765\u5b9e\u73b0\u3002

    \u8fd9\u4e5f\u7275\u626f\u5230\u6211\u4eec\u4e3a\u4ec0\u4e48\u6700\u7ec8\u4f7f\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u4fe1\u606f\u3002\u4e00\u65b9\u9762\u662f\u56e0\u4e3a\u4e8c\u503c\u5668\u4ef6\u6bd4\u8f83\u5e38\u89c1\uff0c\u4ea6\u5373\u8fd9\u91cc\u63d0\u5230\u7684\u6676\u4f53\u7ba1\uff1b\u53e6\u5916\u4e00\u65b9\u9762\u662f\u4f7f\u7528\u4e8c\u8fdb\u5236\u53ef\u4ee5\u964d\u4f4e\u7535\u8def\u6210\u672c\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42--abstraction-layers-in-computer-systems-design","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42 | Abstraction Layers in Computer Systems Design","text":"\u8d8a\u4e0a\u5c42\u62bd\u8c61\u7a0b\u5ea6\u8d8a\u9ad8 Algorithms Programing Languages Operating Systems Instruction Set Architecture Microarchitecture Register Transfers Logic Gates Transistor Circuits"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u6570\u5b57\u7cfb\u7edf--number-systems","title":"\u6570\u5b57\u7cfb\u7edf | Number Systems","text":"

    \u9996\u5148\u9700\u8981\u6d89\u53ca\u7684\u95ee\u9898\u662f\u8fdb\u5236\u8f6c\u6362\u3002

    \u5bf9\u4e8e\u4e00\u4e2a \\(r\\) \u8fdb\u5236\u6570\uff0c\u5b83\u4e00\u822c\u88ab\u5199\u6210\u8fd9\u6837\uff1a

    \\[ (A_{n-1}A_{n-2}...A_1A_0A_{-1}...A_{-(m-1)}A_{-m})_{r} \\]

    \u800c\u5b83\u5bf9\u5e94\u7684\u5341\u8fdb\u5236\u771f\u503c\u4e3a\uff1a

    \\[ \\begin{aligned} \\sum_{i=-m}^{n-1} A_ir^i\\;\\; =&A_{n-1}r^{n-1}+A_{n-2}r^{n-2}+...\\\\ +&A_{1}r^{1}+A_0r^0+A_{-1}r^{-1}+...\\\\ +&A_{-(m-1)}r^{m-1}+A_{-m}r^{-m} \\end{aligned} \\]

    \u8ba1\u7b97\u673a\u9886\u57df\u5e38\u89c1\u7684\u8fdb\u5236\u4e3b\u8981\u662f \u4e8c\u8fdb\u5236(binary)\uff0c\u516b\u8fdb\u5236(octal)\uff0c\u5341\u8fdb\u5236(decimal) \u548c \u5341\u516d\u8fdb\u5236(hexadecimal)\u3002

    \u5176\u4e2d\u4e8c\u3001\u516b\u3001\u5341\u516d\u8fdb\u5236\u4e4b\u95f4\u7684\u8f6c\u6362\u975e\u5e38\u7b80\u5355\uff0c\u5b58\u5728\u591a\u4f4d\u5230\u4e00\u4f4d\u4e4b\u95f4\u7684\u65e0\u540e\u6548\u6027\u6620\u5c04\uff0c\u4f8b\u5982\u4e8c\u8fdb\u5236\u8f6c\u6362\u5230\u5341\u516d\u8fdb\u5236\u53ea\u9700\u8981\u5c06\u4ece\u4f4e\u5230\u9ad8\u6bcf\u56db\u4f4d\u8f6c\u5316\u6210\u5341\u516d\u8fdb\u5236\u4e2d\u7684\u4e00\u4f4d\u5373\u53ef\u3002

    \u9700\u8981\u6ce8\u610f\uff0c\u7531\u4e8e\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u5728\u96f6\u4f4d\u4e0a\u7684\u6743\u91cd\u76f8\u540c\uff0c\u8fd9\u610f\u5473\u7740\u5728\u6574\u6570\u90e8\u5206\uff0c\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u662f\u53ef\u4ee5\u76f8\u4e92\u7cbe\u51c6\u8f6c\u5316\u7684\uff08\u5373\u6700\u5c0f\u7cbe\u5ea6\u662f\u4e00\u81f4\u7684\uff0c\u90fd\u662f 1\uff09\uff1b\u7136\u800c\u8be5\u6027\u8d28\u5728\u5c0f\u6570\u90e8\u5206\u5e76\u4e0d\u6210\u7acb\uff08\u56e0\u4e3a\u5c0f\u6570\u90e8\u5206\u4e0d\u5b58\u5728\u201c\u6700\u5c0f\u7cbe\u5ea6\u201d\u4e00\u8bf4\uff09\uff0c\u5373\u5341\u8fdb\u5236\u65e0\u6cd5\u7cbe\u51c6\u8f6c\u5316\u4e3a\u4e8c\u8fdb\u5236\uff0c\u4f46\u4e8c\u8fdb\u5236\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5341\u8fdb\u5236\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7b97\u672f\u8fd0\u7b97--arithmetic-operations","title":"\u7b97\u672f\u8fd0\u7b97 | Arithmetic Operations","text":"

    \u8fd9\u91cc\u6d89\u53ca\u7684\u4e3b\u8981\u662f \u52a0\u6cd5(Addition)\u3001\u51cf\u6cd5(Subtraction)\u3001\u4e58\u6cd5(Multiplication)\u3002

    \u6574\u4f53\u6d41\u7a0b\u548c\u5c0f\u5b66\u7ad6\u5f0f\u52a0\u6cd5\u662f\u4e00\u81f4\u7684\u3002

    \u4e8c\u8fdb\u5236\u8fd0\u7b97

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7f16\u7801--codes","title":"\u7f16\u7801 | Codes","text":"

    \u4e8c\u8fdb\u5236\u7f16\u7801\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u72ec\u70ed\u7801--\u72ec\u51b7\u7801","title":"\u72ec\u70ed\u7801 & \u72ec\u51b7\u7801","text":"

    \u72ec\u70ed\u7801(one-hot) \u8981\u6c42\u6bd4\u7279\u5411\u91cf\u4e2d\u53ea\u6709\u4e00\u4f4d\u662f 1\uff1b\u5bf9\u5e94\u7684\u8fd8\u6709 \u72ec\u51b7\u7801(one-cold)\u3002

    \u4f7f\u7528\u8fd9\u79cd\u7f16\u7801\u7684\u597d\u5904\u662f\uff0c\u51b3\u5b9a\u6216\u6539\u53d8\u72b6\u6001\u673a\u76ee\u524d\u7684\u72b6\u6001\u7684\u6210\u672c\u76f8\u5bf9\u8f83\u4f4e\uff0c\u5bb9\u6613\u8bbe\u8ba1\u4e5f\u5bb9\u6613\u68c0\u6d4b\u975e\u6cd5\u884c\u4e3a\u7b49\u3002

    \u4f46\u662f\u76f8\u5bf9\u5e94\u7684\uff0c\u7f3a\u70b9\u662f\u4fe1\u606f\u8868\u793a\u7387\u8f83\u4f4e\uff0c\u975e\u6cd5\u72b6\u6001\u975e\u5e38\u591a\u800c\u6709\u6548\u72b6\u6001\u5f88\u5c11\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#bcd-\u7801","title":"BCD \u7801","text":"

    \u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6570\u636e\u8868\u8ff0\u90fd\u662f\u4ee5\u5341\u8fdb\u5236\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7814\u7a76\u5982\u4f55\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u5341\u8fdb\u5236\u3002

    \u9996\u5148\uff0c\u4e00\u4f4d\u4e8c\u8fdb\u5236\u6570\u80fd\u5305\u542b\u7684\u4fe1\u606f\u662f 1bit\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u201c\u771f\u201d\u6216\u8005\u4e00\u4e2a\u201c\u5047\u201d\u3002\u6211\u4eec\u79f0\u4e00\u4e2a\u62e5\u6709 n \u4e2a\u5143\u7d20\u7684\u4e8c\u8fdb\u5236\u5411\u91cf\u4e3a\u4e00\u4e2a n\u4f4d\u4e8c\u8fdb\u5236\u7f16\u7801(n-bit binary code)\u3002\u4e00\u4e2a n \u4f4d\u4e8c\u8fdb\u5236\u6570\u62e5\u6709 \\(2^{n}\\) \u79cd\u53ef\u80fd\u7684\u7ec4\u5408\uff0c\u56e0\u800c\u53ef\u4ee5\u8868\u793a \\(2^n\\) \u79cd\u4fe1\u606f\u3002

    \u800c\u6211\u4eec\u9700\u8981\u8bbe\u8ba1\u7684\u7f16\u7801\u7cfb\u7edf\uff0c\u5c31\u662f\u5c06\u6211\u4eec\u9700\u8981\u7684\u4fe1\u606f\u6620\u5c04\u5230\u8fd9 \\(2^n\\) \u4e2a\u201c\u7a7a\u4f4d\u201d\u4e2d\u3002\u5f53\u7136\uff0c\u5f53\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u4fe1\u606f\u6570\u91cf\u5e76\u4e0d\u662f 2 \u7684\u5e42\u6b21\u65f6\u5019\uff0c\u4f1a\u51fa\u73b0\u4e00\u4e9b \u672a\u5206\u914d(unassigned) \u7684\u6bd4\u7279\u7ec4\u5408\u3002

    \u800c\u5728\u8fd9\u79cd\u7f16\u7801\u4e2d\uff0c\u6700\u5e38\u7528\u7684\u5c31\u662f BCD\u7801(binary-coded demical)\u3002\u5176\u6838\u5fc3\u601d\u8def\u5c31\u662f\uff0c\u5c06\u5341\u8fdb\u5236\u7684\u6bcf\u4e00\u4f4d \u5206\u522b \u7528 \u771f\u503c\u76f8\u7b49\u7684 4 \u4f4d\u4e8c\u8fdb\u5236 \u8868\u793a\uff0c\u5373 0 ~ 9 \u5206\u522b\u7528 0000 ~ 1001 \u8868\u793a\u3002

    DecimalSymbol BCDDigit 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001

    eg

    \\[ \\mathrm{ (185)_{10}\\;=\\;(0001\\;1000\\;0101)_{BCD}\\;=\\;(10111001)_2 } \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4f59\u4e09\u7801","title":"\u4f59\u4e09\u7801","text":"

    \u4e00\u79cd BCD\u7801 \u7684\u6539\u8fdb\u662f \u4f59\u4e09\u7801(Excess3)\u3002\u5176\u6838\u5fc3\u601d\u8def\u662f\u5728 BCD\u7801\u7684\u57fa\u7840\u4e0a\uff0c\u589e\u52a0\u4e00\u4e2a\u5927\u5c0f\u4e3a 3 \u7684\u504f\u79fb\u91cf\u3002

    DecimalSymbol Excess3Digit 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 6 1001 7 1010 8 1011 9 1100

    \u4e3a\u4ec0\u4e48\u662f 3 \u5462\uff1f\u9996\u5148\u8fd9\u4e2a 3 \u6765\u81ea\u4e8e \\(\\frac{16-10}{2}\\)\uff0c\u4e5f\u5c31\u662f 8421 \u7801\u7684\u5bb9\u91cf\u51cf\u53bb\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u6570\u5b57\u6570\u91cf\uff0c\u518d\u9664\u4ee5\u4e8c\u3002\u8fd9\u6837\u7684\u597d\u5904\u662f\uff0c\u5341\u8fdb\u5236\u4e0b\u80fd\u8fdb\u4f4d\u7684\u4e24\u4e2a\u6570\uff0c\u5728\u4f59\u4e09\u7801\u4e0b\u76f8\u52a0\u4e5f\u521a\u597d\u8fdb\u4f4d\u3002

    \u4f46\u662f\u9700\u8981\u5f3a\u8c03\u7684\u4e00\u70b9\u662f\uff0c\u7f16\u7801\u548c\u6570\u503c\u662f\u5b58\u5728\u533a\u522b\u7684\uff0c\u867d\u7136\u6211\u4eec\u63d0\u5230\u4e86\u4f59\u4e09\u7801\u76f8\u52a0\uff0c\u4f46\u662f\u7f16\u7801\u505a\u8fd0\u7b97\u591a\u6570\u60c5\u51b5\u4e0b\u662f\u6ca1\u6709\u610f\u4e49\u7684\u3002\u201c\u8fd0\u7b97\u201d\u7684\u4e3b\u4f53\u66f4\u591a\u662f\u6570\u503c\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u683c\u96f7\u7801","title":"\u683c\u96f7\u7801","text":"

    \u6b64\u5916\uff0c\u8fd9\u91cc\u4e0d\u5f97\u4e0d\u63d0\u7684\u53e6\u5916\u4e00\u4e2a\u7f16\u7801\u662f \u683c\u96f7\u7801(Gray Codes)\u3002\u683c\u96f7\u7801\u7684\u7279\u5f81\uff0c\u4e5f\u662f\u4ed6\u7684\u4f18\u70b9\uff0c\u5c31\u662f\u76f8\u90bb\u7684\u4e24\u4e2a\u6570\u5728\u4e8c\u8fdb\u5236\u4e0b\u7684\u8868\u793a\u53ea\u5dee\u4e00\u4f4d\uff08\u5f53\u5728\u5360\u6ee1\u65f6\uff0c\u5bf9\u4e8e\u6574\u4e2a\u7f16\u7801\u5e8f\u5217\uff0c\u73af\u72b6\u6ee1\u8db3\u8be5\u6761\u4ef6\uff09\u3002

    \u6bd4\u5982\u6709\u5982\u4e0b\u5e94\u7528\uff1a

    \u4ee5\u53ca\u5728\u8bb8\u591a\u72b6\u6001\u63a7\u5236\u4e2d\u90fd\u6709\u7740\u5e7f\u6cdb\u7684\u5e94\u7528\u3002

    \u4ece\u7b14\u8bd5\u505a\u9898\u89d2\u5ea6\u6765\u8bf4\uff0c\u683c\u96f7\u7801\u6700\u9ebb\u70e6\u7684\u5176\u5b9e\u662f\u4e0e\u5341\u8fdb\u5236\u6570\u7684\u8f6c\u6362\u3002\uff08\u6b64\u5904 @CSP-S2019-Day1-T1\uff09

    \u4e2a\u4eba\u8ba4\u4e3a\u6700\u597d\u505a\u7684\u505a\u6cd5\u5c31\u662f\uff0c\u5047\u8bbe\u6211\u4eec\u8981\u627e\u7684\u662f\u7b2c k \u4e2a\u683c\u96f7\u7801\uff0c\u5219\u5bf9\u5e94\u7684\u683c\u96f7\u7801\u4e3a\uff1a

    \\[ k \\;\\;\\mathrm{XOR}\\;\\; (k>>1) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#ascii-\u7801","title":"ASCII \u7801","text":"

    \u5b57\u7b26\u7f16\u7801\u6240\u4f7f\u7528\u7684\u4e00\u822c\u662f ASCII \u7f16\u7801\uff0c\u7531\u4e8e ASCII \u5df2\u7ecf\u662f\u8001\u751f\u5e38\u8c08\u4e86\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u5947\u5076\u6821\u9a8c\u4f4d","title":"\u5947\u5076\u6821\u9a8c\u4f4d","text":"

    \u4fe1\u9053\u7f16\u7801\u4e0e\u4fe1\u6e90\u7f16\u7801\uff1a

    \u5728\u4fe1\u53f7\u4f20\u8f93\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u80fd\u7531\u4e8e\u73af\u5883\u5e72\u6270\u7b49\u539f\u56e0\uff0c\u51fa\u73b0\u5404\u79cd\u4fe1\u53f7\u6296\u52a8\uff0c\u6240\u4ee5\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u7684\u53ef\u4fe1\u5ea6\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u9519\u8bef\u68c0\u6d4b\u673a\u5236\u3002

    \u4e00\u79cd\u5e38\u89c1\u7684\u65b9\u6cd5\u662f \u5197\u4f59(Redundancy)\uff0c\u5373\u52a0\u5165\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u7528\u4ee5\u6821\u9a8c\u3002

    graph TD\nA[Error Detection Techniques]\nB[Single Parity Check]\nC[Cyclic Redundancy Check]\nD[Check Sum]\n\nA-->B\nA-->C\nA-->D

    \u5176\u4e2d\u4e00\u79cd\u505a\u6cd5\u662f\u5f15\u5165 \u5947\u5076\u6821\u9a8c\u4f4d(Parity Bit)\u3002\u5b83\u5206\u4e3a \u5947\u6821\u9a8c(Odd Parity) \u548c \u5076\u6821\u9a8c(Even Parity)\u3002\u5206\u522b\u901a\u8fc7\u5f15\u5165\u989d\u5916\u7684\u4e00\u4f4d\uff0c\u6765\u4fdd\u8bc1\u6574\u4e2a\u4fe1\u606f\u4e32\u4e2d 1 \u7684\u6570\u91cf\u662f\u5947\u6570/\u5076\u6570\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/","title":"Chap 2 Combinational Logic Circuits","text":"

    \u7ea6 8091 \u4e2a\u5b57 25 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 41 \u5206\u949f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u8fd0\u7b97","title":"\u903b\u8f91\u8fd0\u7b97","text":"

    \u903b\u8f91\u8fd0\u7b97\u7684\u5bf9\u8c61\u662f\u5e03\u5c14\u53d8\u91cf\uff0c\u4e5f\u5c31\u662f 0/1 \u4e8c\u503c\u3002

    \u4e3b\u8981\u7684\u8fd0\u7b97\u5c31\u662f \u4e0e(AND)\uff0c\u6216(OR)\uff0c\u975e(NOT)\uff0c\u5f02\u6216(XOR)\uff0c\u4ee5\u53ca \u4e0e\u975e(NAND)\uff0c\u6216\u975e(NOR)\uff0c\u540c\u6216(XNOR)\u3002

    \u9ad8\u7ef4

    \u591a\u8f93\u5165\u7684\u5f02\u6216\u548c\u540c\u6216\u88ab\u79f0\u4e3a\u5947\u51fd\u6570\u548c\u5076\u51fd\u6570\u3002

    \u53ef\u4ee5\u7528\u5b83\u4eec\u6765\u5b9e\u73b0\u5947\u6821\u9a8c\u548c\u5076\u6821\u9a8c\u3002

    \u800c\u4e14\u89c2\u5bdf\u5176\u5361\u8bfa\u56fe\u7684\u5f62\u72b6\uff08\u68cb\u76d8\u5f62\uff09\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u4eec\u662f\u5929\u7136\u4f18\u5316\u7684\uff0c\u5373\u4e0d\u53ef\u4f18\u5316\u7684\u3002

    \u8fd0\u7b97\u89c4\u5219\u633a\u7b80\u5355\u7684\uff0c\u5728\u6b64\u7565\u53bb\u3002

    \u6bd4\u8f83\u57fa\u7840\u7684\uff0c\u9700\u8981\u4e86\u89e3\u4e0e\u6216\u975e\u7684\u7b26\u53f7\u8868\u793a\u3002

    \u7531\u6b64\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u7ec4\u5408\uff0c\u4f8b\u5982\uff1a

    \u518d\u6b21\u8fd8\u9700\u8981\u63d0\u5230\u7684\u662f \u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b(De Morgan's Laws)\uff0c\u5176\u8868\u8ff0\u4e3a\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u95e8","title":"\u903b\u8f91\u95e8","text":"

    \u903b\u8f91\u95e8\u662f\u5728\u786c\u4ef6\u5c42\u9762\u4e0a\u5b9e\u73b0\u5e03\u5c14\u4ee3\u6570\u7684\u903b\u8f91\u5355\u5143\u3002\u5176\u64cd\u4f5c\u5bf9\u8c61\u4e3a\u9ad8\u4f4e\u7535\u5e73\u3002

    \u5982\u56fe\uff0c(a)\u4e2d\u7ed8\u5236\u4e86\u4e09\u4e2a\u5e38\u7528\u903b\u8f91\u95e8\u7684\u7b26\u53f7\uff1b(b)\u4e2d\u5219\u63cf\u8ff0\u4e86\u8fd9\u4e9b\u8fd0\u7b97\u5728 \u65f6\u5e8f\u56fe(timing diagram) \u4e2d\u7684\u72b6\u6001\uff1b(c)\u5219\u63cf\u8ff0\u4e86\u5728\u5ef6\u65f6\uff08\u89c1\u4e0b\uff09\u6548\u5e94\u4e0b\u7684\u65f6\u5e8f\u56fe\u3002

    \u8fd8\u6709\u4e00\u4e2a\u6ce8\u610f\u70b9\u662f\uff0c\u975e\u95e8\u5176\u5b9e\u66f4\u591a\u7684\u88ab\u79f0\u4e3a inverter\uff0c\u800c\u975e NOT\u3002

    \u4f46\u662f\u7531\u4e8e\u662f\u7269\u7406\u5c42\u9762\u7684\u5b9e\u73b0\uff0c\u6240\u4ee5\u4f1a\u6709\u4e00\u4e9b\u903b\u8f91\u8fd0\u7b97\u5c42\u9762\u4e0d\u4f1a\u51fa\u73b0\u7684\u95ee\u9898\uff0c\u6bd4\u5982 \u5ef6\u65f6(delay)\u3002

    Source: https://en.wikipedia.org/wiki/Signal_propagation_delay#Electronics

    \u5ef6\u65f6\u7684\u957f\u77ed\u4e0e\u5f88\u591a\u56e0\u7d20\u6709\u5173\uff0c\u53d6\u51b3\u4e8e\u903b\u8f91\u95e8\u7684\u5b9e\u73b0\u6280\u672f\u3002\u800c\u4e14\u901a\u5e38\u6765\u8bf4\uff0c\u5bf9\u4e8e\u4e0d\u540c\u8fd0\u7b97\u53c2\u6570\uff0c\u5176\u5ef6\u65f6\u4e5f\u4f1a\u6709\u4e0d\u540c\u3002

    \u6b64\u5916\uff0c\u4e0e\u95e8\u548c\u6216\u95e8\u53ef\u80fd\u6709\u66f4\u591a\u7684\u8f93\u5165\u5f15\u811a\uff0c\u5982\u4e0b\uff1a

    \u81f3\u6b64\uff0c\u7ed9\u51fa\u4e86 AND, OR, NOT \u4e09\u4e2a\u95e8\u7684\u7b26\u53f7\u8868\u793a\uff0c\u7c7b\u4f3c\u4e0a\u4e00\u5c0f\u8282\u63d0\u5230\u7684\u90a3\u6837\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5229\u7528\u8fd9\u4e09\u4e2a\u57fa\u7840\u7684\u95e8\u7535\u8def\u6765\u6784\u6210\u5176\u4ed6\u7684\u95e8\u7535\u8def\uff08\u867d\u7136\u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u662f\u901a\u8fc7 NAND + NOT \u6765\u5b9e\u73b0 AND \u7684\uff09\u3002

    \u4e8e\u662f\u53c8\u5f15\u7533\u51fa\u4e00\u4e2a\u6982\u5ff5\u2014\u2014\u901a\u7528\u95e8(Universal Gate)\u3002\u4e00\u4e2a\u529f\u80fd\u5b8c\u5168\u7684\uff0c\u80fd\u591f\u8868\u793a\u5176\u4ed6\u6240\u6709\u95e8\u7684\u903b\u8f91\u95e8\u88ab\u79f0\u4e3a\u901a\u7528\u95e8\uff0c\u5728\u6211\u4eec\u5b66\u8fc7\u7684\u903b\u8f91\u95e8\u4e2d\uff0cNAND \u548c NOR \u90fd\u662f\u901a\u7528\u95e8\u3002

    \u63a8\u8350\u9605\u8bfb

    Universal Logic gates can be used to produce any other logic or Boolean function with the NAND and NOR gates being minimal

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5e03\u5c14\u4ee3\u6570","title":"\u5e03\u5c14\u4ee3\u6570","text":"

    literal ~ \u5b57\u9762\u91cf\uff0c\u4e5f\u5c31\u662f\u201c\u53d8\u91cf\u201d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b","title":"\u8fd0\u7b97\u5f8b","text":"

    \u8fd9\u5f20\u56fe\u7247\u603b\u7ed3\u4e86\u5e03\u5c14\u8fd0\u7b97\u4e2d\u7684\u8fd0\u7b97\u5f8b\uff0c\u4e2a\u4eba\u611f\u89c9\u6700\u9700\u8981\u5f3a\u5316\u8bb0\u5fc6\u7684\u662f 15 \u6761\uff0c\u56e0\u4e3a\u5e03\u5c14\u4ee3\u6570\u501f\u7528\u4e86\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\uff0c\u4f46\u7b2c 15 \u6761\u5728\u666e\u901a\u4ee3\u6570\u4e2d\u5e76\u4e0d\u6210\u7acb\uff0c\u6240\u4ee5\u5bf9\u4e8e\u4e60\u60ef\u8fd9\u5957\u7b26\u53f7\u7684\u4eba\u6765\u8bf4\u53ef\u80fd\u4e0d\u592a straightfoward\u3002

    \u5728\u8bb0\u5fc6\u8fd9\u5957\u8fd0\u7b97\u89c4\u5f8b\u7684\u65f6\u5019\uff0c\u6211\u4e2a\u4eba\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u4e00\u5b9a\u8981\u5efa\u7acb \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\u89c2\u5ff5\u3002\u6211\u4eec\u4e60\u60ef\u7528\u201c\u771f\u201d\u53bb\u7406\u89e3\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5982\u679c\u4f60\u4ee5\u201c\u5047\u201d\u4e3a\u4e3b\u4f53\u53bb\u5206\u6790\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f1a\u53d1\u73b0\u548c\u201c\u771f\u201d\u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u3002\u6362\u8a00\u4e4b\uff0c \u4e0e \u548c \u6216 \u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u8fd0\u7b97\uff0c\u800c\u975e\u50cf\u4ed6\u4eec\u501f\u7528\u7684\u7b26\u53f7 \\(\\times\\) \u548c \\(+\\) \u90a3\u6837\u5b58\u5728\u975e\u5bf9\u79f0\u5173\u7cfb\u3002

    \u4f46\u662f\u8ba9\u8fd9\u4ef6\u4e8b\u53d8\u5f97\u53c8\u6ca1\u90a3\u4e48\u7b80\u5355\u7684\u4e8b\u60c5\u662f\uff0c\u867d\u7136 \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u501f\u7528\u666e\u901a\u4ee3\u6570\u7b26\u53f7\u4f53\u7cfb\u7684\u540c\u65f6\uff0c\u53c8\u4eba\u4e3a\u5730\u7ed9\u4ed6\u4eec\u6dfb\u52a0\u4e86\u4f18\u5148\u7ea7\uff08\u4f46\u662f\u8fd9\u4e5f\u662f\u5fc5\u8981\u7684\uff0c\u5426\u5219\u8868\u8fbe\u5f0f\u5c31\u4f1a\u5145\u6ee1\u62ec\u53f7\uff09\u3002

    \u4f18\u5148\u7ea7\u4ece\u9ad8\u5230\u4f4e\u4f9d\u6b21\u4e3a\uff1a

    1. \u62ec\u53f7 / ()\uff1b
    2. \u975e / NOT / \\(\\overline A\\)\uff1b
    3. \u4e0e / AND / \\(\\cdot\\)\uff1b
    4. \u6216 / OR / \\(+\\)\uff1b

    \u4e2a\u4eba\u611f\u89c9\uff0c\u8fd9\u4e00\u79cd\u601d\u8def\u5e76\u4e0d\u76f4\u89c9\uff0c\u5c24\u5176\u662f\u501f\u7528\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\u4f53\u7cfb\u4ee5\u540e\u66f4\u52a0\u6df7\u6dc6\uff0c\u6240\u4ee5\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u7ec3\u4e60\u6765\u6446\u8131\u8fd9\u4e9b\u201c\u523b\u677f\u5370\u8c61\u201d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b\u63a8\u5e7f","title":"\u8fd0\u7b97\u5f8b\u63a8\u5e7f","text":"

    \u9664\u6b64\u4e4b\u5916\uff0c\u4ece\u4e0a\u9762\u63d0\u5230\u7684\u8fd0\u7b97\u5f8b\u4e2d\u8fd8\u80fd\u63a8\u5e7f\u51fa\u5982\u4e0b\u51e0\u4e2a\u6a21\u578b\uff1a

    \u5bf9\u6bd4\u524d\u4e09\u4e2a\u548c\u540e\u4e09\u4e2a\uff0c\u6211\u4eec\u518d\u6b21\u53d1\u73b0\uff0c\u4e0e \u548c \u6216 \u5728\u903b\u8f91\u4e0a\u662f\u5bf9\u79f0\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5bf9\u5076\u6cd5\u5219","title":"\u5bf9\u5076\u6cd5\u5219","text":"

    \u5bf9\u5076\u6cd5\u5219(Duality Rule)\uff1a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u7684 \u5bf9\u5076(dual) \u4e3a\uff0c\u5c06\u6240\u6709\u7684 \u4e0e \u548c \u6216 \u5bf9\u8c03\u5f97\u5230\u7684\u5f0f\u5b50\uff08\u6ce8\u610f\uff01\u9700\u8981\u4fdd\u8bc1\u53c2\u4e0e\u8fd0\u7b97\u7684\u7ed3\u6784\u4e0d\u80fd\u53d8\uff08\u662f\u201c\u5e26\u62ec\u53f7\u201d\u7684\u5b8f\u5c55\u5f00\uff09\uff0c\u6bd4\u5982 \u4e00\u822c\u60c5\u51b5\u4e0b \\(A\\cdot B\\) \u4f1a\u88ab\u5bf9\u5076\u4e3a \\((A+B)\\) \u4ee5\u4fdd\u8bc1\u8fd0\u7b97\u987a\u5e8f\uff09\u3002

    eg

    \u800c\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u9664\u975e\u67d0\u4e2a\u8868\u8fbe\u5f0f\u662f \u81ea\u5bf9\u5076(self-dual) \u7684\uff0c\u90a3\u4e48\u5b83\u7684\u8868\u73b0\u90fd\u4e0e\u539f\u8868\u8fbe\u5f0f\u4e0d\u540c\u3002

    \u5bf9\u5076\u8868\u8fbe\u5f0f\u5177\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e92\u8865\u51fd\u6570","title":"\u4e92\u8865\u51fd\u6570","text":"

    \u4e00\u4e2a \u51fd\u6570\u7684\u4e92\u8865(Complement of a Function) \u6307\u7684\u662f\uff0c\u5c06\u5b83\u7684 \u5bf9\u5076\u51fd\u6570 \u4e2d\u6bcf\u4e00\u4e2a \u53d8\u91cf \u90fd\u53d6\u53cd\u5f97\u5230\u7684\u51fd\u6570\uff0c\u800c\u8be5\u51fd\u6570\u6b63\u597d\u7b49\u4e8e\u539f\u51fd\u6570\u7684 \u975e\u3002

    eg

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u66ff\u4ee3\u6cd5\u5219","title":"\u66ff\u4ee3\u6cd5\u5219","text":"

    \u66ff\u4ee3\u6cd5\u5219(Substitution Rules): \u5982\u679c\u5c06\u4e00\u4e2a\u7b49\u5f0f\u4e2d \u6240\u6709\u7684 \u67d0\u4e2a\u53d8\u91cf \u90fd\u66ff\u6362\u4e3a\u540c\u4e00\u4e2a\u8868\u8fbe\u5f0f\uff0c\u5219\u7b49\u5f0f\u4f9d\u7136\u6210\u7acb\u3002

    eg

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e00\u81f4\u6027\u5b9a\u7406","title":"\u4e00\u81f4\u6027\u5b9a\u7406","text":"

    \u5728\u7b80\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u7684\u65f6\u5019\uff0c\u4e00\u81f4\u6027\u5b9a\u7406(Consensus Theorem) \u4e5f\u5f88\u6709\u7528\uff1a

    \\[ XY+\\overline{X}Z+YZ=XY+\\overline{X}Z \\]

    \u5176\u8bc1\u660e\u7684\u7b2c\u4e00\u6b65\u662f\u8fd9\u6837\u7684\uff1a \\(XY+\\overline{X}Z+YZ=XY+\\overline{X}Z+(X+\\overline{X})YZ\\)\uff0c\u90a3\u540e\u9762\u5c31\u5f88\u7b80\u5355\u4e86\u3002\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7b49\u5f0f\u662f\u5229\u7528\u4e86\u88c2\u9879\uff0c\u9700\u8981\u5c06\u5176\u4e2d\u6700\u672c\u8d28\u7684\u90e8\u5206\uff0c\u6700\u5c0f\u7684\u7c92\u5ea6\u7ed9\u88c2\u5f00\u6765\uff0c\u7136\u540e\u518d\u6162\u6162\u6d88\u6389\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","title":"\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","text":"

    \u7531\u4e8e\u672c\u8d28\u4e0a\u76f8\u7b49\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u5b9e\u9645\u4e0a\u6709\u5f88\u591a\u79cd\u5199\u6cd5\uff0c\u800c\u4e14\u968f\u7740\u53d8\u91cf\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u4ed6\u4eec\u4e4b\u95f4\u7684\u6bd4\u8f83\u4f1a\u5f88\u56f0\u96be\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u5f62\u5f0f\uff0c\u4f7f\u5f97\u6240\u6709\u76f8\u540c\u7684\u8868\u8fbe\u5f0f\u90fd\u80fd\u6bd4\u8f83\u65b9\u4fbf\u7684\u201c\u5316\u7b80\u201d\u4e3a\u540c\u4e00\u4e2a\u5f62\u5f0f\uff0c\u540c\u65f6\u4e5f\u80fd\u8fa8\u522b\u51fa\u4e24\u4e2a\u8868\u8fbe\u5f0f\u662f\u4e0d\u540c\u7684\u3002\u8fd9\u5c31\u5f15\u5165\u4e86 \u6807\u51c6\u5f62\u5f0f(Standard Forms)\uff0c\u5305\u62ec SOP \u548c POS\uff1b\u4ee5\u53ca \u89c4\u8303\u5f62\u5f0f(Canonical Forms)\uff0c\u5206\u522b\u4e3a \u6700\u5c0f\u9879\u4e4b\u548c(Sum of Minterms, SOM) \u548c \u6700\u5927\u9879\u4e4b\u79ef(Product of Maxterms, POM)\u3002

    \u4e3a\u4e86\u65b9\u4fbf\u63cf\u8ff0\uff0c\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u5148\u7ed9\u51fa\u8fd9\u6837\u4e00\u5f20 \ud83c\udf30 \u771f\u503c\u8868\u3002

    \ud83c\udf30 Index X Y Z Output 0 / 000 0 0 0 0 1 / 001 0 0 1 0 2 / 010 0 1 0 1 3 / 011 0 1 1 0 4 / 100 1 0 0 1 5 / 101 1 0 1 1 6 / 110 1 1 0 0 7 / 111 1 1 1 1

    \u6570\u503c\u662f\u968f\u4fbf\u6413\u7684\uff0c\u8bf7\u7559\u610f\u4e3a\u4ec0\u4e48\u4e3a\u8981\u5728 Index \u7279\u5730\u5199\u51fa\u4e8c\u8fdb\u5236\u7684\u8868\u8ff0\u3002

    \u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u9700\u8981\u5f3a\u8c03\uff0c\u6211\u4eec\u5f15\u5165 SOM \u548c POM \u7684\u76ee\u7684\u662f\u5bfb\u627e\u4e00\u79cd\u6bd4\u8f83\u5178\u578b\u7684 \u8868\u8fbe\uff0c\u4f7f\u5f97\u4ed6\u4eec\u80fd\u591f \u786e\u5b9a \u4e00\u5f20\u771f\u503c\u8868\u3002\u5373\uff0c\u77e5\u9053\u8fd9\u79cd \u8868\u8fbe \u6211\u4eec\u5c31\u8db3\u591f\u5199\u51fa\u8fd9\u5f20\u771f\u503c\u8868\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5c0f\u9879\u4e4b\u548c-som","title":"\u6700\u5c0f\u9879\u4e4b\u548c SOM","text":"

    \u8bfe\u672c\u4e2d\u5bf9\u6700\u5c0f\u9879\u7684\u63cf\u8ff0\u662f\uff1a

    A product term in which all the variables appear exactly once, either complemented or uncomplemented, is called minterm.

    Its characteristic property is that it represents exactly one combination of binary variable values in the truth table.

    \u7528\u6211\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u5c31\u662f\u6311\u51fa\u771f\u503c\u8868\u4e2d\u6240\u6709\u7ed3\u679c\u662f 1 \u7684\u6700\u5c0f\u9879\uff08\u6bd4\u8f83\u6a21\u7cca\u4f46\u76f4\u89c2\uff0c\u6240\u4ee5\u8bf7\u5148\u56eb\u56f5\u541e\u67a3\uff0c\u6211\u5728\u201c\u8ffd\u52a0\u8bf4\u660e\u201d\u4f1a\u8fdb\u4e00\u6b65\u8bf4\u660e\uff09\u7136\u540e OR \u8d77\u6765\u3002\u663e\u7136\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u542b\u4e49\u5c31\u662f\uff0c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u4e86\u8fd9\u51e0\u4e2a\u201c\u6700\u5c0f\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f 1\uff0c\u7b26\u5408\u4e86 OR \u7684\u201c\u67091\u5f971\u201d\u7684\u89c4\u5219\u3002

    \u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(m_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5c0f\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

    \u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 1 \u7684\u9879\u6709\uff1a010 100 101 111 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(m_{2}=\\overline{X}Y\\overline{Z}, \\; m_{4}=X\\overline{Y}\\overline{Z}, \\; m_{5}=X\\overline{Y}Z, \\; m_{7}=XYZ\\)\uff0c\u8fd9\u4e9b\u53d8\u91cf\u8868\u8fbe\u5f0f\u90fd\u662f\u5f53\u4e14\u4ec5\u5f53\u53d8\u91cf\u7ec4\u5408\u4e3a\u5bf9\u5e94\u9879\u65f6\u624d\u4f1a\u53d6 1 \u7684\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a\uff0c\u8fd9\u5199\u8868\u8fbe\u5f0f\u552f\u4e00\u8868\u8fbe\u4e86\u8fd9\u4e9b\u771f\u503c\u8868\u4e2d\u7684 1\u3002

    \u8ffd\u52a0\u8bf4\u660e\uff08\u7b80\u5355\uff0c\u4f46\u662f\u5efa\u8bae\u770b\u4e00\u770b\uff09

    \u6216\u8bb8\u60a8\u89c9\u5f97\u6700\u5c0f\u9879\u7684\u5f97\u5230\u975e\u5e38\u7684\u81ea\u7136\u4e14\u7b80\u5355\uff0c\u6211\u5efa\u8bae\u60a8\u4e5f\u5c1d\u8bd5\u7740\u770b\u4e00\u770b\u8ffd\u52a0\u8bf4\u660e\uff0c\u56e0\u4e3a\u8fd9\u5bf9\u7406\u89e3\u6700\u5927\u9879\u633a\u6709\u5e2e\u52a9\u7684\u3002

    \u90a3\u4e48\u4ec0\u4e48\u662f\u201c\u5217\u4e3e\u201d\u5462\uff1f\u8ba9\u6211\u4eec\u518d\u770b\u4e00\u773c\u4e0a\u9762\u5bf9\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u63cf\u8ff0\uff1a\u201c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5c0f\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f\u771f\u201d\uff0c\u8ffd\u672c\u6eaf\u6e90\uff0c\u5728\u6700\u5c0f\u9879\u4e2d\uff0c\u6211\u4eec\u5c31\u9700\u8981\u505a\u5230\u53ea\u6709\u5f53\u4e00\u4e2a\u7535\u8def\u7684\u72b6\u6001\u662f\u7279\u5b9a\u7ec4\u5408\u65f6\uff0c\u5176\u8fd4\u56de\u503c\u4e3a 1\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(m_{5}=X\\overline{Y}Z\\)\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u4e00\u79cd\u66f4\u5570\u55e6\u7684\u65b9\u5f0f\u8868\u8fbe\u51fa\u6765\u662f\u8fd9\u6837\u7684\uff1a

    if(X == 1 && Y == 0 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

    \uff08\u5faa\u5e8f\u6e10\u8fdb\uff09\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u53d8\u5316\u4e3a\u8fd9\u6837\uff1a

    if(X == 1 && (!Y) == 1 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

    \u5982\u679c\u4f60\u719f\u6089\u201c\u538b\u884c\u201d\u6280\u5de7\uff0c\u90a3\u4e48\u8fd9\u4e00\u6bb5\u90fd\u53ef\u4ee5\u5199\u6210\uff1a

    Output = (X == 1 && (!Y) == 1 && Z == 1);\n

    \u800c\u8fd9\u4e2a\u903b\u8f91\u8868\u8fbe\u5f0f\uff0c\u5b9e\u9645\u4e0a\u5df2\u7ecf\u548c \\(m_5=X\\overline{Y}Z\\) \u4e00\u6a21\u4e00\u6837\u4e86\u3002

    \u5728\u8fd9\u91cc\u7ed9\u51fa\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002\uff08\u8fd9\u91cc\u4e4b\u6240\u4ee5\u5199\u7684\u662f \\(f\\) \u800c\u4e0d\u662f 1\uff0c\u662f\u4e3a\u4e86\u7ed9\u4e4b\u540e\u5206\u6790 POM \u505a\u94fa\u57ab\uff0c\u5bf9\u4e8e POM\uff0c0 \u624d\u662f\u552f\u4e00\u8868\u8fbe\u7684\u7279\u5f81\u7ed3\u679c\u3002\uff09

    \u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 SOM\uff1a

    \\[ \\begin{array}{l} F(X,Y,Z) & = \\sum m(2,4,5,7) \\\\ & = m_2+m_4+m_5+m_7 \\\\ & = \\overline{X}Y\\overline{Z}+X\\overline{Y}\\,\\overline{Z}+X\\overline{Y}Z+XYZ \\end{array} \\]

    \u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 1 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u548c\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff08\u4e8b\u5b9e\u4e0a\u4e0d\u505a\u5316\u7b80\u7684\u8bdd\u4f60\u4e5f\u53ea\u80fd\u6ee1\u8db3\u4e00\u9879\u7684\u503c\u53d6\u5230 1\uff09\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 1\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5927\u9879\u4e4b\u79ef-pom","title":"\u6700\u5927\u9879\u4e4b\u79ef POM","text":"

    \u5c31\u50cf\u6211\u4e4b\u524d\u4e0d\u65ad\u4e0d\u65ad\u4e0d\u65ad\u5f3a\u8c03\u7684\uff0c\u6240\u8c13\u7684 1 \u548c 0 \u90fd\u53ea\u662f\u4eba\u4e3a\u5b9a\u4e49\u7684\uff0c\u6446\u8131\u6f5c\u610f\u8bc6\u91cc\u5bf9\u8fd9\u4e24\u8005\u4e4b\u4e00\u7684\u503e\u5411\uff08\u4f8b\u5982\u6211\u672c\u4eba\u5c31\u4e00\u76f4\u5f88\u503e\u5411\u4e8e\u4ee5 1 \u4e3a\u4e3b\u4f53\u7814\u7a76\u95ee\u9898\uff09\u4f1a\u5bf9\u7406\u89e3\u6700\u5927\u9879\u4e4b\u79ef\u548c\u903b\u8f91\u8868\u8fbe\u5f0f\u5316\u7b80\u5f88\u6709\u5e2e\u52a9\u3002

    \u800c\u6700\u5927\u9879\u4e4b\u79ef\u2014\u2014\u4ee5\u6211\u4e2a\u4eba\u7684\u611a\u89c1\u2014\u2014\u5c31\u662f\u4ee5 0 \u4e3a\u4e3b\u4f53\u6765\u7814\u7a76\u771f\u503c\u8868\u7684\u7279\u5f81\u7684\u3002

    \u8bfe\u672c\u4e2d\u5bf9\u6700\u5927\u9879\u7684\u63cf\u8ff0\u662f\uff1a

    A sum term that contains all the variables in complemented or uncomplemented form is called a maxterm.

    \u4e0e\u6700\u5c0f\u9879\u5bf9\u6bd4\uff0c\u65e0\u975e\u662f\u628a \"product term\" \u6362\u6210\u4e86 \"sum term\"\uff0c\u4e5f\u5c31\u662f\u628a AND \u6362\u6210\u4e86 OR\u3002

    \u800c\u6700\u5927\u9879\u4e4b\u79ef\uff0c\u5c31\u662f\u6311\u51fa\u6240\u6709\u7ed3\u679c\u4e3a 0 \u7684\u6700\u5927\u9879\uff08\u201c\u6311\u51fa\u201d\u7684\u5b9a\u4e49\u6211\u5df2\u7ecf\u5728 SOM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u7ed9\u51fa\uff0c\u5728 POM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u6211\u8fd8\u4f1a\u518d\u4e00\u6b21\u63d0\u53ca\uff09\uff0c\u518d\u505a AND\u3002\u4ee5 1 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u662f\u201c\u90fd1\u51fa1\u201d\uff0c\u800c\u4ee5 0 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u5219\u662f\u201c\u67090\u51fa0\u201d\uff0c\u8fd9\u4e0e OR \u7684\u201c\u67091\u51fa1\u201d\u4e5f\u662f\u9ad8\u5ea6\u5bf9\u79f0\u7684\uff08\u53cd\u4e4b\u4ea6\u7136\uff09\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u7684\u542b\u4e49\u662f\uff0c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u201c\u6700\u5927\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u3002

    \u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(M_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5927\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

    \u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 0 \u7684\u9879\u6709\uff1a000 001 011 110 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(M_{0}=X+Y+Z, \\; M_{1}=X+Y+\\overline{Z}, \\; M_{3}=X+\\overline{Y}+\\overline{Z}, \\; M_{6}=\\overline{X}+\\overline{Y}+Z\\)\u3002\u53ef\u4ee5\u68c0\u9a8c\uff0c\u53ea\u6709\u4ee3\u5165\u4ed6\u4eec\u5bf9\u5e94\u7684\u90a3\u4e00\u884c\u771f\u503c\u8868\u7ec4\u5408\u65f6\uff0c\u4ed6\u4eec\u624d\u4f1a\u5f97\u5230 0\u3002

    \u8ffd\u52a0\u8bf4\u660e

    \u540c\u6837\u7684\uff0c\u56de\u987e\u6700\u5927\u9879\u4e4b\u79ef\u7684\u63cf\u8ff0\uff1a\u201c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5927\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u201d\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u5982\u4e0b\u63cf\u8ff0\uff1a

    if(X == 1 && Y == 1 && Z == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

    \u56de\u987e\u6700\u5927\u9879\u7684\u76ee\u7684\u662f\u6ee1\u8db3\u8fd9\u4e2a\u5206\u652f\u6761\u4ef6\u7684\u60c5\u51b5\u4e0b\u8f93\u51fa 0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u9700\u8981\u8868\u8fbe (X == 1 && Y == 1 && Z == 0) \u8fd9\u4e2a\u903b\u8f91\u6761\u4ef6\u3002\u4f46\u7531\u4e8e\u6700\u5927\u9879\u7684\u5b9e\u73b0\u5f62\u5f0f\u662f OR\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06 && \u7684\u5f0f\u5b50\u4ee5 || \u7684\u5f62\u5f0f\u8868\u8fbe\u3002

    \u5f53\u7136\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u5404\u79cd\u8fd0\u7b97\u5f8b\u6765\u5316\u7b80\uff0c\u4f46\u662f\u4e0d\u59a8\u60f3\u4e00\u60f3 AND \u548c OR \u7684\u8fd0\u7b97\u7279\u5f81\uff0c\u524d\u8005\u662f\u201c\u67090\u51fa0\u201d\uff0c\u540e\u8005\u662f\u201c\u67091\u51fa1\u201d\u3002\u800c\u5bf9\u4e8e AND \u6765\u8bf4\uff0c\u60f3\u8981\u505a\u5230\u6761\u4ef6\u7b5b\u9009\uff0c\u5c31\u9700\u8981\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 1\uff0c\u6700\u540e\u5982\u679c\u7b5b\u9009\u6210\u529f\u7ed3\u679c\u5c31\u662f 1\uff1b\u5bf9\u4e8e OR \u6765\u8bf4\uff0c\u5c31\u662f\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 0\uff0c\u5982\u679c \u7b5b\u9009\u6210\u529f \u7684\u7ed3\u679c\u5c31\u662f 0\u3002\u4e5f\u5c31\u662f\u8bf4\u5bf9\u4e8e\u6216\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8868\u793a\uff1a

    if((X == 0 || Y == 0 || (!Z) == 0) == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

    \u540c\u6837\u8fdb\u884c\u4e00\u4e0b\u538b\u884c\uff1a

    // It might be too complex.\nOutput = !((X == 0 || Y == 0 || (!Z) == 0) == 0);\n// So we can simplify it.\nOutput = (X == 0 || Y == 0 || (!Z) == 0);\n

    \u8fd9\u4e5f\u6b63\u5bf9\u5e94\u4e86 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\u3002

    \u518d\u6b21\u7ed9\u51fa\u8fd9\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002

    \u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 POM\uff1a

    \\[ \\begin{aligned} F(X,Y,Z) & = \\prod M(0,1,3,6) \\\\ & = M_0M_1M_3M_6 \\\\ & = (X+Y+Z)(X+Y+\\overline{Z})(X+\\overline{Y}+\\overline{Z})(\\overline{X}+\\overline{Y}+Z) \\end{aligned} \\]

    \u540c\u6837\u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 0 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u79ef\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 0\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 1\u3002

    \u4e0e\u6700\u5c0f\u9879\u76f8\u6bd4\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u7684 1 \u7684\u53ef\u80fd\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u662f 0 \u7684\u53ef\u80fd\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u503c\u8868\u8fbe\u5f0f\u6765\u8bf4\uff0c\u4e24\u79cd \u8868\u8fbe \u90fd\u662f\u5145\u8981\u7684\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u8fd8\u80fd\u53d1\u73b0\uff1a

    \u4f8b\u5982\uff1a\\(M_5 = \\overline{X} + Y + \\overline{Z} = \\overline{ X\\overline{Y}Z } = \\overline{m}_5\\)

    \u5173\u4e8e\u8fd9\u4e2a\u53d1\u73b0\u7684\u66f4\u591a\u7684\u4f8b\u5b50\u548c\u8bf4\u660e\uff0c\u53ef\u4ee5\u770b\u4e0b\u9762\u7684\u7b2c\u4e00\u4e2a\u7ec3\u4e60\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ec3\u4e60","title":"\u7ec3\u4e60","text":"

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u4e00\u4e9b\u4f8b\u5b50\u6765\u8fdb\u4e00\u6b65\u5f3a\u5316\u8fd9\u4e9b\u7406\u89e3\uff0c\u5e76\u4e14\u6316\u6398\u4e00\u4e9b\u795e\u5947\u7684\u7279\u6027\u3002

    \u9898\u9762\u7b54\u6848

    \u8bf7\u5206\u522b\u5199\u51fa\u5982\u4e0b\u771f\u503c\u8868\u4e2d \\(F\\) \u548c \\(\\overline{F}\\) \u7684 SOM \u548c POM\u3002

    \u7b54\u6848\uff1a \\begin{array}{l} \\overline{F}(X,Y,Z) & = \\sum m(1,3,4,6) \\\\ & = \\overline{X}\\,\\overline{Y}Z + \\overline{X}YZ + X\\overline{Y}\\,\\overline{Z} + XY\\overline{Z} \\\\ & = \\prod M(0,2,5,7) \\\\ & = (X+Y+Z)(X+\\overline{Y}+Z)(\\overline{X}+Y+\\overline{Z})(\\overline{X}+\\overline{Y}+\\overline{Z}) \\end{array} \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\u4e00\u4ef6\u5f88\u6709\u610f\u601d\u7684\u4e8b\u60c5\uff0c\\(F\\) \u7684 SOM \u7684\u4e0b\u6807\u4e0e \\(\\overline{F}\\) \u7684 POM \u7684\u4e0b\u6807\u662f\u4e00\u6837\u7684\uff1b\u5f53\u7136\u5bf9\u4e8e \\(F\\) \u7684 POM \u548c \\(\\overline{F}\\) \u7684 SOM \u4e5f\u662f\u4e00\u6837\u7684\u3002\u8fd9\u53c8\u5370\u8bc1\u4e86\u5bf9\u79f0\u6027\u3002

    \u4e4b\u540e\u7684\u7ec3\u4e60\u7b49\u6211\u505a\u4e86\u518d\u6dfb\u52a0x \u5982\u679c\u505a\u4e86\u7684\u8bddx \ud83d\ude0b

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","title":"\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","text":"

    \u5f15\u5165

    \u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u6807\u51c6\u5f62\u5f0f\u6765\u5f97\u5230\u5bf9\u5e94\u7684\u7535\u8def\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u60c5\u51b5\u4e2d\uff0c\u8fd9\u6837\u505a\u4f1a\u5bfc\u81f4\u6210\u672c\u8fc7\u9ad8\u4ee5\u53ca\u7535\u8def\u590d\u6742\uff08\u56e0\u4e3a\u95e8\u592a\u591a\u4e86\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5bf9\u7535\u8def\u8fdb\u884c\u4f18\u5316\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u4ecb\u7ecd\u901a\u8fc7 \u5361\u8bfa\u56fe(Karnaugh map) \u6765\u4f18\u5316\u903b\u8f91\u7535\u8def\u7684\u65b9\u6cd5\u3002

    \u4e0d\u8fc7\u518d\u5f00\u59cb\u201c\u4f18\u5316\u201d\u7684\u8bdd\u9898\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4ec0\u4e48\u662f\u201c\u4f18\u201d\uff0c\u4e5f\u5c31\u662f\u7ed9\u51fa\u4e00\u4e2a\u7535\u8def\u6210\u672c\u7684\u8861\u91cf\u4f9d\u636e\uff0c\u5373 \u6210\u672c\u6807\u51c6(cost criteria)\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6210\u672c\u6807\u51c6","title":"\u6210\u672c\u6807\u51c6","text":"

    \u5728\u6210\u672c\u6807\u51c6\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u7684\u4e3b\u8981\u6709\u4e09\u79cd\u6807\u51c6\uff0c\u5206\u522b\u662f\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","title":"\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","text":"

    \u5f88\u76f4\u767d\uff0c\u5c31\u662f\u6309\u7167\u8868\u8fbe\u5f0f\u4e2d\u6709\u591a\u5c11\u5b57\u9762\u91cf\u6765\u8ba1\u7b97\uff0c\u4f8b\u5982\uff1a

    \u53ef\u4ee5\u60f3\u8c61\uff0c\u867d\u7136\u8fd9\u79cd\u8ba1\u7b97\u65b9\u6cd5\u975e\u5e38\u7684\u7b80\u5355\uff0c\u4f46\u662f\u611f\u89c9\u4e0d\u592a\u9760\u8c31\u3002\u6bd4\u5982\uff0c\u540e\u9762\u4e24\u4e2a\u4f8b\u5b50\uff0c\u867d\u7136\u4ed6\u4eec\u7684 literal cost \u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\u663e\u7136\u5f00\u9500\u4e0d\u592a\u4e00\u6837\uff08\u56e0\u4e3a\u4e00\u4e2a\u662f 3+3 \u4e00\u4e2a\u662f 2+2+2\uff09\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u5408\u9002\u7684\u8ba1\u7b97\u65b9\u6cd5\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u95e8\u8f93\u5165\u8ba1","title":"\u6309\u95e8\u8f93\u5165\u8ba1","text":"

    \u6309\u7167\u95e8\u8f93\u5165\u8ba1\u5c31\u662f\u6309\u7167\u903b\u8f91\u95e8\u8f93\u5165\u5f15\u811a\u7684\u603b\u4e2a\u6570\u6765\u8ba1\u7b97\uff0c\u8fd9\u91cc\u7684\u8f93\u5165\u5e76\u4e0d\u4ec5\u4ec5\u662f\u76f4\u63a5\u6765\u81ea\u4e8e\u5b57\u9762\u91cf\u8f93\u5165\u7684\u90a3\u4e9b\u5f15\u811a\uff0c\u4e5f\u5305\u62ec\u5b57\u9762\u91cf\u505a\u8fd0\u7b97\u540e\u5f97\u5230\u7684\u7ed3\u679c\u4f5c\u4e3a\u8f93\u5165\u4f20\u5165\u4e0b\u4e00\u7ea7\u903b\u8f91\u95e8\u7684\u5f15\u811a\u3002

    \u6ce8\u610f

    \u867d\u7136\u975e\u95e8\u4e5f\u662f\u95e8\uff0c\u4f46\u662f\u6211\u4eec\u901a\u5e38\u4e0d\u628a\u975e\u95e8\u76f4\u63a5\u8ba1\u5165 gate-input cost\uff0c\u6240\u4ee5\u63a5\u4e0b\u6765\u63d0\u5230\u7684\u201c\u8f93\u5165\u5f15\u811a\u201d\u9ed8\u8ba4\u662f\u4e0d\u5305\u542b\u975e\u95e8\u7684\u8f93\u5165\u5f15\u811a\u7684\u3002

    \u4f8b\u5982\u8fd9\u5f20\u5bf9\u5e94\u8868\u8fbe\u5f0f \\(F = A+BC+\\overline{B}\\,\\overline{C}\\) \u7684\u56fe\u4e2d\uff1a

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u4e00\u5171\u6709 5 + 2 = 7 \u4e2a\u8f93\u5165\u5f15\u811a\uff0c\u4ee5\u53ca 2 \u4e2a\u975e\u95e8\u8f93\u5165\u5f15\u811a\u3002

    \u4ece\u8868\u8fbe\u5f0f\u6765\u770b\uff0c\u5b83\u53ef\u4ee5\u770b\u4f5c\u662f\u6bcf\u4e00\u5c42\u8fd0\u7b97\u7684\u53c2\u6570\u6570\u91cf\u6c42\u548c\uff0c\u4e0d\u8fc7\u6211\u4eec\u5ffd\u7565\u975e\u95e8\u3002

    \u4f8b\u5982\uff0c\u5f0f\u5b50 \\(F=AB+\\overline{B}C+C\\overline{D}\\) \u4e2d\uff0c\u6700\u9876\u5c42\u7684\u8fd0\u7b97\u662f\u4e00\u4e2a\u4e09\u8f93\u5165\u6216\u8fd0\u7b97\uff0c\u6240\u4ee5\u6709 3 \u4e2a\u8f93\u5165\uff1b\u63a5\u4e0b\u6765\u6709\u4e09\u4e2a\u4e8c\u8f93\u5165\u4e0e\u8fd0\u7b97\uff0c\u6240\u4ee5\u5404\u8ba1 2 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171 2 * 3 = 6 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171\u662f 9 \u4e2a\u8f93\u5165\u3002

    \u5f53\u7136\uff0c\u5b9e\u9645\u4e0a\u4ece\u5e95\u5c42\u5f80\u4e0a\u6570\u66f4\u65b9\u4fbf\uff1a

    \u603b\u4e4b\uff0c\u5c31\u662f\u7c7b\u4f3c\u4e8e\u5728\u505a\u7b97\u5f0f\u5316\u7b80\uff0c\u6bcf\u505a\u4e00\u6b21\u5316\u7b80\u90fd\u9700\u8981\u8ba1\u5165\u4e00\u6b21\u64cd\u4f5c\u6570\u7684\u6570\u91cf\u3002

    \u800c\u5bf9\u4e8e gate-input cost with NOTs\uff0c\u53ea\u8981\u518d\u989d\u5916\u8ba1\u5165\u975e\u95e8\u7684\u8f93\u5165\u5373\u53ef\u3002\u4f8b\u5982\u4e0a\u9762\u90a3\u4e2a\u5f0f\u5b50\uff1a

    \u6ce8\u610f

    \u5982\u679c\u51fa\u73b0\u4e86\u6bd4\u5982 \\(F=\\overline{A}B+\\overline{A}C\\) \u7684\u60c5\u51b5\uff0c\u975e\u95e8\u53ea\u9700\u8981\u8ba1 1 \u4e2a\uff0c\u56e0\u4e3a\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u628a\u975e\u4e86\u4ee5\u540e\u7684\u4e1c\u897f\u5f53\u4f5c\u4e86\u4e00\u4e2a\u5b57\u9762\u91cf\u518d\u7528\u7684\uff0c\u5728\u5b9e\u9645\u7535\u8def\u4e2d\uff0c\u6211\u4eec\u53ea\u9700\u8981\u975e\u4e00\u6b21\uff0c\u4e4b\u540e\u53ea\u9700\u8981\u628a\u8fd9\u4e2a\u8f93\u51fa\u503c\u62ff\u8d70\u53bb\u7528\u5c31\u884c\u3002

    \u63a5\u4e0b\u6765\u653e\u51e0\u9053\u4f8b\u9898\u3002

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=ABC+\\overline{A}\\,\\overline{B}\\,\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=(A+\\overline{C})(\\overline{B}+C)(\\overline{A}+B)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=(A+\\overline{B})(A+D)(B+C+\\overline{D})(\\overline{B}+\\overline{C}+D)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u8fd9\u91cc\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=BD+A\\overline{B}C+A\\overline{B}\\,\\overline{D}+AB\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=\\overline{A}\\,\\overline{C}(B+\\overline{D})+AC(B+\\overline{D})\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u8fd0\u7b97\uff0c\u4ee5 \\(\\overline{A}\\,\\overline{C}(B+\\overline{D})\\) \u4e3a\u4f8b\uff0c\u81ea\u9876\u5411\u4e0b\u662f\uff1a\u24f5\u4e09\u8f93\u5165\u4e0e\u95e8\uff0c\u24f6\u4e8c\u8f93\u5165\u6216\u95e8\uff1b\u6240\u4ee5\u5e94\u8be5\u662f \\(1^{\\overline{A}} + 1^{\\overline{C}} + 1^{B} + 1^{\\overline{D}} + 1^{B+\\overline{D}} + 1^{\\overline{A}\\,\\overline{C}(B+\\overline{D})}\\)\uff0c\u5373 6\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe","title":"\u5361\u8bfa\u56fe","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u601d\u60f3","title":"\u5361\u8bfa\u56fe\u7684\u601d\u60f3","text":"

    \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u6700\u76f4\u767d\u7684\u601d\u60f3\u5c31\u662f\u51cf\u5c11\u95e8\u7535\u8def\uff0c\u4e5f\u5c31\u662f\u53bb\u51cf\u5c11 gate-input cost\u3002\u90a3\u4e48\u8981\u5982\u4f55\u505a\u5462\uff1f

    \u6211\u4eec\u8003\u8651\u5230\u903b\u8f91\u8fd0\u7b97\u5f8b\u4e2d\u7684\u8fd9\u4e2a\u63a8\u5e7f\uff1a\\(XY+X\\overline{Y}=X(Y+\\overline{Y})=X\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u4e24\u4e2a\u6700\u5c0f\u9879\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u90a3\u4e48\u4ed6\u4eec\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u5f53\u7136\uff0c\u5bf9\u79f0\u7684\uff0c\u6839\u636e\\((X+\\overline{Y})(X+Y)=X+Y\\overline{Y}=X\\)\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u7ed3\u8bba\u5bf9\u6700\u5927\u9879\u4e5f\u6210\u7acb\u3002

    \u662f\u4e0d\u662f\u89c9\u5f97\u201c\u53ea\u5dee\u4e00\u4e2a\u201d\u5f88\u8033\u719f\uff1f\u662f\u7684\uff01\u6211\u4eec\u60f3\u5230\u4e86\u683c\u96f7\u7801\uff01\u5047\u8bbe\u6211\u4eec\u5c06 n \u4e2a\u5b57\u9762\u91cf\u6392\u5217\u6210\u4e00\u4e2a n bits \u7684\u5411\u91cf\uff0c\u90a3\u4e48\u53ea\u9700\u8981\u6309\u7167\u683c\u96f7\u7801\u6392\u5e8f\uff0c\u4e00\u65e6\u53d1\u73b0\u6709\u76f8\u90bb\u7684\u6700\u5c0f\u9879\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5408\u5e76\u4ed6\u4eec\u3002

    \u4f46\u8fd9\u8fd8\u4e0d\u591f\u5145\u5206\uff0c\u4f8b\u5982\u5728\u4e00\u4e2a\u6709\u4e09\u4e2a\u5b57\u9762\u91cf\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e2d\uff0c\u201c\u4e0e\u4e00\u4e2a\u8868\u8fbe\u5f0f\u76f8\u90bb\u201d\u7684\u8868\u8fbe\u5f0f\u5176\u5b9e\u6709\u4e09\u4e2a\uff0c\u4f46\u662f\u7528\u7ebf\u6027\u7684\u8868\u793a\u65b9\u6cd5\u53c8\u6ca1\u6cd5\u5f88\u597d\u7684\u8868\u793a\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u60f3\u5230\u5c06\u5b83\u5199\u6210\u4e00\u5f20\u4e8c\u7ef4\u7684\u8868\uff0c\u5373\u5c06\u5b57\u9762\u91cf\u62c6\u6210\u4e24\u7ec4 bit \u5411\u91cf\uff0c\u5404\u81ea\u6309\u7167\u683c\u96f7\u7801\u6392\u5217\uff0c\u5f62\u6210\u4e00\u5f20\u4e8c\u7ef4\u8868\uff0c\u8fd9\u5c31\u662f \u5361\u8bfa\u56fe(Karnaugh Map)\uff0c\u4e5f\u53eb K-map\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4efb\u610f\u4e24\u4e2a\u76f8\u90bb\u7684\u683c\u5b50\u90fd\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u800c\u4e14\u662f\u5145\u8981\u7684\uff0c\u5373\u6240\u6709\u201c\u76f8\u90bb\u201d\u90fd\u53ef\u4ee5\u5728\u8fd9\u5f20\u56fe\u8868\u73b0\u51fa\u6765\u3002

    \u8bf4\u660e

    \u7531\u4e8e\u683c\u96f7\u7801\u7684\u6027\u8d28\u662f\u4e00\u4e2a\u5728\u201c\u6ee1\u201d\u72b6\u6001\u4e0b \u73af\u72b6\u6210\u7acb \u7684\u6027\u8d28\uff0c\u6240\u4ee5\u5361\u8bfa\u56fe\u4e5f\u9700\u8981\u7528\u201c\u73af\u72b6\u201d\u7684\u601d\u8def\u53bb\u770b\uff0c\u8fd9\u91cc\u53ef\u4ee5\u8054\u60f3\u4e00\u4e0b\u884c\u5217\u5f0f\u7684\u5f62\u8c61\u5316\u8ba1\u7b97\u65b9\u6cd5\uff0c\u5c06\u8fd9\u5f20\u8868\u5f53\u4f5c\u4e00\u4e2a\u65e0\u9650\u6269\u5c55\u7684\u8868\u683c\u3002

    \u601d\u8003\u9898

    \u5728\u8fd9\u91cc\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u7740\u611f\u53d7\u4e00\u4e0b\u4e24\u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\u4e0b\uff0c\u5373\u5b9e\u9645\u4e0a\u201c\u76f8\u90bb\u4e5f\u53ea\u67092\u4e2a\u201d\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u3002\u4e8b\u5b9e\u4e0a\uff0c\u4e09\u4e2a\u5b57\u9762\u91cf\u4e5f\u53ea\u6709\u201c3\u4e2a\u76f8\u90bb\u201d\uff0c\u4f46\u662f\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u7528\u660e\u660e\u6709\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u6765\u5b9e\u73b0\u5462\uff1f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","title":"\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","text":"

    \u7136\u800c\uff0c\u4e0a\u9762\u7684\u8bf4\u6cd5\u5176\u5b9e\u5f88\u7275\u5f3a\u3002\u56e0\u4e3a\u4e00\u5f20\u4e8c\u7ef4\u8868\u4e2d\uff0c\u80fd\u4e0e\u4e00\u4e2a\u5143\u7d20\u76f8\u90bb\u7684\u5143\u7d20\u6700\u591a\u53ea\u6709\u56db\u4e2a\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u6491\u6b7b\u4e5f\u53ea\u80fd\u7528\u5361\u8bfa\u56fe\u8868\u793a 4 \u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\uff08\u5f53\u7136\u66f4\u591a\u7684\u53d8\u91cf\u4e5f\u6709\u5904\u7406\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u591a\u5c11\u6709\u70b9\u9ebb\u70e6\u4e86\uff09\u3002\u56e0\u6b64\uff0c\u5b9e\u9645\u4e0a\u5361\u8bfa\u56fe\u53ea\u80fd\u7528\u4e8e\u5316\u7b80\u975e\u5e38\u7b80\u5355\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u3002

    cm \u8001\u5e08\u5982\u662f\u8bf4

    \u66f4\u591a\u60c5\u51b5\u4e0b\uff0c\u5361\u8bfa\u56fe\u5b9e\u9645\u4e0a\u53ea\u9002\u5408\u6211\u4eec\u505a\u9898\u3002\u4f46\u662f\u5176\u601d\u8def\u662f\u975e\u5e38\u6709\u610f\u601d\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","title":"\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","text":"

    \u8fd9\u91cc\u6211\u4eec\u4ee5 3 \u5143\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e3a\u4f8b\uff0c2 \u5143\u548c 4 \u5143\u7684\u601d\u8def\u662f\u4e00\u6837\u7684\u3002

    \u540c\u6837\uff0c\u4e3e\u4e00\u4e2a \ud83c\udf30 \uff1a\\(F(X,Y,Z) = \\sum m(2,3,4,5)\\)

    \u9996\u5148\u6211\u4eec\u6309\u7167\u6bd4\u7279\u5411\u91cf\u7684\u5f62\u5f0f\u628a\u6700\u5c0f\u9879\u5199\u51fa\u6765\uff1a

    \u503c X Y Z 2 0 1 0 3 0 1 1 4 1 0 0 5 1 0 1

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u7ed8\u5236\u5361\u8bfa\u56fe\uff0c\u6211\u4eec\u5c06 bit \u5411\u91cf [x, y, z] \u62c6\u6210 [x] \u548c [y, z] \u505a\u5982\u4e0b\u8868\u683c\uff1a

    yz = 00 yz = 01 yz = 11 yz = 10 x = 0 0 0 1 1 x = 1 1 1 0 0

    \u53e6\u5916\u4e00\u79cd\u6807\u6ce8\u8868\u683c\u7684\u65b9\u5f0f\u662f\u8fd9\u6837\uff0c\u5b83\u53ef\u80fd\u66f4\u6e05\u6670\uff1a

    \u4f46\u662f\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u683c\u96f7\u7801\u3002

    4 \u5143\u5b57\u9762\u91cf\u7684\u5361\u8bfa\u56fe\u5219\u957f\u8fd9\u4e2a\u6837\u5b50\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","title":"\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","text":"

    \u5df2\u7ecf\u8bb2\u4e86\u601d\u60f3\u548c\u5361\u8bfa\u56fe\u7684\u7ed3\u6784\uff0c\u90a3\u4e48\u5230\u5e95\u8981\u5982\u4f55\u5229\u7528\u5361\u8bfa\u56fe\u8fdb\u884c\u4f18\u5316\u5462\uff1f

    \u8ba9\u6211\u4eec\u56de\u987e\u4f18\u5316\u7684\u65b9\u6cd5\uff0c\u5373\u5408\u5e76\u76f8\u90bb\u4e24\u9879\uff0c\u4e5f\u5c31\u662f\u627e\u5230\u5361\u8bfa\u56fe\u4e2d\u76f8\u90bb\u7684\u90e8\u5206\u3002\u4f46\u662f\u8fd9\u4e0d\u591f\uff0c\u6211\u4eec\u8fd8\u8981\u601d\u8003\u662f\u4e0d\u662f\u80fd\u5408\u5e76\u5df2\u7ecf\u76f8\u90bb\u7684\u90e8\u5206\uff0c\u6bd4\u5982\uff1a

    \u6211\u4eec\u901a\u8fc7\u5361\u8bfa\u56fe\uff0c\u9996\u5148\u5408\u5e76\u4e86 \\(WXYZ\\) \u548c \\(WXY\\overline{Z}\\)\uff0c\\(WX\\overline{Y}Z\\) \u548c \\(WX\\overline{Y}\\,\\overline{Z}\\)\uff0c\u5206\u522b\u5f97\u5230\u4e86 \\(WXY\\) \u548c \\(WX\\overline{Y}\\)\uff0c\u663e\u7136\u8fd9\u4e24\u4e2a\u4e1c\u897f\u4e5f\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u800c\u5728\u5361\u8bfa\u56fe\u4e0a\uff0c\u8fd9\u8868\u73b0\u4e3a\u4e24\u4e2a\u76f8\u90bb\u7684 1*2 \u7684\u77e9\u5f62\u3002

    \u603b\u800c\u8a00\u4e4b\uff0c\u8fd9\u79cd\u8fed\u4ee3\u5408\u5e76\u7684\u884c\u4e3a\u6700\u7ec8\u53ef\u4ee5\u5212\u5f52\u4e3a\u8fd9\u6837\u4e00\u4e2a\u884c\u4e3a\uff1a

    \u6211\u4eec\u5728\u5361\u8bfa\u56fe\u4e2d\u5bfb\u627e\u82e5\u5e72 \u6781\u5927 \u7684 2 \u5e42\u77e9\u5f62\uff0c\u5373\u5143\u7d20\u4e2a\u6570\u4e3a 2 \u7684\u5e42\u6b21\uff08\u81ea\u7136\u8fb9\u957f\u4e5f\u90fd\u4e3a 2 \u7684\u5e42\u6b21\uff09\u7684\u77e9\u5f62\uff0c\u800c\u6bcf\u4e00\u4e2a\u77e9\u5f62\u6240\u8986\u76d6\u7684\u5143\u7d20\u90fd\u5e94\u8be5\u662f \u6700\u5c0f\u9879/\u6700\u5927\u9879\uff08\u4e00\u822c\u90fd\u662f\u505a\u6700\u5c0f\u9879\uff09\u3002\u9700\u8981\u6ce8\u610f\uff0c\u201c\u5faa\u73af\u201d\u7684\u6027\u8d28\u4ecd\u7136\u6ee1\u8db3\uff0c\u5373\u7b2c\u4e00\u5217\u548c\u6700\u540e\u4e00\u5217\uff0c\u7b2c\u4e00\u884c\u548c\u6700\u540e\u4e00\u884c\u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u76f8\u90bb\u7684\u3002

    \u4f8b\u5982\uff1a

    \u4f8b\u5982\uff1a

    \u518d\u4f8b\u5982\uff1a

    \u90fd\u662f\u5408\u7406\u7684\u5361\u8bfa\u56fe\u5212\u5206\u3002

    \u5728\u5f97\u5230\u8fd9\u4e9b\u5212\u5206\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u5c06\u8fd9\u4e9b\u9879\u62ce\u51fa\u6765\uff0c\u5199\u51fa\u5b83\u4eec\u7684\u8868\u8fbe\u5f0f\u3002

    \u800c\u81f3\u4e8e\u5982\u4f55\u62ce\u51fa\u6765\u2014\u2014\u4e0d\u96be\u53d1\u73b0\uff0c\u5982\u679c\u4e00\u4e2a\u65b9\u6846\u4e2d\uff0c\u67d0\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u503c\u65e2\u53ef\u4ee5\u662f 0\uff0c\u53c8\u53ef\u4ee5\u662f 1 \u65f6\uff08\u8fd9\u91cc\u6307\u7684\u662f\u8f93\u5165\u7684\u503c\uff0c\u5e76\u975e\u8f93\u51fa\u7ed3\u679c\uff09\uff0c\u5728\u8fd9\u4e2a\u4f18\u5316\u9879\u7684\u7ed3\u679c\u4e2d\u5c31\u53ef\u4ee5\u4e0d\u7528\u5199\u51fa\u8fd9\u4e2a\u5b57\u9762\u91cf\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u8fd9\u4e2a\u5b57\u9762\u91cf \\(X\\) \u7684\u503c\u90fd\u662f 0\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(\\overline{X}\\)\uff0c\u5982\u679c\u90fd\u662f 1\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(X\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u5229\u7528\u5361\u8bfa\u56fe\u4f18\u5316 \\(F(X,Y,Z) = \\sum m(0,1,2,4,6,7)\\) \u7684\u7ed3\u679c\u3002

    \u753b\u51fa\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u5bf9\u5e94\u7684\u5361\u8bfa\u56fe\uff1a

    \u7136\u540e\u5212\u51fa\u5176\u4e2d\u7684\u6781\u5927\u6700\u5c0f\u9879\u4f18\u5316\u9879\uff1a

    \u5199\u51fa\u6765\u662f\uff1a

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u4f18\u5316\u7ed3\u679c\u662f \\(F = \\overline{X}\\,\\overline{Y} + \\overline{Z} + XY\\)

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e0d\u5b9a\u9879","title":"\u4e0d\u5b9a\u9879","text":"

    \u63a8\u8350\u9605\u8bfb

    https://www.geeksforgeeks.org/dont-care-x-conditions-in-k-maps/

    \u4e0d\u5b9a\u9879(Don't Cares) \u6307\u7684\u662f\u9700\u8981\u5316\u7b80\u7684\u903b\u8f91\u51fd\u6570\u4e2d\uff0c\u6ca1\u6709\u7ed9\u51fa\u5b9a\u4e49\u7684\u51e0\u9879\uff0c\u5b83\u4eec\u53ef\u80fd\u662f\uff1a

    \u5bf9\u4e8e\u8fd9\u79cd\u9879\uff0c\u5728\u5361\u8bfa\u56fe\u4e2d\u7528 X \u6765\u8868\u793a\uff0c\u5728\u6700\u5c0f\u9879\u4e4b\u548c\u4e2d\u7528 \\(\\sum d(...)\\) \u8868\u793a\u3002\u6211\u4eec\u53ef\u4ee5\u968f\u610f\u5b9a\u4e49\u5b83\u4eec\u7684\u8f93\u51fa\uff0c\u6b64\u65f6\u5c31\u53ef\u4ee5\u5229\u7528\u8fd9\u4e9b\u9879\u6765\u65b9\u4fbf\u6211\u4eec\u7684\u4f18\u5316\u2014\u2014\u5f53\u6211\u4eec\u753b\u51fa\u6765\u7684\u6781\u5927\u77e9\u9635\u8d8a\u5927\uff0c\u6210\u672c\u5c31\u8d8a\u4f4e\u3002

    \u4f8b\u5982\uff0c\u6211\u4eec\u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570\uff0c\u5f53\u8f93\u5165\u7684 BCD \u7801\u8868\u793a\u7684\u6570\u5b57\u5927\u4e8e\u7b49\u4e8e 5 \u65f6\u8fd4\u56de 1\uff0c\u5219\u5b83\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u7684\u5f62\u5f0f\u6765\u4f18\u5316\uff1a

    \u6839\u636e\u7ed3\u679c\uff0c\u5199\u51fa\u4f18\u5316\u540e\u7684\u8868\u8fbe\u5f0f\u4e3a\uff1a\\(F(W,X,Y,Z) = W + XY + XZ\\)\u3002

    \u7531\u5361\u8bfa\u56fe\u5f97\u5230\u4e58\u79ef\u7ed3\u679c

    \u5c3d\u7ba1\u6211\u4eec\u4e0d\u505c\u5f3a\u8c03 \u4e0e \u548c \u6216 \u662f\u5bf9\u79f0\u7684\uff0c\u4f46\u662f\u4ecd\u7136\u6709\u5f88\u591a\u64cd\u4f5c\u662f\u9274\u4e8e\u6211\u4eec\u5bf9 1 \u7684\u504f\u7231\u624d\u4f1a\u987a\u624b\u7684\uff08\u4f60\u4f1a\u53d1\u73b0\uff0c\u628a\u4e58\u9664\u6362\u6210\u6211\u4eec\u5b8c\u5168\u4e0d\u719f\u6089\u7684\u7b26\u53f7\uff0c\u4f60\u751a\u81f3\u53ef\u80fd\u65e0\u4ece\u4e0b\u624b\uff09\u3002

    \u6240\u4ee5\uff0c\u5728\u5361\u8bfa\u56fe\u7684\u95ee\u9898\u4e2d\uff0c\u5982\u679c\u8981\u5229\u7528\u5361\u8bfa\u56fe\u5f97\u5230 \\(F\\) \u4f18\u5316\u540e\u7684\u4e58\u79ef\u5f62\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u6c42 \\(\\overline{F}\\) \u4f18\u5316\u540e\u7684\u548c\u5f62\u5f0f\uff0c\u7136\u540e\u518d\u5bf9\u5176\u53d6\u53cd\u8fc7\uff0c\u5229\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

    \u5177\u4f53\u6765\u8bf4\u5c31\u662f\u53cd\u8f6c K-map \u4e2d\u6240\u6709\u7684 0 \u548c 1\uff0c\u7136\u540e\u7740\u773c\u4e8e SOM \u8fdb\u884c\u4f18\u5316\uff0c\u6700\u540e\u518d\u5bf9\u7ed3\u679c\u53d6\u53cd\uff0c\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

    eg

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8574\u542b\u9879\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","title":"\u8574\u542b\u9879\u3001\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","text":"

    \u8574\u542b\u9879(implicant) \u5206\u4e3a \u4e3b\u8574\u542b\u9879(prime implicant) \u548c \u57fa\u672c\u4e3b\u8574\u542b\u9879(essential prime implicant)\u3002

    \u5982\u56fe\uff0c\u5de6\u4fa7\u7684\u4e24\u4e2a\u4e3b\u8574\u542b\u9879\u56e0\u4e3a\u5305\u62ec\u4e86 \u24f5 \u548c \u24f6 \u8fd9\u4e24\u4e2a\u552f\u4e00\u7684 1\uff0c\u6240\u4ee5\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\uff1b

    \u800c\u53f3\u4fa7\u7684\u8574\u542b\u9879\u5219\u662f\u4e00\u4e2a\u5197\u4f59\u7684\u8574\u542b\u9879\uff1b

    \u6ce8\u610f

    \u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\uff0c\u4e3b\u8574\u542b\u9879\u4e00\u5b9a\u5b58\u5728\uff0c\u4f46\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\u4e0d\u4e00\u5b9a\u5b58\u5728\u3002

    \ud83e\udd14

    \u6b63\u56e0\u4e3a\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u5b58\u5728\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4efb\u610f\u51fd\u6570\uff0c\u4f18\u5316\u7684\u591a\u89e3\u7ed3\u679c\u603b\u6709\u4e00\u90e8\u5206\u662f\u4e0d\u53d8\u7684\uff08\u53ea\u4e0d\u8fc7\u6ca1\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u65f6\u5019\u8fd9\u90e8\u5206\u4e3a\u96f6\uff09\u3002

    \u9ea6\u514b\u62c9\u594e\u56e0\u7b97\u6cd5

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ecf\u5178\u7ec4\u5408\u7535\u8def","title":"\u7ecf\u5178\u7ec4\u5408\u7535\u8def","text":"

    \u5f15\u5165

    \u5728\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e9b\u73b0\u6210\u7684\u7ec4\u5408\u7535\u8def\u80fd\u591f\u4f7f\u7528\uff0c\u6765\u65b9\u4fbf\u6211\u4eec\u8bbe\u8ba1\u3002

    \u4e0d\u8fc7\u6211\u6ca1\u6709\u5168\u5199\u51fa\u6765\uff1b

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e09\u6001\u95e8","title":"\u4e09\u6001\u95e8","text":"

    \u4e09\u6001\u7f13\u51b2\u5668(3-State Buffer)

    \u9664\u4e86\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u5b83\u8fd8\u6709\u4e00\u4e2a \u4f7f\u80fd\u7aef(enable) \u6765\u63a7\u5236\u8f93\u51fa\u3002

    \u6240\u8c13\u7684\u4e09\u6001\u6307\u7684\u662f\uff1a

    \u4f5c\u7528

    \u6211\u4eec\u53ef\u4ee5\u7528\u4e09\u6001\u95e8\u6765\u89e3\u51b3\u591a\u8def\u8f93\u51fa\u4e92\u8054\u7684\u95ee\u9898\u3002\u6b63\u5982\u5728 ICS \u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\uff0c\u53ef\u4ee5\u8ba9\u591a\u4e2a\u8f93\u5165\u5728\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u88ab\u8f93\u51fa\u5230\u603b\u7ebf\u4e2d\u2014\u2014\u5b9e\u73b0\u7684\u624b\u6bb5\u5c31\u662f\u901a\u8fc7\u7535\u8def\u6765\u4f7f\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u4f7f\u80fd\u7aef\u4e3a 1\u3002

    \u5728\u6570\u5b57\u903b\u8f91\u8bbe\u8ba1\u4e2d\uff0c\u4e09\u6001\u95e8\u5b9e\u73b0\u603b\u7ebf\u7684\u76f8\u5173\u77e5\u8bc6\u5c06\u5728 \u7b2c\u516d\u7ae0 \u63d0\u5230\u3002

    \u788e\u788e\u5ff5

    \u6240\u4ee5\u4ec0\u4e48\u662f\u300c\u9ad8\u963b\u6001\u300d\uff1f\u5b83\u8981\u5982\u4f55\u7406\u89e3\uff1f\u4ee5\u4e0b\u662f\u6211\u6839\u636e\u5b83\u7684\u5e94\u7528\u53cd\u63a8\u5f97\u5230\u7684\u7ed3\u8bba\uff1a

    \u9ad8\u963b\u6001\u540c\u5b83\u5b57\u9762\u610f\u601d\u76f8\u540c\uff0c\u6211\u4eec\u53ef\u4ee5\u5f53\u5b83\u6b64\u65f6\u662f\u65ad\u8def\uff0c\u800c\u9ad8\u963b\u6001\u91cd\u70b9\u8981\u4e0e\u4f4e\u7535\u5e73\u505a\u533a\u5206\uff1a\u5982\u679c\u73b0\u5728\u5b58\u5728\u4e00\u4e2a\u201c\u5bfc\u7ebf\u201d\uff0c\u5b83\u6709\u4e09\u4e2a\u7aef\uff0c\u5176\u4e2d\u6211\u4eec\u4eba\u4e3a\u5730\u8ba4\u4e3a\u5176\u4e2d\u4e24\u4e2a\u662f\u8f93\u5165\uff0c\u5206\u522b\u547d\u540d\u4e3a a \u548c b\uff0c\u53e6\u5916\u4e00\u4e2a\u8ba4\u4e3a\u662f\u8f93\u51fa\uff0c\u547d\u540d\u4e3a c\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u662f\u4e0d\u5141\u8bb8 a \u548c b \u4e00\u4e2a\u4e3a\u9ad8\u7535\u5e73\uff0c\u4e00\u4e2a\u4e3a\u4f4e\u7535\u5e73\u7684\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd9\u91cc\u4eba\u4e3a\u5b9a\u4e49\u7684\u8f93\u5165\u8f93\u51fa\u5e76\u4e0d\u5f71\u54cd\u7535\u6d41\u7684\u6d41\u52a8\u65b9\u5411\uff0c\u6240\u4ee5\u5f53 a \u4e3a 1\uff0cb \u4e3a 0 \u65f6\uff0c\u7535\u6d41\u5f88\u53ef\u80fd\u4f1a\u53d8\u6210\u4ece a \u6d41\u5411 b\uff0c\u7535\u6e90\u53ef\u80fd\u76f4\u63a5\u63a5\u5730\uff0c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u770b\u5230\u7684\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u6216\u95e8\u6765\u5b9e\u73b0\u8fd9\u4e2a\u903b\u8f91\u884c\u4e3a\uff08\u6362\u8a00\u4e4b\uff0c\u8fd9\u79cd\u201c\u4e09\u7aef\u201d\u7535\u8def\u662f\u76f8\u5f53\u5371\u9669\u7684\uff0c\u4e0d\u8fc7\u5f53\u6211\u4eec\u4eba\u4e3a\u5b9a\u4e49\u591a\u4e2a\u8f93\u51fa\u65f6\uff0c\u4e00\u822c\u4f5c\u4e3a\u63a5\u6536\u7aef\u7684\u7535\u8def\u90fd\u6709\u4e8c\u6781\u7ba1\u9632\u6b62\u9006\u6d41\uff0c\u6240\u4ee5\u5355\u8f93\u5165\u591a\u8f93\u51fa\u662f\u5f88\u5e38\u89c1\u7684\uff09\u3002

    \u4ece\u66f4\u62bd\u8c61\u5730\u89d2\u5ea6\u6765\u7406\u89e3\uff0c\u4e00\u6839\u5bfc\u7ebf\u6700\u591a\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\uff0c\u7136\u800c\u6709\u4e24\u4e2a\u8f93\u5165\u4ecb\u5165\uff0c\u6b64\u65f6\u6211\u4eec\u53ea\u6709 0/1 \u4e24\u6001\uff0c\u4e0d\u7ba1\u600e\u4e48\u6837\uff0c\u6211\u4eec\u90fd\u540c\u65f6\u62ff\u5230\u4e86\u6765\u81ea\u4e24\u4e2a\u8f93\u5165\u7684\u6570\u636e\uff0c\u800c\u5bf9\u4e8e\u53ea\u80fd\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\u7684\u5bfc\u7ebf\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u4fe1\u606f\u51b2\u7a81\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981 MUX \u6765\u9009\u62e9\u6211\u4eec\u9700\u8981\u7684\u5230\u5e95\u662f\u54ea\u4e2a\u4fe1\u606f\uff0c\u7136\u540e\u518d\u7ed9\u5bfc\u7ebf\u3002

    \u800c\u4e09\u6001\u95e8\uff0c\u5728\u9ad8\u4f4e\u7535\u5e73\u5916\u5f15\u5165\u4e86\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u975e\u5e38\u5de7\u5999\u5730\u89e3\u51b3\u4e86\u8fd9\u4e2a\u300c\u591a\u8f93\u5165\u300d\u5371\u9669\u7684\u95ee\u9898\uff0c\u5f53\u6211\u4eec\u4e0d\u5e0c\u671b\u8fd9\u4e2a\u6570\u636e\u88ab\u8f93\u5165\u65f6\uff0c\u6211\u4eec\u76f4\u63a5\u628a\u5b83\u65ad\u5f00\uff0c\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u628a\u5f00\u5173\u65ad\u5f00\uff0c\u53ea\u8981\u6211\u4eec\u8ba9\u5bfc\u7ebf\u7684\u82e5\u5e72\u8f93\u5165\u4e2d\u53ea\u6709\u4e00\u4e2a\u4e09\u6001\u95e8\u4e0d\u5728\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u80fd\u591f\u4f18\u96c5\u5730\u5b9e\u73b0\u591a\u8def\u8f93\u51fa\u4e92\u8054\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u590d\u6742\u95e8","title":"\u590d\u6742\u95e8","text":"

    \u901a\u8fc7\u4e00\u4e9b\u57fa\u672c\u95e8\u7ec4\u5408\u51fa\u6765\u7684\u95e8\uff0c\u5b83\u4eec\u7684\u8868\u793a\u65b9\u6cd5\u5927\u81f4\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/","title":"Chap 3 Combinational Logic Design","text":"

    \u7ea6 4252 \u4e2a\u5b57 7 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f

    \u5f15\u5165

    \u6309\u7167\u529f\u80fd\uff0c\u903b\u8f91\u7535\u8def\u5206\u4e3a\u4e24\u7c7b\uff1a

    \u800c\u672c\u7ae0\u5c06\u7740\u773c\u4e8e\u7ec4\u5408\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\u5c06\u5728 \u4e0b\u4e00\u7ae0 \u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","title":"\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","text":"

    \u8868\u793a\u903b\u8f91\u7684\u65b9\u6cd5

    1. \u771f\u503c\u8868(Truth Table)\uff1b
    2. \u5e03\u5c14\u51fd\u6570(Boolean Function)\uff1b
    3. \u5361\u8bfa\u56fe(Karnaugh Maps)\uff1b
    4. \u65f6\u5e8f\u56fe(Timing Diagram)\uff1b
    5. \u903b\u8f91\u7535\u8def\u56fe(Logic Circuit)\uff1b

    \u5176\u4e2d\uff0c\u4e0b\u5212\u7ebf\u7684\u65b9\u6cd5\u5728\u529f\u80fd\u786e\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u5176\u8868\u793a\u662f\u552f\u4e00\u7684\u3002

    \u800c\u6211\u4eec\u7684\u8bbe\u8ba1\uff0c\u5c31\u662f\u5728\u6ee1\u8db3\u529f\u80fd\u7684\u524d\u63d0\u4e0b\uff0c\u5c3d\u53ef\u80fd\u4f18\u5316\u548c\u627e\u5230\u6700\u597d\u7684\u8bbe\u8ba1\u3002

    \u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u5982\u4e0b\uff1a

    1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
    2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
    3. \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u4ee5\u51cf\u5c11\u6210\u672c(\u6bd4\u5982\u4f7f\u7528\u5361\u8bfa\u56fe)\uff1b
    4. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
    5. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
    graph LR;\n\nA[\"\u5b9e\u9645\u95ee\u9898\"] ===> B[\"\u771f\u503c\u8868\"]\n\nB ==>|\"\u5316\u7b80\"| C[\"\u6700\u7b80\u529f\u80fd\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D[\"\u7f51\u8868\"]\n\nB ==>|\"\u53d8\u6362\"| E[\"\u5408\u9002\u7684\u8868\u8fbe\u5f0f\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5206\u5c42\u8bbe\u8ba1","title":"\u5206\u5c42\u8bbe\u8ba1","text":"

    \u5206\u5c42\u8bbe\u8ba1\u5373\u5c06\u590d\u6742\u95ee\u9898\u6a21\u5757\u5316\u5206\u89e3\u4e3a\u82e5\u5e72\u5c42\u6b21\uff0c\u7136\u540e\u9010\u4e2a\u62bd\u8c61\u89e3\u51b3\u3002

    \u5176\u8bbe\u8ba1\u65b9\u6cd5\u5206\u4e3a \u81ea\u9876\u5411\u4e0b(Top-Down) \u548c \u81ea\u5e95\u5411\u4e0a(Bottom-Up)\u3002

    \u524d\u8005\u4ece\u9700\u6c42\u5f00\u59cb\uff0c\u81ea\u9876\u5411\u4e0b\u5206\u89e3\u529f\u80fd\u8bbe\u8ba1\uff1b\u540e\u8005\u6839\u636e\u73b0\u6709\u7684\u5143\u4ef6\u53bb\u7ec4\u5408\u6210\u76ee\u6807\u529f\u80fd\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u96c6\u6210\u7535\u8def","title":"\u96c6\u6210\u7535\u8def","text":"

    \u96c6\u6210\u7535\u8def(integrated circuits) \u53c8\u53eb \u82af\u7247(chip)\uff0c\u5206\u4e3a\u5982\u4e0b\u82e5\u5e72\u7b49\u7ea7\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6280\u672f\u53c2\u6570","title":"\u6280\u672f\u53c2\u6570","text":"

    \u95e8\u7684\u5b9e\u73b0\u4e3b\u8981\u901a\u8fc7\u8fd9\u4e9b\u53c2\u6570\u7279\u6027\u6765\u63cf\u8ff0\uff1a

    Name Description Fan-in \u4e00\u4e2a\u95e8\u53ef\u7528\u7684\u8f93\u5165 Fan-out \u4e00\u4e2a\u6805\u6781\u8f93\u51fa\u9a71\u52a8\u7684\u6807\u51c6\u8d1f\u8f7d\u6570\u91cf Logic Levels \u88ab\u8ba4\u4e3a\u662f\u9ad8\u4f4e\u7535\u5e73\u7684\u8f93\u5165\u8f93\u51fa\u7535\u538b\u8303\u56f4 Noise Margin \u5bf9\u5916\u754c\u566a\u58f0\u7684\u5bb9\u5fcd\u80fd\u529b(\u5177\u4f53\u6765\u8bf4\u662f\u4e0d\u4f1a\u5bfc\u81f4\u884c\u4e3a\u5f02\u53d8\u7684\u6700\u5927\u566a\u58f0\u538b\u503c) Cost for a gate \u7ee7\u627f\u7535\u8def\u7684\u95e8\u6210\u672c Propagation Delay \u4fe1\u53f7\u6539\u53d8\u540e\u4ece\u8f93\u5165\u5230\u8f93\u51fa\u6240\u9700\u7684\u53d8\u5316\u65f6\u95f4 Power Dissipation \u7535\u6e90\u8f93\u51fa\u80fd\u8017\u548c\u95e8\u7684\u80fd\u8017"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6247\u5165\u6247\u51fa","title":"\u6247\u5165\u6247\u51fa","text":"

    \u6247\u5165\u63cf\u8ff0\u4e86\u4e00\u4e2a\u95e8\u80fd\u591f\u63a5\u53d7\u7684\u6700\u591a\u8f93\u5165\u91cf\uff0c\u5982\u4e00\u4e2a\u56db\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6247\u5165\u5c31\u662f 4\uff1b\u800c\u6247\u51fa\u63cf\u8ff0\u7684\u5219\u662f\u4e00\u4e2a\u95e8\u7684\u8f93\u51fa(\u6805\u6781\u8f93\u51fa)\u5728\u4e0d\u964d\u4f4e\u5de5\u4f5c\u6027\u80fd\u7684\u60c5\u51b5\u4e0b\u80fd\u591f\u8d1f\u8f7d\u591a\u5c11\u95e8\uff0c\u4f8b\u5982\u4e00\u4e2a\u975e\u95e8\u7684\u8f93\u51fa\u80fd\u591f\u540c\u65f6\u8d1f\u8f7d 4 \u4e2a\u975e\u95e8\u5e76\u4e14\u90fd\u80fd\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u5176\u6247\u51fa\u4e3a 4\uff0c\u5176\u4e5f\u80fd\u901a\u8fc7\u6807\u51c6\u8d1f\u8f7d\u6765\u5b9a\u4e49\u3002

    \u6807\u51c6\u8d1f\u8f7d

    \u6240\u8c13\u7684\u6807\u51c6\u8d1f\u8f7d\uff0c\u662f\u8861\u91cf\u201c\u8d1f\u8f7d\u201d\u7684\u4e00\u4e2a\u201c\u5355\u4f4d\u781d\u7801\u201d\u3002\u5176\u5927\u5c0f\u7b49\u4e8e\u4e00\u4e2a\u975e\u95e8(\u9006\u53d8\u5668)\u8d21\u732e\u7684\u8d1f\u8f7d\u538b\u529b\u3002

    \u90a3\u4e48\u8981\u5982\u4f55\u8bc4\u4f30\u8d1f\u8f7d\u5462\uff1f\u9996\u5148\u6211\u4eec\u5f15\u5165 \u8fc7\u6e21\u65f6\u95f4(transition time)\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8f6c\u6362\u65f6\u95f4","title":"\u8f6c\u6362\u65f6\u95f4","text":"

    \u8f6c\u6362\u65f6\u95f4\u5206\u4e3a \\(\\mathrm{t_{LH}}\\)(rise time) \u548c \\(\\mathrm{t_{HL}}\\)(fall time) \u4e24\u4e2a\u90e8\u5206\u3002

    \u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

    \u968f\u7740\u8d1f\u8f7d\u589e\u52a0\uff0c\u8f6c\u6362\u65f6\u95f4\u4e5f\u4f1a\u589e\u52a0\uff08\u7ed9\u7535\u5bb9\u5145\u7535\u7684\u65f6\u95f4\u589e\u52a0\uff09\uff0c\u800c\u6247\u51fa\u5b9a\u4e49\u4e2d\u63d0\u5230\u7684\u201c\u6700\u5927\u8d1f\u8f7d\u201d\uff0c\u5c31\u662f\u6307\u5b83\u7684\u8f6c\u6362\u65f6\u95f4\u4e0d\u8d85\u8fc7\u5b83\u9884\u5b9a\u7684\u6700\u5927\u8f6c\u6362\u65f6\u95f4\u3002

    \u4ece\u5de6\u5230\u53f3\u8868\u793a\u8d1f\u8f7d\u4e0d\u65ad\u589e\u52a0\u65f6\uff0crise time \u7684\u53d8\u5316\u8d8b\u52bf\u3002

    \u5b9e\u9645\u4e0a\uff0c\u7c7b\u4f3c\u7684\uff0c\u8d85\u51fa\u6247\u5165\u540e\uff0c\u95e8\u5bf9\u8f93\u5165\u7684\u53cd\u5e94\u5c31\u592a\u6162\u4e86\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4f20\u64ad\u5ef6\u8fdf","title":"\u4f20\u64ad\u5ef6\u8fdf","text":"

    \u4f20\u64ad\u5ef6\u8fdf(propagation delay) \u8861\u91cf\u4e86\u95e8\u7684\u8f93\u5165\u53d8\u5316\u5bfc\u81f4\u8f93\u51fa\u53d8\u5316\u6240\u9700\u8981\u7684\u65f6\u95f4\u3002\u7531\u4e8e\u4ece\u4f4e\u7535\u5e73\u8f6c\u5316\u5230\u9ad8\u7535\u5e73\u548c\u9ad8\u7535\u5e73\u8f6c\u5316\u5230\u4f4e\u7535\u5e73\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u4f20\u64ad\u5ef6\u8fdf\u540c\u6837\u6709\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u4f7f\u7528 \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}} \u6765\u8868\u793a\\)\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u4f20\u64ad\u5ef6\u8fdf\u7684\u8ba1\u7b97\u65b9\u6cd5\u662f\u8f93\u5165\u548c\u8f93\u51fa\u7684\u53d8\u5316\u4e2d\u70b9\uff08\u5373\u53d8\u5316\u5230 \\(\\frac{1}{2}V_{CC}\\) \u65f6\uff09\u7684\u65f6\u95f4\u5dee\uff0c\u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

    \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5f15\u5165 \\(\\mathrm{ t_{pd} }\\) \u6765\u7edf\u4e00\u8868\u793a \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}}\\)\u3002\u6570\u503c\u4e0a\uff0c\\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\) \u6216 \\(\\mathrm{ t_{pd} } = max(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u6839\u636e\u65f6\u5e8f\u56fe\uff0c\u5199\u51fa\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\uff0c\u6b64\u5904 \\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

    Transition Time vs. Propagation Delay

    \u8f6c\u6362\u65f6\u95f4\u4e13\u6ce8\u4e8e\u8f93\u51fa\u7684\u53d8\u5316\uff0c\u800c\u4f20\u64ad\u5ef6\u8fdf\u5219\u5305\u542b\u4e86\u8f93\u5165\u7684\u53d8\u5316\u548c\u8f93\u51fa\u7684\u53d8\u5316\u6574\u4e2a\u8fc7\u7a0b\u3002

    \u4ece\u65f6\u5e8f\u56fe\u4e0a\u7684\u8868\u793a\u6765\u770b\uff0c\u8f6c\u6362\u65f6\u95f4\u53ea\u9700\u8981\u8f93\u51fa\u7684\u65f6\u5e8f\u56fe\u5373\u53ef\u8868\u793a\uff1b\u4f46\u4f20\u64ad\u5ef6\u8fdf\u5219\u662f\u901a\u8fc7\u6bd4\u8f83\u8f93\u5165\u548c\u8f93\u51fa\u7684\u504f\u5dee\u6765\u8868\u793a\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u6a21\u578b","title":"\u5ef6\u8fdf\u6a21\u578b","text":"

    \u4e3a\u4e86\u7814\u7a76\u4e3a\u4ec0\u4e48\u4f1a\u5b58\u5728\u95e8\u5ef6\u8fdf\uff0c\u523b\u753b\u95e8\u7684 \u56fa\u6709\u95e8\u5ef6\u8fdf(inherent gate delay)\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5176\u5efa\u6a21\uff0c\u5e38\u89c1\u7684 \u5ef6\u8fdf\u6a21\u578b(delay model) \u6709\u4ee5\u4e0b\u4e24\u79cd\uff1a

    \u5c06\u4e0d\u5b58\u5728\u5ef6\u8fdf\u7684\u6a21\u578b\u3001\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u548c\u60ef\u6027\u5ef6\u8fdf\u6a21\u578b\u505a\u6bd4\u8f83\u5730\u6765\u770b\uff0c\u5c31\u662f\u5982\u4e0b\u60c5\u51b5\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","title":"\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","text":"

    \u5f15\u5165

    \u7531\u4e8e\u5b9e\u9645\u7535\u8def\u4e2d\u5b9e\u73b0\u5ef6\u8fdf\uff0c\u6570\u5b66\u4e0a\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e0e\u5b9e\u9645\u7535\u8def\u60c5\u51b5\u4f1a\u5b58\u5728\u4e0d\u540c\u2014\u2014\u5373\u5b58\u5728\u82e5\u5e72\u6570\u5b66\u4e0a\u65e0\u6cd5\u76f4\u63a5\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u6240\u4ee5\u7814\u7a76\u5ef6\u8fdf\u662f\u975e\u5e38\u5fc5\u8981\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u8ba1\u7b97","title":"\u5ef6\u8fdf\u8ba1\u7b97","text":"

    \u8ba1\u7b97\u4e00\u4e2a\u7535\u8def\u7684\u5ef6\u8fdf\u65f6\uff0c\u6709\u4e24\u65b9\u9762\u9700\u8981\u8003\u8651\uff0c\u4e00\u65b9\u9762\u662f\u7535\u8def\u81ea\u8eab\u6240\u5bfc\u81f4\u7684\u4e00\u4e2a\u56fa\u5b9a\u5ef6\u8fdf\uff0c\u53e6\u5916\u4e00\u65b9\u9762\u5219\u662f\u7531\u4e8e\u4e0d\u540c\u7684\u8d1f\u8f7d\u5bfc\u81f4\u7684\u989d\u5916\u5ef6\u8fdf\u3002

    \u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c0.07 \u4e3a\u56fa\u5b9a\u5ef6\u8fdf\uff0c0.021 \u4e3a\u4e00\u4e2a\u6807\u51c6\u8d1f\u8f7d\u5e26\u6765\u7684\u5ef6\u8fdf\u7cfb\u6570\uff0cSL(4.5 here) \u5219\u662f\u6807\u51c6\u5316\u7684\u8d1f\u8f7d\u91cf\u3002

    \u800c\u5177\u4f53\u7684\u8868\u8fbe\u5f0f\uff0c\u4f1a\u5728 Cell Library \u91cc\u5199\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","title":"\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","text":"

    \u7531\u4e8e\u5b58\u5728\u5ef6\u8fdf\uff0c\u8bb8\u591a\u5728\u6570\u5b66\u610f\u4e49\u4e0a\u6ca1\u6709\u95ee\u9898\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u5728\u7535\u8def\u4e2d\u5c31\u5b58\u5728\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002

    \u4f8b\u5982\uff0c\u4ece\u6570\u5b66\u89d2\u5ea6\u770b\uff0c\\(\\mathrm{Y=\\overline{A}A}\\) \u7684\u503c\u6052\u4e3a 0\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u7531\u4e8e\u5ef6\u8fdf\uff0c\u5176\u4eff\u771f\u6ce2\u5f62\u4e2d\u4f1a\u51fa\u73b0\u8fd9\u6837\u4e00\u4e2a \u6bdb\u523a(glitch)\uff0c\u800c\u8fd9\u5728\u5de5\u7a0b\u610f\u4e49\u4e0a\u6709\u5f88\u5927\u7684\u95ee\u9898\u3002

    \u66f4\u590d\u6742\u7684 \ud83c\udf30

    \u8ba9\u6211\u4eec\u5206\u6790\u4e0b\u9762\u8fd9\u4e2a\u4e8c\u8def\u9009\u62e9\u5668\uff0c\u5176\u529f\u80fd\u662f\u901a\u8fc7 S \u63a7\u5236\u8f93\u51fa\u8868\u8fbe\u7684\u662f A \u8fd8\u662f B\uff0c\u5728\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u4e0b\uff0c\u5176\u6ce2\u5f62\u5982\u4e0b\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0cY \u4e2d\u51fa\u73b0\u4e86\u610f\u6599\u4e4b\u5916\u7684\u6bdb\u523a\u3002

    \u800c\u8fd9\u4e2d\u6bdb\u523a\u53ef\u4ee5\u7528\u6dfb\u52a0\u5197\u4f59\u9879\u6765\u89e3\u51b3\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","title":"\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","text":"

    \u6b63\u903b\u8f91(positive logic) \u5c31\u662f 1 \u662f\u6709\u6548\u4fe1\u53f7\uff0c\u8d1f\u903b\u8f91(negative logic) \u5c31\u662f 0 \u662f\u6709\u6548\u4fe1\u53f7\u3002\u800c\u5728\u6b63\u903b\u8f91\u4e2d AND \u95e8\u7684\u4f5c\u7528\u5c31\u7b49\u6548\u4e8e\u8d1f\u903b\u8f91\u4e2d OR \u95e8\u7684\u4f5c\u7528\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u524d\u9762\u51e0\u7ae0\u7684\u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\u5bf9\u79f0\u3002

    \u800c\u6b63\u903b\u8f91\u7684\u7535\u8def\u7684\u7b26\u53f7\u4e00\u822c\u5c31\u662f\u6b63\u5e38\u7684\u903b\u8f91\u95e8\u7b26\u53f7\uff0c\u800c\u8d1f\u903b\u8f91\u7684\u903b\u8f91\u95e8\u7b26\u53f7\u5219\u53ef\u80fd\u6709\u5c0f\u4e09\u89d2\u6807\uff0c\u5373 \u6781\u6027\u6307\u793a\u5668(polarity indicator)\uff1a

    \u5982\u56fe\uff0c\u5de6\u4fa7\u662f\u6b63\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\uff0c\u53f3\u4fa7\u662f\u8d1f\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5de5\u827a\u6620\u5c04","title":"\u5de5\u827a\u6620\u5c04","text":"

    \u5de5\u827a\u6620\u5c04(technology mapping) \u662f\u6307\u5c06\u903b\u8f91\u56fe\u6216\u7f51\u8868\u8f6c\u5316\u4e3a\u53ef\u4ee5\u7528\u5de5\u827a\u5b9e\u73b0\u7684\u5fc3\u7684\u56fe\u6216\u7f51\u8868\u7684\u8fc7\u7a0b\u3002

    \u6709\u65f6\u6211\u4eec\u4f1a\u4f7f\u7528\u4e0e\u975e\u95e8\u548c\u975e\u95e8\u66ff\u6362\u4e0e\u95e8\u548c\u6216\u95e8(\u56e0\u4e3a\u7535\u8def\u5c42\u9762\uff0c\u4e0e\u95e8\u5b9e\u9645\u4e0a\u5c31\u662f\u901a\u8fc7\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684)\uff0c\u7136\u540e\u4f1a\u53d1\u73b0\u6709\u4e00\u4e9b\u8fde\u7eed\u5bf9\u975e\u95e8\u53ef\u4ee5\u76f8\u4e92\u62b5\u6d88\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

    \u84dd\u7eff\u8272\u5757\u4e2d\u5373\u4e3a\u88ab\u66ff\u6362\u540e\u7684\u5185\u5bb9\uff0c\u7136\u540e\u6211\u4eec\u53d1\u73b0\u51fa\u73b0\u4e86\u82e5\u5e72\u53ef\u4ee5\u62b5\u6d88\u7684\u975e\u95e8\u3002

    \u5f53\u7136\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6216\u975e\u95e8\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u9a8c\u8bc1\u6b63\u786e\u6027","title":"\u9a8c\u8bc1\u6b63\u786e\u6027","text":"

    \u9a8c\u8bc1\u6b63\u786e\u6027(Verification)\u6307\u7684\u662f\u8bc1\u660e\u6700\u7ec8\u8bbe\u8ba1\u7684\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u9884\u671f\u884c\u4e3a(Specification)\u3002 \u7b80\u5355\u7684\u884c\u4e3a\u53ef\u4ee5\u7528\u771f\u503c\u8868\u3001\u5e03\u5c14\u4ee3\u6570\u5f0f\u3001HDL \u4ee3\u7801\u7b49\u63cf\u8ff0\u3002

    \u6700\u57fa\u672c\u7684\u9a8c\u8bc1\u6b63\u786e\u6027\u65b9\u6cd5\u6709\uff1a

    Why Simulate?

    \u6211\u4eec\u66fe\u5728\u6570\u903b\u5b9e\u9a8c\u4e2d\u9a8c\u8bc1\u8fc7\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\uff0c\u90a3\u65f6\u6211\u4eec\u91c7\u7528\u4eba\u5de5\u903b\u8f91\u5206\u6790\uff0c\u901a\u8fc7\u6d4b\u8bd5\u786e\u5b9a\u4e86\u5f85\u6d4b\u95e8\u7684\u771f\u503c\u8868\uff0c\u5e76\u5c06\u5176\u4e0e\u6807\u51c6\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u771f\u503c\u8868\u6bd4\u8f83\uff0c\u4ece\u800c\u5224\u65ad\u6211\u4eec\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u662f\u5426\u6b63\u786e\u5b9e\u73b0\uff1b

    \u4f46\u5982\u679c\u6211\u4eec\u9700\u8981\u9a8c\u8bc1\u4e00\u4e2a\u4e00\u767e\u4e07\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\u5462\uff1f\uff08\u4ec5\u7528\u4e8e\u4e3e\u4f8b\uff09

    \u6211\u4eec\u53d1\u73b0\uff0c\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u4eba\u5de5\u6c42\u89e3\u8fd9\u4e2a\u7535\u8def\u7684\u771f\u503c\u8868\u6216\u5e03\u5c14\u4ee3\u6570\u5f0f\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u8bbe\u8ba1\u4e00\u7ec4\u5177\u6709\u4ee3\u8868\u6027\u7684\u8f93\u5165\uff08\u4ecd\u7136\u662f\u4e2a\u4e0d\u5c0f\u7684\u6570\u76ee\uff09\uff0c\u8ba9\u8ba1\u7b97\u673a\u5728\u4eff\u771f\u73af\u5883\u4e2d\u7528\u8fd9\u7ec4\u8f93\u5165\u53bb\u6d4b\u8bd5\u7535\u8def\uff0c\u5e76\u5c06\u6d4b\u8bd5\u7ed3\u679c\u4e0e\u9884\u671f\u7ed3\u679c\u8fdb\u884c\u5bf9\u6bd4\u3002\u6211\u4eec\u65e0\u6cd5\u786e\u4fdd\u9a8c\u8bc1\u662f\u5426\u5145\u5206\uff0c\u4f46\u81f3\u5c11\u8fd9\u662f\u5b9e\u8df5\u610f\u4e49\u4e0a\u8db3\u591f\u5145\u5206\u7684\u9a8c\u8bc1\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u903b\u8f91","title":"\u7ec4\u5408\u903b\u8f91","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u903b\u8f91\u51fd\u6570","title":"\u57fa\u672c\u903b\u8f91\u51fd\u6570","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u529f\u80fd\u5757","title":"\u57fa\u672c\u529f\u80fd\u5757","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8bd1\u7801\u5668","title":"\u8bd1\u7801\u5668","text":"

    \u7a77\u4e3e\u53ef\u80fd\u6027\uff0c\u7a20\u5bc6 -> \u7a20\u5bc6/\u7a00\u758f

    \u4e3a\u4e86\u8282\u7701\u95e8\u8f93\u5165\u6210\u672c\uff0c\u6211\u4eec\u5e38\u5e38\u4f7f\u7528 \u5206\u7ea7 \u7684\u601d\u60f3\u6765\u6784\u9020\u591a\u8f93\u5165\u591a\u8bd1\u7801\u5668\u3002

    eg

    \u7531\u4e8e\u5e95\u5c42\u7684\u7535\u8def\u80fd\u591f\u76f4\u63a5\u5b9e\u73b0\u7684\u8fd0\u7b97\u5341\u5206\u5c40\u9650\uff0c\u6240\u4ee5\u9700\u8981\u7528\u8bd1\u7801\u5668\u6765\u5b9e\u73b0\u4e00\u4e9b\u57fa\u7840\u8fd0\u7b97\uff0c\u4f8b\u5982\u52a0\u6cd5\u3002

    \u4e00\u4f4d\u52a0\u6cd5\u5668\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bd1\u7801\u5668\u548c\u6216\u95e8\u5b9e\u73b0\uff0c\u6838\u5fc3\u5c31\u662f\u679a\u4e3e\u8f93\u5165\u7684\u5404\u79cd\u60c5\u51b5\uff0c\u7136\u540e\u7528\u6216\u95e8\u62fe\u53d6 sum \u548c carry \u7684\u6700\u5c0f\u9879\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7f16\u7801\u5668","title":"\u7f16\u7801\u5668","text":"

    \u7a20\u5bc6/\u7a00\u758f -> \u7a20\u5bc6

    \u5982\u4e0a\u5b9a\u4e49\u7684\u7f16\u7801\u5668\u6709\u4e00\u4e2a\u9650\u5236\uff0c\u5373\u4efb\u4f55\u65f6\u5019\u8f93\u5165\u53ea\u80fd\u6709\u4e00\u4e2a\u662f\u6d3b\u52a8\u7684\uff0c\u5373\u8f93\u5165\u662f one-hot \u7684\u3002

    \u4f18\u5148\u7f16\u7801\u5668

    \u4f18\u5148\u7f16\u7801\u5668\u80fd\u591f\u5b9e\u73b0\u4f18\u5148\u7ea7\u51fd\u6570\uff0c\u5b83\u4e0d\u8981\u6c42\u8f93\u5165\u662f one-hot \u7684\uff0c\u800c\u662f\u603b\u662f\u5173\u6ce8\u6709\u6548\u8f93\u5165\u4e2d\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4e2a\u3002\u5373\u6bd4\u5982\u5f53\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4f4d\u662f 1 \u65f6\uff0c\u5176\u5b83\u6240\u6709\u4f18\u5148\u7ea7\u4e0d\u5982\u5b83\u7684\u4f4d\u7f6e\u7684\u503c\u90fd\u662f\u6211\u4eec\u4e0d\u5173\u5fc3\u7684\u5185\u5bb9\u4e86\u3002

    \u4e2d\u65ad(interrupt)\u5224\u4f18\u5668

    \u4f18\u5148\u7f16\u7801\u5668\u7684\u4e00\u79cd\u5e94\u7528\u5c31\u662f\u4e2d\u65ad\u5224\u4f18\u5668\u3002

    \u5176\u4e2d \\(V\\) \u8868\u793a\u8f93\u51fa\u662f\u5426\u6709\u6548\uff0c\u5728\u4e2d\u65ad\u5224\u4f18\u7cfb\u7edf\u4e2d\u5373\u8868\u793a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u591a\u8def\u590d\u7528\u5668","title":"\u591a\u8def\u590d\u7528\u5668","text":"

    \u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u51fa\u7684\u662f\u82e5\u5e72\u8f93\u5165\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

    \u901a\u8fc7\u4e09\u6001\u95e8\u6765\u5b9e\u73b0 MUX \u80fd\u591f\u964d\u4f4e\u95e8\u8f93\u5165\u4ee3\u4ef7\u3002

    eg

    \u5b8c\u5168\u4f7f\u7528\u4e09\u6001\u95e8\u6765\u5b9e\u73b0\u56db\u8f93\u5165 MUX\uff0c\u95e8\u8f93\u5165\u5927\u5927\u51cf\u5c11\u3002

    MUX \u8fd8\u53ef\u4ee5 \u5b9e\u73b0\u4efb\u610f\u7684\u903b\u8f91\u51fd\u6570\uff1a

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u5c06\u539f\u6765\u7684\u63a7\u5236\u7aef\u5f53\u4f5c\u8f93\u5165\u7aef\uff0c\u5e76\u5728\u539f\u6765\u7684\u8f93\u5165\u7aef\u5199\u5165\u903b\u8f91\u51fd\u6570\u7684\u771f\u503c\u8868\uff0c\u4ee5\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\u3002

    \u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u628a\u4e00\u90e8\u5206\u7684\u8f93\u5165\u5f53\u4f5c\u5e38\u91cf\u7aef\u6765\u7b80\u5316\u5143\u4ef6\uff08\u964d\u7ef4\uff09\uff1a

    \u89c2\u5bdf\u5176\u6700\u5c0f\u9879\uff0c\u4f7f\u5176\u8f93\u51fa\u6240\u6709\u6700\u5c0f\u9879\u3002\u4f46\u662f\u5728\u964d\u7ef4\u8fc7\u7a0b\u4e2d\u5e76\u4e0d\u9700\u8981\u5168\u90fd\u662f C\uff0c\u5982\u679c\u5361\u8bfa\u56fe\u4e2d\u5b58\u5728\u53cc 1 \u6216\u8005\u53cc 0\uff0c\u4e5f\u53ef\u4ee5\u4ecd\u7136\u4f7f\u7528\u5e38\u91cf\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4fe1\u53f7\u5206\u914d\u5668","title":"\u4fe1\u53f7\u5206\u914d\u5668","text":"

    \u7b80\u5199\u4e3a DEMUX\uff0c\u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u5165\u7ed9\u5230\u82e5\u5e72\u8f93\u51fa\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

    \u540e\u7eed \ud83d\udc49 \u53ef\u7f16\u7a0b\u6280\u672f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7b97\u672f\u903b\u8f91\u7535\u8def","title":"\u7b97\u672f\u903b\u8f91\u7535\u8def","text":"

    \u6211\u4eec\u4e3b\u8981\u8ba8\u8bba\u7684\u8ba1\u7b97\u4e3b\u8981\u5305\u62ec\u903b\u8f91\u8fd0\u7b97\u548c\u7b97\u672f\u8fd0\u7b97\uff0c\u524d\u8005\u7531\u4e8e\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u57fa\u672c\u95e8\u5f88\u65b9\u4fbf\u5b9e\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u8fc7\u591a\u8003\u8651\uff1b\u5728\u6b64\u4e3b\u8981\u4ecb\u7ecd\u7b97\u6570\u8fd0\u7b97\u3002\u5728\u8ba1\u7b97\u673a\u786c\u4ef6\u4e2d\uff0c\u627f\u62c5\u8ba1\u7b97\u5de5\u4f5c\u7684\u4e3b\u8981\u90e8\u4ef6\u4e3a ALU(Arithmetic Logical Unit)\u3002

    \u5f15\u5165

    \u5728\u4e4b\u524d #\u8bd1\u7801\u5668 \u548c #\u591a\u8def\u590d\u7528\u5668 \u7684\u90e8\u5206\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u4e00\u4e9b\u5b9e\u73b0 1 bit \u52a0\u6cd5\u5668\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u6765\u8be6\u7ec6\u770b\u770b\u52a0\u6cd5\u5668\u8fd9\u4e2a\u4e1c\u897f\u3002

    \u9996\u5148\u6211\u4eec\u9700\u8981\u4e86\u89e3\u52a0\u6cd5\u5668\u6700\u5e95\u5c42\u7684\u5355\u5143\uff0c\u5373\u5b9e\u73b0 1 bit \u8fd0\u7b97\u7684 \u534a\u52a0\u5668(half adder) \u548c \u5168\u52a0\u5668(full adder)\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u5c06\u4ed6\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u5b9e\u73b0 n bits \u7684\u52a0\u6cd5\u5668\uff0c\u5176\u4e2d\u4e3b\u8981\u4ecb\u7ecd \u884c\u6ce2\u52a0\u6cd5\u5668(binary ripple carry adder)\u3002\u6b64\u5916\uff0c\u57fa\u4e8e\u4e00\u4e9b\u7f16\u7801\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5c06\u5b83\u6539\u88c5\u6210\u52a0\u51cf\u6cd5\u5668\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u534a\u52a0\u5668--\u5168\u52a0\u5668","title":"\u534a\u52a0\u5668 & \u5168\u52a0\u5668","text":"

    \u5bf9\u4e8e\u4e8c\u8fdb\u5236\u52a0\u6cd5\uff0c\u5176\u8f93\u51fa\u65e0\u7591\u6709\u5f53\u524d\u4f4d\u7684\u548c S \u548c\u8fdb\u4f4d C\uff0c\u800c\u8f93\u5165\u9664\u4e86\u4e24\u4e2a\u64cd\u4f5c\u6570 X \u548c Y \u4ee5\u5916\uff0c\u8fd8\u53ef\u80fd\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z(\u6216\u8005C{n-1})\u3002\u800c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6570\u7684\u7b2c\u4e00\u4f4d\uff0c\u663e\u7136\u4e0d\u4f1a\u6709\u8fdb\u4f4d\uff0c\u6216\u8005\u8bf4 Z=0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e2a Z \u53bb\u6389\uff0c\u5373\u8f93\u5165\u53ea\u6709 X \u548c Y\uff0c\u8fd9\u5c31\u662f \u534a\u52a0\u5668(half adder)\uff1b\u663e\u7136\uff0c\u5bf9\u5e94\u7684\uff0c\u5982\u679c\u8f93\u5165\u4e2d\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z\uff0c\u5219\u79f0\u4e3a \u5168\u52a0\u5668(full adder)\u3002

    \u534a\u52a0\u5668\u5168\u52a0\u5668 \u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u7535\u8def\u56fe \\[ S=\\overline{X}Y+X\\overline{Y}=X\\oplus Y \\\\ C = XY \\]

    \u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u5361\u8bfa\u56fe\u903b\u8f91\u8868\u8fbe\u5f0f with XOR \\[ S=\\overline{X}\\,\\overline{Y}Z + \\overline{X}Y\\overline{Z} + X\\overline{Y}\\,\\overline{Z} + XYZ \\\\ C = XY + XZ + YZ \\]

    \\[ S = (X\\oplus Y)\\oplus Z \\\\ C = XY + Z(X\\oplus Y) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u884c\u6ce2\u52a0\u6cd5\u5668","title":"\u884c\u6ce2\u52a0\u6cd5\u5668","text":"

    \u884c\u6ce2\u52a0\u6cd5\u5668\u662f\u6734\u7d20\u7684 n bits \u52a0\u6cd5\u5668\u5b9e\u73b0\u3002\u5176\u6838\u5fc3\u601d\u60f3\u4e5f\u5c31\u662f\u6a21\u62df\u6211\u4eec\u4f7f\u7528\u201c\u7ad6\u5f0f\u201d\u6765\u8ba1\u7b97\u52a0\u6cd5\uff0c\u4ece\u4f4e\u4f4d\u5f00\u59cb\u9010\u4f4d\u8ba1\u7b97\uff0c\u5e76\u5c06\u8fdb\u4f4d\u7ed9\u5230\u4e0b\u4e00\u4f4d\u4f5c\u4e3a\u8f93\u5165\u3002

    \u5b9e\u9645\u4e0a\u65e0\u8bba\u662f\u53ea\u7528\u534a\u52a0\u5668\u6216\u662f\u53ea\u7528\u5168\u52a0\u5668\uff0c\u90fd\u53ef\u4ee5\u5b9e\u73b0\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u4f46\u662f\u6b8a\u9014\u540c\u5f52\uff0c\u65e0\u975e\u662f\u901a\u8fc7\u5916\u90e8\u5668\u4ef6\u6765\u8fdb\u884c\u4e92\u76f8\u8f6c\u5316\u800c\u5df2\u3002\u5982\u679c\u53ea\u4f7f\u7528\u5168\u52a0\u5668\u6765\u5b9e\u73b0\uff0c\u5219\u4ee5 4 bits \u884c\u6ce2\u52a0\u6cd5\u5668\u4e3a\u4f8b\uff0c\u5176\u5927\u81f4\u903b\u8f91\u5982\u4e0b\uff1a

    \u5176\u4e2d\uff0c\u5728\u52a0\u6cd5\u5668\u4e2d\uff0c\\(C_0\\) \u5fc5\u7136\u662f 0\u3002

    \u52a0\u51cf\u6cd5\u5668\uff0c\u6216\u8005\u8bf4\u52a0\u6cd5\u5668\uff0c\u4e00\u822c\u60c5\u51b5\u4e0b\u5728 ALU \u4e2d\u662f\u6700\u5f71\u54cd\u6548\u7387\u7684\u90e8\u5206\uff0c\u800c\u4e14\u5982\u679c\u4f7f\u7528\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u968f\u7740\u4f4d\u6570\u589e\u52a0\u6548\u7387\u4f1a\u8d8a\u6765\u8d8a\u6162\u3002

    \u6240\u4ee5\u4f1a\u6709\u7c7b\u4f3c\u4e8e\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u66f4\u591a\u7684\u5185\u5bb9\u53ef\u4ee5\u770b xxjj \u7684\u8ba1\u7ec4\u7b14\u8bb0\u3002\uff08\u6570\u903b\u4e2d\u6700\u591a\u4e86\u89e3\u5230\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u5373\u53ef\u3002\uff09

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4e8c\u8fdb\u5236\u51cf\u6cd5","title":"\u4e8c\u8fdb\u5236\u51cf\u6cd5","text":"

    \u9996\u5148\uff0c\u5728\u5f00\u59cb\u4e8c\u8fdb\u5236\u51cf\u6cd5\u7684\u4ecb\u7ecd\u4e4b\u524d\uff0c\u4f60\u9700\u8981\u4e86\u89e3 \u8865\u7801(2's complement)\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u4e1c\u897f\u5b9e\u5728\u662f\u63d0\u8fc7\u592a\u591a\u6b21\u4e86\u6240\u4ee5\u6211\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u518d\u5199\u4e00\u6b21\uff0c\u53ef\u4ee5\u67e5\u770b\u6211\u7684 C \u5c0f\u7b14\u8bb0\u7684\u8865\u7801\u5185\u5bb9\u3002

    \u7ed3\u5408\u8865\u7801\uff0c\u6211\u4eec\u518d\u6765\u89c2\u5bdf\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u51cf\u6570\u7684\u6bcf\u4e00\u4f4d\u53d6\u53cd\uff0c\u5e76\u5bf9\u6574\u4e2a\u6570\u52a0\u4e00\uff0c\u518d\u76f4\u63a5\u5c06\u5b83\u4eec\u76f8\u52a0\u5373\u53ef\uff0c\u5373\u5c06\u51cf\u6cd5\u8f6c\u5316\u4e3a\u8865\u7801\u4e0b\u7684\u52a0\u6cd5\u3002

    \u5176\u4e2d\u52a0\u4e00\u8fd9\u4e00\u6b65\u6070\u597d\u53ef\u4ee5\u901a\u8fc7\u5728\u52a0\u6cd5\u5668\u4e2d\u5fc5\u5b9a\u4e3a 0 \u7684 \\(C_0\\) \u6765\u5b9e\u73b0\u3002\u6211\u4eec\u5728\u8f93\u5165\u4e2d\u6dfb\u52a0\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u53cd\u7801(1's complement)\uff0c\u518d\u7528 \\(C_0\\) \u5b9e\u73b0\u52a0\u4e00\uff0c\u4ece\u800c\u5f97\u5230\u8865\u7801(2's complement)\uff0c\u5c31\u6837\u5c31\u53ef\u4ee5\u5b9e\u73b0\u52a0\u51cf\u6cd5\u5668\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","title":"\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/","title":"Chap 4 Sequential Circuits","text":"

    \u7ea6 6340 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 32 \u5206\u949f

    \u4e0a\u4e00\u7ae0\u8bb2\u7684\u662f\u7ec4\u5408\u7535\u8def\uff0c\u867d\u7136\u7ec4\u5408\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u8bf8\u591a\u529f\u80fd\uff0c\u4f46\u662f\u5b83\u4f9d\u7136\u5b58\u5728\u4e00\u4e9b\u7684\u95ee\u9898\uff1a

    1. \u5bf9\u4e8e\u590d\u6742\u7684\u903b\u8f91\uff0c\u62bd\u8c61\u5c42\u7ea7\u591a\uff0c\u5bfc\u81f4\u786c\u4ef6\u5c42\u9762\u5f00\u9500\u5927\u3001\u8017\u65f6\u957f\uff0c\u4e00\u65b9\u9762\u63d0\u9ad8\u6210\u672c\uff0c\u4e00\u65b9\u9762\u964d\u4f4e\u6548\u7387\uff1b
    2. \u7ec4\u5408\u7535\u8def\u6ca1\u6cd5\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u6240\u6709\u7684\u529f\u80fd\u6a21\u5757\u5bf9\u4e8e\u7279\u5b9a\u7684\u8f93\u5165\u7ed9\u51fa\u76f8\u540c\u7684\u8f93\u51fa\uff1b

    \u800c\u65f6\u5e8f\u7535\u8def\u5219\u62e5\u6709\u5b58\u50a8\u4fe1\u606f\u7684\u80fd\u529b\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u6765\u8bf4\uff0c\u8f93\u51fa\u9664\u4e86\u4e0e\u8f93\u5165\u6709\u5173\uff08\u751a\u81f3\u53ef\u4ee5\u6ca1\u6709\u8f93\u5165\uff09\uff0c\u4e5f\u53ef\u4ee5\u4e0e\u81ea\u8eab \u72b6\u6001(state) \u6709\u5173\u3002

    \u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u5206\u4e3a\u4e24\u7c7b\uff08\u4e3b\u8981\u5206\u7c7b\u4f9d\u636e\u662f\u8f93\u5165\u4fe1\u53f7\u7684\u65f6\u95f4\u548c\u5185\u90e8\u72b6\u6001\u6539\u53d8\u7684\u65f6\u95f4\uff09\uff1a\u540c\u6b65\u65f6\u5e8f\u7535\u8def(synchronous sequential circuit) \u548c \u5f02\u6b65\u65f6\u5e8f\u7535\u8def(asynchronous sequential circuit)\u3002

    The behavior of a synchronous sequential circuit can be defined from the knowledge of its signals at discrete instants of time. The behavior of an asynchronous sequential circuit depends upon the inputs at any instant of time and the order in continuous time in which the inputs change.

    \u4e00\u822c\u6765\u8bf4\uff0c\u5f02\u6b65\u7535\u8def\u7684\u8bbe\u8ba1\u76f8\u5bf9\u56f0\u96be\uff08\u884c\u4e3a\u4e0e\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\u548c\u8f93\u5165\u4fe1\u53f7\u53d8\u5316\u7684\u65f6\u95f4\u5e8f\u5217\u5bc6\u5207\u76f8\u5173\uff09\uff0c\u4f46\u4ecd\u7136\u5341\u5206\u5fc5\u8981\uff0c\u6bd4\u5982\u89e6\u53d1\u5668\u5c31\u662f\u4ee5\u4e00\u90e8\u9501\u5b58\u5668\u4e3a\u6a21\u5757\u8bbe\u8ba1\u7684\uff1b\u800c\u540c\u6b65\u7535\u8def\u7684\u4f7f\u7528\u66f4\u52a0\u5e7f\u6cdb\uff0c\u901a\u5e38\u8fd9\u4e9b\u201c\u79bb\u6563\u7684\u65f6\u523b\u201d\u90fd\u662f\u7531 \u65f6\u949f\u53d1\u751f\u5668(clock generator) \u8fd9\u79cd\u65f6\u5e8f\u5668\u4ef6\u4ea7\u751f\u5468\u671f\u6027\u7684 \u65f6\u949f\u8109\u51b2(clock pulse) \u5e8f\u5217\u6765\u5b9e\u73b0\u7684\uff08\u8fd9\u79cd\u7535\u8def\u4e00\u822c\u88ab\u79f0\u4e3a \u949f\u63a7\u65f6\u5e8f\u7535\u8def(clocked sequential circuit)\uff0c\u7531\u4e8e\u8bbe\u8ba1\u76f8\u5bf9\u5bb9\u6613\uff0c\u9c81\u68d2\u6027\u5f3a\uff0c\u6240\u4ee5\u88ab\u5e7f\u6cdb\u5e94\u7528\uff09\u3002

    \u7f13\u51b2

    \u7f13\u51b2\u5668(buffer) \u4e00\u822c\u901a\u8fc7\u4e24\u4e2a\u975e\u95e8\u4e32\u8054\uff0c\u5e76\u5c06\u8f93\u5165\u8fde\u901a\u8f93\u51fa\u5b9e\u73b0\uff0c\u8fd9\u6837\u80fd\u591f\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u7136\u800c\u65e0\u6cd5\u4fee\u6539\u3002\u800c\u9501\u5b58\u5668\u5c31\u662f\u5728\u7f13\u51b2\u5668\u7684\u57fa\u7840\u4e0a\uff0c\u5c06\u975e\u95e8\u66ff\u6362\u4e3a\u6216\u975e\u95e8\u6216\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684\u3002

    \u5176\u4e2d\uff0c\u4ece\u7ed9\u5b9a\u8f93\u5165\u5230\u66f4\u65b0\u8f93\u51fa\u6709\u4e00\u4e2a \\(t_G\\) \u7684\u5ef6\u65f6\u3002

    \u5f15\u5165

    \u663e\u7136\uff0c\u6839\u636e\u4e0a\u9762\u7684\u6982\u8ff0\uff0c\u65f6\u5e8f\u7535\u8def\u4e2d\u6700\u91cd\u8981\u7684\u5c31\u662f\u4fe1\u606f\u5b58\u50a8\u5143\u4ef6\u3002\u5f53\u8f93\u5165\u4fe1\u53f7\u4e0d\u53d1\u751f\u53d8\u5316\u65f6\uff08\u91cd\u70b9\u662f\u53d8\u5316\uff0c\u5373\u8f93\u5165\u548c\u5b58\u50a8\u4fe1\u606f\u672a\u5fc5\u5b58\u5728\u5bf9\u5e94\u5173\u7cfb\uff09\u5b58\u50a8\u5143\u4ef6\u5c31\u80fd\u591f\u4fdd\u6301\u5176\u5185\u90e8\u5b58\u50a8\u7684\u4e8c\u8fdb\u5236\u6570\u636e\u3002

    \u5b58\u50a8\u5143\u4ef6\u4e3b\u8981\u7531 \u9501\u5b58\u5668(latch) \u548c \u89e6\u53d1\u5668(flip-flop) \u4e24\u79cd\uff0c\u5176\u4e2d\u524d\u8005\u662f\u540e\u8005\u7684\u57fa\u7840\uff0c\u6216\u8005\u8bf4\u591a\u6570\u60c5\u51b5\u4e0b\u6211\u4eec\u4f7f\u7528\u540e\u8005\uff0c\u4f46\u540e\u8005\u7531\u524d\u8005\u6784\u6210\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u9501\u5b58\u5668","title":"\u9501\u5b58\u5668","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr--sr-\u9501\u5b58\u5668","title":"SR & S'R' \u9501\u5b58\u5668","text":"

    SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u57fa\u672c\u539f\u7406\u662f\u4e00\u81f4\u7684\uff0c\u53ea\u4e0d\u8fc7\u524d\u8005\u7528\u7684\u662f\u6216\u975e\u95e8\uff0c\u540e\u8005\u7528\u7684\u662f\u4e0e\u975e\u95e8\u3002

    SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u8f93\u5165\u90fd\u662f S(Set) \u548c R(Reset) \u4e24\u4e2a\u90e8\u5206\uff0c\u8f93\u51fa\u90fd\u662f Q \u548c Q' \u4e24\u4e2a\u90e8\u5206\u3002

    \u540d\u79f0\u4e0a \u7684\u5171\u540c\u70b9\u662f\uff0c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\uff1b\u5bf9\u4e8e R \u548c Q' \u4e5f\u662f\u8fd9\u6837\uff0c\u53ea\u4e0d\u8fc7\u8981\u6ce8\u610f\uff0cS'R'\u9501\u5b58\u5668\u8f93\u5165\u7684\u5e76\u4e0d\u662f\u8fd9\u91cc\u6240\u8bf4\u7684 S\uff0c\u800c\u662f\u5c06 S' \u4f5c\u4e3a\u8f93\u5165\u3002

    SR \u9501\u5b58\u5668S'R' \u9501\u5b58\u5668

    \u4e00\u4e2a\u8bb0\u5fc6\u65b9\u6cd5\u662f\uff0cSR \u7684\u95e8\u5143\u4ef6\u5bf9 1 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u6216\u975e\u95e8 \u7684\u5b9e\u73b0\uff1b\u800c S'R' \u7684\u95e8\u5143\u4ef6\u5bf9 0 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u4e0e\u975e\u95e8 \u7684\u5b9e\u73b0\u3002\u800c\u901a\u8fc7 \u300c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\u300d\u53ef\u4ee5\u5f97\u5230 S\u3001R \u4e0e Q\u3001Q' \u7684\u4f4d\u7f6e\u3002

    \u4f46\u662f\u5b9e\u9645\u7684\u5b58\u50a8\u5143\u4ef6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684 SR/S'R' Latches\uff0c\u6240\u4ee5\u5b83\u4eec\u5f53\u7136\u662f\u5b58\u5728\u95ee\u9898\u7684\u3002\u7531\u4e8e\u7535\u8def\u5b58\u5728\u5ef6\u65f6\uff0c\u6240\u4ee5 S \u548c R \u7684\u8f93\u5165\u5f88\u96be\u540c\u65f6\u5230\u8fbe\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u524d\u9762\u52a0\u4e00\u4e2a\u63a7\u5236\u7aef\uff0c\u5f53\u786e\u4fdd\u4e24\u4e2a\u8f93\u5165\u90fd\u5230\u4f4d\u7684\u65f6\u5019\u518d\u4f7f\u80fd\u3002

    \u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\uff0c\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668(SR Latch with Control Input)\uff08S'R'\u7565\uff09\uff1a

    \u6ce8\u610f\uff01SR \u9501\u5b58\u5668\u901a\u8fc7 \u6216\u975e\u95e8 \u5b9e\u73b0\uff0c\u4f46\u5e26\u8f93\u5165\u63a7\u5236\u7684 SR \u9501\u5b58\u5668\u5219\u901a\u8fc7 \u4e0e\u975e\u95e8 \u5b9e\u73b0\uff01

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#d-\u9501\u5b58\u5668","title":"D \u9501\u5b58\u5668","text":"

    D \u9501\u5b58\u5668\u5b9e\u9645\u4e0a\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\u7684\u6539\u8fdb\u3002\u5176\u4e2d\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u867d\u7136 S \u548c R \u8d77\u4f5c\u7528\u7684\u6709\u4e09\u79cd\u72b6\u6001

    \u6211\u4eec\u5173\u6ce8\u5230\uff0c\u5373\u4f7f\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\uff0c\u4e5f\u5b58\u5728\u4e00\u4e2a\u300cundefined\u300d\u72b6\u6001\uff0c\u800c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u51fa\u73b0\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u60f3\uff0c\u80fd\u4e0d\u80fd\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\u7684\u53d1\u751f\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u7531\u4e8e\u53ef\u4ee5\u901a\u8fc7 C \u6765\u63a7\u5236\u662f\u5426\u4fdd\u6301\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u5f3a\u5236\u8981\u6c42 \\(S = \\overline R\\)\uff0c\u4e8e\u662f\u5c31\u907f\u514d\u4e86 undefined \u60c5\u51b5\u7684\u51fa\u73b0\uff0c\u8fd9\u5c31\u662f D \u9501\u5b58\u5668(D Latch)\u3002

    \u53ea\u6709\u5f53 C \u4e3a 1 \u65f6\uff0cD \u9501\u5b58\u5668\u624d\u80fd\u5199\u5165\u6570\u636e\uff1b\u800c\u5f53 C \u4e3a 0 \u65f6\uff0cD \u9501\u5b58\u5668\u7684\u6570\u636e\u5c31\u4e0d\u4f1a\u53d8\u5316\u3002

    \u900f\u660e\u7684\u5371\u5bb3\uff1a\u7a7a\u7ffb

    \u5f53\u7136\uff0cD \u9501\u5b58\u5668\u4e5f\u5b58\u5728\u95ee\u9898\u3002\u5982\u679c\u6211\u95e8\u5c06 \\(\\overline Q\\) \u63a5\u5230 \\(D\\) \u4e0a\uff0c\u5c31\u4f1a\u53d1\u73b0 C \u7f6e 1 \u65f6 D \u9501\u5b58\u5668\u5c06\u4e0d\u505c\u7684\u53d8\u5316\u5176\u4e2d\u7684\u6570\u636e\uff0c\u51fa\u73b0 \u7a7a\u7ffb\uff0c\u5bfc\u81f4\u6211\u4eec\u65e0\u6cd5\u786e\u5b9a C \u7f6e 0 \u65f6 Q \u7684\u8f93\u51fa\u7a76\u7adf\u662f\u4ec0\u4e48\uff0c\u800c\u8fd9\u662f\u975e\u5e38\u5371\u9669\u7684\u3002

    \u8fd9\u4e3b\u8981\u662f\u56e0\u4e3a D \u9501\u5b58\u5668\u7684\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u662f\u76f4\u63a5\u66b4\u9732\u51fa\u6765\u3001\u540c\u65f6\u5141\u8bb8\u53d8\u5316\u7684\uff08\u4e0d\u662f\u540c\u65f6\u53d8\u5316\uff0c\u662f\u6307\u5728 Input \u53ef\u4ee5\u53d8\u7684\u65f6\u5019 Output \u4e5f\u80fd\u53d8\uff09\uff0c\u5373 \u900f\u660e(transparent) \u7684\u3002\u8fd9\u5c31\u5bfc\u81f4\u4e86\u5728\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u91cc\uff0c\u540c\u65f6\u5b58\u5728 \u53ef\u4ee5\u4e92\u76f8\u5f71\u54cd \u7684\u4e24\u4e2a\u4e1c\u897f\u3002\u8fd9\u4e5f\u662f\u89e6\u53d1\u5668\u6240\u89e3\u51b3\u7684\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668","title":"\u89e6\u53d1\u5668","text":"

    \u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u63d0\u5230\u7684\uff0c\u7531\u300c\u900f\u660e\u300d\u5f15\u53d1\u7684\u95ee\u9898\uff0c\u800c\u91c7\u7528\u89e6\u53d1\u5668\u7684\u8bbe\u8ba1\u3002\u901a\u8fc7\u7ec4\u5408\u4e24\u4e2a\u9501\u5b58\u5668\uff0c\u4e3b\u8981\u6709\u4e24\u79cd\u5b9e\u73b0\u65b9\u6cd5\uff1a

    1. \u5728\u6709\u8109\u51b2\uff08\u9ad8\u7535\u5e73\uff09\u65f6\uff0c\u4fee\u6539\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fdd\u6301\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff1b\u5728\u6ca1\u6709\u8109\u51b2\uff08\u4f4e\u7535\u5e73\uff09\u65f6\u5019\u4fdd\u6301\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fee\u6539\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u66f4\u65b0\u89e6\u53d1\u5668\u7684\u72b6\u6001\uff0c\u5373 \u4e3b\u4ece\u5f0f(master-slave)\u89e6\u53d1\u5668\uff1b
    2. \u4ec5\u5728\u65f6\u949f\u7684\u8fb9\u7f18\u89e6\u53d1\uff0c\u5373\u5728\u7279\u5b9a\u65f6\u523b\u4ec5\u63a5\u53d7\u4e00\u4e2a\u8f93\u5165\uff0c\u5373 \u8fb9\u6cbf\u89e6\u53d1\u5f0f(edge-triggered)\u89e6\u53d1\u5668\uff1b

    \u8fb9\u6cbf\u89e6\u53d1\u5f0f D \u89e6\u53d1\u5668\u662f\u76ee\u524d\u4f7f\u7528\u6700\u5e7f\u6cdb\u7684\u89e6\u53d1\u5668\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr-\u4e3b\u4ece\u89e6\u53d1\u5668","title":"SR \u4e3b\u4ece\u89e6\u53d1\u5668","text":"

    \u867d\u7136\u5b83\u53eb FF\uff0c\u4f46\u5b83\u5e76\u4e0d\u7b26\u5408 FF \u7684\u7279\u5f81\uff0c\u7136\u800c\u5206\u7c7b\u4e0a\u53c8\u5c5e\u4e8e pulse-triggered FF\u3002

    SR \u89e6\u53d1\u5668\u4e4b\u6240\u4ee5\u662f\u6240\u8c13\u7684 pulse-triggered \u7684\uff0c\u662f\u56e0\u4e3a\u5728 C \u7f6e 1\uff0cS \u548c R \u7f6e 0 \u65f6\uff0c\u5982\u679c\u51fa\u73b0\u566a\u97f3\uff08S \u6216 R \u8f93\u5165\u77ed\u6682\u5730\u8df3\u53d8\u5230 1\uff09\uff0c\u5c31\u4f1a\u5bfc\u81f4 Slave \u5199\u5165\u5f02\u5e38\u6570\u636e\uff08\u8fd9\u4e2a\u884c\u4e3a\u88ab\u79f0\u4e3a 1s-catching\uff09\u3002

    \u4f46\u662f\u6211\u4e2a\u4eba\u8ba4\u4e3a\u8fd9\u662f SR \u81ea\u8eab\u6709\u4e24\u4e2a\u4fdd\u6301\u6001\uff08C \u7f6e 0 \u4fdd\u6301\uff1bC \u7f6e 1\uff0cS \u548c R \u7f6e 0\uff09\u5bfc\u81f4\u7684\u5f0a\u7aef\uff0c\u800c\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u4f7f\u7528\u540e\u8005\u4f5c\u4e3a\u4fdd\u6301\u6001\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u8fb9\u6cbf\u89e6\u53d1\u5f0f\u89e6\u53d1\u5668","title":"\u8fb9\u6cbf\u89e6\u53d1\u5f0f\u89e6\u53d1\u5668","text":"

    \u4e0a\u9762\u5df2\u7ecf\u8bf4\u8fc7\u4e86\uff0c\u8fb9\u6cbf\u89e6\u53d1\u5f0f\u89e6\u53d1\u5668\u4e3b\u8981\u5bf9\u8109\u51b2\u7684 \u4e0a\u5347\u6cbf \u6216 \u4e0b\u964d\u6cbf \u654f\u611f\u3002

    \u4e0b\u56fe\u4e3a\u4e0a\u5347\u6cbf\u89e6\u53d1(positive-edge-triggered)\u7684 D \u89e6\u53d1\u5668\u7684\u5927\u81f4\u539f\u7406\u56fe\uff08\u5c06 C \u524d\u7684\u975e\u95e8\u53bb\u6389\u5219\u53ef\u5f97\u5230\u4e0b\u964d\u6cbf\u89e6\u53d1(negative-edge-triggered)\u7684 D \u89e6\u53d1\u5668\uff09\u3002

    \u5173\u6ce8\u4e0a\u5347\u6cbf\u524d\u540e\uff0c\u4e0a\u5347\u6cbf\u524d\u4e00\u523b\uff0c\u4e3b\u9501\u5b58\u5668\u53ef\u5199\uff0c\u4ece\u9501\u5b58\u5668\u53ea\u8bfb\uff1b\u4e0a\u5347\u6cbf\u540e\u4e00\u523b\uff0c\u4e3b\u9501\u5b58\u5668\u53ea\u8bfb\uff0c\u4ece\u9501\u5b58\u5668\u53ea\u5199\uff0c\u4e14\u5199\u5165\u7684\u662f\u4e3b\u9501\u5b58\u5668\u5b58\u50a8\u7684\u503c\u2014\u2014\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5b58\u7684\u662f\u4e0a\u5347\u6cbf\u524d\u4e00\u523b\u5199\u5165\u4e3b\u9501\u5b58\u5668\u7684\u5185\u5bb9\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0cD \u89e6\u53d1\u5668\u6ca1\u6709\u300c\u4fdd\u6301\u300d\u6001\u3002\u5982\u679c\u8981\u4f7f D \u89e6\u53d1\u5668\u4fdd\u6301\uff0c\u53ef\u4ee5\u4f7f\u65f6\u949f\u8109\u51b2\u5931\u6548\u6216\u901a\u8fc7 MUX \u5c06\u8f93\u51fa\u63a5\u5230\u8f93\u5165\u5b9e\u73b0\u3002\u5176\u4e2d\u524d\u8005\u4e0d\u592a\u5e38\u7528\uff0c\u56e0\u4e3a\u53d7\u95e8\u63a7\u7684\u65f6\u949f\u8109\u51b2\u8fdb\u5165\u89e6\u53d1\u5668\u65f6\u6709\u5ef6\u8fdf\uff0c\u5373 \u65f6\u949f\u504f\u79fb(clock skew)\u3002\u5173\u4e8e\u65f6\u949f\u504f\u79fb\u7684\u66f4\u8be6\u7ec6\u4ecb\u7ecd\u53ef\u4ee5\u79fb\u6b65 \u7b2c\u516d\u7ae0#\u4fdd\u6301\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u6807\u51c6\u56fe\u5f62\u7b26\u53f7","title":"\u6807\u51c6\u56fe\u5f62\u7b26\u53f7","text":"

    \u5e26\u5706\u5708\u8868\u793a\u8d1f\u903b\u8f91\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u76f4\u63a5\u8f93\u5165","title":"\u76f4\u63a5\u8f93\u5165","text":"

    \u8fd9\u4e9b\u76f4\u63a5\u8f93\u5165\u5f80\u5f80\u662f\u5f02\u6b65\u7684\uff0c\u4e00\u822c\u7528\u6765\u5f02\u6b65\u7f6e\u4f4d\uff08\u76f4\u63a5\u7f6e\u4f4d\u6216\u9884\u7f6e\uff09\u6216\u5f02\u6b65\u590d\u4f4d\uff08\u76f4\u63a5\u590d\u4f4d\u6216\u6e05\u96f6\uff09\u3002

    \u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u6765\u8bf4\uff0c\u300c\u590d\u4f4d\u300d\u6216\u300c\u7f6e\u4f4d\u300d\u8fd9\u79cd\u8f93\u5165\u5e38\u5e38\u4f5c\u4e3a\u521d\u59cb\u5316\uff0c\u5373\u786e\u5b9a\u5404\u4e2a\u89e6\u53d1\u5668\u7684\u300c\u521d\u59cb\u72b6\u6001\u300d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u7684\u57fa\u672c\u63cf\u8ff0\u65b9\u6cd5","title":"\u89e6\u53d1\u5668\u7684\u57fa\u672c\u63cf\u8ff0\u65b9\u6cd5","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u5206\u6790","title":"\u65f6\u5e8f\u7535\u8def\u5206\u6790","text":"

    \u4e3a\u4e86\u5206\u6790\u65f6\u5e8f\u7535\u8def\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e9b\u5de5\u5177\u6765\u8868\u793a\u65f6\u5e8f\u7535\u8def\u7684\u4e00\u4e9b\u7279\u5f81\u4e0e\u903b\u8f91\u3002\u89c2\u5bdf\u65f6\u5e8f\u7535\u8def\u548c\u7ec4\u5408\u7535\u8def\u7684\u533a\u522b\uff0c\u53d1\u73b0\u6700\u6838\u5fc3\u7684\u5c31\u662f\u903b\u8f91\u8fd0\u7b97\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u4e86\u300c\u72b6\u6001\u300d\u53c2\u4e0e\u8fd0\u7b97\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u5728\u5404\u4e2a\u7ec4\u5408\u7535\u8def\u5206\u6790\u4e2d\u91c7\u7528\u7684\u8868\u793a\u65b9\u6cd5\u4e2d\uff0c\u6dfb\u52a0\u8868\u793a\u300c\u72b6\u6001\u300d\u7684\u4fe1\u606f\u3002

    \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u53ea\u662f\u5355\u7eaf\u7684\u5c06\u300c\u72b6\u6001\u300d\u4f5c\u4e3a\u4e00\u4e2a\u65b0\u7684\u8f93\u5165\uff0c\u4f5c\u4e3a\u589e\u91cf\u6dfb\u52a0\u5230\u8868\u8fbe\u65b9\u5f0f\u4e2d\uff0c\u4f1a\u53d1\u73b0\u8fd9\u4e9b\u8868\u8ff0\u4f1a\u663e\u5f97\u5f88\u91cd\u3002\u6240\u4ee5\u6211\u4eec\u4e5f\u9700\u8981\u5bfb\u627e\u4e00\u79cd\u66f4\u597d\u7684\u529e\u6cd5\u6765\u8868\u8fbe\u65f6\u5e8f\u7535\u8def\u4e2d\u7684\u903b\u8f91\uff0c\u8fd9\u5c31\u662f\u300c\u72b6\u6001\u56fe\u300d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u7684\u8f93\u5165\u65b9\u7a0b","title":"\u89e6\u53d1\u5668\u7684\u8f93\u5165\u65b9\u7a0b","text":"

    \u89e6\u53d1\u5668\u7684\u8f93\u5165\u65b9\u7a0b(flip-flop input equation) \u4e3b\u8981\u662f\u4e3a\u5176\u63d0\u4f9b\u4e00\u4e2a\u4ee3\u6570\u8868\u8fbe\u65b9\u5f0f\u3002\u5b83\u7684\u4e3b\u8981\u60f3\u6cd5\u662f\u24f5\u8868\u8fbe\u6bcf\u4e00\u4e2a\u89e6\u53d1\u5668\u7684\u8f93\u5165\u4e0e\u8f93\u51fa\u4e4b\u95f4\u7684\u5173\u7cfb\uff1b\u24f6\u8868\u8fbe\u6bcf\u4e00\u4e2a\u76f4\u63a5\u8f93\u51fa\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u3002\u5176\u4e2d\uff0c\u89e6\u53d1\u5668\u7684\u8f93\u51fa\u7b26\u53f7\u8868\u793a\u4e86\u5176\u7c7b\u578b\uff08\u5373\u7b26\u53f7\uff09\u4e0e\u8f93\u51fa\uff08\u5373\u4e0b\u6807\uff09\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e2a\u7535\u8def\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u4e2d\u5305\u542b\u4e24\u4e2a\u89e6\u53d1\u5668 \\(D_A\\) \u548c \\(D_B\\)\uff0c\u4ee5\u53ca\u4e00\u4e2a\u7ec4\u5408\u903b\u8f91\u8f93\u51fa \\(Y\\)\uff0c\u56e0\u800c\u53ef\u4ee5\u6839\u636e\u7535\u8def\u7684\u7279\u5f81\uff0c\u5f97\u5230\u4e0b\u9762\u8fd9\u51e0\u4e2a\u5f0f\u5b50\uff1a

    \\[ \\begin{aligned} D_A & = AX + BX \\\\ D_B & = \\overline{A}X \\\\ Y & = (A + B)\\overline{X} \\end{aligned} \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u8868","title":"\u72b6\u6001\u8868","text":"

    \u5f53\u7136\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u903b\u8f91\u6709\u65f6\u5019\u4e5f\u53ef\u4ee5\u901a\u8fc7\u72b6\u6001\u8868\u6765\u63cf\u8ff0\uff0c\u53ea\u4e0d\u8fc7\u4e0e\u7ec4\u5408\u7535\u8def\u7684 \u771f\u503c\u8868 \u4e0d\u540c\uff0c\u72b6\u6001\u8868(state table) \u6709\u56db\u680f\uff1a\u5f53\u524d\u72b6\u6001(present state)\u3001\u8f93\u5165(input)\u3001\u4e0b\u4e00\u72b6\u6001(next state)\u3001\u8f93\u51fa(output)\u3002\u5176\u542b\u4e49\u662f\u6bd4\u8f83\u663e\u7136\u7684\uff0c\u53ea\u4e0d\u8fc7\u9700\u8981\u901a\u8fc7\u7535\u8def\u56fe\u5f97\u5230\u72b6\u6001\u8868\uff0c\u9700\u8981\u9996\u5148\u5f97\u5230\u300c\u5f53\u524d\u72b6\u6001\u300d\u5411\u300c\u4e0b\u4e00\u72b6\u6001\u300d\u8f6c\u79fb\u7684\u65b9\u7a0b\uff0c\u5373\u5bf9\u4e8e\u67d0\u4e2a\u65f6\u523b \\(t\\) \u7684\u89e6\u53d1\u5668 \\(A\\) \u7684\u8f93\u51fa \\(A(t)\\)\uff0c\u9700\u8981\u5f97\u5230\u5b83\u4e0b\u4e00\u523b\u7684\u72b6\u6001 \\(A(t+1) = f(A(t), ...)\\)\u3002

    \u540c\u6837\u4ee5\u8fd9\u4e2a\u7535\u8def\u4e3a \ud83c\udf30\uff1a

    \u9996\u5148\u6211\u4eec\u5bf9 \\(D_A\\) \u5f97\u5230\u8f6c\u79fb\u65b9\u7a0b\uff1a\\(A(t+1) = D_A = A(t)X + B(t)X\\)\uff0c\u53ef\u4ee5\u7b80\u5199\u4e3a \\(A(t+1) = D_A = AX+BX\\)\u3002\u7c7b\u4f3c\u5730\u4e5f\u80fd\u5f97\u5230 \\(B\\) \u7684\u8f6c\u79fb\u65b9\u7a0b\u3002

    \u4e8e\u662f\uff0c\u6839\u636e\u8fd9\u4e9b\u4fe1\u606f\uff0c\u6211\u4eec\u53ef\u4ee5\u5199\u51fa\u5b83\u7684\u72b6\u6001\u8868\uff1a

    Present StateAB InputX Next StateAB OutputY 00 0 00 0 00 1 01 0 01 0 00 1 01 1 11 0 10 0 00 1 10 1 10 0 11 0 00 1 11 1 10 0

    Mealy model circuit & Moore model circuit

    \u5982\u679c\u8f93\u51fa\u65e2\u4f9d\u8d56\u4e8e\u5f53\u524d\u72b6\u6001\uff0c\u4e5f\u4f9d\u8d56\u4e8e\u8f93\u5165\u7684\u65f6\u5e8f\u7535\u8def\uff0c\u5219\u79f0\u4e3a \u7c73\u52d2\u578b\u7535\u8def(Mealy model circuit)\uff1b\u800c\u5982\u679c\u8f93\u51fa\u53ea\u4f9d\u8d56\u4e8e\u5f53\u524d\u72b6\u6001\uff0c\u5219\u79f0\u4e3a \u6469\u5c14\u578b\u7535\u8def(Moore model circuit)\u3002

    \u5728 \u72b6\u6001\u56fe \u4e2d\uff0c\u6211\u4eec\u8fd8\u5c06\u518d\u4e00\u6b21\u9047\u5230\u8fd9\u4e24\u4e2a\u4eba\u540d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u56fe","title":"\u72b6\u6001\u56fe","text":"

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u72b6\u6001\u8868\u6bd4\u8f83\u6e05\u6670\u7684\u8868\u8fbe\u4e86\u4e0d\u540c\u7684\u72b6\u6001\u548c\u8f93\u5165\u5f97\u5230\u7684\u7ed3\u679c\uff0c\u4f46\u662f\u5bf9\u4e8e\u300c\u4e0d\u540c\u72b6\u6001\u4e4b\u95f4\u662f\u5982\u4f55\u8f6c\u6362\u7684\u300d\u8fd9\u4ef6\u4e8b\u7684\u63cf\u8ff0\u5e76\u4e0d\u6e05\u6670\u3002\u800c\u5bf9\u4e8e\u300c\u8054\u7cfb\u300d\u8fd9\u4ef6\u4e8b\uff0c\u6709\u5411\u56fe\u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u5f62\u5f0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u4ecb\u7ecd \u72b6\u6001\u56fe(state diagram)\u3002

    \u72b6\u6001\u56fe\u627f\u8f7d\u7684\u4fe1\u606f\u91cf\u548c\u72b6\u6001\u8868\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u4e5f\u662f\u9700\u8981\u8868\u8fbe \u5f53\u524d\u72b6\u6001(present state)\u3001\u8f93\u5165(input)\u3001\u4e0b\u4e00\u72b6\u6001(next state)\u3001\u8f93\u51fa(output) \u8fd9\u56db\u4e2a\u4e1c\u897f\u3002\u53ea\u4e0d\u8fc7\u300c\u4e0b\u4e00\u72b6\u6001\u300d\u662f\u901a\u8fc7\u6709\u5411\u8fb9\u6765\u8868\u793a\u7684\u3002\u5f53\u524d\u72b6\u6001\u4f5c\u4e3a\u4e00\u4e2a node \u7684\u5c5e\u6027\uff1b\u800c\u8f93\u5165\u4f5c\u4e3a edge \u7684\u4e00\u4e2a\u5c5e\u6027\uff1b\u81f3\u4e8e\u8f93\u51fa\uff0c\u6839\u636e\u5b83\u662f\u653e\u5728 edge \u4e0a\u8fd8\u662f node \u4e0a\uff0c\u5206\u4e3a \u7c73\u52d2\u578b(Mealy) \u548c \u6469\u5c14\u578b(Moore) \u4e24\u79cd\u3002

    Mealy

    \u4f8b\u5982\uff0c\u8fd9\u662f\u4e00\u4e2a \u7c73\u52d2\u578b \u7684\u72b6\u6001\u56fe\uff0c\u4ee5\u53ca\u5bf9\u5e94\u7684\u72b6\u6001\u8868\u3002

    \u56e0\u4e3a\u7c73\u52d2\u578b\u7535\u8def\u7684 \u8f93\u51fa\u4e0e\u5f53\u524d\u72b6\u6001\u548c\u8f93\u5165\u90fd\u6709\u5173\uff0c\u6240\u4ee5\u8f93\u51fa\u4f1a\u548c\u8f93\u5165\u653e\u5728\u4e00\u8d77\uff0c\u5373\u653e\u5728 edge \u91cc\u3002

    \u5bf9\u4e8e\u7c73\u52d2\u578b\uff0cnode \u5185\u7684\u4e8c\u8fdb\u5236\u4e3a present state \u4e2d\u7684 AB\uff1bedge \u4e0a\u5206\u522b\u4e3a input \u548c output\uff1aX/Y\uff1b\u6709\u5411\u8fb9\u8868\u8fbe\u4e86\u6bcf\u4e2a\u72b6\u6001\u5728\u7279\u5b9a\u8f93\u5165\u4e0b\u7684\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002

    \u4f8b\u5982\uff0c\u5173\u6ce8 node 00\uff0c\u5b83\u6709\u4e00\u6761\u81ea\u73af 0/0\uff0c\u5bf9\u5e94 \u72b6\u6001\u8868 \u7684\u7b2c\u4e00\u884c\uff1b\u5b83\u6709\u4e00\u6761 edge 1/0 \u6307\u5411 node 01\uff0c\u5bf9\u5e94 \u72b6\u6001\u8868\u7684\u7b2c\u4e8c\u884c\u3002

    \u5f53\u7136\uff0c\u7c73\u52d2\u578b\u662f\u6709 \u7f3a\u9677 \u7684\uff0c\u5728\u65f6\u5e8f\u7535\u8def\u8bbe\u8ba1\u4e4b\u540e\u7684\u6b65\u9aa4\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u6839\u636e\u5b83\u6765\u5bf9\u6bcf\u4e00\u4e2a\u72b6\u6001\u8bbe\u8ba1\u8f93\u51fa\u65b9\u7a0b\u3002\u6b64\u65f6\u7531\u4e8e\u4e24\u4e2a\u8f93\u51fa\u5171\u4eab\u540c\u4e00\u4e2a\u76ee\u6807\u72b6\u6001\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u4e24\u4e2a\u8f93\u51fa\u7ed3\u5408\u5230\u540c\u4e00\u4e2a\u5f0f\u5b50\u4e2d\uff0c\u8fd9\u5c06\u63d0\u9ad8\u8bbe\u8ba1\u96be\u5ea6\u548c\u7ec4\u5408\u7535\u8def\u6210\u672c\u3002

    Moore

    \u800c\u4e0b\u9762\u662f\u4e00\u4e2a \u6469\u5c14\u578b \u7684\u72b6\u6001\u56fe\uff0c\u4ee5\u53ca\u5bf9\u5e94\u7684\u72b6\u6001\u8868\u3002

    \u56e0\u4e3a\u6469\u5c14\u578b\u7535\u8def\u7684 \u8f93\u51fa\u53ea\u4e0e\u5f53\u524d\u72b6\u6001\u6709\u5173\uff0c\u6240\u4ee5\u8f93\u51fa\u4f1a\u548c\u5f53\u524d\u72b6\u6001\u653e\u5728\u4e00\u8d77\uff0c\u5373\u653e\u5728 node \u91cc\u3002

    \u5bf9\u4e8e\u6469\u5c14\u578b\uff0cnode \u5185\u7684\u4e8c\u8fdb\u5236\u8868\u793a present state \u548c output\uff1aA/Z\uff1bedge \u4e0a\u5217\u4e3e\u4e86\u8fd9\u79cd\u8f6c\u79fb\u53ef\u80fd\u7684 inputs\uff1aXY\u3002

    \u4f8b\u5982\uff0c\u5173\u6ce8 node 0/0\uff0c\u5b83\u6709\u4e24\u6761\u81ea\u73af 00 \u548c 11\uff0c\u5206\u522b\u5bf9\u5e94 \u72b6\u6001\u8868 \u7684\u7b2c\u4e00\u884c\u548c\u7b2c\u56db\u884c\uff1b\u5b83\u6709\u4e24\u6761 edge 01 \u548c 10 \u6307\u5411 node 1/1\uff0c\u5bf9\u5e94 \u72b6\u6001\u8868 \u7684\u7b2c\u4e8c\u884c\u548c\u7b2c\u4e09\u884c\u3002

    \u6469\u5c14\u578b\u4e5f\u5b58\u5728 \u7f3a\u9677 \u7684\uff0c\u975e\u5e38\u663e\u7136\uff0c\u76f8\u6bd4\u4e8e\u7c73\u52d2\u578b\uff0c\u6469\u5c14\u578b\u9700\u8981\u66f4\u591a\u7684\u72b6\u6001\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u7c73\u52d2\u578b\u503e\u5411\u4e8e\u8868\u8fbe\u300c\u5728\u7279\u5b9a\u72b6\u6001\u4e0b\uff0c\u7279\u5b9a\u8f93\u5165\u5c06\u5bfc\u81f4\u67d0\u79cd\u7ed3\u679c\uff0c\u4ee5\u53ca\u72b6\u6001\u8f6c\u79fb\u300d\uff1b\u800c\u6469\u5c14\u578b\u503e\u5411\u4e8e\u8868\u8fbe\u300c\u7279\u5b9a\u8f93\u5165\u5c06\u5bfc\u81f4\u67d0\u4e2a\u72b6\u6001\u5411\u53e6\u5916\u4e00\u4e2a\u72b6\u6001\u8f6c\u79fb\uff0c\u800c\u8f93\u51fa\u66f4\u50cf\u662f\u4e00\u79cd\u72b6\u6001\u7684\u7ed3\u679c\u300d\u3002

    \u73b0\u5b9e\u7684\u5de5\u7a0b\u8bbe\u8ba1\u4e2d\uff0c\u6709\u65f6\u4f1a\u7ed3\u5408\u4f7f\u7528\u7c73\u52d2\u578b\u548c\u6469\u5c14\u578b\uff0c\u5373\u5728\u540c\u4e00\u72b6\u6001\u56fe\u4e2d\u53ef\u80fd\u6df7\u7528\u4e24\u79cd\u7c7b\u578b\u3002

    \u72b6\u6001\u56fe\u8fd8\u6709\u8fdb\u9636\u5f62\u6001\uff0c\u4e4b\u540e\u4f1a\u63d0\u53ca\uff0c\u5c31\u662f \u72b6\u6001\u673a\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u7b49\u4ef7\u72b6\u6001","title":"\u7b49\u4ef7\u72b6\u6001","text":"

    \u5bf9\u4e8e\u4e24\u4e2a\u72b6\u6001\uff0c\u5982\u679c\u5b83\u4eec\u5bf9\u4e8e\u540c\u4e00\u8f93\u5165\u5e8f\u5217\u7684\u54cd\u5e94\u662f\u5b8c\u5168\u76f8\u540c\u7684\uff08\u5305\u62ec\u76f8\u540c\u7684\u8f93\u51fa\u548c\u76f8\u540c\u7684\u72b6\u6001\u8f6c\u79fb\uff09\uff0c\u90a3\u4e48\u8fd9\u4e24\u4e2a\u72b6\u6001\u662f\u7b49\u4ef7\u7684\u3002

    Equivalent State

    \u672a\u7b80\u5316\u7684\u72b6\u6001\u56fe\u7b80\u5316\u7b49\u4ef7\u72b6\u6001\u540e\u7684\u72b6\u6001\u56fe

    \u6211\u4eec\u9996\u5148\u6ce8\u610f\u5230\uff0c\u72b6\u6001 S2 \u548c S3 \u5bf9\u4e8e\u8f93\u5165 0\uff0c\u76f8\u5e94\u7684\u8f93\u51fa\u90fd\u662f 1\uff0c\u4e0b\u4e00\u72b6\u6001\u90fd\u662f S0\uff1b\u5bf9\u4e8e\u8f93\u5165 1\uff0c\u76f8\u5e94\u7684\u8f93\u51fa\u90fd\u662f 0\uff0c\u4e0b\u4e00\u72b6\u6001\u90fd\u662f S2\u3002\u6240\u4ee5 S2 \u548c S3 \u662f\u7b49\u4ef7\u72b6\u6001\u3002\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e24\u4e2a\u7b49\u4ef7\u72b6\u6001\u7b80\u5316\u6210\u540c\u4e00\u4e2a\u72b6\u6001\uff0c\u8bb0\u4e3a S2\u3002

    \u66f4\u8fdb\u4e00\u6b65\u5730\uff0c\u6211\u4eec\u6ce8\u610f\u5230 S1 \u548c\u65b0\u7684 S2 \u4e5f\u662f\u7b49\u4ef7\u72b6\u6001\uff0c\u6211\u4eec\u7ee7\u7eed\u5316\u7b80\u5b83\u4eec\u3002

    \u5bfb\u627e\u7b49\u4ef7\u72b6\u6001\u5e76\u5408\u5e76\u5b83\u4eec\uff0c\u4e0d\u65ad\u91cd\u590d\u8fd9\u4e2a\u8fc7\u7a0b\u5c31\u53ef\u4ee5\u5b9e\u73b0\u72b6\u6001\u56fe\u7684\u7b80\u5316\u3002

    \u5ef6\u65f6\u5206\u6790

    \u5ef6\u65f6\u5206\u6790\u662f\u4e00\u4e2a\u91cd\u96be\u70b9\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\uff0c\u5c06\u5728\u4e4b\u540e\u5355\u72ec\u5f00\u4e00\u4e2a\u5c0f\u7ed3\u91cd\u70b9\u4ecb\u7ecd\u3002

    \u8bf7\u53c2\u8003 \u5ef6\u65f6\u5206\u6790\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","title":"\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","text":"

    \u7c7b\u6bd4\u7ec4\u5408\u903b\u8f91\u7535\u8def\u901a\u8fc7\u771f\u503c\u8868\u8bbe\u8ba1\u7535\u8def\uff0c\uff08\u540c\u6b65\uff09\u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u4f9d\u636e\u72b6\u6001\u8868\uff08\u6216\u7b49\u4ef7\u8868\u8fbe\uff0c\u5982\u72b6\u6001\u56fe\uff09\u6765\u8bbe\u8ba1\u7535\u8def\u3002\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u89e6\u53d1\u5668\u4ee5\u53ca\u5176\u5b83\u7ec4\u5408\u7535\u8def\u7684\u9009\u62e9\u4e0e\u8bbe\u8ba1\uff1a

    \u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684\u8bbe\u8ba1\u662f\u7c7b\u4f3c\u7684\uff0c\u5982\u4e0b\uff1a

    1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
      1. \u63cf\u8ff0\u7cfb\u7edf\u884c\u4e3a\u8fc7\u7a0b\u4e2d\uff0c\u8981\u6ce8\u610f\u72b6\u6001\u7684\u590d\u7528\uff08\u4e0d\u8fc7\u5e76\u975e\u72b6\u6001\u8d8a\u5c11\u6210\u672c\u5c31\u8d8a\u5c0f\uff0c\u8fd9\u91cc\u6709\u89e6\u53d1\u5668\u6570\u91cf\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684 trade-off\uff09\uff1b
      2. \u786e\u5b9a\u7535\u8def\u7684\u521d\u59cb\u72b6\u6001\uff08\u590d\u4f4d\u72b6\u6001(reset state)\uff0c\u901a\u8fc7\u7ed9\u5b9a\u590d\u4f4d(reset)\u4fe1\u53f7\u5b9e\u73b0\uff09\uff1b
        • \u590d\u4f4d\u4e00\u822c\u53ef\u4ee5\u662f\u5f02\u6b65\u7684\uff1b
    2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
    3. \u7ed9\u8bbe\u8ba1\u597d\u7684\u72b6\u6001\u7f16\u7801\u8d4b\u503c\uff0c\u5f97\u5230\u5177\u4f53\u7684\u72b6\u6001\u8868\uff1b
      1. \u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 \u6309\u8ba1\u6570\u987a\u5e8f\u3001 \u6309\u683c\u96f7\u7801\u3001\u7528\u72ec\u70ed\u7801 \u6765\u7ed9\u72b6\u6001\u8d4b\u503c\uff0c\u66f4\u7cfb\u7edf\u7684\u65b9\u6cd5\u6bd4\u8f83\u590d\u6742\uff0c\u4e0d\u505a\u8ba8\u8bba\uff1b
      2. \u5176\u4e2d\u8fd8\u6709\u4e00\u79cd\u60c5\u51b5\u662f\u6240\u9700\u8981\u7684\u72b6\u6001\u4e0d\u80fd\u5b8c\u6574\u586b\u5145 \\(2^n\\) \u79cd\u60c5\u51b5\uff0c\u9700\u8981\u8bbe\u8ba1\u65e0\u6548\u72b6\u6001\uff0c\u8fd9\u79cd\u65f6\u5019\u53ef\u4ee5\u4e0d\u8003\u8651\u5b83\u4eec\uff1b
    4. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u4f7f\u7528\u7684\u89e6\u53d1\u5668\u53ca\u5176\u8f93\u5165\u65b9\u7a0b\uff1b
    5. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u8f93\u51fa\u65b9\u7a0b\uff1b
    6. \u4f18\u5316\u8f93\u5165\u65b9\u7a0b\u548c\u8f93\u51fa\u65b9\u7a0b\uff1b
    7. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
    8. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
      • \u4e3b\u8981\u5c31\u662f\u770b\u80fd\u4e0d\u80fd\u590d\u73b0\u72b6\u6001\u56fe\uff1b
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u673a","title":"\u72b6\u6001\u673a","text":"

    \u5c3d\u7ba1\u5728\u5c0f\u89c4\u6a21\u7684\u8bbe\u8ba1\u4e2d\uff0c\u72b6\u6001\u56fe\u8868\u73b0\u826f\u597d\uff0c\u4f46\u662f\u968f\u7740\u8bbe\u8ba1\u7684\u7cfb\u7edf\u89c4\u6a21\u53d8\u5927\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u52a0\u6cdb\u7528\u7684\u65b9\u5f0f\u6765\u8868\u8fbe\u7c7b\u4f3c\u7684\u65f6\u5e8f\u903b\u8f91\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u5728\u72b6\u6001\u56fe\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u4fee\u6539\uff0c\u8bbe\u8ba1\u4e86 \u72b6\u6001\u673a(State-Machine Diagram) \u6765\u505a\u8fd9\u4ef6\u4e8b\u3002

    \u72b6\u6001\u673a\u6df7\u7528\u4e86\u7c73\u52d2\u578b\u548c\u6469\u5c14\u578b\u7684\u8f93\u51fa\u683c\u5f0f\uff0c\u4f18\u52a3\u5728 \u72b6\u6001\u56fe \u4e2d\u6709\u6240\u63d0\u53ca\u3002\u5e76\u4e14\uff0c\u6709\u9650\u56fe\u5c06\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u4e5f\u5199\u5165\uff0c\u603b\u4f53\u4e0a\u5bf9\u7535\u8def\u8bbe\u8ba1\u66f4\u53cb\u597d\u3002\u4e0b\u56fe\u662f\u72b6\u6001\u673a\u7684\u4e00\u4e2a\u201c\u8303\u5f0f\u201d\u3002

    Generic State Diagram Template

    \u9996\u5148\u89e3\u91ca\u4e00\u4e0b\u8fd9\u4e2a\u201c\u8303\u5f0f\u201d\uff1a

    \u5177\u4f53\u89e3\u91ca\u72b6\u6001\u673a\u6709\u54ea\u4e9b\u5185\u5bb9\uff0c\u4ee5\u53ca\u5404\u4e2a\u90e8\u5206\u4e4b\u95f4\u7684\u903b\u8f91\u3002\u5173\u4e8e\u5404\u4e2a\u90e8\u5206\u51fa\u73b0\u7684\u4f4d\u7f6e\uff0c\u8bf7\u53c2\u8003 Template\u3002

    \u53e6\u5916\uff0c\u4e3a\u4e86\u7b80\u5316\u8bed\u53e5\uff0c\u4e0b\u9762\u7684\u8bf4\u6cd5\u7701\u7565\u4e86\u65f6\u949f\uff0c\u8bf7\u8bb0\u5f97\u8003\u8651\u3002

    \u72b6\u6001\u673a\u6a21\u578b\u4e3b\u8981\u6709\u4e09\u8981\u7d20\uff1a\u8f93\u5165\u6761\u4ef6(Input Conditions)\u3001\u72b6\u6001\u8f6c\u79fb(Transitions) \u548c \u8f93\u51fa\u884c\u4e3a(Output Actions)\u3002\u603b\u4f53\u6765\u8bf4\uff0c\u8f93\u5165\u6761\u4ef6\u544a\u8bc9\u6211\u4eec\u6574\u4e2a\u72b6\u6001\u673a\u8981\u5982\u4f55\u53d8\u5316\uff1b\u72b6\u6001\u8f6c\u79fb\u63cf\u8ff0\u4e86\u72b6\u6001\u673a\u7684\u5185\u90e8\u8f6c\u79fb\u884c\u4e3a\uff0c\u5373\u56fe\u8bba\u4e0a\u7684\u6709\u5411\u8054\u901a\u5173\u7cfb\uff1b\u8f93\u51fa\u884c\u4e3a\u63cf\u8ff0\u52a8\u6001\u53d8\u5316\u8fc7\u7a0b\u4e2d\u72b6\u6001\u673a\u7684\u5bf9\u5916\u8868\u8fbe\u3002\u5176\u4e2d\uff0c\u72b6\u6001\u8f6c\u79fb\u548c\u8f93\u51fa\u884c\u4e3a\u662f\u6211\u4eec\u9700\u8981\u5173\u6ce8\u7684\u72b6\u6001\u673a\u7684\u4e24\u4e2a\u7ef4\u5ea6\uff0c\u8f93\u5165\u6761\u4ef6\u662f\u6211\u4eec\u7528\u6765\u505a\u5b9e\u65f6\u5224\u65ad\u7684\u5916\u90e8\u4f9d\u636e\u3002

    \u300c\u8f93\u5165\u6761\u4ef6\u300d\u662f\u7531\u8f93\u5165\u53d8\u91cf\u5f62\u6210\u7684\u4e00\u4e2a\u5e03\u5c14\u65b9\u7a0b\uff0c\u5728\u6574\u4e2a\u72b6\u6001\u673a\u4e2d\uff0c\u8f93\u5165\u662f\u53d8\u5316\u7684\u201c\u56e0\u53d8\u91cf\u201d\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u65e0\u8bba\u662f\u72b6\u6001\u8f6c\u79fb\u8fd8\u662f\u8f93\u51fa\uff0c\u90fd\u53d6\u51b3\u4e8e\u8f93\u5165\u6761\u4ef6\u3002\u800c\u5bfc\u81f4\u7279\u5b9a\u884c\u4e3a\u7684\u8f93\u5165\u6761\u4ef6\u5219\u88ab\u5206\u7c7b\u4e3a \u8f6c\u79fb\u6761\u4ef6(Transition Condition, TC) \u548c \u8f93\u51fa\u6761\u4ef6(Output Condition, OC)\u3002

    \u300c\u72b6\u6001\u8f6c\u79fb\u300d\u5728\u56fe\u4e2d\u8868\u73b0\u4e3a\u6709\u5411\u8fb9\uff0c\u5f53 TC \u6210\u7acb\u65f6\uff0c\u72b6\u6001\u8f6c\u79fb\u53d1\u751f\uff1b\u6216\u8005\u5bf9\u4e8e\u65e0\u6761\u4ef6\u8f6c\u79fb\uff0c\u53ea\u8981\u5f97\u5230\u65f6\u949f\u8109\u51b2\u5c31\u4f1a\u8f6c\u79fb\u5230\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002

    \u300c\u8f93\u51fa\u884c\u4e3a\u300d\u5728\u72b6\u6001\u673a\u4e2d\u6709\u56db\u79cd\u89e6\u53d1\u65b9\u6cd5\uff08\u5373\u56db\u79cd OC\uff09\uff1aMoore\u3001\u4e0d\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Independent, TCI) Mealy\u3001\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Dependent, TCD) Mealy \u548c \u4f9d\u8d56\u8f6c\u79fb\u548c\u8f93\u51fa\u6761\u4ef6(Transition and Output-condition Dependent, TOCD) Mealy\u3002\u6839\u636e\u5b57\u9762\u610f\u601d\u6765\u770b\uff1a

    In a given state, an output action occurs if: (a) it is unconditional (Moore), (b) TCI and its output condition OC = 1, (c) TCD and its transition condition TC = 1, and (d) TOCD and its transition condition TC and output condition OC are both equal to 1, i.e, TC\u00b7OC = 1. Note that Moore and TCI output actions attached to a state, apply to all transitions from the state as well.

    \u56de\u5230\u8f93\u51fa\u884c\u4e3a\u672c\u8eab\uff0c\u5f53 OC \u6210\u7acb\u65f6\u8f93\u51fa\u884c\u4e3a\u53d1\u751f\uff0c\u4e00\u822c\u4f1a\u5c06\u8f93\u51fa\u53d8\u91cf\u6807\u51fa\uff0c\u5982\u679c\u5199\u7684\u662f NOT X\uff0c\u8868\u793a OC \u6210\u7acb\u65f6 X \u5e94\u4e3a 0\uff1b\u5982\u679c\u5199\u7684\u662f X\uff0c\u5219\u8868\u793a OC \u6210\u7acb\u65f6 X \u4e3a 1\u3002

    \u6ce8\u610f\u70b9

    \u6b64\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u70b9\u9700\u8981\u8fa8\u6790\uff0c\u7531\u4e8e\u300cTransition\u300d\u8868\u793a\u7684\u662f\u201c\u4e0b\u4e00\u4e2a\u201d\u72b6\u6001\uff0c\u6240\u4ee5\u5bf9\u4e8e\u5f53\u524d\u65f6\u523b\uff0c\u5f53\u524d\u8282\u70b9\u7684\u8f93\u51fa\u548c\u51fa\u5ea6\u7684\u8f93\u51fa\u4e0d\u80fd\u51b2\u7a81\u3002\u4f8b\u5982\uff0c\u4e0b\u56fe\u56e0\u4e3a Moore \u8f93\u51fa\u884c\u4e3a\u7684 Z \u548c TC=AB \u90a3\u6761\u8fb9\u7684 Z' \u51b2\u7a81\uff0c\u6240\u4ee5\u975e\u6cd5\u3002

    \u5f53\u7136\uff0c\u975e\u6cd5\u72b6\u6001\u673a\u5e76\u4e0d\u53ea\u6709\u8fd9\u4e00\u4e2a\u5224\u636e\u3002\u4e0d\u8fc7\u6838\u5fc3\u601d\u60f3\u5c31\u662f \u4e0d\u80fd\u6709\u6b67\u4e49\u6216\u51b2\u7a81\u4e14\u9700\u8981\u5145\u5206\uff0c\u66f4\u6570\u5b66\u7684\u8868\u8fbe\u662f\uff0c\u5fc5\u987b\u6ee1\u8db3\u5982\u4e0b\u4e24\u4e2a\u6761\u4ef6\uff1a

    1.\u975e\u4ea4\uff1a\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u72b6\u6001 \\(S_i\\)\uff0c\u5b83\u7684\u4efb\u610f\u4e24\u4e2a\u51fa\u5ea6 \\((T_{ij},T_{jk})\\) \u90fd\u4e0d\u80fd\u540c\u65f6\u6210\u7acb\uff0c\u5373\u5e94\u6709\uff1a

    \\[ \\forall (T_{ij},T_{ik})\\;,\\;\\;T_{ij}\\cdot T_{ik} = 0 \\]

    2.\u5145\u5206\uff1a\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u72b6\u6001 \\(S_i\\)\uff0c\u5b83\u7684\u6240\u6709\u51fa\u5ea6\u6761\u4ef6\u5e94\u8be5\u6db5\u76d6\u6240\u6709\u53ef\u80fd\uff0c\u5373\u5e94\u6709\uff1a

    \\[ \\sum_{j}T_{ij} = 1 \\]

    \u4e0a\u8ff0\u662f\u5bf9\u4e8e TC \u7684\u7ea6\u675f\uff0c\u800c\u5bf9\u4e8e OC\uff0c\u4e5f\u5b58\u5728\u76f8\u5e94\u7684\u975e\u4ea4\u548c\u5145\u5206\u7684\u7ea6\u675f\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u7ec6\u8282\u4e0d\u540c\u503c\u5f97\u5f15\u8d77\u6ce8\u610f\uff1a

    \u7f29\u5199\u5bf9\u7167\u8868 \u7f29\u5199 \u542b\u4e49 \u6ce8\u91ca TC Transition Condition \u8f6c\u79fb\u6761\u4ef6\uff1a\u5bfc\u81f4 Transition \u7684 Input Condition OC Output Condition \u8f93\u51fa\u6761\u4ef6\uff1a\u5bfc\u81f4 Output Actions \u7684 Input Condition TCI Transition-condition Independent \u4e0d\u4f9d\u8d56\u8f6c\u79fb\uff1a\u53ea\u4e0e State \u6709\u5173\u7684 Output Actions TCD Transition-condition Dependent \u4f9d\u8d56\u8f6c\u79fb\uff1aTransition Condition \u6210\u7acb\u624d\u6709 Output Actions TOCD Transition and Output-condition Dependent \u4f9d\u8d56\u8f6c\u79fb\u548c\u8f93\u51fa\u65b9\u7a0b\uff1aTransition Condition \u548c Output Condition \u90fd\u6210\u7acb\u624d\u6709 Output Actions State Machine Diagram \ud83c\udf30

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u5ef6\u65f6\u5206\u6790","title":"\u5ef6\u65f6\u5206\u6790","text":"

    \u9996\u5148\uff0c\u81ea\u4e0a\u800c\u4e0b\u7684\u7ed9\u51fa\u89c2\u5ff5\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\u6709\u4e24\u4e2a\u4e3b\u8981\u90e8\u5206\u548c\u4e00\u4e2a\u6b21\u8981\u90e8\u5206\uff1a

    1. \u7ec4\u5408\u7535\u8def\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
    2. \u89e6\u53d1\u5668\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
    3. \u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\uff1b

    \u5e76\u4e14\u5f80\u5f80\u662f\u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\uff0c\u8ba1\u7b97\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u7684\u65f6\u95f4\u3002\u6700\u6838\u5fc3\u7684\u95ee\u9898\u5c31\u662f\u8ba1\u7b97\u7535\u8def\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\u7684\u6700\u77ed\u65f6\u949f\u5468\u671f\u3002\u63a5\u4e0b\u6765\uff0c\u81ea\u4e0a\u800c\u4e0b\u5730\u8fdb\u884c\u7ec6\u8282\u8865\u5145\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","title":"\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","text":"

    \u8fd9\u4e00\u90e8\u5206\u7684\u8be6\u7ec6\u5185\u5bb9\u5df2\u7ecf\u5728 \u4e0a\u4e00\u7ae0 \u4ecb\u7ecd\u8fc7\u4e86\uff0c\u5728\u8fd9\u91cc\uff0c\u4e3a\u4e86\u7b80\u5316\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6211\u4eec\u5168\u90e8\u91c7\u7528 \\(t_{pd}\\)\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u5ef6\u65f6","title":"\u89e6\u53d1\u5668\u5ef6\u65f6","text":"

    \u89e6\u53d1\u5668\u5ef6\u65f6\u76f8\u6bd4\u7ec4\u5408\u7535\u8def\u5ef6\u65f6\u590d\u6742\u5f88\u591a\uff0c\u4e3b\u8981\u76ee\u7684\u662f\u4e3a\u4e86\u4fdd\u8bc1\u91c7\u6837\u3002\u4e5f\u5c31\u662f\u8bf4\u5b83\u7684\u201c\u5ef6\u65f6\u201d\u5e76\u4e0d\u4ec5\u4ec5\u662f\u56e0\u4e3a\u7535\u4fe1\u53f7\u4f20\u64ad\u7684\u5ef6\u8fdf\uff0c\u8fd8\u6709\u4e3a\u4e86\u4fdd\u8bc1\u4fe1\u53f7\u7a33\u5b9a\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u3002

    \u5927\u81f4\u6765\u8bf4\u6709\u4e09\u4e2a\u90e8\u5206\uff1a

    \u4e00\u7bc7\u4ecb\u7ecd Setup Time \u548c Hold Time \u7684 \u6587\u7ae0\u3002

    \u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\u4e0d\u540c\uff0c\u4e3b\u8981\u7684 Setup Time \u4e5f\u4e0d\u540c\uff1a

    \u5176\u4e2d\u6bd4\u8f83\u91cd\u8981\u7684\u4e00\u4e9b\u70b9\u662f\uff1a

    1. \u8fd9\u51e0\u4e2a\u65f6\u95f4\u70b9\u8d77\u70b9/\u7ec8\u70b9\u90fd\u662f\u89e6\u53d1\u8fb9\u7f18\uff1b
    2. Propagation Time \u4e00\u5b9a\u957f\u4e8e Hold Time\uff0c\u56e0\u6b64\u5728\u8ba1\u7b97\u7535\u8def\u5ef6\u8fdf\u65f6\u53ea\u8003\u8651 Propagation Time\uff1b
    3. Pulse-trigger \u548c Edge-trigger \u5728\u8868\u73b0\u4e0a\u7684\u533a\u522b\u5728\u4e8e Setup Time\uff0c\u524d\u8005\u9700\u8981\u8986\u76d6\u6574\u4e2a pulse(pos or neg)\uff1b
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u677e\u5f1b\u65f6\u95f4","title":"\u677e\u5f1b\u65f6\u95f4","text":"

    \u5b9e\u9645\u4e0a\u8fd9\u5c31\u662f\u7ed9\u6574\u4e2a\u7535\u8def\u7684\u4e00\u4e2a\u201c\u5bb9\u5dee\u201d\u65f6\u95f4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u8bef\u5dee\uff0c\u4f46\u662f\u7531\u4e8e\u901a\u8fc7\u524d\u4e24\u8005\u8ba1\u7b97\u51fa\u6765\u7684\u662f\u6700\u77ed\u65f6\u95f4\uff0c\u6240\u4ee5\u677e\u5f1b\u65f6\u95f4\u5fc5\u5b9a\u975e\u8d1f\u3002\uff08\u4e0d\u80fd\u5012\u6263\uff01\uff09

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","title":"\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","text":"

    \u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u8ba1\u7b97\u5b9e\u9645\u4e0a\u662f\u4e3a\u4e86\u8ba1\u7b97\u65f6\u5e8f\u7535\u8def\u8fd0\u4f5c\u7684\u6700\u5927\u9891\u7387\u4ee5\u8bbe\u8ba1\u65f6\u949f\u9891\u7387\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7b97\u51fa\u7535\u8def\u80fd\u591f\u7a33\u5b9a\u5de5\u4f5c\u7684\u6700\u5c0f\u65f6\u949f\u671f\u3002

    \u5176\u8ba1\u7b97\u9075\u5faa\u4e00\u5b9a\u65b9\u6cd5\uff1a

    \u56fe\u4e2d \\(t_{pd,FF}\\) \u6307\u89e6\u53d1\u5668\u7684 propagation time\uff0c\\(t_{COMB}\\) \u6307\u7ec4\u5408\u7535\u8def\u7684\u603b\u4f20\u64ad\u65f6\u95f4\uff08\u4e00\u822c\u60c5\u51b5\u4e0b \\(t_{COMB} = \\max{\\sum_i t_{pd,gate_i}}\\)\uff09\uff0c\\(t_{s}\\) \u6307\u89e6\u53d1\u5668\u7684 setup time\uff0c\\(t_{slack}\\) \u8868\u793a\u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\u3002

    \uff08\u5047\uff09\u7ecf\u9a8c\u4e4b\u8c08

    \u4e00\u822c\u4ece\u4e00\u4e2a FF \u7684\u8f93\u51fa\u51fa\u53d1\u5230 FF \u7684\u8f93\u5165\u7ed3\u675f\u3002

    \u63a5\u4e0b\u6765\u653e\u51e0\u9053\u4f8b\u9898\u3002

    \u9898\u9762\u7b54\u6848

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/","title":"Chap 5 Digital Hardware Implementation","text":"

    \u7ea6 3031 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f

    \u5f15\u5165

    \u672c\u7ae0\u5185\u5bb9\u4e3b\u8981\u5173\u4e8e\u6570\u5b57\u903b\u8f91\u7684\u786c\u4ef6\u5b9e\u73b0\uff0c\u5206\u522b\u4ecb\u7ecd \u8bbe\u8ba1\u7a7a\u95f4(The Design Space) \u548c \u53ef\u7f16\u7a0b\u6280\u672f(Programmable Implementation Technologies)\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u8bbe\u8ba1\u7a7a\u95f4","title":"\u8bbe\u8ba1\u7a7a\u95f4","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u96c6\u6210\u7535\u8def","title":"\u96c6\u6210\u7535\u8def","text":"

    \u96c6\u6210\u7535\u8def(IC)\u8fd9\u90e8\u5206\u5185\u5bb9\u5728 \u7b2c\u4e09\u7ae0#\u96c6\u6210\u7535\u8def \u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u4e86\uff0c\u6b64\u5904\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#cmos","title":"CMOS","text":"

    \u524d\u7f6e\u77e5\u8bc6

    \u91d1\u5c5e\u6c27\u5316\u7269\u534a\u5bfc\u4f53\u573a\u6548\u5e94\u7ba1(Metal-Oxide-Semiconductor Field-Effect Transistor\uff0c or MOSFET)\u7b80\u79f0 MOS\uff0c\u662f\u4e00\u79cd\u5e7f\u6cdb\u5e94\u7528\u4e8e\u6570\u5b57\u7535\u8def\u548c\u6a21\u62df\u7535\u8def\u7684\u786c\u4ef6\u3002MOS \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5176\u5177\u4f53\u5de5\u4f5c\u539f\u7406\u6b64\u5904\u4e0d\u505a\u5c55\u5f00\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053\uff0cMOS \u7684\u4f5c\u7528\u76f8\u5f53\u4e8e\u4e00\u4e2a\u5f00\u5173\uff0c\u901a\u8fc7\u63a7\u5236\u95e8\u6781(Gate)\u7684\u7535\u538b\uff0c\u6765\u63a7\u5236 MOS \u7684\u5f00\u95ed\u3002

    \u4e92\u8865\u5f0f\u91d1\u5c5e\u6c27\u5316\u7269\u534a\u5bfc\u4f53(Complementary Metal\u2013Oxide\u2013Semiconductor)\u7b80\u79f0 CMOS\uff0c\u662f\u96c6\u6210\u7535\u8def\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u79cd\u8bbe\u8ba1\u5de5\u827a\u3002\u5176\u4e3b\u8981\u6709\u5bf9\u79f0\u7684\u4e24\u90e8\u5206\u7ec4\u6210\uff0c\u8fd9\u4e24\u90e8\u5206\u5206\u522b\u4f7f\u7528\u4e86 n-channel MOS(NMOS)\u548c p-channel MOS(PMOS)\u3002

    \u5bf9\u4e8e NMOS\uff0c\u95e8\u6781\u8f93\u5165 X \u4e3a 0 \u65f6\u65ad\u5f00\uff08\u79f0\u4e3a\u201c\u5e38\u5f00\u201d\uff09\uff0cX \u4e3a 1 \u65f6\u5bfc\u901a\uff1b\u5bf9\u4e8e PMOS\uff0c\u95e8\u6781\u8f93\u5165 X \u4e3a 0 \u65f6\u5bfc\u901a\uff08\u79f0\u4e3a\u201c\u5e38\u95ed\u201d\uff09\uff0cX \u4e3a 1 \u65f6\u65ad\u5f00\u3002

    \u66f4\u8fdb\u4e00\u6b65\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528 MOS \u7684\u5f00\u5173\u7279\u6027\uff0c\u6765\u5b9e\u73b0\u4e00\u4e9b\u7b80\u5355\u7684\u201c\u4e0e\u201d\u548c\u201c\u6216\u201d\u7684\u903b\u8f91\uff08\u6ce8\u610f\u8fd9\u91cc\u7684\u5b9e\u73b0\u662f\u6709\u95ee\u9898\u7684\uff0c\u771f\u6b63\u7684\u5b9e\u73b0\u5e94\u8be5\u7528 CMOS\uff09\uff1a

    \u5de6\u56fe\u5b9e\u73b0\u4e86 \\(\\overline{X} \\cdot \\overline{Y}\\)\uff0c\u53f3\u56fe\u5b9e\u73b0\u4e86 \\(X+Y\\)\u3002

    \u4e0b\u9762\u7ed9\u51fa\u4e00\u5e45\u56fe\u6765\u4ecb\u7ecd CMOS \u7684\u7ecf\u5178\u7ed3\u6784\uff1a

    \u9996\u5148\u8ba9\u6211\u4eec\u6765\u770b\u56fe(a)\uff0c\u8fd9\u662f CMOS \u7684\u901a\u7528\u7ed3\u6784\uff08\u53ef\u4ee5\u88ab\u79f0\u4f5c static CMOS\uff09\u3002\u5176\u53ef\u4ee5\u5206\u4e3a\u4e0a\u4e0b\u4e24\u90e8\u5206\uff0c\u4e0a\u534a\u90e8\u5206\u63a5\u7535\u6e90\uff0c\u7531 PMOS \u8bbe\u8ba1\u51fa \\(F\\) \u7684\u903b\u8f91\uff1b\u4e0b\u534a\u90e8\u5206\u63a5\u5730\uff0c\u7531 NMOS \u8bbe\u8ba1\u51fa \\(\\overline{F}\\) \u7684\u903b\u8f91\u3002\u4e5f\u5c31\u662f\u8bf4 CMOS \u540c\u65f6\u9700\u8981\u5b9e\u73b0 \\(F\\) \u548c \\(\\overline{F}\\)\uff0c\u8fd9\u5c31\u662f\u5176\u540d\u79f0 complementary \u7684\u7531\u6765\u3002

    CMOS \u5728\u7ed3\u6784\u4e0a\u7684\u6700\u5927\u7279\u5f81\u5c31\u662f\uff0c\u5176 PMOS \u7684\u7535\u8def\u548c NMOS \u7684\u7535\u8def\u662f\u5bf9\u5076\u7684\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u51fa\u4e24\u8005\u4e2d\u7684\u4e00\u4e2a\uff0c\u5c31\u53ef\u4ee5\u5229\u7528\u5bf9\u5076\u76f4\u63a5\u5f97\u5230\u53e6\u4e00\u4e2a\u3002\u5982\u679c\u89c9\u5f97\u4e0d\u591f\u663e\u7136\uff0c\u8bf7\u590d\u4e60\u4e00\u4e0b\u7b2c\u4e8c\u7ae0\u7684 #\u5bf9\u5076\u6cd5\u5219 \u548c #\u4e92\u8865\u51fd\u6570 \u6709\u5173\u5185\u5bb9\u3002

    \u7ecf\u9a8c\u4e4b\u8c08

    \u6839\u636e\u903b\u8f91\u8868\u8fbe\u5f0f\u8bbe\u8ba1 CMOS \u7684\u65f6\u5019\uff0c\u5efa\u8bae\u4ece\u4e0b\u534a\u90e8\u5206\u5f00\u59cb\u8bbe\u8ba1\uff0c\u5373\u7528 NMOS \u8868\u8fbe\u51fa \\(\\overline{F}\\)\uff0c\u7136\u540e\u518d\u5bf9\u5076\u5730\u8bbe\u8ba1\u51fa\u4e0a\u534a\u90e8\u5206\u3002\u4e0a\u56fe\u7ed9\u51fa\u4e86\u6700\u7ecf\u5178\u7684 NOR\u3001NAND\u3001NOT \u7684 CMOS \u5b9e\u73b0\uff0c\u81ea\u5df1\u8bd5\u8bd5\u5427\uff01

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0cPMOS \u7b26\u53f7\u4e2d\u7684\u5706\u5708\u5e76\u4e0d\u4ee3\u8868\u8d1f\u903b\u8f91\u3002\u5b83\u53ea\u662f\u4e3a\u4e86\u533a\u5206 NMOS \u548c PMOS\uff0c\u5e76\u6ca1\u6709\u4efb\u4f55\u903b\u8f91\u610f\u4e49\uff01

    \u4e3a\u4ec0\u4e48 PMOS \u63a5\u7535\u6e90\u800c NMOS \u63a5\u5730\uff1f

    \u8fd9\u4e2a\u95ee\u9898\u6570\u5b57\u903b\u8f91\u8bbe\u8ba1\u8fd9\u95e8\u8bfe\u5e76\u4e0d\u6df1\u7a76\uff0c\u901a\u5e38\u8ba4\u4e3a\u91c7\u7528\u8fd9\u79cd\u63a5\u6cd5\u548c PMOS \u4e0e NMOS \u7684\u7535\u5b66\u7279\u6027\u6709\u5173\u3002

    \u6211\u4eec\u6ce8\u610f\u5230\uff0c\u5bf9\u4e8e\u4efb\u4f55\u8f93\u5165\uff0cCMOS \u7684\u4e0a\u4e0b\u4e24\u90e8\u5206\u603b\u662f\u4e00\u4e2a\u5bfc\u901a\uff0c\u800c\u53e6\u4e00\u4e2a\u65ad\u5f00\u3002\u8fd9\u5c31\u610f\u5473\u7740\u7406\u8bba\u4e0a CMOS \u5e76\u4e0d\u5b58\u5728\u7535\u6d41\u901a\u8def\uff08\u5373\u4ece VCC \u6307\u5411 GND \u7684\u7535\u8def\uff09\uff0c\u6240\u4ee5\u4e0d\u8bba CMOS \u662f\u5426\u5904\u5728\u5de5\u4f5c\u72b6\u6001\uff0c\u5176\u603b\u662f\u6ca1\u6709\u80fd\u8017\u7684\uff08\u7136\u800c\u5b9e\u9645\u4e0a\u4f1a\u5b58\u5728\u5c11\u91cf\u80fd\u8017\uff0c\u8fd9\u662f\u56e0\u4e3a\u8f93\u5165\u4fe1\u53f7\u53d8\u5316\u4e0d\u662f\u7edd\u5bf9\u77ac\u65f6\u7684\uff0cCMOS \u4f1a\u5728\u4fe1\u53f7\u53d8\u5316\u7684\u8fb9\u6cbf\u77ed\u6682\u5730\u5f62\u6210\u7535\u6d41\u901a\u8def\uff09\u3002

    \u5f97\u76ca\u4e8e CMOS \u5de7\u5999\u7684\u5bf9\u5076\u8bbe\u8ba1\uff0c\u5176\u5177\u6709\u8f83\u5f3a\u7684\u6297\u566a\u80fd\u529b\u548c\u8f83\u4f4e\u7684\u80fd\u8017\u3002\u76f4\u81f3\u4eca\u5929\uff0cCMOS \u4ecd\u7136\u5728 LSI \u548c VLSI \u96c6\u6210\u7535\u8def\u8bbe\u8ba1\u4e2d\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u53ef\u7f16\u7a0b\u6280\u672f","title":"\u53ef\u7f16\u7a0b\u6280\u672f","text":"

    \u76f4\u63a5\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u6765\u4fee\u6539\u7535\u8def\u529f\u80fd\u88ab\u79f0\u4e3a\u786c\u7f16\u7a0b\uff0c\u800c\u53ef\u7f16\u7a0b\u6280\u672f\u8ba9\u6211\u4eec\u80fd\u591f\u5728\u4e0d\u76f4\u63a5\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u7684\u60c5\u51b5\u4e0b\uff0c\u5229\u7528\u8f6f\u4ef6\u7f16\u7a0b\u6765\u95f4\u63a5\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u3002\u786c\u7f16\u7a0b\u7684\u64cd\u4f5c\u8005\u662f\u8bbe\u8ba1\u5236\u9020\u8005(manufacturer)\uff0c\u800c\u8f6f\u7f16\u7a0b\u7684\u64cd\u4f5c\u8005\u662f\u7528\u6237(user)\u3002

    \u4e3a\u4ec0\u4e48\u6211\u4eec\u9700\u8981\u53ef\u7f16\u7a0b\u6280\u672f\uff1f

    \u4ee5\u4e00\u5757\u82af\u7247\u4e3a\u4f8b\uff0c\u5176\u6210\u672c\u4e3b\u8981\u5305\u62ec\u56fa\u5b9a\u6210\u672c\uff08\u7528\u4e8e\u8bbe\u8ba1\u5236\u4f5c\u63a9\u6a21\uff0c\u5373 mask\uff09\u548c\u5236\u4f5c\u6210\u672c\uff08\u52a0\u5de5\u4e00\u5757\u82af\u7247\u7684\u539f\u6599\u548c\u5de5\u827a\u6210\u672c\uff09\u3002\u56fa\u5b9a\u6210\u672c\u662f\u6781\u9ad8\u7684\uff0c\u5982\u679c\u4e00\u5757\u82af\u7247\u666e\u9002\u6027\u4e0d\u591f\u5f3a\uff0c\u7528\u6237\u7fa4\u4e0d\u591f\u5e7f\uff0c\u90a3\u4e48\u751f\u4ea7\u6570\u989d\u5c31\u4e0d\u591f\u5927\uff0c\u4ece\u800c\u5747\u644a\u5230\u6bcf\u5757\u82af\u7247\u7684\u56fa\u5b9a\u6210\u672c\u5c31\u4f1a\u5f88\u9ad8\u3002\u6240\u4ee5\u5bf9\u4e8e\u6709\u7279\u5b9a\u903b\u8f91\u529f\u80fd\u7684\u82af\u7247\u800c\u8a00\uff0c\u5176\u5b9a\u4f4d\u7684\u53d7\u4f17\u7fa4\u4f53\u5fc5\u7136\u662f\u5e9e\u5927\u7684\uff0c\u5f80\u5f80\u8fbe\u5230\u4e07\u7ea7\u751a\u81f3\u4ebf\u7ea7\uff0c\u6bd4\u5982\u624b\u673a\u82af\u7247\u3002

    \u4f46\u662f\uff0c\u5f88\u591a\u65f6\u5019\u6211\u4eec\u9700\u8981\u67d0\u79cd\u7279\u5b9a\u529f\u80fd\u7684\u82af\u7247\uff0c\u4f46\u8fd9\u79cd\u82af\u7247\u53ea\u7528\u5728\u5c11\u90e8\u5206\u5730\u65b9\u3002\u8fd9\u65f6\u5019\u5982\u679c\u4e13\u95e8\u53bb\u8bbe\u8ba1\u4e00\u6b3e\u82af\u7247\uff0c\u90a3\u4e48\u5176\u5747\u644a\u6210\u672c\u5c31\u4f1a\u975e\u5e38\u9ad8\u3002\u53ef\u7f16\u7a0b\u6280\u672f\u53ef\u4ee5\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u4e00\u6b3e\u901a\u7528\u7684\u53ef\u7f16\u7a0b\u7684\u82af\u7247\uff0c\u5e76\u5728\u51fa\u5382\u540e\u6839\u636e\u7528\u6237\u7684\u7279\u5b9a\u9700\u6c42\u8fdb\u884c\u76f8\u5e94\u7684\u7f16\u8f91\u4fee\u6539\u5373\u53ef\u3002

    \u53ef\u7f16\u7a0b\u6280\u672f\u5728\u786c\u4ef6\u5c42\u9762\u4e3b\u8981\u6709\u4e09\u79cd\u5b9e\u73b0\u624b\u6bb5\uff1a

    \u8fdb\u4e00\u6b65\u5730\uff0c\u53ef\u7f16\u7a0b\u6280\u672f\u53ef\u4ee5\u5206\u4e3a \u6c38\u4e45\u7f16\u7a0b\u6280\u672f \u548c \u53ef\u91cd\u7f16\u7a0b\u6280\u672f \uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u5e38\u89c1\u7684\u53ef\u7f16\u7a0b\u6280\u672f","title":"\u5e38\u89c1\u7684\u53ef\u7f16\u7a0b\u6280\u672f","text":"

    \u8bfe\u7a0b\u4e2d\u4ecb\u7ecd\u7684\u53ef\u7f16\u7a0b\u6280\u672f\u4e3b\u8981\u6709\u5982\u4e0b\u56db\u79cd\uff1a

    \u524d\u4e09\u8005\u90fd\u53ea\u80fd\u7f16\u7a0b\u4e00\u6b21\uff08\u5c5e\u4e8e\u6c38\u4e45\u7f16\u7a0b\u6280\u672f\uff09\uff0c\u5982\u4e0b\u662f\u5b83\u4eec\u7684\u53ef\u7f16\u7a0b\u5185\u5bb9\uff1a

    FPGA

    \u73b0\u573a\u53ef\u7f16\u7a0b\u903b\u8f91\u95e8\u9635\u5217(Field-Programmable Gate Array, or FPGA)

    \u5f15\u5165

    \u7531\u4e8e\u4e4b\u540e\u51fa\u73b0\u7684\u7535\u8def\u56fe\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u6240\u4ee5\u9700\u8981\u5f15\u5165\u4e00\u4e9b\u903b\u8f91\u7b26\u53f7\u3002

    Buffer

    \u7b80\u5316\u8868\u793a\u4e00\u4e2a\u53d8\u91cf\u7684\u81ea\u8eab\u548c\u5176\u975e\uff1b

    Wire connecting

    \u5728\u53ef\u7f16\u7a0b\u903b\u8f91\u7535\u8def\u4e2d\uff0c\u7ebf\u7684\u8fde\u63a5\u4e0d\u518d\u53ea\u6709\u5355\u7eaf\u7684\u8fde\u901a\u548c\u4e0d\u8fde\u901a\u7684\u5173\u7cfb\uff1a

    \u5bf9\u4e8e\u4e24\u6761\u76f8\u4ea4\u5bfc\u7ebf\uff1a

    \u7279\u522b\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5143\u5668\u4ef6\u7684\u6240\u6709\u8f93\u5165\u90fd\u662f programmable\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u628a\u8fd9\u4e2a \u274c \u753b\u5230\u903b\u8f91\u95e8\u4e0a\uff08\u5982\u4e0b\u56fe e \u548c f\uff09\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#rom","title":"ROM","text":"

    ROM \u7531 \\(N\\) \u4e2a\u8f93\u5165\uff0c\\(M\\) \u4e2a\u8f93\u51fa\uff0c\u4ee5\u53ca \\(2^N\\) \u4e2a\u8bd1\u7801\u540e\u7684\u6700\u5c0f\u9879\u7ec4\u6210\u3002\u5176\u4e2d\uff0c\u56fa\u5b9a\u7684 AND \u7528\u4e8e\u8bbe\u8ba1\u8bd1\u7801\u5668\uff0c\u5b9e\u73b0\u6240\u6709\u7684 \\(2^N\\) \u4e2a\u6700\u5c0f\u9879\uff1b\u53ef\u7f16\u7a0b\u7684 OR \u7528\u4e8e\u628a\u8fd9\u4e9b\u6700\u5c0f\u9879\u201c\u6216\u201d\u8d77\u6765\u5e76\u5b9e\u73b0\u7279\u5b9a\u903b\u8f91\u3002

    \u4e25\u683c\u6765\u8bf4\uff0cROM \u662f\u4e0d\u53ef\u7f16\u7a0b\u7684\uff0cPROM \u624d\u662f\u53ef\u7f16\u7a0b\u7684\u3002PROM(Programmable ROM) \u901a\u8fc7 fuse \u6216 anti-fuse \u7b49\u624b\u6bb5\u5b9e\u73b0\u53ef\u7f16\u7a0b\uff0c\u6240\u4ee5\u5728\u51fa\u5382\u540e\u4ec5\u53ef\u8fdb\u884c\u4e00\u6b21\u7f16\u7a0b\u4fee\u6539\uff0c\u5c5e\u4e8e\u6c38\u4e45\u7f16\u7a0b\u6280\u672f\u3002

    ROM \u53ef\u4ee5\u88ab\u89c6\u4f5c\u4e00\u4e2a memory\uff0c\u8f93\u5165\u63d0\u4f9b\u4e86\u4e00\u7ec4\u5730\u5740(address)\uff0c\u800c\u8f93\u51fa\u5219\u662f\u8fd9\u7ec4\u5730\u5740\u5bf9\u5e94\u7684 memory \u4e2d\u5b58\u50a8\u7684\u4fe1\u606f\u3002\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u770b\uff0cROM \u7684\u786e\u5177\u6709\u300c\u53ea\u8bfb\u300d\u7684\u7279\u5f81\u3002

    eg

    ROM \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pal","title":"PAL","text":"

    PAL \u4e0e ROM \u6070\u6070\u76f8\u53cd\uff0c\u5176\u5177\u6709\u56fa\u5b9a\u7684 OR \u548c\u4e00\u6279\u53ef\u7f16\u7a0b\u7684 AND\u3002

    eg

    PAL \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pla","title":"PLA","text":"

    PLA \u5728\u8bbe\u8ba1\u4e0a\u548c ROM \u7c7b\u4f3c\uff0c\u533a\u522b\u5728\u4e8e PLA \u5e76\u4e0d\u4f7f\u7528\u8bd1\u7801\u5668\u83b7\u5f97\u6240\u6709\u6700\u5c0f\u9879\uff0c\u800c\u662f\u7528\u53ef\u7f16\u7a0b\u7684 AND \u9635\u5217\u6765\u4ee3\u66ff\u8bd1\u7801\u5668\u3002

    eg

    PLA \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#lookup-tables","title":"Lookup Tables","text":"LUT

    \u67e5\u627e\u8868(Lookup Tables, or LUT)

    \u901a\u8fc7\u8ba9\u6570\u636e\u6e90\u63a5\u5185\u5b58\uff0c\u5e76\u901a\u8fc7\u4fee\u6539\u771f\u503c\u8868\u5185\u7684\u503c\uff0c\u5373\u4fee\u6539\u5185\u5b58\u91cc\u7684\u503c\uff0c\u6765\u5b9e\u73b0\u6570\u636e\u6e90\u7684\u53d8\u5316\uff0c\u6765\u6539\u53d8 MUX \u7684\u884c\u4e3a\u3002

    \u4f46\u662f\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u51fd\u6570\u8f93\u5165\u7684\u6570\u91cf\u4f1a\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u901a\u8fc7\u7075\u6d3b\u7ec4\u5408\u7684\u65b9\u6cd5\uff08\u6bd4\u5982\u901a\u8fc7\u56db\u9009\u4e8c\u9009\u4e00\u7684\u65b9\u5f0f\uff0c\u7528\u4e09\u4e2a\u4e8c\u9009\u4e00\u7684 MUX \u6765\u5b9e\u73b0\u56db\u9009\u4e00\uff09\u6765\u5b9e\u73b0\u591a\u8f93\u5165\u3002

    \u5e38\u89c1\u7684 LUT \u5927\u5c0f\u4ee5 16bits \u6216 64bits \u7684 4 \u8f93\u5165\u6216 6 \u8f93\u5165\u4e3a\u4e3b\u3002

    \u7531\u4e8e LUT \u5b58\u7684\u672c\u8d28\u4e0a\u662f\u771f\u503c\u8868\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u8f93\u5165\u7b26\u5408\u8981\u6c42\u7684\u903b\u8f91\u51fd\u6570\u3002

    \u6240\u4ee5\uff0c\u95ee\u9898\u5c31\u53d8\u5316\u4e3a\u5982\u4f55\u7528\u8f83\u5c0f\u7684 LUT \u6765\u7ec4\u5408\u5b9e\u73b0\u590d\u6742\u7684\u903b\u8f91\u51fd\u6570\u3002

    LUT \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    FPGA \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    \u5176\u4e3b\u8981\u5206\u4e3a\u4e09\u4e2a\u7ec4\u6210\u90e8\u5206\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#clb","title":"CLB","text":"

    CLB \u662f FPGA \u4e2d\u7684\u57fa\u7840\u903b\u8f91\u5355\u5143\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#sm","title":"SM","text":"

    \u901a\u8fc7\u76f8\u5f53\u590d\u6742\u7684\u7b97\u6cd5\uff0c SM \u4f1a\u6839\u636e\u76ee\u6807\u903b\u8f91\uff0c\u9009\u62e9\u94fe\u63a5\u4e0d\u540c\u7684 CLB \u4ee5\u5b9e\u73b0\u590d\u6742\u903b\u8f91\u3002

    \u5b83\u5177\u6709\u8fd9\u4e9b\u57fa\u672c\u5c5e\u6027\uff1a

    1. Flexibility: \u8bc4\u4f30\u4e00\u6761\u7ebf\u53ef\u4ee5\u8fde\u63a5\u5230\u591a\u5c11\u7ebf\uff1b
    2. Topology: \u54ea\u4e9b\u7ebf\u53ef\u4ee5\u88ab\u8fde\u63a5\u5230\uff1b
    3. Routability: \u6709\u591a\u5c11\u56de\u8def\u53ef\u4ee5\u88ab\u8def\u7531\uff1b

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#iob","title":"IOB","text":"

    IOB \u7528\u6765\u5bf9\u5916\u90e8\u8bbe\u5907\u8fdb\u884c\u8fde\u63a5\uff0c\u7528\u6765\u63a7\u5236\u8f93\u5165\u548c\u8f93\u51fa\u3002

    eg for FPGA

    \u901a\u8fc7 FPGA \u5b9e\u73b0 \\(f=x_1x_2+\\overline{x_2x_3}\\)\uff1a

    \u5206\u89e3\u95ee\u9898\uff1a\\(f_1 = x_1x_2,\\;\\;f_2=\\overline{x_2x_3},\\;\\;f=f_1+f_2\\)\u3002

    \u5728\u8f6f\u4ef6\u5c42\u9762\u7f16\u7a0b\u5b8c\u540e\uff0c\u4f1a\u751f\u6210\u4f4d\u6d41\u6587\u4ef6(bitfile)\uff0c\u4e0b\u8f7d\u5230\u677f\u65f6\u4f1a\u66f4\u65b0 FPGA \u4e2d\u7684\u5185\u5bb9\u3002

    \u7ec4\u5408\u51fd\u6570\u7684\u5b9e\u73b0\u65b9\u6cd5

    \u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u4e0d\u7ba1\u662f\u53ef\u7f16\u7a0b\u8fd8\u662f\u4e0d\u53ef\u7f16\u7a0b\uff0c\u90fd\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u8fdb\u884c\u4e00\u6b21\u5c0f\u7ed3\uff1a

    1. Decoders & OR gates
      • \u5c06\u8bd1\u7801\u51fa\u6765\u7684\u9700\u8981\u7684\u76ee\u6807\u7ec4\u5408\u90fd OR \u5728\u4e00\u8d77\uff1b
    2. MUXs
      • \u901a\u8fc7\u591a\u8def\u9009\u62e9\u5668\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\uff1b
    3. ROMs
    4. PALs
    5. PLAs
    6. LUTs
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/","title":"Chap 6 Registers & Register Transfers","text":"

    \u7ea6 7005 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 35 \u5206\u949f

    \u5f15\u5165

    \u8fd9\u4e00\u7ae0\u53ef\u4ee5\u89c6\u4e3a\u662f\u7b2c\u56db\u7ae0\u7684\u4e00\u4e2a\u5ef6\u7eed\uff0c\u4e3b\u8981\u4ecb\u7ecd\uff08\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u540c\u6b65\uff09\u65f6\u5e8f\u903b\u8f91\u8bbe\u8ba1(Sequential Logic Design)\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668","title":"\u5bc4\u5b58\u5668","text":"

    \u5bc4\u5b58\u5668(registers)\u7c97\u7565\u7684\u6765\u8bf4\u5c31\u662f\u4e00\u5806\u89e6\u53d1\u5668\u4ee5\u53ca\u5bf9\u5e94\u7684\u72b6\u6001\u63a7\u5236\u7535\u8def\uff0c\u7528\u6765\u5b9e\u73b0\u591a\u4f4d\u6570\u636e\u7684\u5b58\u50a8\u7b49\u64cd\u4f5c\u3002

    \u5176\u4e2d\u6709\u4e00\u79cd\u7279\u6b8a\u7684\u5bc4\u5b58\u5668\u53eb\u8ba1\u6570\u5668(counter)\uff0c\u975e\u5e38\u76f4\u767d\u7684\uff0c\u5b83\u7684\u884c\u4e3a\u5c31\u662f\u968f\u7740\u65f6\u949f\u5468\u671f\u4e0d\u65ad\u5728\u56fa\u5b9a\u7684\u72b6\u6001\u5e8f\u5217\u4e2d\u5faa\u73af\u3002\u66f4\u5f62\u8c61\u7684\uff0c\u4e00\u822c\u662f\u5b9e\u73b0\u81ea\u52a8\u7684\u8ba1\u6570\u529f\u80fd\uff0c\u50cf\u7535\u5b50\u65f6\u949f\u90a3\u6837\u3002

    Registers are useful for storing and manipulating information; counters are employed in circuits that sequence and control operations in a digital system.

    \u5b9e\u73b0\u5bc4\u5b58\u5668\u4e00\u4e2a\u6700\u76f4\u767d\u7684\u60f3\u6cd5\u5c31\u662f\u516c\u7528\u63a7\u5236\u7ebf\u8def\u548c\u5206\u5217\u6570\u636e\u7ebf\u8def\u6765\u63a7\u5236\u591a\u4e2a\u89e6\u53d1\u5668\uff0c\u5982\u4e0b\u56fe\u662f\u4f7f\u7528 D FF \u5b9e\u73b0\u7684\u4e00\u4e2a 4-bit register\uff1a

    \u6211\u4eec\u79f0\u65b0\u6570\u636e\u88ab\u5199\u5165\u5bc4\u5b58\u5668\u7684\u64cd\u4f5c\u4e3a\u8f7d\u5165(load)\uff0c\u800c\u5982\u679c\u8f7d\u5165\u64cd\u4f5c\u5728\u540c\u4e00\u4e2a\u65f6\u949f\u8109\u51b2\u4e2d\u5b8c\u6210\uff0c\u6211\u4eec\u79f0\u4e4b\u662f\u5e76\u884c(parallel)\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4fdd\u6301","title":"\u4fdd\u6301","text":"

    \u6211\u4eec\u53d1\u73b0\uff0c\u5982\u56fe\u7684\u5bc4\u5b58\u5668\u5728\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u90fd\u5141\u8bb8\u8f7d\u5165\u3002\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u5bc4\u5b58\u5668\u7684\u8f7d\u5165\u80fd\u591f\u88ab\u4eba\u4e3a\u63a7\u5236\uff0c\u4e5f\u5c31\u662f\u8bf4\u5f53\u6211\u4eec\u4e0d\u5e0c\u671b\u8f7d\u5165\u6570\u636e\u7684\u65f6\u5019\uff0c\u5bc4\u5b58\u5668\u80fd\u5904\u4e8e\u300c\u4fdd\u6301\u300d\u72b6\u6001\u3002\u4e3b\u8981\u6709\u4ee5\u4e0b\u4e24\u79cd\u65b9\u6848\uff1a

    \u65b9\u6848 A

    \u5176\u4e2d\u4e00\u4e2a\u505a\u6cd5\u662f\u9700\u8981\u9009\u62e9\u6027\u7684\u8ba9\u5b83\u8ddf\u968f\u65f6\u949f\u8109\u51b2\u5207\u6362\u72b6\u6001\u3002\u505a\u6cd5\u5c31\u662f\u5c06 Control \u4fe1\u53f7\u4fee\u6539\u4e3a \\(C = \\overline{Load} + Clock\\)\uff0c\u5982\u6b64\u800c\u6765\uff0c\u5f53 \\(Load = 0\\) \u65f6\uff0c\u59cb\u7ec8\u6709 \\(C = 1\\)\uff0c\u8109\u51b2\u6d88\u5931\uff0c\u5bc4\u5b58\u5668\u65e0\u6cd5\u88ab\u8f7d\u5165\u3002\u5982\u4e0b\u56fe\uff0c\u8fd9\u79cd\u6280\u672f\u53eb\u95e8\u63a7\u65f6\u949f(clock gating)\u3002

    clock skew

    \u7136\u800c\uff0c\u5728\u95e8\u63a7\u65f6\u949f\u6280\u672f\u4e2d\uff0c\u7531\u4e8e\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u903b\u8f91\u95e8\uff0c\u65f6\u949f\u8109\u51b2\u5230\u8fbe Control \u7684\u65f6\u5019\u4f1a\u51fa\u73b0\u989d\u5916\u7684\u4f20\u64ad\u5ef6\u65f6\uff0c\u5373\u65f6\u949f\u504f\u79fb(clock skew)\u3002\u800c\u8fd9\u5fae\u5c0f\u7684\u5ef6\u65f6\u4f1a\u5bfc\u81f4\u5728\u6574\u4e2a\u540c\u6b65\u7cfb\u7edf\u4e2d\uff0c\u4e0d\u540c\u7ec4\u4ef6\u5f97\u5230\u7684\u65f6\u949f\u8109\u51b2\u6709\u504f\u5dee\uff0c\u800c\u8fd9\u662f\u6211\u4eec\u6240\u4e0d\u5e0c\u671b\u770b\u5230\u7684\u3002\u6240\u4ee5\u5728\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u5e94\u5f53\u907f\u514d\u6216\u5c3d\u53ef\u80fd\u7f29\u5c0f\u65f6\u949f\u504f\u79fb\u3002

    \u65b9\u6848 B

    \u53e6\u5916\u4e00\u4e2a\u505a\u6cd5\u662f\uff0c\u5728\u4e0d\u5e0c\u671b\u5b83\u4fee\u6539\u7684\u65f6\u5019\uff0c\u4e0d\u65ad\u5c06\u5b83\u7684\u8f93\u5165\u8f7d\u5165\uff0c\u4e5f\u5c31\u662f\u4fdd\u6301\u4e0d\u53d8\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2a MUX \u6765\u5b9e\u73b0\u8fd9\u4e2a\u529f\u80fd\uff0c\u7528 EN \u4f7f\u80fd\u7aef\u6765\u9009\u62e9\u662f\u8f7d\u5165\u65b0\u503c\u8fd8\u662f\u4fdd\u6301\u4e4b\u524d\u7684\u503c\uff0c\u5982\u4e0b\u56fe\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u5355\u5143","title":"\u5bc4\u5b58\u5668\u5355\u5143","text":"

    \u5c0f\u8282\u5bfc\u8bfb

    \u672c\u5c0f\u8282\u5728\u4e66\u672c\u4e2d\u7684\u4f4d\u7f6e\u9760\u540e\uff0c\u4f46\u662f\u8003\u8651\u5230\u5185\u5bb9\u7684\u8fde\u7eed\u6027\u6211\u51b3\u5b9a\u63d0\u524d\uff0c\u672c\u8282\u5185\u5bb9\u4f1a\u6d89\u53ca\u4e00\u4e9b\u4e4b\u540e\u7684\u5185\u5bb9\uff0c\u5b9e\u9645\u4e0a\u7684\u7edd\u5bf9\u6027\u77e5\u8bc6\u8f83\u5c11\uff0c\u53ef\u4ee5\u7c97\u770b\u8fc7\u7559\u4e0b\u5370\u8c61\u5373\u53ef\uff0c\u5927\u90e8\u5206\u77e5\u8bc6\u9700\u8981\u901a\u8fc7\u6848\u4f8b\u5206\u6790\u548c\u5b9e\u8df5\u83b7\u5f97\uff0c\u662f\u7c7b\u4f3c\u4e8e\u8bbe\u8ba1\u6307\u5bfc\u601d\u60f3\u7684\u5185\u5bb9\u3002

    \u5bc4\u5b58\u5668\u5355\u5143(Register Cell)\u662f\u5bc4\u5b58\u5668\u7684\u4e2a\u4f53\u5355\u5143\uff0c\u4e3b\u8981\u5305\u62ec\u4e00\u4e2a FF \u53ca\u5b9e\u73b0\u5176\u7ec4\u5408\u903b\u8f91\u7684\u7ec4\u5408\u7535\u8def\u3002

    A single-bit cell of an iterative combinational circuit, connected to a flip-flop that provides the output, forms a two-state sequential circuit called a register cell

    Register Cell Design

    \u8bbe\u8ba1\u5bc4\u5b58\u5668\uff08\u5c24\u5176\u662f\u5927\u89c4\u6a21\u7684\u5bc4\u5b58\u5668\uff09\u7684\u91cd\u8981\u624b\u6bb5\u4e4b\u4e00\uff0c\u5c31\u662f\u5bc4\u5b58\u5668\u5355\u5143\u8bbe\u8ba1(Register Cell Design)\u3002\u901a\u5e38\u9075\u5faa\u4ee5\u4e0b\u6b65\u9aa4\uff1a

    1. \u8bbe\u8ba1\u5177\u6709\u4ee3\u8868\u6027\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b
    2. \u590d\u5236\u5e76\u8fde\u63a5\u82e5\u5e72\u4e2a\u8fd9\u6837\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b
    3. \u4fee\u6539\u67d0\u51e0\u4e2a\u5bc4\u5b58\u5668\u5355\u5143\uff08\u901a\u5e38\u53ef\u80fd\u662f\u4e00\u4e32\u5bc4\u5b58\u5668\u7684\u9996\u5c3e\u4e24\u4e2a\u5355\u5143\uff09\u4ee5\u89e3\u51b3\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\u6216\u8fb9\u754c\u95ee\u9898\uff1b

    \u8bbe\u8ba1\u5bc4\u5b58\u5668\u5355\u5143\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5bc4\u5b58\u5668\u5355\u5143\u8fdb\u884c\u5b9a\u4e49\u3002\u800c\u6307\u5b9a(Specify)\u4e00\u4e2a\u5bc4\u5b58\u5668\u5355\u5143\u7684\u529f\u80fd\u7684\u4e3b\u8981\u6709\u8fd9\u4e9b\u65b9\u9762\uff1a

    \u5728\u5b9e\u9645\u5b9e\u73b0\u65f6\uff0c\u5206\u4e3a MUX \u5b9e\u73b0 \u548c \u65f6\u5e8f\u903b\u8f91\u5b9e\u73b0 \u4e24\u79cd\u65b9\u6cd5\u3002

    \u524d\u8005\u5c31\u662f #\u57fa\u4e8e Mux \u5b9e\u73b0\u4f20\u8f93 \u4e2d\u5c06\u8981\u63d0\u5230\u7684\u90a3\u6837\uff0c\u5173\u4e8e\u4e0a\u9762\u90a3\u4e9b\u5185\u5bb9\u5728\u8be5\u5c0f\u8282\u4e2d\u7684\u4f53\u73b0\u5982\u4e0b\u56fe\uff1b

    \u4e5f\u5c31\u662f\u901a\u8fc7\u5148\u5206\u522b\u5b9e\u73b0\u903b\u8f91\uff0c\u7136\u540e\u7ecf\u7531 MUX \u9009\u62e9\u76f8\u5e94\u7684\u6570\u636e\u8f93\u5165\u6765\u5b9e\u73b0\u3002

    \u800c\u540e\u8005\u6309\u7167\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1\u65b9\u6cd5\uff0c\u786e\u5b9a\u72b6\u6001\u56fe\u540e\u6839\u636e\u72b6\u6001\u53d8\u5316\u8bbe\u8ba1\u65f6\u5e8f\u7535\u8def\uff0c\u8bbe\u8ba1\u4f18\u5316\u51b3\u5b9a\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u5b9e\u73b0\uff0c\u5177\u4f53\u53ef\u4ee5\u53c2\u8003 \u7b2c\u56db\u7ae0#\u65f6\u5e8f\u7535\u8def\u8bbe\u8ba1\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93","title":"\u5bc4\u5b58\u5668\u4f20\u8f93","text":"

    \u8bf4\u660e

    \u628a transfer \u7ffb\u8bd1\u4e3a\u201c\u4f20\u8f93\u201d\u662f\u6211\u8111\u74dc\u4e00\u62cd\u7684\u884c\u4e3a\uff0c\u6211\u5e76\u4e0d\u77e5\u9053\u7ffb\u8bd1\u6210\u4ec0\u4e48\u6bd4\u8f83\u5408\u9002\uff0c\u5982\u679c\u8bfb\u8005\u6709\u66f4\u597d\u7684\u7ffb\u8bd1\uff0c\u8bf7\u544a\u8bc9\u6211\uff01

    \u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u9664\u4e86\u4fe1\u606f\u7684\u5b58\u50a8\u8fd8\u9700\u8981\u4fe1\u606f\u7684\u4f20\u8f93\u548c\u5904\u7406\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e3a\u4e86\u5b9e\u73b0\u7075\u6d3b\u3001\u590d\u6742\u7684\u8ba1\u7b97\uff0c\u6211\u4eec\u9700\u8981\u4fe1\u606f\u4e4b\u95f4\u80fd\u591f\u5e7f\u6cdb\u5730\u4ea4\u4e92\u3002\u5927\u90e8\u5206\u7535\u5b50\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\uff0c\u90fd\u4f1a\u6709\u4e00\u4e2a\u63a7\u5236\u5355\u5143(Control Unit)\u6765\u8d1f\u8d23\u6307\u6325\u6570\u636e\u901a\u8def(Datapath)\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002

    Datapath performs data-processing operations, and control unit determines the sequence of those operations.

    Datapaths are defined by their registers and the operations performed on binary data stored in the registers.

    \u5bf9\u4e8e\u5bc4\u5b58\u5668\u81ea\u8eab\u800c\u8a00\uff0c\u5b83\u53ef\u80fd\u5b9e\u73b0 \u8f7d\u5165(load)\u3001\u6e05\u7a7a(clear)\u3001\u79fb\u4f4d(shift) \u548c \u8ba1\u6570(count) \u7b49\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u5bc4\u5b58\u5668\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u79fb\u52a8\u4e86\u7684\u52a0\u5de5\uff0c\u88ab\u79f0\u4e3a\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c(Register Transfer Operations)\uff0c\u5b83\u4eec\u4e3b\u8981\u5305\u542b\u8fd9\u4e09\u4e2a\u90e8\u5206\uff1a

    1. \u7cfb\u7edf\u4e2d\u7684\u5bc4\u5b58\u5668\u96c6\u5408\uff1b
    2. \u5bf9\u4e8e\u6570\u636e\u7684\u64cd\u4f5c\uff1b
    3. \u76d1\u7763\u64cd\u4f5c\u5e8f\u5217\u7684\u63a7\u5236\uff1b

    \u5176\u4e2d\uff0c\u6700\u57fa\u7840\u7684\u90a3\u90e8\u5206\u64cd\u4f5c\u88ab\u79f0\u4e3a\u5fae\u64cd\u4f5c(microoperation)\uff0c\u5b83\u4eec\u662f\u5b9e\u73b0\u590d\u6742\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982\u5c06 R1 \u7684\u6570\u636e\u8f7d\u5165 R2\uff0c\u5c06 R1 \u548c R2 \u76f8\u52a0\uff0c\u6216\u662f\u81ea\u589e R1 \u7b49\u3002\u5b83\u4eec\u901a\u5e38\u662f\u4ee5\u6bd4\u7279\u5411\u91cf\u4e3a\u8f7d\u4f53\u5e76\u884c\u5b9e\u73b0\u7684\u3002

    Note that:

    the term \u201cmicrooperation,\u201d as used here, does not refer to any particular way of producing the control signals: specifically, it does not imply that the control signals are generated by a control unit based on a technique called microprogramming.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00","text":"

    \u5bf9\u4e8e\u7b80\u5355\u7684\u65f6\u5e8f\u903b\u8f91\u7cfb\u7edf\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u72b6\u6001\u673a\u7b49\u65b9\u5f0f\u6765\u63cf\u8ff0\u5b83\u4eec\u7684\u884c\u4e3a\uff0c\u4f46\u662f\u5bf9\u4e0e\u89c4\u6a21\u66f4\u5927\u7684\u7cfb\u7edf\u6765\u8bf4\uff0c\u8fd9\u662f\u4e00\u4ef6\u5f88\u75db\u82e6\u7684\u4e8b\u60c5\u3002\u6240\u4ee5\u6211\u4eec\u5f15\u5165\u4e86\u4e00\u79cd\u4e13\u6ce8\u4e8e\u884c\u4e3a\u903b\u8f91\u7684\u8bed\u8a00\u6765\u63cf\u8ff0\u5bc4\u5b58\u5668\u4f20\u8f93\u4e2d\u7684\u903b\u8f91\u884c\u4e3a\uff1a\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00(Register Transfer Language, RTL)\u3002

    \u901a\u5e38\u5177\u6709\u7279\u6b8a\u529f\u80fd\u7684\u5bc4\u5b58\u5668\u90fd\u4f1a\u7528\u5176\u540d\u79f0\u7f29\u5199\u5927\u5199\u8868\u793a\uff0c\u4f8b\u5982 AR(Address Register)\uff0cPC(Program Counter)\uff0cIR(Instruction Register) \u6216\u8005\u66f4\u666e\u901a\u7684 R2(Register 2)\u3002

    Little-endian & Big-endian

    \u6211\u4eec\u6709\u65f6\u5019\u4e5f\u4f1a\u7528\u8fd9\u4e9b\u5f62\u5f0f\u6765\u56fe\u5f62\u5316\u7684\u8868\u793a\u5bc4\u5b58\u5668\uff1a

    \u6b64\u5916\uff0c\u5e38\u89c1\u64cd\u4f5c\u7528 RTL \u8868\u793a\u65b9\u6cd5\u548c\u7b26\u53f7\u5982\u4e0b\uff1a

    \u9700\u8981\u989d\u5916\u8bf4\u660e\u7684\u662f\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8868\u8fbe\u6761\u4ef6\u8bed\u53e5\uff0c\u4f8b\u5982\u6211\u4eec\u60f3\u8868\u8fbe\uff1a

    \\[ if\\, (K_1 = 1) \\,then\\, (R2 \\leftarrow R1) \\]

    \u5219\u53ef\u4ee5\u5199\u4e3a\uff1a

    \\[ K_1 : R2 \\leftarrow R1 \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0","text":"

    \u5f15\u5165

    \u5982\u4f55\u5b9e\u73b0\u5bc4\u5b58\u5668\u6240\u5b58\u50a8\u7684\u6570\u636e\u4e4b\u95f4\u7684\u5904\u7406\u4e0e\u4ea4\u4e92\u662f\u672c\u7ae0\u8282\u7684\u6838\u5fc3\u547d\u9898\u3002\u5982\u679c\u8bf4 \u5fae\u64cd\u4f5c \u5173\u6ce8\u7684\u662f\u6570\u636e\u7684\u5904\u7406\uff0c\u90a3 \u5bc4\u5b58\u5668\u4f20\u8f93 \u5219\u7740\u773c\u4e8e\u6570\u636e\u4e4b\u95f4\u7684\u4ea4\u4e92\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u4f55\u628a\u6570\u636e\u7ed9\u5230\u522b\u7684\u5bc4\u5b58\u5668\u3001\u5982\u4f55\u83b7\u53d6\u522b\u7684\u5bc4\u5b58\u5668\u7ed9\u5230\u7684\u6570\u636e\u3001\u5982\u4f55\u4f20\u8f93\u548c\u9009\u62e9\u8fd9\u4e9b\u6570\u636e\uff0c\u5c31\u662f\u672c\u5c0f\u8282\u8981\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u7279\u522b\u7684\uff0c\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0\u53ef\u4ee5\u76f4\u63a5\u5b9e\u73b0 \u8f6c\u79fb \u64cd\u4f5c\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u57fa\u4e8e-mux-\u5b9e\u73b0\u4f20\u8f93","title":"\u57fa\u4e8e MUX \u5b9e\u73b0\u4f20\u8f93","text":"

    \u5bf9\u4e8e\u4e00\u4e2a\u5355\u4e00\u5bc4\u5b58\u5668\uff0c\u5b83\u7684\u8f93\u5165\u53ef\u80fd\u6709\u591a\u79cd\u6765\u6e90\uff0c\u4f8b\u5982\u5176\u5b83\u5bc4\u5b58\u5668\uff0c\u53c8\u6216\u8005\u662f\u5176\u4ed6\u64cd\u4f5c\u7684\u7ed3\u679c\u3002\u603b\u800c\u8a00\u4e4b\uff0c\u5b83\u7684\u8f93\u5165\u5f88\u53ef\u80fd\u662f\u4e0d\u552f\u4e00\u7684\uff0c\u800c\u540c\u4e00\u65f6\u523b\u6211\u4eec\u53ea\u80fd\u63a5\u53d7\u4e00\u4e2a\u6765\u6e90\u7684\u8f93\u5165\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528 MUX \u6765\u5bf9\u8f93\u5165\u8fdb\u884c\u9009\u62e9\u3002

    \u4e00\u4e2a\u7b80\u5355 \ud83c\udf30 \u5982\u4e0b\uff1a

    \u7528\u8bed\u8a00\u6765\u63cf\u8ff0\u8fd9\u4e2a\u603b\u4f53\u67b6\u6784\u5c31\u662f\uff0c\u6211\u4eec\u901a\u8fc7\u4e00\u7cfb\u5217 one-hot \u7f16\u7801\uff08\u6216\u8005\u662f one-cold\uff09\u6765\u8868\u793a\u9009\u62e9\u54ea\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d \\(K_0\\sim K_{n-1}\\)\uff09\uff0c\u518d\u901a\u8fc7 Encoder \u5c06\u5b83\u4eec\u7f16\u7801\u4f5c\u4e3a MUX \u7684\u8f93\u5165\u9009\u62e9\u4fe1\u53f7\uff08\u4e0b\u56fe\u4e2d \\(S_m \\sim S_0\\)\uff09\uff0c\u4ece\u591a\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d \\(0 \\sim k \\sim (n-1)\\)\uff09\u4e2d\u9009\u62e9\u5bf9\u5e94\u7684\u6e90\uff0c\u5e76\u8f93\u51fa\uff0c\u7ed9\u5230 R0\uff1b\u6b64\u5916\uff0c\u5c06\u9009\u62e9\u4fe1\u53f7\u90fd\u6216\u8d77\u6765\uff0c\u4f5c\u4e3a R0 \u7684 Load \u4fe1\u53f7\u8f93\u5165\u3002

    \u5176\u4e2d MUX \u7684 \\(k \\sim (n-1)\\) \u5b9e\u73b0\u4e86 \u8f6c\u79fb \u64cd\u4f5c\u3002

    \u5c0f\u7ed3

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0cMUX \u5b9e\u73b0\u4e3b\u8981\u7684\u5b9e\u73b0\u4e86\u591a\u5bf9\u4e00\u7684\u6570\u636e\u4f20\u8f93\u95ee\u9898\u3002\u5982\u679c\u6211\u4eec\u5355\u5355\u4f7f\u7528 MUX \u6765\u5b8c\u6210\u5bc4\u5b58\u5668\u4e4b\u95f4\u7684\u6570\u636e\u4ea4\u4e92\uff08\u5047\u8bbe\u6240\u6709\u5bc4\u5b58\u5668\u90fd\u80fd\u76f8\u4e92\u4f20\u8f93\u6570\u636e\uff09\uff0c\u90a3\u5c06\u8fd9\u4e2a\u6a21\u578b\uff08\u56fe\u4f8b\u5728\u4e0b\u4e00\u5c0f\u8282\uff09\u62bd\u8c61\u540e\uff0c\u6211\u4eec\u5f97\u5230\u7684\u5c06\u662f\u4e00\u5f20\u201c\u5b8c\u5168\u56fe\u201d\uff0c\u7136\u800c\u5b83\u8089\u773c\u53ef\u89c1\u7684\u5f00\u9500\u5927\u3002

    \u800c\u603b\u7ebf\u5219\u975e\u5e38\u5de7\u5999\u5730\u4f18\u5316\u4e86\u8fd9\u4e2a\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u4e0a\u4f4d\u66ff\u4ee3\u5173\u7cfb\uff09\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","title":"\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","text":"

    \u5728\u4e0a\u4e00\u5c0f\u8282\u7684\u5c0f\u7ed3\u4e2d\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86 MUX \u5b9e\u73b0\u7684\u4f18\u52a3\uff0c\u4e5f\u63d0\u5230\u4e86\u603b\u7ebf(bus)\u4f20\u8f93\u7684\u4f18\u52bf\uff0c\u90a3\u4e48\u5b83\u5177\u4f53\u6765\u8bf4\u5176\u5b9e\u73b0\u65b9\u6cd5\u6709\u4e24\u79cd\u2014\u2014\u901a\u8fc7\u5171\u6709 MUX \u5b9e\u73b0\uff0c\u6216\u901a\u8fc7\u4e09\u6001\u95e8\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5171\u6709-mux-\u5b9e\u73b0","title":"\u5171\u6709 MUX \u5b9e\u73b0","text":"

    \u8ba9\u6211\u4eec\u4ee5\u4e09\u4e2a\u5bc4\u5b58\u5668\u7684\u6a21\u578b\u4e3a\u4f8b\uff0c\u5bf9\u6bd4\u901a\u8fc7\u4e13\u6709 MUX \u5b9e\u73b0\u548c\u901a\u8fc7\u5355\u4e00\u603b\u7ebf(single bus)\u5b9e\u73b0\u7684\u533a\u522b\uff1a

    \u9996\u5148\u5bf9\u603b\u7ebf\u5b9e\u73b0\u8fdb\u884c\u8bf4\u660e\uff0c\u540c\u6837\u662f\u4f7f\u7528 MUX\uff0c\u4f46\u6b64\u65f6 MUX \u4e0d\u518d\u662f\u67d0\u4e2a\u5bc4\u5b58\u5668\u7684\u4e13\u6709\u903b\u8f91(dedicated logic)\uff0c\u800c\u662f\u4e09\u4e2a\u5bc4\u5b58\u5668\u5171\u540c\u4f7f\u7528\u7684\u5171\u6709\u903b\u8f91(shared logic)\u3002\u603b\u7ebf\u4e2d\u7684 MUX \u5728\u6240\u6709\u5bc4\u5b58\u5668\u7684\u8f93\u5165\u4e2d\u9009\u62e9\u5176\u4e2d\u4e00\u4e2a\uff0c\u5e76\u5c06\u5b83\u8f93\u51fa\uff0c\u7ed9\u5230\u6240\u6709\u5bc4\u5b58\u5668\uff1b\u800c\u603b\u7ebf\u901a\u8fc7\u63a7\u5236 Load \u4fe1\u53f7\u6765\u9009\u62e9\u8ba9\u54ea\u4e2a\uff08\u6216\u54ea\u4e9b\uff09\u5bc4\u5b58\u5668\u5f97\u5230\u8fd9\u4e2a\u4fe1\u53f7\u3002

    \u63a5\u4e0b\u6765\u8fdb\u884c\u5bf9\u6bd4\uff0c\u4ee5\u603b\u7ebf\u5b9e\u73b0\u4e3a\u4e3b\u4f53\uff0c\u4e0e MUX \u5b9e\u73b0\u5bf9\u6bd4\uff1a

    \u800c\u56e0\u4e3a\u8fd9\u4e9b\u7279\u70b9\uff0c\u6211\u4eec\u9700\u8981\u8bc4\u4f30\u6211\u4eec\u7684\u9700\u6c42\uff0c\u9009\u62e9\u5408\u9002\u7684\u7ed3\u6784\u6765\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4e09\u6001\u95e8\u5b9e\u73b0","title":"\u4e09\u6001\u95e8\u5b9e\u73b0","text":"

    \u4e09\u6001\u95e8\u7684\u76f8\u5173\u5185\u5bb9\u5df2\u7ecf\u5728\u524d\u9762\u4ecb\u7ecd\uff0c\u53ef\u4ee5\u91cd\u70b9\u5173\u6ce8\u5176\u4e2d\u7684\u788e\u788e\u5ff5\u90e8\u5206\u3002

    \u800c\u5173\u4e8e\u603b\u7ebf\u7684\u5b9e\u73b0\uff0c\u5f15\u7528\u4e00\u53e5\u6211\u5728 #\u4e09\u6001\u95e8/\u788e\u788e\u5ff5 \u91cc\u5199\u7684\u8bdd\uff1a

    \u53ea\u8981\u6211\u4eec\u8ba9\u5bfc\u7ebf\u7684\u82e5\u5e72\u8f93\u5165\u4e2d\u53ea\u6709\u4e00\u4e2a\u4e09\u6001\u95e8\u4e0d\u5728\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u80fd\u591f\u4f18\u96c5\u5730\u5b9e\u73b0\u591a\u8def\u8f93\u51fa\u4e92\u8054\u3002

    \u5b9e\u9645\u4e0a\uff0c\u6240\u8c13\u7684\u4e09\u6001\u95e8\u5b9e\u73b0\u539f\u7406\u4e0a\u548c MUX \u5b9e\u73b0\u65e0\u4e8c\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u662f\u901a\u8fc7\u4e09\u6001\u95e8\u6765\u5b9e\u73b0\u300c\u8def\u7531\u300d\u8fd9\u4e2a\u903b\u8f91\u800c\u5df2\uff0c\u4e5f\u5c31\u662f\u4e66\u4e0a\u6240\u8bf4\u7684\uff1a

    Three-state buffer outputs can be connected together to form a multiplexed output line.

    \u4e0e MUX \u5b9e\u73b0\u76f8\u5bf9\u6bd4\uff0c\u4e09\u6001\u95e8\u5b9e\u73b0\u65b9\u5f0f\u5982\u4e0b\uff1a

    \u8fdb\u884c\u7b80\u5355\u8bf4\u660e\uff0c(c) \u4e2d\u5bf9\u4e09\u6001\u95e8\u7684\u8868\u793a\u8fdb\u884c\u4e86\u7b80\u5316\uff0c\u542b\u4e49\u53c2\u8003 (a)\u3002\u5b83\u60f3\u8868\u8fbe\u7684\u4e3b\u8981\u542b\u4e49\u662f\uff0c\u5f53 EN \u4e3a 1 \u65f6\uff0c\u8868\u793a\u8f93\u51fa\uff1b\u53cd\u4e4b\u8868\u793a\u8f93\u5165\uff08\u5f53\u7136\uff0c\u771f\u6b63\u51b3\u5b9a\u662f\u5426\u8bfb\u5165\u5bc4\u5b58\u5668\u7684\u8fd8\u662f LD\uff09\u3002

    \u4e2a\u4eba\u7591\u60d1

    \u4e66\u4e2d\u7684\u8868\u8ff0\u662f\uff1a

    If the three-state buffers are enabled, then the lines are outputs; if the three-state buffers are disabled, then the lines can be inputs.

    \u4f46\u662f\u770b (a) \u7684\u8868\u8fbe\uff0c\u4e0d\u7ba1 EN \u662f\u4ec0\u4e48\uff0c\u5b83\u5e94\u5f53\u90fd\u6709\u8f93\u5165\u624d\u5bf9\uff0c\u771f\u6b63\u51b3\u5b9a\u662f\u5426\u8f93\u5165\u8fdb\u6765\u7684\u5e94\u8be5\u8fd8\u662f LD\uff1f

    \u5bf9\u6bd4\u6765\u770b\uff0c\u4e09\u6001\u95e8\u7684\u5b9e\u73b0\u5927\u5927\u964d\u4f4e\u4e86\u603b\u7ebf\u7684\u5b9e\u73b0\u6210\u672c\uff0c\u7cbe\u7b80\u4e86\u7535\u8def\u7684\u5b9e\u73b0\uff0c\u6240\u4ee5\u901a\u5e38\u6765\u8bf4\u66f4\u5e38\u7528\u3002

    \u4e2a\u4eba\u60f3\u6cd5

    \u867d\u7136\u4e66\u4e2d\u8bf4\u4e09\u6001\u95e8\u7684\u63a5\u7ebf\u6bd4 MUX \u7684\u5c11\u4e86\u4e00\u534a\uff0c\u4f46\u6211\u89c9\u5f97\u4e09\u6001\u95e8\u53ea\u662f\u628a\u7ebf\u5206\u5c94\u7684\u5730\u65b9\u79fb\u52a8\u5230\u4e86\u5bc4\u5b58\u5668\u9644\u8fd1\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4e0d\u5982\u8bf4\u662f\u8282\u7701\u4e86\u5bfc\u7ebf\u7684\u957f\u5ea6\u3002\u4f46\u662f\u968f\u7740\u8f93\u5165\u7684\u589e\u52a0\uff0cMUX \u7684\u7ed3\u6784\u4f1a\u8d8a\u6765\u8d8a\u590d\u6742\u4e14\u9700\u8981\u91cd\u65b0\u8bbe\u8ba1\uff0c\u4f46\u4e09\u6001\u95e8\u53ea\u9700\u8981\u91cf\u7684\u589e\u52a0\u5c31\u884c\u4e86\uff0c\u6240\u4ee5\u786e\u5b9e\u662f\u66f4\u52a0\u5438\u5f15\u4eba\u3002\uff08\u5f53\u7136\uff0c\u867d\u7136\u4e66\u4e2d\u6ca1\u8bf4\uff0c\u4f46\u662f\u6211\u89c9\u5f97 Enable \u5fc5\u987b at most one-hot\uff0c\u800c\u8fd9\u90e8\u5206\u7684\u903b\u8f91\u5bf9\u4e8e\u4e24\u4e2a\u5b9e\u73b0\u65b9\u6cd5\u6765\u8bf4\u662f\u4e00\u6837\u7684\uff09

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","title":"\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","text":"

    A microoperation is an elementary operation performed on data stored in registers or in memory.

    \u5fae\u64cd\u4f5c\u4e00\u822c\u5206\u4e3a\u8fd9\u56db\u79cd\uff1a

    1. \u8f6c\u79fb\uff0ctransfer microoperations\uff0c\u5c06\u6570\u636e\u4ece\u4e00\u4e2a\u5bc4\u5b58\u5668\u8f6c\u79fb\u5230\u53e6\u5916\u4e00\u4e2a\u5bc4\u5b58\u5668\uff1b
    2. \u7b97\u672f\uff0carithmetic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u7b97\u672f\u8fd0\u7b97\u64cd\u4f5c\uff1b
    3. \u903b\u8f91\uff0clogic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u903b\u8f91\u8fd0\u7b97\u64cd\u4f5c\uff1b
    4. \u79fb\u4f4d\uff0cshift microoperations\uff0c\u5bf9\u6570\u636e\u7684\u79fb\u4f4d\u64cd\u4f5c\uff1b

    A given microoperation may be of more than one type. For example, a 1s complement operation is both an arithmetic microoperation and a logic microoperation.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u8f6c\u79fb","title":"\u8f6c\u79fb","text":"

    \u4e0d\u6539\u53d8\u6570\u636e\u672c\u8eab\uff0c\u53ea\u662f\u4ece\u4e00\u4e2a\u5bc4\u5b58\u5668\u4e2d\u628a\u6570\u636e\u79fb\u52a8\u5230\u53e6\u5916\u4e00\u4e2a\u5bc4\u5b58\u5668\u3002

    \u5c06 R0 \u4e2d\u7684\u6570\u636e\u8f6c\u79fb\u5230 R1 \u4e2d\uff0c\u7528 RTL \u8868\u793a\u5c31\u662f \\(R0 \\leftarrow R1\\)\u3002

    \u8fd9\u4e00\u90e8\u5206\u7684\u5b9e\u73b0\u9014\u5f84\u5728 \u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0 \u5df2\u7ecf\u9610\u8ff0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u7b97\u672f","title":"\u7b97\u672f","text":"

    Multiplication and division are not listed in Table 6-3. Multiplication can be represented by the symbol * and division by /. These two operations are not included in the basic set of arithmetic microoperations because they are assumed to be implemented by sequences of basic microoperations. However, multiplication can be considered as a microoperation if implemented by a combinational circuit. In such a case, the result is transferred into a destination register at the clock edge after all signals have propagated through the entire combinational circuit.

    \u52a0\u51cf\u6cd5\u5668

    \u5c31\u50cf\u6211\u4eec\u4e4b\u524d\u5b66\u8fc7\u7684\uff0c\u7528\u52a0\u6cd5\u5668\u5b9e\u73b0\u52a0\u51cf\u6cd5\u5668\uff0c\u5728 RTL \u548c\u6a21\u5757\u903b\u8f91\u7535\u8def\u7684\u7ef4\u5ea6\u4e0b\uff0c\u53ef\u4ee5\u8fd9\u4e48\u8868\u793a\uff1a

    \\[ \\begin{aligned} &\\overline{X}K_1:R_1\\leftarrow R_1 + R_2 \\\\ &XK_1:R_1\\leftarrow R_1 + \\overline{R_2} + 1 \\end{aligned} \\]

    \u6ce8\u610f

    \u5bf9\u4e8e\u5982\u4e0a\u51fa\u73b0\u7684\u5f62\u5f0f\u5982\uff1a\\(condition: reg \\leftarrow options one regs\\) \u7684\u8868\u8fbe\u5f0f\uff0c: \u5de6\u4fa7\u51fa\u73b0\u7684 + \u8868\u793a\u6216\uff0c\u53f3\u4fa7\u7684\u5219\u8868\u793a\u52a0\uff08\u201c\u4e58\u201d\u4e5f\u662f\u8fd9\u6837\uff09\uff01

    \u76f8\u5bf9\u5e94\u7684\uff0c\u52a0\u51cf\u6cd5\u7684\u5b9e\u73b0\u53ef\u4ee5\u901a\u8fc7\u52a0\u51cf\u6cd5\u5668\u5b9e\u73b0\uff0c\u4e58\u6cd5\u53ef\u4ee5\u7528 \u79fb\u4f4d \u64cd\u4f5c\u5b9e\u73b0\uff0c\u800c\u9664\u6cd5\u76f8\u5bf9\u590d\u6742\u3002

    \u4e58\u6cd5\u5b9e\u73b0\u7684\u5927\u81f4\u601d\u8def

    \u5047\u8bbe\u6211\u4eec\u9700\u8981\u8ba1\u7b97 \\(a \\cdot b\\)\uff0c\u4e14 \\(a\\)\uff0c\\(b\\) \u90fd\u662f\u6574\u6570\uff0c\u5219\u53ef\u4ee5\u5c06 \\(b\\) \u5199\u6210\u4e8c\u8fdb\u5236\u5f62\u5f0f \\((b_{n-1}b_{n-2}...b_1b_0)_2\\)\uff0c\u4e8e\u662f\uff1a

    \\[ \\begin{aligned} a \\cdot b &= a \\cdot (b_{n-1}b_{n-2}...b_1b_0)_2 \\\\ &= a \\cdot \\left[ (b_{n-1}0...00)_2 + \\cdot (0b_{n-2}...00)_2 + ... + \\cdot (00...b_10)_2 + \\cdot(00...0b_0)_2 \\right]\\\\ &= a \\cdot \\sum_{i = 0} ^{n-1} b_i \\cdot 2^{i} \\\\ &= \\left(a \\cdot \\sum_{i = 0} ^{n-1} b_i\\right) \\;\\mathrm{<<}\\; i \\;\\;\\; \\text{where \"<<\" means \"Shift Left\"} \\end{aligned} \\]

    \u4e8e\u662f\u5c31\u53ef\u4ee5\u901a\u8fc7 \u79fb\u4f4d \u7684\u76f8\u5173\u77e5\u8bc6\u6765\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u903b\u8f91","title":"\u903b\u8f91","text":"

    \u903b\u8f91\u8fd0\u7b97\u7684\u5b9e\u73b0\u76f8\u6bd4\u7b97\u672f\u66f4\u52a0\u76f4\u63a5\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u903b\u8f91\u90fd\u53ef\u4ee5\u901a\u8fc7\u903b\u8f91\u95e8\u6765\u5b9e\u73b0\u3002

    \u800c\u627f\u62c5\u903b\u8f91\u548c\u7b97\u672f\u8fd0\u7b97\u7684\u786c\u4ef6\u6a21\u5757\uff0c\u4e00\u822c\u88ab\u79f0\u4e3aALU\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u79fb\u4f4d","title":"\u79fb\u4f4d","text":"

    \u79fb\u4f4d\u7684\u5b9e\u73b0\u901a\u8fc7\u79fb\u4f4d\u5bc4\u5b58\u5668(Shift Register, SHR)\u5b9e\u73b0\u3002

    \u5f15\u5165

    \u79fb\u4f4d\u64cd\u4f5c\u4ece\u672c\u8d28\u4e0a\u6765\u8bb2\uff0c\u662f\u901a\u8fc7\u89e6\u53d1\u5668\u968f\u7740\u65f6\u949f\u8109\u51b2\uff0c\u5c06\u4e32\u884c\u6570\u636e\u4e00\u4f4d\u4e00\u4f4d\u5730\u79fb\u52a8\u5b9e\u73b0\u7684\u3002\u4f46\u662f\u5982\u679c\u8bfb\u8005\u5c1a\u672a\u7406\u89e3\u5176\u5b9e\u73b0\u539f\u7406\uff0c\u9605\u8bfb\u4ee5\u4e0b\u5185\u5bb9\u521a\u5f00\u59cb\u53ef\u80fd\u4f1a\u89c9\u5f97\u6709\u4e9b\u83ab\u540d\u5176\u5999\uff0c\u4f46\u662f\u8bf7\u5148\u9605\u8bfb \u4e32\u884c\u5b9e\u73b0 \u548c \u5e76\u884c\u5316 \u7684\u5185\u5bb9\uff0c\u77e5\u9053\u5b83\u4eec\u7684\u884c\u4e3a\u540e\uff0c\u53ef\u4ee5\u5148\u6682\u65f6\u8df3\u8fc7 \u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668\uff0c\u518d\u6765\u770b\u672c\u8282\u672b\u5c3e\u7684\u603b\u7ed3\uff0c\u4e5f\u8bb8\u80fd\u591f\u8ba9\u60a8\u660e\u767d\u5b83\u7a76\u7adf\u662f\u600e\u4e48\u5b9e\u73b0\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4e32\u884c\u5b9e\u73b0","title":"\u4e32\u884c\u5b9e\u73b0","text":"

    \u79fb\u4f4d\u64cd\u4f5c\u6700\u7b80\u5355\u7684\u5b9e\u73b0\u53ea\u9700\u8981\u4e0e\u8f93\u5165\u6570\u76f8\u540c\u4f4d\u6570\u7684\u89e6\u53d1\u5668\u5b9e\u73b0\u3002\u5b83\u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    \u56db\u4e2a\u89e6\u53d1\u5668\u9996\u5c3e\u76f8\u8fde\uff0c\u6700\u524d\u9762\u4e32\u884c\u8f93\u5165(Serial Input, SI)\u6570\u636e\uff0c\u672b\u7aef\u5f97\u5230\u4e32\u884c\u8f93\u51fa(Serial Output, SO)\uff0c\u5728\u4e0d\u540c\u65f6\u949f\u5468\u671f\u7684\u504f\u5dee\u4e0b\uff0c\u8fde\u7eed\u8bfb\u5165\u7684 n bits \u5373\u4e3a\u4e0d\u540c\u4f4d\u6570\u79fb\u4f4d\u7684\u7ed3\u679c\u3002

    \u4e32\u884c\u79fb\u4f4d\u64cd\u4f5c\u5b9e\u73b0\u7684\u6a21\u62df\u89e3\u91ca

    \u5047\u8bbe\u73b0\u5728\u6211\u4eec\u6709 4 \u4e2a FF \u9996\u5c3e\u76f8\u8fde\uff0c\u73b0\u5728\u4e32\u884c\u8f93\u5165 1001 \u8fd9 4bits \u7684\u6570\u636e\uff08\u5f53\u7136\uff0c\u5b8c\u5168\u8f93\u5165\u9700\u8981 4 \u4e2a\u65f6\u949f\u5468\u671f\uff09\u3002

    \u5047\u8bbe\u7b2c 1 \u4e2a\u5468\u671f\u7ed3\u675f\u540e\uff0c1001 \u6700\u53f3\u4fa7\u7684 1 \u88ab\u5b58\u5728\u4e86\u7b2c\u4e00\u4e2a FF\uff0c\u5219\uff1a

    \u5468\u671f \u5f85\u8f93\u5165 FF1 FF2 FF3 FF4 SO 1 100 1 ? ? ? 1??? 2 10 0 1 ? ? 01?? 3 1 0 0 1 ? 001? 4 1 0 0 1 1001 5 ? 1 0 0 ?100 6 ? ? 1 0 ??10 7 ? ? ? 1 ???1

    \u8fd9\u91cc\u7684 SO \u6307\u7684\u662f\u4ece\u5f53\u524d\u8f6e\u6b21\u5f00\u59cb\uff0c\u8bfb\u5165 4bits \u6570\u636e\u5f97\u5230\u7684\u4e32\u884c\u8f93\u51fa\u7ed3\u679c\uff0c\u8fd9\u91cc\u7684 4bits \u5f53\u7136\u662f\u5bf9\u5e94\u8f93\u5165\u7684 4bits\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u7b2c\u56db\u8f6e\u524d\u540e\u7684\u7ed3\u679c\u5206\u522b\u662f\u5de6\u79fb\u548c\u53f3\u79fb\u7684\u7ed3\u679c\uff0c\u5f53\u7136\uff0c\u5982\u679c\u662f\u8981\u8003\u8651\u5177\u6709\u5b9e\u9645\u8ba1\u7b97\u4ef7\u503c\u7684\u79fb\u4f4d\uff0c\u6211\u4eec\u5f53\u7136\u9700\u8981\u586b\u5145 ? \u7684\u503c\uff0c\u4e0d\u8fc7\u8fd9\u90fd\u662f\u5c0f\u4e8b\u60c5\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5e76\u884c\u5316","title":"\u5e76\u884c\u5316","text":"

    \u5e76\u884c\u5316\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff0c\u5373\u5e76\u884c\u8f93\u51fa(parallel output)\u548c\u5e76\u884c\u8f7d\u5165(parallel load)\uff0c\u5206\u522b\u5bf9\u5e94\u7740\u5728\u540c\u4e00\u4e2a\u65f6\u95f4\u5468\u671f\u5185\u5f97\u5230\u6bcf\u4e00\u4e2a FF \u7684\u7ed3\u679c\u548c\u5bf9\u6bcf\u4e00\u4e2a FF \u8f7d\u5165\u6570\u636e\u3002

    \u5e76\u884c\u8f93\u51fa\u7684\u5b9e\u73b0\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u7ed9\u6bcf\u4e00\u4e2a FF \u7684\u8f93\u51fa\u5f15\u51fa\u4e00\u6761\u7ebf\u5c31\u884c\u4e86\uff0c\u5b83\u4e0e\u4e32\u884c\u8f93\u51fa\u53ef\u4ee5\u76f4\u63a5\u540c\u65f6\u5b58\u5728\uff1b\u800c\u5e76\u884c\u8f93\u5165\u5219\u4e0e\u4e32\u884c\u8f93\u5165\u51b2\u7a81\uff0c\u4e00\u6b21\u53ea\u80fd\u5b9e\u73b0\u5176\u4e2d\u4e00\u4e2a\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e9b\u63a7\u5236\u7535\u8def\uff1a

    \u770b\u8d77\u6765\u6709\u70b9\u590d\u6742\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u903b\u8f91\u8fd8\u662f\u5f88\u6e05\u6670\u7684\u3002

    \u603b\u548c\u6765\u8bf4\uff0c\u5c31\u662f\uff1a

    \\[ \\begin{aligned} Shift :& Q\\leftarrow \\mathrm{sl}\\; Q \\\\ \\overline{Shift}\\cdot Load :& Q\\leftarrow D \\\\ \\overline{Shift}\\cdot \\overline{Load} :& Q\\leftarrow Q \\end{aligned} \\]

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668","title":"\u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668","text":"

    \u4e0a\u9762\u4ecb\u7ecd\u7684\u79fb\u4f4d\u5bc4\u5b58\u5668\u968f\u7740\u65f6\u949f\u5468\u671f\u7684\u4f9b\u7ed9\uff0c\u53ea\u80fd\u4e0d\u53ef\u9006\u3001\u5355\u5411\u5730\u8fdb\u884c\u79fb\u4f4d\uff0c\u8fd9\u79cd\u79fb\u4f4d\u5bc4\u5b58\u5668\u79f0\u4e3a\u65e0\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668(Unidirectional SHR)\uff1b\u5bf9\u5e94\u7684\uff0c\u5982\u679c\u80fd\u591f\u652f\u6301\u53ef\u63a7\u5236\u7684\u5de6\u79fb\u53f3\u79fb\uff0c\u5219\u88ab\u79f0\u4e3a\u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668(Bidirectional SHR)\u3002

    \u5176\u884c\u4e3a\u5982\u4e0b\uff1a

    \\[ \\begin{aligned} \\overline{S_0} \\cdot \\overline{S_1} :& Q \\leftarrow Q\\\\ S_0 \\cdot \\overline{S_1} :& Q\\leftarrow\\mathrm{Sl}\\; Q \\\\ \\overline{S_0} \\cdot S_1 :& Q\\leftarrow\\mathrm{Sr}\\; Q \\\\ S_0 \\cdot S_1:& Q\\leftarrow D \\end{aligned} \\]

    \u5176\u5355\u5143\u5b9e\u73b0\u5982\u4e0b\uff1a

    \u5176\u672c\u8d28\u4e0a\u5c31\u662f\u6dfb\u52a0\u4e86\u4e00\u4e2a MUX \u6765\u9009\u62e9\u4e0b\u4e00\u4e2a\u65f6\u949f\u662f\u7ee7\u627f \\((i+1)\\)\u3001\\((i-1)\\)\u3001\\(D_i\\) \u8fd8\u662f \\(Q\\)\u3002

    \u7efc\u5408\u9610\u8ff0

    \u4ee3\u7801\u610f\u4e49\u4e0a\u7684\u79fb\u4f4d\u4e00\u822c\u6307\u7684\u662f\u4e00\u4e2a\u53cc\u76ee\u64cd\u4f5c\uff0c\u5373\u53ef\u4ee5\u6307\u5b9a\u79fb\u4f4d\u591a\u5c11\u4f4d\uff0c\u8fd9\u4e2a\u53c2\u6570\u88ab\u79f0\u4e3a\u79fb\u4f4d\u91cf(Shift Amount)\u3002

    \u4f46\u5728\u786c\u4ef6\u5c42\u9762\u7684\u5b9e\u73b0\u4e0a\uff0c\u8fd9\u4e2a\u591a\u5c11\u201c\u4f4d\u201d\u53ea\u80fd\u901a\u8fc7\u5faa\u73af\u548c\u5df2\u7ecf\u5b9e\u73b0\u7684\u3001\u6709\u9650\u79cd\u786e\u5b9a\u79fb\u4f4d\u91cf\u7684\u79fb\u4f4d\u5b9e\u73b0\u3002\u5728\u6211\u4eec\u63d0\u5230\u7684\u5b9e\u73b0\u4e2d\uff0c\u6307\u7684\u5c31\u662f\u6211\u4eec\u786c\u4ef6\u53ea\u5b9e\u73b0\u300c\u4e00\u4f4d\u79fb\u4f4d\u300d\uff0c\u5e76\u901a\u8fc7\u5faa\u73af\u5b9e\u73b0\u300c\u4efb\u610f\u4f4d\u79fb\u4f4d\u300d\uff0c\u800c\u8fd9\u4e2a\u201c\u5faa\u73af\u201d\uff0c\u5c31\u662f\u5728\u65f6\u949f\u5468\u671f\u4e0b\uff0cFF \u4e0d\u65ad\u7ee7\u627f\u4e0a\u4e00\u4e2a FF \u7684\u503c\u6765\u5b9e\u73b0\u7684\u3002

    \u800c\u5e76\u884c\u4e0e\u4e32\u884c\u5b9e\u73b0\u65e0\u975e\u662f\u4f53\u73b0\u8fd9\u4e2a\u7279\u5f81\u7684\u4e24\u79cd\u5b9e\u73b0\u65b9\u6cd5\u800c\u5df2\u3002

    \u5173\u4e8e\u5e76\u884c\u548c\u4e32\u884c

    \u8fd9\u662f\u4e00\u4e2a\u9898\u5916\u8bdd\uff0c\u6211\u6682\u65f6\u4e0d\u77e5\u9053\u653e\u54ea\u91cc\uff0c\u521a\u597d\u8fd9\u91cc\u63d0\u5230\u4e86\u5c31\u5728\u8fd9\u91cc\u8bf4\u4e86\u3002

    \u5b9e\u9645\u4e0a\uff0c\u867d\u7136\u770b\u8d77\u6765\u5e76\u884c\u7684\u6548\u7387\u4f1a\u6bd4\u4e32\u884c\u9ad8\u5f88\u591a\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5f88\u591a\u9ad8\u901f\u4f20\u8f93\u8bbe\u5907\u6216\u534f\u8bae\u7528\u7684\u90fd\u662f\u4e32\u884c\u3002\u8fd9\u662f\u56e0\u4e3a\uff0c\u5e76\u884c\u5355\u6b21\u4f20\u8f93\u7ebf\u8def\u591a\uff0c\u7ebf\u8def\u4e4b\u95f4\u7684\u8ddd\u79bb\u5c0f\uff0c\u5e72\u6270\u5927\uff0c\u6240\u4ee5\u76f8\u5bf9\u6765\u8bf4\u6b63\u5e38\u5de5\u4f5c\u6240\u4e0b\u5bf9\u9891\u7387\u7684\u8981\u6c42\u66f4\u9ad8\uff1b\u800c\u4e32\u884c\u7531\u4e8e\u53ef\u4ee5\u4f7f\u7528\u66f4\u9ad8\u7684\u9891\u7387\u5de5\u4f5c\uff0c\u6240\u4ee5\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u6548\u7387\u66f4\u9ad8\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u8ba1\u6570\u5668","title":"\u8ba1\u6570\u5668","text":"

    \u8ba1\u6570\u5668(counter) \u662f\u4ec0\u4e48\uff0c\u5df2\u7ecf\u5728 #\u5bc4\u5b58\u5668 \u4e2d\u89e3\u91ca\u4e86\uff0c\u6839\u636e\u5b9e\u73b0\u539f\u7406\uff0c\u4e3b\u8981\u5206\u4e3a \u884c\u6ce2\u8ba1\u6570\u5668(Ripple Counter) \u548c \u540c\u6b65\u8ba1\u6570\u5668(Synchronous Counter) \u4e24\u79cd\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u884c\u6ce2\u8ba1\u6570\u5668","title":"\u884c\u6ce2\u8ba1\u6570\u5668","text":"

    \u884c\u6ce2\u8ba1\u6570\u5668\u7684\u4e3b\u8981\u601d\u60f3\u5c31\u662f\u5c06\u4e00\u4e2a\u4e0d\u65ad\u81ea\u53cd\u7684 FF \u7684\u8f93\u51fa\u76f4\u63a5\u6216\u95f4\u63a5\u4f5c\u4e3a\u4e0b\u4e00\u4e2a FF \u7684\u65f6\u949f\u8109\u51b2\u3002\u7531\u4e8e\u5f62\u6210\u4e00\u6b21\u8109\u51b2\u9700\u8981\u4e00\u5bf9 0&1\uff0c\u6240\u4ee5\u524d\u4e00\u4e2a FF \u53d6\u53cd\u4e24\u6b21\u624d\u80fd\u5f15\u8d77\u4e0b\u4e00\u4e2a FF \u53d6\u53cd\u4e00\u6b21\uff0c\u5982\u679c\u4e0b\u4e00\u4e2a FF \u662f\u5728\u4e0a\u4e00\u4e2a FF \u7684\u8f93\u51fa\u4ece 1 \u53d8 0 \u65f6\u89e6\u53d1\uff0c\u90a3\u4e24\u4e2a FF \u7684\u53d8\u5316\u521a\u597d\u5bf9\u5e94\u4e8e\u4e8c\u8fdb\u5236\u81ea\u589e\u7684\u8fdb\u4f4d\u89c4\u5f8b\uff1a(0,0)\uff0c(0,1)\uff0c(1,0)\uff0c(1,1)\uff0c(0,0)\uff0c...

    \u4e8e\u662f\uff0c\u4e00\u4e2a 4-Bit \u884c\u6ce2\u8ba1\u6570\u5668\u7684\u903b\u8f91\u56fe\u5c31\u5982\u4e0b\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u4f18\u70b9\u662f\u7535\u8def\u7b80\u5355\uff0c\u6210\u672c\u4f4e\uff1b\u4f46\u662f\u7f3a\u70b9\u4e5f\u5f88\u660e\u663e\uff0c\u65e2\u7136\u5b83\u4e0e\u540c\u6b65\u8ba1\u6570\u5668\u76f8\u533a\u5206\uff0c\u5c31\u8bf4\u660e\u5b83\u4e0d\u662f\u540c\u6b65\u7535\u8def\uff0c\u6bcf\u4e00\u4e2a FF \u90fd\u4f1a\u6709\u4f20\u64ad\u5ef6\u65f6\uff0c\u968f\u7740\u8ba1\u6570\u8303\u56f4\u589e\u5927\uff0c\u603b\u4f20\u64ad\u5ef6\u65f6\u4e5f\u4f1a\u589e\u52a0\uff0c\u800c\u4e3a\u4e86\u8ba9\u7535\u8def\u6b63\u5e38\u5de5\u4f5c\uff0c\u65f6\u949f\u9891\u7387\u4e5f\u8981\u56e0\u6b64\u4e0b\u964d\u3002

    \u7531\u4e8e\u8fd9\u4e9b\uff0c\u4e66\u4e0a\u5bf9\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u8bc4\u4ef7\u662f\u591a\u6570\u60c5\u51b5\u4e0b\u884c\u6ce2\u52a0\u6cd5\u5668\u53ea\u4f1a\u5728\u4f4e\u529f\u8017\u7535\u8def\u4e2d\u88ab\u91c7\u7528\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u540c\u6b65\u8ba1\u6570\u5668","title":"\u540c\u6b65\u8ba1\u6570\u5668","text":"

    \u540c\u6b65\u8ba1\u6570\u5668\u4ece\u5b9e\u73b0\u81ea\u589e\u7684\u539f\u7406\u4e0a\u6765\u8bf4\uff0c\u548c\u884c\u6ce2\u8ba1\u6570\u5668\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u540c\u6837\u662f\u5728\u4e0a\u4e00\u4e2a FF \u5b8c\u6210\u4e00\u6b21\u7ffb\u8f6c\u7684\u65f6\u5019\u8ba9\u4e0b\u4e00\u4e2a FF \u53d8\u5316\u3002\u53ea\u4e0d\u8fc7\u540c\u6b65\u8ba1\u6570\u5668\u4e0d\u662f\u63a7\u5236\u65f6\u949f\uff0c\u800c\u662f\u63a7\u5236\u300cFF \u5185\u7684\u503c\u662f\u5426\u53d6\u53cd\u300d\u6765\u5b9e\u73b0\uff0c\u800c\u5b83\u662f\u901a\u8fc7\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u7684\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\\(0 \\;\\mathrm{XOR}\\; X = X\\)\uff0c\u800c \\(1 \\;\\mathrm{XOR}\\; X = \\overline{X}\\)\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236 XOR \u7684\u67d0\u4e2a\u8f93\u5165\u662f 0 \u8fd8\u662f 1 \u6765\u5b9e\u73b0\u53d6\u53cd\u8fd8\u662f\u4fdd\u6301\u7684\u5207\u6362\u3002

    \u4e0d\u8fc7\u9700\u8981\u533a\u5206\u7684\u662f\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5728\u4e0a\u4e00\u4e2a FF \u53d8\u5316\u5b8c\u624d\u5f71\u54cd\u4e0b\u4e00\u4e2a\u7684\uff0c\u6240\u4ee5\u662f 1 \u53d8 0 \u65f6\u9700\u8981\u8fdb\u4f4d\uff1b\u800c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u6240\u6709 FF \u662f\u4e00\u8d77\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u53ea\u6709\u5728\u524d\u9762\u90fd\u662f 1 \u65f6\u5019\uff0c\u8868\u793a\u4e0b\u4e00\u523b\u5b83\u4eec\u90fd\u8981\u8fdb\u4f4d\u4e86\uff0c\u5f53\u524d FF \u624d\u8fdb\u4f4d\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5efa\u7acb\u5728\u524d\u4e00\u4e2a FF \u7684\u7ed3\u679c\u8fdb\u884c\u53d8\u5316\uff1b\u800c\u5e76\u884c\u52a0\u6cd5\u5668\u662f\u5efa\u7acb\u5728\u4e0a\u4e00\u523b\u6240\u6709\u5173\u8054 FF \u7684\u72b6\u6001\uff0c\u5bf9\u4e0b\u4e00\u72b6\u6001\u7684\u9884\u5224\u3002

    \u5728\u8fd9\u57fa\u7840\u4e0a\uff0c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u81ea\u589e\u5668(incrementer)\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5b9e\u73b0\u65b9\u6cd5\uff1a

    (b) \u7684\u84dd\u8272\u90e8\u5206\u66ff\u6362 (a) \u7684\u84dd\u6846\u90e8\u5206\u4e3a\u7b2c\u4e8c\u79cd\u3002\u4e24\u79cd\u5206\u522b\u4e3a \u95e8\u4e32\u884c\u5b9e\u73b0 \u548c \u95e8\u5e76\u884c\u5b9e\u73b0\u3002

    \u4e24\u79cd\u5b9e\u73b0\u5176\u5b9e\u539f\u7406\u90fd\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u95e8\u4e32\u884c\u727a\u7272\u67d0\u4e9b\u60c5\u51b5\u4e0b\u7684\u8fd0\u884c\u6548\u7387\uff0c\u8282\u7ea6\u4e86\u95e8\u6210\u672c\uff1b\u800c\u95e8\u5e76\u884c\u63d0\u9ad8\u4e86\u95e8\u6210\u672c\uff0c\u51cf\u5c11\u4e86\u67d0\u4e9b\u60c5\u51b5\u4e0b\u7684\u95e8\u5ef6\u8fdf\u3002

    \u5f53\u7136\uff0c\u65e2\u7136\u4f7f\u7528\u7684\u662f\u81ea\u589e\u5668\uff0c\u90a3\u4e48\u5b9e\u73b0\u7684\u81ea\u7136\u5c31\u662f\u6b63\u5411\u8ba1\u6570\u5668\u3002\u4e3a\u4e86\u5b9e\u73b0\u9006\u5411\u8ba1\u6570\u5668\uff0c\u6211\u4eec\u5219\u9700\u8981\u5c06\u81ea\u589e\u5668\u6362\u4e3a\u81ea\u51cf\u5668\u3002\u505a\u6cd5\u53ea\u4e0d\u8fc7\u662f\u5c06\u5f02\u6216\u95e8\u7684\u63a7\u5236\u4fe1\u53f7\u53d6\u53cd\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u517c\u5177\u81ea\u589e\u81ea\u51cf\u529f\u80fd\u7684\u8f93\u5165\u51fd\u6570\u5982\u4e0b\uff1a

    \\[ \\begin{aligned} D_{A0} = & Q_0 \\oplus EN \\\\ D_{A1} = & Q_1 \\oplus \\left( (Q_0 \\cdot \\overline{S} + \\overline{Q_0} \\cdot S) \\cdot EN \\right) \\\\ D_{A2} = & Q_2 \\oplus \\left( (Q_0 \\cdot Q_1 \\cdot \\overline{S} + \\overline{Q_0} \\cdot \\overline{Q_1} \\cdot S) \\cdot EN \\right) \\\\ D_{A3} = & Q_3 \\oplus \\left( (Q_0 \\cdot Q_1 \\cdot Q_2 \\cdot \\overline{S} + \\overline{Q_0} \\cdot \\overline{Q_1} \\cdot \\overline{Q_2} \\cdot S) \\cdot EN \\right) \\end{aligned} \\]

    \u4ece\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u4e5f\u53ef\u4ee5\u7565\u5fae\u611f\u53d7\u5230\u95e8\u4e32\u884c\u548c\u95e8\u5e76\u884c\u7684\u533a\u522b\u7a76\u7adf\u5728\u54ea\u91cc\uff0c\u5b83\u4eec\u4f7f\u7528\u540c\u4e00\u4e2a\u8868\u8fbe\u5f0f\uff0c\u53ea\u4e0d\u8fc7\u7528\u4e0d\u540c\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u591a\u4f4d AND \u8fd0\u7b97\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u540c\u6b65\u8f7d\u5165","title":"\u540c\u6b65\u8f7d\u5165","text":"

    \u8fd9\u91cc\u540c\u6b65\u8f7d\u5165\u7684\u542b\u4e49\u53ef\u4ee5\u540c \u79fb\u4f4d\u5bc4\u5b58\u5668\u7684\u5e76\u884c\u8f7d\u5165 \u7c7b\u6bd4\uff0c\u5176\u4e3b\u8981\u76ee\u7684\u662f\u5c06\u8ba1\u6570\u5668\u7684\u5f53\u524d\u503c\u8bbe\u4e3a\u4e00\u4e2a\u6211\u4eec\u9700\u8981\u7684\u6570\u5b57\u3002

    \u4ee5\u95e8\u4e32\u884c\u5b9e\u73b0\u4e3a\u4f8b\uff0c\u6dfb\u52a0\u529f\u80fd\u63a7\u5236\u903b\u8f91\u540e\u7684\u8bbe\u8ba1\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4efb\u610f\u8ba1\u6570\u5e8f\u5217","title":"\u4efb\u610f\u8ba1\u6570\u5e8f\u5217","text":"

    \u73b0\u5728\u8ba9\u6211\u4eec\u56de\u5f52\u8ba1\u6570\u5668\u7684\u884c\u4e3a\uff1a\u968f\u7740\u65f6\u949f\u5468\u671f\u4e0d\u65ad\u5728\u56fa\u5b9a\u7684\u72b6\u6001\u5e8f\u5217\u4e2d\u5faa\u73af\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u4e2a\u5e8f\u5217\u672a\u5fc5\u9700\u8981\u662f\u6574\u6570\u81ea\u589e\u81ea\u51cf\u5e8f\u5217\u3002\u800c\u5b9e\u73b0\u67d0\u4e00\u5e8f\u5217\u7684\u8ba1\u6570\u884c\u4e3a\uff0c\u5b9e\u9645\u4e0a\u53ea\u8981\u8bbe\u8ba1\u597d\u6709\u9650\u72b6\u6001\u548c\u72b6\u6001\u4e4b\u95f4\u7684\u8f6c\u79fb\u5373\u53ef\u3002

    \u5f53\u7136\uff0c\u8fd9\u4e2a\u8bdd\u9898\u592a\u8fc7\u5bbd\u6cdb\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u5177\u4f53\u8ba8\u8bba\u7684\u8fd8\u662f\u6574\u6570\u81ea\u589e\u5e8f\u5217\uff0c\u53ea\u4e0d\u8fc7\u9650\u5236\u4e86\u4e0a\u4e0b\u754c\u3002\u4e66\u4e0a\u63d0\u4f9b\u7684\u6848\u4f8b\u662f BCD \u7801\u7684\u5faa\u73af\u8ba1\u6570\uff0c\u90a3\u6211\u4eec\u4e5f\u8ddf\u7740\u8fd9\u4e2a\u6848\u4f8b\u6765\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#bcd-\u7801\u5faa\u73af\u8ba1\u6570","title":"BCD \u7801\u5faa\u73af\u8ba1\u6570","text":"

    \u9996\u5148\u6211\u4eec\u9700\u8981\u6839\u636e\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1\u89c4\u5219\uff0c\u641e\u6e05\u695a\u72b6\u6001\u5e8f\u5217\uff0c\u663e\u7136\uff0c\u6839\u636e BCD \u7801\u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u53ef\u4ee5\u6bdb\u6bdb\u5730\u8ba4\u4e3a\u5b83\u662f\u4e0b\u786e\u754c\u4e3a 0\uff0c\u4e0a\u786e\u754c\u4e3a 9 \u7684 4 \u6bd4\u7279\u6574\u6570\u5e8f\u5217\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u8ba1\u6570\u5230 9 \u540e\u4e0b\u4e00\u4e2a\u72b6\u6001\u662f 0 \u7684 4 \u6bd4\u7279\u8ba1\u6570\u5668\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u5f53\u8ba1\u6570\u5668\u7684\u8f93\u51fa\u4e3a 9 \u65f6\uff0c\u4e0b\u4e00\u5468\u671f\u8ba9\u8ba1\u6570\u5668\u8f7d\u5165 0\uff1a

    \u6309\u7406\u6765\u8bf4\u8fd9\u91cc\u5e94\u8be5\u662f \\(Load = Q_0\\cdot\\overline{Q_1}\\cdot\\overline{Q_2}\\cdot Q_3\\)\uff0c\u4ee5\u5bf9\u5e94 9D=1001B\uff0c\u4f46\u662f\u7531\u4e8e\u81ea\u589e\u8fc7\u7a0b\u4e2d\uff0c1001 \u662f\u7b2c\u4e00\u4e2a\u6ee1\u8db3 1??1 \u7684\u7ec4\u5408\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u7b80\u5316\u4e3a \\(Load = Q_0\\cdot Q_3\\)\u3002

    \u5982\u4e0a\u662f\u4fee\u6539\u4e0a\u786e\u754c\u7684\u65b9\u6cd5\uff0c\u800c\u4fee\u6539\u4e0b\u786e\u754c\u7684\u65b9\u6cd5\u5219\u662f\u4fee\u6539 \\(D_i\\) \u5e8f\u5217\uff0c\u4f8b\u5982\u4e0a\u56fe\u4e2d \\(D\\) \u63a5\u5730\uff0c\u6240\u4ee5\u4e0b\u786e\u754c\u662f 0000B\u3002

    Mod N \u8ba1\u6570\u5668

    \u5b9e\u9645\u4e0a\uff0c\u6211\u4eec\u53ef\u4ee5\u628a BCD \u7801\u5faa\u73af\u8ba1\u6570\u5668\u770b\u4f5c\u662f\u7279\u6b8a\u7684 Mod N \u8ba1\u6570\u5668\uff0c\u5373 N = 10 \u7684 Mod N \u8ba1\u6570\u5668\u3002

    \u6216\u8bb8\u4f60\u4f1a\u60f3\uff0c\u5b9e\u73b0 Mod N \u8ba1\u6570\u5668\u80fd\u4e0d\u80fd\u5728\u6ee1\u8db3\u8f93\u51fa\u6761\u4ef6\u540e\u76f4\u63a5\u4f7f\u7528 Clear \u8f93\u5165\u3002\u4f46\u662f\u8bf7\u4e0d\u8981\u5fd8\u8bb0\u4e86\uff0cClear \u4e5f\u597d\uff0cSet \u4e5f\u7f62\uff0c\u5b83\u4eec\u90fd\u662f\u5f02\u6b65\u64cd\u4f5c\u3002\u6211\u4eec\u6ca1\u6709\u5fc5\u8981\u4e5f\u4e0d\u5e94\u8be5\u4f7f\u7528\u5f02\u6b65\u64cd\u4f5c\uff0c\u6240\u4ee5\u6700\u597d\u7684\u505a\u6cd5\u8fd8\u662f\u4f7f\u7528 Load\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u63a7\u5236","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u63a7\u5236","text":"

    \u5bc4\u5b58\u5668\u4f20\u8f93\u7cfb\u7edf(Register Transfer System)\u8bbe\u8ba1\u6d41\u7a0b\uff1a

    1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a(specification)\uff1b
    2. \u5b9a\u4e49\u5916\u90e8\u7684\u8f93\u5165\u3001\u8f93\u51fa\uff0c\u4ee5\u53ca\u63a7\u5236\u5355\u5143(control unit)\u548c\u6570\u636e\u901a\u8def(datapath)\u9700\u8981\u7684\u5bc4\u5b58\u5668\uff1b
    3. \u8bbe\u8ba1\u72b6\u6001\u673a\uff1b
    4. \u5b9a\u4e49\u5185\u90e8\u7684\u63a7\u5236\u4fe1\u53f7\u3001\u72b6\u6001\u4fe1\u53f7\uff1b
      • \u7528\u8fd9\u4e9b\u4fe1\u53f7\u6765\u5206\u914d\u8f93\u51fa\u6761\u4ef6(output condition)\u3001\u8f93\u51fa\u884c\u4e3a(output actions)\u7b49\uff0c\u5305\u62ec\u5bc4\u5b58\u5668\u4f20\u8f93(register transfer)\uff08\u4e2a\u4eba\u7406\u89e3\u662f\u8bbe\u8ba1\u5185\u90e8\u4fe1\u53f7\u6765\u8fdb\u4e00\u6b65\u8bbe\u8ba1\u72b6\u6001\u673a\uff0c\u5305\u62ec\u8bbe\u8ba1 TC\u3001OC\u3001OA \u7b49\uff09\uff1b
    5. \u7ed8\u5236\u6846\u56fe(block diagram)\uff1b
    6. \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u548c\u6570\u636e\u901a\u8def\u7684\u5bc4\u5b58\u5668\u4f20\u8f93\u903b\u8f91(register transfer logic)\uff1b
    7. \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u903b\u8f91(control unit logic)\uff1b
    8. \u9a8c\u8bc1\u6b63\u786e\u6027\uff1b

    \u6211\u4eec\u5728 \u7b2c\u4e09\u7ae0 \u4ecb\u7ecd\u4e86\u7ec4\u5408\u903b\u8f91\u8bbe\u8ba1\u7684\u57fa\u672c\u6d41\u7a0b\uff0c\u800c\u8fd9\u91cc\u7684\u5bc4\u5b58\u5668\u4f20\u8f93\u7cfb\u7edf\uff0c\u5b9e\u9645\u4e0a\u662f\uff08\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u540c\u6b65\uff09\u65f6\u5e8f\u903b\u8f91\u8bbe\u8ba1\u7684\u57fa\u672c\u6d41\u7a0b\u3002\u8fd9\u4e2a\u6d41\u7a0b\u770b\u8d77\u6765\u6bd4\u8f83\u62bd\u8c61\uff0c\u4f46\u603b\u4f53\u601d\u8def\u548c\u7ec4\u5408\u903b\u8f91\u8bbe\u8ba1\u5176\u5b9e\u662f\u4e00\u81f4\u7684\u3002\u91cd\u8981\u7684\u662f\u7ed3\u5408\u5177\u4f53\u4f8b\u5b50\u53bb\u5b9e\u8df5\u8fd9\u4e2a\u8bbe\u8ba1\u6d41\u7a0b\uff0c\u5efa\u8bae\u9605\u8bfb\u6559\u6750\u4e2d\u76f8\u5e94\u4f4d\u7f6e\u7684 DashWatch \u548c Handheld Game: PIG \u8fd9\u4e24\u4e2a\u4f8b\u5b50\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5fae\u7a0b\u5e8f\u63a7\u5236","title":"\u5fae\u7a0b\u5e8f\u63a7\u5236","text":"

    \u5fae\u7a0b\u5e8f\u63a7\u5236(Microprogrammed Control)\u662f\u4e00\u79cd\u63a7\u5236\u624b\u6bb5\uff0c\u5176\u4e3b\u8981\u601d\u8def\u662f\u628a\u6307\u4ee4\u5b58\u50a8\u8d77\u6765\uff0c\u5e76\u5728\u9700\u8981\u8c03\u7528\u6307\u4ee4\u65f6\u4ece\u76f8\u5e94\u5730\u5740\u8bfb\u53d6\u3002\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\u7684 CPU \u901a\u5e38\u91c7\u7528\u7684\u5c31\u662f\u5fae\u7a0b\u5e8f\u63a7\u5236\u3002

    A control unit with its binary control values stored as a group of bits, which are referred as words, in memory is called a microprogrammed control.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/","title":"Chap 7 Memory Basics","text":"

    \u7ea6 737 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

    \u6846\u67b6

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-1-memory","title":"7-1 Memory","text":"

    Two types of memories are used in various parts of a computer: random-access memory (RAM) and read-only memory (ROM). RAM accepts new information for storage to be available later for use. The process of storing new information in memory is referred to as a memory write operation. The process of transferring the stored information out of memory is referred to as a memory read operation. RAM can perform both the write and the read operations, whereas ROM, as introduced in Section 6-8, performs only read operations. RAM sizes may range from hundreds to billions of bits.

    Memory is a collection of binary storage cells together with associated circuits needed to transfer information into and out of the cells.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-2-ram","title":"7-2 RAM","text":"

    Memory cells can be accessed to transfer information to or from any desired location, with the access taking the same time regardless of the location, hence the name random-access memory. In contrast,serial memory, such as is exhibited by a hard drive, takes different lengths of time to access information, depending on where the desired location is relative to the current physical position of the disk.

    word:

    A word is an entity of bits that moves in and out of memory as a unit\u2014a group of 1s and 0s that represents a number, an instruction, one or more alphanumeric characters, or other binary-coded information.

    A group of eight bits is called a byte.

    Most computer memories use words that are multiples of eight bits in length. Thus, a 16-bit word contains two bytes, and a 32-bit word is made up of four bytes. The capacity of a memory unit is usually stated as the total number of bytes that it can store.

    Communication between a memory and its environment is achieved through data input and output lines, address selection lines, and control lines that specify the direction of transfer of information.

    Computer memory varies greatly in size. It is customary to refer to the number of words (or bytes) in memory with one of the letters K (kilo), M (mega), or G (giga). K is equal to 2^10, M to 2^20, and G to 2^30.

    A word in memory is selected by its binary address. When a word is read or written, the memory operates on all 16 bits as a single unit.

    The 1K * 16 memory of the figure has 10 bits in the address and 16 bits in each word. The number of address bits needed in memory is dependent on the total number of words that can be stored and is independent of the number of bits in each word. The number of bits in the address for a word is determined from the relationship 2^k >= m, where m is the total number of words and k is the minimum number of address bits satisfying the relationship.

    The two operations that a random-access memory can perform are write and read. A write is a transfer into memory of a new word to be stored. A read is a transfer of a copy of a stored word out of memory.

    The steps that must be taken for a write are as follows:

    1. Apply the binary address of the desired word to the address lines.
    2. Apply the data bits that must be stored in memory to the data input lines.
    3. Activate the Write input.

    The memory unit will then take the bits from the data input lines and store them in the word specified by the address lines.The steps that must be taken for a read are as follows:

    1. Apply the binary address of the desired word to the address lines.
    2. Activate the Read input.

    The memory will then take the bits from the word that has been selected by the address and apply them to the data output lines. The contents of the selected word are not changed by reading them.

    ...

    To avoid destroying data in other memory words, it is important that this change occur after the signals on the address lines have become fixed at the desired values.

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/","title":"\u8bcd\u6c47\u8868","text":"

    \u7ea6 1051 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

    \ud83d\ude4f

    \u8bcd\u6c47\u8868\u662f cm \u8001\u5e08\u6574\u7406\u7684\uff0c\u8ba9\u6211\u4eec\u8bf4 \u8c22\u8c22 cm \uff01

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#1---ch11-7","title":"1) Ch1.1-7","text":"

    odometer\uff1a\u91cc\u7a0b\u8868\uff0c\u8ba1\u7a0b\u5668

    signal conditioning: \u4fe1\u53f7\u8c03\u7406\u3001\u4fe1\u53f7\u5904\u7406

    capacitor\uff1a\u7535\u5bb9\u5668\uff0ce.g., capacitor charge\uff0c\u7535\u5bb9\u5668\u5145\u7535

    radix\uff1a\u57fa\u6570(= base)

    radix point\uff1a\u5c0f\u6570\u70b9

    number = integer portion(\u6574\u6570\u90e8\u5206) + fraction portion(\u5c0f\u6570\u90e8\u5206)

    power series\uff1a\u5e42\u7ea7\u6570

    binary\uff1a\u4e8c\u8fdb\u5236\uff0coctal\uff1a\u516b\u8fdb\u5236\uff0cdecimal\uff1a\u5341\u8fdb\u5236\uff1bhexadecimal\uff1a\u5341\u516d\u8fdb\u5236

    augend\uff1a\u88ab\u52a0\u6570

    addend\uff1a\u52a0\u6570

    minuend: \u88ab\u51cf\u6570

    subtrahend\uff1a\u51cf\u6570

    padding\uff1a\u586b\u5145

    weighted code\uff1a\u6709\u6743\u7801

    arithmetic\uff1a\u7b97\u672f\u3001\u56db\u5219\u8fd0\u7b97

    significant digit\uff1a\u6709\u6548\u4f4d

    punched paper\uff1a\u6253\u5b54\u7eb8\u5e26

    parity\uff1a\u5947\u5076\u6821\u9a8c

    even\uff1a\u5076\u6570

    odd\uff1a\u5947\u6570

    source coding\uff1a\u4fe1\u6e90\u7f16\u7801

    channel coding\uff1a\u4fe1\u9053\u7f16\u7801

    optical Shaft Encoder\uff1a\u5149\u8f74\u7f16\u7801\u5668

    positional number system\uff1a\u6309\u4f4d\u8bb0\u6570\u5236

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#2---ch21-3","title":"2) Ch2.1-3","text":"

    notation: \u6807\u8bb0\u6cd5

    operator\uff1a\u8fd0\u7b97\u7b26\u3001\u7b97\u5b50\uff0ce.g., logical operator \u903b\u8f91\u8fd0\u7b97\u7b26

    operand\uff1a\u64cd\u4f5c\u6570

    identifier\uff1a\u6807\u8bc6\u7b26=designator\uff0ce.g., variable identifier\uff1a\u53d8\u91cf\u6807\u8bc6\u7b26

    overbar: ( \u00af )\u4e0a\u6a2a\u7ebf

    single quote mark (')\uff1a\u5355\u5f15\u53f7

    normally-closed switch\uff1a\u5e38\u95ed\u5f00\u5173,e.g. Normally-Open(NO), Normally-Closed(NC)

    magnetic field\uff1a\u78c1\u573a

    energizing coil\uff1a\u6fc0\u52b1\u7ebf\u5708

    relay\uff1a\u7ee7\u7535\u5668

    transistor: \u6676\u4f53\u7ba1\u3001\u4e09\u6781\u7ba1

    precedence\uff1a\u4f18\u5148\u6743\uff0ce.g., Boolean Operator Precedence

    parenthesis\uff1a\u62ec\u53f7\uff08\u5355\u6570\u5f62\u5f0fparenthesis\uff09

    leave out\uff1a\u9057\u6f0f, e.g., If the meaning is unambiguous, we leave out the symbol \u201c\u00b7\u201d.

    idempotence: \u5e42\u7b49\u6027

    involution: \u4e58\u65b9

    dual\uff1a\u5bf9\u5076= duality\uff0ce.g., The dual of an algebraic expression is obtained by interchanging + and \u00b7 and interchanging 0\u2019s and 1\u2019s.

    dual function\uff1a\u5bf9\u5076\u51fd\u6570

    complement function: \u8865\u51fd\u6570

    canonical form\uff1a\u89c4\u8303\u5f62\u5f0f

    standard form\uff1a\u6807\u51c6\u5f62\u5f0f

    designator\uff1a\u6807\u8bc6\u7b26= identifier\uff0ce.g., We drop the \u201cm\u201d designators\uff1a\u6211\u4eec\u5220\u9664\u4e86m\u53d8\u91cf\u6807\u8bc6\u7b26

    identity: \u540c\u4e00\u6027\uff1b\u4e00\u81f4\uff1b\u76f8\u7b49\uff1be.g., Prove the identity of each of the following Boolean equations, using algebraic manipulation.

    indices\uff1aindex\u7684\u590d\u6570(=indexes) \u4e00\u822c\u5728\u6570\u5b66\uff0c\u91d1\u878d\u548c\u76f8\u5173\u9886\u57df\u4f7f\u7528

    subscript\uff1a\u4e0b\u6807

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#3---ch24-7","title":"3) Ch2.4-7","text":"

    Venn diagram\uff1a\u7ef4\u6069\u56fe

    Implicant\uff1a\u8574\u6db5\u9879\uff1b\u8574\u542b\u9879\uff1b\u9690\u542b\u6570

    Prime implicant: \u4e3b\u8574\u542b\u9879

    essential prime implicant\uff1a\u57fa\u672c\u7d20\u8574\u6db5; \u5b9e\u8d28\u672c\u539f\u8574\u6db5

    Don't cares: \u65e0\u5173\u6700\u5c0f\u9879

    degenerate: \u9000\u5316, e.g., A NAND gate with one input degenerates to an inverter.

    Hi-Impedance Outputs: \u9ad8\u963b\u6001\u8f93\u51fa

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#4---ch3-1-2","title":"4) ch3. 1-2","text":"

    rudimentary:\u57fa\u7840\u7684\uff1b\u57fa\u672c\u7684\uff1b\u672a\u5145\u5206\u53d1\u5c55\u7684\uff1b\u539f\u59cb\u7684

    die: \u88f8\u7247\u3001\u82af\u7247

    wafer\uff1a\u6676\u5706

    margin: \u8fb9\u7f18\u3001\u5dee\u989d\uff0ce.g., noise margin\uff0c\u566a\u58f0\u5bb9\u9650

    superimpose: v.\u4f7f\uff08\u7532\uff09\u53e0\u6620\u5728\uff08\u4e59\uff09\u4e0a\uff1b\u4f7f\u91cd\u53e0, e.g., Noise margin refers to the maximum external noise voltage superimposed on a normal input value that will not cause an undesirable change in the circuit output

    dissipation: n.\u6d88\u8017\uff1b\u653e\u8361\uff1b\u6d6a\u8d39\uff1be.g., power dissipation = power consumption

    propagation delay\uff1a\u4f20\u64ad\u5ef6\u8fdf

    transition time\uff1a\u8f6c\u6362\u65f6\u95f4

    transport delay\uff1a\u4f20\u8f93\u5ef6\u8fdf

    inertial delay\uff1a\u60ef\u6027\u5ef6\u8fdf

    full custom: \u5b8c\u5168\u5b9a\u5236

    fabrication: \u5236\u9020\u3001\u5236\u4f5c

    cell library\uff1a\u5143\u4ef6\u5e93

    schematic\uff1a\u539f\u7406\u56fe\uff0c\u7b80\u56fe

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#5---ch3-3-9","title":"5) ch3. 3-9","text":"

    decoder\uff1a\u8bd1\u7801\u5668

    encoder\uff1a\u7f16\u7801\u5668

    multiplexer\uff1a\u591a\u8def\u590d\u7528\u5668\uff0cMultiplexer means many into one.

    demultiplexer\uff1a\u4fe1\u53f7\u5206\u79bb\u5668\u3001\u591a\u8def\u5206\u914d\u5668\uff0cThe demultiplexer means one into many.

    anode: \u9633\u6781\uff0c\u6b63\u6781

    cathode: \u9634\u6781\uff0c\u8d1f\u6781

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#6---ch3-8-10","title":"6) Ch3. 8-10","text":"

    Iterative array\uff1a\u8fed\u4ee3\u9635\u5217

    Ripple Carry Adder\uff1a\u884c\u6ce2\u8fdb\u4f4d\u52a0\u6cd5\u5668

    Carry Look-ahead Adder: \u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668

    bit-wise: \u4ee5\u4f4d\u4e3a\u64cd\u4f5c\u5bf9\u8c61\u7684(wise\u662f\u65b9\u5f0f\u4e4b\u610f),\u5982bit-wise operators(\u4f4d\u8fd0\u7b97\u7b26), 2-input bit-wise addition functional block

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#7---ch311-12","title":"7) Ch3.11-12","text":"

    1's Complement\uff1a\u53cd\u7801

    2's Complement\uff1a\u8865\u7801

    magnitude\uff1a\u6570\u503c

    Signed-Magnitude\uff1a\u7b26\u53f7\u2014\u6570\u503c\u8868\u793a\u6cd5

    Signed-Complement\uff1a\u7b26\u53f7\u2014\u8865\u7801\u8868\u793a\u6cd5

    contraction\uff1a(n.) \u6536\u7f29\u3001\u7d27\u7f29\uff1bcontract\uff1a(v.) \u6536\u7f29

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#8---ch5-2","title":"8) Ch5. 2","text":"

    fuse intact\uff1a\u7194\u4e1d\u4fdd\u7559

    fuse blown\uff1a\u7194\u4e1d\u7194\u65ad

    volatile\uff1a\u6613\u5931\u6027\u7684

    non-volatile\uff1a\u975e\u6613\u5931\u6027\u7684

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#9---ch4-1-4","title":"9) Ch4. 1-4","text":"

    tractable: (adj.) \u6613\u5904\u7406\u7684\uff1b\u6613\u9a7e\u9a6d\u7684

    oscillator: (n.) \u632f\u8361\u5668

    capacitors: (n.) \u7535\u5bb9\u5668

    inductor: (n.) \u7535\u611f\u5668

    latch\uff1a\u9501\u5b58\u5668

    flip-flop\uff1a\u89e6\u53d1\u5668

    metastable state\uff1a\u4e9a\u7a33\u6001

    alternating clock\uff1a\u4ea4\u66ff\u65f6\u949f

    disposable sampling = 1s catching\uff1a\u4e00\u6b21\u91c7\u6837

    setup time\uff1a\u5efa\u7acb\u65f6\u95f4

    hold time\uff1a\u4fdd\u6301\u65f6\u95f4

    pulse-triggering\uff1a\u8109\u51b2\u89e6\u53d1

    level triggering\uff1a\u7535\u5e73\u89e6\u53d1

    edge triggering\uff1a\u8fb9\u6cbf\u89e6\u53d1

    self-recovery capability\uff1a\u81ea\u6062\u590d\u80fd\u529b

    equivalent state\uff1a\u7b49\u4ef7\u72b6\u6001

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#10--ch6-1-5","title":"10) Ch6. 1-5","text":"

    register\uff1a\u5bc4\u5b58\u5668

    register transfer operation\uff1a\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c

    microoperation\uff1a\u5fae\u64cd\u4f5c

    register transfer structure\uff1a\u5bc4\u5b58\u5668\u4f20\u8f93\u7ed3\u6784

    bus\uff1a\u603b\u7ebf

    lateral: (adj.) \u4fa7\u9762\u7684\uff1b\u6a2a\u5411\u7684\uff1b\u5411\u4fa7\u9762\u79fb\u52a8\u7684

    laterally: (adv.) \u4fa7\u9762\u5730\uff1b\u6a2a\u5411\u5730\uff1b\u5411\u4fa7\u9762\u79fb\u52a8\u5730

    serial gating\uff1a\u4e32\u884c\u95e8\u63a7

    parallel gating\uff1a\u5e76\u884c\u95e8\u63a7

    counter\uff1a\u8ba1\u6570\u5668

    data path\uff1a\u6570\u636e\u901a\u9053

    control unit\uff1a\u63a7\u5236\u5355\u5143

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#11--ch7-1-7","title":"11) Ch7. 1-7","text":"

    strobe\uff1a\u9009\u901a\uff1b\u9009\u901a\u8109\u51b2\uff1b\u95f8\u95e8

    SRAM\uff1a\u9759\u6001\u5185\u5b58

    DRAM\uff1a\u52a8\u6001\u5185\u5b58

    coincident selection\uff1a\u91cd\u5408\u9009\u62e9

    word extension\uff1a\u5b57\u6269\u5c55

    bit extension\uff1a\u4f4d\u6269\u5c55

    address multiplexing\uff1a\u5730\u5740\u590d\u7528\uff08\u6307DRAM\uff09

    refresh\uff1a\u5237\u65b0

    synchronous DRAM(SDRAM)\uff1a\u540c\u6b65DRAM

    burst read\uff1a\u7206\u53d1\u6a21\u5f0f\u8bfb\u53d6\u6570\u636e

    burst length\uff1a\u7206\u53d1\u6a21\u5f0f\u7684\u6570\u636e\u8bfb/\u5199\u957f\u5ea6

    memory bandwidth\uff1a\u5185\u5b58\u5e26\u5bbd

    "},{"location":"cour_note/D2QD_Intro2CV/","title":"\ud83d\udc8e \u8ba1\u7b97\u673a\u89c6\u89c9\u5bfc\u8bba | Introduction to Computer Vision","text":"

    \u7ea6 145 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    List

    Lab

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/","title":"Lecture 1 | Introduction","text":"

    \u7ea6 1737 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u4e3b\u8981\u4efb\u52a1","title":"CV \u7684\u4e3b\u8981\u4efb\u52a1","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u5e94\u7528","title":"CV \u7684\u5e94\u7528","text":"Application Examples "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u5b66\u672f\u5708\u6982\u51b5","title":"\u5b66\u672f\u5708\u6982\u51b5","text":"

    CV \u9886\u57df\u7684\u51e0\u4e2a\u9876\u4f1a

    \u56fe\u5f62\u5b66\u76f8\u5173\u7684\u9876\u4f1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u8bfe\u7a0b\u6982\u8ff0","title":"\u8bfe\u7a0b\u6982\u8ff0","text":"

    Note

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u4ee3\u590d\u4e60","title":"\u7ebf\u4ee3\u590d\u4e60","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u6027\u53d8\u6362","title":"\u7ebf\u6027\u53d8\u6362","text":"

    \u9996\u5148\uff0c\u4e00\u4e2a\u77e9\u9635\u5de6\u4e58\u4e00\u4e2a\u5411\u91cf\uff1a

    \u5728\u8fd9\u79cd\u57fa\u7840\u4e0a\uff0c\u77e9\u9635\u4e58\u6cd5\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u7cfb\u5217\u5411\u91cf\uff08\u53f3\u4fa7\u77e9\u9635\uff09\u7ecf\u8fc7\u540c\u4e00\u4e2a\u53d8\u6362\u5f97\u5230\u65b0\u7684\u4e00\u7cfb\u5217\u5411\u91cf\u3002

    Tips

    \u5b9e\u9645\u4e0a\uff0c\u4ece\u5355\u4f4d\u77e9\u9635\u7684\u89d2\u5ea6\u4e5f\u53ef\u4ee5\u5f88\u597d\u7684\u7406\u89e3\u8fd9\u4ef6\u4e8b\uff1a

    \\[ \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} 1 & 0 \\\\ 0 & 1 \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\]

    \u6211\u4eec\u6765\u8bd5\u7740\u8fd0\u7528\u4e0a\u9762\u7684\u6280\u5de7\u6c42\u4e00\u4e2a\u65cb\u8f6c\u53d8\u6362\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u3002

    \u9898\u9762\u7b54\u6848

    \u5047\u8bbe\u8be5\u77e9\u9635\u8ba9\u76ee\u6807\u56fe\u5f62\u987a\u65f6\u9488\u65cb\u8f6c \\(\\theta\\) \uff0c\u5219\u5176\u8868\u8fbe\u5f0f\u4e3a\uff1f

    \u6211\u4eec\u505a\u6b64\u5206\u6790\uff1a

    \u56e0\u6b64\uff0c\u6839\u636e\u4e0a\u9762\u63d0\u5230\u7684\u6280\u5de7\uff0c\u65cb\u8f6c\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u4e3a\uff1a

    \\[ R_{\\theta,clockwise} = \\begin{bmatrix} \\cos\\theta & \\sin\\theta \\\\ -\\sin\\theta & \\cos\\theta \\end{bmatrix} \\]

    \u7279\u522b\u7684\uff0c\u5982\u679c\u662f\u9006\u65f6\u9488\uff0c\u7ed3\u679c\u5c31\u662f\uff1a

    \\[ R_{\\theta,anti-clockwise} = \\begin{bmatrix} \\cos\\theta & -\\sin\\theta \\\\ \\sin\\theta & \\cos\\theta \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","title":"\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","text":"

    \u4eff\u5c04\u53d8\u6362(Affine Transformations) \u4e3b\u8981\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u7ebf\u6027\u53d8\u6362\u548c\u5e73\u79fb\uff08\u6362\u8a00\u4e4b\uff0c\u4eff\u5c04\u53d8\u6362\u5e76\u4e0d\u662f\u7ebf\u6027\u53d8\u6362\uff09\uff0c\u5176\u6570\u5b66\u8868\u8ff0\u4e3a\uff1a

    \\[ \\begin{bmatrix} x' \\\\ y' \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\end{bmatrix} \\]

    \u4e3a\u4e86\u8ba9\u4eff\u5c04\u53d8\u6362\u4e5f\u80fd\u5199\u6210 \\(a=Mb\\) \u7684\u5f62\u5f0f\u4ee5\u7b80\u5316\u8fd0\u7b97\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 \\(n+1\\) \u7ef4\u5411\u91cf\u6765\u8868\u793a \\(n\\) \u7ef4\u70b9\uff0c\u5373\u4f7f\u7528\u9f50\u6b21\u5750\u6807(homogenous coordinates)\uff1a

    \\[ \\begin{bmatrix} x'\\\\ y'\\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} a & b & t_x \\\\ c & d & t_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix} \\]

    \u4e3a\u4ec0\u4e48\u662f \u201c1\u201d

    \u8fd9\u91cc\u6211\u4eec\u4e0d\u7981\u629b\u51fa\u4e00\u4e2a\u7591\u95ee\uff0c\u4e3a\u4ec0\u4e48\u9f50\u6b21\u5750\u6807\u6dfb\u52a0\u7684\u7ef4\u5ea6\u4e2d\u8981\u586b\u5165 1 \u5462\uff1f\u5b83\u6709\u4ec0\u4e48\u542b\u4e49\u5417\uff1f\u5b83\u4e0d\u80fd\u662f 2 \u6216\u8005\u522b\u7684\u4ec0\u4e48\u4e1c\u897f\u5417\uff1f

    \u7b54\u6848\u662f\uff0c\u5b83\u53ef\u4ee5\u662f\u522b\u7684\u4e1c\u897f\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u9700\u8981\u5bf9\u5b9a\u4e49\u8fdb\u884c\u4e00\u4e2a\u6269\u5c55\uff0c\u4ee5\u4f7f\u9f50\u6b21\u5750\u6807\u6709\u66f4\u5927\u7684\u7528\u5904\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","title":"\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","text":"

    \u4f8b\u5982\uff0c\\((x,y)\\) \u5bf9\u5e94\u7684\u9f50\u6b21\u5750\u6807\u4e3a \\((x,y,1)\\)\uff0c\u5982\u679c\u4f60\u628a\u5b83\u60f3\u8c61\u6210\u4e09\u7ef4\u7a7a\u95f4\u4e2d\u7684\u70b9\uff0c\u4f1a\u53d1\u73b0\uff0c\u5982\u679c\u6539\u53d8 1 \u7684\u503c\uff0c\u5f97\u5230\u7684\u70b9\u7684\u8f68\u8ff9\u4f1a\u662f\u82e5\u5e72\u5f20\u5e73\u884c\u7684\u5e73\u9762\uff0c\u4e5f\u5c31\u662f\u8bf4\u4ed6\u4eec\u5728\u4e09\u7ef4\u7a7a\u95f4\u4e0b\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4eba\u4e3a\u7684\u5b9a\u4e49\u4e00\u4e2a\u6bcf\u4e00\u4e2a\u5e73\u9762\u5185\u7684\u70b9\u7684\u6620\u5c04\u5173\u7cfb\uff08\u6211\u4eec\u53ea\u8003\u8651\u7b2c\u4e00\u8c61\u9650\uff09\uff0c\u4ece\u539f\u70b9\u5f15\u4e00\u6761\u5c04\u7ebf\uff0c\u76f4\u7ebf\u4e0a\u4e0e\u6bcf\u4e00\u4e2a\u5e73\u9762\u7684\u4ea4\u70b9\u6211\u4eec\u90fd\u8ba4\u4e3a\u5bf9\u5e94\u7740\u4e8c\u7ef4\u5e73\u9762\u4e0a\u7684\u540c\u4e00\u70b9\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u7528 \\(n+1\\) \u7ef4\u7a7a\u95f4\u4e2d \u4ece\u539f\u70b9\u53d1\u51fa\u7684\u4e00\u6761 \u5c04\u7ebf \u6765\u63cf\u8ff0 \\(n\\) \u7ef4\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u70b9\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u7528\u4e0b\u9762\u7684\u5f0f\u5b50\u6765\u6982\u62ec\u6269\u5c55\u5b9a\u4e49\uff1a

    \u800c\u5f15\u5165\u8fd9\u79cd\u60f3\u6cd5\u540e\uff0c\u6211\u4eec\u5c31\u77e5\u9053\u4e3a\u4ec0\u4e48\u901a\u8fc7\u9f50\u6b21\u5750\u6807\u5316\u5c31\u80fd\u628a\u5e73\u79fb\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u5c06 \\(n\\) \u7ef4\u70b9\u7684\u5e73\u79fb\u770b\u4f5c \\(n+1\\) \u7ef4\u5c04\u7ebf\u7684\u65cb\u8f6c\uff0c\u800c\u65cb\u8f6c\u663e\u7136\u662f\u4e00\u4e2a\u7ebf\u6027\u53d8\u6362\u3002

    \u800c\u5173\u4e8e\u8be5\u6027\u8d28\u7684\u5176\u4ed6\u5e94\u7528\uff0c\u53ef\u4ee5\u770b Lecture 2 \u7684\u7b2c\u4e8c\u5c0f\u8282\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9006\u53d8\u6362","title":"\u9006\u53d8\u6362","text":"

    \u7ebf\u6027\u53d8\u6362 \\(T\\) \u7684\u9006\u53d8\u6362(Inverse Transform)\u5c31\u662f\u5176\u53d8\u6362\u77e9\u9635\u7684\u9006 \\(T^{-1}\\)\uff0c\u663e\u7136\uff0c\u5e76\u4e0d\u662f\u6240\u6709\u53d8\u6362\u90fd\u662f\u53ef\u9006\u7684\u3002

    \u5f62\u8c61\u5730\u7406\u89e3\uff0c\u4e00\u4e2a\u53d8\u6362\u77e9\u9635\u5982\u679c\u4e0d\u6ee1\u79e9\uff08\u4e0d\u53ef\u9006\uff09\uff0c\u90a3\u4e48\u5c31\u4f1a\u6709\u51e0\u4e2a\u57fa\u5728\u53d8\u6362\u4e2d\u5408\u5e76\uff0c\u6216\u8005\u8bf4\u591a\u4e2a\u70b9\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u70b9\uff0c\u5bfc\u81f4\u65e0\u6cd5\u8fd8\u539f\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","title":"\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","text":"

    \u884c\u5217\u5f0f(Determinant) \u7684\u503c\u7b49\u4e8e\u8fd9\u4e2a\u65b9\u9635\u4e2d\u7684\u5411\u91cf\u5bf9\u5e94\u7684 \u5e73\u884c\u56fe\u5f62/\u51e0\u4f55\u4f53/... \u7684 \u9762\u79ef/\u4f53\u79ef/...

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","title":"\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","text":"

    \u7279\u5f81\u5411\u91cf(eigenvector)\u548c\u7279\u5f81\u503c(eigenvalue)\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

    \u5bf9\u4e8e\u77e9\u9635 \\(A\\in R^{N\\times N}\\)\uff0c\u5982\u679c\u6709\u5411\u91cf \\(v\\in R^{N}\\) \u548c\u5b9e\u6570 \\(\\lambda \\not = 0\\)\uff0c\u6ee1\u8db3\uff1a

    \\[ Av = \\lambda v \\]

    \u5219\u79f0 \\(v\\) \u662f\u77e9\u9635 \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u5e94\u7684\u7279\u5f81\u503c\u4e3a \\(\\lambda\\)\u3002

    \u4ece\u51e0\u4f55\u53d8\u6362\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fd9\u4e2a\u5b9a\u4e49\u5f0f\uff0c\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a\u5411\u91cf \\(v\\) \u7ecf\u8fc7\u53d8\u6362 \\(A\\) \u5f97\u5230\u7684\u7ed3\u679c\uff0c\u7b49\u4e8e\u76f4\u63a5\u5bf9 \\(v\\) \u8fdb\u884c\u7f29\u653e\uff08\u800c\u6ca1\u6709\u6539\u53d8\u65b9\u5411\uff09\u3002

    \u5de5\u7a0b\u8ba1\u7b97\u65b9\u6cd5

    \u4ee4\u4eba\u60ca\u559c\u7684\u662f\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u8fd0\u7528\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6570\u5b66\u5e93\u4e2d\u7684\u7279\u5f81\u503c\u5206\u89e3(eigen decomposition)\u65b9\u6cd5\uff0c\u5176\u5927\u81f4\u4f1a\u505a\u8fd9\u6837\u4e00\u4ef6\u4e8b\uff1a

    \u5c06\u77e9\u9635 \\(A\\) \u5206\u89e3\u4e3a \\(Q\\Lambda Q^{-1}\\)\uff0c\u5176\u4e2d \\(Q\\) \u4e2d\u7684\u6bcf\u4e00\u5217\u5373\u4e3a \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u89d2\u9635 \\(\\Lambda\\) \u4e2d\u7684\u7b2c \\(i\\) \u9879\u5c31\u662f\u7b2c \\(i\\) \u4e2a\u7279\u5f81\u5411\u91cf\u7684\u7279\u5f81\u503c\u3002

    \u7279\u5f81\u503c\u4e0e\u7279\u5f81\u5411\u91cf\u7684\u5e94\u7528\uff1a\u4e3b\u6210\u5206\u5206\u6790(principal component analysis)

    \u4e3b\u6210\u5206(principal component)\u7b49\u4e8e\u534f\u65b9\u5dee\u77e9\u9635\u7684 \u7279\u5f81\u503c\u6700\u5927\u7684 \u90a3\u4e2a\u7279\u5f81\u5411\u91cf\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/","title":"Lecture 2 | Image Formation","text":"

    \u7ea6 3769 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 19 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","title":"\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5c0f\u5b54\u6210\u50cf","title":"\u5c0f\u5b54\u6210\u50cf","text":"

    \u5982\u679c\u6211\u4eec\u76f4\u63a5\u62ff\u4e00\u5757\u5e73\u9762\u6765\u8bb0\u5f55\u81ea\u7136\u754c\u7684\u5149\u4fe1\u606f\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u7531\u4e8e\u5149\u7ebf\u662f\u5411\u56db\u9762\u516b\u65b9\u4f20\u64ad\u7684\uff0c\u6240\u4ee5\u63a5\u6536\u5230\u7684\u4fe1\u606f\u4e5f\u4e71\u4e03\u516b\u7cdf\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u901a\u8fc7\u4e00\u4e2a\u5c0f\u5b54\uff0c\u4e5f\u5c31\u662f\u5982\u4eca\u7684\u5149\u5708(aperture)\u6765\u5bf9\u5149\u7ebf\u8fdb\u884c\u4e00\u4e2a\u8fc7\u6ee4\u3002\u8fd9\u5c31\u662f\u65e9\u671f\u9488\u5b54\u6444\u50cf\u673a(pinhole camera)\u7684\u539f\u7406\u3002

    \u8fd9\u4e5f\u5c31\u662f\u6211\u4eec\u5f88\u65e9\u5c31\u5b66\u8fc7\u7684\uff0c\u5c0f\u5b54\u6210\u50cf\u539f\u7406\u3002\u800c\u5149\u5708\u8d8a\u5c0f\uff0c\u6210\u50cf\u4e5f\u4f1a\u8d8a\u6765\u8d8a\u6e05\u695a\uff0c\u4f46\u4e5f\u4e0d\u80fd\u592a\u5c0f\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u4eae\u5ea6\u4e0d\u8db3\u751a\u81f3\u884d\u5c04\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u955c","title":"\u900f\u955c","text":"

    \u51f8\u900f\u955c\u5177\u6709\u6c47\u805a\u5149\u7ebf\u7684\u4f5c\u7528\uff0c\u5728\u6ee1\u8db3\u7279\u5b9a\u5149\u5b66\u51e0\u4f55\u5173\u7cfb\u7684\u524d\u63d0\u4e0b\u5177\u6709\u548c\u5c0f\u5b54\u6210\u50cf\u7c7b\u4f3c\u7684\u6548\u679c\uff0c\u4f46\u662f\u80fd\u591f\u6c47\u805a\u66f4\u591a\u7684\u5149\u7ebf\u3002

    Source: https://fpcv.cs.columbia.edu/

    \u5bf9\u4e8e\u8584\u51f8\u900f\u955c\uff0c\u6709\u9ad8\u65af\u6210\u50cf\u516c\u5f0f\uff1a

    \\[ \\frac{1}{i} + \\frac{1}{o} = \\frac{1}{f} \\]

    \u5176\u4e2d \\(i\\) \u4e3a\u50cf\u8ddd(img dis)\uff0c\\(o\\) \u4e3a\u7269\u8ddd(obj dis)\uff0c\\(f\\) \u4e3a\u7126\u8ddd(focal len)\u3002

    \u800c\u5bf9\u4e8e\u5e73\u884c\u5149\uff0c\u6216\u8005\u8bf4 \\(o\\to +\\infty\\) \u65f6\uff0c\u5c31\u4f1a\u6709 \\(i=f\\)\u3002\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6d4b\u91cf\u5e73\u884c\u5149\u900f\u8fc7\u51f8\u900f\u955c\u6c47\u805a\u7684\u4f4d\u7f6e\u6765\u6d4b\u91cf\u7126\u8ddd\u3002

    \u540c\u65f6\u518d\u5f15\u5165\u4e00\u4e2a\u653e\u5927\u7387(Magnification)\uff1a\\(m=\\frac{h_i}{h_o}=\\frac{i}{o}\\)\u3002

    Source: https://fpcv.cs.columbia.edu/

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u89c6\u91ce-fovfield-of-view","title":"\u89c6\u91ce FoV(field of view)","text":"

    \u7126\u8ddd\u548c\u5e95\u7247\u7684\u7ebf\u5ea6\u5171\u540c\u51b3\u5b9a\u4e86 FoV \u7684\u5927\u5c0f\u3002

    Source: https://snapsnapsnap.photos/

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7126\u8ddd\u7684\u5927\u5c0f\u4f1a\u5f71\u54cd\u89c6\u91ce\u7684\u5927\u5c0f\u548c\u653e\u5927\u7387\u7684\u5927\u5c0f\u3002

    50mm/46\u00b0 \u4e0e\u4eba\u7684\u89c6\u91ce\u76f8\u8fd1\uff0c\u56e0\u6b64\u5b83\u88ab\u79f0\u4e3a\u6807\u51c6\u955c\u5934(standard lens).

    \u6b64\u5916\uff0c\u5373\u4f7f\u5728\u753b\u9762\u4e2d\u4fdd\u8bc1\u4e00\u4e2a\u7269\u4f53\u7684\u5927\u5c0f\u4e0d\u53d8\uff0c\u9009\u7528\u4e0d\u540c\u7684\u7126\u8ddd\u4e5f\u4f1a\u5bfc\u81f4\u753b\u9762\u7684\u53d8\u5316\u2014\u2014\u80cc\u666f\u7684\u5927\u5c0f\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u5f20\u56fe\u7684\u4e09\u4e2a\u753b\u9762\u6211\u4eec\u53ef\u4ee5\u5f88\u6e05\u6670\u7684\u611f\u53d7\u5230\u8fd9\u4e00\u70b9\u3002

    \u6b64\u5916\uff0c\u4f20\u611f\u5668\u7684\u5927\u5c0f\uff0c\u6216\u8005\u8bf4\u5e95\u7247\u7684\u5927\u5c0f\uff0c\u4e5f\u4f1a\u5f71\u54cd FoV\u3002\u800c\u4e14\u4e00\u822c\u6765\u8bf4\uff0c\u8d8a\u5927\u7684\u5e95\u7247\u80fd\u591f\u63d0\u4f9b\u66f4\u9ad8\u7684\u5206\u8fa8\u7387\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#f-\u6570","title":"F \u6570","text":"

    F \u6570(F-Number)\u7528\u6765\u63cf\u8ff0\u5149\u5708\u7684\u76f8\u5bf9\u5927\u5c0f\uff0c\u5176\u5b9a\u4e49\u5f0f\u4e3a \\(N=\\frac{f}{D}\\)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5bf9\u7126","title":"\u5bf9\u7126","text":"

    Source: https://fpcv.cs.columbia.edu/

    \u7531\u76f8\u4f3c\u4e09\u89d2\u5f62\uff0c\u6ca1\u6709\u5bf9\u4e0a\u7126\u800c\u5f62\u6210\u7684\u5149\u6591(Blur Circle)\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

    \\[ \\begin{align} &\\because \\frac{b}{D}=frac{|i'-i|}{i'} \\\\ &\\therefore b = \\frac{D}{i'}|i'-i|\\;,\\;\\;\\;b \\propto D \\propto \\frac{1}{N} \\end{align} \\]

    \u800c\u5bf9\u7126\uff0c\u5c31\u662f\u5c06\u5931\u7126\u7684\u5185\u5bb9\u91cd\u65b0\u6c47\u805a\u5230\u5e95\u7247\u4e0a\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u666f\u6df1-dof","title":"\u666f\u6df1 DoF","text":"

    \u6839\u636e\u4e0a\u4e00\u5c0f\u8282\u5f97\u5230\u7684\u7ed3\u8bba\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u597d\u50cf\u53ea\u6709\u6e05\u6670\u6210\u50cf\u4e00\u4e2a\u7279\u5b9a\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u76f8\u673a\u4e0a\u4f1a\u6709\u4e00\u6bb5\u8ddd\u79bb\u4e0a\u7684\u5185\u5bb9\u90fd\u662f\u6e05\u6670\u7684\uff0c\u8fd9\u6bb5\u8ddd\u79bb\u5c31\u662f\u666f\u6df1 DoF(Depth of Field)\u3002\u800c\u4e4b\u6240\u4ee5\u6709\u666f\u6df1\uff0c\u662f\u56e0\u4e3a\u5e95\u7247\u7684\u611f\u5149\u5143\u4ef6\u662f\u6709\u6781\u9650\u7684\uff0c\u5f53\u5149\u6591\u5c0f\u96e8\u8fd9\u4e2a\u6781\u9650\u65f6\uff0c\u62cd\u6444\u51fa\u6765\u7684\u5c31\u4ecd\u7136\u662f\u6e05\u6670\u7684\u3002

    \u800c\u666f\u6df1\u7684\u5927\u5c0f\u53ef\u4ee5\u8fd9\u4e48\u8ba1\u7b97\uff1a

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u666f\u6df1\u7684\u5927\u5c0f \u5927\u81f4\u4e0e \u5149\u5708\u5927\u5c0f\u3001\u7269\u50cf \u6b63\u76f8\u5173\uff0c\u4e0e \u7126\u8ddd \u8d1f\u76f8\u5173\u3002

    \u5f15\u8a00

    \u7531\u4e8e\u6211\u4eec\u8003\u8651\u7684\u662f\u6210\u50cf\u95ee\u9898\uff0c\u6240\u4ee5\u66f4\u591a\u7684\u662f\u5728\u63cf\u8ff0\u4e09\u7ef4\u771f\u5b9e\u4fe1\u606f\u4e0e\u4e8c\u7ef4\u5e73\u9762\u4fe1\u606f\u4e4b\u95f4\u7684\u4e92\u76f8\u8868\u8fbe\u3002

    \u800c\u8fd9\u79cd\u201c\u63cf\u8ff0\u201d\u9700\u8981\u57fa\u4e8e\u4e00\u4e2a\u6295\u5f71\u6a21\u578b\u3002\u6216\u8005\u8bf4\u8bf4\u4e00\u79cd\u6620\u5c04\u5173\u7cfb\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u597d\u50cf\u201c\u70b9\u5149\u6e90\u6295\u5f71\u201d\u548c\u201c\u5e73\u884c\u5149\u6e90\u6295\u5f71\u201d\u3002

    \u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u65e0\u8bba\u662f\u54ea\u4e00\u79cd\u6a21\u578b\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u4e09\u7ef4\u4fe1\u606f\u901a\u8fc7\u4e0d\u53ef\u9006\u7684\u7ebf\u6027\u53d8\u6362\u538b\u7f29\u5230\u4e86\u4e8c\u7ef4\u4fe1\u606f\uff0c\u6240\u4ee5\u4e00\u5b9a\u662f\u5b58\u5728\u4fe1\u606f\u7f3a\u5931\u7684\u3002\u901a\u5e38\u6765\u8bf4\uff0c\u6307\u7684\u662f\u6df1\u5ea6\u7f3a\u5931\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u6295\u5f71","title":"\u900f\u89c6\u6295\u5f71","text":"

    \u5982\u56fe\u662f 3D \u5750\u6807\u901a\u8fc7\u900f\u89c6\u6295\u5f71\u5230 2D \u5750\u6807\u5230\u793a\u610f\u56fe\u3002\u5176\u4e2d \\(x,y,Z\\) \u7528\u6765\u63cf\u8ff0\u7a7a\u95f4\u5750\u6807\u4fe1\u606f\uff0c\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u7528\u4ed6\u4eec\u8868\u793a\u76f8\u5bf9\u4e8e\u76f8\u673a\u4e2d\u5fc3(camera center)\u7684\u6b63\u4ea4\u5750\u6807\uff0c\u5176\u4e2d \\(Z\\) \u548c\u5149\u8f74(optical axis)\u65b9\u5411\u76f8\u540c\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u79f0\u4e4b\u4e3a\u6df1\u5ea6\u3002

    \u540c\u65f6\uff0c\u5149\u8f74\u5e94\u5f53\u5782\u76f4\u4e8e\u6210\u50cf\u5e73\u9762\uff0c\u800c\u5149\u8f74\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u4e3a\u56fe\u50cf\u4e2d\u5fc3(img center)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\\(P\\) \u4e0e \\(p\\) \u7684\u5173\u7cfb\u5982\u4e0b\uff1a

    \\[ p = \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

    \u90a3\u6709\u6ca1\u6709\u529e\u6cd5\u5c06 \\(p\\) \u548c \\(P\\) \u901a\u8fc7\u7ebf\u6027\u53d8\u5316\u653e\u5728\u540c\u4e00\u4e2a\u7b49\u5f0f\u91cc\u5462\uff1f

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6709\u6ca1\u6709\u529e\u6cd5\u4f7f\u5f97\u5982\u4e0b\u7b49\u5f0f\u6210\u7acb\uff1f

    \\[ A \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

    \u5f88\u53ef\u60dc\uff0c\u7531\u4e8e\u5f0f\u5b50\u4e2d\u51fa\u73b0\u4e86 \\(\\frac{1}{Z}\\)\uff0c\u5373\u9664\u6cd5\uff0c\u5b83\u5e76\u4e0d\u662f\u4e2a\u7ebf\u6027\u53d8\u6362\u3002\u6240\u4ee5\u5373\u4f7f\u6211\u4eec\u6269\u5c55 \\(p\\) \u548c \\(P\\) \u7684\u7ef4\u5ea6\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u5c06\u5b83\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u3002

    \u4f46\u662f\u4f60\u4e5f\u770b\u5230\u4e86\uff0c\u6211\u7528\u7684\u8bcd\u662f\u201c\u76f4\u63a5\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u63a5\u4e0b\u6765\u53ef\u4ee5\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5e94\u7528\u9f50\u6b21\u5750\u6807","title":"\u5e94\u7528\u9f50\u6b21\u5750\u6807","text":"

    \u8ba9\u6211\u4eec\u56de\u987e\u9f50\u6b21\u5750\u6807\u7684 \u6269\u5c55\u6027\u8d28\uff0c\u5c06\u5b83\u5e94\u7528\u4e8e\u6b64\u5f0f\uff1a

    \\[ \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\]

    \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230 \\(A\\) \u4f7f\u5f97\uff1a

    \\[ A \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

    \u6210\u7acb\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u627e\u5230 \\(A=\\begin{bmatrix}f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0\\end{bmatrix}\\) \u4f7f\u5f97\uff1a

    \\[ \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\cong \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

    \u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u6210\u529f\u7684\u901a\u8fc7\u7ebf\u6027\u53d8\u6362\u5c06 \\(P\\) \u548c \\(p\\) \u7edf\u4e00\u4e86\u8d77\u6765\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u53ef\u89c6\u5316\u8868\u793a","title":"\u53ef\u89c6\u5316\u8868\u793a","text":"

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

    \u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

    \u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u4fe1\u606f\u7f3a\u5931","title":"\u4fe1\u606f\u7f3a\u5931","text":"

    \u7531\u4e8e\u5728\u900f\u89c6\u6295\u5f71\u7cfb\u7edf\u4e2d\uff0c\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5927\u5c0f\u4e0e\u56fe\u50cf\u7ebf\u5ea6\u5927\u5c0f\u7684\u6bd4\u4f8b\u7531\u6df1\u5ea6\u51b3\u5b9a\uff0c\u4f46\u6df1\u5ea6\u53c8\u4e0d\u80fd\u76f4\u63a5\u4ece\u56fe\u4e2d\u83b7\u53d6\uff0c\u6240\u4ee5\u6709\u65f6\u5019\u6211\u4eec\u65e0\u6cd5\u6bd4\u8f83\u56fe\u50cf\u4e2d\u4e24\u4e2a\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5dee\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u957f\u5ea6\u4fe1\u606f\u548c\u89d2\u5ea6\u4fe1\u606f\u662f\u4e22\u5931\u7684\u3002

    \uff08\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u4e00\u4e9b\u4e1c\u897f\u6765\u505a\u53c2\u8003\u7cfb\uff0c\u5224\u65ad A \u548c B \u7684\u6df1\u5ea6\u4fe1\u606f\uff0c\u518d\u5206\u6790\u4ed6\u4eec\u7684\u5b9e\u9645\u7ebf\u5ea6\u5927\u5c0f\u5173\u7cfb\u3002\uff09

    \u7136\u800c\u4ecd\u7136\u6709\u4e9b\u6027\u8d28\u662f\u4fdd\u7559\u7684\uff0c\u4f8b\u5982\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5982\u679c\u4f60\u80fd\u60f3\u8c61\u7684\u8bdd\uff0c\u867d\u7136\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b83\u7684\u201c\u7ebf\u5bc6\u5ea6\u201d\u4e0d\u4e00\u6837\u4e86\u3002

    \u6240\u4ee5\uff0c\u5982\u679c\u662f\u66f2\u7ebf\uff0c\u5b83\u867d\u7136\u4e0d\u4f1a\u53d8\u6210\u6298\u7ebf\uff0c\u4f46\u662f\u7279\u5f81\u53ef\u80fd\u5df2\u7ecf\u53d8\u4e86\uff0c\u6bd4\u5982\u5706\u662f\u4f1a\u626d\u66f2\u7684\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u706d\u70b9\u4e0e\u706d\u7ebf","title":"\u706d\u70b9\u4e0e\u706d\u7ebf","text":"

    \u5728\u900f\u89c6\u4e2d\u4e00\u4e2a\u5f88\u6709\u610f\u601d\u7684\u73b0\u8c61\u662f\u706d\u70b9(vanishing point)\u548c\u706d\u7ebf(vanishing line)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u56fe\u50cf\u4e2d\u4e00\u6761\u4e0d\u65ad\u884d\u751f\u7684\u76f4\u7ebf\uff0c\u5728\u50cf\u4e2d\u6700\u7ec8\u4f1a\u7ec8\u7ed3\u4e8e\u4e00\u4e2a\u70b9\uff0c\u8fd9\u4e2a\u70b9\u5c31\u662f\u201c\u706d\u70b9\u201d\u3002\u51e0\u4f55\u4e0a\uff0c\u706d\u70b9\u4e0e\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\u5e94\u5f53\u5e73\u884c\u4e8e\u8be5\u76f4\u7ebf\u3002

    \u800c\u73b0\u5b9e\u4e2d\u76f8\u4e92\u5e73\u884c\u7684\u4e24\u6761\u76f4\u7ebf\uff0c\u6700\u7ec8\u4f1a\u5728\u56fe\u50cf\u4e2d\u7ec8\u6b62\u4e8e\u540c\u4e00\u4e2a\u706d\u70b9\u3002

    \u706d\u70b9\u672a\u5fc5\u5728\u56fe\u50cf\u4e2d\uff0c\u751a\u81f3\u53ef\u80fd\u65e0\u9650\u8fdc\u3002

    \u521a\u624d\u63d0\u5230\uff0c\u5e73\u884c\u7ebf\u5171\u4eab\u706d\u70b9\u8fd9\u610f\u5473\u7740\u6709\u591a\u5c11\u7ec4\u5e73\u884c\u7ebf\u5c31\u6709\u591a\u5c11\u706d\u70b9\u3002

    \u5982\u679c\u6211\u4eec\u5c06\u4e00\u4e2a\u5e73\u9762\u50cf\u68cb\u76d8\u90a3\u6837\uff0c\u5212\u51fa\u4e24\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u4e48\u5c31\u4f1a\u5f97\u5230\u4e24\u4e2a\u706d\u70b9\uff0c\u5982\u56fe\u4e2d\u7684 \\(v_1\\) \u548c \\(v_2\\)\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u5e73\u9762\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u4e2d\u53d6\u51fa\u65e0\u6570\u7ec4\u5e73\u884c\u7ebf\uff0c\u56e0\u800c\u65e0\u9650\u5927\u7684\u5e73\u9762\u4f1a\u4ea7\u751f\u65e0\u6570\u591a\u7684\u706d\u70b9\uff0c\u800c\u8fd9\u4e9b\u706d\u70b9\u8fde\u6210\u7ebf\u5c31\u6210\u4e86\u201c\u706d\u7ebf\u201d\u3002\u5e38\u89c1\u7684\u706d\u7ebf\u5c31\u6bd4\u5982\u7167\u7247\u4e0a\u7684\u6d77\u5929\u754c\u7ebf\u3002

    \u56e0\u6b64\uff0c\u5982\u679c\u8bf4\u706d\u70b9\u8c61\u5f81\u4e86\u4e00\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u706d\u7ebf\u5c31\u662f\u8c61\u5f81\u4e86\u4e00\u5757\u5e73\u9762\u3002\u800c\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u770b\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u51fa\u73b0\u5728\u706d\u7ebf\u4ee5\u4e0a\u8fd8\u662f\u706d\u7ebf\u4e00\u4e0b\uff0c\u6765\u5224\u65ad\u5e73\u9762\u5728\u6211\u4eec\u7684\u76f8\u673a\u4e2d\u5fc3\u4ee5\u4e0b\u8fd8\u662f\u4ee5\u4e0a\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

    Interesting Try

    \u9898\u9762\u7b54\u6848

    \u89c2\u5bdf\u5982\u4e0b\u56fe\u7247\uff0c\u5224\u65ad \ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0a\u8fd8\u662f\u4ee5\u4e0b\uff0c\u5e76\u9610\u660e\u7406\u7531\u3002

    \u663e\u7136\uff0c\ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0b\uff08\u4f1e\u5728\u4ee5\u4e0a\uff09\uff0c\u4f9d\u636e\u662f \u4eba \u5728 \u5929\u9645\u7ebf \u4ee5\u4e0b\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u7578\u53d8","title":"\u900f\u89c6\u7578\u53d8","text":"

    \u5728\u62cd\u6444\u8f83\u5927\u7684\u7269\u4f53\u65f6\uff0c\u6bd4\u5982\u5efa\u7b51\u7269\uff0c\u5982\u679c\u5efa\u7b51\u7269\u7684\u5899\u9762\u6ca1\u6709\u548c\u5e95\u7247\u5e73\u884c\uff0c\u5219\u4f1a\u51fa\u73b0\u900f\u89c6\u7578\u53d8\u3002

    \u5728\u5efa\u7b51\u62cd\u6444\u65b9\u9762\uff0c\u6211\u4eec\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4e0b\u79fb\u4f20\u611f\u5668\uff0c\u4f7f\u5e95\u7247\u4e2d\u5fc3\u5728\u5149\u8f74\u4ea4\u70b9\u4ee5\u4e0b\uff0c\u8fd9\u79cd\u955c\u5934\u79f0\u4e3a\u79fb\u8f74\u955c\u5934\u3002

    \u53e6\u5916\u4e00\u79cd\u900f\u89c6\u7578\u53d8\u4f53\u73b0\u5728\u66f2\u7ebf\u7684\u5f62\u53d8\u4e0a\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u5e38\u611f\u53d7\u5230\u7684\uff0c\u7ad9\u5728\u8fb9\u4e0a\u7684\u4eba\u8138\u603b\u662f\u66f4\u5927\u4e00\u70b9\u3002\u800c\u8fd9\u79cd\u7578\u53d8\u5728\u65ad\u955c\u5934\u4e0b\u66f4\u5e38\u89c1\uff0c\u6240\u4ee5\u4eba\u50cf\u66f4\u591a\u7528\u7684\u662f\u957f\u7126\u955c\u5934\uff08\u5176\u4e00\u539f\u56e0\uff0c\u5176\u4ed6\u7684\u8fd8\u6709 FoV \u5c0f\u6240\u4ee5\u80cc\u666f\u66f4\u5e72\u51c0\u7b49\uff09\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","title":"\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","text":"\\[ \\begin{align} r^2 & = {x'}_n^2 + {y'}_n^2 \\\\ {x'}_d & = {x'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ {y'}_d & = {y'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ \\end{align} \\]

    \u800c\u8fd9\u79cd\u7167\u7247\u7684\u7ea0\u6b63\u529e\u6cd5\u5c31\u662f\u5bfb\u627e\u7167\u7247\u4e2d\u7684\u683c\u70b9\uff0c\u7136\u540e\u901a\u8fc7\u6570\u5b66\u65b9\u6cd5\u6765\u8fd8\u539f\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6b63\u4ea4\u6295\u5f71","title":"\u6b63\u4ea4\u6295\u5f71","text":"

    \u6b63\u4ea4\u6295\u5f71\u7684\u542b\u4e49\u5c31\u662f\uff0c\u76f4\u63a5\u62b9\u6389\u6df1\u5ea6\u4fe1\u606f\uff0c\u4e09\u7ef4\u70b9 \\(P\\) \u5230\u4e8c\u7ef4\u70b9 \\(p\\) \u7684\u6620\u5c04\u89c4\u5219\u5982\u4e0b\uff1a

    \\[ \\begin{bmatrix} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} = \\begin{bmatrix} x \\\\ y \\end{bmatrix} \\]

    \u4e5f\u5c31\u662f\u5e73\u884c\u5149\u6e90\u6295\u5f71\u3002

    \u8fd9\u79cd\u6295\u5f71\u53ef\u80fd\u4e0d\u592a\u62df\u771f\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u4e0d\u8981\u6c42\u7cbe\u5ea6\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u603b\u662f\u4e50\u4e8e\u4f7f\u7528\u7684\u3002

    \u8fd9\u6837\u8bf4\u53ef\u80fd\u6bd4\u8f83\u62bd\u8c61\uff0c\u4f46\u662f\u5b83\u5176\u5b9e\u5f88\u5e38\u89c1\uff0c\u6bd4\u5982\u5728\u4e00\u4e9b\u4ee5\u201c\u4e0a\u5e1d\u89c6\u89d2\u201d\u5c55\u5f00\u7684\u6e38\u620f\u4e2d\uff0c\u4f8b\u5982\u201c\u5f00\u7f57\u6e38\u620f\u201d\u3001\u201c\u6a21\u62df\u90fd\u5e02\u201d\u8fd9\u79cd\uff0c\u91c7\u7528\u7684\u57fa\u672c\u90fd\u662f\u8fd9\u79cd\u6295\u5f71\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5feb\u95e8shutter","title":"\u5feb\u95e8(Shutter)","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","title":"\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","text":"

    \u5149\u5ea6\u56fe\u50cf\u751f\u6210\u8003\u8651\u7684\u4e3b\u8981\u662f\u5149\u5f3a\u548c\u989c\u8272\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\u3002

    \u786c\u4ef6\u4e0a\uff0c\u5b83\u4eec\u90fd\u901a\u8fc7\u56fe\u50cf\u4f20\u611f\u5668(img sensor)\u5b9e\u73b0\u3002

    \u5f15\u5165

    \u7740\u8272(shading)\u4e2d\u6240\u8bf4\u7684\u5149\u5f3a\uff0c\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff1a\u4e00\u65b9\u9762\u4e0e\u8ddd\u79bb\u5149\u6e90\u7684\u8ddd\u79bb\u6709\u5173\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u7b26\u5408\u5e73\u65b9\u53cd\u6bd4\u5b9a\u5f8b\uff0c\u8fd9\u79cd\u7279\u5f81\u6211\u4eec\u79f0\u4e4b\u4e3a Light Falloff\uff1b\u53e6\u4e00\u65b9\u9762\u5b9e\u9645\u4e0a\u662f\u9700\u8981\u6211\u4eec\u8ba1\u7b97\u5149\u7684\u53cd\u5c04\u884c\u4e3a\u3002

    \u7406\u8bba\u4e0a\uff0c\u6211\u4eec\u4f1a\u9700\u8981\u53cc\u5411\u53cd\u5c04\u5206\u5e03\u51fd\u6570 BRDF(Bidirectional Reflectance Distribution Function)\u6765\u8ba1\u7b97\uff0cBRDF \u7684\u8f93\u5165\u5927\u81f4\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u51e0\u4e2a\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u9700\u8981\u5efa\u7acb\u8fd9\u6837\u4e00\u4e2a\u6a21\u578b\u662f\u5f88\u56f0\u96be\u7684\uff0c\u4e14\u8fd9\u4e2a\u6a21\u578b\u4e0d\u5e38\u7528\uff0c\u800c\u4e14\u8ba1\u7b97\u8d77\u6765\u6bd4\u8f83\u9ebb\u70e6\u3002

    \u53cd\u5c04\u4e3b\u8981\u53ef\u4ee5\u5f52\u7eb3\u4e3a\u4e24\u79cd\u7b80\u5355\u6a21\u578b\u548c\u4e00\u79cd\u6df7\u5408\u6a21\u578b\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6f2b\u53cd\u5c04","title":"\u6f2b\u53cd\u5c04","text":"

    \u6f2b\u53cd\u5c04(diffuse reflection) \u53c8\u53eb \u6717\u4f2f\u53cd\u5c04(Lambertian reflection)\uff0c\u662f\u8868\u73b0\u5728\u7c97\u7cd9\u8868\u9762\u4e0a\u7684\u53cd\u5c04\u7279\u5f81\uff0c\u56e0\u4e3a\u6211\u4eec\u9ed8\u8ba4\u5b83\u5411\u56db\u9762\u516b\u65b9\u53cd\u5c04\u7684\u5149\u5f3a\u90fd\u4e00\u6837\uff0c\u6240\u4ee5\u5b83\u7684\u8ba1\u7b97\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\uff08Shading independent of view direction\uff09\uff1a

    \\[ L_d = k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) \\]

    \u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

    \u5982\u4f55\u7406\u89e3\u5149\u5f3a\u5ea6\u4e0e\u89d2\u5ea6\u7684\u5173\u7cfb

    \u4e00\u5f00\u59cb\u6ca1\u4ed4\u7ec6\u60f3\u7684\u65f6\u5019\u8fd8\u89c9\u5f97\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u4ed4\u7ec6\u4e00\u60f3\u4e3a\u4ec0\u4e48\u80fd\u8fd9\u6837\u8868\u8ff0\uff1f\u4e8e\u662f\u548c\u540c\u5b66\u63a2\u8ba8\u4e86\u4e00\u4e0b\uff0c\u611f\u89c9\u4e00\u4e2a\u53ef\u4ee5\u63a5\u53d7\u7684\u89e3\u91ca\u662f\u8fd9\u6837\u7684\uff1a

    \u9996\u5148\uff0c\u8fd9\u91cc\u4e0e\u5176\u8bf4\u4e0e\u89d2\u5ea6\u76f8\u5173\uff0c\u4e0d\u5982\u8bf4\u4e0e\u5355\u4f4d\u9762\u79ef\u53d7\u5230\u7684\u5149\u7167\u5f3a\u5ea6\u6709\u5173\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u540c\u4e00\u675f\u5149\uff0c\u503e\u659c\u7684\u9762\u4e0a\u4f1a\u6709\u66f4\u5927\u7684\u9762\u79ef\u88ab\u7167\u5c04\u5230\uff0c\u5747\u644a\u4e0b\u6765\u5355\u4f4d\u9762\u79ef\u4e0a\u7684\u5149\u5f3a\u5ea6\u5c31\u5c0f\uff0c\u6216\u8bb8\u53ef\u4ee5\u5c06\u5b83\u7406\u89e3\u6210\u7c7b\u4f3c\u4e8e\u201c\u5bc6\u5ea6\u201d\u7684\u6982\u5ff5\u3002

    \u5e26\u7740\u8fd9\u6837\u7684\u60f3\u6cd5\uff0c\u518d\u6765\u770b\u8fd9\u5f20\u56fe\uff0c\u5c31\u6bd4\u8f83\u6e05\u6670\u4e86\u3002

    Source: https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u9ad8\u5149\u53cd\u5c04","title":"\u9ad8\u5149\u53cd\u5c04","text":"

    \u9ad8\u5149\u53cd\u5c04(specular reflection) \u7c7b\u4f3c\u6211\u4eec\u8ba4\u77e5\u4e2d\u7684\u955c\u9762\u53cd\u5c04\uff0c\u5b83\u7684\u7279\u5f81\u662f\u57fa\u672c\u7b26\u5408\u955c\u53cd\u5c04\u7684\u89c4\u5f8b\u3002

    \u5728\u9ad8\u5149\u53cd\u5c04\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u534a\u7a0b\u5411\u91cf(half vec)\\(\\vec h = bisector(\\vec v,\\vec l) = \\frac{\\vec v + \\vec l}{||\\vec v + \\vec l||}\\)

    \u5f53 \\(\\vec h\\) \u4e0e \\(\\vec n\\) \u975e\u5e38\u63a5\u8fd1\u65f6\uff0c\u5373 \\(\\alpha = <\\vec n, \\vec h>\\) \u5f88\u5c0f\u65f6\uff0c\u6211\u4eec\u79f0\u4e4b\u7b26\u5408\u9ad8\u5149\u53cd\u5c04\u3002

    \u9ad8\u5149\u53cd\u5c04\u7684\u5f3a\u5ea6\u516c\u5f0f\u5927\u81f4\u5982\u4e0b\uff1a

    \\[ L_s = k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\cos\\alpha)^p=k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\]

    \u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

    \u5206\u6790\u53ef\u5f97\uff0c\\(p\\) \u8d8a\u5927\uff0c\u9ad8\u5149\u8d8a\u96c6\u4e2d\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#blinn-phong-\u53cd\u5c04","title":"Blinn-Phong \u53cd\u5c04","text":"

    Blinn-Phong \u53cd\u5c04\u6a21\u578b(Blinn-Phong Reflection Model)\u53ef\u4ee5\u8bf4\u96c6\u5408\u4e86\u524d\u4e24\u8005\uff0c\u6b64\u5916\u8fd8\u5f15\u5165\u4e86\u73af\u5883\u5149(ambient part)\u3002

    \\[ L_a=k_aI_a \\]

    Blinn-Phong \u53cd\u5c04\u6a21\u578b\u7684\u5927\u81f4\u6210\u5206\u5982\u4e0b\uff1a

    \\[ \\begin{align} L & = L_a + L_d + L_s \\\\ & = k_aI_a + k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) + k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\end{align} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u989c\u8272","title":"\u989c\u8272","text":"

    \u4e3a\u4e86\u63cf\u8ff0\u989c\u8272\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u8272\u5f69\u7a7a\u95f4(color spaces)\uff0c\u5e38\u89c1\u7684\u6709 RGB \u548c HSV \u7b49\uff0c\u5bf9\u76f8\u673a\u6765\u8bf4\u6211\u4eec\u66f4\u5e38\u7528\u7684\u662f RGB\u3002

    in py

    \u5728\u7b97\u6cd5\u4e2d\uff0c\u6211\u4eec\u7528\u77e9\u9635\u6765\u5b58\u50a8\u56fe\u50cf\u4fe1\u606f\uff0c\u5176\u4e2d\u5de6\u4e0a\u89d2\u7684\u5143\u7d20\u5750\u6807\u4e3a (0, 0, :)\uff0c\u5176\u4e2d\u7b2c\u4e09\u7ef4\u7528\u6765\u6307\u5b9a\u989c\u8272\u901a\u9053(channel)\uff0c\u6240\u4ee5\u7b2c i \u884c j \u5217\u7684\u50cf\u7d20\u70b9\u8868\u793a\u4e3a (i-1, j-1, :)\uff1b

    \u5728\u786c\u4ef6\u4e0a\uff0c\u989c\u8272\u4f20\u611f\u4e3b\u8981\u901a\u8fc7\u62dc\u5c14\u6ee4\u955c(Bayer filter)\u5b9e\u73b0\u3002\u4e5f\u5c31\u662f\u901a\u8fc7\u5728\u4f20\u611f\u5668\u524d\u5b89\u88c5\u4e00\u4e2a\u5355\u8272\u6ee4\u955c\uff0c\u6765\u63a5\u6536\u5355\u4e00\u8272\u5149\u3002\u5e38\u89c1\u7684\u505a\u6cd5\u662f\u4ee5\u7530\u5b57\u683c\u7684\u56db\u4e2a\u4f20\u611f\u5668\u4e3a\u5355\u4f4d\uff0c\u5206\u914d R*1 G*2 B*1 \u7684\u6ee4\u955c\u3002

    Source: https://en.wikipedia.org/wiki/Bayer_filter

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7eff\u8272\u7684\u6ee4\u955c\u66f4\u591a\uff0c\u56e0\u4e3a\u592a\u9633\u5149\u4e2d\u7eff\u8272\u6ce2\u6bb5\u66f4\u591a\uff0c\u4e8e\u662f\u4eba\u773c\u5bf9\u7eff\u8272\u66f4\u654f\u611f\u3002

    \u663e\u7136\uff0c\u8fd9\u6837\u5f97\u5230\u7684\u56fe\u7247\u9700\u8981\u8fdb\u884c\u63d2\u503c\u624d\u80fd\u5f97\u5230\u6700\u7ec8\u56fe\u7247\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/","title":"Lecture 3 | Image Processing","text":"

    \u7ea6 5940 \u4e2a\u5b57 3 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 30 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"

    \u5bf9\u56fe\u50cf\u7684\u57fa\u672c\u64cd\u4f5c\u5373\u5728\u56fe\u50cf\u7f16\u8f91\u8f6f\u4ef6\u4e2d\u5e38\u89c1\u7684\u90a3\u4e48\u51e0\u79cd\uff0c\u7a0d\u540e\u6211\u4eec\u5c06\u4f1a\u7b80\u5355\u4ecb\u7ecd\u8fd9\u51e0\u79cd\u64cd\u4f5c\u662f\u5982\u4f55\u5b9e\u73b0\u7684\u3002

    \u4e0d\u8fc7\u5728\u6b64\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5148\u4ecb\u7ecd\u4e00\u4e2a\u5de5\u5177\u2014\u2014\u5377\u79ef(convolution)\uff0c\u4e4b\u540e\u4e00\u4e9b\u64cd\u4f5c\u90fd\u4f9d\u8d56\u4e8e\u6b64\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5377\u79ef","title":"\u5377\u79ef","text":"

    \u6570\u5b66\u4e0a\u5bf9\u5377\u79ef(convolution)\u7ed9\u51fa\u7684\u5b9a\u4e49\u662f\uff1a

    \\[ (f*g)(x)=\\int_{-\\infty}^{\\infty} f(y)g(x-y)\\mathrm{d}y \\]

    \u7b2c\u4e00\u6b21\u63a5\u89e6\u8fd9\u4e2a\u5f0f\u5b50\u7684\u65f6\u5019\u6211\u4e2a\u4eba\u611f\u89c9\u662f\u4e00\u5934\u96fe\u6c34\u7684\u3002\u4f46\u662f\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u4ece\u4e00\u4e2a\u66f4\u76f4\u89c2\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u4e00\u4e0b\u8fd9\u4e2a\u5f0f\u5b50\uff1a

    \u4e00\u8a00\u4ee5\u853d\u4e4b\uff1a\\((f*g)(x)\\) \u662f \\(g(x)\\) \u5728\u6ee4\u6ce2\u89c4\u5219 \\(f(y)\\) \u4e0b\u7684\u52a0\u6743\u5747\u503c\u51fd\u6570\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u5148\u6765\u4ece\u4e00\u7ef4\u79bb\u6563\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u5377\u79ef\uff0c\u5373\uff1a

    \\[ (f*a)_i = \\sum_{j=-m}^{m} f_j * a_{i+j} \\]

    \u5f53\u7136\uff0c\u4e0a\u9762\u53ef\u80fd\u51fa\u73b0 \\(f_{-1}\\) \u8fd9\u79cd\u9b3c\u755c\u7684\u4e1c\u897f\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u8fd9\u91cc\u7684 \\(f\\) \u6570\u5217\u786e\u5b9e\u662f\u5b9a\u4e49\u5728\u6574\u4e2a\u6574\u6570\u8f74\u4e0a\u7684\uff08\u5f53\u7136\u4e0b\u6807\u5565\u7684\u662f\u65e0\u6240\u8c13\u7684\uff0c\u7ec8\u70b9\u5173\u6ce8\u4e0b\u9762\u7684\u6a21\u62df\u8fc7\u7a0b\uff09

    \u6bd4\u5982\uff0c\u6211\u4eec\u6709\u539f\u59cb\u6570\u5217 \\(a_n\\) \u548c\u6ee4\u6ce2\u5668\u6570\u5217 \\(f_m\\) \u5982\u4e0b\uff1a

    \\(a_n\\) 2 4 2 6 2 \\(f_m\\) 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u624b\u52a8\u6a21\u62df\u4e00\u4e0b\u5377\u79ef\u8fc7\u7a0b\uff1a

    \u5377\u79ef\u8fc7\u7a0b \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 1 2 1 0 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times4+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 1 2 1 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times4+2\\times2+1\\times6\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 0 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times6+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(16\\) -

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5982\u679c \\(f_m\\) \u6bcf\u4e00\u9879\u90fd\u9664\u4ee5 4\uff0c\u90a3\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u8fc7\u7a0b\u5c31\u662f\u5728\u6c42\u6bcf\u4e00\u9879\u4e0e\u76f8\u90bb\u4e24\u9879\u7684\u52a0\u6743\u5e73\u5747\uff08\u4e2d\u5fc3\u6743\u91cd\u66f4\u5927\uff09\u3002

    \u73b0\u5728\uff0c\u4ece\u79bb\u6563\u4f1a\u5230\u8fde\u7eed\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u4ecb\u7ecd\u6700\u7ecf\u5178\u7684\u4e00\u4e2a\u5377\u79ef\u5e94\u7528\u2014\u2014\"box function\"\uff0c\u5176\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u65f6\u5b9a\u4e49\u5982\u4e0b\uff1a

    \\[ f(x) = \\left\\{ \\begin{array}{} 1 &|x| \\leq 0.5\\\\ 0 &otherwise \\end{array} \\right. \\]

    \u800c\u5c06\u5b83\u5e26\u5165\u5377\u79ef\u7684\u8868\u8fbe\u5f0f\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a

    \\[ (f*g)(x)=\\int_{-0.5}^{0.5}g(x-y)\\mathrm{d}y \\]

    \u90a3\u5b9e\u9645\u4e0a\uff0c\u8fd9\u5c31\u662f\u5728\u6c42\u51fd\u6570\u5728\u5bbd\u5ea6\u4e3a 1 \u7684\u8303\u56f4\u5185\u7684\u5747\u503c\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u5c06\u5b83\u8fdb\u884c\u4e00\u70b9\u6269\u5c55\uff0c\u6765\u5230\u4e8c\u7ef4\uff0c\u5219\u53ef\u4ee5\u5c06\u79bb\u6563\u7684\u5377\u79ef\u8fc7\u7a0b\u7528\u8fd9\u6837\u4e00\u4e2a gif \u6765\u8868\u793a\uff1a

    \u601d\u8003

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e8c\u7ef4\u5377\u79ef\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5377\u51fa\u6765\u7684\u4e1c\u897f\u8981\u6bd4\u539f\u59cb\u56fe\u50cf\u5c0f\u3002\u800c\u5176\u4e2d\u4e00\u79cd\u89e3\u51b3\u7684\u65b9\u6cd5\u662f padding\u3002\u5728\u6b64\u4e0d\u505a\u8fc7\u591a\u4ecb\u7ecd\u3002

    \u5178\u578b\u6ee4\u6ce2\u5668

    \u5176\u4ed6\u5178\u578b\u7684\u6ee4\u6ce2\u5668\u53ef\u80fd\u5c06\u5728\u4e4b\u540e\u4ecb\u7ecd\uff0c\u8fd9\u91cc\u7b80\u5355\u63d0\u51e0\u4e2a\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u589e\u52a0\u5bf9\u6bd4\u5ea6","title":"\u589e\u52a0\u5bf9\u6bd4\u5ea6","text":"

    \u589e\u52a0\u5bf9\u6bd4\u5ea6(increase contrast)\u5373\u8ba9\u753b\u9762\u4e2d\u7684\u989c\u8272\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u901a\u4fd7\u6765\u8bf4\u5c31\u662f\u9ed1\u7684\u66f4\u9ed1\uff0c\u767d\u7684\u66f4\u767d\u3002

    \u4f53\u611f\u4e0a\u8ba9\u4e00\u5f20\u96fe\u8499\u8499\u7684\u7167\u7247\u53d8\u5f97\u66f4\u52a0\u9ed1\u767d\u5206\u660e\u3002

    \u4e0a\u9762\u4e5f\u8bf4\u4e86\uff0c\u662f\u5c06\u8272\u5f69\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u8bb2\u539f\u6765\u7684\u989c\u8272\u8fdb\u884c\u4e00\u4e2a\u6620\u5c04\uff0c\u4ee4 \\(color'(x,y) = f[color(x,y)]\\)\u3002

    \u90a3\u4e48\u4e00\u822c\u6765\u8bf4\uff0c\u6211\u4eec\u91c7\u7528S \u66f2\u7ebf(S curve)\u6765\u8fdb\u884c\u8fd9\u4e2a\u6620\u5c04\uff0c\u4e5f\u5c31\u662f\u5c06\u539f\u672c\u5747\u5300\u5206\u5e03\u7684\u70b9\u6309\u7167 S \u66f2\u7ebf\u8fdb\u884c\u62c9\u4f38\u548c\u538b\u7f29\uff0c\u8fd9\u6837\uff0c\u767d\u7684\u4f1a\u66f4\u767d\uff0c\u9ed1\u7684\u5c31\u4f1a\u66f4\u9ed1\u3002

    \u56fe\u4e2d\u6a2a\u5750\u6807\u8868\u793a\u539f\u6765\u7684\u989c\u8272\uff0c\u7eb5\u5750\u6807\u8868\u793a\u6620\u5c04\u540e\u7684\u989c\u8272\uff0c\u53ef\u4ee5\u53d1\u73b0\u9ed1\u8272\u90e8\u5206\u7684\u989c\u8272\u90fd\u5411\u9ed1\u8272\u504f\u79fb\uff0c\u767d\u8272\u90e8\u5206\u4ea6\u7136\u3002

    \u800c\u5177\u4f53\u4f7f\u7528\u7684\u66f2\u7ebf\uff0c\u5219\u9700\u8981\u6839\u636e\u9700\u6c42\u8fdb\u884c\u8c03\u6574\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cd\u8272","title":"\u53cd\u8272","text":"

    \u987e\u540d\u601d\u4e49\uff0c\u56fe\u50cf\u53d6\u53cd\u8272(image invert)\u5c31\u662f\u5c06\u989c\u8272\u53d6\u53cd\uff0c\u9ed1\u53d8\u767d\uff0c\u767d\u53d8\u9ed1\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u8fb9\u7f18\u63d0\u53d6","title":"\u8fb9\u7f18\u63d0\u53d6","text":"

    \u8fb9\u7f18\u63d0\u53d6 Edge detection

    \u5f15\u5165

    \u6a21\u7cca(blur) \u548c \u9510\u5316(sharpen) \u662f\u4e24\u4e2a\u5bf9\u5e94\u7684\u6982\u5ff5\uff0c\u5b9e\u73b0\u7684\u624b\u6bb5\u4e5f\u975e\u5e38\u7c7b\u4f3c\u3002

    \u4f7f\u7528\u5bf9\u6bd4

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6a21\u7cca","title":"\u6a21\u7cca","text":"

    \u6240\u8c13\u7684\u6a21\u7cca(blur)\uff0c\u50cf\u662f\u5c06\u67d0\u4e2a\u4f4d\u7f6e\u7684\u50cf\u7d20\u548c\u5468\u56f4\u6df7\u5408\u8d77\u6765\uff0c\u66f4\u6570\u5b66\u7684\u8868\u8ff0\u6765\u8bf4\uff0c\u9700\u8981\u4e0e\u5468\u56f4\u8fdb\u884c\u52a0\u6743\u6c42\u5e73\u5747\uff0c\u6ca1\u9519\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u5377\u79ef\u6765\u5b9e\u73b0\u3002

    Source: Stanford CS248, Winter 202

    \u4f8b\u5982\uff0c\u5047\u8bbe\u6211\u4eec\u7528\u8fd9\u6837\u4e00\u4e2a\u4e8c\u7ef4\u6ee4\u6ce2\u5668\u5bf9\u4e00\u5f20\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\uff1a

    \\[ \\begin{bmatrix} \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\end{bmatrix} \\]

    \u90a3\u4e48\u65b0\u5f97\u5230\u7684\u56fe\u7247\u4e2d\u7684\u50cf\u7d20\u5c06\u4f1a\u7b49\u4e8e\u539f\u56fe\u7247\u8fd9\u4e2a\u50cf\u7d20\u5468\u56f4\u7684 8 \u4e2a\u50cf\u7d20\u548c\u5b83\u6c42\u5e73\u5747\u5f97\u5230\u7684\u989c\u8272\u3002

    \u518d\u6bd4\u5982\uff0c\u6ee4\u6ce2\u5668\u4f7f\u7528\u9ad8\u65af\u51fd\u6570\u7684\u9ad8\u65af\u6a21\u7cca\uff1a

    \\[ f(i,j)=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2+j^2}{2\\sigma^2}} \\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\; \\begin{bmatrix} 0.075 & 0.124 & 0.075 \\\\ 0.124 & 0.204 & 0.124 \\\\ 0.075 & 0.124 & 0.075 \\end{bmatrix} \\]

    \u9ad8\u65af\u6a21\u7cca\u4f1a\u66f4\u52a0\u6ce8\u91cd\u4e2d\u5fc3\u7684\u6743\u91cd\uff0c\u6240\u4ee5\u6a21\u7cca\u8d77\u6765\u76f8\u5bf9\u6765\u8bf4\u66f4\u80fd\u4fdd\u6301\u56fe\u7247\u539f\u6765\u7684\u7279\u5f81\u4e00\u70b9\u3002

    \u66f4\u4f18\u79c0\u7684\u4e00\u79cd\u6a21\u7cca

    \u4e00\u79cd\u66f4\u6709\u7528\u7684\u6a21\u7cca\u662f\uff0c\u63d0\u53d6\u8fb9\u7f18\u540e\u7684\u6a21\u7cca\uff0c\u5373\u6a21\u7cca\u8fc7\u7a0b\u4e2d\u4e0d\u5f71\u54cd\u8fb9\u7f18\uff0c\u6bd4\u5982\u4eba\u8138\u8fb9\u7f18\u6a21\u7cca\uff0c\u53ea\u5f71\u54cd\u8138\u800c\u4e0d\u5f71\u54cd\u5176\u4ed6\u90e8\u5206\u3002

    \u5177\u4f53\u5b9e\u73b0\u6211\u4eec\u5c06\u5728 \u518d\u770b\u6ee4\u6ce2\u5668 \u4e2d\u7684 \u53cc\u8fb9\u6ee4\u6ce2\u5668\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u9510\u5316","title":"\u9510\u5316","text":"

    \u6211\u4eec\u6ce8\u610f\u5230\uff0c\u6a21\u7cca\u4e2d\u7684\u6ee4\u6ce2\u5668\u57fa\u672c\u4e0a\u6bcf\u4e00\u4e2a\u5143\u7d20\u90fd\u662f\u975e\u8d1f\u6570\uff0c\u610f\u601d\u662f\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u4fdd\u7559\u4e00\u90e8\u5206\u8fd9\u4e9b\u50cf\u7d20\u7684\u7279\u5f81\u3002

    \u90a3\u5982\u679c\u6211\u4eec\u628a\u5176\u4e2d\u4e00\u90e8\u5206\u6539\u6210\u8d1f\u6570\u5462\uff1f\u90a3\u5c31\u8bf4\u660e\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u51cf\u53bb\u8fd9\u90e8\u5206\u7684\u7279\u5f81\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u5f88\u50cf\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7279\u5f81\u5c31\u4f1a\u88ab\u524a\u5f31\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u51e0\u4e4e\u76f8\u53cd\uff0c\u90a3\u4e48\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u7684\u7279\u5f81\u5c31\u4f1a\u88ab\u52a0\u5f3a\u3002

    \u6211\u4eec\u8003\u8651\u8fd9\u6837\u4e00\u4e2a\u7279\u6b8a\u4f8b\u5b50\uff1a

    \\[ \\begin{bmatrix} 0 & -1 & 0 \\\\ -1 & 5 & -1 \\\\ 0 & -1 & 0 \\end{bmatrix} \\]

    \u5982\u679c\u8fb9\u7f18\u7684\u70b9\u548c\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u4e0d\u4e00\u6837\uff0c\u5219\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u7684\u7279\u5f81\u4f1a\u88ab\u5f3a\u8c03\uff0c\u5373\u4f1a\u653e\u5927\u76f8\u90bb\u70b9\u7684\u533a\u522b\uff0c\u8fd9\u5c31\u662f\u9510\u5316(sharpen)\u7684\u539f\u7406\u3002

    Source: Stanford CS248, Winter 202

    \u6a21\u7cca\u4e0e\u9510\u5316\u7684\u8054\u7cfb

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u518d\u770b\u6ee4\u6ce2\u5668","title":"\u518d\u770b\u6ee4\u6ce2\u5668","text":"

    \u4e0a\u9762\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86\u7528\u4e8e\u6a21\u7cca\u7684\u6ee4\u6ce2\u5668\uff08\u6bd4\u5982\u9ad8\u65af\u6ee4\u6ce2\u5668\uff09\uff0c\u7528\u4e8e\u9510\u5316\u7684\u6ee4\u6ce2\u5668\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u770b\u770b\u5176\u4ed6\u7684\u6ee4\u6ce2\u5668\u7684\u76f8\u5173\u5185\u5bb9\uff1a

    \u6c34\u5e73/\u5782\u76f4\u68af\u5ea6\u63d0\u53d6

    \\[ \\begin{bmatrix} -1 & 0 & 1 \\\\ -2 & 0 & 2 \\\\ -1 & 0 & 1 \\end{bmatrix} \\] \\[ \\begin{bmatrix} -1 & -2 & -1 \\\\ 0 & 0 & 0 \\\\ 1 & 2 & 1 \\end{bmatrix} \\] \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 \u53cc\u8fb9\u6ee4\u6ce2\u5668

    \u5f15\u5165

    \u56fe\u50cf\u91c7\u6837(sampling)\u5206\u4e3a\u5411\u4e0a\u91c7\u6837(up-sampling)\u548c\u5411\u4e0b\u91c7\u6837(down-sampling)\u4e24\u79cd\u3002

    \u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u5c31\u662f\u5728\u4fdd\u6301\u56fe\u50cf\u7279\u5f81\u7684\u60c5\u51b5\u4e0b\u5bf9\u56fe\u7247\u8fdb\u884c\u7f29\u653e\u3002\u663e\u7136\uff0c\u5728\u7f29\u653e\u56fe\u50cf\u65f6\uff0c\u4f1a\u51fa\u73b0\u50cf\u7d20\u6570\u91cf\u7684\u53d8\u5316\uff0c\u90a3\u8981\u5982\u4f55\u6dfb\u52a0\u50cf\u7d20\u3001\u5982\u4f55\u51cf\u5c11\u50cf\u7d20\uff0c\u5c31\u662f\u56fe\u50cf\u91c7\u6837\u8003\u8651\u7684\u4e8b\u60c5\u3002

    \u6b64\u5916\uff0c\u5c06\u4e24\u8005\u7ed3\u5408\uff0c\u8fd8\u4f1a\u6709\u4f8b\u5982\u6539\u53d8\u56fe\u7247\u957f\u5bbd\u6bd4\uff0c\u8fdb\u884c\u62c9\u4f38\u8fd9\u79cd\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7f29\u5c0f\u56fe\u7247\u5411\u4e0b\u91c7\u6837","title":"\u7f29\u5c0f\u56fe\u7247\uff1a\u5411\u4e0b\u91c7\u6837","text":"

    \u5411\u4e0b\u91c7\u6837\u4e5f\u5c31\u662f\u8ba9\u56fe\u7247\u53d8\u5c0f\uff0c\u8fd9\u91cc\u4e3b\u8981\u9700\u8981\u8003\u8651\u7684\u95ee\u9898\u662f\u5982\u4f55\u7f29\u5c0f\u56fe\u7247\uff0c\u5982\u4f55\u907f\u514d\u51fa\u73b0\u4fe1\u53f7\u8d70\u6837\u7684\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u4fe1\u53f7\u8d70\u6837","title":"\u4fe1\u53f7\u8d70\u6837","text":"

    \u8bf4\u5230\u8ba9\u56fe\u50cf\u53d8\u5c0f\uff0c\u6700\u7b80\u5355\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u2014\u2014\u6bd4\u5982\uff0c\u8ba9\u56fe\u7247\u7684\u7ebf\u5ea6\u7f29\u5c0f\u4e00\u534a\uff0c\u53ef\u4ee5\u6bcf\u56db\u4e2a\u683c\u5b50\u5c31\u91c7\u4e00\u4e2a\u683c\u5b50\u7684\u6837\u672c\u3002

    \u800c\u8fd9\u79cd\u7c97\u66b4\u7684\u505a\u6cd5\u5219\u6709\u53ef\u80fd\u5bfc\u81f4\uff1a

    -\u6469\u5c14\u7eb9(Moir\u00e9 Patterns)\u3002 -\u9a6c\u8f66\u8f6e\u9519\u89c9(Wagon Wheel Illusion) - ...

    \u800c\u8fd9\u4e9b\u7531\u91c7\u6837\u5bfc\u81f4\u7684\u95ee\u9898\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4fe1\u53f7\u8d70\u6837(aliasing)\u3002

    \u4ece\u672c\u8d28\u4e0a\u6765\u8bf4\uff0c\u4fe1\u53f7\u8d70\u6837\u7684\u53d1\u751f\uff0c\u662f\u56e0\u4e3a\u91c7\u6837\u9891\u7387\u8ddf\u4e0d\u4e0a\u56fe\u50cf\u9891\u7387\u5bfc\u81f4\u7684\u3002

    Signals are changing too fast but sampled too slow.

    \u5982\u4f55\u7406\u89e3\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d

    \u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u4f1a\u7ed9\u51fa\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d\u7684\u6765\u6e90\u3002

    \u4f46\u662f\u4e00\u4e2a\u66f4\u76f4\u89c2\uff0c\u66f4\u6a21\u7cca\u7684\u770b\u6cd5\u662f\uff1a\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u3002\u6bd4\u5982\u56fe\u50cf\u4e2d\u6709\u4e00\u4e2a\u975e\u5e38\u5206\u660e\u7684\u8fb9\u754c\uff0c\u90a3\u4e48\u5b83\u7684\u9891\u7387\u4e00\u822c\u4e0d\u4f1a\u4f4e\u3002

    \u800c\u8fd9\u91cc\u7684\u201c\u91c7\u6837\u9891\u7387\u201d\u8861\u91cf\u4e86\u4fe1\u53f7\u53d8\u5316\u7684\u9891\u7387\u3002

    \u6bd4\u5982\uff0c\u5982\u679c\u5bf9\u4e00\u4e2a\u6b63\u5f26\u6ce2\u8fdb\u884c\u91c7\u6837\uff0c\u5373\u4ece\u4e00\u4e2a\u8fde\u7eed\u7684\u6b63\u5f26\u6a21\u62df\u4fe1\u53f7\u4e2d\u9009\u53d6\u82e5\u5e72\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u540c\u91c7\u6837\u9891\u7387\u548c\u4e0d\u540c\u7684\u56fe\u50cf\u9891\u7387\u7684\u9009\u53d6\u65b9\u6848\u4f1a\u4ea7\u751f\u4e0d\u540c\u7684\u7ed3\u679c\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5bf9\u4e8e\u4e0a\u9762\u7684\u51e0\u4e2a\u51fd\u6570\uff0c\u91c7\u6837\u9891\u7387\u548c\u539f\u51fd\u6570\u7684\u9891\u7387\u5339\u914d\u8f83\u597d\uff0c\u6240\u4ee5\u91c7\u6837\u5f97\u5230\u7684\u70b9\u57fa\u672c\u80fd\u53cd\u6620\u51fa\u539f\u6765\u56fe\u5f62\u7684\u7279\u5f81\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bd4\u8f83\u4e0b\u9762\u7684\u51e0\u4e2a\u66f2\u7ebf\uff0c\u91c7\u6837\u5c31\u4e0d\u662f\u5f88\u7406\u60f3\u4e86\u3002

    \u6bd4\u8f83\u76f4\u89c2\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u8fc7\u6162\u70b9\u91c7\u6837\u9891\u7387\u4f1a\u5bfc\u81f4\u4fe1\u606f\u4e22\u5931\uff0c\u751a\u81f3\u662f\u8868\u73b0\u51fa\u5176\u5b83\u9891\u7387\u7684\u4fe1\u53f7\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u4e0d\u6b63\u5e38\u7684\u884c\u4e3a\u5c31\u5bfc\u81f4\u4e86\u4fe1\u53f7\u8d70\u6837\u3002

    \u8fd9\u4e2a\u201c\u9891\u7387\u201d\u548c\u56fe\u50cf\u6709\u4ec0\u4e48\u5173\u7cfb\uff1f

    \u9996\u5148\u6211\u4eec\u77e5\u9053\uff0c\u8981\u5411\u6709\u201c\u9891\u7387\u201d\u8fd9\u4e2a\u5c5e\u6027\uff0c\u8868\u8fbe\u5f0f\u6216\u8005\u8bf4\u51fd\u6570\u9700\u8981\u662f\u5468\u671f\u6027\u7684\u3002\u7136\u800c\u201c\u5468\u671f\u6027\u201d\u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\u6765\u8bf4\u53ef\u80fd\u662f\u4e00\u4e2a\u8f83\u4e3a\u82db\u523b\u7684\u6761\u4ef6\u3002

    \u6b64\u65f6\u5c31\u8f6e\u5230\u5085\u7acb\u53f6\u53d8\u6362\u767b\u573a\u4e86\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#fourier-\u53d8\u6362","title":"Fourier \u53d8\u6362","text":"

    \u6700\u7b80\u5355\u76f4\u767d\u5730\u7406\u89e3\u5085\u7acb\u53f6\u53d8\u6362(Fourier Transform)\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5c06\u4efb\u610f\u53ef\u4ee5\u8fdb\u884c\u5085\u7acb\u53f6\u53d8\u6362\u7684\u51fd\u6570\uff0c\u53d8\u5316\u4e3a\u4e00\u4e2a\u6b63\u5f26\u3001\u4f59\u5f26\u51fd\u6570\u7ea7\u6570\u7684\u5f62\u5f0f\u3002

    \u4f8b\u5982\u6700\u7ecf\u5178\u7684\uff0c\u4f7f\u7528\u4e0d\u540c\u9891\u7387\u7684\u6b63\u5f26\u6ce2\u6765\u62df\u5408\u4e00\u4e2a\u65b9\u6ce2\u3002

    \u8fd9\u91cc\u5f15\u6d41\u4e00\u4e2a xg \u7684\u89c6\u9891\uff1ahttps://www.bilibili.com/video/BV1Y7411W73U/

    \u6b64\u65f6\u4f60\u53ef\u80fd\u4f1a\u95ee\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u7ea7\u6570\u4e5f\u4e0d\u4fdd\u8bc1\u6709\u5468\u671f\u554a\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u7684\u76ee\u7684\u5e76\u4e0d\u662f\u627e\u5230\u4e00\u4e2a\u5468\u671f\uff0c\u800c\u662f\u80fd\u591f\u4f7f\u7528\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u7684\u67d0\u4e9b\u7279\u5f81\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u662f\u5177\u6709\u5468\u671f\u6027\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u7528\u8fd9\u4e2a\u7ea7\u6570\u4e2d\u7684\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u3002

    \u4e0b\u9762\u8fd9\u5f20\u56fe\u7247\u5c31\u662f\u7f16\u7801\u540e\u7684\u9891\u8c31\u3002

    \u800c\u5728\u6b27\u62c9\u516c\u5f0f \\(e^{i\\theta} = \\cos\\theta + i\\sin\\theta\\) \u7684\u7edf\u4e00\u4e0b\uff0cFourier \u53d8\u6362\u53ef\u4ee5\u8868\u793a\u4e3a\uff1a

    \\[ F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x \\\\ f(x) = \\int^{\\infty}_{-\\infty} F(u) e^{i2\\pi ux} \\rm{d} u \\\\ \\text{ where 'x' refers to space, 'u' refers to frequency} \\]

    \u901a\u8fc7\u8fd9\u79cd\u5f62\u5f0f\uff0c\u6211\u4eec\u5b9e\u73b0\u4e86 spatial domain \u548c frequency domain \u4e4b\u95f4\u7684\u7edf\u4e00\u3002

    graph LR;\nA([\"spatial domain\"]) ==>|\"Fourier transform\"| B([\"frequency domain\"])\nB ===>|\"Inverse transform\"| A

    \u5c1d\u8bd5\u4f7f\u7528\u5377\u79ef\u7684\u89d2\u5ea6\u6765\u770b\u5085\u7acb\u53f6\u53d8\u6362

    \u89c2\u5bdf\u5f0f\u5b50 \\(F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x\\)\uff0c\u662f\u4e0d\u662f\u80fd\u5c06\u5b83\u770b\u4f5c\u4e00\u4e2a\u5377\u79ef\u5f0f\u5462\uff1f

    \u4e00\u4e2a\u6709\u610f\u601d\u7684\u6027\u8d28

    \u800c\u4f7f\u7528 Fourier \u7684\u53e6\u5916\u4e00\u4e2a\u597d\u5904\u662f\uff0c\u5b83\u4e3a\u6211\u4eec\u5e26\u6765\u4e86\u8fd9\u6837\u4e00\u4e2a\u6570\u5b66\u6027\u8d28\uff1a

    Spatial Domain Frequency Domain \\(g(x) = f(x) * h(x)\\) Convolution \\(\\leftrightarrow\\) \\(G(u) = F(u)H(u)\\) Multiplication g(x)=f(x)h(x) Multiplication \\(\\leftrightarrow\\) \\(G(u) = F(u) * H(u)\\) Convolution

    \u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982\uff1a

    \u6211\u4eec\u5bf9\u4e00\u4e2a\u56fe\u50cf\u8fdb\u884c\u6a21\u7cca\u5904\u7406\uff0c\u5373\u5c06\u56fe\u50cf\u4e0e Blur Kernel \u8fdb\u884c\u5377\u79ef\uff0c\u5c31\u7b49\u6548\u4e8e\u5c06\u8fd9\u4e24\u4e2a\u77e9\u9635\u5728\u9891\u7387\u57df\u4e2d\u76f8\u4e58\u3002

    \u800c\u4f20\u7edf\u56fe\u50cf\u538b\u7f29\uff0c\u5bf9\u5e94\u5230\u9891\u7387\u57df\u4e0a\uff0c\u5c31\u662f\u5c06\u4ed6\u4eec\u7684\u4e8c\u7ef4\u9891\u8c31\u4e2d\u7684\u9ad8\u9891\u4e22\u6389\u3002

    \u90a3\u4e48\u5f97\u5230 Fourier \u53d8\u6362\u8fd9\u4e2a\u5de5\u5177\u4ee5\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5c06\u8f83\u96be\u5904\u7406\u7684\u50cf\u7d20\u4fe1\u606f\u8f6c\u5316\u4e3a\u9891\u7387\u4fe1\u606f\u3002

    \u5982\u4e0b\u56fe\uff0c\u5c06\u4e00\u5f20\u56fe\u7247\u4fe1\u606f\u7f16\u7801\u4e3a\u4e86\u9891\u8c31\u7684\u5f62\u5f0f\u3002\u7531\u4e8e\u8fd9\u91cc\u7684\u9891\u8c31\u662f\u4e8c\u7ef4\u7684\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u5f20\u7070\u5ea6\u56fe\u8868\u73b0\u51fa\u6765\u3002

    \u597d\uff0c\u6709\u4e86\u8fd9\u4e9b\u94fa\u57ab\uff0c\u6211\u4eec\u5728\u56de\u5934\u6765\u8bb2\u91c7\u6837\uff0c\u8fd9\u6b21\u6211\u4eec\u5c06\u5c1d\u8bd5\u7740\u540c\u65f6\u4ece Spatial domain \u548c Frequency domain \u7684\u89d2\u5ea6\u6765\u770b\u5f85\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u91c7\u6837","title":"\u91c7\u6837","text":"

    \u9996\u5148\uff0c\u6211\u4eec\u4ece\u5b57\u9762\u610f\u601d\u4e0a\u548c\u76ee\u7684\u4e0a\u6765\u7406\u89e3\u4e00\u4e0b\u91c7\u6837\u3002

    wiki \u4e0a\u5bf9\u91c7\u6837\u7684\u5b9a\u4e49\u662f\u8fd9\u6837\u7684\uff1a

    \u5728\u4fe1\u53f7\u5904\u7406\u9886\u57df\uff0c\u91c7\u6837\u662f\u5c06\u4fe1\u53f7\u4ece\u8fde\u7eed\u65f6\u95f4\u57df\u4e0a\u7684\u6a21\u62df\u4fe1\u53f7\u8f6c\u6362\u5230\u79bb\u6563\u65f6\u95f4\u57df\u4e0a\u7684\u79bb\u6563\u4fe1\u53f7\u7684\u8fc7\u7a0b\u3002

    \u663e\u7136\uff0c\u6211\u4eec\u8fd9\u91cc\u91c7\u6837\u7684\u5b9a\u4e49\u548c\u8fd9\u91cc\u7684\u5b9a\u4e49\u5e76\u4e0d\u4e00\u6837\u3002\u4e0e\u4e4b\u4e0d\u540c\u7684\u662f\uff0c\u6211\u4eec\u9700\u8981\u4ece\u539f\u59cb\u7684\uff0c\u8fd1\u4f3c\u8fde\u7eed\u7684\u56fe\u7247\u4e2d\u63d0\u53d6\u51fa\u5177\u6709\u7279\u5f81\u7684\u4e00\u4e9b\u540c\u6837\u662f\u79bb\u6563\u7684\u7684\u4fe1\u606f\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6211\u4eec\u5c06\u56fe\u7247\u8fdb\u884c\u653e\u5927\u7f29\u5c0f\u53d8\u6362\u7684\u76ee\u7684\u3002

    \u5173\u4e8e\u91c7\u6837\u66f4\u6570\u5b66\u7684\u5b9a\u4e49\uff0c\u5c31\u662f\u4f7f\u7528\uff08\u68b3\u5f62\uff09\u8109\u51b2\u51fd\u6570(Dirac comb function)\u53bb\u4e58\u88ab\u91c7\u6837\u7684\u51fd\u6570\u3002

    \u53d6\u51b3\u4e8e\u8109\u51b2\u51fd\u6570\u7684\u9891\u7387\uff0c\u91c7\u6837\u53c8\u88ab\u5206\u4e3a\u5bc6\u96c6\u91c7\u6837(Dense sampling)\u548c\u7a00\u758f\u91c7\u6837(Sparse sampling)\uff0c\u4e5f\u5c31\u5206\u522b\u5bf9\u5e94\u7740\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u91c7\u6837\u9891\u7387\u8f83\u9ad8\u548c\u91c7\u6837\u9891\u7387\u8f83\u4f4e\u7684\u60c5\u51b5\u3002

    \u800c\u7a00\u758f\u91c7\u6837\u5bfc\u81f4\u7684\u4fe1\u53f7\u8d70\u6837\u95ee\u9898\uff0c\u5c31\u662f\u91c7\u6837\u7ed3\u679c\u518d\u9891\u7387\u57df\u4e2d\u51fa\u73b0\u4e86\u4ea4\u96c6\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u51cf\u5c11\u8d70\u6837","title":"\u51cf\u5c11\u8d70\u6837","text":"

    \u65e2\u7136\u641e\u6e05\u695a\u4e86\u8d70\u6837\u662f\u5982\u4f55\u4ea7\u751f\u7684\uff0c\u90a3\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u9700\u8981\u8003\u8651\u5982\u4f55\u51cf\u5c11\u4fe1\u53f7\u8d70\u6837\u3002

    \u603b\u4f53\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e24\u79cd\u9009\u62e9\uff1a

    1. \u63d0\u9ad8\u91c7\u6837\u9891\u7387\uff1b
    2. \u5148\u8fc7\u6ee4\u9ad8\u9891\u518d\u91c7\u6837\uff1b

    \u9996\u5148\u6211\u4eec\u56de\u987e\u77e5\u9053\uff0c\u8d70\u6837\u662f\u7531\u4e8e\u91c7\u6837\u9891\u7387\u4f4e\u4e8e\u56fe\u50cf\u9ad8\u9891\u5bfc\u81f4\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u53ea\u9700\u8981\u63d0\u9ad8\u91c7\u6837\u9891\u7387\u5c31\u80fd\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u4e86\u3002

    \u800c\u5177\u4f53\u9700\u8981\u63d0\u9ad8\u5230\u591a\u5c11\u5462\uff1f\u5c31\u9700\u8981\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406(Nyquies-Shannon Theorem)\u3002

    \u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406

    \u5f53\u7136\uff0c\u4e3a\u4e86\u8de8\u8fc7\u4e00\u4e2a\u66f4\u9ad8\u7684\u95e8\u69db\u6211\u4eec\u4e5f\u4e0d\u4e00\u5b9a\u9700\u8981\u589e\u957f\u81ea\u5df1\u7684\u817f\u3002\u5728\u80fd\u591f\u63a5\u53d7\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u964d\u4f4e\u95e8\u69db\u2014\u2014\u5373\uff0c\u5148\u5c06\u9ad8\u9891\u6ee4\u6ce2\uff0c\u518d\u8fdb\u884c\u91c7\u6837\u3002

    \u66f4\u5f62\u8c61\u5730\u6765\u8bf4\uff0c\u5728\u9891\u7387\u57df\u4e2d\u53bb\u6389\u4ea4\u96c6\u7684\u624b\u6bb5\u4e3a\uff1a

    \u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f

    \u56de\u987e\u6211\u4eec\u4e00\u5f00\u59cb\u7ed9\u51fa\u7684\uff0c\u5173\u4e8e\u9891\u7387\u7684\u4e00\u4e2a\u6a21\u7cca\u7684\u7406\u89e3\uff0c\u201c\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u201d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u6d88\u53bb\u8fd9\u4e2a\u9ad8\u9891\uff0c\u6211\u4eec\u5c31\u9700\u8981\u8ba9\u62b9\u53bb\u8fd9\u4e9b\u201c\u53d8\u5316\u5267\u70c8\u201d\u7684\u6210\u5206\u3002\u518d\u63a5\u5730\u6c14\u4e00\u70b9\uff0c\u5c31\u662f\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u4e9b\u68f1\u89d2\u62b9\u5f00\u2014\u2014\u6240\u4ee5\u4e00\u79cd\u624b\u6bb5\u5c31\u662f\u8fdb\u884c\u6a21\u7cca\u3002

    \u4e00\u4e2a\u76f4\u89c2\u7684 \ud83c\udf30

    \u6211\u4eec\u4ee5\u5bf9\u4e00\u4e2a\u4e09\u89d2\u5f62\u91c7\u6837\u4e3a\u4f8b\uff0c\u8bf4\u660e\u5982\u4f55\u6ee4\u9ad8\u9891\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u76f4\u63a5\u91c7\u6837\u4f1a\u5bfc\u81f4\u7ed3\u679c\u4e0d\u592a\u7406\u60f3\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u91c7\u6837\u4e4b\u524d\u8fdb\u884c\u4e00\u6b21\u6a21\u7cca\u64cd\u4f5c\uff1a

    \u5b83\u5c06\u8d85\u8fc7\u5948\u594e\u65af\u9891\u7387\u7684\u90e8\u5206\u6ee4\u6ce2\u540e\uff0c\u660e\u663e\u53d1\u73b0\u91c7\u6837\u4fdd\u7559\u7684\u539f\u672c\u56fe\u50cf\u7684\u7279\u5f81\u66f4\u591a\u4e86\u3002

    \u800c\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u4e00\u4e2a\u6bd4\u8f83\u8d34\u8fd1\u65e5\u5e38\u751f\u6d3b\u7684\u8bcd\uff0c\u53eb\u6297\u952f\u9f7f(anti-aliasing)\uff0c\u6216\u8005\u8bf4\u53cd\u8d70\u6837\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","title":"\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","text":"

    \u9996\u5148\u89c4\u5b9a\u9891\u5e26\u9650\u5236\u4fe1\u53f7(band-limited signal) \\(f_0\\) \u662f\u56fe\u50cf\u9891\u7387\u7684\u4e00\u4e2a\u4e0a\u754c\uff1b\u5219\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406\u6307\u51fa\uff0c\u5982\u679c\u91c7\u6837\u9891\u7387\u5927\u4e8e \\(2f_0\\)\uff0c\u5219\u8be5\u91c7\u6837\u5f97\u5230\u7684\u7ed3\u679c\u53ef\u4ee5\u5b8c\u7f8e\u8868\u5f81\u539f\u51fd\u6570\u7684\u7279\u5f81\uff0c\u5373 \"perfectly reconstruct\"\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u653e\u5927\u56fe\u7247\u5411\u4e0a\u91c7\u6837--\u63d2\u503c","title":"\u653e\u5927\u56fe\u7247\uff1a\u5411\u4e0a\u91c7\u6837 / \u63d2\u503c","text":"

    \u56fe\u50cf\u653e\u5927(image magnification)\u662f\u56fe\u50cf\u7f29\u5c0f\u7684\u9006\u53d8\u6362(\u5e9f\u8bdd)\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5e76\u4e0d\u80fd\u4e25\u683c\u5730\u8bf4\u662f\u9006\u53d8\u6362\uff0c\u56e0\u4e3a\u56fe\u50cf\u7f29\u5c0f\u4e0e\u56fe\u50cf\u653e\u5927\u90fd\u662f\u4e0d\u53ef\u9006\u7684\u2014\u2014\u5373\uff0c\u56fe\u7247\u7f29\u5c0f\u5fc5\u7136\u5e26\u5566\u50cf\u7d20\u635f\u5931\uff0c\u56fe\u50cf\u653e\u5927\u5fc5\u7136\u5e26\u6765\u4e00\u4e9b\u901a\u8fc7\u8ba1\u7b97\u5f97\u5230\u7684\u8fd1\u4f3c\u50cf\u7d20\uff0c\u800c\u8fd9\u4e9b\u50cf\u7d20\u5728\u53d8\u6362\u5f97\u5230\u7684\u7ed3\u679c\u56fe\u50cf\u4e2d\u4e0e\u539f\u672c\u50cf\u7d20\u662f\u65e0\u6cd5\u533a\u5206\u7684\u3002

    \u90a3\u4e48\uff0c\u5355\u5c31\u56fe\u50cf\u653e\u5927\u6765\u8bf4\uff0c\u6211\u4eec\u5c31\u9700\u8981\u6839\u636e\u5df2\u6709\u7684\u50cf\u7d20\uff0c\u8fdb\u884c\u4e00\u4e9b\u63d2\u503c(interpolation)\u64cd\u4f5c\uff0c\u4ee5\u751f\u6210\u90a3\u4e9b\u653e\u5927\u8fc7\u7a0b\u4e2d\u65b0\u51fa\u73b0\u7684\u50cf\u7d20\u3002

    \u6211\u4eec\u4ece\u5bf9\u4e00\u4e2a\u4e00\u5143\u4e00\u7ef4\u51fd\u6570\u63d2\u503c\u7684\u89d2\u5ea6\u6765\u770b\u8fd9\u4e2a\u95ee\u9898\uff0c\u5373\u628a\u8fd9\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u5728\u91c7\u6837\u5f53\u4e2d\u63d2\u5165\u70b9\u7684\u95ee\u9898\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u73b0\u5728\u6709\u4e00\u4e2a\u6765\u81ea\u4e8e\u6b63\u5f26\u51fd\u6570\u7684\u91c7\u6837\uff0c\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u5728 \\(x\\in(x_i,x_{i+1})\\) \u4e2d\u63d2\u5165\u4e00\u4e2a\u70b9 \\((x_{ip}, y_{ip})\\) \u4f7f\u5f97\u5b83\u5c3d\u53ef\u80fd\u7b26\u5408\u539f\u672c\u7684\u6b63\u5f26\u51fd\u6570\u2014\u2014\u53c8\u6216\u8005\u8bf4\uff0c\u4f7f\u5f97\u5b83\u770b\u8d77\u6765\u5c3d\u53ef\u80fd\u5408\u7406\u3002

    \u800c\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u518d\u8fdb\u4e00\u6b65\u5730\u601d\u8003\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5229\u7528\u73b0\u6709\u7684\u70b9\u53bb\u62df\u5408\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u7136\u540e\u518d\u7528\u8fd9\u4e2a\u51fd\u6570\u4e0a\u53d6\u7684\u70b9\u4f5c\u4e3a\u63d2\u5165\u7684\u70b9\u3002

    \u90a3\u4e48\u6bd4\u8f83\u5e38\u89c1\u7684\u201c\u62df\u5408\u201d\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

    1.\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff1b 2.\u7ebf\u6027\u63d2\u503c(linear interpolation)\uff1b 3.(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\uff1b

    \u63a5\u4e0b\u6765\u6211\u4eec\u4e00\u4e00\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6700\u8fd1\u63d2\u503c","title":"\u6700\u8fd1\u63d2\u503c","text":"

    \u6240\u8c13\u7684\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff0c\u5b9e\u9645\u4e0a\u4e0e KNN \u7684 K=1 \u7684\u7279\u6b8a\u60c5\u51b5\u3002\u5373\uff0c\\(y(x) = y(x_{\\mathop{argmin}(|x-x_i|)})\\)\u3002\u8bf4\u4eba\u8bdd\u5c31\u662f\u6a2a\u5750\u6807\u79bb\u54ea\u4e2a\u8fd1\uff0c\u5c31\u548c\u54ea\u4e2a\u4e00\u6837\u3002

    \u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

    \u89c2\u5bdf\u8fd9\u6761\u84dd\u8272\u66f2\u7ebf\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b83\u5177\u6709\u8fd9\u51e0\u4e2a\u7279\u5f81\uff1a

    \u800c\u4e14\u62cd\u8111\u74dc\u60f3\u60f3\u4e5f\u80fd\u611f\u53d7\u5230\uff0c\u8fd9\u79cd\u63d2\u503c\u7684\u65b9\u6cd5\u5e76\u4e0d\u4f18\u96c5\u2014\u2014\u4e00\u5f20\u56fe\u7247\u653e\u5927\u540e\u4e00\u4e2a\u50cf\u7d20\u7684\u989c\u8272\u53d6\u51b3\u4e8e\u6700\u8fd1\u7684\u91c7\u6837\u50cf\u7d20\u989c\u8272\u2014\u2014\u5728\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e76\u4e0d\u5e0c\u671b\u6709\u8fd9\u6837\u7684\u7ed3\u679c\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7ebf\u6027\u63d2\u503c","title":"\u7ebf\u6027\u63d2\u503c","text":"

    \u7ebf\u6027\u63d2\u503c(linear interpolation)\u5c31\u662f\u76f4\u63a5\u505a\u8fde\u7ebf\uff0c\u5c06\u76f8\u90bb\u7684\u70b9\u4e24\u4e24\u7528\u76f4\u7ebf\u8fde\u8d77\u6765\uff0c\u7ed8\u5236\u51fa\u4e00\u4e2a\u6298\u7ebf\u56fe\u3002

    \u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u76f8\u6bd4\u4e8e\u6700\u8fd1\u63d2\u503c\uff0c\u7ebf\u6027\u63d2\u503c\u5bf9\u539f\u51fd\u6570\u7684\u62df\u5408\u6027\u76f8\u5bf9\u6765\u8bf4\u597d\u4e86\u5f88\u591a\uff0c\u800c\u4e14\u53d8\u5f97\u8fde\u7eed\u4e86\uff0c\u89c2\u5bdf\u84dd\u8272\u66f2\u7ebf\uff0c\u53d1\u73b0\u6709\u8fd9\u4e48\u51e0\u4e2a\u7279\u5f81\uff1a

    \u4e8e\u662f\u6211\u4eec\u7ee7\u7eed\u6539\u8fdb\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

    \u987e\u540d\u601d\u4e49\uff0c(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\u5c31\u662f\u4f7f\u7528\u591a\u9879\u5f0f\u51fd\u6570\u6bb5\u6765\u62df\u5408\u91c7\u6837\u533a\u95f4\u3002

    \u8fd9\u91cc\u9700\u8981\u505a\u4e00\u4e2a\u8fa8\u6790\uff1a\u5e76\u4e0d\u662f\u7528\u4e00\u4e2a\u591a\u9879\u5f0f\u6765\u62df\u5408\u6240\u6709\u7684\u91c7\u6837\u70b9\uff0c\u800c\u662f\u7528\u591a\u9879\u5f0f\u6765\u62df\u5408\u4e00\u5bf9\u91c7\u6837\u70b9\uff0c\u5373\u4e00\u4e2a interval\u3002

    \u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

    \u5176\u4e2d\uff0c\u6bcf\u4e00\u6bb5 interval \u7684\u84dd\u8272\u7ebf\u6761\u90fd\u7b26\u5408 \\(f_i(x) = a_ix^3 + b_ix^2 + c_ix + d_i, x \\in [x_i, x_{i+1}]\\)\uff1b\u5e76\u4e14\u6211\u4eec\u4fdd\u8bc1\u5728\u91c7\u6837\u70b9\u5904\u5b83\u4eec\u90fd\u662f\u5149\u6ed1\u7684\uff0c\u5373\u4fdd\u8bc1 \\(\\forall i, \\frac{\\mathrm{d}f_i(x_{i+1})}{\\mathrm{d} x} = \\frac{\\mathrm{d}f_{i+1}(x_{i+1})}{\\mathrm{d} x}\\)

    \u4e8e\u662f\uff0c\u5b83\u81ea\u7136\u5c31\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

    1. \u8fde\u7eed\uff1b
    2. \u5149\u6ed1\uff1b

    \u66f4\u5177\u4f53\u7684

    \u521a\u624d\u8bb2\u7684\u90fd\u662f\u4ece\u4e00\u7ef4\u51fd\u6570\u7684\u89d2\u5ea6\u6765\u601d\u8003\u63d2\u503c\uff0c\u73b0\u5728\u6211\u4eec\u6765\u4ecb\u7ecd\u4e00\u4e9b\u5728\u4e8c\u7ef4\u5c42\u9762\u505a\u63d2\u503c\u7684\u6848\u4f8b\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc\u7ebf\u6027\u63d2\u503c","title":"\u53cc\u7ebf\u6027\u63d2\u503c","text":"

    \u53cc\u7ebf\u6027\u63d2\u503c(bilinear interpolation)\u5c31\u662f\u5728\u4e8c\u7ef4\u5e73\u9762\u5185\u505a\u7ebf\u6027\u63d2\u503c\uff0c\u601d\u8def\u975e\u5e38\u7b80\u5355\u3002

    \u5982\u56fe\uff0c\u6211\u4eec\u5e0c\u671b\u5728\u7ea2\u70b9\u5904\u8fdb\u884c\u63d2\u503c\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4f1a\u9009\u53d6\u4e0e\u4e4b\u76f8\u90bb\u7684\u56db\u4e2a\u70b9\uff0c\\(u_{ij},\\;\\; i,j\\in \\{0,1\\}\\)\uff0c\u518d\u6839\u636e\u8fd9\u4e2a\u70b9\u5728\u8fd9\u4e2a\u77e9\u9635\u4e2d\u7684\u4f4d\u7f6e\u8fdb\u884c\u6c42\u503c\u3002

    \u5177\u4f53\u8ba1\u7b97\u65b9\u6cd5

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"\u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

    wiki \ud83d\udd17

    \u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(bicubic interpolation)\u5373\u5728\u4e8c\u7ef4\u5e73\u9762\u505a(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c\uff0c\u5b9e\u73b0\u601d\u8def\u4e0e\u53cc\u7ebf\u6027\u63d2\u503c\u662f\u7c7b\u4f3c\u7684\u3002

    \\[ p(x,y) = \\sum_{i=0}^{3}\\sum_{j=0}^{3}a_{i,j}x^iy^j \\]

    What's '4' means here?

    \u8d85\u5206\u8fa8\u7387

    \u5728\u5f97\u5230\u8fd9\u4e9b\u63d2\u503c\u7b56\u7565\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f15\u51fa\u8d85\u5206\u8fa8\u7387(Super-Resolution)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5373\u901a\u8fc7\u63d2\u503c\uff0c\u6211\u4eec\u5c06\u4e00\u5f20\u56fe\u7247\u7684\u5206\u8fa8\u7387\u63d0\u9ad8\uff0c\u5f97\u5230\u8d85\u8fc7\u539f\u6709\u56fe\u7247\u5206\u8fa8\u7387\u7684\u4e00\u5f20\u56fe\u7247\u3002

    \u4f8b\u5982\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u4e2a\u5bf9\u6bd4\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u591a\u9879\u5f0f\u63d2\u503c\u7684\u8868\u73b0\u6bd4\u7ebf\u6027\u63d2\u503c\u7684\u8868\u73b0\u597d\u4e0d\u5c11\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","title":"\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","text":"

    \u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4(aspect ratio)\u8fd9\u4ef6\u4e8b\u8c8c\u4f3c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u5355\u7ef4\u5ea6\u4e0a\u8fdb\u884c\u7f29\u653e\u6765\u5b9e\u73b0\uff08\u8fdb\u884c\u4e00\u7ef4\u63d2\u503cor\u91c7\u6837\uff09\uff0c\u4f46\u662f\u662f\u5426\u5b58\u5728\u522b\u7684\u65b9\u6cd5\uff0c\u4e0d\u5927\u5e45\u6539\u53d8\u6574\u4f53\u56fe\u50cf\u5f62\u72b6\u7684\u60c5\u51b5\u4e0b\uff0c\u5b9e\u73b0\u8be5\u5f7c\u5cb8\u957f\u5bbd\u6bd4\u5462\uff1f

    \u5b9e\u9645\u4e0a\uff0c\u6709\u4e00\u4e2a\u505a\u6cd5\u5c31\u662f\u5077\u5077\u5220\u6389\u51e0\u884c/\u51e0\u5217\u50cf\u7d20\uff0c\u5bf9\u4eba\u773c\u6765\u8bf4\u8fd9\u8c8c\u4f3c\u662f\u96be\u4ee5\u5bdf\u89c9\u7684\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u505a\u4e00\u4e9b\u6539\u8fdb\uff0c\u6211\u4eec\u8fd9\u6b21\u4e0d\u662f\u66b4\u529b\u7684\u5220\u9664\u4e00\u884c\u6216\u4e00\u5217\uff0c\u800c\u662f\u6709\u9009\u62e9\u6027\u7684\uff0c\u5728\u6bcf\u4e00\u884c\u91cc\u5220\u9664\u51e0\u4e2a\u50cf\u7d20\u3002\u4e3a\u4e86\u4fdd\u8bc1\u56fe\u50cf\u4e0d\u9519\u4f4d\uff0c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e9b\u9009\u4e2d\u7684\u50cf\u7d20\u53ef\u4ee5\u88ab\u770b\u4f5c\u56fe\u50cf\u4e0a\u7684\u201c\u88c2\u7f1d\u201d\uff0c\u5373\u4e00\u6761\u5f2f\u5f2f\u66f2\u66f2\u7684\u66f2\u7ebf\u3002

    \u8fd9\u79cd\u505a\u6cd5\u53ebseam carving\uff0c\u6211\u4eec\u9700\u8981\u627e\u5230\u6bd4\u8f83\u4e0d\u91cd\u8981\u7684\u4e00\u8fde\u4e32\u8fde\u7eed\u50cf\u7d20\u3002\u800c\u8fd9\u91cc\u7684\u201c\u4e0d\u91cd\u8981\u201d\uff0c\u6307\u7684\u5c31\u662f\u90a3\u4e9b\u53d8\u5316\u4e0d\u90a3\u4e48\u5267\u70c8\u7684\u50cf\u7d20\uff0c\u5373\u4e0e\u5468\u56f4\u5341\u5206\u76f8\u8fd1\u7684\u70b9\u3002

    \u66f4\u6570\u5b66\u7684\u8868\u8ff0\u662f\uff1a

    \u800c\u81f3\u4e8e\u5bfb\u627e\u6700\u77ed\u8def\u7684\u7b97\u6cd5\uff0c\u5219\u662f\u4e2a dp \u95ee\u9898\uff0c\u5728\u8fd9\u91cc\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/","title":"Lecture 4 | Model Fitting and Optimization","text":"

    \u7ea6 4135 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4f18\u5316","title":"\u4f18\u5316","text":"

    \u9996\u5148\u6211\u4eec\u6765\u5b9a\u4e49\u4e00\u4e2a\u4f18\u5316(Optimization)\u95ee\u9898\u7684\u6a21\u578b\uff1a

    \u4f18\u5316\u95ee\u9898\u7684\u6a21\u578b

    \u8bbe\u76ee\u6807\u51fd\u6570\\(f_0(\\vec x)\\) \u6ee1\u8db3\u7ea6\u675f\u6761\u4ef6\uff1a

    \\[ \\left\\{ \\begin{aligned} f_i(\\vec x) &\\leq 0, &i = 1,...,m & \\text{inequality constraint functions} \\\\ g_i(\\vec x) &= 0, &i = 1,...,p & \\text{equality constraint functions}& \\end{aligned} \\right. \\]

    \u6c42 \\(\\vec x\\in \\mathrm{R}^n\\) \uff0c\u4f7f \\(f_0(\\vec{x})\\) \u6700\u5c0f\uff08\u5373\u6700\u4f18\uff09\u3002

    \u5f88\u663e\u7136\uff0c\u8fd9\u548c\u6211\u4eec\u9ad8\u4e2d\u63a5\u89e6\u7684\u7ebf\u6027\u89c4\u5212\u5f88\u50cf\uff0c\u5b9e\u9645\u4e0a\u7ebf\u6027\u89c4\u5212\u5c31\u662f\u5176\u4e2d\u4e00\u79cd\u4f18\u5316\u95ee\u9898\u3002

    \u800c\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u590d\u6742\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5373\u6839\u636e\u95ee\u9898\uff0c\u5199\u51fa\u76ee\u6807\u51fd\u6570\u548c\u7ea6\u675f\u6761\u4ef6\uff0c\u5e76\u901a\u8fc7\u4e00\u4e9b\u65b9\u6cd5\u6765\u5f97\u5230\u6211\u4eec\u9700\u8981\u7684 \\(\\vec x\\)\u3002

    \ud83c\udf30 \u56fe\u50cf\u53bb\u6a21\u7cca\u95ee\u9898

    \u5728\u8fd9\u4e2a \ud83c\udf30 \u4e2d\uff0c\u6211\u4eec\u5df2\u77e5\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u548c\u6a21\u7cca\u6ee4\u6ce2\u5668(\u5377\u79ef\u6838) \\(F\\)\uff0c\u9700\u8981\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u6765\u6c42\u5377\u79ef\u8fd0\u7b97\u4e4b\u524d\u7684\u6e05\u6670\u56fe\u50cf \\(X\\)\u3002

    \u8fdb\u4e00\u6b65\u6765\u8bf4\uff0c\u5c31\u662f\u627e\u5230\u6e05\u6670\u7684\u56fe\u50cf \\(X\\)\uff0c\u4f7f\u5f97\u5b83\u505a\u6a21\u7cca\u5904\u7406\u540e\u4e0e\u5df2\u77e5\u7684\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u5dee\u522b\u5c3d\u53ef\u80fd\u5c0f\uff0c\u4e8e\u662f\u95ee\u9898\u8f6c\u5316\u4e3a\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6a21\u578b\u62df\u5408","title":"\u6a21\u578b\u62df\u5408","text":"

    \u4e3a\u4e86\u7814\u7a76\u5206\u6790\u5b9e\u9645\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u4e00\u4e2a\u5efa\u6a21\uff0c\u66f4\u5177\u4f53\u7684\u6765\u8bf4\u5c31\u662f\u6839\u636e\u5b9e\u9645\u60c5\u51b5\uff0c\u5bfb\u627e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5e76\u5efa\u7acb\u6570\u5b66\u6a21\u578b\u3002

    \u4e00\u4e2a\u6570\u5b66\u6a21\u578b(model)\u63cf\u8ff0\u95ee\u9898\u4e2d\u8f93\u5165\u548c\u8f93\u51fa\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a\u7ebf\u6027\u6a21\u578b(linear model) \\(b = a^T x\\) \u5c31\u63cf\u8ff0\u4e86\u8f93\u5165(input) \\(a\\) \u548c\u8f93\u51fa(output) \\(b\\) \u5173\u4e8e\u6a21\u578b\u53c2\u6570(model parameter) \\(x\\) \u7684\u5173\u7cfb\u3002

    \u800c\u5b9e\u9645\u7684\u7ed3\u679c\u5f88\u96be\u4e25\u683c\u6ee1\u8db3\u6570\u5b66\u6a21\u578b\uff0c\u8fd9\u662f\u7531\u591a\u65b9\u539f\u56e0\u5bfc\u81f4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5f80\u5f80\u505a\u7684\u662f\u5bf9\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u6a21\u578b\u62df\u5408(model fitting)\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u6709\u4e00\u4e2a\u5148\u9a8c\u7684\u5047\u8bbe\uff0c\u5373\u6570\u636e\u7b26\u5408\u54ea\u79cd\u6a21\u578b\uff0c\u63a5\u4e0b\u6765\u6839\u636e\u6570\u636e\u6765\u5206\u6790\u5f97\u5230\u5408\u9002\u7684 model parameters\uff0c\u800c\u8fd9\u4e2a\u6b65\u9aa4\u4e5f\u5e38\u5e38\u88ab\u79f0\u4e3a learning\u3002

    \u4e00\u79cd\u6bd4\u8f83\u7ecf\u5178\u7684\u903c\u8fd1\u65b9\u6cd5\uff08\u6700\u5c0f\u4e8c\u4e58\u6cd5\uff09\u662f\u6c42\u4f7f\u5747\u65b9\u8bef\u5dee(mean square error, MSE)\u6700\u5c0f\u7684 model parameters\uff1a

    \\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\)

    \u800c\u5982\u679c\u6211\u4eec\u5047\u8bbe\u6570\u636e\u4e2d\u7684\u566a\u58f0\u662f\u9ad8\u65af\u5206\u5e03\u7684\uff08\u5b9e\u9645\u4e0a\u5927\u90e8\u5206\u566a\u58f0\u5728\u57fa\u6570\u8db3\u591f\u5927\u7684\u60c5\u51b5\u4e0b\u90fd\u53ef\u4ee5\u770b\u4f5c\u4e3a\u9ad8\u65af\u5206\u5e03\u7684\uff09\uff0c\u90a3\u4e48\u53ef\u4ee5\u4e0e\u7edf\u8ba1\u5b66\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1(maximum likelihood estimation, MLE)\u76f8\u7edf\u4e00.

    MSE vs. MLE

    MSE vs MLE for linear regression

    \u5177\u4f53\u6765\u8bf4\uff0c\\(b_i = a_i^T x + n, \\;\\; n \\sim G(0,\\sigma)\\)\uff0c\u800c\u5bf9\u4e8e\u7ed9\u5b9a\u7684 \\(x\\)\uff0c\u5176\u4f3c\u7136(likehood)\\(P[(a_i,b_i)|x] = P[b_i-a_i^Tx] \\propto \\exp \\left( - \\frac{(b_i-a_i^Tx)^2}{2\\sigma^2} \\right)\\)\uff0c\u8868\u793a\u5728 model parameter \u4e3a \\(x\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u6570\u636e\u7b26\u5408 \\((a_i,b_i)\\) \u7684\u53ef\u80fd\u6027\u3002

    Maximum Likelihood Estimation

    If the data points are independent,

    \\[ \\begin{aligned} P[(a_1, b_1)(a_2, b_2)\\dots|x] & = \\prod\\limits_iP[(a_i, b_i)|x] = \\prod\\limits_i P[b_i - a_i^T x] \\\\ & \\propto \\exp\\left(-\\frac{\\sum_i(b_i - a_i^Tx)^2}{2\\sigma^2}\\right) = \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) \\end{aligned} \\]

    That is, maximize the likelihood to find the best \\(x\\).

    \\[ \\begin{aligned} \\hat x &= \\mathop{\\arg \\max\\limits_x} P[(a_1, b_1)(a_2, b_2)\\dots|x] \\\\ &= \\mathop{\\arg \\max\\limits_x} \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) = \\mathop{\\arg \\min\\limits_x}||Ax - b||_2^2 \\end{aligned} \\]

    MSE = MLE with Gaussian noise assumption

    \u9700\u8981\u8865\u6570\u5b66\u77e5\u8bc6\uff0c\u5b8c\u5584\u8fd9\u90e8\u5206\u5185\u5bb9

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6570\u503c\u65b9\u6cd5","title":"\u6570\u503c\u65b9\u6cd5","text":"

    \u4e0a\u4e00\u5c0f\u8282\u4ecb\u7ecd\u4e86\u5982\u4f55\u5bf9\u5b9e\u9645\u95ee\u9898\u8fdb\u884c\u6570\u5b66\u5efa\u6a21\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u4ecb\u7ecd\u7684\u662f\u5982\u4f55\u6c42\u89e3\u6570\u5b66\u6a21\u578b\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u7b80\u5355\u7684\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3(analytical solution)\uff0c\u6bd4\u5982\u4f7f\u7528\u6c42\u5bfc\u7b49\u65b9\u6cd5\u3002

    \ud83c\udf30

    \u4ee5\u521a\u624d\u7684\u7ebf\u6027 MSE \u4e3a\u4f8b\uff0c\\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\) \u7b49\u6548\u4e8e\u6c42\u89e3\u7b49\u5f0f \\(A^TAx=A^Tb\\)\u3002

    \u7136\u800c\uff0c\u5b9e\u9645\u60c5\u51b5\u662f\u5927\u90e8\u5206\u95ee\u9898\u8fc7\u4e8e\u590d\u6742\uff0c\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u91c7\u7528\u4e00\u4e9b\u5373\u91c7\u7528\u4e00\u4e9b\u6570\u503c\u65b9\u6cd5(numerical methods)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u68af\u5ea6\u4e0b\u964d","title":"\u68af\u5ea6\u4e0b\u964d","text":"

    \u7531\u4e8e\u76f8\u5173\u9886\u57df\u7684\u201c\u51fd\u6570\u201d\u7b49\u57fa\u672c\u4e0a\u90fd\u662f\u9ad8\u7ef4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4e00\u822c\u4f7f\u7528\u4e8c\u7ef4\u51fd\u6570\u56fe\u50cf\u7684\u65b9\u6cd5\u6765\u5f62\u8c61\u8868\u793a\u51fd\u6570\uff0c\u5373\u4f7f\u7528\u201c\u7b49\u9ad8\u7ebf\u201d\u7684\u5f62\u5f0f\u6765\u53ef\u89c6\u5316\u51fd\u6570\u3002

    \u867d\u7136\u6ca1\u6cd5\u76f4\u63a5\u6c42\u89e3\u6790\u89e3\uff0c\u4f46\u662f\u4e00\u822c\u51fd\u6570\u90fd\u5177\u6709\u4e00\u4e9b\u5c40\u90e8\u6027\u8d28\uff0c\u4f8b\u5982\u6781\u503c\u70b9\u4e34\u57df\u7684\u68af\u5ea6\u90fd\u6307\u5411\u6781\u503c\u70b9\u3002\u6a21\u7cca\u5730\u6765\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u968f\u7740\u201c\u68af\u5ea6\u201d\u53bb\u201c\u4e0b\u964d\u201d\uff0c\u5c31\u6709\u53ef\u80fd\u627e\u5230\u6781\u503c\u70b9\uff0c\u8fd9\u5c31\u662f\u901a\u8fc7\u68af\u5ea6\u4e0b\u964d(gradient descent)\u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u4f18\u5316\u95ee\u9898\u3002

    \u7b80\u5355\u63cf\u8ff0\u68af\u5ea6\u4e0b\u964d\u7684\u8fc7\u7a0b\uff1a

    1. \u521d\u59cb\u5316\u8d77\u70b9\u5750\u6807 x\uff1b
    2. \u76f4\u5230 x \u6536\u655b\u5230\u6211\u4eec\u6ee1\u610f\u7684\u7a0b\u5ea6\u4e4b\u524d\uff1a
      1. \u8ba1\u7b97\u4e0b\u964d\u65b9\u5411 p\uff1b
      2. \u51b3\u5b9a\u4e0b\u964d\u6b65\u957f \u237a\uff1b
      3. \u66f4\u65b0 x = x + \u237ap\uff1b

    Sourece: https://commons.wikimedia.org/w/index.php?curid=2283984

    \u5176\u4e2d\u6709\u4e09\u4ef6\u4e8b\u9700\u8981\u7279\u6b8a\u8bf4\u660e\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","title":"\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","text":"

    \u5bf9\u4e8e\u6211\u4eec\u4ee5\u524d\u63a5\u89e6\u8fc7\u7684\u51fd\u6570\uff0c\u5373\u5f62\u5f0f\u76f8\u5bf9\u7b80\u5355\u7684\u51fd\u6570\uff0c\u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u68af\u5ea6\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u3002\u7136\u800c\u5b9e\u9645\u95ee\u9898\u4e2d\u7684\u51fd\u6570\u53ef\u80fd\u975e\u5e38\u590d\u6742\uff0c\u6216\u68af\u5ea6\u89e3\u6790\u5f0f\u5f88\u96be\u5f97\u5230\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u5c31\u53ea\u80fd\u9000\u800c\u6c42\u5176\u6b21\uff0c\u6c42\u5176\u201c\u8fd1\u4f3c\u201d\u68af\u5ea6\u65b9\u5411\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u627e\u5230\u4e00\u4e2a\u548c\u539f\u51fd\u6570\u5728\u5c40\u90e8\u548c\u8be5\u51fd\u6570\u5f88\u50cf\u7684\u62df\u5408\u51fd\u6570\uff0c\u5e76\u4e14\u7528\u8fd9\u4e2a\u62df\u5408\u51fd\u6570\u7684\u68af\u5ea6\u65b9\u5411\u6765\u51b3\u5b9a\u68af\u5ea6\u4e0b\u964d\u7684\u65b9\u5411\u3002

    \u4e8e\u662f\u6211\u4eec\u60f3\u5230\u6cf0\u52d2\u5c55\u5f00\uff0c\u5b83\u5c06\u51fd\u6570\u5c55\u5f00\u4e3a\u591a\u9879\u5f0f\uff0c\u800c\u591a\u9879\u5f0f\u7684\u68af\u5ea6\u662f\u76f8\u5bf9\u5bb9\u6613\u5f97\u5230\u7684\u3002

    \u5176\u4e2d\u6bd4\u8f83\u5e38\u7528\u7684\u662f\uff1a

    \u5176\u4e2d \\(J_F\\) \u662f\u96c5\u5404\u6bd4\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u7ef4\u5411\u91cf\u51fd\u6570\u7684\u5bfc\u6570\uff1b\\(H_F\\) \u662f\u6d77\u68ee\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u4f4d\u5411\u91cf\u51fd\u6570\u7684\u4e8c\u9636\u5bfc\u6570\u3002

    \u63a5\u4e0b\u6765\u4ee5 first-order approximation \u4e3a\u4f8b\u7ee7\u7eed\u5206\u6790\u3002

    \u89c2\u5bdf \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F \\Delta x\\)\uff0c\u53d1\u73b0\u5f53 \\(J_F\\Delta x < 0\\) \u65f6\uff0c \\(F(x_0 + \\Delta x)\\) \u5927\u6982\u7387\u6bd4 \\(F(x_0)\\) \u5c0f\uff0c\u5373\u201c\u4e0b\u964d\u201d\uff0c\u6240\u4ee5\u5728 first-order approximation \u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u9009\u62e9\u65b9\u5411 \\(\\vec p = -J_F^T\\)\uff0c\u4e8e\u662f\u4f4d\u79fb\u91cf \\(movement = -J_F \\cdot J_F^T \\cdot step\\)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","title":"\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","text":"

    \u5373\u4f7f\u4f46\u4ece\u4e0b\u964d\u901f\u7387\u6765\u8003\u8651\uff0c\u6b65\u957f\u592a\u957f\u6216\u592a\u5c0f\u4e5f\u90fd\u6709\u660e\u663e\u7684\u95ee\u9898\uff1a

    \u6240\u4ee5\u6b65\u957f\u7684\u9009\u62e9\u5bf9\u4e0b\u964d\u901f\u7387\u7684\u5341\u5206\u5173\u952e\u3002

    \u4e3a\u4e86\u4e13\u6ce8\u4e8e\u6b65\u957f\u7684\u9009\u62e9\uff0c\u6211\u4eec\u8bb0 \\(\\phi(\\alpha) = F(x+\\alpha h),\\;\\;\\text{where x and h fixed}, x\\geq 0\\)\u3002\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u627e\u5230\u4e00\u4e2a\u80fd\u8ba9 \\(\\phi(\\alpha)\\) \u5c3d\u53ef\u80fd\u5c0f\u4e8e \\(\\phi(0)\\) \u7684 \\(\\alpha\\)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd Backtracking Algorithm\uff1a

    1. \u521d\u59cb\u5316 \\(\\alpha\\) \u4e3a\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u503c\uff1b
    2. \u4e0d\u65ad\u51cf\u5c0f \\(\\alpha\\) \u76f4\u5230 \\(\\phi(\\alpha) \\leq \\phi(0) + \\gamma\\phi'(0)\\alpha\\)\uff1b
      • \u5176\u4e2d \\(\\gamma\\in(0,1)\\) \u662f\u4e00\u4e2a\u56fa\u5b9a\u7684\u53c2\u6570\uff1b

    \u6362\u53e5\u8bdd\u8bf4\u5c31\u662f\uff0c\u7b26\u5408\u9884\u671f\u7684\u6700\u5927\u6b65\u957f\uff0c\u8fd9\u4e2a\u201c\u9884\u671f\u201d\uff0c\u5c31\u662f\u901a\u8fc7 \\(\\gamma\\) \u4f53\u73b0\u7684\u3002\u56fe\u4e2d\u7ea2\u8272\u865a\u7ebf\u548c\u9ed1\u8272\u7ec6\u7ebf\u5206\u522b\u662f \\(\\gamma\\) \u53d6\u8fb9\u754c\u503c\u65f6\u7684\u60c5\u51b5\uff0c\u800c\u7ea2\u8272\u5b9e\u7ebf\u5219\u8868\u793a\u6211\u4eec\u7684\u9884\u671f\u968f \\(\\alpha\\) \u7684\u53d8\u5316\u3002

    \u4e0a\u9762\u4f7f\u7528 first-order approximation \u4e3a\u4f8b\u4ecb\u7ecd\u7684\u8fd9\u5957\u65b9\u6cd5\u5c31\u662f\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5(steepest descent method)\u3002

    \u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5

    \\(\\vec p = -J_F^T\\)\uff1b

    \u8fd9\u662f\u56e0\u4e3a\uff0c\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u4e3b\u8981\u91c7\u7528\u7684\u662f first-order approximation\uff0c\u6ca1\u6709\u4f53\u73b0\u66f2\u7387\u7279\u5f81\u3002

    \u56e0\u800c\u4e00\u79cd\u5f88\u81ea\u7136\u7684\u6539\u8fdb\u65b9\u6cd5\u5c31\u662f\u4f7f\u7528 second-order approximation\uff0c\u5373\u725b\u987f\u6cd5(Newton Method)\u3002

    \u725b\u987f\u6cd5

    \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F\\Delta x + \\frac{1}{2}\\Delta x^T H_F \\Delta x\\)

    \u5bf9\u5b83\u6c42\u5bfc\u5f97\u5230 \\(\\frac{\\partial F}{\\partial \\Delta x} = J_F^T+H_F\\Delta x = 0\\)\u3002

    \u6240\u4ee5\u5f97\u5230\u65b9\u5411\u4e3a \\(\\vec p = \\Delta x = -H_F^{-1}J_F^T\\)

    \u7531\u6b64\u53d1\u73b0\uff0c\u725b\u987f\u6cd5\u7684\u8868\u73b0\u4f1a\u597d\u5f88\u591a\uff0c\u5982\u679c\u80fd\u591f\u907f\u514d\u8ba1\u7b97\u9ed1\u585e\u77e9\u9635\uff0c\u5c31\u53ef\u4ee5\u8fdb\u4e00\u6b65\u63d0\u9ad8\u725b\u987f\u6cd5\u7684\u6548\u679c\uff0c\u4e8e\u662f\u5c31\u51fa\u73b0\u4e86\u9ad8\u65af\u725b\u987f\u6cd5(Gauss-Newton method)\u3002

    \u9ad8\u65af\u725b\u987f\u6cd5

    \u5bf9\u4e8e\u89e3\u51b3\u6700\u5c0f\u4e8c\u4e58\u6cd5 \\(\\hat x = \\mathop{\\arg \\min\\limits_x} ||R(x)||^2_2\\) \u7684\u95ee\u9898\u8868\u73b0\u975e\u5e38\u597d\u3002

    \u5bf9\u4e8e\u8fd9\u7c7b\u95ee\u9898\uff0c\u9ad8\u65af\u725b\u987f\u6cd5\u4f7f\u7528 \\(J_R^TJ_R\\) \u6765\u8fd1\u4f3c\u4ee3\u66ff \\(H_F\\)\uff0c\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u4e3a \\(\\vec p = -(J_R^TJ_R)^{-1}J_R^T,\\;\\;\\text{where }J_R\\text{ is the Jacobian of }R(x)\\)\u3002

    Levenberg-Marquardt

    Wiki: \ud83d\udd17

    \\[ \\Delta x = -(J_R^TJ_R+\\lambda I)^{-1}J_R^TR(x_k) \\]

    \u7b80\u5355\u6765\u8bf4\uff0cLM \u5c31\u662f\u7efc\u5408\u4e86\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u548c\u725b\u987f\u6cd5\u7684\u4f18\u70b9\uff0c\u5728\u8fdc\u79bb\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\uff0c\u4fdd\u8bc1\u542f\u52a8\u901f\u5ea6\u5feb\uff1b\u5728\u9760\u8fd1\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u725b\u987f\u6cd5\uff0c\u4fdd\u8bc1\u6536\u655b\u901f\u5ea6\u8db3\u591f\u5feb\uff1b\u5e76\u4e14\u4fdd\u8bc1 \\(J_R^TJ_R+\\lambda I\\) \u6b63\u5b9a\uff0c\u6240\u4ee5\u59cb\u7ec8\u80fd\u591f\u4f7f\u725b\u987f\u6cd5\u6210\u7acb\u3002

    \u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898

    \u5bf9\u4e8e\u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898(constrained optimization)\uff0c\u5219\u9700\u8981\u6839\u636e\u5b9e\u9645\u95ee\u9898\u6c42\u89e3\u3002

    \u63a8\u8350\u540c\u540d\u8bfb\u7269\uff1ahttps://web.stanford.edu/class/ee364a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","title":"\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","text":"

    \u5206\u591a\u4e2a batch \u6765\u5904\u7406\uff0c\u5927\u91cf\u6492\u70b9\uff0c\u7136\u540e\u6bd4\u8f83\u6bcf\u4e00\u4e2a batch \u7684\u7ed3\u679c\uff0c\u6700\u7ec8\u53d6\u6700\u597d\u7684\u4e00\u4e2a\u5373\u53ef\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9c81\u68d2\u4f30\u8ba1","title":"\u9c81\u68d2\u4f30\u8ba1","text":"

    \u9c81\u68d2\u4f30\u8ba1(robust estimation)\u662f\u5bf9\u4ece\u5404\u79cd\u6982\u7387\u5206\u5e03\uff08\u5c24\u5176\u662f\u975e\u6b63\u6001\u5206\u5e03\uff09\u4e2d\u63d0\u53d6\u7684\u6570\u636e\u5177\u6709\u826f\u597d\u6027\u80fd\u7684\u7edf\u8ba1\u3002

    \u5728\u62df\u5408\u6a21\u578b\u4e2d\uff0c\u96be\u514d\u51fa\u73b0\u4e00\u4e9b\u4e0d\u7b26\u5408\u9884\u671f\u7684\u70b9\uff0c\u800c\u5b83\u4eec\u4f1a\u5bf9\u62df\u5408\u7ed3\u679c\u4ea7\u751f\u6216\u591a\u6216\u5c0f\u7684\u5f71\u54cd\uff0c\u800c\u5982\u4f55\u6743\u8861\u8fd9\u4e9b\u566a\u58f0\u4e0e\u771f\u6b63\u6709\u7528\u7684\u6570\u636e\u70b9\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u9c81\u68d2\u4f30\u8ba1\u7684\u8bfe\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5185\u70b9--\u5916\u70b9","title":"\u5185\u70b9 & \u5916\u70b9","text":"

    \u9996\u5148\u6211\u4eec\u5bf9\u6570\u636e\u70b9\u8fdb\u884c\u5206\u7c7b\uff1a

    \u5916\u70b9\u7684\u5f71\u54cd

    \u7531\u4e8e\u5916\u70b9\u504f\u79bb\u5f88\u5927\uff0c\u800c\u6700\u5c0f\u4e8c\u4e58\u6cd5\u4e2d\u5b58\u5728\u5e73\u65b9\u64cd\u4f5c\uff0c\u6240\u4ee5\u6700\u5c0f\u4e8c\u4e58\u6cd5\u62df\u5408\u53d7\u8fd9\u4e9b\u5916\u70b9\u5f71\u54cd\u5f88\u5927\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","title":"\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","text":"

    \u4e8e\u662f\u6211\u4eec\u8003\u8651\uff0c\u53ef\u4ee5\u66f4\u6362\u62df\u5408\u7684\u635f\u5931\u51fd\u6570\uff0c\u6765\u51cf\u5c0f\u5927\u504f\u5dee\u70b9\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6bd4\u5982\u4f7f\u7528 L1 loss(\u5373\u6c42\u7edd\u5bf9\u503c)\u3002\u4e0d\u8fc7\u66f4\u597d\u7684\u662f\u4e00\u79cd\u9009\u62e9\u53eb huber loss\uff0c\u5b83\u5728\u8ddd\u79bb\u8fdc\u70b9\u8f83\u8fdc\u7684\u65f6\u5019\u6bd4\u8f83\u63a5\u8fd1 L1 loss\u3002

    L1 & L2 & Huber

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u968f\u673a\u62bd\u6837\u4e00\u81f4","title":"\u968f\u673a\u62bd\u6837\u4e00\u81f4","text":"

    \u968f\u673a\u62bd\u6837\u4e00\u81f4(random sample consensus, RANSAC)\u91c7\u7528\u8fed\u4ee3\u7684\u65b9\u5f0f\u4ece\u5305\u542b\u5916\u70b9\u7684\u6570\u636e\u4e2d\u4f30\u8ba1\u6570\u5b66\u6a21\u578b\u53c2\u6570\uff0c\u662f\u4e00\u4e2a\u5bf9\u4e8e\u5b58\u5728\u660e\u663e\u5916\u70b9\u7684\u6570\u636e\u975e\u5e38\u6709\u6548\u7684\u65b9\u6cd5\u3002

    RANSAC procedure

    1. \u9996\u5148\u968f\u673a\u627e\u4e24\u4e2a\u70b9\u62df\u5408\u4e00\u6761\u76f4\u7ebf\uff0c\u7136\u540e\u68c0\u67e5\u6709\u591a\u5c11\u70b9\u7b26\u5408\u8fd9\u6761\u76f4\u7ebf\uff0c\u5e76\u5bf9\u5176\u8fdb\u884c vote\uff1b
    2. \u91cd\u590d\u8fd9\u4e2a\u6b65\u9aa4\uff0c\u6700\u540e\u9009\u62e9\u7968\u6570\u6700\u9ad8\u7684\u62df\u5408\uff1b

    \u7531 outlier \u62df\u5408\u51fa\u6765\u7684\u76f4\u7ebf\u4e00\u822c votes \u6bd4\u8f83\u5c11\uff0c\u56e0\u4e3a outlier \u4e4b\u95f4\u5f88\u96be\u4e00\u81f4\uff1b\u4f46\u662finlier\u4e4b\u95f4\u5bb9\u6613\u4e00\u81f4\uff0c\u56e0\u800c\u5f97\u5206\u5f80\u5f80\u66f4\u9ad8\uff0c\u4e8e\u662f\u5c06\u5b83\u4eec\u533a\u5206\u5f00\u6765\u3002\u8fd9\u4e0d\u5c31\u662f Voting Tree (\u9003

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u75c5\u6001\u95ee\u9898","title":"\u75c5\u6001\u95ee\u9898","text":"

    \u5982\u679c\u4e00\u4e2a\u95ee\u9898\u7684\u89e3\u4e0d\u552f\u4e00\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898(ill-posed problem)\u3002\u7279\u522b\u7684\uff0c\u5728\u7ebf\u6027\u95ee\u9898\u4e2d\uff0c\u4e00\u4e2a\u7ebf\u6027\u65b9\u7a0b\uff08\u7ec4\uff09\u7684\u89e3\u5982\u679c\u4e0d\u552f\u4e00\uff08\u4e0d\u6ee1\u79e9\uff09\uff0c\u5219\u540c\u6837\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898\u3002

    \u5f53\u7136\uff0c\u5bf9\u4e8e\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u6839\u636e\u7ebf\u6027\u4ee3\u6570\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u53ef\u4ee5\u589e\u52a0\u65b9\u7a0b\uff0c\u5373\u589e\u52a0\u7ea6\u675f\u3002\u800c\u8fd9\u79cd\u7ea6\u675f\u4e00\u822c\u6765\u81ea\u4e8e\u5bf9\u53d8\u91cf\u7684\u5148\u9a8c\u7ea6\u675f\uff0c\u6bd4\u5982\uff1a

    L2 regularization

    L2 norm: \\(||x||_2 = \\sum_i x_i^2\\);

    L2 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_2 \\leq 1\\);

    \u901a\u8fc7\u8ba9\u9009\u62e9\u7684\u89e3\u5c3d\u53ef\u80fd\u63a5\u8fd1\u539f\u70b9\uff0c\u800c\u8ba9\u6211\u4eec\u6ca1\u6709\u7528\u7684\u89e3\u7684\u7ef4\u5ea6\u5c3d\u53ef\u80fd\u63a5\u8fd1 0\uff0c\u4ee5\u51cf\u5c0f\u6ca1\u7528\u7684\u53d8\u91cf\u7684\u5f71\u54cd\uff0c\u6291\u5236\u5197\u4f59\u53d8\u91cf\u3002

    L1 regularization

    L1 norm: \\(||x||_1=\\sum_i|x_i|\\);

    L1 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_1 \\leq 1\\)

    L1 \u53ef\u89c6\u5316\u4e2d\u53ef\u4ee5\u53d1\u73b0\uff0c\u5750\u6807\u8f74\u4e0a\u6bd4\u8f83\u5bb9\u6613\u6293\u4f4f\u89e3\uff0c\u6b64\u65f6\u610f\u5473\u7740\u6709\u4e9b\u53d8\u91cf(\u7ef4\u5ea6)\u662f 0\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u80fd\u8ba9\u89e3\u53d8\u5f97\u201c\u7a00\u758f(sparse)\u201d\uff0c\u5373\u5728\u7ef4\u5ea6\u4e0a\u7684\u5206\u5e03\u53ea\u6bd4\u8f83\u96c6\u4e2d\u4e8e\u4e2a\u522b\u9879\u3002

    \u4e0d\u8fc7\uff0c\u5c06\u4ed6\u4eec\u4f5c\u4e3a\u7ea6\u675f\u6761\u4ef6\u53c2\u4e0e\u6c42\u89e3\uff0c\u4e0d\u5982\u76f4\u63a5\u52a0\u8fdb\u53bb\u4f5c\u4e3a\u4e00\u4e2a\u9879\uff0c\u5176\u6548\u679c\u662f\u7b49\u4ef7\u7684\uff1a

    \\[ \\begin{matrix} \\text{L2 regularization:} & | & \\text{or L1 regularization:}\\\\ \\min_{x}||Ax-b||^2_2+\\lambda ||x||_2^2 & | & \\min_{x}||Ax-b||^2_2+\\lambda ||x||_1\\\\ s.t. ||x||_2 \\leq 1 & | & s.t. ||x||_1 \\leq 1 \\\\ \\end{matrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","title":"\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","text":"

    \u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u4e5f\u8981\u5c0f\u5fc3\u8fc7\u62df\u5408(overfitting)\u548c\u6b20\u62df\u5408(underfitting)\uff0c\u5b83\u4eec\u7684\u542b\u4e49\u975e\u5e38\u76f4\u767d\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u63d2\u503c","title":"\u63d2\u503c","text":"

    \u63d2\u503c(interpolation)\u5176\u5b9e\u5df2\u7ecf\u5728 lec 3 \u7684\u7b14\u8bb0 \u91cc\u63d0\u5230\u8fc7\u4e86\u3002

    \u8fd9\u91cc\u5148\u7565\u8fc7\u3002

    sketch

    \u7ebf\u6027\u62df\u5408\u3001\u4e8c\u6b21\u6837\u6761\u63d2\u503c\uff08\u6bcf\u4e00\u6bb5\u90fd\u662f\u4e00\u4e2a\u4e8c\u6b21\u51fd\u6570\uff09\u3001\u4e09\u6b21\u6837\u6761\u63d2\u503c\uff08\u4e00\u9636\u5bfc\u4e8c\u9636\u5bfc\u8fde\u7eed\uff0c\u4f46\u6700\u7ec8\u662f\u4e2a\u75c5\u6001\u95ee\u9898\uff0c\u9700\u8981\u989d\u5916\u518d\u7ea6\u675f\u8d77\u70b9\u548c\u7ec8\u70b9\u4e8c\u9636\u5bfc\u4e3a\u96f6\u6216\u8005\u9650\u5b9a\u7ed9\u5b9a\u659c\u7387\u7b49\uff0c\u5c31\u9700\u8981\u4fe9\u989d\u5916\u7ea6\u675f\u6761\u4ef6\uff09\u3001

    \u4e0a\u9762\u662f\u8fde\u7eed\u4f18\u5316\u95ee\u9898\uff0c\u4e0b\u9762\u662f\u79bb\u6563\u4f18\u5316\u95ee\u9898

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272--\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u56fe\u5272 & \u9a6c\u53ef\u592b\u968f\u673a\u573a","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","title":"\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","text":"

    \u56fe\u50cf\u6807\u7b7e\u95ee\u9898(image labeling problems)\u5373\u901a\u8fc7\u56fe\u7247\u4fe1\u606f\u7ed9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u5206\u914d\u6807\u7b7e\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u5206\u7c7b\u548c\u8bc6\u522b\u95ee\u9898\u3002

    \u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5f3a\u7684\u5148\u9a8c(prior)\u662f\uff1a\u76f8\u90bb\u4e14\u76f8\u4f3c\u7684\u50cf\u7d20\u5e94\u5f53\u62e5\u6709\u76f8\u540c\u7684\u6807\u7b7e\u3002

    \u800c\u56fe\u5272\u548c\u9a6c\u53ef\u592b\u968f\u673a\u573a\u53ef\u4ee5\u5efa\u6a21\u8fd9\u79cd\u5148\u9a8c\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272","title":"\u56fe\u5272","text":"

    \u56fe\u5272(Graphcut)\u7684\u6838\u5fc3\u601d\u60f3\u662f\uff0c\u628a\u4e00\u5f20\u56fe\u7247\u7684\u6bcf\u4e00\u4e2a\u50cf\u7d20\u770b\u4f5c\u4e00\u4e2a graph \u4e2d\u7684 vertex\uff0c\u5e76\u5728\u50cf\u7d20\u4e4b\u95f4\u5efa edge\uff0c\u5e76\u5c06 weight \u5b9a\u4e49\u4e3a\u4e24\u50cf\u7d20\u4e4b\u95f4\u7684\u76f8\u4f3c\u6027\u6216\u5173\u8054\u6027(affinity or similarity)\u3002

    measuring affinity

    \u6bd4\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8861\u91cf\u50cf\u7d20\u7684\u76f8\u4f3c\u6027\uff1a

    \u518d\u63a5\u4e0b\u6765\uff0c\u901a\u8fc7\u8fd9\u6837\u7684\u65b9\u5f0f\u5c06\u56fe\u7247\u5efa\u6210\u56fe\u540e\uff0c\u5c31\u53ef\u4ee5\u628a\u95ee\u9898\u8f6c\u5316\u4e3a\u56fe\u5272\u95ee\u9898\uff0c\u6211\u4eec\u5c06\u5c0f\u6743\u7684\u8fb9\u5220\u53bb\uff0c\u6700\u7ec8\u4f1a\u5f62\u6210\u82e5\u5e72\u8fde\u901a\u5206\u91cf\uff0c\u800c\u8fd9\u4e9b\u8fde\u901a\u5206\u91cf\u90a3\u7684\u70b9\u5219\u88ab\u89c6\u4e3a\u4e00\u4e2a\u201c\u5206\u5272\u201d\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u56fe\u5272\u7684\u4ee3\u4ef7\u4e3a\u65ad\u7684\u8fb9\u6743\u4e4b\u6743\u91cd\u548c \\(cut(V_A,V_B)= \\sum_{u\\in V_A, v\\in V_B} w(u,v)\\)\uff0c\u800c\u6211\u4eec\u9700\u8981\u627e\u4ee3\u4ef7\u5c3d\u53ef\u80fd\u5c0f\u7684\uff0c\u6ee1\u8db3\u6211\u4eec\u8981\u6c42\u7684\u56fe\u5272\u3002\u5f53\u7136\uff0c\u8fd9\u4e2a\u95ee\u9898\u4e5f\u7b49\u6548\u4e8e\u6700\u5927\u6d41\u95ee\u9898\uff1b

    Problem with min-cut

    Bias to cut small, isolated segments.

    \u7531\u4e8e min-cut \u7684\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u8861\u91cf\u8fd9\u4e2a\u5b50\u96c6\u662f\u5426\u8db3\u591f\u7a20\u5bc6\uff0c\u6240\u4ee5\u6211\u4eec\u503e\u5411\u4e8e\u4f7f\u7528 normalized-cut\u3002

    \\[ assoc(V_A,V) = \\sum_{u\\in V_A, v\\in V} w(u,v) \\\\ NCut(V_A,V_B) = \\frac{cut(V_A,V_B)}{assoc(V_A,V)} + \\frac{cut(V_A,V_B)}{assoc(V_B,V)} \\] "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u9a6c\u53ef\u592b\u968f\u673a\u573a","text":"

    \u9a6c\u53ef\u592b\u968f\u673a\u573a(Markov Random Field, MRF)\u662f\u4e00\u79cd\u66f4\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u53ef\u60dc\u6211\u7b2c\u4e00\u6b21\u6ca1\u542c\u61c2\uff0c\u7b49\u6211\u542c\u61c2\u4e86\u518d\u6765\u8865\u5145\u8fd9\u91cc\u7684\u5185\u5bb9\u3002

    sketch

    Markov chains

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/","title":"Lecture 5 | Feature Matching and Motion Estimation","text":"

    \u7ea6 3966 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 20 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u56fe\u50cf\u7279\u5f81\u5339\u914d","title":"\u56fe\u50cf\u7279\u5f81\u5339\u914d","text":"

    \u672c\u8282\u7684\u8bfe\u9898\u662f\u7279\u5f81\u5339\u914d(feature matching)\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u627e\u5230\u4e24\u5f20\u56fe\u50cf\u4e2d\u53ef\u80fd\u6307\u4ee3\u540c\u4e00\u5ba2\u4f53\u7684\u90e8\u5206\uff0c\u5173\u952e\u5728\u4e8e\u627e\u5230\u56fe\u7247\u4e4b\u95f4\u70b9\u548c\u70b9\u7684\u5339\u914d\u5173\u7cfb\u3002\u8be5\u95ee\u9898\u662f\u5f88\u591a\u95ee\u9898\u7684\u57fa\u77f3\uff0c\u4f8b\u5982\uff1a

    applications

    \u5934\u8111\u98ce\u66b4

    \u7a76\u5176\u6839\u672c\uff0c\u7279\u5f81\u5339\u914d\u201c\u8054\u901a\u201d\u4e86\u4e24\u5f20\u56fe\u7247\uff0c\u4f7f\u5b83\u4eec\u539f\u672c\u5b64\u7acb\u8868\u8fbe\u7684\u4fe1\u606f\u8fde\u7ed3\u8d77\u6765\u3002

    \u7b80\u5355\u7684\u5e94\u7528\u5982\u56fe\u50cf\u62fc\u63a5\uff0c\u518d\u5f80\u540e\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\u4e09\u7ef4\u91cd\u5efa\u4e2d\u4e5f\u4f1a\u5e94\u7528\u5230\u7279\u5f81\u5339\u914d\u5230\u76f8\u5173\u5185\u5bb9\u3002

    \u6982\u62ec\u4f20\u7edf\u7279\u5f81\u5339\u914d\u4e3b\u8981\u73af\u8282\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u4e09\u6b65\uff1a

    1. \u68c0\u6d4b(detection): \u627e\u5230\u5173\u952e\u70b9(interest points)\uff0c\u5373\u53ef\u80fd\u4f1a\u88ab\u5339\u914d\u7684\u201c\u7279\u5f81\u70b9\u201d\uff1b
    2. \u8868\u8fbe(description): \u63d0\u53d6\u6bcf\u4e2a\u5173\u952e\u70b9\u5468\u56f4\u7684\u5411\u91cf\u7279\u5f81\u63cf\u8ff0\u7b26(feature descriptor)\uff0c\u5373\u5c06\u201c\u7279\u5f81\u201d\u6570\u636e\u5316\uff1b
    3. \u5339\u914d(matching): \u51b3\u5b9a\u4e24\u4e2a\u89c6\u89d2\u4e0b\u7279\u5f81\u63cf\u8ff0\u7b26\u7684\u5173\u8054\u5e76\u5339\u914d\uff0c\u5373\u6784\u5efa\u201c\u7279\u5f81\u201d\u4e4b\u95f4\u7684\u5339\u914d\u5173\u7cfb\uff1b
    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u68c0\u6d4b","title":"\u5173\u952e\u70b9\u68c0\u6d4b","text":"

    \u63a8\u8350\u9605\u8bfb

    \u3010\u8ba1\u7b97\u673a\u89c6\u89c9\u30112. \u7279\u5f81\u70b9\u68c0\u6d4b\uff1aHarris, SIFT, SURF, ORB

    \u68c0\u6d4b(detection)\u7684\u9996\u8981\u95ee\u9898\u662f\u5982\u4f55\u9009\u62e9\u5173\u952e\u70b9(interest points/feature points)\uff0c\u6216\u8005\u8bf4\uff0c\u4e00\u4e2a\u70b9\u4ec0\u4e48\u60c5\u51b5\u4e0b\u4f1a\u88ab\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7279\u5f81\u70b9\u3002

    \u603b\u4f53\u6765\u8bf4\uff0c\u5173\u952e\u70b9\u9700\u8981\u7531\u8fd9\u4e48\u4e24\u4e2a\u7279\u5f81\uff1a

    1. \u72ec\u7279\u6027(uniqueness)\uff0c\u5373\u8fd9\u4e2a\u70b9\u9700\u8981\u80fd\u591f\u8868\u5f81\u4e00\u5b9a\u7279\u6027\uff1b
    2. \u5bf9\u4e8e\u53d8\u6362\u4e0d\u654f\u611f\uff0c\u5373\u5bf9\u4e8e\u4e00\u4e2a\u5ba2\u89c2\u4e0a\u7684\u5173\u952e\u70b9\uff0c\u5373\u4f7f\u56fe\u7247\u88ab\u65cb\u8f6c\u3001\u538b\u7f29\u3001\u9002\u5f53\u7684\u626d\u66f2\uff0c\u5b83\u90fd\u5e94\u5f53\uff08\u5c3d\u53ef\u80fd\u5730\uff09\u88ab\u8bc6\u522b\u4e3a\u5173\u952e\u70b9\uff1b

    \u5173\u952e\u70b9

    \u867d\u7136\u8bf4\u662f\u5173\u952e\u201c\u70b9\u201d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u4e00\u5c0f\u5757\u533a\u57df\u3002\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u80fd\u8868\u8fbe\u5c40\u90e8\u7279\u5f81\u7684\u70b9\uff0c\u5b83\u5fc5\u7136\u9700\u8981\u56ca\u62ec\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u4fe1\u606f\u3002

    \u9996\u5148\u6211\u4eec\u8ba8\u8bba\u5982\u4f55\u8861\u91cf\u4e00\u4e2a\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff0c\u672c\u6587\u4f1a\u4ecb\u7ecd\u4e24\u79cd\u68c0\u6d4b\u5668\uff1a

    1. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u89d2\u70b9 - Harris corner detector\uff1b
    2. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u6591\u70b9 - Blob detector(LoG or DoG)\uff1b
    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u89d2\u70b9\u68c0\u6d4b","title":"\u89d2\u70b9\u68c0\u6d4b","text":"

    \u63a8\u8350\u9605\u8bfb

    Harris Corners @ 16-385 Computer Vision (Kris Kitani) @ Carnegie Mellon University

    \u89d2\u70b9\u68c0\u6d4b\u7684\u57fa\u672c\u601d\u8def\u662f\uff0c\u6211\u4eec\u79f0\u67d0\u4e2a\u70b9\u6bd4\u8f83\u72ec\u7279\u65f6\uff0c\u5b83\u76f8\u5bf9\u4e8e\u5468\u56f4\u4e00\u5b9a\u53c8\u4e00\u4e9b\u201c\u4e0d\u540c\u201d\u7684\u5730\u65b9\u3002\u6216\u8005\u8bf4\u5b58\u5728\u4e00\u4e9b\u9ad8\u9891\u7279\u5f81\uff0c\u800c\u4e14\u8fd9\u79cd\u9ad8\u9891\u7279\u5f81\u4e0d\u4f1a\u5404\u5411\u540c\u6027\u6216\u8005\u8bf4\u51e0\u4e2a\u5411\u540c\u6027\u3002

    \u5728\u6a21\u5f0f\u5316\u7684\u63cf\u8ff0\u8fd9\u4e2a\u601d\u8def\u5c31\u662f\uff1a

    Local measures of uniqueness(rough):

    \u6211\u4eec\u4ee5\u7a97\u53e3\u7684\u5f62\u5f0f\u5bf9\u76ee\u6807\u70b9\u53ca\u5176\u90bb\u57df\u8fdb\u884c\u91c7\u6837\uff0c\u5f53\u65e0\u8bba\u5f80\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\u7a97\u53e3\uff0c\u91c7\u6837\u7ed3\u679c\u90fd\u4f1a\u4ea7\u751f\u8f83\u5927\u53d8\u5316\u65f6\uff0c\u6211\u4eec\u5c31\u8ba4\u4e3a\u8fd9\u4e2a\u70b9\u72ec\u7279\u6027\u5f3a\u3002

    Flag Edge Corner \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4e0d\u4f1a\u6709\u592a\u5927\u53d8\u5316 \u5f53\u6cbf\u7740\u201cEdge\u201d\u7684\u65b9\u5411\u79fb\u52a8\u65f6\uff0c\u4e0d\u592a\u6709\u53d8\u5316 \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4f1a\u5bfc\u81f4\u8f83\u5927\u7684\u53d8\u5316

    \u4e0d\u8fc7\u8fd9\u4ecd\u7136\u662f\u4e00\u4e2a\u76f8\u5bf9\u6a21\u7cca\u7684\u5b9a\u4e49\uff0c\u4e3a\u4e86\u5bf9\u5176\u8fdb\u884c\u5efa\u6a21\uff0c\u6211\u4eec\u8fdb\u4e00\u6b65\u5730\u5bf9\u4e0a\u9762\u63d0\u5230\u7684\u201c\u53d8\u5316\u5e45\u5ea6\u201d\u8d4b\u4e88\u6570\u5b66\u542b\u4e49\uff1a

    Local measures of uniqueness(detail):

    \u6240\u8c13\u53d8\u5316\u5927\uff0c\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u76f8\u540c\u7684\u5355\u4f4d\u957f\u5ea6\u91cc\uff0c\u8272\u5f69\u503c\u7684\u5dee\u66f4\u5927\uff0c\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e0d\u7528\u68af\u5ea6\u6765\u8861\u91cf\u5462\uff1f\u5173\u6ce8\u533a\u57df\u5185\u7684\u68af\u5ea6\u5206\u5e03\uff1a

    \u6839\u636e\u68af\u5ea6\u7684\u5206\u5e03\uff0c\u6211\u4eec\u53ef\u4ee5\u5927\u81f4\u89c2\u5bdf\u5230\u56fe\u5f62\u7684\u7279\u5f81\uff0c\uff0c\u5305\u62ec\u5b58\u5728\u591a\u5c11\u4e2a Edge \u4ee5\u53ca\u8fd9\u4e9b Edge \u7684\u65b9\u5411\u3002

    \u4e0d\u8fc7\u7eaf\u7cb9\u6839\u636e\u68af\u5ea6\u6765\u5bfb\u627e\u89d2\u70b9\u6709\u65f6\u5019\u53ef\u80fd\u4f1a\u6536\u5230\u566a\u58f0\u7684\u5f71\u54cd\uff0c\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4e3b\u6210\u5206\u5206\u6790(Principle Component Analysis)\u6765\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002\u3002

    Principle Component Analysis

    \u2460 Subtract off the mean for each data point.

    \u2461 Compute the covariance matrix at each point.

    \\[ H = \\sum_{(u,v)}w(u,v) \\begin{bmatrix} I_x^2 & I_xI_y \\\\ I_xI_y & I_y^2 \\end{bmatrix} \\text{ where } I_x = \\frac{\\partial f}{\\partial x}, I_y = \\frac{\\partial y}{\\partial y} \\]

    \\(w(u,v)\\) \u4e00\u822c\u662f\u9ad8\u65af\u6743\u91cd\u3002

    \u2462 Compute eigenvalues.

    \\[ H = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\;\\;\\;\\; \\lambda_{\\pm} = \\frac{1}{2}\\left( (a+d) \\pm \\sqrt{4bc + (a-d)^2} \\right) \\] error function approximation

    Carnegie Mellon University \u7684 slides P18 \u5f00\u59cb\u8fd8\u63d0\u5230\u4e86\u4e0d\u540c\u4f4d\u79fb\u4e0b\u7684\u8bef\u5dee\u51fd\u6570\uff0c\u5e76\u7ed9\u51fa\u4e86\u4e09\u79cd\u60c5\u51b5\u4e0b\u8bef\u5dee\u51fd\u6570\u7684\u70ed\u529b\u56fe\u3002

    \u2463 Components are the eigenvectors ranked by the eigenvalues.

    \u5728\u672c\u8282\u7684\u8bed\u5883\u4e0b\uff0c\u5f62\u8c61\u5730\u53d9\u8ff0\u4e3b\u6210\u5206\u5206\u6790\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u65b9\u5dee\u6700\u5927\u7684\u65b9\u5411\uff0c\u7b2c\u4e8c\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u5782\u76f4\u4e8e\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u7684\u65b9\u5411\uff0c\u5b83\u4eec\u7684\u5927\u5c0f\u5219\u4e0e\u8fd9\u4e9b\u65b9\u5dee\u6b63\u76f8\u5173\u3002

    \u5bf9\u4e8e\u4e0a\u9762\u7684\u4e09\u79cd\u60c5\u51b5\uff0c\u5b83\u4eec\u505a\u4e3b\u6210\u5206\u5206\u6790\u540e\u5f97\u5230\u7684\u7ed3\u679c\u662f\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u4e09\u4e2a\u60c5\u51b5\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u5f88\u5927\u3002

    \u6211\u4eec\u901a\u8fc7\u5224\u65ad\u4e24\u4e2a\u7279\u5f81\u503c\u7684\u5927\u5c0f\u5173\u7cfb\u60c5\u51b5\u6765\u5224\u65ad\u4e00\u4e2a\u533a\u57df\u662f\u5426\u5305\u542b\u4e00\u4e2a\u89d2(corner)\u3001\u8fb9(edge)\u6216\u5e73\u9762(flat)\uff0c\u53ef\u4ee5\u5c06\u4ed6\u4eec\u653e\u5230\u4e00\u4e2a\u76f4\u65b9\u56fe\u4e2d\uff0c\u6839\u636e\u4e24\u4e2a\u7279\u5f81\u503c\u5f62\u6210\u7684\u70b9\u5bf9\u5728\u6574\u4e2a\u8c61\u9650\u4e2d\u51fa\u73b0\u7684\u4f4d\u7f6e\u6765\u5224\u65ad\u89d2\u70b9\u60c5\u51b5\uff1a

    Figure from Carnegie Mellon University's slides. Corner detection.

    \u4e3a\u4e86\u80fd\u591f\u91cf\u5316\u5730\u8868\u8fbe\u4e0a\u9762\u8fd9\u5f20\u56fe\u7684\u5206\u7c7b\u89c4\u5219\uff0c\u6211\u4eec\u5f15\u5165\u54c8\u91cc\u65af\u7b97\u5b50(Harris operator):

    \\[ f = \\frac{\\lambda_1\\lambda_2}{\\lambda_1+\\lambda_2} = \\frac{determinant(H)}{trace(H)} \\]

    \u8fd9\u91cc\u7684\u4e00\u4e2a\u7279\u6027\u662f\uff0c\u5bf9\u4e8e\u4e8c\u7ef4\u77e9\u9635\u6765\u8bf4\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u5e76\u4e0d\u9700\u8981\u6309\u7167\u4e4b\u524d\u7684\u6b65\u9aa4\uff0c\u8fdb\u884c\u4e3b\u6210\u5206\u5206\u6790\u4ee5\u540e\u518d\u5f97\u5230\uff0c\u800c\u662f\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u8fd9\u4e2a\u516c\u5f0f\u5f97\u5230\u3002

    \u800c\u8fd9\u4e2a \\(f\\) \u5c31\u53eb\u505a corner response\u3002

    reminder \\[ det\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = ad-bc \\;\\;\\;\\;\\; trace\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = a+d \\]

    \u5982\u4e0a\u8fd9\u5957\u65b9\u6cd5\u5c31\u662fHarris corner detector\u7684\u5b9e\u73b0\u3002

    \u5f52\u7eb3\u4e00\u4e0b\uff0c\u5176\u6b65\u9aa4\u5c31\u662f\uff1a

    Harris detector

    1. \u6c42\u5bfc | Compute derivatives at each pixel.
    2. \u534f\u65b9\u5dee\u77e9\u9635 | Compute covariance matrix \\(H\\) in a Gaussian window around each pixel.
    3. \u54cd\u5e94\u51fd\u6570 | Compute corner response function \\(f\\).
    4. \u9608\u503c\u8fc7\u6ee4 | Threshold \\(f\\).
    5. \u975e\u6781\u5927\u503c\u6291\u5236 | Find local maxima of response function (nonmaximum suppression).

    \u66f4\u8be6\u7ec6\u7684\u8bf4\u660e\u53ef\u4ee5\u53c2\u8003 wiki \u4e0a\u7684\u8bf4\u660e\uff1aHarris corner detector\u3002

    \u53e6\u4e00\u4e2a\u5173\u952e\u95ee\u9898\u662f\uff0c\u901a\u8fc7\u8fd9\u4e2a\u65b9\u6cd5\u5f97\u5230\u7684\u5173\u952e\u70b9\uff0c\u5177\u6709\u5bf9\u53d8\u6362\u4e0d\u654f\u611f\u6027\u5417\uff1f

    \u5bf9\u6b64\uff0c\u7ed3\u8bba\u662f\uff1a

    1. Partially invariant to affine intensity change.
    2. Corner response is invariant w.r.t. translation.
    3. Corner response is invariant w.r.t. image rotation.
    4. Corner response is NOT invariant to scaling.

    \u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\u7684\u89e3\u51b3\u65b9\u6848

    \u9488\u5bf9\u7ed3\u8bba 4\uff0c\u7531\u4e8e Harris detector \u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u4f7f\u7528\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8fc7\u7a0b\u4e2d\u9700\u8981\u6ce8\u610f\u5c3a\u5ea6\uff0c\u5373\u7a97\u53e3\u7684\u5927\u5c0f\u9009\u5b9a\u3002

    \u4e00\u79cd\u8bbe\u60f3\u7684\u65b9\u6848\u662f\uff0c\u4e0d\u65ad\u5c1d\u8bd5\u4e0d\u540c\u7684 window size\uff0c\u7136\u540e\u53d6\u5f97 response \u66f2\u7ebf\uff0c\u5047\u8bbe response \u7684\u5927\u5c0f\u53ea\u4e0e scale \u6709\u5173\uff0c\u5219\u66f2\u7ebf\u90fd\u5e94\u8be5\u662f\u5355\u5cf0\u7684\uff0c\u800c\u53d6\u51fa\u8fd9\u4e2a\u5cf0\u503c\uff08\u7279\u5f81\u6700\u660e\u663e\u7684\u65f6\u5019\uff09\uff0c\u5c31\u53ef\u4ee5\u5f53\u4ed6\u4e3a\u5bf9\u5e94\u7684 scale \u4ee5\u53ca\u5bf9\u5e94\u7684 response\u3002

    \u4e0d\u8fc7\u4e00\u822c\u5b9e\u9645\u7684\u505a\u6cd5\u662f\u56fa\u5b9a\u7a97\u53e3\u5927\u5c0f\uff0c\u800c\u6539\u53d8\u56fe\u7247\u7684\u5927\u5c0f\uff0c\u518d\u5728\u5f97\u5230\u7684\u56fe\u50cf\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8ba1\u7b97\uff0c\u5373\u5bf9\u4e0d\u540c\u5206\u8fa8\u7387\u7684\u56fe\u7247\u4e0a\u5206\u522b\u8fdb\u884c\u54c8\u91cc\u65af\u68c0\u6d4b\u3002\uff08\u76f8\u5f53\u4e8e\u7ed9\u56fe\u7247\u589e\u52a0\u4e86\u4e00\u4e2a\u7ef4\u5ea6\uff0c\u672c\u8d28\u4e0a\u548c\u4e0a\u9762\u7684\u65b9\u6cd5\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u7528\u4e86\u4e00\u4e2a\u66f4\u5408\u7406\u7684\u5b9e\u73b0\u89d2\u5ea6\u3002\uff09

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u6591\u70b9\u68c0\u6d4b","title":"\u6591\u70b9\u68c0\u6d4b","text":"

    \u9664\u4e86\u89d2\u70b9\uff0c\u6591\u70b9(blob)\u4e5f\u662f\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u7279\u6027\uff0c\u975e\u5e38\u9002\u5408\u4f5c\u4e3a\u5173\u952e\u70b9\u3002

    \u800c\u6591\u70b9\u7684\u5bfb\u627e\u6211\u4eec\u5219\u53ef\u4ee5\u5229\u7528\u6ee4\u6ce2\u5668\u6765\u5b9e\u73b0\uff0c\u8ba9\u6211\u4eec\u56de\u987e\u7b2c\u4e09\u7ae0\u8fb9\u7f18\u63d0\u53d6\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u7c7b\u4f3c\u7684\u505a\u6cd5\uff0c\u4f7f\u7528\u4e00\u4e2a\u4e2d\u95f4\u8d1f\u56db\u5468\u6b63\u7684\u6ee4\u6ce2\u5668\u6765\u63d0\u53d6\u6591\u70b9\u3002

    \u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u4f7f\u7528 Gaussian \u6ee4\u6ce2\u5668\u7684 Laplacian\uff0c\u5373 Laplacian of Gaussian Filter(LoG)\uff0c\u6765\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u548c\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\u3002

    \ud83d\udc49 Laplacian \u7b97\u5b50

    \u5b9e\u9645\u4e0a\u4e5f\u7b49\u6548\u4e8e\u5148\u5bf9\u56fe\u7247\u4f5c\u9ad8\u65af\u6a21\u7cca\uff08\u51cf\u5c0f\u566a\u58f0\u5f71\u54cd\uff09\uff0c\u518d\u8ba1\u7b97\u5176\u62c9\u666e\u62c9\u65af\u7b97\u5b50\uff0c\u5373\uff1a

    \\[ \\nabla^2(f*g) = f * \\nabla^2 g \\]

    \u5176\u4e2d\uff0cLoG \u7684 scale \u662f\u901a\u8fc7\u9ad8\u65af\u51fd\u6570\u7684 \\(\\sigma\\) \u63a7\u5236\u7684\uff0c\u4e5f\u540c\u6837\u901a\u8fc7\u50cf\u7d20\u91d1\u5b57\u5854\u6765\u5b9e\u73b0\u3002

    \u53c8\u6216\u8005\u53ef\u4ee5\u4f7f\u7528 Difference of Gaussian(DoG)\uff0c\u5373\u5c06 Laplacian of Gaussian Filter \u66ff\u6362\u4e3a\u4e00\u4e2a\u7531\u4e24\u4e2a\u9ad8\u65af\u51fd\u6570\u505a\u5dee\u5f97\u5230\u7684 Filter\uff0c\u76f8\u5bf9\u6765\u8bf4\u6548\u7387\u66f4\u9ad8\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u8868\u8fbe","title":"\u5173\u952e\u70b9\u8868\u8fbe","text":"

    \u9009\u5b9a\u5173\u952e\u70b9\u540e\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u5982\u4f55\u63cf\u8ff0\u548c\u8868\u8fbe\u8fd9\u4e9b\u70b9\uff0c\u4ee5\u4f7f\u5bf9\u5e94\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fd1\uff0c\u800c\u4e0d\u76f8\u5173\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fdc\u3002

    \u4e00\u79cd\u6734\u7d20\u7684\u601d\u60f3\u662f\u5c06\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u4f5c\u4e3a\u4e00\u4e2a\u7279\u6027\u5411\u91cf(feature vector)\u8fdb\u884c\u6bd4\u8f83\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u5bf9\u504f\u79fb\u7684\u8bef\u5dee\u8fc7\u4e8e\u654f\u611f\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u4e5f\u8bb8\u4e24\u5f20\u56fe\u7247\u5f88\u50cf\uff0c\u4f46\u662f\u56e0\u4e3a\u4e00\u70b9\u4f4d\u79fb\u8bef\u5dee\uff0c\u5bfc\u81f4\u5411\u91cf\u521a\u597d\u9519\u5f00\uff0c\u5bfc\u81f4\u7ed3\u679c\u663e\u793a\u4e24\u4e2a\u70b9\u5dee\u522b\u5f88\u5927\u3002\u8fd9\u662f\u56e0\u4e3a\u8fd9\u79cd\u505a\u6cd5\u5bf9\u50cf\u7d20\u70b9\u5728\u7a97\u53e3\u4e2d\u7684\u4f4d\u7f6e\u5f88\u654f\u611f\uff0c\u4f46\u662f\u663e\u7136\u4f4d\u7f6e\u5e76\u4e0d\u662f\u5173\u952e\u70b9\u7684\u7279\u5f81\u4e4b\u6240\u5728\u3002

    \u53e6\u5916\u66f4\u597d\u7684\u505a\u6cd5\u662f\u5c3a\u5ea6\u4e0d\u53d8\u7684\u7279\u5f81\u53d8\u6362(Scale Invariant Feature Transform, SIFT) descriptor\uff0c\u4e0d\u518d\u4f7f\u7528\u50cf\u7d20\u503c\uff0c\u800c\u662f\u4f7f\u7528\u533a\u57df\u4e2d\u7684\u68af\u5ea6\u7684\u5206\u5e03\u4f5c\u4e3a\u4e00\u4e2a\u63cf\u8ff0\uff0c\u53ef\u4ee5\u8868\u793a\u4e3a\u4e00\u5f20 \\([0,2\\pi)\\) \u7684\uff0c\u5faa\u73af\u7684\u76f4\u65b9\u56fe\u3002\u6b64\u65f6\u5c0f\u7684\u5e73\u79fb\u548c\u7f29\u653e\u90fd\u4e0d\u4f1a\u5bf9\u5b83\u4ea7\u751f\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u65cb\u8f6c\u53ea\u4f1a\u5bfc\u81f4\u76f4\u65b9\u56fe\u7684\u5faa\u73af\u5e73\u79fb\u2014\u2014\u4e0d\u8fc7\u8fd9\u79cd\u5faa\u73af\u5e73\u79fb\u662f\u5f88\u597d\u5904\u7406\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u4e2d\u6700\u5927\u7684\u5206\u91cf\u4f5c\u4e3a\u53c2\u8003\uff0c\u5e76\u5c06\u6574\u4e2a\u76f4\u65b9\u56fe\u5e73\u79fb\u5bf9\u9f50\u3002\u76f8\u6bd4\u76f4\u63a5\u5c06\u50cf\u7d20\u8f6c\u5316\u4e3a\u7279\u5f81\u5411\u91cf SIFT \u9c81\u68d2\u6027\u66f4\u9ad8\u3002

    \u5b8c\u6574\u7684 SIFT \u662f\u5305\u62ec\u300c\u68c0\u6d4b\u300d\u6b65\u9aa4\u7684\u3002

    Other detectors and descriptors:

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u5339\u914d","title":"\u5173\u952e\u70b9\u5339\u914d","text":"

    \u6240\u8c13\u7684\u5339\u914d(matching)\u5c31\u662f\u5b57\u9762\u4e0a\u7684\u5c06\u4e24\u5f20\u56fe\u4e2d\u5bf9\u5e94\u7684\u70b9\u5efa\u7acb\u8d77\u5339\u914d\u5173\u7cfb\u3002\u800c\u8bc4\u4f30\u65b9\u6cd5\u5c31\u662f\u5bfb\u627e\u300c\u8ddd\u79bb\u300d\u6700\u63a5\u8fd1\u7684\u70b9\u3002

    \u800c\u8fd9\u91cc\u7684\u300c\u8ddd\u79bb\u51fd\u6570\u300d\u662f\u7528\u6765\u8861\u91cf\u4e24\u4e2a\u5173\u952e\u70b9\u7684\u8868\u8fbe\u7684\u5dee\u5f02\u7684\u51fd\u6570\uff0c\u4e00\u822c\u4f7f\u7528 L2 distance\uff0c\u5373 \\(||f_1 - f_2||\\)\u3002

    \u91cd\u590d\u6027\u7eb9\u7406

    \u7136\u800c\u9700\u8981\u7279\u522b\u6ce8\u610f\u70b9\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u67d0\u4e2a\u7279\u5f81\u56fe\u6848\u91cd\u590d\u51fa\u73b0\u7684\u60c5\u51b5\uff0c\u8fd9\u7c7b\u95ee\u9898\u53eb\u505a\u91cd\u590d\u6027\u7eb9\u7406\u95ee\u9898\u3002

    \u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u53ef\u80fd\u6709\u5f88\u591a\u5173\u952e\u70b9\u80fd\u548c\u8fd9\u4e2a\u5173\u952e\u70b9\u5b9e\u73b0\u5339\u914d\uff08\u8868\u8fbe\u76f8\u8fd1\uff09\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u5c31\u9700\u8981\u7528 Ratio score = \\(\\frac{ ||f_1 - f_2|| }{ ||f_1 - f_2'|| }\\)\uff0c\u6bd4\u8f83\u6700\u63a5\u8fd1\u7684\u4e24\u79cd\u5339\u914d\u3002

    \u5982\u679c Ratio score \u63a5\u8fd1 1\uff0c\u8bf4\u660e \\(f_1, F_2,f_2'\\) \u7684\u8868\u8fbe\u90fd\u5f88\u63a5\u8fd1\uff0c\u8fd9\u4e2a\u5339\u914d\u5e76\u4e0d\u53ef\u9760\uff0c\u53ea\u80fd\u4e22\u6389\u8fd9\u4e2a\u5173\u952e\u70b9\u3002

    \u5728\u4f20\u7edf CV \u6280\u672f\u4e2d\uff0c\u6211\u4eec\u5f88\u96be\u5904\u7406\u8fd9\u4e00\u7c7b\u91cd\u590d\u6027\u7eb9\u7406\u7684\u95ee\u9898\uff0c\u6240\u4ee5\u9047\u5230\u8fd9\u79cd\u96be\u4ee5\u5bfb\u627e\u5339\u914d\u5173\u7cfb\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ea\u80fd\u9009\u62e9\u4e0d\u5339\u914d\u5b83\u4eec\u3002

    \u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u52a0\u5339\u914d\u7684\u51c6\u786e\u6027\uff0c\u6211\u4eec\u8fd8\u6709\u4e00\u4e2a\u5224\u5b9a\u89c4\u5219\uff1a\u4e24\u70b9\u76f8\u4e92\u6700\u76f8\u4f3c\uff0c\u5219\u8be5\u5339\u914d\u5341\u5206\u53ef\u4fe1\u3002\uff08\u5728 I2 \u4e2d\u4f60\u6700\u50cf\u6211\uff0c\u5728 I1 \u4e2d\u6211\u6700\u50cf\u4f60\uff09

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u8fd0\u52a8\u4f30\u8ba1","title":"\u8fd0\u52a8\u4f30\u8ba1","text":"

    \u5148\u524d\uff0c\u6211\u4eec\u7740\u773c\u4e8e\u5355\u5f20\u56fe\u7247\uff0c\u6216\u8005\u8bf4\u51e0\u5f20\u56fe\u7247\uff0c\u4ecd\u7136\u662f\u4ee5\u4e00\u4e2a\u9759\u6001\u7684\u89c6\u89d2\u6765\u89c2\u5bdf\u56fe\u50cf\u3002

    \u800c\u5f53\u6211\u4eec\u628a\u7814\u7a76\u5bf9\u8c61\u4ece\u56fe\u7247\u6539\u53d8\u4e3a\u89c6\u9891\u6216\u8005\u8bf4\u56fe\u7247\u5e8f\u5217\u7684\u65f6\u5019\uff0c\u56fe\u7247\u5c31\u88ab\u8d4b\u4e88\u4e86\u8fd0\u52a8\u7684\u5c5e\u6027\uff0c\u800c\u8fd9\u5c31\u5f15\u51fa\u4e86\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u3002

    \u9996\u5148\uff0c\u8fd0\u52a8\u6309\u7167\u6210\u56e0\u4e3b\u8981\u53ef\u4ee5\u5206\u4e3a\u76f8\u673a\u8fd0\u52a8\u548c\u573a\u666f\u8fd0\u52a8\u4e24\u4e2a\u7ef4\u5ea6\u3002

    \u76f8\u673a\u8fd0\u52a8 \u573a\u666f\u8fd0\u52a8 eg (\u5149\u7ebf\u53d8\u5316\u7b49\u5f71\u54cd\u89c6\u9891\u6bcf\u4e00\u5e27\u7684\u5185\u5bb9\u5b58\u5728\u5149\u5f71\u5dee\u5f02\u7b49) \u9759\u666f\u201c\u8fd0\u955c\u201d \u76d1\u63a7\u5f55\u50cf \u4f53\u80b2\u8d5b\u4e8b\u955c\u5934\u8ddf\u8e2a

    \u800c\u9488\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\uff0c\u6709\u8fd9\u4e48\u51e0\u79cd\u89e3\u51b3\u7684\u89c6\u89d2\uff1a

    \u800c\u4e24\u4e2a\u89c6\u89d2\u90fd\u53ef\u4ee5\u4f7f\u7528 Lucas-Kanade method \u89e3\u51b3\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u4e00\u4e2a\u66f4\u660e\u786e\u7684\u5b9a\u4e49\uff1a

    motion estimation

    Wiki: https://en.wikipedia.org/wiki/Motion_estimation

    \u8fd0\u52a8\u4f30\u8ba1\u662f\u6307\u4ece\u4e00\u4e2a 2D \u56fe\u50cf\u5230\u53e6\u4e00\u4e2a 2D \u56fe\u50cf\u7684\u8f6c\u6362\u4e2d\u786e\u5b9a\u63cf\u8ff0\u8fd0\u52a8\u7684\u8fd0\u52a8\u77e2\u91cf\u7684\u8fc7\u7a0b\uff0c\u901a\u5e38\u662f\u4ece\u89c6\u9891\u5e8f\u5217\u4e2d\u76f8\u90bb\u7684\u5e27\u4e2d\u63d0\u53d6\u3002

    \u5047\u8bbe\u6211\u4eec\u6709\u5339\u914d\u70b9 \\(P(x,y,t)\\) \u548c \\(P(x+u, y+v, t+1)\\)\uff0c\u5219\u8fd0\u52a8\u4f30\u8ba1\u5219\u662f\u6c42\u89e3 \\((u,v)\\) \u7684\u8fc7\u7a0b\u3002

    \u4e0d\u540c\u4e8e\u5173\u952e\u70b9\u7684\u5339\u914d\uff0c\u8fd0\u52a8\u4f30\u8ba1\u66f4\u4fa7\u91cd\u4e8e\u5bf9\u5173\u952e\u70b9\u7684\u65f6\u5e8f\u5173\u7cfb\u7684\u5339\u914d\u4e0e\u63cf\u8ff0\u3002

    \u800c\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u8ba8\uff0c\u90fd\u9700\u8981\u57fa\u4e8e LK \u5047\u8bbe\u5c55\u5f00\uff1a

    Key Asumptions of Lucas-Kanade

    1. [Small motion] \u76f8\u90bb\u5e27\uff0c\u5339\u914d\u70b9\u7684\u8fd0\u52a8\u8ddd\u79bb\u5c0f\uff1b
    2. [Brightness constancy] \u76f8\u90bb\u5e27\uff0c\u70b9\u7684\u4eae\u5ea6\u503e\u5411\u4e8e\u4e0d\u53d8\uff0c\u5373\u53d8\u5316\u5fae\u5c0f\uff1b
    3. [Spatial coherence] \u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\uff1b

    \u63a5\u4e0b\u6765\uff0c\u57fa\u4e8e LK \u5047\u8bbe\uff0c\u6211\u4eec\u6765\u7814\u7a76\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\u7684\u6c42\u89e3\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u5c06\u7b2c\u4e8c\u6761\u5047\u8bbe\u8868\u8fbe\u5f0f\u5316\uff0c\u5373\u6709\uff1a

    \\[ I(x,y,t) = I(x+u, y+v, t+1) \\]

    \u4e3a\u4e86\u6c42\u89e3 \\(u\\) \u548c \\(v\\)\uff0cLK Method \u5bf9\u5176\u4f5c\u6cf0\u52d2\u5c55\u5f00\uff1a

    \\[ I(x+u,y+v,t+1) \\approx I(x,y,t) + I_x\\cdot u + I_y \\cdot v + I_t \\]

    \u79fb\u9879\uff1a

    \\[ I(x+u,y+v,t+1) - I(x,y,t) = I_x\\cdot u + I_y \\cdot v + I_t \\]

    \u6839\u636e\u5047\u8bbe 2\uff0c\u5f97\u5230\uff1a

    \\[ I_x\\cdot u + I_y \\cdot v + I_t \\approx 0 \\]

    \u5373\uff1a

    \\[ \\nabla I \\cdot \\begin{bmatrix} u & v \\end{bmatrix}^T + I_t = 0 \\]

    \u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\u5173\u4e8e \\(u\\) \u548c \\(v\\) \u7684\u4e00\u4e2a\u8f83\u7b80\u5355\u7684\u7b49\u5f0f\u3002

    \u7136\u800c\u6211\u4eec\u53ea\u6709\u4e00\u4e2a\u7b49\u5f0f\uff0c\u4f46\u9700\u8981\u6c42\u89e3\u7684\u672a\u77e5\u5143 \\(u\\) \u548c \\(v\\) \u6709\u4e24\u4e2a\u3002

    \u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86\u5047\u8bbe 3\uff0c\u5373\u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u628a\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u90fd\u5e26\u5165\u4e0a\u9762\u90a3\u4e2a\u7b49\u5f0f\uff0c\u5c1d\u8bd5\u6765\u6c42\u89e3\uff08\u5927\u81f4\u90fd\u76f8\u4f3c\u7684\uff09\\(u\\) \u548c \\(v\\)\u3002\u6b64\u65f6\u6211\u4eec\u7684\u65b9\u7a0b\u6570\u91cf\u5c31\u975e\u5e38\u5145\u88d5\u4e86\u3002\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\u3002

    \\[ Ad=b \\rightarrow \\min\\limits_d ||Ad-b||^2 \\]

    Least squares solution(\u524d\u9762\u63d0\u5230\u8fc7\u7684\u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u8fd1\u4f3c\u89e3) for d given by \\((A^TA)d = A^Tb\\).

    \u800c\u8fd9\u4e2a\u89e3\u662f\u5426\u5b58\u5728\u7684\u6761\u4ef6\u662f\uff1a

    \\[ \\underbrace{ \\begin{bmatrix} \\sum I_x I_x & \\sum \\sum I_x I_x \\\\ \\sum I_x I_y & \\sum I_y I_y \\end{bmatrix} }_{A^T A} \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\underbrace{ \\begin{bmatrix} \\sum I_x I_t \\\\ \\sum I_y I_t \\end{bmatrix} }_{A^T b} \\]

    \u5728\u8be5\u5f0f\u4e2d\uff0c\\(A^TA\\) \u9700\u8981\u662f\u53ef\u9006\u7684\uff0c\u5e76\u4e14\u5b83\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u4e0d\u80fd\u592a\u5c0f\u3002\u4e5f\u5c31\u8be5\u70b9\u80fd\u591f\u88ab Harris corner detector \u68c0\u6d4b\u5230\u70b9\u89d2\u70b9\uff01

    \u56e0\u6b64\uff0c\u5018\u82e5\u4f7f\u7528 LK \u65b9\u6cd5\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(A^TA\\) \u53ef\u9006\uff0c\u4e14\u56fe\u50cf\u4e2d\u4e0d\u80fd\u6709\u592a\u591a\u566a\u70b9\u3002

    \u6b64\u5916\uff0c\u5173\u4e8e\u5bf9\u5047\u8bbe 1 \u7684\u7ea6\u675f\uff0c\u539f\u5219\u4e0a\u4e24\u5e27\u4e4b\u95f4\u7684\u8fd0\u52a8\u5dee\u8ddd\u5e94\u8be5\u5c0f\u4e8e\u4e00\u4e2a\u50cf\u7d20\uff0c\u7136\u800c\u8fd9\u4e2a\u6761\u4ef6\u975e\u5e38\u82db\u523b\u3002\u6240\u4ee5\u6211\u4eec\u7684\u53ef\u4ee5\u5148\u5bf9\u56fe\u7247\u8fdb\u884c\u6a21\u7cca/\u7f29\u5c0f\u5904\u7406\uff0c\u50cf\u7d20\u8db3\u591f\u201c\u5927\u201d\u4e4b\u540e\u5c31\u53ef\u4ee5\u6ee1\u8db3\u8fd9\u4e2a\u5047\u8bbe 1\u3002\u7136\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u4f1a\u4e22\u5931\u5f88\u591a\u4fe1\u606f\uff0c\u6240\u4ee5\u53ea\u6839\u636e\u8fd9\u4e2a\u6761\u4ef6\u6765\u8ba1\u7b97\u4e5f\u4e0d\u884c\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u50cf\u7d20\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u9010\u5c42\u6b21\u4f30\u8ba1\uff0c\u518d\u4e0d\u65ad\u7ec6\u5316\u7684\u505a\u6cd5\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec06/","title":"Lecture 6 | Image Alignment and Stitching","text":"

    \u7ea6 1320 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec06/#\u56fe\u50cf\u62fc\u63a5","title":"\u56fe\u50cf\u62fc\u63a5","text":"

    \u6240\u8c13\u7684\u56fe\u50cf\u62fc\u63a5\uff0c\u6a21\u5f0f\u4e0a\u5c31\u662f\u5bfb\u627e\u82e5\u5e72\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u5e76\u5c06\u753b\u9762\u5185\u5bb9\u8fdb\u884c\u62fc\u63a5\u548c\u5ef6\u5c55\uff0c\u5176\u672c\u8d28\u662f\u6c42\u89e3\u56fe\u50cf\u4e4b\u95f4\u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u6a21\u5f0f\u62df\u5408\u7684\u95ee\u9898\u3002\u5e94\u7528\u4e0a\u6bd4\u5982 \u5168\u666f\u56fe(panorama) \u6216 360\u00b0VR\u7b49\u3002

    \u6295\u5f71\u5e73\u9762/\u66f2\u9762

    \u5e38\u89c1\u7684\u56fe\u50cf\u62fc\u63a5\u6709\u6bd4\u5982\u5c06\u5e73\u884c\u7684\u666f\u8c61\u5728\u5e73\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\uff0c\u4e5f\u6709\u5c06\u6c34\u5e73\u73af\u7ed5\u7684\u7684\u666f\u8c61\u5728\u67f1\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\u7b49\u3002\u533a\u522b\u5728\u4e8e\u9700\u8981\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u8868\u8fbe\u8fdb\u884c\u4e00\u4e2a\u201c\u53d8\u6362\u201d\uff0c\u4f46\u5b9e\u9645\u53d8\u5316\u65b9\u6cd5\u4e0d\u4f1a\u6709\u5927\u533a\u522b\uff0c\u4ecd\u7136\u662f\u5148\u68c0\u6d4b\u76f8\u540c\u90e8\u5206\u518d\u6c42\u89e3\u53d8\u6362\u5173\u7cfb\u3002

    \u5728\u8fd9\u91cc\u9700\u8981\u505a\u7684\u4e00\u4e2a\u7279\u522b\u8bf4\u660e\u662f\uff0c\u5728\u4e4b\u540e\u8be6\u7ec6\u4ecb\u7ecd\u201c\u53d8\u6362\u201d\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\u624b\u673a\u62cd\u6444\u5e7f\u89d2\u7167\u7247\u65f6\uff0c\u4f1a\u8981\u6c42\u62cd\u6444\u8005\u53ea\u505a\u89c6\u89d2\u53d8\u5316\u800c\u4e0d\u505a\u4f4d\u79fb\u3002

    \u8fc7\u7a0b\u6982\u8ff0

    \u6211\u4eec\u8fd9\u91cc\u8003\u8651\u7684\u56fe\u50cf\u62fc\u63a5\u95ee\u9898\uff0c\u66f4\u591a\u6307\u7684\u662f\u4e24\u5f20\u56fe\u7247\u62e5\u6709\u5171\u540c\u523b\u753b\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u62fc\u63a5\uff0c\u5373\u4e24\u5f20\u7167\u7247\u5b58\u5728\u4ea4\u96c6\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u901a\u8fc7\u56fe\u50cf\u7279\u5f81\u5339\u914d\u76f8\u5173\u6280\u672f\uff0c\u627e\u5230\u8fd9\u4e24\u5f20\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u8fd9\u4e9b\u5171\u540c\u90e8\u5206\u5982\u4f55\u5b9e\u73b0\u8f6c\u5316\uff08\u76f8\u5f53\u4e8e\u5728\u505a\u201c\u5bf9\u9f50\u201d\uff09\u3002

    \u62fc\u63a5\u8fc7\u7a0b\u4e2d\u4f1a\u51fa\u73b0\u8fb9\u754c\uff0c\u800c\u8fd9\u4e2a\u8fb9\u754c\u6211\u4eec\u662f\u53ef\u4ee5\u4eba\u4e3a\u9009\u62e9\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u8ba9\u5b83\u5dee\u8ddd\u6700\u5c0f\u7684\u5730\u65b9\u6210\u4e3a\u8fb9\u754c\uff0c\u53c8\u6216\u8005\u662f\u4e00\u4e2a\u56fe\u5272\u95ee\u9898\uff1b

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/","title":"Lecture 7 | Structure From Motion","text":"

    \u7ea6 8658 \u4e2a\u5b57 14 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 43 \u5206\u949f

    \u524d\u8a00

    \u4e2a\u4eba\u611f\u89c9\u8fd9\u4e00\u7ae0\u7684\u5185\u5bb9\u867d\u7136\u8109\u7edc\u6e05\u6670\uff0c\u4f46\u662f\u9700\u8981\u4e0d\u65ad\u5f15\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5982\u679c\u76f4\u63a5\u91c7\u7528\u201c\u7528\u5230\u4ec0\u4e48\u8bb2\u4ec0\u4e48\u201d\u7684\u987a\u5e8f\u9610\u8ff0\uff0c\u53ef\u80fd\u4f1a\u6709\u4e9b\u6742\u4e71\uff0c\u4e0d\u65b9\u4fbf\u77e5\u8bc6\u7d22\u5f15\u548c\u590d\u4e60\uff0c\u6240\u4ee5\u6211\u5927\u81f4\u6309\u7167\u62d3\u6251\u6392\u5e8f\u7684\u987a\u5e8f\u6392\u5217\u5185\u5bb9\uff0c\u503e\u5411\u4e8e\u5b8c\u6574\u5730\u4ecb\u7ecd\u4e00\u4e0b\u524d\u7f6e\uff0c\u518d\u5f15\u5165\u4e4b\u540e\u7684\u5185\u5bb9\u5e76\u9636\u6bb5\u6027\u5c0f\u7ed3\uff0c\u53ef\u80fd\u770b\u8d77\u6765\u6bd4\u8f83\u5510\u7a81\uff0c\u4f46\u662f\u5927\u6982\u5bf9\u56de\u5934\u67e5\u77e5\u8bc6\u70b9\u6bd4\u8f83\u65b9\u4fbf\u3002

    \u8bf4\u660e

    \u672c\u6587\u4e2d\u63d0\u5230\u7684\u6240\u6709\u7684\u300c\u6210\u50cf\u5e73\u9762\u300d\u6307\u7684\u90fd\u662f\u6211\u4eec\u7684\u7b80\u5316\u51e0\u4f55\u6a21\u578b\u4e2d\u7684\u865a\u62df\u6210\u50cf\u5e73\u9762\uff0c\u5e76\u4e0d\u662f\u7269\u7406\u610f\u4e49\u4e0a\u5c0f\u5b54\u6210\u50cf\u6240\u5728\u7684\u90a3\u4e2a\u6210\u53cd\u5411\u5012\u7acb\u50cf\u7684\u5e73\u9762\uff01

    \u8fd0\u52a8\u63a8\u65ad\u7ed3\u6784(Structure from Motion, SfM)\u7528\u4e8e\u4f30\u8ba1\u4e8c\u7ef4\u56fe\u50cf\u4e2d\u7684\u4e09\u7ef4\u7ed3\u6784\uff0c\u901a\u8fc7\u76f8\u673a\u8fd0\u52a8\uff08\u5e73\u79fb\u3001\u65cb\u8f6c\uff09\u5f15\u8d77\u7684\u753b\u9762\u53d8\u5316\u6765\u8ba1\u7b97\u5176\u53cd\u5e94\u7684 3D \u7ed3\u6784\u3002

    \u5728\u673a\u5668\u4eba\u9886\u57df\uff0c\u4e00\u4e2a\u76f8\u5173\u7684\u9886\u57df\u662f \u540c\u65f6\u5b9a\u4f4d\u4e0e\u5730\u56fe\u6784\u5efa(Simultaneous Localization and Mapping, SLAM)\u3002

    \u4e09\u4e2a\u5173\u952e\u95ee\u9898

    1. \u5982\u4f55\u63cf\u8ff0\u76f8\u673a\u7684\u6295\u5f71\u884c\u4e3a\uff0c\u4e5f\u5c31\u662f\u76f8\u673a\u6a21\u578b\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u672c\u5c0f\u7ed3\u6307\u900f\u89c6\u6a21\u578b\uff1b
    2. \u5982\u4f55\u901a\u8fc7\u56fe\u50cf\u6c42\u89e3\u76f8\u673a\u53c2\u6570\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u76f8\u673a\u6807\u5b9a(Camera Calibration)\uff0c\u4ee5\u53ca\u5982\u4f55\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4e0e\u671d\u5411\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\uff1b
    3. \u5982\u4f55\u5229\u7528\u82e5\u5e72\u89c6\u89d2\u8fdb\u884c\u91cd\u5efa\uff1b

    \u5176\u4e2d\uff0c\u7b2c\u4e00\u4e2a\u547d\u9898\u7684\u5185\u5bb9\u5df2\u7ecf\u5728\u7b2c\u4e8c\u8bb2\u4e2d\u6d89\u53ca\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

    \u76f8\u673a\u6807\u5b9a(Camera Calibration)\u5373\u6c42\u89e3\u76f8\u673a\u7528\u6765\u63cf\u8ff0\u76f8\u673a\u6a21\u578b\u7684\u81ea\u8eab\u53c2\u6570\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5185\u53c2(Intrinsic Parameters)\uff1b\u800c\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4ee5\u53ca\u671d\u5411\uff0c\u4e0e\u5185\u53c2\u76f8\u5bf9\u5e94\u7684\uff0c\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5916\u53c2(Extrinsic Parameters)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","title":"\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","text":"

    \u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898

    \u9996\u5148\uff0c\u4e3a\u4e86\u5c55\u5f00\u4e4b\u540e\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898(Visual Localization Problem)\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684\u4e09\u7ef4\u6a21\u578b\uff0c\u4ece\u67d0\u4e2a\u4f4d\u7f6e\u5bf9\u5176\u8fdb\u884c\u62cd\u6444\uff0c\u6c42\u89e3\u62cd\u6444\u4f4d\u7f6e\u548c\u89c6\u89d2\u3002

    \u800c\u4e3a\u4e86\u5c55\u5f00\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u5bf9\u76f8\u673a\u6210\u50cf\u8fd9\u4e2a\u8fc7\u7a0b\u8fdb\u884c\u4e00\u4e2a\u6570\u5b66\u5efa\u6a21\u2014\u2014\u66f4\u8be6\u7ec6\u7684\u6765\u8bf4\uff0c\u662f\u5efa\u6a21\u4e00\u4e2a\u7a7a\u95f4 3D \u70b9\u4e0e\u76f8\u673a\u4e0a\u7279\u5b9a\u50cf\u7d20\u533a\u57df\u7684\u8f6c\u5316\u5173\u7cfb\u3002

    \u9996\u5148\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u6295\u5f71\u6a21\u578b\u7684\u53ef\u89c6\u5316\u8868\u793a\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\uff1a

    \u56de\u987e

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

    \u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

    \u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

    \u5b83\u63d0\u4f9b\u4e86\u4e00\u79cd\u5c06\u76f8\u673a\u6a21\u578b\u6210\u50cf\u539f\u7406\u53ef\u89c6\u5316\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u653e\u5230 3D \u7a7a\u95f4\u4e2d\uff1a

    \u8fd9\u5f20\u56fe\u5927\u81f4\u63cf\u8ff0\u4e86\uff1a\u5728\u7279\u5b9a\u4f4d\u7f6e\u6709\u7740\u7279\u5b9a\u671d\u5411\u7684\u76f8\u673a\u6a21\u578b\u5982\u4f55\u62cd\u5230\u5df2\u77e5 3D \u666f\u8c61\u7684\u7279\u5b9a\u753b\u9762\uff0c\u4f46\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u300cPicture\u300d\u4ee3\u8868\u7684\u662f Image Plane\uff0c\u4e5f\u5c31\u662f\u6210\u50cf\u5e73\u9762\uff0c\u6b64\u65f6\u300c\u5750\u6807\u300d\u7684\u5355\u4f4d\u662f\u957f\u5ea6\uff0c\u5982\u6beb\u7c73\u2014\u2014\u4e0e\u4ee5\u300c\u50cf\u7d20\u300d\u4e3a\u57fa\u672c\u5355\u5143\u7684\u201c\u56fe\u7247\u201d\u6709\u4e00\u5b9a\u533a\u522b\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u4ece 3D \u4e2d\u7684\u67d0\u4e00\u4e2a\u70b9\uff0c\u5230\u56fe\u7247\u4e0a\u7684\u67d0\u5757\u50cf\u7d20\u533a\u57df\uff0c\u6709\u5927\u81f4\u5982\u4e0b\u51e0\u4e2a\u9636\u6bb5\uff1a

    graph LR\n    A[3D \u666f\u8c61] --> B[2D \u6210\u50cf\u5e73\u9762] --> C[\u50cf\u7d20\u56fe\u50cf];

    \u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4e2d\u4ecb\u7ecd\u7684\u4e00\u7cfb\u5217\u5efa\u6a21\uff0c\u662f\u5efa\u7acb\u5728\u4ee5\u76f8\u673a\u4e3a\u53c2\u8003\u7cfb\u7684\u60c5\u51b5\u4e0b\u7684\uff0c\u800c\u5728\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u62e5\u6709\u7684 3D \u666f\u8c61\u4fe1\u606f\u80af\u5b9a\u4e0d\u662f\u901a\u8fc7\u76f8\u673a\u5750\u6807(Camera Coordinates)\u6765\u8868\u793a\u7684\uff0c\u800c\u662f\u7528\u4e16\u754c\u5750\u6807(World Coordinates)\uff0c\u663e\u7136\uff0c\u8fd9\u91cc\u53ea\u5305\u62ec\u5e73\u79fb\u548c\u65cb\u8f6c\uff0c\u4e5f\u5c31\u662f\u7ecf\u8fc7\u4e00\u6b21\u4eff\u5c04\u53d8\u6362\u3002

    \u6211\u4eec\u5bf9\u4e0a\u9762\u90a3\u4e2a\u6d41\u7a0b\u56fe\u7684\u7ed3\u679c\u8fdb\u884c\u4e00\u4e2a\u6539\u8fdb\uff1a

    graph LR\n    A[\"(\u4e16\u754c\u5750\u6807) 3D \u666f\u8c61\"] --> B[\"(\u76f8\u673a\u5750\u6807) 3D \u666f\u8c61\"] --> C[\"(\u6210\u50cf\u5e73\u9762) 2D \u6620\u5c04\"] --> D[\"(\u4f20\u611f\u5668\u5e73\u9762) \u50cf\u7d20\u56fe\u50cf\"];
    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e16\u754c\u5750\u6807-to-\u76f8\u673a\u5750\u6807","title":"\u4e16\u754c\u5750\u6807 to \u76f8\u673a\u5750\u6807","text":"

    \u4e3a\u4e86\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u8f6c\u6362\uff0c\u6211\u4eec\u9700\u8981\u77e5\u9053\u76f8\u673a\u5750\u6807\u5728\u4e16\u754c\u5750\u6807\u4e2d\u7684\u65b9\u5411\u4e0e\u4f4d\u7f6e\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b9e\u9645\u4e0a\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u77e5\u9053\u76f8\u673a\u7684\u5916\u53c2\u3002

    \u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u5c31\u662f\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u80fd\u591f\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7cfb\u4e0b\u5750\u6807\u7684\u8f6c\u6362\uff1a

    \\[ \\underbrace{\\;\\mathbf{x}_w = \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix}\\;}_{\\text{World Coordinates}} \\xrightarrow{\\text{Rotation \\& Movement}} \\underbrace{\\;\\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix}\\;}_{\\text{Camera Coordinates}} \\]

    \u6211\u4eec\u5b9a\u4e49\u5916\u53c2 \\((R,\\mathbf{c}_w)\\)\uff0c\u5206\u522b\u4ee3\u8868\u300c\u4ece\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u65cb\u8f6c\u77e9\u9635\u300d\u548c\u300c\u5728\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u76f8\u673a\u7684\u4e2d\u5fc3\u5750\u6807\u300d\uff0c\u5219\u53d8\u6362\u540e\u7684\u5750\u6807\u5373\u4e3a\uff1a

    \\[ \\mathbf{x}_c = R(\\mathbf{x}_w - \\mathbf{c}_w) = R \\mathbf{x}_w - R \\mathbf{c}_w = R \\mathbf{x}_w + \\mathbf{t},\\ \\ \\text{ where } \\mathbf{t} = -R \\mathbf{c}_w \\\\ \\text{i.e.} \\;\\; \\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\]

    \u5f53\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u7edf\u4e00\uff1a

    \\[ \\mathbf{\\tilde x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\underbrace{\\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix}}_{\\text{Extrinsic Matrix}} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

    \u5916\u53c2\u77e9\u9635

    \u5176\u4e2d\uff0c\u65b0\u5f97\u5230\u7684\u8fd9\u4e2a 44 \u7684\u77e9\u9635\u5c31\u88ab\u79f0\u4e3a\u5916\u53c2\u77e9\u9635(Extrinsic Matrix)*\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

    \\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u5750\u6807-to-\u6210\u50cf\u5e73\u9762","title":"\u76f8\u673a\u5750\u6807 to \u6210\u50cf\u5e73\u9762","text":"

    \u5b9e\u9645\u4e0a\u8fd9\u4e00\u6b65\u5c31\u662f\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4ecb\u7ecd\u8fc7\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5728\u4e0a\u4e00\u6b65\u5df2\u7ecf\u505a\u597d\u4e86\u9f50\u6b21\u5750\u6807\u7684\u94fa\u57ab\uff0c\u6240\u4ee5\u8fd9\u4e00\u6b65\u683c\u5916\u7b80\u5355\u3002

    \\[ \\begin{bmatrix} \\mathbf{x}_{i_{1 \\times 2}} \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

    \u6ce8\u610f

    \u8fd9\u91cc 3*4 \u7684\u77e9\u9635\u8fd8\u4e0d\u662f\u5185\u53c2\u77e9\u9635\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u5e73\u9762-to-\u4f20\u611f\u5668\u5e73\u9762","title":"\u6210\u50cf\u5e73\u9762 to \u4f20\u611f\u5668\u5e73\u9762","text":"

    \u4e4b\u524d\u8bf4\u8fc7\uff0c\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u548c\u4f20\u611f\u5668\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u6700\u5927\u7684\u4e0d\u540c\u5c31\u662f\u8ba1\u91cf\u5355\u4f4d\u4e0d\u540c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u957f\u5ea6\u4fe1\u606f\u8f6c\u5316\u4e3a\u50cf\u7d20\u4fe1\u606f\uff1b\u6b64\u5916\uff0c\u4e2d\u5fc3\u5750\u6807\u4e5f\u9700\u8981\u53d8\u6362\u3002

    \u5047\u8bbe \\(m_x\\) \u548c \\(m_y\\) \u5206\u522b\u662f\u5355\u4f4d\u957f\u5ea6\u4e0a\u7684\u50cf\u7d20\u5bc6\u5ea6\uff08\u4ee5 px/mm \u4e3a\u4f8b\uff09\uff0c\\((c_x,c_y)\\) \u5206\u522b\u662f\u5728\u6210\u50cf\u5e73\u9762\u4e0b\u4f20\u611f\u5668\u5e73\u9762\u7684\u4e2d\u5fc3\u5750\u6807\uff0c\u5219\uff1a

    \\[ \\left\\{ \\begin{aligned} u &= m_x \\cdot x_i + c_x\\\\ v &= m_y \\cdot y_i + c_y \\end{aligned} \\right. \\]

    \u5e26\u5165\u4e0a\u4e00\u8282\u7684\u7ed3\u679c\uff0c\u5f97\u5230\uff08\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u201c\u9f50\u6b21\u5750\u6807\u201d\u662f\u4e0a\u4e00\u8282\u5e26\u6765\u7684\uff0c\u8fd9\u4e00\u8282\u7684\u8ba1\u7b97\u5e76\u4e0d\u9700\u8981\u9f50\u6b21\u5750\u6807\uff09\uff1a

    \\[ \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = ... \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{{\\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix}}}_{\\text{Intrinsic Matrix}} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

    \u5185\u53c2\u77e9\u9635

    \u8fd9\u91cc\u5f97\u5230\u7684\uff0c\u5305\u542b \\(f\\) \u548c \\(m\\) \u7684\u77e9\u9635\u624d\u662f\u5185\u53c2\u77e9\u9635(Intrinsic Matrix)\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

    \\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635\u3001\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","text":"

    \u7b80\u5355\u603b\u7ed3\u4e0a\u9762\u51e0\u4e2a\u6b65\u9aa4\u4e0e\u5185\u53c2\u5916\u53c2\u77e9\u9635\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u4e0b\u9762\u8fd9\u5f20\u6d41\u7a0b\u56fe\uff1a

    graph LR\n    subgraph EM[\"Using Extrinsic Matrix\"]\n        A[\"Coordinate Transformation\"]\n    end\n    subgraph IM[\"Using Intrinsic Matrix\"]\n        B[\"Perspective Projection\"]\n        C[\"Image Plane to Image Sensor Mapping\"]\n    end\n    A ---> B\n    B ---> C
    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635","text":"

    \u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5185\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

    \\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]

    \u5176\u4e2d\u4e3b\u8981\u6709 4 \u4e2a\u81ea\u7531\u5ea6\uff1a\\(m_x f\\)\u3001\\(m_y f\\)\u3001\\(c_x\\)\u3001\\(c_y\\)\u3002

    \u7136\u800c\u5b9e\u9645\u4e0a\u672a\u5fc5\u5982\u6b64\uff0c\u7531\u4e8e\u7578\u53d8\u7b49\u53ef\u80fd\u5b58\u5728\u7684\u539f\u56e0\uff0c\u5b9e\u9645\u7684\u5185\u53c2\u77e9\u9635\uff0c\u6216\u8005\u662f\u6c42\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\u5e76\u4e0d\u4e00\u5b9a\u5f62\u5982\u6b64\uff0c\u6211\u4eec\u5728\u540e\u9762\u4f1a\u63d0\u5230\uff0c\u7531\u4e8e\u67d0\u4e9b\u6027\u8d28\u5206\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\uff0c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u53f3\u4e0a\u4e09\u89d2\u9635\uff0c\u5373\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u7684\u5143\u7d20\u672a\u5fc5\u4e3a\u96f6\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5916\u53c2\u77e9\u9635","title":"\u5916\u53c2\u77e9\u9635","text":"

    \u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5916\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

    \\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]

    \u5176\u4e2d\u4e3b\u8981\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5305\u542b\u4e86\u65cb\u8f6c\u77e9\u9635 \\(R\\) \u548c\u65cb\u8f6c\u540e\u7684\u4f4d\u79fb\u5411\u91cf \\(\\mathbf{t}\\)\u3002

    \u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u65cb\u8f6c\u77e9\u9635\uff0c\u8fd9\u91cc\u7684\u65cb\u8f6c\u77e9\u9635\u540c\u6837\u62e5\u6709 \u6b63\u4ea4 \u548c \\(||R||_2^2 = 1\\) \u7684\u6027\u8d28\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6295\u5f71\u77e9\u9635","title":"\u6295\u5f71\u77e9\u9635","text":"

    \u603b\u7ed3\u5e94\u7528\u4e24\u4e2a\u77e9\u9635\u7684\u4e24\u4e2a\u9636\u6bb5\uff1a

    Camera to Pixel: Intrinsic Matrix

    \\[ \\mathbf{\\tilde{u}} = M_{int} \\mathbf{\\tilde{x}}_c \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x & 0 \\\\ 0 & f_y & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

    World to Camera: Extrinsic Matrix

    \\[ \\mathbf{\\tilde{x}}_c = M_{ext} \\mathbf{\\tilde{x}}_w \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

    \u800c\u5c06\u5b83\u4eec\u7ed3\u5408\uff0c\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u5b8c\u6574\u7684\u6295\u5f71\u77e9\u9635(Projection Matrix)\\(P\\)\uff1a

    \\[ \\mathbf{\\tilde u} = M_{int}M_{ext} \\mathbf{\\tilde x}_w = P \\mathbf{\\tilde x} \\;\\;\\;\\; i.e. \\;\\;\\;\\; \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{\\text{Projection Matrix } P} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1_1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

    \u6839\u636e\u6295\u5f71\u77e9\u9635\u6211\u4eec\u5f97\u5230\u4e86\u50cf\u7d20\u70b9\u4e0e 3D \u666f\u7269\u4e16\u754c\u5750\u6807\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u800c\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u5c31\u662f\u5229\u7528\u8fd9\u4e2a\u5173\u7cfb\u5f0f\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002\u6240\u4ee5\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u540c\u65f6\u77e5\u9053\u82e5\u5e72\u70b9\u7684\u50cf\u7d20\u70b9\u4f4d\u7f6e\u548c 3D \u666f\u7269\u4e16\u754c\u5750\u6807\uff0c\u4e00\u822c\u6765\u8bf4\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u662f\u8fd9\u4e48\u5b9e\u73b0\u7684\uff1a

    \u6b65\u9aa4\u4e00

    \u7ed9\u5b9a\u4e00\u4e2a\u51e0\u4f55\u7279\u6027\u5df2\u77e5\u7684\u6807\u5b9a\u677f\uff0c\u4eba\u4e3a\u5b9a\u4e49\u5176\u4e16\u754c\u5750\u6807\u7cfb\u3002

    \u7531\u4e8e\u5750\u6807\u90fd\u662f\u7531\u6211\u4eec\u4eba\u4e3a\u7ed9\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u6309\u7167\u5c3d\u53ef\u80fd\u65b9\u4fbf\u7684\u539f\u5219\u8fdb\u884c\u89c4\u5212\u3002\u6b64\u5916\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\uff0c\u6807\u5b9a\u677f\u7684\u5185\u5bb9\u4e00\u822c\u662f\u7b80\u5355\u660e\u4e86\u7684\u3002

    \u4f8b\u5982\u56fe\u4e2d\uff0c\u5b9a\u4e49\u4e16\u754c\u5750\u6807\u7cfb\u540e\uff0c\u6bcf\u4e00\u683c\u7684\u8fb9\u957f\u4e3a 5cm\uff0c\u6240\u4ee5\u7d2b\u8272\u70b9\u7684\u5750\u6807\u4e3a \\((0, 15, 20) cm\\)\u3002

    \u6b65\u9aa4\u4e8c

    \u5bfb\u627e\u7279\u5b9a\u5173\u952e\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u505a\u7279\u5f81\u5339\u914d\uff0c\u5373\u82e5\u5e72\u70b9\u5bf9\uff0c\u6bcf\u4e00\u4e2a\u70b9\u5bf9\u90fd\u662f\u4e00\u4e2a 3D \u70b9\u548c\u4e00\u4e2a 2D \u70b9\u7684\u5bf9\u5e94\u3002

    \u9700\u8981\u8bf4\u660e\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5df2\u77e5\u7684\u7279\u5f81\u5339\u914d\u662f\u5efa\u7acb\u5728\u4e24\u5f20\u4e8c\u7ef4\u56fe\u7247\u4e0a\u7684\uff0c\u800c\u73b0\u5728\u8981\u505a\u7684\u662f 3D \u5230 2D \u7684\u5339\u914d\u3002\u4e00\u79cd\u60f3\u6cd5\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 3D \u666f\u8c61\u6309\u7167\u6211\u4eec\u5e0c\u671b\u7684\u65b9\u6cd5\u6620\u5c04\u4e3a 2D \u666f\u8c61\uff0c\u4f8b\u5982\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u62ff\u8fd9\u4e2a\u6807\u5b9a\u677f\u7684 zy \u5e73\u9762\u6765\u8fdb\u884c\u7279\u5f81\u5339\u914d\u3002

    \u6b65\u9aa4\u4e09

    \u6839\u636e\u521a\u521a\u5f97\u5230\u7684\u82e5\u5e72\u5bf9\u5174\u8da3\u70b9\uff0c\u5efa\u7acb\u65b9\u7a0b\uff0c\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002

    \u6bcf\u4e00\u5bf9\u5173\u952e\u70b9\u53ef\u4ee5\u5206\u522b\u6839\u636e \\(u\\) \u548c \\(v\\) \u5efa\u7acb\u4e24\u4e2a\u7b49\u5f0f\uff1a

    \\[ \\underbrace{\\begin{bmatrix} u^{(i)} \\\\ v^{(i)} \\\\ 1 \\end{bmatrix}}_{known} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{unknown} \\underbrace{\\begin{bmatrix} x_w^{(i)} \\\\ y_w^{(i)} \\\\ z_w^{(i)} \\\\ 1 \\end{bmatrix}}_{known} \\\\ i.e. \\;\\;\\;\\; \\left\\{ \\begin{aligned} u^{(i)} &= \\frac{p_{11}x_w^{(i)} + p_{12}y_w^{(i)} + p_{13}z_w^{(i)} + p_{14}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\\\ v^{(i)} &= \\frac{p_{21}x_w^{(i)} + p_{22}y_w^{(i)} + p_{23}z_w^{(i)} + p_{24}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\end{aligned} \\right. \\]

    \u7531\u4e8e\u6295\u5f71\u77e9\u9635\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 6 \u5bf9\u5173\u952e\u70b9 12 \u4e2a\u7b49\u5f0f\u3002

    \u6b65\u9aa4\u56db

    \u5c06\u82e5\u5e72\u65b9\u7a0b\u91cd\u65b0\u6392\u5217\u4e3a\u77e9\u9635\u5f62\u5f0f\uff0c\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\u3002

    \u5c06\u6b65\u9aa4\u4e09\u5f97\u5230\u7684\u5f0f\u5b50\u540c\u5206\u79fb\u9879\uff0c\u5f62\u6210 \\(f(...) = 0\\) \u7684\u5f62\u5f0f\uff0c\u518d\u5c06 12 \u4e2a\u5f0f\u5b50\u7ed3\u5408\u5728\u4e00\u8d77\u5c31\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e2a\u5e9e\u5927\u7684\u77e9\u9635\u65b9\u7a0b\uff1a

    \\[ \\begin{bmatrix} x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & 0 & 0 & 0 & 0 & -u_1x_w^{(1)} & -u_1y_w^{(1)} & -u_1z_w^{(1)} & -u_1 \\\\ 0 & 0 & 0 & 0 & x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & -v_1x_w^{(1)} & -v_1y_w^{(1)} & -v_1z_w^{(1)} & -v_1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & 0 & 0 & 0 & 0 & -u_ix_w^{(i)} & -u_iy_w^{(i)} & -u_iz_w^{(i)} & -u_i \\\\ 0 & 0 & 0 & 0 & x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & -v_ix_w^{(i)} & -v_iy_w^{(i)} & -v_iz_w^{(i)} & -v_i \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & 0 & 0 & 0 & 0 & -u_nx_w^{(n)} & -u_ny_w^{(n)} & -u_nz_w^{(n)} & -u_n \\\\ 0 & 0 & 0 & 0 & x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & -v_nx_w^{(n)} & -v_ny_w^{(n)} & -v_nz_w^{(n)} & -v_n \\\\ \\end{bmatrix} \\begin{bmatrix} p_{11} \\\\ p_{12} \\\\ p_{13} \\\\ p_{14} \\\\ p_{21} \\\\ p_{22} \\\\ p_{23} \\\\ p_{24} \\\\ p_{31} \\\\ p_{32} \\\\ p_{33} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\]

    \u6211\u4eec\u5c06\u5176\u7b80\u5199\uff0c\u4e5f\u5c31\u662f \\(A\\mathbf{p} = 0\\)\u3002

    \u6b65\u9aa4\u4e94

    \u6c42\u89e3 \\(A\\mathbf{p} = 0\\) \u5f97\u5230 \\(\\mathbf{p}\\)\u3002

    \u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u7684\u64cd\u4f5c\uff0c\u8fd9\u91cc\u5f97\u5230\u7684 \\(mathbf{p}\\) \u4e5f\u6709\u591a\u79cd\u53ef\u80fd\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5bf9\u5b83\u8fdb\u884c\u7ea6\u675f\uff0c\u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

    \u4e00\u822c\u6211\u4eec\u9009\u62e9\u540e\u8005\uff0c\u4e5f\u5c31\u662f\u8ba9 \\(mathbf{p}\\) \u7684\u957f\u5ea6\u4e3a 1\uff0c\u6b64\u65f6\u81ea\u7531\u5ea6\u524a\u51cf\u4e3a 11\uff0c\u4ecd\u7136\u9700\u8981\u516d\u5bf9\u5173\u952e\u70b9\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u65b9\u7a0b \\(A\\mathbf{p} = 0\\) \u8f6c\u5316\u4e3a \\(\\mathop{minimize} \\limits_\\mathbf{p} ||A\\mathbf{p}||^2 \\;\\; \\text{ such that } ||\\mathbf{p}||^2 = 1\\) \u7684\u4f18\u5316\u95ee\u9898\uff0c\u7531\u4e8e\u548c\u4e4b\u524d\u7684\u4e00\u6837\uff0c\u6240\u4ee5\u4e0d\u518d\u8d58\u8ff0\u3002

    \u5206\u89e3\u6295\u5f71\u77e9\u9635

    \u6839\u636e\u6295\u5f71\u77e9\u9635\u7684\u76f8\u5173\u5185\u5bb9\u6211\u4eec\u77e5\u9053\uff1a

    \u901a\u5e38\u6765\u8bf4\uff0c\u5c06\u4e00\u4e2a\u77e9\u9635\u5206\u89e3\u4e3a\u4e24\u4e2a\u7279\u5b9a\u77e9\u9635\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u4f46\u662f\u6b64\u5904\u7684\u5185\u53c2\u77e9\u9635\u7684\u5b50\u5f0f\u5177\u6709\u201c\u4e0a\u4e09\u89d2\u9635\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u5916\u53c2\u77e9\u9635\u4e2d\u65cb\u8f6c\u77e9\u9635\u5b50\u5f0f\u5177\u6709\u201c\u6b63\u4ea4\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u800c\u4e14\u89c2\u5bdf 0 \u7684\u5206\u5e03\uff0c\u6211\u4eec\u53d1\u73b0 \\([p_{11} \\sim p_{33}]\\) \u7531 \\(KR\\) \u5f97\u5230\u3002\u6240\u4ee5\u6211\u4eec\u6070\u597d\u53ef\u4ee5\u4f7f\u7528QR \u5206\u89e3\u6765\u5b9e\u73b0\uff1a

    \\[ \\begin{bmatrix} p_{11} & p_{12} & p_{13} \\\\ p_{21} & p_{22} & p_{23} \\\\ p_{31} & p_{32} & p_{33} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} = KR \\]

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4f7f\u7528 QR \u5206\u89e3\u5f97\u5230\u7684\u4e09\u89d2\u9635\u5e76\u4e0d\u4e00\u5b9a\u5177\u6709\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u5143\u7d20\u4e3a 0 \u7684\u6027\u8d28\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u5df2\u7ecf\u77e5\u9053\u4e86\u9664\u4e86 \\(t_x,t_y,t_z\\) \u4ee5\u5916\u7684\u6240\u6709\u672a\u77e5\u5143\u4e86\uff0c\u6240\u4ee5\u5f53\u7136\u53ef\u4ee5\u56de\u8fc7\u6765\u7ee7\u7eed\u6c42\u5b83\u4eec\u3002

    \\[ \\because \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} = K \\mathbf{t} \\\\ \\therefore \\mathbf{t} = K^{-1} \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} \\]

    \u6ce8\u610f

    \u9700\u8981\u7279\u522b\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u5728\u6211\u4eec\u4e0a\u9762\u6d89\u53ca\u7684\u8ba8\u8bba\u4e2d\uff0c\u6211\u4eec\u90fd\u6ca1\u6709\u8003\u8651\u7578\u53d8\u5e26\u6765\u7684\u5f71\u54cd\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","title":"\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","text":"

    \u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898(Perspective-n-Point Problem)\uff0c\u5373 PnP \u95ee\u9898\uff0c\u6307\u7684\u662f\u5df2\u77e5\u5185\u53c2\u6c42\u5916\u53c2\u7684\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u3002

    \u5e38\u89c1\u7684\u89e3\u51b3\u65b9\u6848\u6709\u5982\u4e0b\u51e0\u79cd\u3002

    DLT Direct Linear Transform

    \u4e5f\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u505a\u6cd5\u3002

    P3P

    \u81f3\u5c11\u9700\u8981 3 \u7ec4\u5bf9\u5e94\u5173\u7cfb\u624d\u80fd\u6c42\u89e3\u76f8\u673a\u4f4d\u7f6e\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a\u989d\u5916\u7684\u70b9\u6765\u4fdd\u8bc1\u7b54\u6848\u7684\u552f\u4e00\u6027\uff08\u5426\u5219\u4e00\u822c\u6765\u8bf4\u4f1a\u6709\u56db\u4e2a\u89e3\uff09

    \u5176\u4e3b\u8981\u601d\u8def\u662f\u6839\u636e\u56fe\u50cf\uff0c\u4f7f\u7528\u4f59\u5f26\u5b9a\u5f8b\u8fdb\u884c\u6c42\u89e3\u3002

    \u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

    PnP

    n > 3 \u7684\u60c5\u51b5\u7684\u505a\u6cd5\u3002

    \u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u7406\u8bba\u548c\u5b9e\u9645\u7684\u70b9\u8bef\u5dee\u2014\u2014\u91cd\u6295\u5f71\u8bef\u5dee(reprojection error)\u6700\u5c0f\u65f6\u7684\u5916\u53c2\uff0c\u6ce8\u610f\u5c06\u9f50\u6b21\u5750\u6807\u8f6c\u5316\u4e3a\u4e8c\u7ef4\u5750\u6807\u3002

    Initialized by P3P, optimized by Gauss-Newton\u3002

    \u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

    EPnP

    \u76ee\u524d\u6700\u53d7\u6b22\u8fce\u7684\u505a\u6cd5\uff0cO(N) \u5341\u5206\u9ad8\u6548\u4e5f\u5341\u5206\u51c6\u786e\uff0c\u5927\u6982\u662f\u7528\u56db\u4e2a\u63a7\u5236\u70b9\u8868\u793a\u5176\u4ed6\u70b9\u3002

    \u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

    \u8bf4\u660e

    \u672c\u8282\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\uff0c\u8bb2\u7684\u662f\u5982\u4f55\u4e09\u7ef4\u91cd\u5efa\u5f97\u5230\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u5982\u4f55\u5f97\u5230\u7a20\u5bc6\u7684\u4e09\u7ef4\u91cd\u5efa\uff0c\u5c06\u6210\u4e3a\u4e0b\u4e00\u8282\u7684\u91cd\u70b9\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

    \u53cc\u76ee\u89c6\u89c9(Stereo Vision)\uff1a\u5df2\u77e5\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\uff0c\u6839\u636e\u4e24\u5f20\u56fe\u50cf\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u7684\u5916\u53c2\u548c\u76ee\u6807\u7684 3D \u7ed3\u6784\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5bf9\u6781\u51e0\u4f55","title":"\u5bf9\u6781\u51e0\u4f55","text":"

    \u5728\u524d\u4e00\u8282\u6211\u4eec\u4ecb\u7ecd\u4e86\u5982\u4f55\u5728\u300c3D \u666f\u8c61\u6a21\u578b\u5df2\u77e5\u300d\u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\u6216\u8fdb\u884c\u672a\u77e5\u4f30\u8ba1\uff0c\u4f46\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u5982\u4f55\u4ece 2D \u56fe\u7247\u4e2d\u91cd\u5efa\u51fa 3D \u6a21\u578b\u3002

    \u8ba9\u6211\u4eec\u8003\u8651\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa\u4e2d\u7684\u60c5\u5f62\u2014\u2014\u4e24\u4e2a\u76f8\u673a\u4e0b\u4e0d\u540c\u666f\u8c61\u4e4b\u95f4\u663e\u7136\u662f\u5b58\u5728\u4e00\u5b9a\u7684\u51e0\u4f55\u5173\u7cfb\u7684\uff0c\u800c\u5bf9\u6781\u51e0\u4f55(Epipolar Geometry)\u7740\u773c\u4e8e\u4e0b\u9762\u8fd9\u4e09\u4e2a\u76ee\u6807\u4e4b\u95f4\u7684\u51e0\u4f55\u5173\u7cfb\uff1a\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\)\uff08\u6216\u8005 \\(P\\)\uff09\u3002

    Wiki page

    https://en.wikipedia.org/wiki/Epipolar_geometry

    Epipolar geometry is the geometry of stereo vision. When two cameras view a 3D scene from two distinct positions, there are a number of geometric relations between the 3D points and their projections onto the 2D images that lead to constraints between the image points. These relations are derived based on the assumption that the cameras can be approximated by the pinhole camera model.

    \u5bf9\u6781\u51e0\u4f55\u662f\u7acb\u4f53\u89c6\u89c9\u7684\u51e0\u4f55\u5b66\u3002\u5f53\u4e24\u4e2a\u6444\u50cf\u673a\u4ece\u4e24\u4e2a\u4e0d\u540c\u7684\u4f4d\u7f6e\u67e5\u770b 3D \u573a\u666f\u65f6\uff0c3D \u70b9\u4e0e\u5b83\u4eec\u5728 2D \u56fe\u50cf\u4e0a\u7684\u6295\u5f71\u4e4b\u95f4\u5b58\u5728\u8bb8\u591a\u51e0\u4f55\u5173\u7cfb\uff0c\u5bfc\u81f4\u56fe\u50cf\u70b9\u4e4b\u95f4\u5b58\u5728\u7ea6\u675f\u3002\u8fd9\u4e9b\u5173\u7cfb\u662f\u57fa\u4e8e\u76f8\u673a\u53ef\u4ee5\u7528\u9488\u5b54\u76f8\u673a\u6a21\u578b\u8fd1\u4f3c\u7684\u5047\u8bbe\u5bfc\u51fa\u7684\u3002

    \u2014\u2014Wiki

    \u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u5bf9\u6781\u51e0\u4f55\u4e2d\u7684\u51e0\u4e2a\u6982\u5ff5\uff0c\u6211\u4eec\u5c06\u501f\u52a9\u4e0a\u56fe\u8fdb\u884c\u8bf4\u660e\u3002

    \u57fa\u7ebf

    \u57fa\u7ebf(Baseline)\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\uff0c\u5373 \\(OO'\\)\u3002

    \u5bf9\u6781\u70b9

    \u5bf9\u6781\u70b9(Epipole)\u6307\u7684\u662f\uff1a\u5176\u4e2d\u4e00\u4e2a\u76f8\u673a\u7684\u76f8\u673a\u4e2d\u5fc3\u5728 \u53e6\u5916\u4e00\u4e2a\u76f8\u673a\u7684\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u70b9\uff0c\u5373 \\(e_l\\) \u548c \\(e_r\\)\uff0c\u4e14\u4ed6\u4eec\u5728\u65e2\u5b9a\u7684\u5177\u4f53\u53cc\u76ee\u6a21\u578b\u4e0b\u662f\u552f\u4e00\u7684\u3002

    \u5bf9\u6781\u9762

    \u5bf9\u6781\u9762(Epipolar Plane)\u6307\u7684\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u8fd9\u4e09\u4e2a\u70b9\u6240\u786e\u5b9a\u7684\u7a7a\u95f4\u5e73\u9762\u3002

    \u5176\u4e2d\u6709\u4e00\u4e2a\u6027\u8d28\uff0c\u5bf9\u6781\u9762\u603b\u662f\u7ecf\u8fc7\u76f8\u673a\u4e2d\u5fc3\u8fde\u7ebf \\(O_L O_R\\)\uff0c\u6240\u4ee5\u5bf9\u4e8e\u67d0\u4e2a\u666f\u7269\u4e2d\u7684\u70b9 \\(X_i\\)\uff0c\u5176\u5bf9\u6781\u9762\u90fd\u662f\u552f\u4e00\u7684\u3002\uff08\u663e\u7136\uff0c\u53cd\u8fc7\u6765\u4e0d\u6210\u7acb\u3002\uff09

    \u5bf9\u6781\u7ebf

    \u5bf9\u6781\u7ebf(Epipolar Line)\u662f\u5173\u4e8e\u52a8\u70b9 \\(X\\) \u6765\u8bf4\u7684\uff0c\u4f53\u73b0\u4e3a\u5bf9\u6781\u9762\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u7ebf\u3002

    \u5047\u8bbe\u6211\u4eec\u53ea\u77e5\u9053 \\(X_L\\) \u800c\u4e0d\u77e5\u9053 \\(X_R\\)\uff0c\u90a3\u4e48 \\(X\\) \u53ef\u80fd\u5728 \\(O_L X_L\\) \u8fd9\u6761\u7ebf\u4e0a\u7684\u4efb\u4e00\u70b9\uff1b\u800c\u8fd9\u6761\u7ebf\u5728 \\(R\\) \u5e73\u9762\u4e0a\u7684\u6295\u5f71\u5c31\u662f\u4e00\u6761\u5bf9\u6781\u7ebf\uff0c\u5b83\u7684\u542b\u4e49\u662f\u53ef\u80fd\u7684 \\(X_R\\) \u7684\u8f68\u8ff9\u3002

    \u6b64\u5916\uff0c\u5bf9\u6781\u7ebf\u6709\u4e00\u4e2a\u6027\u8d28\uff1a\u5bf9\u6781\u7ebf\u5fc5\u5b9a\u7ecf\u8fc7\u5bf9\u6781\u70b9\uff0c\u800c\u7ecf\u8fc7\u5bf9\u6781\u70b9\u7684\u4efb\u610f\u4e00\u6761\u76f4\u7ebf\uff08\u5f53\u7136\u5f97\u5728\u6210\u50cf\u5e73\u9762\u4e0a\uff09\u90fd\u53ef\u4ee5\u662f\u5bf9\u6781\u7ebf\u3002

    \ud83d\udc49 Wiki\u3002

    \u5176\u4ed6\u8bf4\u660e

    \u56fe\u4e2d\u8fd8\u9700\u8981\u989d\u5916\u89e3\u91ca\u7684\u5c31\u662f \\(X_L\\) \u548c \\(X_R\\)\uff0c\u5b83\u4eec\u5206\u522b\u662f\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u50cf\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6781\u7ebf\u7ea6\u675f","title":"\u6781\u7ebf\u7ea6\u675f","text":"

    \u73b0\u5728\u6211\u4eec\u5173\u6ce8\u5bf9\u6781\u9762\uff0c\u7740\u773c\u4e8e\u89e3\u51b3\u4e0b\u9762\u8fd9\u6837\u4e00\u4e2a\u95ee\u9898\u3002

    \u5176\u4e2d\u4e24\u4fa7\u7684\u76f8\u673a\u7406\u6240\u5f53\u7136\u7684\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5750\u6807\u7cfb\uff0c\u73b0\u5728\u6211\u4eec\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff08\u56fe\u4e2d\u8c8c\u4f3c\u6807\u9519\u4e86\u65b9\u5411\uff09\uff0c\\(\\mathbf{x}_l = \\overrightarrow{O_l P}\\) \u800c \\(\\mathbf{x}_r = \\overrightarrow{O_r P}\\) \u3002

    \u4e0b\u9762\u5f00\u59cb \u53d8\u9b54\u6cd5 \u8fdb\u884c\u4e00\u4e9b\u53d8\u5316\uff1a

    \u5f62\u5f0f \u2461 \u63a8\u7406\u8fc7\u7a0b

    \u9996\u5148\uff0c\u5728\u540c\u4e00\u4e2a\uff08\u4efb\u4f55\u4e00\u4e2a\uff09\u7b1b\u5361\u5c14\u5750\u6807\u7cfb\u4e2d\uff0c\u90fd\u6709 \\(\\mathbf{x}_l \\cdot (\\mathbf{t} \\times \\mathbf{x}_l) = 0\\)\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\\(\\mathbf{t}\\) \u548c \\(\\mathbf{x}_l\\) \u90fd\u662f\u5bf9\u6781\u9762\u5185\u7684\u4e24\u4e2a\u4e0d\u5e73\u884c\uff08\u6211\u4eec\u5047\u5b9a\u8fd9\u4e00\u70b9\u6052\u6210\u7acb\uff09\u7684\u5411\u91cf\uff0c\u90a3\u4e48 \\(\\mathbf{t} \\times \\mathbf{x}_l\\) \u7684\u7ed3\u679c\u5fc5\u7136\u662f\u4e00\u4e2a\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u7684\u5411\u91cf\u3002\u800c\u8fd9\u4e2a\u5411\u91cf\u5fc5\u7136\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u4e0a\u4efb\u610f\u4e00\u4e2a\u5411\u91cf\uff0c\u6240\u4ee5\u4e0a\u5f0f\u7ed3\u679c\u4e3a \\(0\\)\u3002\u800c\u5c06\u8fd9\u4e2a\u5f0f\u5b50\u5199\u6210\u77e9\u9635\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff0c\u5c31\u662f\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} \\right) = 0 \\;\\;\\;\\;\\;\\left( 1 \\right) \\]

    \u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u5c06 \\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\) \u4e5f\u5199\u6210\u77e9\u9635\u548c\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff1a

    \\[ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\;\\;\\;\\;\\;\\left( 2 \\right) \\]

    \u6211\u4eec\u5c06 \\((2)\\) \u5f0f\u5e26\u5165 \\((1)\\) \u5f0f\uff0c\u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\left( \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\right) = 0 \\]

    \u7a0d\u4f5c\u53d8\u5316\uff08\u628a\u542b \\(t\\) \u7684\u65b9\u9635\u62ff\u5230\u62ec\u53f7\u91cc\u9762\uff09\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} }_{\\mathbf{t} \\times \\mathbf{t} = 0} \\right) = 0 \\]

    \u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u91cc\u9762\u51fa\u6765\u4e86\u4e00\u4e2a \\(0\\)\uff0c\u628a\u5b83\u6458\u6389\u4ee5\u540e\u5c31\u53d8\u6210\u4e86\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} }_{\\text{Essential Matrix E}} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u8fd9\u4e2a\u95ee\u9898\uff1a

    \u5f62\u5f0f \u2460\uff1a\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff1b

    \u5229\u7528\u5bf9\u6781\u51e0\u4f55\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u8f6c\u6362\u4e3a\u4e86\uff1a

    \u5f62\u5f0f \u2461\uff1a\u6c42\u89e3 \\(E\\) \u4f7f\u5f97 \\(\\mathbf{x}_l^T E \\mathbf{x}_r = 0\\)\uff0c\u5176\u4e2d \\(E = T_{\\times}R\\)\uff0c\u5176\u4e2d \\(T\\) \u662f \\(\\mathbf{t}\\) \u7684\u77e9\u9635\u5f62\u5f0f\uff1b

    \u7136\u800c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u8fdb\u4e00\u6b65\u53d8\u5316\u3002

    \u5f62\u5f0f \u2462 \u63a8\u7406\u8fc7\u7a0b

    \u6839\u636e\u900f\u89c6\u6295\u5f71\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a

    \\[ \\small \\begin{aligned} \\text{Left Camera} && \\text{Right Camera} \\\\ z_l \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} & = \\underbrace{ \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} \\\\ 0 & f_y^{(l)} & o_y^{(l)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_l} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} & z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\underbrace{ \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} \\\\ 0 & f_y^{(r)} & o_y^{(r)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_r} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} \\\\ \\mathbf{x}_l^T &= \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T & \\mathbf{x}_r &= K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} \\end{aligned} \\]

    \u5c06\u4e0a\u5f0f\u5e26\u5165\u5230\u5f62\u5f0f \u2461 \u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

    \u5c31\u53d8\u6210\u4e86\uff1a

    \\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

    \u8fd9\u65f6\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\\(\\mathbf{u}_l\\) \u548c \\(\\mathbf{u}_r\\) \u7ec8\u4e8e\u662f\u6211\u4eec\u5df2\u77e5\u7684\u4e1c\u897f\u4e86\uff0c\u8fd9\u4e0b\u6211\u4eec\u53ef\u4ee5\u6c42\u89e3\u57fa\u672c\u77e9\u9635 \\(F\\)\uff0c\u800c\u7531\u4e8e\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u53ef\u4ee5\u5012\u8fc7\u6765\u63a5\u7740\u5f97\u5230\u672c\u5f81\u77e9\u9635 \\(E\\)\uff0c\u6700\u540e\u901a\u8fc7 SV \u5206\u89e3\u5f97\u5230\u6211\u4eec\u60f3\u8981\u7684 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6c42\u89e3\u57fa\u672c\u77e9\u9635\u3001\u672c\u5f81\u77e9\u9635\u3001\u5750\u6807\u53d8\u6362\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

    \u6c42\u89e3\u6b65\u9aa4

    \u5bf9\u4e8e\u5173\u952e\u70b9 \\(i\\)\uff0c\u6211\u4eec\u9700\u8981\u6c42\u89e3\uff1a

    \\[ \\begin{bmatrix} u_l^{(i)} & v_l^{(i)} & 1 \\end{bmatrix} \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\begin{bmatrix} u_r^{(i)} \\\\ v_r^{(i)} \\\\ 1 \\end{bmatrix} = 0 \\]

    \u5c06\u5176\u5c55\u5f00\uff1a

    \\[ \\left( f_{11} u_r^{(i)} + f_{12} v_r^{(i)} + f_13 \\right) u_l^{(i)} + \\left( f_{21} u_r^{(i)} + f_{22} v_r^{(i)} + f_23 \\right) v_l^{(i)} + f_{31} u_r^{(i)} + f_{32} v_r^{(i)} + f_33 = 0. \\]

    \u63a5\u4e0b\u6765\u5c06\u6240\u6709\u7684 \\(m\\) \u7ec4\u65b9\u7a0b\u5408\u518d\u540c\u4e00\u4e2a\u77e9\u9635\u91cc\uff08\u6211\u4eec\u81f3\u5c11\u9700\u8981\u989d\u5916\u7684 8 \u4e2a\u65b9\u7a0b\uff0c\u4e4b\u540e\u4f1a\u8bf4\uff09\uff1a

    \\[ \\underbrace{ \\begin{bmatrix} u_l^{(1)}u_r^{(1)} & u_l^{(1)}v_r^{(1)} & u_l^{(1)} & v_l^{(1)}u_r^{(1)} & v_l^{(1)}v_r^{(1)} & v_l^{(1)} & u_r^{(1)} & v_r^{(1)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(i)}u_r^{(i)} & u_l^{(i)}v_r^{(i)} & u_l^{(i)} & v_l^{(i)}u_r^{(i)} & v_l^{(i)}v_r^{(i)} & v_l^{(i)} & u_r^{(i)} & v_r^{(i)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(m)}u_r^{(m)} & u_l^{(m)}v_r^{(m)} & u_l^{(m)} & v_l^{(m)}u_r^{(m)} & v_l^{(m)}v_r^{(m)} & v_l^{(m)} & u_r^{(m)} & v_r^{(m)} & 1 \\\\ \\end{bmatrix} }_{A: \\text{ Known }} \\underbrace{ \\begin{bmatrix} f_{11} \\\\ f_{12} \\\\ f_{13} \\\\ f_{21} \\\\ f_{22} \\\\ f_{23} \\\\ f_{31} \\\\ f_{32} \\\\ f_{33} \\\\ \\end{bmatrix} }_{\\mathbf{f}: \\text{ Unknown }} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\\\ \\text{i.e.} \\;\\;\\;\\; A\\mathbf{f}=0 \\]

    \u5f53\u7136\uff0c\u50cf\u4e4b\u524d\u4e00\u6837\uff0c\u7531\u4e8e\u8fd9\u4e2a\u65b9\u7a0b\u53ef\u4ee5\u89e3\u51fa \\(k\\mathbf{f}, \\forall k\\in \\text{Z}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7ed9 \\(\\mathbf{f}\\) \u4e00\u4e2a\u7ea6\u675f\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u53d6 \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u4e8e\u662f\u95ee\u9898\u5c31\u53c8\u53d8\u6210\u4e86\uff1a

    \\[ \\mathop{minimize} \\limits_{\\mathbf{f}} ||A\\mathbf{f}||^2 \\text{ such that } ||\\mathbf{f}||^2 = 1 \\]

    \u4e3a\u4e86\u6c42\u89e3 \\(F\\) \u4e2d\u7684 9 \u4e2a\u672a\u77e5\u6570\uff0c\u6211\u4eec\u5df2\u7ecf\u6709\u4e00\u4e2a\u786e\u5b9a\u7684\u7ea6\u675f\u65b9\u7a0b\u662f \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u989d\u5916 8 \u4e2a\u65b9\u7a0b\u3002

    \u6c42\u89e3\u5f97\u5230 \\(F\\) \u4ee5\u540e\uff0c\u6839\u636e \\(E = K_l^T F K_r\\) \u5f97\u5230 \\(E\\)\u3002

    \u524d\u9762\u4e5f\u5df2\u7ecf\u8bf4\u8fc7\uff0c\u5bf9 \\(E\\) \u8fdb\u884c SV \u5206\u89e3\u5c31\u53ef\u4ee5\u5f97\u5230 \\(R\\) \u548c \\(T_{\\times}\\)\uff0c\u5bf9 \\(T_{\\times}\\) \u91cd\u6392\u5217\u5c31\u5f97\u5230\u4e86 \\(\\mathbf{t}\\)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u672c\u5f81\u77e9\u9635","title":"\u672c\u5f81\u77e9\u9635","text":"

    \u66f4\u8fdb\u4e00\u6b65\u5316\u7b80\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u4e2d\u95f4\u4e24\u4e2a\u77e9\u9635\u5408\u8d77\u6765\uff0c\u5f97\u5230\u672c\u5f81\u77e9\u9635(Essential Matrix)\\(E\\)\uff1a

    \\[ E=T_{\\times}R= \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\]

    \u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\;\\;\\;\\text{i.e.} \\;\\;\\; \\mathbf{x}_l^T E \\mathbf{x}_r = 0 \\]

    \u672c\u5f81\u77e9\u9635\u7684\u6027\u8d28

    \u7531\u4e8e Essential Matrix \u7684\u5b9a\u4e49\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a

    \\(T_{\\times}\\) \u53cd\u5bf9\u79f0(Skew-Symmetric)\uff0c\\(R\\) \u6b63\u4ea4(Orthonormal)\u3002

    \u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5947\u5f02\u503c\u5206\u89e3(Singular Value Decomposition)\u6216\u8005\u8bf4 SV \u5206\u89e3\u6765\u53bb\u8026\u5408\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u57fa\u672c\u77e9\u9635","title":"\u57fa\u672c\u77e9\u9635","text":"

    \u6211\u4eec\u53ef\u4ee5\u5c06\u5e38\u6570 \\(z_l\\) \u548c \\(z_r\\) \u7ea6\u6389\uff0c\u5e76\u4e14\u5408\u5e76\u4e2d\u95f4\u7684\u4e09\u4e2a\u77e9\u9635\uff0c\u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} \\underbrace{ (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} }_{\\text{Fundamental Matrix F}} \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

    \u4e8e\u662f\u5f97\u5230\u4e86\u57fa\u672c\u77e9\u9635(Fundamental Matrix)\\(F\\)\uff1a

    \\[ F = (K_l^{-1})^T E K_r^{-1} = (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} = \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\]

    \u8fd9\u5c31\u662f\u6211\u4eec\u7684\u5f62\u5f0f \u2462\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e09\u89d2\u6d4b\u91cf","title":"\u4e09\u89d2\u6d4b\u91cf","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u5982\u679c\u5047\u8bbe\u6570\u636e\u90fd\u662f\u51c6\u786e\u7684\uff0c\u90a3\u4e48 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u5e94\u5f53\u76f8\u4ea4\u4e8e\u7a7a\u95f4\u70b9 \\(X\\)\u3002\u800c\u4e09\u89d2\u6d4b\u91cf\u63cf\u8ff0\u7684\u5c31\u662f\u5982\u4f55\u901a\u8fc7\u8fd9\u6837\u4e00\u4e2a\u8fc7\u7a0b\u5f97\u5230\u7a7a\u95f4\u70b9 \\(X\\)\u3002

    \u6211\u4eec\u5728 \u6781\u7ebf\u7ea6\u675f \u91cc\u5df2\u7ecf\u77e5\u9053\u4e86 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\) \u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u73b0\u5728\u5df2\u7ecf\u6709\u4e86 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u7684\u65b9\u7a0b\u4e86\u3002\u90a3\u4e48\u5e94\u5f53\u80fd\u591f\u89e3\u51fa\u8fd9\u4e2a \\(X\\)\uff0c\u4e0d\u8fc7\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u6709\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u53ea\u80fd\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u5f97\u5230\u8fd1\u4f3c\u89e3\u3002

    \u5177\u4f53\u7684\u63a8\u7406\u6b65\u9aa4\u5982\u4e0b\uff1a

    \u6c42\u89e3\u6b65\u9aa4

    \u9996\u5148\u6211\u4eec\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u6539\u5199\u53d8\u6362\u65b9\u7a0b\uff0c\u5e76\u6700\u7ec8\u5199\u6210\u5173\u4e8e \\(\\mathbf{u}\\) \u7684\u5f62\u5f0f \\begin{aligned} \\text{Left Camera} \\\\ \\because \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} ,\\ \\ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\therefore \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_l &= P_l \\mathbf{\\tilde x}_r \\\\ \\text{Right Camera} \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} & 0 \\\\ 0 & f_y^{(r)} & o_y^{(r)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_r &= M_{int_r} \\mathbf{\\tilde x}_r \\end{aligned}

    \u7a0d\u4f5c\u603b\u7ed3\uff0c\u5c31\u662f\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e24\u4e2a\u5173\u7cfb\uff1a

    \\[ \\mathbf{\\tilde u}_l = P_l \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14} \\\\ m_{21} & m_{22} & m_{23} & m_{24} \\\\ m_{31} & m_{32} & m_{33} & m_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\\\ \\mathbf{\\tilde u}_l = M_{int_r} \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\]

    \u6211\u4eec\u53d1\u73b0\uff0c\u9664\u4e86 \\(\\mathbf{x}_r\\) \u7684\u90e8\u5206\u90fd\u662f\u5df2\u77e5\u7684\uff0c\u6b64\u65f6\u6211\u4eec\u5c31\u53ef\u4ee5\u300c\u8054\u7acb\u300d\u8fd9\u4e24\u4e2a\u65b9\u7a0b\uff0c\u5c06\u4ed6\u4eec\u91cd\u6392\u5217\u4e3a\u5982\u4e0b\u5f62\u5f0f\uff1a

    \\[ \\underbrace{ \\begin{bmatrix} u_r m_{31} - m_{11} & u_r m_{32} - m_{12} & u_r m_{33} - m_{13} \\\\ v_r m_{31} - m_{21} & v_r m_{32} - m_{22} & v_r m_{33} - m_{23} \\\\ u_l p_{31} - p_{11} & u_l p_{32} - p_{12} & u_l p_{33} - p_{13} \\\\ v_l p_{31} - p_{21} & v_l p_{32} - p_{22} & v_l p_{33} - p_{23} \\end{bmatrix} }_{A_{4\\times 3}} \\underbrace{ \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} }_{\\mathbf{x}_r} = \\underbrace{ \\begin{bmatrix} m_{14} - m_{34} \\\\ m_{24} - m_{34} \\\\ p_{14} - p_{34} \\\\ p_{24} - p_{34} \\end{bmatrix} }_{\\mathbf{b}} \\]

    \u6211\u4eec\u5df2\u77e5 \\(A_{4 \\times 3}\\) \u548c \\(\\mathbf{b}\\)\uff0c\u9700\u8981\u6c42 \\(\\mathbf{x}_r\\)\u3002

    \u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u63d0\u5230\uff0c\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u5b58\u5728\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u6ca1\u53d1\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u800c\u662f\u53ef\u4ee5\u4f7f\u7528\u6700\u5c0f\u4e8c\u4e58\u7684\u7ed3\u8bba\uff0c\u5f97\u5230\uff1a

    \\[ \\mathbf{x}_r = (A^TA)^{-1}A^T\\mathbf{b} \\]

    \u8fd8\u6709\u4e00\u79cd\u6539\u8fdb\uff0c\u5c31\u662f\u5c06\u5b83\u8f6c\u5316\u6210\u6700\u5c0f\u5316\u518d\u6295\u5f71\u8bef\u5dee(Reprojection Error)\u7684\u4f18\u5316\u95ee\u9898\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u6c42\u4e00\u4e2a \\(X\\) \u4f7f\u5f97\u5b83\u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u548c\u5b9e\u9645\u7684\u6295\u5f71\u4e4b\u95f4\u7684\u8bef\u5dee\u6700\u5c0f\u3002

    \u5b9a\u4e49\u518d\u6295\u5f71\u8bef\u5dee\u4e3a\uff1a

    \\[ cost(P) = dist(\\mathbf{u}_l, \\cap{\\mathbf{u}_l})^2 + dist(\\mathbf{u}_r, \\cap{\\mathbf{u}_r})^2 \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5177\u4f53\u6b65\u9aa4","title":"\u5177\u4f53\u6b65\u9aa4","text":"

    \u524d\u63d0

    \u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\\(K\\) \u5df2\u77e5\u3002

    \u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u53c2\u6570\u5c06\u76f8\u673a\u6210\u50cf\u53ef\u89c6\u5316\uff0c\u5982\u4e0b\u56fe\u3002

    \u5176\u4e2d\u4e0b\u6807\u4e3a \\(l\\) \u7684\u8868\u793a\u5de6\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\uff0c\u4e0b\u6807\u4e3a \\(r\\) \u7684\u8868\u793a\u53f3\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\u3002

    \u6b65\u9aa4\u4e00

    \u5bf9\u4e24\u5f20\u56fe\u7247\u8fdb\u884c \u5173\u952e\u70b9\u5339\u914d\uff0c\u627e\u5230\u81f3\u5c11 8 \u5bf9\u5339\u914d\u7279\u5f81\u3002

    \u300c\u4e3a\u4ec0\u4e48\u9700\u8981 8 \u5bf9\u300d\u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u4e2d\u5df2\u7ecf\u8bf4\u660e\u3002

    \u6b65\u9aa4\u4e8c

    \u6309\u7167 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u63d0\u5230\u7684\u6b65\u9aa4\uff0c\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u5750\u6807\u7684\u53d8\u6362\u53c2\u6570 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

    \u6b65\u9aa4\u4e09

    \u63a5\u4e0b\u6765\u5bf9\u4e8e\u6bcf\u4e00\u5bf9\u5339\u914d\u7684\u5173\u952e\u70b9\uff0c\u6309\u7167 #\u4e09\u89d2\u6d4b\u91cf \u63d0\u5230\u7684\u65b9\u6cd5\uff0c\u6c42\u89e3\u7a7a\u95f4\u70b9 \\(X_i\\)\u3002

    \u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u6240\u6709\u5339\u914d\u7684\u5173\u952e\u70b9\u8ba1\u7b97\u5f97\u5230\u7684\u7a7a\u95f4\u70b9\uff0c\u6700\u7ec8\u5f97\u5230\u4e00\u4efd\u7a00\u758f\u7684\u7a7a\u95f4\u70b9\u4e91\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

    Sequential SfM\uff1a

    1. \u4ece\u5176\u4e2d\u4e24\u5f20\u5f00\u59cb\uff0c\u5bf9\u573a\u666f\u8fdb\u884c\u91cd\u5efa
    2. \u4e4b\u540e\u4e0d\u65ad\u62ff\u51fa\u65b0\u7684\u56fe\u50cf\uff0c\u6839\u636e\u5df2\u77e5\u8ba1\u7b97 camera pose\uff0c\u518d\u8fdb\u4e00\u6b65\u4f18\u5316\u4e4b\u524d\u91cd\u5efa\u51fa\u6765\u7684 3D \u70b9\uff0c\u4ee5\u53ca\u589e\u52a0\u4e00\u4e9b\u65b0\u7684\u70b9
    3. \u4f7f\u7528\u96c6\u675f\u4f18\u5316\u8fdb\u4e00\u6b65\u4f18\u5316\u548c\u8c03\u6574
    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u96c6\u675f\u4f18\u5316","title":"\u96c6\u675f\u4f18\u5316","text":"

    \u96c6\u675f\u4f18\u5316(Bundle Adjustment)\u4e5f\u5c31\u662f\u5728\u591a\u76ee\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6240\u6709\u70b9\u7684 \u518d\u6295\u5f71\u8bef\u5dee \u4f18\u5316\u95ee\u9898\uff1a

    \\[ \\mathop{minimize} \\limits_\\mathbf{P} E(P_{proj}, \\mathbf{P}) = \\sum^m_{i=1}\\sum^n_{j=1} dist(u_j^{(i)}, P_{proj}^{(i)}\\mathbf{P}_j)^2 \\]

    \u5176\u6c42\u89e3\u53ef\u4ee5\u4f7f\u7528 LM algorithm\u3002

    A modern SfM system: COLMAP

    COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections.

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/","title":"Lecture 8 | Depth Estimation & 3D Reconstruction","text":"

    \u7ea6 5007 \u4e2a\u5b57 6 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 25 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    \u5f15\u5165

    \u5728 \u4e0a\u4e00\u7ae0 \u4e2d\uff0c\u6211\u4eec\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5982\u4f55\u91cd\u5efa\u5f97\u5230\u5173\u952e\u70b9\u7684\u70b9\u4e91\uff0c\u4f46\u662f\u6b64\u65f6\u6211\u4eec\u5f97\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u672c\u7ae0\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\u5982\u4f55\u201c\u7a20\u5bc6\u201d\u5730\u8fdb\u884c\u91cd\u5efa\u3002

    \u800c\u5728\u7a20\u5bc6\u91cd\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4e0d\u80fd\u5355\u5355\u7740\u773c\u4e8e\u5173\u952e\u70b9\uff0c\u800c\u662f\u8981\u5e7f\u6cdb\u5730\u9762\u5411\u56fe\u50cf\u4e2d\u7684\u6240\u6709\u50cf\u7d20\uff0c\u800c\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4e2a\u6280\u672f\u5c31\u662f\u6df1\u5ea6\u4f30\u8ba1(Depth Estimation)\u3002

    \u300c\u6df1\u5ea6\u300d\u8fd9\u4e2a\u6982\u5ff5\u548c\u5b83\u7684\u5b57\u9762\u610f\u601d\u51e0\u4e4e\u4e00\u6837\uff0c\u800c\u5728\u300c\u6df1\u5ea6\u4f30\u8ba1\u300d\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u56fe\u50cf\uff0c\u6807\u8bb0\u6bcf\u4e00\u4e2a\u50cf\u7d20\u7684\u6df1\u5ea6\u3002\u800c\u5c06\u5176\u53ef\u89c6\u5316\uff0c\u5c31\u662f\u6df1\u5ea6\u56fe\u3002

    \u53ea\u4e0d\u8fc7\u6709\u65f6\u5019\u6df1\u5ea6\u6307\u7684\u662f\u7a7a\u95f4\u70b9\u5230\u76f8\u673a\u4e2d\u95f4\u6216\u8005\u76f8\u673a\u5e73\u9762\u7684\u8ddd\u79bb\uff0c\u4e5f\u6709\u7684\u65f6\u5019\u6307\u7684\u662f\u67d0\u4e2a\u7a7a\u95f4\u5750\u6807\u8f74\u5411\u7684\u6df1\u5ea6\uff0c\u5177\u4f53\u5e94\u5f53\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u6765\u3002

    \u6309\u7167\u6df1\u5ea6\u611f\u77e5\u7684\u624b\u6bb5\u5206\u7c7b\uff0c\u6709\u4e3b\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Active depth sensing)\u548c\u88ab\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Passive depth sensing)\u4e24\u79cd\uff0c\u5176\u4e2d\u6211\u4eec\u5c06\u8981\u5c55\u5f00\u7684\u89c6\u89c9\u65b9\u6cd5\u90fd\u662f\u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5\u3002

    \u4e3b\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u975e\u89c6\u89c9\u65b9\u6cd5

    \u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u89c6\u89c9\u65b9\u6cd5

    \u903b\u8f91\u94fe\uff1a

    (\u53cc\u76ee\u89c6\u89c9 -> \u6df1\u5ea6\u611f\u77e5) => ((\u53cc\u89c6\u89d2\u5339\u914d\u70b9 + \u89c6\u5dee -> \u6df1\u5ea6) + (\u5bf9\u6240\u6709\u50cf\u7d20\u8fdb\u884c\u5339\u914d)) => \u6781\u7ebf\u4e0a\u5bfb\u627e\u5339\u914d\u70b9

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u89c6\u89c9","title":"\u7acb\u4f53\u89c6\u89c9","text":"

    \u6211\u4eec\u5df2\u7ecf\u6709\u4e86\u7a00\u758f\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u60f3\u8981\u5f97\u5230\u7a20\u5bc6\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u4e00\u4e2a\u6700\u66b4\u529b\u7684\u65b9\u6cd5\u5c31\u662f\u5c1d\u8bd5\u7740\u53bb\u5339\u914d\u6240\u6709\u50cf\u7d20\uff0c\u5f53\u7136\u8fd9\u770b\u8d77\u6765\u65f6\u95f4\u5f00\u9500\u975e\u5e38\u5927\u3002\u4f46\u662f\u6bcb\u5eb8\u7f6e\u7591\u7684\u662f\uff0c\u5728\u76ee\u524d\u8fd8\u6ca1\u6709\u4ecb\u5165\u4eba\u5de5\u667a\u80fd\u6280\u672f\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u50cf\u7d20\u7684\u5339\u914d\u5173\u7cfb\u3002

    \u4ee5\u53ca\u8fd8\u6709\u4e00\u4e2a\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\uff0c\u5982\u4f55\u5f97\u5230\u5339\u914d\u70b9\u7684\u6df1\u5ea6\u4fe1\u606f\u3002

    \u6240\u4ee5\u603b\u7ed3\u4e0b\u6765\uff0c\u6709\u4e24\u4e2a\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff1a

    \u7531\u4e8e\u5339\u914d\u4e2d\u4f1a\u6709\u90e8\u5206\u4f18\u5316\u5185\u5bb9\u6d89\u53ca\u5230\u6df1\u5ea6\u8ba1\u7b97\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u6211\u60f3\u5148\u4ece\u6df1\u5ea6\u8ba1\u7b97\u5f00\u59cb\u8bb2\uff0c\u4e5f\u5c31\u662f\u4ece\u89c6\u5dee\u5f00\u59cb\u8bb2\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u89c6\u5dee","title":"\u89c6\u5dee","text":"

    \u9996\u5148\uff0c\u6211\u4eec\u90fd\u77e5\u9053\u4eba\u7684\u53cc\u773c\u8d4b\u4e88\u4e86\u4eba\u7c7b\u89c6\u89c9\u4e0a\u6df1\u5ea6\u611f\u77e5\u7684\u80fd\u529b\uff0c\u4e5f\u5c31\u662f\u7acb\u4f53\u89c6\u89c9(stereo vision)\u3002\u4e00\u4e2a\u6bd4\u8f83\u5bb6\u55bb\u6237\u6653\u7684\u5b9e\u9a8c\u5c31\u662f\u5355\u773c\u7a7f\u9488\u4f1a\u53d8\u5f97\u5341\u5206\u56f0\u96be\u3002

    \u5728\u5355\u76ee\u89c6\u89c9\u4e0b\uff0c\u4f53\u73b0\u8fdc\u8fd1\u6700\u7b80\u5355\u7684\u539f\u7406\u63cf\u8ff0\u5c31\u662f\u300c\u8fd1\u5927\u8fdc\u5c0f\u300d\uff0c\u800c\u5728\u52a8\u6001\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e5f\u4f53\u73b0\u5728\u79fb\u52a8\u76f8\u540c\u7684\u8ddd\u79bb\uff0c\u8fd1\u5904\u7684\u7269\u4f53\u79fb\u52a8\u66f4\u660e\u663e\uff0c\u800c\u8fdc\u5904\u7684\u66f4\u4e0d\u660e\u663e\u3002\u7136\u800c\u8fd9\u4e2a\u4fe1\u606f\u548c\u5355\u7eaf\u7684\u201c\u5927\u5c0f\u201d\u4fe1\u606f\u662f\u53ef\u4ee5\u6df7\u6dc6\u7684\uff0c\u6216\u8005\u8bf4\u5728\u201c\u5927\u5c0f\u201d\u53d8\u5316\u4e0d\u660e\u663e\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4fe1\u606f\u662f\u5f88\u96be\u88ab\u8bc6\u522b\u51fa\u6765\u7684\u3002

    \u800c\u5728\u53cc\u76ee\u89c6\u89c9\u4e0b\uff0c\u6211\u4eec\u6709\u6709\u4e00\u4e2a\u66f4\u8fd1\u4e00\u6b65\u7684\u539f\u7406\uff0c\u4e5f\u5c31\u662f\u89c6\u5dee(disparity)\uff0c\u901a\u8fc7\u89c6\u5dee\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u7cbe\u786e\u5730\u611f\u53d7\u5230\u201c\u8ddd\u79bb\u201d\uff08\u5b9e\u9645\u4e0a\u4e5f\u662f\u5bf9\u6781\u51e0\u4f55\u90a3\u4e00\u5957\uff09\uff0c\u63a5\u4e0b\u6765\u9610\u8ff0\u5176\u539f\u7406\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u7ed8\u5236\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u578b\uff1a

    \u5728\u8fd9\u4e2a\u6a21\u578b\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe\u4e24\u4e2a\u56fe\u50cf\u4e2d\u7684\u5339\u914d\u70b9\u7b26\u5408\u4e4b\u540e\u4f1a\u5728\u7acb\u4f53\u5339\u914d\u4e00\u8282\u91cc\u63d0\u5230\u7684\u6700\u7b80\u60c5\u51b5(simplest case)\uff0c\u4f46\u662f\u53ef\u4ee5\u4e0d\u7528\u7ba1\u8fd9\u4e2a\u6700\u7b80\u60c5\u51b5\u662f\u4ec0\u4e48\uff0c\u76f4\u63a5\u5f53\u4f5c\u8fd9\u662f\u4e00\u4e2a\u4fef\u89c6\u89c6\u89d2\u4e0b\u7684\u7b80\u5316\uff0c\u76f4\u63a5\u770b\u4e0b\u9762\u7684\u6a21\u578b\u5373\u53ef\u3002

    \u8fd9\u56fe\u6211\u753b\u4e86\u81f3\u5c11\u534a\u5c0f\u65f6 T^T\uff08\u5f3a\u8feb\u75c7\u306e\u6028\u5ff5\uff09

    (1) \u4e2d OL \u548c OR \u5206\u522b\u662f\u4e24\u76f8\u673a\u4e2d\u5fc3\uff0c\u6de1\u84dd\u8272\u7ebf\u6761\u8868\u793a\u6210\u50cf\u5e73\u9762\uff0cXL \u548c XR \u5206\u522b\u8868\u793a\u5b9e\u9645\u70b9 X \u5728\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\uff0c\u6a59\u8272\u7ebf\u6761\u8868\u793a\u4ed6\u4eec\u7684\u6a2a\u5411\u5750\u6807\uff08\u5047\u8bbe\u4ed6\u4eec\u90fd\u5728\u540c\u4e00\u6c34\u5e73\u7ebf\u4e0a\uff09\uff0cz \u8868\u793a\u5b9e\u9645\u70b9 X \u5230\u57fa\u7ebf\u7684\u8ddd\u79bb\uff0c\u8fd9\u91cc\u6211\u4eec\u6682\u4e14\u79f0\u4e4b\u4e3a\u201c\u6df1\u5ea6\u201d\uff08\u53cd\u6b63\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\u6df1\u5ea6\uff0c\u6709 z \u90fd\u80fd\u7b97\uff09\u3002

    (2) \u4e2d\u6211\u753b\u56fe\u7684\u65f6\u5019\u5fd8\u8bb0\u533a\u5206\u4e24\u4e2a XR \u4e86\uff0c\u6240\u4ee5\u5173\u4e8e (2) \u56fe\u4e2d\u7684 XR \u4e00\u5f8b\u6307\u5de6\u8fb9\u90a3\u4e2a XR\u3002

    \u6211\u4eec\u5c06 OR \u7684\u6210\u50cf\u6a21\u578b\u5e73\u79fb\u5230\u5de6\u4fa7\uff0c\u5373\u56fe (2)\uff0c\u53d1\u73b0\u6a59\u8272\u7684\u4e09\u89d2\u5f62\u548c\u7ea2\u8272\u7684\u4e09\u89d2\u5f62\u76f8\u4f3c\uff1a\\(\\Delta O X_L X_R \\cong \\Delta X O_L O_R\\) \uff08\u6ce8\u610f\uff0c\u5b9e\u9645\u60c5\u51b5\u4e0d\u4e00\u5b9a\u7b49\u8170\uff01\uff09

    \u4e8e\u662f\u6211\u4eec\u5f97\u5230\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff1a

    \\[ \\frac{\\overline{X_L X_R}}{f} = \\frac{\\overline{O_L O_R}}{z} \\\\ \\text{ i.e. }\\; disparity = \\Delta{\\mathbf{x}} = |\\mathbf{x}_l - \\mathbf{x}_r| = |x_l - x_r| = \\frac{B \\cdot f}{z} \\\\ \\text{where }B\\text{ is the length of baseline} \\\\ \\text{ i.e. }\\; z = \\frac{B \\cdot f}{|x_l-x_r|} \\]

    \u63d0\u793a

    \u867d\u7136\u662f\u4e2a\u7b80\u5316\u60c5\u51b5\uff0c\u4f46\u662f\u5728\u6700\u7b80\u60c5\u51b5(simplest case)\u4e0b\u662f\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\u7684\uff0c\u7a0d\u540e\u6211\u4f1a\u63d0\u9192\u56de\u987e\u8fd9\u4e00\u8282\u6765\u7406\u89e3\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u5b89\u5fc3\u987a\u7740\u8bfb\u4e0b\u53bb\u5373\u53ef\u3002

    \u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u89e3\u51b3\u4e00\u4e2a\u4e86\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u5339\u914d","title":"\u7acb\u4f53\u5339\u914d","text":"

    \u9996\u5148\u6211\u4eec\u505a\u4e00\u4e2a\u5047\u8bbe\uff0c\u4e5f\u5c31\u662f\u5728\u5339\u914d\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u7684\u4e24\u4e2a view \u7684\u8ddd\u79bb\u76f8\u5dee\u4e0d\u5927\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c40\u90e8\u7279\u5f81\u4ecd\u7136\u662f\u76f8\u4f3c\u7684\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u641c\u7d22","title":"\u641c\u7d22","text":"

    \u7acb\u4f53\u5339\u914d(Stereo Matching)\u7684\u539f\u7406\u5c31\u662f\uff0c\u9009\u5b9a\u7b2c\u4e00\u4e2a\u56fe\u50cf\u5185\u7684\u67d0\u4e00\u70b9\uff0c\u7136\u540e\u53bb\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u80fd\u591f\u548c\u5b83\u5339\u914d\u7684\u70b9\u3002\u6ca1\u9519\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e00\u6761\u76f4\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u5339\u914d\u7684\u70b9\u5373\u53ef\uff0c\u8fd9\u5927\u5927\u4f18\u5316\u4e86\u590d\u6742\u5ea6\u3002\u800c\u5b83\u7684\u6839\u636e\u6070\u597d\u5c31\u662f\u5bf9\u6781\u7ebf\u7684\u5b9a\u4e49\u3002

    \ud83d\udc49 \u56de\u987e\u5bf9\u6781\u51e0\u4f55\uff01

    \u6ca1\u9519\uff0c\u6211\u4eec\u73b0\u5728\u5df2\u77e5\u4e86 \\(X_L\\)\uff08\u7531\u6211\u4eec\u9009\u5b9a\u7684\uff09\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u8f68\u8ff9\u4fbf\u662f\u5bf9\u6781\u7ebf\uff0c\u4e8e\u662f\u6211\u4eec\u53ea\u9700\u8981\u5148\u627e\u5230\u6211\u4eec\u9009\u5b9a\u7684 \\(X_L\\) \u5728\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u4e0a\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\uff0c\u7136\u540e\u518d\u5728\u8fd9\u6761\u7ebf\u4e0a\u641c\u7d22\u7279\u5f81\u4e0e \\(X_L\\) \u6700\u5339\u914d\u7684\u90a3\u4e2a\u70b9\u5373\u53ef\u3002\uff08\u8fd9\u91cc\u6211\u4eec\u4e5f\u6ca1\u6709\u5fc5\u8981\u4f7f\u7528 SIFT\uff0c\u76f4\u63a5\u505a\u5dee\u5c31\u591f\u4e86\uff09

    \u4f46\u662f\u8bdd\u53c8\u8bf4\u56de\u6765\uff0c\u8ba1\u7b97\u5bf9\u6781\u7ebf\u8fd9\u4ef6\u4e8b\u4e5f\u5e76\u975e\u5341\u5206\u7b80\u5355\uff0c\u5982\u679c\u5bf9\u4e8e\u6bcf\u4e2a\u70b9\u6211\u4eec\u90fd\u9700\u8981\u53bb\u8ba1\u7b97\u5bf9\u6781\u7ebf\uff0c\u90a3\u4e48\u5c06\u5e26\u6765\u4e0d\u5c0f\u7684\u5e38\u6570\uff0c\u800c\u4e14\u7531\u4e8e\u8fd9\u4ef6\u4e8b\u6ca1\u6cd5\u201c\u6574\u4f53\u5730\u9884\u5904\u7406\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4f18\u5316\u8fd9\u4ef6\u4e8b\u3002

    \u6700\u7b80\u60c5\u51b5

    \u9996\u5148\u8003\u8651\u6700\u7b80\u60c5\u51b5(simplest case)\u8fd9\u4e2a\u7279\u6b8a\u60c5\u51b5\uff1a

    1. \u4e24\u4e2a\u76f8\u673a\u7684\u7126\u8ddd\u76f8\u540c\uff1b
    2. \u76f8\u673a\u4f4d\u7f6e\u5728\u540c\u4e00\u6c34\u5e73\u9762\u4e0a\uff0c\u5373\u9ad8\u5ea6\u76f8\u540c\uff1b
    3. \u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u548c\u57fa\u7ebf\uff0c\u4e09\u8005\u76f8\u4e92\u5e73\u884c\uff0c\u6216\u8005\u8bf4\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u5171\u9762\uff08\u6b64\u65f6\u5bf9\u6781\u70b9\u4e0d\u5b58\u5728\uff09\uff1b

    \u6b64\u65f6\uff0c\u5bf9\u6781\u7ebf\u4e5f\u6c34\u5e73\uff0c\u800c\u4e14\u4e24\u6761\u5bf9\u6781\u7ebf\u4e5f\u5171\u7ebf\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5f53\u6211\u4eec\u9009\u5b9a\u5de6\u56fe\u4e2d\u7684\u67d0\u4e2a\u70b9 \\(X_L\\)\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u5019\u9009\u4f4d\u7f6e\u5c31\u5728\u53f3\u56fe\u4e2d\u540c\u4e00\u9ad8\u5ea6\u7684\u90a3\u6761\u6c34\u5e73\u7ebf\u4e0a\u3002

    \u90a3\u4e48\u5982\u4f55\u89e3\u51b3\u8fd9\u79cd\u60c5\u51b5\u4ee5\u5916\u7684\u60c5\u51b5\u5462\uff1f\u65e2\u7136\u6211\u90fd\u8fd9\u4e48\u6392\u4e86\uff0c\u90a3\u89e3\u51b3\u529e\u6cd5\u81ea\u7136\u5c31\u662f\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\u6765\u505a\u4e86\u3002

    \u8f6c\u5316\u601d\u60f3

    \u53c8\u662f\u4e00\u4e2a\u7a81\u7136\u7684\u60f3\u6cd5\uff0c\u5f88\u591a\u65f6\u5019\u6211\u4eec\u6216\u8bb8\u53ef\u4ee5\u4e0d\u4ece\u6574\u4f53\u53bb\u601d\u8003\uff0c\u800c\u662f\u5148\u89e3\u51b3\u4e00\u4e2a\u6700\u7b80\u60c5\u51b5\uff0c\u518d\u8f6c\u5316\u95ee\u9898\u3002

    \u4e00\u822c\u60c5\u51b5

    \u8fd9\u4e2a\u95ee\u9898\u88ab\u79f0\u4e3a\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\uff0c\u8fd9\u91cc\u5e76\u4e0d\u5c55\u5f00\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1a

    C. Loop and Z. Zhang. Computing Rectifying Homographies for Stereo Vision. IEEE Conf. Computer Vision and Pattern Recognition, 1999.

    \u56de\u987e

    \u76f8\u4fe1\u73b0\u5728\u4f60\u5bf9\u201c\u6700\u7b80\u60c5\u51b5\u201d\u5df2\u7ecf\u6709\u66f4\u6df1\u523b\u7684\u7406\u89e3\u4e86\uff0c\u4e0d\u59a8\u56de\u8fc7\u5934\u53bb\u7406\u89e3\u4e00\u4e0b\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u90a3\u4e2a\u7b80\u5316\u7684\u89c6\u5dee\u6a21\u578b\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\uff1f

    \ud83d\udc49 \u89c6\u5dee

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d","title":"\u5339\u914d","text":"

    \u6240\u8c13\u7684\u5bfb\u627e\u5339\u914d\uff0c\u5c31\u662f\u5728\u5145\u65a5\u7740\u5019\u9009\u70b9\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u6700\u597d\u7684\u4e00\u4e2a\u70b9\uff0c\u6216\u8005\u8bf4\u5dee\u5f02\u6700\u5c0f\u7684\u4e00\u4e2a\u70b9\u3002

    \u5e38\u89c1\u7684\u5dee\u5f02\u8861\u91cf\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

    SSD: Sum of Squared Differences

    \\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,2)|^2 \\]

    SAD: Sum of Absolute Differences

    \\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,y)| \\]

    ZNCC: Zero-mean Normalized Cross Correlation

    \\[ diff = \\frac{(W_1(x,y)-\\overline{W_1})(W_2(x,y)-\\overline{W_2})}{\\sigma_{W_1}\\sigma_{W_2}} \\\\ \\text{where } \\overline{W_i} = \\frac{1}{n}\\sum_{x,y} W_i \\;\\;\\; \\sigma_{W_i} = \\sqrt{\\frac{1}{n}\\sum_{x,y}(W_i-\\overline{W_i})^2} \\]

    \u5176\u4e2d\uff0cZNCC \u76f8\u6bd4\u5176\u4ed6\u65b9\u6cd5\uff0c\u4f18\u8d8a\u6027\u5728\u4e8e\u5b83\u5bf9\u56fe\u50cf\u6574\u4f53\u7684\u5149\u5f3a\u5ea6\u4e0d\u654f\u611f\uff0c\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\\(W_i\\) \u5728\u53c2\u4e0e\u8ba1\u7b97\u524d\u90fd\u51cf\u53bb\u4e86 \\(\\overline{W_i}\\)\uff0c\u6240\u4ee5\u6d88\u9664\u4e86\u56fe\u50cf\u6574\u4f53\u4eae\u5ea6\u5e26\u6765\u7684\u5f71\u54cd\u3002

    \u4e2a\u4eba\u7591\u60d1

    \u8fd9\u91cc\u6240\u8c13\u7684\u201c\u6d88\u9664\u4eae\u5ea6\u5f71\u54cd\u201d\uff0c\u662f\u5426\u662f\u5bf9\u4e8e multi-view \u7684\u60c5\u51b5\u6765\u8bf4\u7684\uff1f\u56e0\u4e3a\u5982\u679c\u53ea\u6709\u4e24\u5f20\u56fe\u7247\uff0c\u4e14\u4eae\u5ea6\u5dee\u8ddd\u6574\u4f53\u6052\u5b9a\u7684\u8bdd\uff0c\u867d\u7136\u8ba1\u7b97\u51fa\u6765\u7684 diff \u4f1a\u504f\u5927\uff0c\u4f46\u662f\u6574\u4f53\u4e0a\u7684\u5927\u5c0f\u5173\u7cfb\u597d\u50cf\u4e5f\u6ca1\u6709\u53d8\u5316\uff1f\u6211\u6ca1\u6709\u60f3\u6e05\u695a\u8fd9\u4e00\u70b9\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d\u7684\u6539\u8fdb","title":"\u5339\u914d\u7684\u6539\u8fdb","text":"

    \u7136\u800c\uff0c\u5339\u914d\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u989d\u5916\u7684\u95ee\u9898\u9700\u8981\u89e3\u51b3\u3002

    \u7a97\u53e3\u641c\u7d22\u7684\u5f0a\u7aef

    \u7a97\u53e3\u641c\u7d22\u7684\u6548\u679c\u5b9e\u9645\u4e0a\u5e38\u5e38\u4e0d\u5c3d\u5982\u4eba\u610f\uff0c\u6709\u4e00\u79cd\u57fa\u4e8e\u56fe\u5272\u7684\u505a\u6cd5\uff0c\u6548\u679c\u76f8\u5bf9\u7a0d\u597d\u3002

    \u8fd9\u91cc\u6240\u8bf4\u7684\u7a97\u53e3\uff0c\u6307\u7684\u662f\u5728\u5339\u914d\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u7528\u6765\u6bd4\u8f83\u76f8\u4f3c\u5ea6\u7684\u7a97\u53e3\u5927\u5c0f\u3002

    \ud83d\udc49 Boykov et al., Fast Approximate Energy Minimization via Graph Cuts, International Conference on Computer Vision 1999.

    \u8fd8\u6709\u53e6\u5916\u4e00\u4e2a\u601d\u8def\uff0c\u90a3\u5c31\u662f\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5982\u679c\u8bf4\u539f\u6765\u7684\u76ee\u6807\u51fd\u6570\u662f\u4e24\u70b9\u7684\u5339\u914d\u7a0b\u5ea6\uff0c\u90a3\u4e48\u73b0\u5728\u7684\u76ee\u6807\u51fd\u6570\u53ef\u4ee5\u662f\u5339\u914d\u7a0b\u5ea6\u548c\u5e73\u6ed1\u7a0b\u5ea6\u7684\u52a0\u6743\u548c\uff1a

    \\[ \\begin{aligned} E(d) = E_d(d) + \\lambda E_s(s) \\\\ \\text{match cost: } & E_d(d) = \\sum_{(x,y)\\in I} C(x,y,d(x,y)) \\;\\;\\; \\text{e.g., SSD, SAD, ZNCC} \\\\ \\text{smoothness cost: } & E_s(d) = \\sum_{(p,q) \\in \\varepsilon} V(d_p, d_q) \\;\\;\\; \\text{where } \\varepsilon \\text{ is the set of neighboring pixels } \\end{aligned} \\]

    \u5176\u4e2d\uff0c\\(V(d_p,d_q)\\) \u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

    \\[ \\begin{aligned} \\begin{aligned} \\text{L_1 Distance: } \\\\ V(d_p, d_q) &= |d_p - d_q| \\end{aligned} & & \\begin{aligned} \\text{Potts Model: } \\\\ V(d_p, d_q) &= \\left\\{ \\begin{array}{*} 0 & \\text{ if } d_p = d_q \\\\ 1 & \\text{ if } d_p \\not = d_q \\end{array} \\right. \\end{aligned} \\end{aligned} \\]

    \u7279\u522b\u7684\uff0c\u5982\u679c\u6d89\u53ca\u7684\u662f\u4e00\u4e2a\u7ebf\u6027\u7684\u626b\u63cf\uff0c\u4e5f\u5c31\u662f\u5f53 \\(\\varepsilon\\) \u4e2d\u53ea\u542b\u6709\u5de6\u53f3\u4e24\u4fa7\u7684\u70b9\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u53ef\u4ee5\u7528 DP \u89e3\u51b3\u3002\u800c\u8fd9\u79cd\u65b9\u5f0f\u4f18\u5316\u51fa\u6765\u7684\u56fe\u7247\u6548\u679c\u662f\u8fd9\u6837\u7684\uff1a

    \u7136\u800c\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\u7ebf\u6027\u626b\u63cf\u8fd9\u4e2a\u6761\u4ef6\u7684\u8bdd\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u53d8\u6210\u4e86\u4e00\u4e2a NP-hard \u95ee\u9898\uff0c\u4e0d\u8fc7\u53ef\u4ee5\u7528\u56fe\u5272\u6c42\u8fd1\u4f3c\u89e3\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7efc\u5408","title":"\u7efc\u5408","text":"

    \u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u5168\u90e8\u89e3\u51b3\u4e86\u3002

    \u4e8e\u662f\u53cc\u76ee\u91cd\u5efa\u7684\u5927\u81f4\u6d41\u7a0b\u5982\u4e0b\u2014\u2014\u9996\u5148\u6211\u4eec\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\uff0c\u83b7\u5f97\u76f8\u673a\u7684\u5185\u53c2\uff1b\u63a5\u4e0b\u6765\u901a\u8fc7\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\u6280\u672f\uff0c\u5c06\u4e24\u5f20\u56fe\u7247\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\uff1b\u7136\u540e\u518d\u5bf9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u8fdb\u884c\u5339\u914d\uff0c\u53ea\u9700\u8981\u5728\u540c\u9ad8\u5ea6\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u5c40\u90e8\u7279\u5f81\u6700\u76f8\u4f3c\u7684\u53e6\u5916\u4e00\u4e2a\u70b9\u5373\u53ef\uff1b\u63a5\u7740\u518d\u6839\u636e\u5339\u914d\u70b9\u7684\u5173\u7cfb\u8fdb\u884c\u6df1\u5ea6\u4f30\u8ba1\u5373\u53ef\u3002

    graph LR;\n    A --> B --> C --> D\n    A[\"Calibrate Cameras\"]\n    B[\"Rectify Images\"]\n    C[\"Compute Disparity\"]\n    D[\"Estimate Depth\"]
    \u5f15\u8d77\u8bef\u5dee\u7684\u53ef\u80fd\u56e0\u7d20

    \u8bfe\u7a0b\u5185\u8fd9\u4e2a\u5217\u8868\u5176\u5b9e\u662f\u7ed9\u5927\u4f5c\u4e1a\u7684\u63d0\u793a\uff0c\u4e2a\u4eba\u8ba4\u4e3a\u4e5f\u6709\u52a9\u4e8e\u68b3\u7406\u6574\u4e2a\u6d41\u7a0b\u3002

    \u4e0b\u9762\u8be6\u7ec6\u8bf4\u660e\u51e0\u4e2a\u56e0\u7d20\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\u3002

    \u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

    \u5f53\u6211\u4eec\u4f7f\u7528\u7a97\u53e3\u641c\u7d22\u65f6\uff0c\u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u4ecd\u7136\u662f\u4e2a\u96be\u9898\u2014\u2014\u7a97\u53e3\u8d8a\u5c0f\uff0c\u5f80\u5f80\u7ed3\u679c\u7684\u7ec6\u8282\u4f1a\u66f4\u591a\uff0c\u76f8\u5bf9\u7684\u566a\u58f0\u4e5f\u66f4\u591a\uff0c\u56fe\u7247\u770b\u8d77\u6765\u5c31\u5f88\u4e71\uff1b\u800c\u7a97\u53e3\u8d8a\u5927\uff0c\u5f80\u5f80\u566a\u58f0\u66f4\u5c11\u3001\u66f4\u5e73\u6ed1\uff0c\u4f46\u662f\u7ec6\u8282\u4e5f\u66f4\u5c11\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2a\u5e73\u6ed1\u5ea6\u548c\u7cbe\u786e\u5ea6\u7684 trade off\u3002

    W \u8868\u793a\u7a97\u53e3\u5927\u5c0f\u3002

    \u57fa\u7ebf\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

    \u8c28\u8bb0\u6211\u53c8\u56e0\u4e3a\u753b\u56fe\u6d6a\u8d39\u534a\u4e2a\u5c0f\u65f6\u3002

    \u4e0a\u9762\u7684\u5185\u5bb9\u7ed3\u675f\u540e\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u9057\u7559\u4e0b\u6765\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u5148\u601d\u8003\u4e00\u4e0b\u76ee\u524d\u8fd9\u4e2a\u6d41\u7a0b\u6709\u4ec0\u4e48\u95ee\u9898\uff0c\u518d\u6253\u5f00\u4e0b\u9762\u7684\u63d0\u793a\u6846\u3002

    \u4e00\u4e2a\u5c1a\u672a\u88ab\u89e3\u51b3\u7684\u95ee\u9898

    \u8ba9\u6211\u4eec\u56de\u5230\u7b2c\u4e94\u7ae0\u7684\u5173\u952e\u70b9\u5339\u914d\u2014\u2014\u4e3a\u4ec0\u4e48\u6211\u4eec\u53ea\u627e\u5173\u952e\u70b9\uff1f

    \u6211\u4e2a\u4eba\u7684\u60f3\u6cd5\u662f\uff0c\u9996\u5148\uff0c\u5173\u952e\u70b9\u80fd\u591f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u8868\u8fbe\u4e00\u4e2a\u7269\u4f53\u7684\u7279\u5f81\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u52fe\u52d2\u4e00\u4e2a\u7269\u4f53\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u90e8\u5206\uff1b\u8fd8\u6709\u4e00\u4e2a\u539f\u56e0\u662f\uff0c\u5173\u952e\u70b9\u7279\u5f81\u660e\u663e\uff0c\u5176\u8868\u8fbe\u5177\u6709\u4e00\u5b9a\u7684\u72ec\u7279\u6027\uff08\u4e5f\u5c31\u662f\u5173\u952e\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff09\u3002

    \u800c\u73b0\u5728\u6211\u4eec\u505a\u5339\u914d\u7684\u5185\u5bb9\u662f\u4efb\u610f\u7684\u3001\u5e7f\u6cdb\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u73b0\u5728\u5728\u505a\u5339\u914d\u7684\u5f88\u53ef\u80fd\u662f\u4e00\u9762\u767d\u5899\u4e0a\u7684\u67d0\u4e00\u4e2a\u70b9\uff08\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u8fc7\u7684 textureless regions\uff09\uff0c\u8fd9\u6837\u7684\u70b9\u53c8\u8981\u5982\u4f55\u627e\u5230\u5b83\u7684\u5339\u914d\u70b9\u5462\uff1f

    \u7b54\u6848\u5c31\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u7ed3\u6784\u5149\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u7ed3\u6784\u5149

    \u6211\u4eec\u518d\u68b3\u7406\u4e00\u4e0b\u95ee\u9898\u7684\u8981\u70b9\uff0c\u5c31\u4ee5\u767d\u5899\u4e3a\u4f8b\u5b50\uff0c\u5b83\u96be\u4ee5\u8fdb\u884c\u5339\u914d\u662f\u56e0\u4e3a\u5b83\u7f3a\u5c11\u7279\u5f81\u3001\u7f3a\u5c11\u7eb9\u7406\uff0c\u800c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5bf9\u5176\u7ed3\u6784\u8fdb\u884c\u91cd\u5efa\u2014\u2014\u90a3\u4e48\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u6211\u4eec\u624b\u52a8\u7ed9\u4ed6\u300c\u4e0a\u7eb9\u7406\u300d\uff0c\u5f53\u7136\u5e76\u4e0d\u662f\u6307\u753b\u4e0a\u53bb\uff0c\u800c\u662f\u4f7f\u7528\u7ed3\u6784\u5149\uff1a

    \u4e8e\u662f\u6211\u4eec\u7684\u56fe\u50cf\u5c31\u6709\u4e86\u7eb9\u7406\uff0c\u62e5\u6709\u4e86\u201c\u7279\u5f81\u201d\u3002

    \u4e2a\u4eba\u60f3\u6cd5

    \u6211\u5f53\u65f6\u770b\u5230\u8fd9\u4e2a idea \u7684\u65f6\u5019\uff0c\u611f\u89c9\u5f88\u523a\u6fc0\uff0c\u4f46\u662f\u53c8\u89c9\u5f97\u8fd9\u7834\u574f\u4e86\u666f\u8c61\u672c\u6765\u7684\u7eb9\u7406\uff0c\u4f46\u662f\u8f6c\u5ff5\u4e00\u60f3\uff0c\u662f\u4e0d\u662f\u4f1a\u62cd\u4e24\u5f20\uff0c\u4e00\u5f20\u7528\u6765\u4e0a\u8272\uff0c\u4e00\u5f20\u7528\u6765\u5efa\u6a21\uff1f\u6211\u6682\u65f6\u8fd8\u4e0d\u77e5\u9053\uff0c\u7ebf\u653e\u4e2a\u731c\u60f3\u5728\u8fd9\u91cc\u3002

    \u4e0d\u8fc7\u6b64\u65f6\u53c8\u6709\u4e00\u4e2a\u5f15\u7533\u51fa\u6765\u7684\u70b9\uff0c\u5c31\u662f\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5176\u5b9e\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e2a\u76f8\u673a\u3002

    \u8fd9\u662f\u56e0\u4e3a\uff0c\u5047\u8bbe\u6211\u4eec\u628a camera 2 \u653e\u5728\u4e0e projector \u4e00\u6837\u7684\u4f4d\u7f6e\uff0c\u6b64\u65f6 camera 2 \u6536\u5230\u7684\u56fe\u50cf\u5e94\u5f53\u548c projector \u5c04\u51fa\u53bb\u7684\u662f\u4e00\u6837\u7684\uff0c\u6216\u8005\u8bf4\u662f\u7c7b\u4f3c\u7684\u3002

    \u5982\u4f55\u89e3\u91ca\uff1f

    \u8bf4\u5b9e\u8bdd\u6211\u8fd8\u662f\u4e0d\u592a\u80fd\u7406\u89e3\u8fd9\u4e00\u70b9\u3002\u5982\u679c\u8981\u6211\u5f3a\u884c\u7406\u89e3\u7684\u8bdd\uff0c\u6211\u89c9\u5f97\u5927\u6982\u662f\u53c8\u8fd9\u4e48\u4e24\u70b9\uff0c\u7b2c\u4e00\u70b9\u662f\u88ab\u7ed3\u6784\u5149\u7167\u5c04\u7684\u4e1c\u897f\u5bf9\u7ed3\u6784\u5149\u7684\u53cd\u5c04\u4ee5\u6f2b\u53cd\u5c04\u4e3a\u4e3b\uff0c\u800c\u4e14\u6240\u8c13\u7684\u201c\u4e00\u6837\u201d\u4e5f\u53ea\u662f\u7d2f\u6b7b\uff0c\u5e76\u4e0d\u80fd\u5305\u62ec\u9634\u5f71\u5173\u7cfb\u7b49\uff0c\u6240\u4ee5\u5bf9\u8fd9\u4e2a\u7ed3\u8bba\u7684\u6b63\u786e\u4e0e\u5426\u6211\u8868\u793a\u6000\u7591\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u591a\u89c6\u89d2","title":"\u591a\u89c6\u89d2","text":"

    \u591a\u89c6\u89d2\u7acb\u4f53(Multi-view Stereo, MVS)\u91cd\u5efa\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u5229\u7528\u66f4\u591a\u7684\u89c6\u89d2\u6765\u8fdb\u884c\u91cd\u5efa\uff0c\u76f8\u6bd4\u4e8e\u524d\u9762\u63d0\u5230\u7684\u53cc\u76ee\u6a21\u578b\uff0c\u5b83\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\u3001\u80fd\u5728\u591a\u4e2a\u5019\u9009\u4e2d\u9009\u62e9\u6700\u5408\u9002\u7684\u65b9\u6848\uff0c\u4ee5\u53ca\u80fd\u5f97\u5230\u66f4\u5b8c\u6574\u7684 3D

    \u6211\u4eec\u5728\u53cc\u76ee\u5339\u914d\u4e2d\uff0c\u9996\u5148\u5bfb\u627e\u80fd\u591f\u5339\u914d\u7684\u70b9\u5bf9\u518d\u505a\u63a5\u4e0b\u6765\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u5728\u591a\u89c6\u89d2\u4e2d\uff0c\u627e\u5230\u300c\u5339\u914d\u7684\u4e00\u7cfb\u5217\u70b9\u300d\u662f\u6bd4\u8f83\u56f0\u96be\u4e14\u8017\u65f6\u7684\uff0c\u56e0\u4e3a n \u4e2a\u70b9\u6709 \\(C_n^2\\) \u5bf9\u5339\u914d\u5173\u7cfb\u3002\u6240\u4ee5\u6211\u4eec\u8981\u53d8\u6362\u601d\u8def\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u67d0\u4e00\u4e2a\u89c6\u89d2\u4e3a\u57fa\u7840\uff0c\u5e76\u679a\u4e3e\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff0c\u8ba1\u7b97\u91cd\u6295\u5f71\u8bef\u5dee\uff0c\u627e\u5230\u4f7f\u91cd\u6295\u5f71\u8bef\u5dee\u6700\u4f18\u79c0\u7684\u90a3\u4e2a\u6df1\u5ea6\u4f5c\u4e3a\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff08\u800c\u4e0d\u662f\u5728\u6bcf\u4e00\u4e2a\u5bf9\u6781\u7ebf\u4e0a\u627e\uff0c\u53ef\u4ee5\u601d\u8003\u4e3a\u4ec0\u4e48\uff09\u3002

    \u4e2a\u4eba\u7591\u95ee

    \u8bdd\u8bf4\u8fd9\u4e2a\u91cd\u6295\u5f71\u8bef\u5dee\u6307\u7684\u662f\u4ec0\u4e48\u554a\uff0c\u662f\u9700\u8981\u5148\u7b97\u597d\u5339\u914d\u70b9\u7136\u540e L2 \u8ddd\u79bb\u7684\u8bef\u5dee\u8fd8\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff1f\u5982\u679c\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff0c\u90a3\u600e\u4e48\u89e3\u51b3\u5f62\u53d8\uff1f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-reconstruction","title":"3D reconstruction","text":"

    \u5177\u4f53\u6765\u8bf4\uff0c3D \u91cd\u5efa\u5305\u62ec\u8fd9\u4e48\u4e09\u4e2a\u6b65\u9aa4\uff1a

    1. \u6df1\u5ea6\u8ba1\u7b97
    2. \u6df1\u5ea6 -> 3D\u7f51\u683c\u8868\u9762
    3. \u7eb9\u7406\u586b\u5145
    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-representations","title":"3D representations","text":"

    \u8865\u5145\u56fe\u7247

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-surface-reconstruction","title":"3D surface reconstruction","text":"
    1. \u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a
    2. \u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c
    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u6df1\u5ea6---\u4f53\u7d20\u8868\u793a","title":"\u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a","text":"

    \u5e38\u7528\u65b9\u6cd5\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#depth-fusion-depth-maps-to-tsdf","title":"Depth Fusion \uff08depth maps to TSDF\uff09","text":"

    \u3010\u5bf9\u4e8e\u56fe\u4e2d\u3011\uff1a

    \u601d\u8def

    \u4e4b\u524d\u4e5f\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\u3002\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u60f3\u6cd5\u662f\uff0c\u5f53\u4f60\u9700\u8981\u628a\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u4e1c\u897f\u6295\u5f71\u5230\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u5230\u5730\u65b9\u53bb\u65f6\uff0c\u5e94\u5f53\u679a\u4e3e\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u7684\u90a3\u4e00\u4fa7\u7684\u5355\u5143\uff0c\u7136\u540e\u5229\u7528\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u8fd9\u4e00\u4fa7\u53bb\u8ba1\u7b97\uff0c\u800c\u4e0d\u662f\u4ece\u4f4e\u5230\u9ad8\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#poisson-reconstruction-depth-maps-to-occupancy-volume","title":"Poisson reconstruction \uff08depth maps to occupancy volume\uff09","text":"

    \u67cf\u677e\u91cd\u5efa

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u4f53\u7d20\u8868\u793a---\u4e09\u7ef4\u7f51\u683c","title":"\u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c","text":"

    \u5e38\u7528\u65b9\u6cd5\uff1a

    Marching cubes

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#texture-mapping","title":"Texture mapping","text":"

    \u5c55\u5f00 get \u7eb9\u7406\u56fe\uff08\u4e8c\u7ef4\u5750\u6807\u80fd\u591f\u5bf9\u5e94\u4e00\u4e2a\u7f51\u683c\u9762\uff09 using \u53c2\u6570\u5316

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/","title":"Lecture 9 | Deep Learning","text":"

    \u7ea6 1839 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u673a\u5668\u5b66\u4e60\u6982\u8ff0","title":"\u673a\u5668\u5b66\u4e60\u6982\u8ff0","text":"

    \u8bf4\u660e

    \u672c\u8bfe\u7a0b\u4e0d\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u5173\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u6240\u6709\u77e5\u8bc6\uff0c\u4f46\u4ecd\u7136\u5bf9\u57fa\u7840\u6982\u5ff5\u6709\u6240\u8981\u6c42\uff0c\u6240\u4ee5\u5728\u6b64\u4ec5\u505a\u6982\u5ff5\u6027\u5bf9\u7b80\u4ecb\u3002

    \u673a\u5668\u5b66\u4e60(Machine Learning, ML) \u7c97\u7565\u7684\u6765\u8bf4\u5c31\u662f\u901a\u8fc7\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u5b66\u4e60\uff0c\u5728\u4e00\u5b9a\u89c4\u5219\u4e0b\u751f\u6210\u7a0b\u5e8f\uff0c\u5bf9\u4e8e\u673a\u5668\u5b66\u4e60\u6765\u8bf4\uff0c\u5b66\u4e60\u51fa\u6765\u7684\u8fd9\u4e2a\u201c\u7a0b\u5e8f\u201d\u7ed3\u679c\u662f\u6a21\u578b(model)\u3002

    \u800c\u5982\u679c\u7528\u6765\u5b66\u4e60\u7684\u662f\u88ab\u6807\u6ce8\u8fc7\u7684\u6570\u636e(labeled data)\uff0c\u5219\u79f0\u4e4b\u4e3a(\u6709)\u76d1\u7763(\u7684)\u5b66\u4e60(supervised learning)\u3002

    \u65e0\u8bba\u662f\u673a\u5668\u5b66\u4e60\u6280\u672f\u8fd8\u662f\u4f20\u7edf\u7684\u7f16\u7a0b\u6280\u672f\uff0c\u90fd\u662f\u4e3a\u4e86\u89e3\u51b3\u67d0\u4e2a\u95ee\u9898\u800c\u5b58\u5728\u7684\u3002\u800c\u89e3\u51b3\u4e00\u4e2a\u590d\u6742\u95ee\u9898\u2014\u2014\u6b63\u5982\u6211\u4eec\u4e4b\u524d\u5f3a\u8c03\u7684\u2014\u2014\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u62bd\u8c61\u5efa\u6a21\u3002\u800c\u4e00\u4e2a\u673a\u5668\u5b66\u4e60\u5b66\u4e60\u51fa\u6765\u7684\u6a21\u578b(model)\u53ef\u4ee5\u88ab\u89c6\u4f5c\u4e00\u4e2a\u5173\u4e8e\u8f93\u5165\u548c\u8f93\u51fa\u7684\u63cf\u8ff0\uff1a

    \\[ \\text{Input } X \\rightarrow f_w \\rightarrow \\text{Output } Y \\]

    \u800c\u6839\u636e\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u8f93\u51fa\u201d\u7684\u4e0d\u540c\uff0c\u6309\u7167\u8fde\u7eed\u4e0e\u79bb\u6563\uff0c\u6211\u4eec\u5c06\u6240\u89e3\u51b3\u7684\u95ee\u9898\u533a\u5206\u4e3a\u56de\u5f52(regression)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u8fde\u7eed\u7684\u6570\u503c\uff09\u548c\u5206\u7c7b(classification)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u79bb\u6563\u7684\u6807\u7b7e\uff09\uff0c

    \u66f4\u5177\u9898\u7684\u6765\u8bf4\uff0c\u4e00\u822c\u673a\u5668\u5b66\u4e60\u7684 pipeline \u662f\u8fd9\u6837\u7684\uff1a

    1. \u5bf9\u95ee\u9898\u8fdb\u884c\u5b9a\u4e49\uff1b
    2. \u6536\u96c6\uff08\u548c\u5904\u7406\uff09\u7528\u6765\u5b66\u4e60\u7684\u6570\u636e\u96c6\uff1b
    3. \u5bf9\u95ee\u9898\u5efa\u6a21\uff0c\u5e76\u8bbe\u8ba1\u6a21\u578b\uff1b
      • \u62bd\u8c61\u5730\u6765\u8bf4\u662f\u51b3\u5b9a\u8f93\u5165\u8f93\u51fa\u7684\u5173\u8054\u5f62\u5f0f\uff1b
    4. \u6a21\u578b\u8bad\u7ec3\uff1b
      • \u8bbe\u8ba1\u635f\u5931\u51fd\u6570\u6765\u8bc4\u4f30\u6a21\u578b\u7684\u6548\u679c\uff1b
      • \u7528\u4f18\u5316\u6280\u672f\u6c42\u89e3\u4f7f\u6a21\u578b\u6548\u679c\u6700\u597d\u7684\u53c2\u6570\uff1b
    5. \u6a21\u578b\u6d4b\u8bd5\uff1b
      • \u4e5f\u5c31\u662f\u7528\u6d4b\u8bd5\u6570\u636e\u96c6\u6d4b\u8bd5\u5b83\u7684\u8868\u73b0\uff1b
    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u7ebf\u6027\u5206\u7c7b\u5668","title":"\u7ebf\u6027\u5206\u7c7b\u5668","text":"

    \u7ebf\u6027\u5206\u7c7b\u5668(Linear Classifier)\u6700\u65e9\u53eb\u611f\u77e5\u673a(Perceptron)\uff0c\u5b83\u662f ML \u4e2d\u4e00\u4e2a\u6700\u7b80\u5355\u4e5f\u662f\u6700\u57fa\u672c\u7684\u6784\u6210\u3002

    \\[ y = f(x, W) = W x + b \\\\ \\begin{aligned} & \\text{where } x \\text{ means inputs, such as image, } \\\\ & y \\text{ means outputs, such as the class of the object, } \\\\ & \\text{and } W \\text{ is the parameters matrix.} \\end{aligned} \\]

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u6570\u5b66\u63cf\u8ff0\u5c31\u89e3\u91ca\u4e86\u5b83\u4e3a\u4ec0\u4e48\u53eb\u300c\u7ebf\u6027\u300d\u5206\u7c7b\u5668\u3002

    \u66f4\u8be6\u7ec6\u7684\u89e3\u91ca\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\uff0c\u53ef\u4ee5\u67e5\u770b cs231n \u7b14\u8bb0\u7684\u76f8\u5173\u4ecb\u7ecd

    \u4f55\u65f6\u8f93\u51fa\u6bd4\u8f83\u5927\uff1f

    \u8f93\u51fa\u5927\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u67d0\u884c\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u5206\u7c7b\u5230\u8fd9\u4e00\u884c\u7684\u53ef\u80fd\u6027\u66f4\u5927\uff0c\u4e00\u822c\u662f \\(x\\) \u4e0e \\(W\\) \u7684\u5bf9\u5e94\u884c\u76f8\u4f3c\u65f6\u3002

    \u8fd9\u91cc\u6709\u4e00\u4e2a\u7279\u6b8a\u7684\u6982\u5ff5\u662f\u51b3\u7b56\u8fb9\u754c(Decision Boundary)\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training","title":"Training","text":"

    \u5982\u4f55\u627e\u5230\u6700\u4f73\u7684\u53c2\u6570\uff1f

    \u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u7f3a\u70b9

    \u8bc4\u4ef7\u4e24\u4e2a\u6982\u7387\u5206\u5e03\u662f\u5426\u76f8\u4f3c\uff0c\u5e38\u7528\u7684\u662f\u4ea4\u53c9\u5dee\uff0ccross entropy as loss function

    \\[ S \\sim S(y) \\\\ D(S,L) = -\\sum_i L_i \\log S_i \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#neural-networks","title":"Neural Networks","text":"

    \u7ebf\u6027\u5206\u7c7b\u6700\u65e9\u53eb\u611f\u77e5\u673a\uff0cperceptron

    \u7136\u800c\u6709\u4e9b\u5206\u7c7b\u53ef\u80fd\u662f\u975e\u7ebf\u6027\u7684\uff0c\u5982\u56fe

    \u8fd9\u79cd\u65f6\u5019\u6211\u4eec\u53ef\u80fd\u4f1a\u4f7f\u7528\u4e00\u4e2a\u51fd\u6570\u5c06\u5b83\u4e0e\u7ebf\u6027\u5206\u7c7b\u6620\u5c04\u8d77\u6765\uff0c\u8fd9\u79cd\u51fd\u6570\u4e00\u822c\u53eb\u6fc0\u6d3b\u51fd\u6570 activation functions

    \u591a\u7c7b\u522b\u8868\u793a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u591a\u5c42\u611f\u77e5\u673a-multi-layer-perceptron","title":"\u591a\u5c42\u611f\u77e5\u673a Multi-layer perceptron","text":"\\[ \\sigma \\text{ is a nonlinear transform.} f(x) = \\sigma(w^T x + b) \\]

    hidden layers

    \u5982\u679c\u6ca1\u6709\u975e\u7ebf\u6027\u6fc0\u6d3b\u51fd\u6570\uff0c\u6700\u540e\u7b49\u4ef7\u4e8e\u4e00\u4e2a\u5355\u5c42\u7ebf\u6027\u611f\u77e5\u673a

    Neural Networks

    \u6df1\u5ea6\u795e\u7ecf\u7f51\u7edc Deep Neural Networks \u5c42\u6570\u591a =>

    \u5168\u8fde\u5c42 Fully connected layer

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#convolution-neural-networks","title":"Convolution Neural Networks","text":"

    What is CNN? What is convolution? Layer Types: 1. Convolutional layer 2. Pooling layer 3. Fully-connected layer

    \u5728 CV \u4e2d\uff0c\u6709\u65f6\u5019\u56fe\u50cf\u7684\u5c40\u90e8\u7279\u5f81\u5c31\u591f\u6211\u4eec\u8fdb\u884c\u5206\u7c7b\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u80fd\u4e0d\u9700\u8981\u8ba9\u7f51\u7edc\u8fde\u4e0a\u6240\u6709\u7684\u90e8\u5206\u3002

    1 \u4e2a\u7f51\u7edc -> 3 \u4e2a\u7f51\u7edc\uff0cwith weight sharing\uff0c\u56e0\u4e3a 3 \u4e2a\u7f51\u7edc\u90fd\u662f\u7528\u6765\u8bc6\u522b\u540c\u6837\u7684\u4e1c\u897f\u7684\uff0c\u6216\u8005\u8bf4\u529f\u80fd\u76f8\u540c\u3002

    \\[ y = \\sigma(x \\otimes w + b) \\]

    padding & pooling & stride

    \u597d\u5904\u662f\u53c2\u6570\u6bd4\u5168\u8fde\u5c42\u5c11\u5f88\u591a

    \u611f\u53d7\u91ce Receptive fields

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6c60\u5316\u5c42","title":"\u6c60\u5316\u5c42","text":"

    \u628a\u4e0d\u540c\u5730\u996d\u7684\u7ed3\u679c\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c06\u54cd\u5e94\u56fe\u7684\u591a\u4e2a\u7ed3\u679c\u5408\u5e76\u4e3a\u540c\u4e00\u4e2a

    CNN \u4e00\u822c\u8fc7\u7a0b

    P71

    CNN \u7ecf\u5178\u7f51\u7edc\uff1aAlexNet, VGG,

    \u4e0d\u540c channel \u5355\u72ec\u505a ----> Batch Normalization

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training-neural-networks","title":"Training Neural Networks","text":"

    \u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u201c\u6700\u4f73\u201d\u7684\u7f51\u7edc\uff0c\u4f46\u662f\u5982\u4f55\u5bfb\u627e\u5176\u4e2d\u6700\u597d\u7684\u53c2\u6570\u5219\u662f\u6709\u4e00\u7cfb\u5217\u4e25\u683c\u7684\u65b9\u6cd5\u3002

    loss function

    optimization

    \u6700\u5c0f\u5316 loss function\uff0c\u4f7f\u7528\u5404\u79cd\u68af\u5ea6\u4e0b\u964d

    This training method is called \u540e\u5411/\u53cd\u5411\u4f20\u64ad back-propagation

    \\[ \\mathbf{w}^{t+1} = \\mathbf{w}^t - \\eta_t\\frac{\\partial L}{\\partial \\mathbf{w}}\\mathbf{w}^t \\]

    \u6c42\u68af\u5ea6-\u300b\u590d\u5408\u51fd\u6570\u6c42\u5bfc-\u300b\u94fe\u5f0f\u6cd5\u5219

    \u5bf9\u4e8e\u73b0\u5728\u7684\u6df1\u5ea6\u5b66\u4e60\u5de5\u5177\u6765\u8bf4\uff0c\u53cd\u5411\u4f20\u64ad\u4e0e\u6c42\u5bfc\u7b49\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u81ea\u52a8\u5b9e\u73b0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u597d\u7f51\u7edc\u7ed3\u6784\u548c loss function \u5373\u53ef\uff0c\u800c\u4f18\u5316\u90e8\u5206\u5219\u53ef\u4ee5\u901a\u8fc7\u5de5\u5177\u5b9e\u73b0\u3002

    \u968f\u673a\u68af\u5ea6\u4e0b\u964d\uff0c\u968f\u673a\u7684\u91c7\u6837\u4e00\u90e8\u5206\u70b9\uff0c\\(\\Omega\\) @P86\uff0c

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#architecture--hyper-parameters","title":"Architecture & hyper-parameters","text":"

    \u65e0\u6cd5\u901a\u8fc7\u90a3\u4e9b\u80fd\u591f\u81ea\u52a8\u8ba1\u7b97\u7684\u6743\u91cd\uff0c\u6d89\u53ca\u5230\u7f51\u7edc\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u7684\u4e00\u4e9b\u53c2\u6570\uff0c\u6210\u4e3a\u8d85\u53c2\u6570 hyper-parameters\u3002

    \u65b9\u6cd5\uff1a\u8bd5\uff08\u5f53\u7136\u4e0d\u662f\u7528\u624b\u8bd5x\uff09\uff01

    How to prevent overfitting? \u2022 Cross validation and early stop \u2022 Regularization or dropout \u2022 Data augmentation

    \u5982\u4f55\u8bc4\u4ef7\u7ed3\u679c\u201c\u597d\u201d\u8fd8\u662f\u201c\u4e0d\u597d\u201d\uff1f

    \u5982\u4f55\u5206\u5272\u6570\u636e\u96c6\uff1f(cross validation: train & validation & test)

    Data split idea * 3

    P89\uff08cs231n also\uff09

    \u4e00\u79cd\u8fdd\u548c\u611f\uff0cvalidation \u53c2\u4e0e\u81ea\u52a8\u53cd\u9988\uff0ctest \u96be\u9053\u4e0d\u7b97\u4e00\u79cd\u4eba\u4e3a\u53cd\u9988\u5417\uff1f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6b63\u5219\u5316","title":"\u6b63\u5219\u5316","text":"

    \u589e\u52a0\u7ea6\u675f\u4ee5\u51cf\u5c11 over fit

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#dropout","title":"Dropout","text":"

    \u8bad\u7ec3\u65f6\u5ffd\u7565\u4e00\u90e8\u5206\u54cd\u5e94\uff0c\u6d4b\u8bd5\u7684\u65f6\u5019\u4ecd\u7136\u4f7f\u7528

    \u65ed\u5b9d\uff1aDropout\u8bf4\u7684\u7b80\u5355\u4e00\u70b9\u5c31\u662f\uff1a\u6211\u4eec\u5728\u524d\u5411\u4f20\u64ad\u7684\u65f6\u5019\uff0c\u8ba9\u67d0\u4e2a\u795e\u7ecf\u5143\u7684\u6fc0\u6d3b\u503c\u4ee5\u4e00\u5b9a\u7684\u6982\u7387p\u505c\u6b62\u5de5\u4f5c\uff0c\u8fd9\u6837\u53ef\u4ee5\u4f7f\u6a21\u578b\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u56e0\u4e3a\u5b83\u4e0d\u4f1a\u592a\u4f9d\u8d56\u67d0\u4e9b\u5c40\u90e8\u7684\u7279\u5f81\u3002

    \u7edf\u8ba1\u4e0a\u7b49\u6548\u4e8e L2

    \u6211\uff1a\u56e0\u4e3a\u6bcf\u4e2a\u70b9\u90fd\u6709\u53ef\u80fd\u6982\u7387\u6027\u5931\u6548\uff0c\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u8fd9\u4e5f\u8981\u6c42\u67d0\u4e00\u4e2a\u7279\u5f81\u7684contributes\u4f1a\u88ab\u201c\u5206\u644a\u201d\u5f00\u6765\uff0c\u6240\u4ee5\u6548\u679c\u4e0a\u6709\u70b9\u50cfL2\u7684\u90a3\u79cd\u8ba9\u6743\u91cd\u66f4\u5c0f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6570\u636e\u589e\u5e7f-data-augmentation","title":"\u6570\u636e\u589e\u5e7f Data augmentation","text":"

    overfit \u53ca\u6570\u636e\u592a\u5c11\u8bad\u7ec3\u592a\u591a\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5bf9\u5df2\u6709\u6570\u636e\u53d8\u6362\u6765\u201c\u9020\u201d\u4e00\u4e9b\u6570\u636e\u51fa\u6765\uff0c\u6bd4\u5982\u7ffb\u8f6c\u3001\u62c9\u4f38\u2026\u2026

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#batch-normalization","title":"Batch Normalization","text":"

    \u5bf9\u591a\u4e2a channel \u5bf9\u7ed3\u679c\u8fdb\u884c\u5f52\u4e00\u5316\u64cd\u4f5c

    Reduce internal covariate shift\uff0c\u4ee5\u51cf\u5c11 channal \u4e4b\u95f4\u7684\u53d1\u6563\u6027\uff0c\u66f4\u7a33\u5b9a\u66f4\u6536\u655b

    For more: https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#deep-learning-frameworks","title":"Deep Learning Frameworks","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec09/#network-architectures","title":"Network Architectures","text":"

    \u65e9\u671f\u4e0d\u53d7\u6b22\u8fce\uff1a\u6548\u679c\u5dee & \u53ef\u63a5\u53d7\u6027\u5dee

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#resnet","title":"ResNet","text":"

    \u5047\u8bbe\u6570\u636e\u91cf\u591f\u5927\uff0c\u662f\u4e0d\u662f\u5c42\u6570\u8d8a\u591a\u8d8a\u597d\uff1f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#densenet","title":"DenseNet","text":"

    \u66f4\u52a0\u7a20\u5bc6\u7684\u94fe\u63a5\uff0c\u672c\u5c42\u53d6\u51b3\u4e8e\u524d\u9762\u6240\u6709\u5c42

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#mobilenets","title":"MobileNets","text":"

    \u901f\u5ea6\u5feb

    NAS: Neural Architecture Search \u81ea\u52a8\u5316\u7f51\u7edc\u7ed3\u6784\u8bbe\u8ba1\uff0clearning to learn

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#why-deep-learning-is-powerful","title":"why deep learning is powerful?","text":"

    End-to-end learning\uff0c\u7aef\u5230\u7aef\u5b66\u4e60

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/","title":"Lecture 10 | Recognition","text":"

    \u7ea6 1509 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    \u4e8c\u7ef4\u56fe\u50cf\u8bc6\u522b(Recognition)\u4e0b\u6709\u5f88\u591a\u4efb\u52a1\uff0c\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#semantic-segmentation","title":"Semantic segmentation","text":"

    \u6bcf\u4e2a\u50cf\u7d20\u5c5e\u4e8e\u54ea\u4e2a\u7c7b\u522b\u8fd9\u79cd\u4fe1\u606f\u53eb\u8bed\u4e49\u4fe1\u606f\u3002

    \u6700\u6734\u7d20\u7684\u505a\u6cd5\u662f sliding window\uff0c\u53d6\u51fa\u4e00\u4e2a window \u653e\u8fdb\u5206\u7c7b\u673a\u5f97\u5230\u7ed3\u679c\uff0c\u4f46\u662f\u663e\u7136\u7531\u4e8e window \u5305\u542b\u7684\u4fe1\u606f\u592a\u5c11\uff0c\u800c\u4e14\u6548\u7387\u592a\u4f4e\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u975e\u5e38 naive\u3002

    \u73b0\u5728\u6807\u51c6\u7684\u505a\u6cd5\u662f\u5168\u5377\u79ef\u7f51\u7edc(Fully Convolutional Network)

    \u5c40\u9650\u6027\uff1a

    \u6539\u8fdb\uff1a

    \u4f46\u662f\u7531\u4e8e\u6211\u4eec\u6700\u540e\u5e0c\u671b\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u548c\u539f\u56fe\u4e00\u6837\u5927\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6709\u5411\u4e0b\u91c7\u6837\u5c31\u80af\u5b9a\u4f1a\u6709\u5411\u4e0a\u91c7\u6837\uff08\u56de\u5fc6\uff1a\u63d2\u503c\uff09\u3002

    \u56fe\u50cf\u5411\u4e0a\u91c7\u6837\u4ee5\u540e\u53d8\u5927\u4ee5\u540e\u53c8\u5377\u79ef\uff0c\u8fd9\u4e2aTransposed convolution

    ppt P13

    \u4f46\u662f\u5f88\u663e\u7136\uff0c\u5728\u53d8\u5c0f\u53d8\u5927\u7684\u8fc7\u7a0b\u4e2d\u80af\u5b9a\u6709\u4fe1\u606f\u635f\u5931\u3002\u6240\u4ee5\u73b0\u5728\u4e00\u4e2a\u6bd4\u8f83\u6d41\u884c\u7684\u505a\u6cd5\u662f U-Net\uff0c\u4e5f\u5c31\u662f\u5927\u91cf\u5e94\u7528 skip-connection\u3002

    ppt P14 https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

    DeepLab P15

    \u8003\u8651\u76f8\u90bb\u50cf\u7d20\u4e4b\u95f4\u7684\u5173\u8054\u6027\uff0c\u4f7f\u7528 CRF(Conditional random field) \u4f18\u5316 P16

    \u9a6c\u53ef\u592b\u968f\u673a\u573a\uff1f

    Unary potential: \u4f53\u73b0\u81ea\u5df1\u7684\u7279\u6027

    Pairwise potential: \u4f53\u73b0\u5173\u8054\u6027

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#\u8861\u91cf\u6307\u6807-evaluation-metric-per-pixel-intersection-over-union-iou","title":"\u8861\u91cf\u6307\u6807 Evaluation metric: Per-pixel Intersection-over-union (IoU)","text":"

    \\(IoU=\\frac{ \\text{Ground truth \u548c prediction \u7684\u4ea4\u96c6\u9762\u79ef} }{ \\text{Ground truth \u548c prediction \u7684\u5e76\u96c6\u9762\u79ef} }\\) P19

    mIoU \u6307\u7684\u662f\u5206\u51fa\u6765\u7684\u4e0d\u540c\u7c7b\u522b\u7684 mean IoU

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#object-detection","title":"Object detection","text":"

    Bounding box (bbox)

    \u90a3\u4e48\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u5148\u5047\u8bbe\u4e00\u5171\u53ea\u6709 1 \u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6b64\u65f6\u548c\u5206\u7c7b\u4efb\u52a1\u662f\u975e\u5e38\u63a5\u8fd1\u7684\uff0c\u53ea\u9700\u8981\u518d\u989d\u5916\u6c42\u89e3\u4e00\u4e2a\u7a97\u53e3\u4f4d\u7f6e\u5373\u53ef\u3002

    \u90a3\u4e48\u591a\u4e2a\u7a97\u53e3\u5462\uff1f

    \u89e3\u51b3\u529e\u6cd5\u8fd8\u662f\u6ed1\u52a8\u7a97\u53e3\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e4b\u524d\u7684\uff0c\u6211\u4eec\u73b0\u5728\u91c7\u7528\u7684\u65b9\u6cd5\u57fa\u672c\u4e0a\u4e5f\u662f\u57fa\u4e8e\u6ed1\u52a8\u7a97\u53e3\u5c55\u5f00\u7684\u3002\u800c\u5728\u8fd9\u79cd\u8bed\u5883\u4e0b\uff0c\u8fd9\u6837\u7684\u4e00\u4e2a\u6ed1\u52a8\u7a97\u53e3\u88ab\u79f0\u4e3a\u4e00\u4e2a\u63d0\u8bae(proposal)\u3002

    \u4f46\u662f\u663e\u7136\uff0c\u4f7f\u7528\u6700\u6734\u7d20\u7684\u6ed1\u52a8\u7a97\u53e3\u4f1a\u5bfc\u81f4\u201c\u63d0\u8bae\u201d\u8fc7\u591a\uff0c\u5bfc\u81f4\u6548\u7387\u592a\u4f4e\u3002\u6240\u4ee5\u6211\u4eec\u8981\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002

    \u4e00\u822c\u8fd9\u4e9b\u4f18\u5316\u7684\u65b9\u6cd5\u90fd\u662f\u542f\u53d1\u5f0f(heuristics)\u7684\u505a\u6cd5\uff0c\u4f8b\u5982 over-segmentation\uff0c

    \u800c\u8fd9\u7c7b\u65b9\u6cd5\u5c31\u662f R-CNN (region proposal & CNN) P36

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#evaluation-metric","title":"Evaluation metric","text":"

    \u5bf9\u4e8e\u5355\u4e2a\u7269\u4f53\uff0c\u4ecd\u7136\u662f IoU

    P39

    \u4e3a\u4e86\u8bc4\u4ef7\u9884\u6d4b\u7ed3\u679c\u7684\u6b63\u786e\u6027\uff0c\u6211\u4eec\u9700\u8981\u4e3a\u5b83\u8bbe\u7f6e\u4e00\u4e2a\u9608\u503c\u3002

    \u800c\u5bf9\u4e8e\u591a\u4e2a\u7269\u4f53\uff0c\u5219\u4e0d\u90a3\u4e48\u7b80\u5355\uff1aP42

    \uff08\u56de\u5fc6\u7edf\u8ba1\u5b66\u5185\u5bb9\uff09

    positive: \u80af\u5b9a\u7684\u5047\u8bbe P

    negative: \u5426\u5b9a\u7684\u5047\u8bbe N

    true: \u5047\u8bbe\u662f\u6210\u7acb\u7684 T

    false: \u5047\u8bbe\u662f\u9519\u8bef\u7684 F

    \u6211\u4eec\u901a\u8fc7\u4e0b\u9762\u4e24\u4e2a\u6807\u51c6\u6765\u8054\u5408\u5224\u65ad\u6548\u679c\u3002

    \u7cbe\u5ea6 Precision = TP/(TP+FP)\uff1a\u63cf\u8ff0\u7ed9\u5b9a\u7684 bbox \u91cc\u6709\u591a\u5c11\u662f\u6b63\u786e\u7684

    \u53ec\u56de\u7387 Recall = TP/(TP+FN)\uff1a\u63cf\u8ff0\u6240\u6709\u5bf9\u8c61\u4e2d\uff0c\u88ab\u6211\u4eec\u8bc6\u522b\u51fa\u6765\u7684\u6709\u591a\u5c11

    \u4e00\u822c\u6765\u8bf4\uff0c\u8fd9\u4fe9\u4e1c\u897f\u6709\u4e00\u4e2a trade-off\u3002\uff08\u6982\u7edf\u91cc\u5e94\u8be5\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\uff09

    https://en.wikipedia.org/wiki/Precision_and_recall

    \u800c\u6700\u7ec8\u7684\u8861\u91cf\u65b9\u6cd5\uff0c\u662f Mean Average Precision (mAP)\u3002

    1. Run object detector on all test images
    2. For each category, compute Average Precision
    3. (AP) = area under Precision vs Recall Curves

    PPT p52

    \u5148\u505a\u6240\u6709\u7c7b\u522b\u7684 AP\uff0c\u7136\u540e\u53d6\u5e73\u5747\u5c31\u662f mAP

    mAP@threshold = ...

    COCOmAP = average(mAP@threshold_i), for i \\in {0.5, 0.55, 0.6, \u2026, 0.95}

    Non-Max Suppression

    \u5bf9\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u6211\u6709\u53ef\u80fd\u8bc6\u522b\u51fa\u597d\u51e0\u4e2a\u8bc6\u522b\u540c\u4e00\u4e2a\u7269\u4f53\u7684 bbox\uff0c\u6240\u4ee5\u6211\u53ef\u4ee5\u8003\u8651\u8bbe\u8ba1\u4e00\u79cd\u7b97\u6cd5\u51cf\u5c11\u8fd9\u79cd\u8bc6\u522b\u3002

    \u7b80\u5355\u6765\u8bf4\uff0c\u505a\u6cd5\u5c31\u662f\u627e score \u6700\u5927\u7684\uff0c\u7136\u540e\u770b\u5176\u4ed6 bbox \u548c\u8fd9\u4e2a bbox \u7684 IoU\uff0c\u5927\u4e8e\u4e00\u5b9a\u6743\u91cd\u65f6\uff0c\u8ba4\u4e3a\u5b83\u4eec\u662f\u4e00\u81f4\u7684\uff0c\u5c31\u53ef\u4ee5\u628a\u8f83\u5c0f\u7684\u90a3\u4e2a\u5220\u6389\u4e86\u3002

    Fast R-CNN

    RoI pool \uff08\u6ca1\u542c\u61c2\uff0c\u6574\u7406\u7684\u65f6\u5019\u518d\u4ed4\u7ec6\u5b66\u4e00\u4e0b\uff09

    Faster R-CNN

    \u7528\u7f51\u7edc\uff08Region Proposal Network, RPN\uff09\u751f\u6210\u63d0\u8bae\u9009\u6846\uff0c

    \u951a\u70b9 anchor\uff1a

    \u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\uff0c\u951a\u70b9\u662f\u7528\u4e8e\u76ee\u6807\u68c0\u6d4b\u7684\u9884\u5b9a\u4e49\u6846\u6216\u611f\u5174\u8da3\u533a\u57df\u3002\u951a\u70b9\u80fd\u591f\u5e2e\u52a9\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u8bc6\u522b\u56fe\u50cf\u4e2d\u5b58\u5728\u7684\u7269\u4f53\u53ca\u5176\u4f4d\u7f6e\uff0c\u4ece\u800c\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u7684\u51c6\u786e\u6027\u3002\u951a\u70b9\u901a\u5e38\u7531\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u957f\u5bbd\u6bd4\u548c\u5c3a\u5ea6\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u56e0\u7d20\u51b3\u5b9a\u4e86\u5b83\u4eec\u7684\u5927\u5c0f\u548c\u5f62\u72b6\u3002\u5728\u8bad\u7ec3\u671f\u95f4\uff0cCNN\u5b66\u4e60\u9884\u6d4b\u76f8\u5bf9\u4e8e\u8fd9\u4e9b\u951a\u70b9\u7684\u7269\u4f53\u7684\u4f4d\u7f6e\u548c\u5927\u5c0f\u3002\u4f7f\u7528\u951a\u70b9\u53ef\u4ee5\u68c0\u6d4b\u4e0d\u540c\u5927\u5c0f\u548c\u5bbd\u9ad8\u6bd4\u7684\u7269\u4f53\uff0c\u5e76\u6709\u52a9\u4e8e\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u5728\u590d\u6742\u573a\u666f\u4e0b\u7684\u51c6\u786e\u6027\u3002----chatGPT

    RPN \u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u628a\u751f\u6210\u9009\u6846\u95ee\u9898\u8f6c\u5316\u4e3a\u6253\u5206\u95ee\u9898\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u7ed9\u6bcf\u4e2a\u50cf\u7d20\u6253\u5728\u8be5\u4f4d\u7f6e\u6709\u4e00\u4e2a\u7279\u5b9a size \u7684\u6846\u7684\u53ef\u80fd\u6027\u7684\u5206\u3002

    \u4e8c\u9636\u6bb5\u5bf9\u8c61\u68c0\u6d4b\u7b26 two-stage object detector

    P76 \u5404\u79cd\u65b9\u6cd5\u7684\u6548\u679c\u6392\u5e8f\u3002

    \u4e00\u79cd\u5bf9 two-stage object detector \u7684\u6539\u8fdb\u662f single-stage object detector\uff0c\u5927\u6982\u5c31\u662f\u5728\u505a RPN \u7684\u540c\u65f6\u53bb\u9884\u6d4b\u8fd9\u4e2a\u6846\u6807\u8bb0\u7684\u662f\u67d0\u4e2a\u7c7b\u522b\u7684\u6982\u7387\u3002

    single-stage \u7684\u4ee3\u8868\u6027\u5de5\u4f5c\uff1aYOLO

    two-stage v.s. single-stage

    \u4f46\u662f\u6211\u4eec\u4e0a\u9762\u7684\u5de5\u4f5c\u90fd\u6ca1\u8003\u8651\u5c3a\u5ea6\u53d8\u5316\uff0cFeature pyramid network \u5728\u8fd9\u65b9\u9762\u63d0\u51fa\u4e86\u89e3\u51b3\u65b9\u6848\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#instance-segmentation","title":"Instance segmentation","text":"

    Faster R-CNN + additional head

    Mask R-CNN

    Deep snake

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#panoptic-segmentation","title":"Panoptic segmentation","text":"

    Microsoft COCO dataset

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#human-pose-estimation","title":"Human pose estimation","text":"

    keypoints

    represent joint location as the heatmap // hourglass networks

    Top-down: - Detect humans and detect keypoints in each bbox - Example: Mask R-CNN - \u6700\u5927\u7684\u95ee\u9898\u8fd8\u662f\u6162

    Bottom-up: - Detect keypoints and group keypoints to form humans - Example: OpenPose \u5148\u627e kpts\uff0c\u518d\u5229\u7528 Affinity Fields \u628a\u5c5e\u4e8e\u4e00\u4e2a\u4eba\u7684 kpts \u5408\u5728\u4e00\u8d77\u3002

    Top-down is generally more accurate Bottom-up is faster\uff0c\u800c\u4e14\u5728\u906e\u6321\u60c5\u51b5\u4e0b\u4e5f\u6709\u5b83\u7684\u4f18\u52bf

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#optical-flow","title":"Optical flow","text":"

    \u5149\u6d41

    video classification

    \u4e00\u4e2a\u505a\u6cd5\u662f\u628a\u89c6\u9891\u5f53\u4f5c\u4e00\u4e2a 3d \u56fe\u50cf\u53bb\u505a\uff0c\u5373 3D CNN\u3002\u4f46\u662f\u6570\u636e\u7ef4\u5ea6\u975e\u5e38\u5927\u3002

    Temporal action localization

    Spatial-temporal detection

    \u505a\u6cd5\u4e5f\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a 3D \u7684 R-CNN \u53bb\u505a\u3002

    Multi-object tracking

    \u5bf9\u6bcf\u4e00\u5e27\u505a\u7269\u4f53\u68c0\u6d4b\uff0c\u7136\u540e\u5728\u6bcf\u4e00\u5e27\u4e4b\u95f4\u505a\u5173\u8054\u5339\u914d\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/","title":"Lecture 11 | 3D Deep Learning","text":"

    \u7ea6 385 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    Deep Learning for 3D reconstruction

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#feature-matching","title":"Feature matching","text":"

    recap: SfM // Colmap

    use deep learning to improve feature matching

    \u4f20\u7edf\u65b9\u6cd5\u7684\u7f3a\u70b9\u5c31\u662f\u56e0\u4e3a\u8fd9\u4e9b\u65b9\u6cd5\u90fd\u662f handcrafted \u7684\u3002\u6240\u4ee5\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u7528 deep learning \u6765\u589e\u5f3a\u6548\u679c\u3002

    example: SuperPoint\u3001SuperGlue

    \u63cf\u8ff0\u503c\uff1a

    1. contrastive loss
    2. triplet loss

    \u5b9e\u9645\u4e0a\u672c\u8d28\u7c7b\u4f3c\uff0c\u6548\u679c\u76f8\u8fd1

    \u4e3b\u6d41\u7528 MVS \u6765\u751f\u6210\u8bad\u7ec3\u6570\u636e

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#object-pose-estimation","title":"Object Pose Estimation","text":"

    \u672c\u8d28\u4e0a\u662f\u5728\u8ba8\u8bba\u7269\u4f53\u5728\u91cd\u5efa\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u548c\u76f8\u673a\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u7684\u53d8\u6362\u5173\u7cfb\u3002

    PnP

    \u53ef\u662f\u96be\u5c31\u96be\u5728\uff0c\u5982\u4f55\u5bfb\u627e 3D-2D \u7684\u5173\u7cfb\u5462\uff1f

    \u4e00\u4e2a idea \u662f\uff0c\u9996\u5148\u5f97\u5230\u4e00\u4e2a\u8f83\u597d\u7684\u91cd\u5efa\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u91cd\u5efa\u6a21\u578b\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4ece\u522b\u7684\u601d\u8def\u6765\u770b\u8fd9\u4ef6\u4e8b\u3002

    pose refinement methods

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#human-pose-estimation","title":"Human Pose Estimation","text":"

    (Markerless) MoCap

    Monocular 3D Human Pose Estimation (eg. Vnet)

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#depth-estimation","title":"Depth Estimation","text":"

    MVSNet

    MVS

    \u79bb\u6563\u8868\u793a\u3001\u9690\u5f0f\u8868\u793a\uff08\u7528\u4e00\u4e2a\u7f51\u7edc\u6765\u8868\u793a\u4e00\u4e2a\u51fd\u6570 Implicit Neural Representations\uff0c\u4ee3\u8868\uff1aNeRF\uff09

    Replacing density field in NeRF by SDF: NeuS

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#single-image-to-3d","title":"Single Image to 3D","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec11/#deep-learning-for-3d-understanding","title":"Deep learning for 3D understanding","text":"

    \u8ba1\u7b97\u5f00\u9500\u5f88\u5927

    \u8fd1\u51e0\u5e74\u63d0\u51fa\u7684\u89e3\u51b3\u65b9\u6848\uff1aSparse ConvNets

    Octree \u516b\u53c9\u6811\uff0c\u7a7a\u95f4\u5212\u5206

    \u7a00\u758f\u5377\u79ef\uff0c\u53ea\u6709\u6709\u503c\u7684\u5730\u65b9\u8fdb\u884c\u5377\u79ef

    \u7531\u4e8e\u5377\u79ef\u7b49\u64cd\u4f5c\u662f\u5efa\u7acb\u5728\u7f51\u683c\u4e0a\u7684\uff0c\u800c\u70b9\u4e91\u5e76\u4e0d\u5b9a\u4e49\u5728\u7f51\u683c\u4e0a\uff0c\u6240\u4ee5\u5bf9\u70b9\u4e91\u8fdb\u884c\u5377\u79ef\u5219\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u65b9\u6cd5\u3002

    \u4e00\u4e2a\u76f8\u5173\u5de5\u4f5c\u662f PointNet\uff0c\u4e13\u95e8\u7528\u5728\u5bf9\u70b9\u4e91\u4e0a\u3002\u8fd8\u6709 PointNet++

    3D Semantic Segmentation

    3D Object Detection

    3D Instance Segmentation

    PointRCNN

    Frustum PointNets

    \u6570\u636e\u96c6\uff1aShapeNet, PartNet,SceneNet , ScanNet

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/","title":"Lecture 12 | Computational Photography 1","text":"

    \u7ea6 253 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    What's \u8ba1\u7b97\u6444\u5f71\uff1f

    ...

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#high-dynamic-range-imaging-hdr","title":"High Dynamic Range Imaging (HDR)","text":"

    \u6211\u4eec\u5e0c\u671b\u4eae\u7684\u548c\u6697\u7684\u5730\u65b9\u7ec6\u8282\u90fd\u5f88\u4e30\u5bcc

    \u66dd\u5149 exposure = Gain\u589e\u76ca * Irradiance\u8f90\u7167\u5ea6 * Time\u66dd\u5149\u65f6\u95f4

    \u5206\u522b\u53d6\u51b3\u4e8e\u2026\u2026

    Dynamic range

    The ratio between the largest and smallest values of a certain quantity

    HRD: \u4e0d\u540c\u4eae\u5ea6\u90fd\u62cd\u4e00\u4e9b\uff0c\u7136\u540e\u5408\u6210

    12 to 8 -> tone mapping

    Gamma compression

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#deblurring","title":"Deblurring","text":"

    \u6a21\u7cca\u7684\u4e24\u4e2a\u4e3b\u8981\u539f\u56e0\uff1adefocus and motion blur

    blurred image = clear image * blur kernel

    deblurring = deconvolution

    inverse filter

    wiener filter

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#colorization","title":"Colorization","text":"

    \u6700\u5173\u952e\u7684\u95ee\u9898\u662f\uff0c\u5982\u4f55\u51b3\u5b9a\u4e0a\u7684\u989c\u8272

    \u4e3b\u8981\u6709\u4e24\u7c7b\u65b9\u6cd5\uff1a

    1. sample-based colorization
    2. interactive colorization
    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#sample-based","title":"Sample-based","text":"

    ...

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#interactive","title":"Interactive","text":"

    ...

    \u5bf9\u4e8e\u89c6\u9891

    Colorful Image Colorization

    GAN (Generative Adversarial Network)

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#more-image-synthesis-tasks","title":"more Image synthesis tasks","text":"

    GAN \u7684\u6539\u8fdb\uff1aCycle-GAN\uff0c\u89e3\u51b3\u4e86\u7f3a\u5c11\u6210\u5bf9\u7684\u8bad\u7ec3\u6570\u636e\u7684\u95ee\u9898

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#super-resolution","title":"Super Resolution","text":"

    up sampling

    bi-cubic

    super resolution using GAN

    "},{"location":"cour_note/D2QD_Intro2CV/Lec13/","title":"Lecture 13 | Computational Photography 2","text":"

    \u7ea6 90 \u4e2a\u5b57

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec13/#image-based-rendering","title":"Image-based Rendering","text":"

    rendering: from 3D models to images.

    Image-based Rendering: images -> 3D Models -> novel views.

    representations:

    surface-based representations

    volume-based representations

    \u81ea\u7531\u89c6\u70b9\u89c6\u9891

    "},{"location":"cour_note/D3QD_OperatingSystem/","title":"\ud83d\udc8e \u64cd\u4f5c\u7cfb\u7edf | Operating System","text":"

    \u7ea6 260 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    \u5206\u6570\u6784\u6210

    \u7b14\u8bb0\u53c2\u8003

    \u672c\u8bfe\u7a0b\u7684\u7b14\u8bb0\u4e3b\u8981\u53c2\u8003\u8fc7\u5982\u4e0b\u8d44\u6599\uff1a

    list

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/","title":"Unit 0: \u603b\u89c8 | Overview","text":"

    \u7ea6 9045 \u4e2a\u5b57 23 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 46 \u5206\u949f

    \u5bfc\u8bed

    \u672c\u5355\u5143\u4e3b\u8981\u6709\u4e24\u4e2a\u4efb\u52a1\uff1a

    1. \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u4e00\u4e2a\u8f83\u4e3a\u62bd\u8c61\u7684\u4ecb\u7ecd\uff0c\u540c\u65f6\u5efa\u7acb\u8d77\u6574\u95e8\u8bfe\u7a0b\u7684\u6846\u67b6\uff0c\u65b9\u4fbf\u8bfb\u8005\u5728\u4e4b\u540e\u7684\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u80fd\u6709\u4e00\u4e2a\u6bd4\u8f83\u603b\u4f53\u7684\u8ba4\u8bc6\uff0c\u80fd\u5e26\u7740\u76ee\u7684\u53bb\u5b66\u4e60\u5177\u4f53\u7684\u77e5\u8bc6\uff1b
    2. \u4ecb\u7ecd\u4e00\u4e9b\u6bd4\u8f83\u57fa\u7840\u7684\u5185\u5bb9\uff0c\u6216\u662f\u4e00\u4e9b\u6bd4\u8f83\u7410\u788e\u3001\u4ec5\u9700\u4e86\u89e3\u7684\u5185\u5bb9\uff1b

    \u7531\u4e8e\u8bfe\u672c\u7684 Overview \u5199\u5f97\u975e\u5e38\u4e00\u8a00\u96be\u5c3d\uff0c\u6240\u4ee5\u6211\u5728\u5543\u5b8c\u540e\u8fdb\u884c\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4f60\u53ef\u4ee5\u5728\u8fd9\u91cc\u627e\u5230\u6211\u6574\u7406\u8fc7\u7a0b\u4e2d\u5b8c\u6210\u7684\u601d\u7ef4\u5bfc\u56fe\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u601d\u7ef4\u5bfc\u56fe\u66f4\u591a\u7684\u662f\u63d0\u4f9b\u6846\u67b6\u6027\u7684\u8ba4\u77e5\uff0c\u5177\u4f53\u5230\u6bcf\u4e2a\u53f6\u5b50\u8282\u70b9\u7684\u5185\u5bb9\u5efa\u8bae\u8fd8\u662f\u4ee5\u672c\u6587\u4e3a\u4e3b\u3002\u6b64\u5916\uff0c\u672c\u6587\u5f88\u591a\u89c2\u70b9\u5177\u6709\u6bd4\u8f83\u5f3a\u70c8\u7684\u4e2a\u4eba\u7406\u89e3\u8272\u5f69\uff0c\u5982\u679c\u4f60\u5bf9\u5176\u4e2d\u7684\u8bba\u65ad\u62b1\u6709\u5f02\u8bae\uff0c\u6b22\u8fce\u8ba8\u8bba\uff01

    \u5728\u6b63\u5f0f\u5f00\u59cb\u6838\u5fc3\u5185\u5bb9\u7684\u5b66\u4e60\u4e4b\u524d\uff0c\u6211\u60f3\u5148\u505a\u4e00\u70b9\u8bf4\u660e\uff0c\u4e5f\u7b97\u662f\u4e00\u70b9\u5173\u4e8e\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ecf\u9a8c\u4e4b\u8c08\u3002

    \u201c\u5b9a\u4e49\u4e0d\u5b58\u5728\u4e86\u201d

    \u533a\u522b\u4e8e\u81ea\u7136\u79d1\u5b66\u7684\u7814\u7a76\u5bf9\u8c61\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e00\u4e2a\u5f7b\u5f7b\u5e95\u5e95\u7684\u4eba\u9020\u7269\uff0c\u5176\u5f88\u591a\u6982\u5ff5\u90fd\u5f88\u96be\u754c\u5b9a\u4e00\u4e2a\u660e\u786e\u7684\u754c\u9650\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fc7\u7a0b\u4e2d\u9047\u5230\u7684\u6700\u9996\u8981\u7684\u95ee\u9898\u3002\u6211\u4f1a\u5c3d\u529b\u7ed9\u51fa\u6211\u8ba4\u4e3a\u66f4\u7cbe\u786e\u7684\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4ecd\u7136\u5b58\u5728\uff0c\u6240\u4ee5\u6211\u4eec\u5c3d\u91cf\u53ea\u56f4\u7ed5\u5b9a\u4e49\u7684\u4e2d\u5fc3\u8fdb\u884c\u5b66\u4e60\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","title":"\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","text":"

    \u672c\u8282\u4e3b\u8981\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5f53\u4f5c\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u5355\u4f4d\uff0c\u6765\u8ba8\u8bba\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","title":"\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","text":"

    \u6574\u95e8\u8bfe\u7a0b\u6211\u4eec\u9700\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u663e\u7136\u662f\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf(Operating System, OS)\u3002\u63a5\u4e0b\u6765\u6211\u5c06\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u8ff0\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u3002

    \u2460 \u4ece\u804c\u80fd\u4e0a\u770b

    \u4ece\u5176\u804c\u80fd\u4e0a\u770b\uff0c\u6211\u8ba4\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u662f\u4e00\u4e2a\u8d44\u6e90\u7ba1\u7406\u7cfb\u7edf\u3002

    \u53f3\u56fe\u63cf\u8ff0\u4e86\u8ba1\u7b97\u673a\u7cfb\u7edf\u7684\u62bd\u8c61\u5c42\u7ea7\uff1a\u81ea\u4e0a\u800c\u4e0b\uff0c\u7528\u6237\u901a\u8fc7\u5e94\u7528\u7a0b\u5e8f\u89e3\u51b3\u95ee\u9898\uff0c\u5e94\u7528\u7a0b\u5e8f\u5411\u64cd\u4f5c\u7cfb\u7edf\u8bf7\u6c42\u8ba1\u7b97\u673a\u8d44\u6e90\uff1b\u81ea\u4e0b\u800c\u4e0a\uff0c\u8ba1\u7b97\u673a\u786c\u4ef6\u4e3a\u8f6f\u4ef6\uff08\u5305\u62ec OS\uff09\u63d0\u4f9b\u4e86\u7269\u8d28\u57fa\u7840\uff0c\u672c\u8d28\u4e0a\uff0c\u786c\u4ef6\u63d0\u4f9b\u4e86\u8ba1\u7b97\u673a\u8d44\u6e90\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e2d\u95f4\u5c42\uff0c\u5411\u4e0a\u4e3a\u7528\u6237\u7a0b\u5e8f\u5206\u914d\u6613\u7528\u7684\u8d44\u6e90\uff0c\u5411\u4e0b\u76f4\u63a5\u64cd\u4f5c\u786c\u4ef6\u8d44\u6e90\u7684\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u8fd8\u9700\u8981\u516c\u5e73\u3001\u9ad8\u6548\u5730\u89e3\u51b3\u8d44\u6e90\u4e4b\u95f4\u7684\u51b2\u7a81\u95ee\u9898\u7b49\u7b49\u3002

    \u5b83\u5c31\u597d\u50cf\u836f\u623f\u67dc\u53f0\uff0c\u5404\u79cd\u836f\u54c1\u5c31\u597d\u50cf\u8ba1\u7b97\u673a\u8d44\u6e90\uff0c\u75c5\u4eba\u63d0\u4f9b\u5904\u65b9\uff0c\u67dc\u53f0\u6536\u5230\u8bf7\u6c42\uff08\u7cfb\u7edf\u8c03\u7528\uff09\u540e\u5904\u7406\u8bf7\u6c42\uff0c\u5e76\u5343\u8f9b\u4e07\u82e6\uff08\u5177\u4f53\u4f1a\u9047\u5230\u4ec0\u4e48\u95ee\u9898\u6211\u4eec\u4f1a\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u5b66\u5230\uff09\u66ff\u4f60\u51c6\u5907\u597d\u4f60\u9700\u8981\u7684\u8d44\u6e90\uff0c\u5b8c\u6210\u4f60\u7684\u8bf7\u6c42\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7ba1\u7406\u7684\u8d44\u6e90\u6709\u8fd9\u4e9b\uff1a\u2460 CPU\uff0c\u7531\u4e8e CPU \u7684\u4e00\u4e2a\u6838(core)\u5728\u7279\u5b9a\u65f6\u523b\u53ea\u80fd\u5904\u7406\u4e00\u4ef6\u4e8b\uff0c\u6240\u4ee5\u201cCPU \u80fd\u591f\u4e3a\u6211\u6240\u7528\u201d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u8d44\u6e90\uff1b\u2461 \u5185\u5b58\uff0c\u6267\u884c\u7a0b\u5e8f\u79bb\u4e0d\u5f00\u5185\u5b58\uff0c\u7528\u6237\u7a0b\u5e8f\u81ea\u7136\u4e5f\u9700\u8981\u5360\u7528\u4e00\u5b9a\u7684\u5185\u5b58\u6765\u89e3\u51b3\u95ee\u9898\uff1b\u2462 I/O \u8bbe\u5907\uff0c\u6253\u5370\u673a\u4e0d\u80fd\u540c\u65f6\u6253\u5370\u6bdb\u6982\u5386\u5e74\u5377\u548c\u8f6c\u4e13\u4e1a\u7533\u8bf7\u8868\uff1b\u2463\u2026\u2026

    \u7c97\u7565\u7684\u6765\u8bf4\uff0c\u672c\u8bfe\u7a0b\u4e4b\u540e\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u90fd\u662f\u56f4\u7ed5\u8981\u5982\u4f55\u7ef4\u62a4\u548c\u64cd\u4f5c\u5404\u79cd\u8d44\u6e90\u800c\u5c55\u5f00\u7684\u3002

    \u2461 \u4ece\u5b58\u5728\u4e0a\u770b

    \u4ece\u5176\u5b58\u5728\u6765\u770b\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u8fd8\u662f\u4e00\u4e2a\u8f6f\u4ef6\u7a0b\u5e8f\uff0c\u662f\u4e00\u4e2a\u4e0d\u505c\u8fd0\u884c\u7740\u7684\uff0c\u7528\u6765\u6267\u884c\u7528\u6237\u7a0b\u5e8f\u7684\u8f6f\u4ef6\u3002\u8fd9\u4e2a\u89d2\u5ea6\u7684\u672c\u8d28\u540c\u65f6\u53cd\u5e94\u4e86\u64cd\u4f5c\u7cfb\u7edf\u6700\u521d\u5b58\u5728\u7684\u76ee\u7684\uff0c\u4e3a\u4e86\u63d0\u9ad8\u8ba1\u7b97\u673a\u8d44\u6e90\u7684\u5229\u7528\u6548\u7387\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u7a0b\u5e8f\u6765\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u8fd9\u4ef6\u4e8b\uff0c\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u81ea\u52a8\u5316\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u4e5f\u9700\u8981\u6210\u4e3a\u8ba1\u7b97\u673a\u786c\u4ef6\u7684\u201c\u4ee3\u7406\u4eba\u201d\uff0c\u638c\u63e1\u786c\u4ef6\u7684\u6240\u6709\u8d44\u6e90\uff0c\u5e76\u4e14\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8fd8\u5f97\u60f3\u65b9\u6cd5\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u57fa\u7840\u6700\u4e2d\u592e\u7684\u90e8\u5206\u662f\u5185\u6838(kernel)\uff0c\u8981\u7ed9\u51fa kernel \u7684\u7cbe\u786e\u5b9a\u4e49\u5f88\u96be\uff0c\u8fd9\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u8ba1\u7684\u7ed3\u6784\u6709\u5173\uff08\u53c2\u8003\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\uff09\uff0c\u5b83\u6700\u660e\u663e\u7684\u4e00\u4e2a\u7279\u70b9\u5c31\u662f\u81ea\u8ba1\u7b97\u673a\u5f00\u673a\u540e\u5c31\u4e0d\u505c\u5728\u8fd0\u884c\u3002OS \u548c kernel \u7684\u5173\u7cfb\u5c31\u597d\u50cf\u7b14\u8bb0\u672c\u7535\u8111\u548c\u5b83\u7684\u4e3b\u677f\uff0c\u5982\u679c\u5c06 OS \u4e2d\u7684\u5176\u4ed6\u90e8\u5206\u9664\u53bb\uff0ckernel \u4ecd\u7136\u81ea\u6d3d\uff0c\u4ecd\u7136\u5177\u5907\u5b83\u5e94\u6709\u7684\u5185\u5728\u7684\u529f\u80fd\uff0c\u6bd4\u5982\u5b83\u4ecd\u7136\u5177\u5907\u5bf9\u8d44\u6e90\u8fdb\u884c\u8c03\u5ea6\u7684\u80fd\u529b\uff0c\u53ea\u4e0d\u8fc7\u5b83\u53ef\u80fd\u62ff\u4e0d\u5230\u80fd\u8ba9\u5b83\u8c03\u5ea6\u7684\u8d44\u6e90\u3002\u6211\u5728\u8fd9\u91cc\u907f\u514d\u8c08\u5230 OS \u548c kernel \u7684\u533a\u522b\uff0c\u56e0\u4e3a\u8fd9\u5b9e\u5728\u96be\u4ee5\u8bf4\u6e05\uff0c\u751a\u81f3\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u90fd\u4f1a\u7528 OS \u6765\u4ee3\u66ff kernel \u7684\u6982\u5ff5\u3002

    \u81f3\u6b64\uff0c\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u4e86\u89e3\u4e86\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\uff0c\u73b0\u5728\u7528\u4e00\u53e5\u8bfe\u672c\u4e0a\u7684\u8bdd\u6765\u505a\u603b\u7ed3\u3002

    The common functions of controlling and allocating resources are then brought together into one piece of software: the operating system. --Operating System Concepts (10th edition)

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","text":"

    \u73b0\u5728\u6211\u4eec\u77e5\u9053\u64cd\u4f5c\u7cfb\u7edf\u662f\u4ec0\u4e48\u4e1c\u897f\u4e86\uff0c\u90a3\u4e48\u5728\u6b64\u57fa\u7840\u4e0a\u6211\u4eec\u6316\u6398\u4e00\u4e0b\uff0c\u600e\u6837\u624d\u7b97\u4e00\u4e2a\u597d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u4e5f\u5c31\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u65b9\u5411\uff0c\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4e5f\u4f1a\u7b80\u5355\u63d0\u53ca\u4e00\u4e9b\u6211\u4eec\u4e4b\u540e\u4f1a\u8bbe\u8ba1\u7684\u5185\u5bb9\uff0c\u4ee5\u4f9b\u53c2\u8003\u3002

    \u9996\u5148\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u9700\u8981\u6709\u8f83\u597d\u7684\u53ef\u9760\u6027\u548c\u5b89\u5168\u6027\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8981\u5c3d\u53ef\u80fd\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u826f\u597d\u7684\u5f02\u5e38\u5904\u7406\u673a\u5236\uff08\u901a\u8fc7#\u4e2d\u65ad\u673a\u5236\u5b9e\u73b0\uff09\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u9700\u8981\u6709\u5f3a\u5065\u7684\u4f53\u9b44\uff0c\u4e0d\u80fd\u4e00\u522e\u98ce\u5b83\u5c31\u75c5\u5012\u4e86\uff1b\u53e6\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u6743\u9650\u7ba1\u7406\u7cfb\u7edf\uff08#\u7279\u6743\u6a21\u5f0f\uff09\uff0c\u4ee5\u5c4f\u853d\u6765\u81ea\u7528\u6237\u7a0b\u5e8f\u7684\u5371\u9669\u884c\u4e3a\uff0c\u7528\u6237\u53ef\u4ee5\u5411\u201c\u67dc\u53f0\u201d\u7d22\u53d6\u6297\u751f\u7d20\uff0c\u4f46\u662f\u7528\u6237\u7d22\u53d6\u5e93\u623f\u94a5\u5319\u65f6\uff0c\u5408\u683c\u7684\u201c\u67dc\u53f0\u201d\u663e\u7136\u4e0d\u80fd\u7b54\u5e94\u8fd9\u4e2a\u8bf7\u6c42\u3002

    \u5176\u6b21\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u6709\u8f83\u597d\u7684\u6613\u7528\u6027\uff0c\u5b83\u9700\u8981\u5411\u7528\u6237\u63d0\u4f9b\u7b80\u4fbf\u7684\u670d\u52a1\u4ee5\u8bf7\u6c42\u7cfb\u7edf\u8d44\u6e90\uff0c\u6bd5\u7adf\u64cd\u4f5c\u7cfb\u7edf\u7684\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u65b9\u4fbf\u7528\u6237\u4f7f\u7528\u7cfb\u7edf\u8d44\u6e90\u2014\u2014\u8fd9\u610f\u5473\u7740\u6211\u4eec\u7684\u201c\u4ee3\u7406\u4eba\u201d\u5f97\u662f\u4e2a\u597d\u4ea4\u6d41\u7684\u4eba\uff0c\u800c\u7528\u6237\u7a0b\u5e8f\u8c03\u7528\u64cd\u4f5c\u7cfb\u7edf\u8d44\u6e90\u7684\u9014\u5f84\u662f\u7cfb\u7edf\u8c03\u7528\u3002

    \u5bbd\u6cdb\u4e00\u70b9\u6765\u8bb2\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u547d\u4ee4\u63a5\u53e3\u548c\u7a0b\u5e8f\u63a5\u53e3\uff0c\u6709\u4e9b\u5730\u65b9\u4e5f\u4f1a\u63d0\u5230\u56fe\u5f62\u7528\u6237\u63a5\u53e3(Graphical User Interface, GUI)\uff0c\u4ee5\u53ca\u547d\u4ee4\u884c\u63a5\u53e3(Command Line Interface, CLI)\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u4e0d\u662f\u5f88\u559c\u6b22\u8fd9\u4e2a\u5206\u7c7b\u3002

    \u5f53\u7136\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u662f\u9ad8\u6548\u7684\uff0c\u4ece\u6700\u65e9\u7684\u6279\u5904\u7406\u7cfb\u7edf\u5230\u73b0\u5728\u7684\u5206\u65f6\u7cfb\u7edf\uff08#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1\uff09\uff0cCPU \u7684\u5229\u7528\u7387\u5728\u4e0d\u65ad\u63d0\u5347\uff0c\u5468\u8f6c\u65f6\u95f4\u4e5f\u5728\u4e0d\u65ad\u7f29\u77ed\uff0c\u5982\u4eca\u7684\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u5206\u65f6\u6280\u672f\u4e5f\u5b9e\u73b0\u4e86\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u63d0\u9ad8\u6548\u7387\u7684\u540c\u65f6\u4e5f\u63d0\u9ad8\u4e86\u7528\u6237\u4f53\u9a8c\u3002

    \u8fd8\u6709\u4e00\u70b9\u4e0d\u5bb9\u5ffd\u89c6\u7684\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\uff08\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u7684\uff09\u516c\u5e73\u6027\uff0c\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406\u4e2d\u6211\u4eec\u4f1a\u4e86\u89e3\u5230\uff0c\u591a\u8fdb\u7a0b\u8bed\u5883\u4e0b\u6709\u5927\u91cf\u7684\u51b2\u7a81\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff0c\u800c\u6211\u4eec\u5728\u5904\u7406\u8fd9\u4e9b\u51b2\u7a81\u95ee\u9898\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u9965\u997f(Starvation)\uff08\u5177\u4f53\u662f\u4ec0\u4e48\u8bf7\u53c2\u8003\u4e0b\u4e00\u5355\u5143\uff09\uff0c\u800c\u64cd\u4f5c\u7cfb\u7edf\u8981\u505a\u7684\u5c31\u662f\u907f\u514d\u9965\u997f\u7684\u51fa\u73b0\uff0c\u5c31\u597d\u50cf\u7e41\u5fd9\u65f6\u6bb5\u7684\u7535\u68af\uff0c\u6211\u4eec\u4e0d\u80fd\u56e0\u4e3a\u4e8c\u697c\u6d41\u91cf\u5f88\u5927\u5c31\u4e0d\u7ba1\u4e09\u697c\u4ee5\u4e0a\u7684\u4eba\u3002

    \u4e0a\u8ff0\u76ee\u6807\u5927\u591a\u662f\u9488\u5bf9\u4f7f\u7528\u8005\u800c\u8a00\u7684\uff0c\u90a3\u4e48\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u53ef\u6269\u5c55\u6027\u3001\u6613\u7ef4\u62a4\u6027\u7b49\u4e5f\u662f\u975e\u5e38\u91cd\u8981\u7684\u3002\u4e0d\u540c\u7684\u8bbe\u8ba1\u601d\u8def\u9020\u5c31\u4e86\u4e0d\u540c\u7684\u64cd\u4f5c\u7cfb\u7edf\u7ed3\u6784\uff0c\u5404\u79cd\u8bbe\u8ba1\u4e5f\u5404\u81ea\u6709\u5404\u81ea\u7684\u4e3b\u6218\u573a\uff0c\u5173\u4e8e\u8fd9\u4e9b\u5185\u5bb9\uff0c\u6211\u4eec\u4f1a\u5728#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1\u8fd9\u4e00\u90e8\u5206\u66f4\u8be6\u7ec6\u5730\u4ecb\u7ecd\u3002

    \u8fd8\u6709\u8bb8\u591a\uff0c\u4f8b\u5982\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u8981\u5c3d\u53ef\u80fd\u5229\u7528\u786c\u4ef6\u8d44\u6e90\u7b49\uff0c\u4f46\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u8282\u60f3\u8981\u8ba8\u8bba\u7684\u91cd\u70b9\uff0c\u6240\u6709\u5c31\u63a0\u8fc7\u4e86\u3002\u4e0a\u8ff0\u89c2\u70b9\u5e76\u4e0d\u5168\u9762\u4e5f\u4e0d\u4e00\u5b9a\u5b8c\u5168\u6b63\u786e\uff0c\u6709\u4e00\u5927\u90e8\u5206\u90fd\u662f\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0c\u8bf7\u8bfb\u8005\u8fa8\u8bc1\u5730\u770b\u5f85\uff0c\u5982\u679c\u6709\u9519\u8bef\u8bf7\u52a1\u5fc5\u544a\u8bc9\u6211\uff01

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","text":"

    \u672c\u8282\u4e3b\u8981\u5c31\u4e00\u4e9b\u5173\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6574\u4f53\u8bbe\u8ba1\u7684\u95ee\u9898\u505a\u4e00\u4e9b\u8ba8\u8bba\uff0c\u4ece\u4e00\u4e2a\u76f8\u5bf9\u6bd4\u8f83\u9ad8\u7684\u89d2\u5ea6\u8c08\u4e00\u8c08\u4e00\u4e9b\u9876\u5c42\u8bbe\u8ba1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","text":"

    \u867d\u7136\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u662f\u8f6f\u4ef6\uff0c\u4f46\u662f\u5b83\u6bd5\u7adf\u662f\u4e0e\u786c\u4ef6\u7d27\u5bc6\u5173\u8054\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4f1a\u6d89\u53ca\u5230\u4e00\u4e9b\u5173\u4e8e\u786c\u4ef6\u7684\u5185\u5bb9\uff0c\u8fd9\u91cc\u7b80\u5355\u6d89\u53ca\u4e00\u4e9b\u5173\u4e8e\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\u7684\u5185\u5bb9\u3002

    \u6982\u5ff5\u8fa8\u6790

    \u540d\u8bcd \u5b9a\u4f4d CPU \u6267\u884c\u6307\u4ee4\u7684\u786c\u4ef6 Core CPU \u7684\u57fa\u7840\u8ba1\u7b97\u5355\u5143 Multi-core \u4e00\u4e2a CPU \u4e0a\u6709\u591a\u4e2a core Processor \u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a CPU \u7684\u82af\u7247 Multi-processor \u591a\u4e2a processor

    \u6839\u636e\u5904\u7406\u5668\u7684\u6570\u91cf\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6211\u4eec\u8fd9\u91cc\u4ecb\u7ecd\u4e09\u79cd\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\uff1a\u5355\u5904\u7406\u5668\u7cfb\u7edf\u3001\u591a\u5904\u7406\u5668\u7cfb\u7edf\u3001\u96c6\u7fa4\u7cfb\u7edf\u3002

    \u2460 \u5355\u5904\u7406\u5668\u7cfb\u7edf(Single-Processor System)

    \u4e66\u4e2d\u7ed9\u51fa\u7684\u5173\u4e8e\u5355\u5904\u7406\u5668\u7cfb\u7edf\u7684\u5b9a\u4e49\u662f\uff0c\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u901a\u7528\u5904\u7406\u5668(general-purpose processor)\uff0c\u5e76\u4e14\u8fd9\u4e2a processor \u53ea\u6709\u4e00\u4e2a\u6838(core)\u3002\u4f46\u5b83\u53ef\u4ee5\u6709\u82e5\u5e72\u4e13\u7528\u5904\u7406\u5668(special-purpose processor)\uff0c\u7528\u6765\u6267\u884c\u4e00\u4e9b\u7279\u5b9a\u7684\u6307\u4ee4\uff0c\u800c\u8fd9\u4e9b\u4e13\u7528\u5904\u7406\u5668\u5e76\u4e0d\u8fd0\u884c\u7ebf\u7a0b\u3002

    \u2461 \u591a\u5904\u7406\u5668\u7cfb\u7edf(Multiprocessor System)

    \u591a\u5904\u7406\u5668\u7cfb\u7edf\u662f\u6307\u6709\u591a\u4e2a\u5355\u6838\u901a\u7528\u5904\u7406\u5668\u7684\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5904\u7406\u5668\u5171\u4eab\u4e00\u5757\u4e3b\u5185\u5b58\uff0c\u5b83\u4eec\u901a\u8fc7\u603b\u7ebf\u6216\u4ea4\u6362\u7f51\u7edc\u8fde\u63a5\u5728\u4e00\u8d77\u3002

    \u663e\u800c\u6613\u89c1\u7684\u662f\uff0c\u589e\u52a0\u4e86\u5904\u7406\u5668\u7684\u6570\u91cf\u80fd\u591f\u589e\u52a0\u541e\u5410\u91cf(throughput)\uff0c\u5373\u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u7684\u4efb\u52a1\u6570\u91cf\uff0c\u4f46\u662f\u8fd9\u4e2a\u589e\u52a0\u5e76\u4e0d\u662f\u7ebf\u6027\u7684\uff0c\u56e0\u4e3a\u5904\u7406\u5668\u4e4b\u95f4\u7684\u901a\u4fe1\u4e5f\u9700\u8981\u65f6\u95f4\uff0c\u800c\u4e14\u8fd8\u4f1a\u6709\u4e00\u4e9b\u989d\u5916\u7684\u5f00\u9500\u3002

    \u76f8\u5173\u9605\u8bfb

    \u4f46\u662f multi-core \u7684\u8bbe\u8ba1\u5728\u901f\u5ea6\u548c\u6548\u80fd\u4e0a\u90fd\u66f4\u80dc\u4e00\u7b79\uff0c\u56e0\u4e3a on-chip \u7684\u901a\u4fe1\u6bd4 between-chip \u7684\u901a\u4fe1\u66f4\u5feb\uff0c\u800c\u4e14\u66f4\u7701\u7535\u3002

    \u2462 \u96c6\u7fa4\u7cfb\u7edf(Cluster System)

    \u96c6\u7fa4\u7cfb\u7edf\u901a\u8fc7\u5197\u4f59\u5b9e\u73b0\u9ad8\u53ef\u7528\u670d\u52a1\uff0c\u901a\u8fc7\u5e76\u884c\u5b9e\u73b0\u9ad8\u6027\u80fd\u8ba1\u7b97\uff0c\u5b83\u662f\u7531\u591a\u4e2a\u5404\u81ea\u72ec\u7acb\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4f5c\u4e3a\u8282\u70b9(node)\uff0c\u901a\u8fc7\u9ad8\u901f\u901a\u4fe1\u7f51\u7edc\u4e92\u76f8\u8fde\u63a5\u5f62\u6210\u7684\u3002

    \u96c6\u7fa4\u4e5f\u5206\u5bf9\u79f0\u548c\u4e0d\u5bf9\u79f0\u4e24\u79cd\uff0c\u5bf9\u79f0\u96c6\u7fa4\u7684\u5404\u4e2a\u8282\u70b9\u4e92\u76f8\u76d1\u7763\uff0c\u800c\u4e0d\u5bf9\u79f0\u7684\u96c6\u7fa4\u5219\u5b58\u5728\u4e00\u79cd\u7c7b\u4f3c\u201c\u66ff\u8865\u201d\u7684\u4e1c\u897f\uff0c\u7531\u201c\u66ff\u8865\u201d\u53bb\u76d1\u7763\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\uff0c\u5f53\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\u51fa\u73b0\u4e86\u95ee\u9898\uff0c\u5c31\u7531\u201c\u66ff\u8865\u201d\u6765\u63a5\u66ff\u5b83\u7684\u5de5\u4f5c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","text":"

    \u524d\u9762\u6211\u4eec\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u88ab\u7528\u6765\u300c\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u300d\u7684\u3002\u4e00\u5f00\u59cb\u8fd9\u4ef6\u4e8b\u6bd4\u8f83\u7b80\u5355\uff0c\u53ea\u9700\u8981\u50cf\u961f\u5217\u4e00\u6837\uff0c\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\u5c31\u884c\uff0c\u4f46\u662f\u6162\u6162\u7684\u968f\u7740\u8ba1\u7b97\u673a\u5e94\u7528\u8303\u56f4\u7684\u6269\u5927\u4ee5\u53ca\u5404\u79cd\u9700\u6c42\u7684\u51fa\u73b0\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4e0d\u592a\u5408\u7406\u4e86\u3002\u6309\u7167\u53d1\u5c55\u9636\u6bb5\u6f14\u8fdb\uff0c\u6211\u4eec\u5212\u5206\u51fa\u4e24\u4e2a\u9636\u6bb5\u4e09\u4e2a\u8bbe\u8ba1\uff1a\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing System)\u3001\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u548c\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

    \u2460 \u6279\u5904\u7406\u7cfb\u7edf\u9636\u6bb5

    \u6700\u65e9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u4efb\u52a1\u90fd\u9700\u8981\u4eba\u5de5\u624b\u52a8\u5e72\u9884\uff0c\u4f46\u662f\u8ba1\u7b97\u673a\u6267\u884c\u4efb\u52a1\u7684\u901f\u5ea6\u4e0e\u4eba\u5de5\u5e72\u9884\u7684\u901f\u5ea6\u76f8\u5dee\u592a\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4eba\u5de5\u901f\u5ea6\u4e25\u91cd\u9650\u5236\u4e86\u8ba1\u7b97\u673a\u7684\u5de5\u4f5c\u6548\u7387\uff0c\u4e8e\u662f\u64cd\u4f5c\u7cfb\u7edf\u5f00\u59cb\u51fa\u73b0\uff0c\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u539f\u59cb\u7684\u5b9e\u73b0\u5c31\u662f\u6279\u5904\u7406\u7cfb\u7edf\u3002\uff08\u4f46\u4e0d\u662f\u6700\u65e9\uff0c\u4e4b\u524d\u8fd8\u6709\u8131\u673a\u5904\u7406\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\uff09

    \u2776 \u5355\u9053\u6279\u5904\u7406\u9636\u6bb5

    \u6309\u7167\u64cd\u4f5c\u7cfb\u7edf\u53d1\u5c55\u8fdb\u7a0b\uff0c\u6211\u4eec\u9996\u5148\u4ecb\u7ecd\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing)\u3002

    \u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u6709\u4e24\u4e2a\u5173\u952e\u8bcd\uff0c\u201c\u6279\u5904\u7406\u201d\u548c\u201c\u5355\u9053\u201d\u3002

    \u201c\u6279\u5904\u7406\u201d\u6307\u7684\u662f\uff0c\u7cfb\u7edf\u6267\u884c\u7684\u4efb\u52a1\u662f\u6210\u6279\u7684\uff0c\u82e5\u5e72\u4efb\u52a1\u88ab\u4f5c\u4e3a\u4e00\u6574\u6279\u4ea4\u4ed8\u7ed9\u64cd\u4f5c\u7cfb\u7edf\u3002\u5728\u5177\u4f53\u6267\u884c\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u81ea\u52a8\u6309\u987a\u5e8f\u4e32\u884c(serial)\u6267\u884c\u8fd9\u4e9b\u4efb\u52a1\u3002

    \u800c\u201c\u5355\u9053\u201d\u6307\u7684\u662f\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u53ea\u6709\u4e00\u9053\u7a0b\u5e8f\u5728\u8fd0\u884c\uff0c\u7cfb\u7edf\u53ea\u5904\u7406\u4e00\u9879\u4efb\u52a1\uff0c\u5728\u8fd9\u4e2a\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\uff0c\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u4ed6\u4efb\u52a1\u3002

    \u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u521d\u6b65\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u81ea\u52a8\u5316\u201d\uff0c\u6781\u5927\u51cf\u5c11\u4e86\u4eba\u5de5\u64cd\u4f5c\u901f\u5ea6\u5bf9\u64cd\u4f5c\u7cfb\u7edf\u7684\u5f71\u54cd\u3002\u4f46\u5b83\u5b58\u5728\u4e00\u4e2a\u975e\u5e38\u660e\u663e\u7684\u95ee\u9898\uff1a\u7531\u4e8e\u5f53\u524d\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u5b83\u4efb\u52a1\uff0c\u6240\u4ee5\u5f53\u5f53\u524d\u4efb\u52a1\u51fa\u73b0 I/O \u8bf7\u6c42\u65f6\uff0cCPU \u5c31\u9700\u8981\u7b49\u5f85 I/O \u5b8c\u6210\u3002\u6211\u4eec\u77e5\u9053 I/O \u64cd\u4f5c\u662f\u975e\u5e38\u8017\u65f6\u7684\uff0c\u66f4\u4e25\u91cd\u7684\u662f\u4f8b\u5982\u7b49\u5f85\u952e\u76d8\u8f93\u5165\u8fd9\u79cd\u9700\u8981\u4eba\u5de5\u53c2\u4e0e\u7684 I/O\uff0c\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u6ca1\u6cd5\u907f\u514d\u8fd9\u79cd\u4eba\u5de5\u64cd\u4f5c\u5bf9\u8ba1\u7b97\u673a\u6267\u884c\u6548\u7387\u7684\u5f71\u54cd\uff0c\u8fd9\u5c31\u5bfc\u81f4 CPU \u4f1a\u957f\u65f6\u95f4\u5904\u4e8e\u7a7a\u95f2\u72b6\u6001\uff0c\u800c\u8ba9 CPU \u957f\u65f6\u95f4\u7a7a\u95f2\u8fd9\u4ef6\u4e8b\uff0c\u662f\u4e0d\u88ab\u63a5\u53d7\u7684\u3002

    \u2777 \u591a\u9053\u6279\u5904\u7406\u9636\u6bb5

    \u56e0\u6b64\uff0c\u4e3a\u4e86\u4e0d\u8ba9 CPU \u95f2\u4e0b\u6765\uff0c\u4e00\u4e2a\u7b26\u5408\u76f4\u89c9\u7684\u60f3\u6cd5\u5c31\u662f\u8ba9\u5b83\u5148\u53bb\u505a\u4e0b\u4e00\u4ef6\u4e8b\uff0c\u5c31\u597d\u50cf\u4ed3\u5e93\u6b63\u5728\u6536\u96c6\u4e0a\u4e00\u4e2a\u75c5\u4eba\u6240\u9700\u8981\u7684\u836f\u54c1\u7684\u65f6\u5019\uff0c\u67dc\u53f0\u53ef\u4ee5\u5148\u53bb\u5904\u7406\u4e0b\u4e00\u4e2a\u75c5\u4eba\u7684\u8bf7\u6c42\u3002\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u5e94\u8fd0\u800c\u751f\u3002

    \u4ece\u540d\u5b57\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5389\u5bb3\u5728\u8fd9\u4e2a\u201c\u591a\u9053(Multiprogramming)\u201d\uff0c\u5373\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5728\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4e2d\uff0c\u5f53\u524d\u4efb\u52a1\u53d1\u751f IO \u8bf7\u6c42\u65f6\uff0cCPU \u8f6c\u800c\u53bb\u6267\u884c\u5176\u5b83\u4efb\u52a1\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u5c3d\u91cf\u8ba9 CPU \u59cb\u7ec8\u5728\u5de5\u4f5c\u72b6\u6001\u3002\u56e0\u6b64\uff0c\u5b8f\u89c2\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u540c\u65f6\u6267\u884c\u82e5\u5e72\u4efb\u52a1\uff08\u5728\u4efb\u52a1 A \u5b8c\u6210\u4e4b\u524d\u4efb\u52a1 B \u4e5f\u53ef\u80fd\u5f00\u59cb\u4e86\uff09\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u5e76\u53d1(concurrency)\uff08\u6ce8\u610f\uff0c\u5e76\u53d1\u4e0e\u5e76\u884c\u7684\u6982\u5ff5\u5e76\u4e0d\u4e00\u81f41\uff09\uff1b\u4f46\u5728\u5fae\u89c2\u4e0a\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u662f\u987a\u5e8f\u4e32\u884c\u7684\uff0c\u53ea\u4e0d\u8fc7\u533a\u522b\u4e8e\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ee5\u5b8c\u6574\u7684\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u662f\u5c06\u5b8c\u6574\u4efb\u52a1\u6309\u7167 I/O \u7684\u53d1\u751f\u505a\u5212\u5206\uff0c\u4ee5\u8fd9\u4e9b\u5212\u5206\u540e\u7684\u90e8\u5206\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\u8fdb\u884c\u987a\u5e8f\u4e32\u884c(serial)\u3002

    \u6211\u4eec\u53ef\u4ee5\u7528\u7518\u7279\u56fe\u6765\u53ef\u89c6\u5316\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u7684\u7b56\u7565\uff08\u4e00\u79cd\u5e38\u89c1\u7684\u9898\u578b\uff09\u3002\u4ee5\u4e0b\u9762\u7684\u9898\u76ee\u4e3a\u4f8b\uff0c\u6211\u4eec\u6765\u5b9e\u8df5\u4e00\u4e0b\u3002

    \ud83c\udf30 \u9898\u9762\u89e3\u6790

    \u73b0\u5728\u6709\u4e24\u4e2a\u7a0b\u5e8f A \u548c B\uff0c\u4ee5\u53ca\u4e24\u4e2a\u5206\u522b\u72ec\u7acb\u7684\u8bbe\u5907 X \u548c Y\uff0c\u4e14\u6211\u4eec\u53ea\u6709\u4e00\u4e2a CPU\uff1a

    \u8bf7\u8ba8\u8bba\uff1a

    1. \u5728\u5355\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\u5148\u6267\u884c A \u518d\u6267\u884c B\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f
    2. \u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f\u8bf7\u7ed9\u51fa\u7518\u7279\u56fe\u3002

    \u5728\u5355\u9053\u7a0b\u5e8f\u4e0b\u6267\u884c\uff0c\u5373\u6309\u987a\u5e8f\u6267\u884c A \u548c B\uff0cCPU \u7684\u5229\u7528\u7387\u5373\u5b9e\u9645 CPU \u4f7f\u7528\u65f6\u95f4\u9664\u4ee5\u5b8c\u6210\u4efb\u52a1\u7684\u603b\u65f6\u95f4\uff0c\u56e0\u6b64\uff1a

    \\[ U = \\frac{(10+5+10)+(10+5)}{(10+5+5+10+10)+(10+10+5+5+10)} = \\frac{40}{80} = 50\\% \\]

    \u800c\u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0c\u6211\u4eec\u5f97\u5230\u5982\u4e0b\u7518\u7279\u56fe\uff1a

    gantt\n    title Multiprogramming\n    dateFormat ss\n    axisFormat %S\n\n    section Program A\n    CPU :a,  00,  10\n    X   :b,  10,  15\n    CPU :c,  20,  25\n    Y   :d,  25,  35\n    CPU :e,  35,  45\n\n    section Program B\n    X   :g,  00,  10\n    CPU :h,  10,  20\n    Y   :i,  20,  25\n    CPU :j,  25,  30\n    Y   :k,  35,  45

    \u7531\u4e8e Mermaid \u7684\u9650\u5236\uff0c\u6211\u73b0\u5728\u662f\u628a\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u4efb\u52a1\u9519\u5f00\u753b\u7684\uff0c\u5b9e\u9645\u4e0a\u505a\u9898\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u753b\u6210\u4e24\u884c\u3002

    \u8981\u70b9\u5c31\u662f\u7eb5\u5411\u4e0d\u80fd\u540c\u65f6\u51fa\u73b0\u540c\u4e00\u4e2a\u8d44\u6e90\uff0c\u4f8b\u5982 18s \u65f6\u4e0d\u80fd A \u548c B \u90fd\u7528 CPU\uff0c\u6240\u4ee5 A \u9700\u8981\u7b49 B \u7528\u5b8c CPU \u518d\u4f7f\u7528\u3002

    \u73b0\u5728\u6211\u4eec\u518d\u6765\u7edf\u8ba1 CPU \u7684\u5229\u7528\u7387\uff1a

    \\[ U = \\frac{10+10+5+5+10}{45} = \\frac{40}{45} = 88.89\\% \\]

    \u901a\u8fc7\u8fd9\u9053\u9898\u6211\u4eec\u4e5f\u53ef\u4ee5\u53d1\u73b0\uff0c\u591a\u9053\u7a0b\u5e8f\u8bbe\u8ba1\u6280\u672f\u5bf9 CPU \u5229\u7528\u7387\u7684\u63d0\u5347\u6709\u591a\u9ad8\uff0c\u540c\u65f6\u4e5f\u53ef\u4ee5\u4ece\u8ba1\u7b97\u8fc7\u7a0b\u4e2d\u7684\u5206\u6bcd\u770b\u51fa\u5176\u5bf9\u7a0b\u5e8f\u541e\u5410\u91cf\u7684\u63d0\u5347\u6709\u591a\u9ad8\u3002

    \u591a\u9053\u6279\u5904\u7406\u89e3\u51b3\u4e86\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u53ef\u80fd\u8ba9 CPU \u95f2\u7f6e\u4e0b\u6765\u7684\u95ee\u9898\uff08\u5f53\u7136\u524d\u63d0\u662f\u6709\u4efb\u52a1\u8ba9\u5b83\u505a\uff09\uff0c\u63d0\u9ad8\u4e86 CPU \u7b49\u8d44\u6e90\u7684\u5229\u7528\u7387\uff0c\u589e\u52a0\u4e86\u541e\u5410\u91cf\uff0c\u4f46\u662f\u7531\u4e8e\u6d89\u53ca\u5230\u4e86\u8fdb\u7a0b\u7684\u5207\u6362\u95ee\u9898\uff0c\u6240\u4ee5\u5b9e\u9645\u5b9e\u73b0\u4f1a\u590d\u6742\u5f88\u591a\u3002\u5177\u4f53\u7684\u5185\u5bb9\u6211\u4eec\u4f1a\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406 \u4e2d\u8be6\u7ec6\u4ecb\u7ecd\u3002

    \u4f46\u662f\u65e0\u8bba\u5355\u9053\u8fd8\u662f\u591a\u9053\uff0c\u6279\u5904\u7406\u7cfb\u7edf\u5e76\u4e0d\u9002\u5408\u4f5c\u4e3a\u73b0\u4ee3\u8ba1\u7b97\u673a\u7cfb\u7edf\uff0c\u5176\u4e2d\u4e00\u4e2a\u6700\u5927\u7684\u95ee\u9898\u5c31\u662f\u5b83\u7684\u4ea4\u4e92\u6027\u975e\u5e38\u5dee\u3002\u7528\u6237\u7ed9\u5b9a\u4e00\u5b9a\u6279\u6b21\u7684\u4efb\u52a1\uff0c\u7136\u540e\u7cfb\u7edf\u4f1a\u81ea\u52a8\u8c03\u6574\u8fd9\u4e00\u6279\u4efb\u52a1\u7684\u6267\u884c\u987a\u5e8f\uff0c\u6700\u7ec8\u5b8c\u6210\u8fd9\u6279\u4efb\u52a1\uff0c\u7136\u800c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7528\u6237\u5c31\u6ca1\u6cd5\u518d\u7528\u8ba1\u7b97\u673a\u505a\u5176\u5b83\u4e8b\u60c5\u4e86\uff0c\u540c\u65f6\u4f60\u4e5f\u6ca1\u6cd5\u63a7\u5236\u6b63\u5728\u6267\u884c\u7684\u4efb\u52a1\uff0c\u8fd9\u5bf9\u73b0\u4ee3\u8ba1\u7b97\u673a\u6765\u8bf4\u662f\u4e0d\u53ef\u60f3\u8c61\u7684\u3002

    \uff08\u5047\u8bbe\u6211\u4eec\u5ffd\u7565\u5173\u4e8e\u5c4f\u5e55\u663e\u793a\u7684 I/O\uff09\u8bd5\u60f3\uff0c\u4f60\u5e0c\u671b\u5728\u8dd1\u7a0b\u5e8f\u7684\u65f6\u5019\u653e\u4e00\u4e2a\u89c6\u9891\uff0c\u4f46\u662f\u7531\u4e8e\u4f60\u7684\u7a0b\u5e8f\u8fd8\u6ca1\u8dd1\u5b8c\uff0c\u4f60\u7684\u89c6\u9891\u5c31\u6ca1\u6cd5\u64ad\u653e\uff0c\u7a81\u7136\u4f60\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u4e00\u6b21 I/O\uff0cCPU \u8f6c\u800c\u64ad\u653e\u5df2\u7ecf\u5b8c\u6210 I/O \u540e\u7684\u90a3\u90e8\u5206\u89c6\u9891\uff0c\u4f46\u662f\u8fd9\u4e2a\u65f6\u5019\u4f60\u7684\u7a0b\u5e8f I/O \u5f88\u5feb\u4e5f\u5b8c\u6210\u4e86\uff0c\u5374\u9700\u8981\u7b49\u5f85\u7f13\u5b58\u4e2d\u7684\u89c6\u9891\u653e\u5b8c\u624d\u80fd\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u79cd\u7528\u6237\u4f53\u9a8c\u51e0\u4e4e\u65e0\u6cd5\u63a5\u53d7\u3002

    \u5bf9\u4e8e\u7528\u6237\u6765\u8bf4\uff0c\u6700\u597d\u80fd\u540c\u65f6\u5b9e\u73b0\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u4e5f\u5c31\u662f\u51e0\u4ef6\u4e8b\u60c5\u81f3\u5c11\u770b\u8d77\u6765\u8981\u50cf\u662f\u540c\u65f6\u53d1\u751f\u7684\uff0c\u4e8e\u662f\u51fa\u73b0\u4e86\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

    \u2461 \u5206\u65f6\u7cfb\u7edf\u9636\u6bb5

    \u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u662f\u591a\u4efb\u52a1(Multitasking)\u7684\u4e00\u4e2a\u5177\u4f53\u5b9e\u73b0\uff0c\u800c Multitasking \u662f Multiprogramming \u7684\u4e00\u4e2a\u903b\u8f91\u6269\u5c55\uff0c\u5373 Multitasking \u4e5f\u662f Multiprogramming \u7684\u4e00\u79cd\uff0c\u5b83\u7b26\u5408\u5185\u5b58\u4e2d\u6709\u591a\u4e2a\u8fdb\u7a0b\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u6709\u591a\u4e2a\u4efb\u52a1\u4e00\u8d77\u6267\u884c\u7684\u7279\u70b9\u3002

    \u5206\u65f6\u7cfb\u7edf\u901a\u8fc7\u9891\u7e41\u5730\u5728\u591a\u4e2a\u8fdb\u7a0b\u95f4\u5207\u6362\u6765\u8fd1\u4f3c\u5b9e\u73b0\u5e76\u884c\uff08\u5e76\u4e0d\u662f\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\uff0c\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\u9700\u8981\u901a\u8fc7\u591a\u6838/\u591a\u5904\u7406\u5668\u5b9e\u73b0\uff09\u3002\u5177\u4f53\u6765\u8bf4\u662f\u6309\u7167\u65f6\u95f4\u7247(time slice)\uff0c\u8f6e\u6d41\u5c06 CPU \u5206\u914d\u7ed9\u5404\u4e2a\u8fdb\u7a0b\uff0c\u8fd9\u6837\u53ea\u8981\u65f6\u95f4\u7247\u8db3\u591f\u77ed\uff0c\u7528\u6237\u4f53\u611f\u4e0a\u5c31\u50cf\u662f\u591a\u4e2a\u4efb\u52a1\u5e76\u884c\u6267\u884c\u3002

    \u611f\u89c9\u6bd4\u8f83\u50cf\u300a\u5341\u4e07\u4e2a\u51b7\u7b11\u8bdd\u300b\u8d85\u4eba\u8fd9\u4e00\u96c6\u7684 4:09 - 4:48\u3002

    \u5206\u65f6\u7528\u6237\u5141\u8bb8\u591a\u4e2a\u7528\u6237\u540c\u65f6\u4f7f\u7528\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6240\u6709\u4efb\u52a1\u4e4b\u95f4\u4e92\u76f8\u72ec\u7acb\uff0c\u4e92\u4e0d\u5e72\u6270\u3001\u4e92\u4e0d\u963b\u585e\uff0c\u56e0\u6b64\u4efb\u52a1\u7684\u6700\u957f\u5468\u8f6c\u65f6\u95f4\u51cf\u5c11\uff0c\u7528\u6237\u7684\u64cd\u4f5c\u4e5f\u4f1a\u88ab\u53ca\u65f6\u54cd\u5e94\uff0c\u5b9e\u73b0\u4e86\u66f4\u65b9\u4fbf\u8fdb\u884c\u4eba\u673a\u5bf9\u8bdd\u3002

    \u76f8\u5173\u9605\u8bfb

    \u5173\u4e8e\u8fd9\u4e09\u4e2a\u6280\u672f\u7684\u8bf4\u660e\u4e5f\u53ef\u4ee5\u770b\u770b xyx \u662f\u600e\u4e48\u5199\u7684\uff1a\ud83d\udd17

    \u9664\u4e86\u8fd9\u51e0\u79cd\u7cfb\u7edf\u5916\uff0c\u738b\u9053\u91cc\u4e5f\u63d0\u5230\u4e86\u8fd9\u4e9b\u7cfb\u7edf\uff1a

    \u591a\u9053\u6280\u672f\u51fa\u73b0\u4e4b\u540e\uff0c\u867d\u7136\u8ba1\u7b97\u673a\u7684\u8868\u73b0\u4e0d\u65ad\u63d0\u5347\uff0c\u4f46\u662f\u591a\u9053\u6280\u672f\u672c\u8eab\u7684\u6280\u672f\u7279\u70b9\uff0c\u5404\u4e2a\u8fdb\u7a0b\u5728\u672a\u5b8c\u6210\u7684\u60c5\u51b5\u4e0b\u9700\u8981\u4e92\u76f8\u5207\u6362\uff0c\u4e00\u7cfb\u5217\u95ee\u9898\u63a5\u8e35\u800c\u6765\uff0c\u8fd9\u4e9b\u90fd\u662f\u6211\u4eec\u5728\u4e4b\u540e\u7684\u5355\u5143\u91cc\u8be6\u7ec6\u8ba8\u8bba\u7684\u5185\u5bb9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","text":"

    \u968f\u7740\u64cd\u4f5c\u7cfb\u7edf\u7684\u529f\u80fd\u4e0d\u65ad\u6269\u5c55\u3001\u4f53\u91cf\u9010\u6e10\u53d8\u5927\uff0c\u6574\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u7684\u7ed3\u6784\u8bbe\u8ba1\u5c31\u8d8a\u53d1\u91cd\u8981\u4e86\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u8bbe\u8ba1\u601d\u8def\u3002

    \u5b8f\u5185\u6838

    \u5b8f\u5185\u6838(Monolithic-Kernels)\u4e5f\u53eb\u5355\u5185\u6838\u6216\u5927\u5185\u6838\uff0c\u5b83\u7684\u6838\u5fc3\u601d\u60f3\u5341\u5206\u7b80\u5355\u7c97\u66b4\uff0c\u5c06\u6240\u6709\u4e3b\u8981\u529f\u80fd\u90fd\u7d27\u5bc6\u8026\u5408\u5728\u4e00\u8d77\u4f5c\u4e3a\u4e00\u4e2a\u5b8c\u6574\u7684\u6574\u4f53\u3002

    \u5b8f\u5185\u6838\u5e26\u6765\u7684\u597d\u5904\u662f\u64cd\u4f5c\u7cfb\u7edf\u6548\u7387\u6781\u9ad8\uff0c\u4ece\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u5386\u7a0b\u6765\u770b\uff0c\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u90fd\u662f\u4ece\u5b8f\u5185\u6838\u53d1\u5c55\u8fc7\u6765\u7684\uff08\u4e0d\u8fc7\u5982\u4eca\u7684\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u66f4\u504f\u5411\u6df7\u5408\u7cfb\u7edf\uff09\u3002

    \u4f46\u662f\u5b8f\u5185\u6838\u7684\u7f3a\u70b9\u4e5f\u662f\u5341\u5206\u660e\u663e\u7684\uff0c\u5927\u91cf\u590d\u6742\u7684\u529f\u80fd\u4e92\u76f8\u8026\u5408\uff0c\u5bfc\u81f4\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ef4\u62a4\u5341\u5206\u56f0\u96be\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u4e00\u65e6\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u4e25\u91cd\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u90fd\u4f1a\u53d7\u5230\u5f71\u54cd\uff0c\u5728\u8fd9\u65b9\u9762\uff0c\u5b8f\u5185\u6838\u7684\u8868\u73b0\u90fd\u4e0d\u5982\u5fae\u5185\u6838\u3002

    \u5206\u5c42\u8bbe\u8ba1

    \u5206\u5c42\u8bbe\u8ba1(layer approach)\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c06\u7cfb\u7edf\u5206\u4e3a\u82e5\u5e72\u5c42\uff0c\u5e95\u5c42\u4e3a\u786c\u4ef6\uff0c\u9876\u5c42\u4e3a\u7528\u6237\u63a5\u53e3\uff0c\u7b2c \\(i\\) \u5c42\u53ea\u8c03\u7528 \\(i-1\\) \u5c42\u63d0\u4f9b\u7684\u63a5\u53e3\u3002\u6bcf\u4e00\u5c42\u90fd\u5b9e\u73b0\u826f\u597d\u7684\u5c01\u88c5\uff0c\u4e8e\u662f\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u53ea\u9700\u8981\u9010\u6b65\u5b9e\u73b0\u5e76\u8c03\u8bd5\u9a8c\u8bc1\u6bcf\u4e00\u5c42\uff0c\u518d\u9010\u7ea7\u5411\u4e0a\u5f00\u53d1\u5373\u53ef\uff1b\u5728\u7ef4\u62a4\u6216\u6269\u5c55\u8fc7\u7a0b\u4e2d\uff0c\u53ea\u8981\u4fee\u6539\u6bcf\u4e00\u5c42\u7684\u5185\u90e8\u5b9e\u73b0\uff0c\u800c\u4e0d\u9700\u8981\u4fee\u6539\u5176\u5b83\u5c42\u7684\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u5927\u5927\u964d\u4f4e\u4e86\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u96be\u5ea6\u3002

    \u7136\u800c\uff0c\u7531\u4e8e\u6bcf\u6b21\u6267\u884c\u4e00\u4e2a\u529f\u80fd\u90fd\u9700\u8981\u4e0a\u4e0b\u8de8\u8d8a\u591a\u5c42\uff0c\u53d1\u751f\u591a\u6b21\u63a5\u53e3\u8c03\u7528\uff0c\u5206\u5c42\u8bbe\u8ba1\u4e0b\u7684\u7cfb\u7edf\u6548\u7387\u5f80\u5f80\u90fd\u53d7\u5230\u9650\u5236\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8981\u60f3\u771f\u6b63\u610f\u4e49\u4e0a\u5b9e\u73b0\u826f\u597d\u7684\u5206\u5c42\u8bbe\u8ba1\uff0c\u5c31\u9700\u8981\u5bf9\u5404\u5c42\u6709\u826f\u597d\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e2a\u8bbe\u8ba1\u96be\u5ea6\u662f\u4e0d\u5c0f\u7684\u3002

    \u5fae\u5185\u6838

    \u5fae\u5185\u6838(Micro-Kernels)\u7684\u8bbe\u8ba1\u601d\u8def\u4e0e\u5b8f\u5185\u6838\u76f8\u53cd\uff0c\u4e3b\u5f20\u5c06\u4e0d\u662f\u5fc5\u8981\u7684\u4e1c\u897f\u90fd\u4ece\u5185\u6838\u91cc\u62ff\u51fa\u53bb\uff0c\u653e\u5230\u7528\u6237\u7a7a\u95f4\uff0c\u4ee5\u7528\u6237\u6001\u6267\u884c\u3002\u6574\u4f53\u5f62\u6210\u4e00\u79cd\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\uff0c\u6b64\u65f6\u5185\u6838\u53ea\u63d0\u4f9b\u901a\u8baf\u3001\u5185\u5b58\u7ba1\u7406\u3001\u8fdb\u7a0b\u7ba1\u7406\u7b49\u57fa\u672c\u529f\u80fd\uff0c\u4e5f\u53ea\u6709\u8fd9\u4e9b\u90e8\u5206\u76f4\u63a5\u8fd0\u884c\u5728\u5185\u6838\u6001\uff0c\u4f5c\u4e3a\u670d\u52a1\u5668\u7684\u5176\u5b83\u529f\u80fd\u90e8\u4ef6\u5219\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u673a\u5236\u4e0e\u5185\u6838\u4e92\u52a8\u3002

    \u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u4f53\u79ef\u4f1a\u5927\u5927\u51cf\u5c0f\uff0c\u5185\u6838\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u4e5f\u4f1a\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\uff0c\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\u4e5f\u4f7f\u529f\u80fd\u6269\u5c55\u66f4\u52a0\u5bb9\u6613\uff1b\u53e6\u5916\uff0c\u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u6548\u7387\u4e5f\u4f1a\u5927\u5927\u63d0\u5347\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u5404\u4e2a\u529f\u80fd\u4e4b\u95f4\u7684\u8026\u5408\u964d\u4f4e\uff0c\u4e14\u90fd\u8fd0\u884c\u5728\u7528\u6237\u6001\uff0c\u529f\u80fd\u4e4b\u95f4\u4ec5\u4f7f\u7528\u901a\u4fe1\u5efa\u7acb\u94fe\u63a5\uff0c\u5373\u4f7f\u67d0\u4e2a\u529f\u80fd\u90e8\u4ef6\u51fa\u73b0\u95ee\u9898\uff0c\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5d29\u6e83\uff0c\u76f8\u6bd4\u4e8e\u5b8f\u5185\u6838\uff0c\u7cfb\u7edf\u53ef\u9760\u6027\u5927\u5927\u63d0\u5347\u3002

    \u6a21\u5757\u5316\u8bbe\u8ba1

    \u6a21\u5757\u5316\u8bbe\u8ba1(Modules Approach)\u6307\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5212\u5206\u4e3a\u82e5\u5e72\u5206\u7acb\u6a21\u5757\uff0c\u5e76\u89c4\u5b9a\u6a21\u5757\u4e4b\u95f4\u7684\u63a5\u53e3\uff0c\u751a\u81f3\u5355\u4e2a\u6a21\u5757\u4e0b\u4e5f\u53ef\u80fd\u662f\u7531\u591a\u4e2a\u6a21\u5757\u901a\u8fc7\u540c\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\u800c\u6210\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u65b9\u6cd5\u4e5f\u88ab\u79f0\u4e3a\u6a21\u5757-\u63a5\u53e3\u6cd5\u3002

    \u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u4e0e\u5fae\u5185\u6838\u662f\u4e0d\u540c\u7684\uff0c\u9700\u8981\u6ce8\u610f\u533a\u5206\u3002\u5fae\u5185\u6838\u8bbe\u8ba1\u4ecd\u7136\u662f\u6709\u4e2d\u5fc3\uff08\u5fae\u5185\u6838\uff09\u7684\uff0c\u4f46\u662f\u6a21\u5757\u5316\u8bbe\u8ba1\u6574\u4f53\u662f\u5206\u5c42\u7f51\u72b6\u7684\u3002

    \u7406\u60f3\u7684\u6a21\u5757\u5316\u8bbe\u8ba1\u4f1a\u8ba9\u7cfb\u7edf\u8bbe\u8ba1\u53ef\u4ee5\u591a\u7ebf\u5e76\u884c\uff0c\u53ea\u9700\u8981\u4e8b\u5148\u5546\u91cf\u597d\u63a5\u53e3\uff0c\u5404\u4e2a\u5de5\u7a0b\u5e08\u5c31\u53ef\u4ee5\u72ec\u7acb\u5730\u5b9e\u73b0\u3001\u586b\u5145\u6a21\u5757\u5185\u5bb9\uff1b\u9ad8\u5185\u805a\u4f4e\u8026\u5408\u7684\u8bbe\u8ba1\u4e5f\u80fd\u8ba9\u7cfb\u7edf\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\u3002

    \u7136\u800c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5341\u5206\u56f0\u96be\uff0c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5e76\u6ca1\u6709\u4e00\u4e2a\u6e05\u6670\u7684\u5355\u5411\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u65e0\u6cd5\u9012\u8fdb\u5f0f\u7684\u63a8\u8fdb\u4efb\u52a1\uff0c\u6574\u4e2a\u5f00\u53d1\u8fc7\u7a0b\u5c31\u597d\u50cf\u59cb\u7ec8\u60ac\u5728\u534a\u7a7a\uff1b\u9664\u6b64\u4e4b\u5916\uff0c\u5982\u4f55\u8bbe\u8ba1\u63a5\u53e3\u4f7f\u5f97\u6240\u6709\u9700\u6c42\u90fd\u80fd\u88ab\u5f88\u597d\u6ee1\u8db3\u4e5f\u662f\u4e2a\u96be\u4ee5\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u6df7\u5408\u7cfb\u7edf

    \u6df7\u5408\u7cfb\u7edf(Hybrid Systems)\u662f\u6307\u5c06\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\u7684\u8bbe\u8ba1\u601d\u8def\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u66f4\u73b0\u4ee3\uff0c\u4e5f\u662f\u76ee\u524d\u4e3b\u6d41\u7684\u64cd\u4f5c\u7cfb\u7edf\u7684\u6a21\u5f0f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","text":"

    \u672c\u8282\u6211\u4eec\u6df1\u5165\u5230\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e9b\u5177\u4f53\u8fd0\u884c\u8fc7\u7a0b\uff0c\u63a2\u7a76\u4e00\u4e9b\u6b65\u9aa4\u7684\u5177\u4f53\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4e2d\u65ad","title":"\u4e2d\u65ad","text":"

    \u4e2d\u65ad\uff08\u5e7f\u4e49\uff09\u662f\u8d2f\u7a7f\u73b0\u4ee3\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e2a\u91cd\u8981\u6280\u672f\uff0c\u5b83\u4f7f\u5f97\u201c\u8ba1\u5212\u4e4b\u5916\u201d\u7684\u4e8b\u60c5\u53ef\u4ee5\u53ca\u65f6\u7684\u88ab\u544a\u77e5\u5e76\u5904\u7406\u3002\u4f8b\u5982\uff0c\u7a0b\u5e8f\u7a81\u7136\u51fa\u73b0\u4e86\u81f4\u547d\u9519\u8bef\uff0c\u8fd9\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5e94\u8be5\u53ca\u65f6\u5bdf\u89c9\u5e76\u5904\u7406\uff1b\u53c8\u6bd4\u5982\uff0c\u7528\u6237\u5728\u547d\u4ee4\u884c\u8f93\u5165\u4e86\u6307\u4ee4\uff0c\u6309\u4e0b\u4e86\u56de\u8f66\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5e94\u5f53\u5bdf\u89c9\u5230 I/O \u5df2\u7ecf\u51c6\u5907\u597d\u4e86\u3002\u4f46\u662f\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e0d\u538c\u5176\u70e6\u5730\u8be2\u95ee\u4f60\u6709\u6ca1\u6709\u53d1\u751f\u9519\u8bef\uff0c\u53c8\u6216\u8005\u8fd9\u4e2a I/O \u662f\u5426\u5c31\u7eea\uff0c\u8fd9\u5f88\u4e0d\u5408\u7406\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e8b\u65e0\u5de8\u7ec6\u5730\u53bb\u8d1f\u8d23\u68c0\u67e5\u610f\u5916\u662f\u5426\u53d1\u751f\uff0c\u800c\u662f\u5e94\u5f53\u63d0\u4f9b\u4e00\u4e2a\u4e0a\u62a5\u610f\u5916\u7684\u63a5\u53e3\uff0c\u8ba9\u4ea7\u751f\u610f\u5916\u7684\u4eba\u81ea\u884c\u4e0a\u62a5\u8fd9\u4e9b\u610f\u5916\u3002\u5728\u5177\u4f53\u786c\u4ef6\u7684\u5b9e\u73b0\u4e0a\uff0c\u4f1a\u6709\u4e24\u6761\u4e13\u95e8\u8868\u793a\u4e2d\u65ad\u4fe1\u53f7\u7684\u7ebf\uff08\u7a0d\u5019\u4f1a\u5728\u4e2d\u65ad\u5c4f\u853d\u4e2d\u8bb2\u5230\uff09\uff0cCPU \u4f1a\u5728\u6bcf\u4e00\u6761\u6307\u4ee4\u7ed3\u675f\u540e\u68c0\u6d4b\u662f\u5426\u6709\u4e2d\u65ad\u53d1\u751f\uff0c\u800c\u5728\u8f6f\u4ef6\u4e0a\u5c31\u4f53\u73b0\u4e3a\u6bcf\u5f53\u6709\u4e2d\u65ad\u53d1\u751f\u65f6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5c31\u9700\u8981\u53bb\u5904\u7406\u3002\u7531\u4e8e\u4e2d\u65ad\u7684\u5f3a\u5927\u7279\u6027\uff0c\u4ece\u6700\u65e9\u4ec5\u7684\u5904\u7406\u786c\u4ef6\u72b6\u6001\uff0c\u5230\u5904\u7406\u8f6f\u4ef6\u9519\u8bef\u548c\u4f5c\u4e3a\u4e00\u79cd\u7c7b\u4f3c\u51fd\u6570\u7684\u624b\u6bb5\uff0c\u4e2d\u65ad\u7684\u5e94\u7528\u8303\u56f4\u8d8a\u6765\u8d8a\u5e7f\uff0c\u5b83\u7684\u6982\u5ff5\u968f\u7740\u5e94\u7528\u8303\u56f4\u4e5f\u4e0d\u65ad\u6269\u5927\u3002

    \u4e2d\u65ad\u5411\u91cf\u8868

    \u7531\u4e8e\u4e2d\u65ad\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u9891\u7e41\u7684\u5904\u7406\u5404\u79cd\u4e2d\u65ad\uff0c\u5904\u7406\u6bcf\u4e00\u79cd\u4e2d\u65ad\u90fd\u9700\u8981\u4e00\u4e2a\u7279\u5b9a\u7684\u65b9\u6cd5\uff0c\u56e0\u6b64\uff0c\u4e00\u79cd\u5feb\u901f\u5b9a\u4f4d\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\u7684\u624b\u6bb5\u5c31\u663e\u5f97\u5c24\u4e3a\u91cd\u8981\u3002

    \u4e2d\u65ad\u5411\u91cf\u8868(Interrupt Vector Table)\u901a\u8fc7\u4e2d\u65ad\u53f7\u6765\u7d22\u5f15\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\uff0c\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u968f\u673a\u8bbf\u95ee\u201d\uff0c\u5927\u5927\u52a0\u901f\u4e86\u4e2d\u65ad\u5904\u7406\u7684\u901f\u5ea6\u3002

    \u6839\u636e\u4e2d\u65ad\u662f\u5426\u7531\u7a0b\u5e8f\u4ea7\u751f\uff0c\u4e2d\u65ad\u53ef\u4ee5\u5206\u4e3a\u5916\u4e2d\u65ad\uff08\u72ed\u4e49\u7684\u4e2d\u65ad\uff0c\u7531\u786c\u4ef6\u4ea7\u751f\uff09\u548c\u5185\u4e2d\u65ad\uff08\u5f02\u5e38...\uff0c\u4e3b\u8981\u7531\u7a0b\u5e8f\u4ea7\u751f\uff09\u3002\u8fd9\u91cc\u6709\u5f88\u591a\u6982\u5ff5\uff1ainstruction, exception, trap, abort, ...\uff0c\u8fd9\u90e8\u5206\u533a\u5206\u8bf7\u5927\u5bb6\u81ea\u884c\u5bfb\u627e\u8d44\u6599\u53c2\u8003\uff0c\u6211\u5728\u8fd9\u91cc\u653e\u51e0\u4e2a\u53c2\u8003\u94fe\u63a5\u3002

    \u76f8\u5173\u9605\u8bfb

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e2d\u65ad\u4e00\u65e6\u53d1\u751f\u5c31\u7acb\u523b\u88ab\u89e3\u51b3\uff0c\u4f46\u662f\u4e2d\u65ad\u5904\u7406\u4e5f\u540c\u6837\u9700\u8981\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u4e2d\u65ad\u4e5f\u6709\u53ef\u80fd\u4ea7\u751f\u51b2\u7a81\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u9700\u8981\u4e00\u7cfb\u5217\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

    1. \u663e\u7136\uff0c\u4e2d\u65ad\u4e4b\u95f4\u4ea6\u6709\u533a\u522b\uff0c\u6709\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u201c\u81f4\u547d\u9519\u8bef\u201d\u8fd9\u4ef6\u4e8b\uff0c\u663e\u7136\u6bd4\u6253\u5370\u673a\u5c31\u7eea\u66f4\u91cd\u8981\uff0c\u56e0\u6b64\uff0c\u4e2d\u65ad\u9700\u8981\u5206\u7ea7\u673a\u5236\uff0c\u4ee5\u533a\u5206\u4e2d\u65ad\u7684\u4f18\u5148\u7ea7\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728\u5904\u7406\u4e2d\u65ad\u65f6\uff0c\u4f18\u5148\u5904\u7406\u4f18\u5148\u7ea7\u9ad8\u7684\u4e2d\u65ad\uff1b
    2. \u4e2d\u65ad\u5e76\u4e0d\u662f\u968f\u65f6\u968f\u5730\u90fd\u80fd\u53d1\u751f\u7684\uff0c\u201c\u4ee3\u7406\u4eba\u201d\u5728\u8d70\u72ec\u6728\u6865\u65f6\u4e0d\u5e94\u5f53\u6682\u505c\u53bb\u5904\u7406\u836f\u54c1\u7f3a\u8d27\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6765\u8bf4\uff0c\u6709\u8bb8\u591a\u539f\u5b50\u6027\u7684\u884c\u4e3a\u662f\u4e0d\u53ef\u88ab\u4e2d\u65ad\u7684\uff0c\u4e5f\u6709\u4e00\u4e9b\u91cd\u8981\u7684\u4efb\u52a1\u662f\u4e0d\u5e94\u5f53\u88ab\u666e\u901a\u7684\u4e2d\u65ad\u6253\u6270\u7684\uff0c\u8fd9\u5c31\u6d89\u53ca\u5230\u4e2d\u65ad\u5c4f\u853d\u95ee\u9898\uff1b

    \u5b58\u7591

    \u8fd9\u5c31\u9700\u8981\u6211\u4eec\u8c08\u5230\u4e2d\u65ad\u7684\u786c\u4ef6\u8bbe\u8ba1\uff0c\u4e00\u79cd\u6bd4\u8f83\u666e\u901a\u7684\u8bbe\u8ba1\u662f\uff0c\u51c6\u5907 maskable interrupt-request line \u548c non-maskable interrupt-request line \u4e24\u6761\u4e2d\u65ad\u8bf7\u6c42\u7ebf\uff0c\u524d\u8005\u7528\u4e8e\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u540e\u8005\u7528\u4e8e\u4e0d\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5728\u6bcf\u4e2a\u6307\u4ee4\u540e\u68c0\u67e5\u8fd9\u4e2d\u65ad\u7ebf\u4e0a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\uff0c\u800c\u5982\u679c\u6b64\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5c4f\u853d\u4e86\u4e2d\u65ad\uff0c\u90a3\u4e48\u5c31\u4e0d\u4f1a\u68c0\u67e5 maskable interrupt-request line \u4e0a\u7684\u4e2d\u65ad\u8bf7\u6c42\u3002

    \u9700\u8981\u6ce8\u610f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u53d1\u73b0\u4e2d\u65ad\u540e\u5e76\u4e0d\u662f\u4e8c\u8bdd\u4e0d\u8bf4\u9a6c\u4e0a\u53bb\u5904\u7406\u4e2d\u65ad\u7684\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u4e2d\u65ad\u5904\u7406\u5b8c\u6210\u540e\u4ecd\u80fd\u7ee7\u7eed\u5f53\u524d\u4efb\u52a1\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u4fdd\u5b58\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\uff0c\u4ee5\u4fbf\u5b8c\u6210\u4e2d\u65ad\u5904\u7406\u540e\u6062\u590d\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u65f6\u5668","title":"\u8ba1\u65f6\u5668","text":"

    \u867d\u7136\u770b\u8d77\u6765\u5f88\u4e0d\u8d77\u773c\uff0c\u4f46\u8ba1\u65f6\u5668(timer)\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u4e1c\u897f\u3002\u8ba1\u65f6\u5668\u9700\u8981\u4e00\u4e2a\u56fa\u5b9a\u9891\u7387\u7684\u65f6\u949f\u4ee5\u53ca\u4e00\u4e2a\u8ba1\u6570\u5668\uff0c\u5728\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u4ee4\u8ba1\u6570\u5668\u51cf 1\uff0c\u5f53\u8ba1\u6570\u5668\u5f52\u96f6\u65f6\u4ea7\u751f\u4e2d\u65ad\uff0c\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u5b9a\u7684\u65f6\u5df2\u7ecf\u5230\u4e86\u3002

    \u5b83\u7684\u529f\u80fd\u867d\u7136\u57fa\u7840\u4f46\u662f\u5341\u5206\u91cd\u8981\uff0c\u4f8b\u5982\u5206\u65f6\u7cfb\u7edf\u4e2d\u5c31\u9700\u8981\u8ba1\u6570\u5668\u6765\u63a7\u5236\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u53c8\u6bd4\u5982\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u5b9a\u671f\u68c0\u67e5\u5185\u5b58\u4e2d\u7684\u8fdb\u7a0b\uff0c\u4ee5\u9632\u6b62\u8fdb\u7a0b\u4e00\u76f4\u5360\u7528\u7cfb\u7edf\u8d44\u6e90\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u8ba1\u65f6\u5668\u7684\u5e2e\u52a9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7279\u6743\u6a21\u5f0f","title":"\u7279\u6743\u6a21\u5f0f","text":"

    \u6211\u4eec\u524d\u9762\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u67d0\u4e9b\u64cd\u4f5c\u662f\u5371\u9669\u7684\uff0c\u6709\u53ef\u80fd\u5a01\u80c1\u5230\u81ea\u8eab\u6b63\u5e38\u8fd0\u4f5c\u7684\uff08\u5982\u4e0e\u786c\u4ef6\u76f4\u63a5\u76f8\u5173\u7684\u884c\u4e3a\u3001\u63a7\u5236 CPU \u8fd0\u884c\u89c4\u5219\u7684\u884c\u4e3a\u7b49\uff09\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u4e0d\u5e94\u5f53\u88ab\u7528\u6237\u7a0b\u5e8f\u76f4\u63a5\u6267\u884c\u3002\u4e00\u79cd\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u5212\u5206\u5e38\u89c4\u64cd\u4f5c\u548c\u5371\u9669\u64cd\u4f5c\uff0c\u5141\u8bb8\u7528\u6237\u7a0b\u5e8f\u6267\u884c\u5e38\u89c4\u64cd\u4f5c\uff0c\u800c\u5371\u9669\u64cd\u4f5c\u5219\u9700\u8981\u59d4\u6258\u4e13\u4e1a\u4eba\u58eb\u4ee3\u4e3a\u6267\u884c\u3002\u800c\u8fd9\u5c31\u662f\u7279\u6743\u6a21\u5f0f(Privileged Mode)\u7684\u57fa\u672c\u601d\u8def\u3002

    \u5de5\u4e1a\u4e0a\u7684\u7279\u6743\u6a21\u5f0f\u53ef\u80fd\u4f1a\u6709\u591a\u79cd\u590d\u6742\u7684\u5b9e\u73b0\u5f62\u5f0f\uff0c\u4f46\u662f\u6211\u4eec\u8fd9\u91cc\u53ea\u8bb2\u6700\u7b80\u5355\u7684\u4e00\u79cd\uff0c\u5373\u53cc\u6a21\u5f0f(Dual-Mode)\u3002\u53cc\u6a21\u5f0f\u4e0b\uff0cCPU \u6709\u4e24\u79cd\u8fd0\u884c\u6a21\u5f0f\uff0c\u4e00\u79cd\u662f\u7528\u6237\u6001(User Mode)\uff08\u76ee\u6001\uff09\uff0c\u4e00\u79cd\u662f\u5185\u6838\u6001(Kernel Mode)\uff08\u7ba1\u6001\uff0c\u6838\u5fc3\u6001\uff09\u3002Mode Bit \u4e3a 0\uff0c\u8868\u793a CPU \u5de5\u4f5c\u5728\u5185\u6838\u6001\uff0cMode Bit \u4e3a 1 \u65f6\uff0cCPU \u5de5\u4f5c\u5728\u7528\u6237\u6001\u3002

    \u540c\u65f6\uff0c\u6211\u4eec\u5c06\u90a3\u4e9b\u201c\u5371\u9669\u201d\u7684\u6307\u4ee4\u79f0\u4e3a\u7279\u6743\u6307\u4ee4(privileged instruction)\uff0c\u4f8b\u5982 I/O \u63a7\u5236\uff0c\u8ba1\u65f6\u5668\u7ba1\u7406\uff0c\u4e2d\u65ad\u7ba1\u7406\u7b49\u3002\u8fd9\u4e9b\u6307\u4ee4\u53ea\u80fd\u5728\u5185\u6838\u6001\u4e0b\u6267\u884c\uff0c\u800c\u7528\u6237\u6001\u4e0b\u6267\u884c\u8fd9\u4e9b\u6307\u4ee4\u65f6\u4f1a\u8ba4\u4e3a\u8fd9\u6761\u6307\u4ee4\u4e0d\u5b58\u5728\u3002

    \u95ee\u9898\u5c1a\u672a\u89e3\u51b3

    \u73b0\u5728\u6211\u4eec\u5c06\u5371\u9669\u64cd\u4f5c\u548c\u76f8\u5bf9\u5b89\u5168\u7684\u64cd\u4f5c\u9694\u79bb\u5f00\u6765\u4e86\uff0c\u4f46\u662f\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u7528\u6237\u7a0b\u5e8f\u5c31\u4e0d\u9700\u8981\u4f7f\u7528\u90a3\u4e9b\u5371\u9669\u64cd\u4f5c\u4e86\uff0c\u5355\u7eaf\u7684\u9694\u79bb\u5e76\u4e0d\u80fd\u89e3\u51b3\u95ee\u9898\uff0c\u7528\u6237\u7a0b\u5e8f\u4ecd\u7136\u5b58\u5728\u9700\u8981\u4f7f\u7528\u7279\u6743\u6307\u4ee4\u7684\u9700\u6c42\u3002

    \u8fd9\u4e9b\u9700\u6c42\u5f80\u5f80\u662f\u53ef\u4ee5\u88ab\u62bd\u8c61\u7684\u3001\u88ab\u5c01\u88c5\u7684\u3002\u5c31\u597d\u50cf\u300c\u201c\u7528\u6237\u201d\u5411\u201c\u67dc\u53f0\u201d\u7d22\u8981\u5e93\u623f\u94a5\u5319\uff0c\u4ee5\u4fbf ta \u80fd\u53bb\u5e93\u623f\u62ff\u7f3a\u8d27\u7684\u8d27\u7269\u300d\u8fd9\u4ef6\u4e8b\u662f\u4e0d\u5408\u7406\u7684\uff0c\u6211\u4eec\u65e0\u6cd5\u63a7\u5236\u201c\u7528\u6237\u201d\u5b9e\u9645\u62ff\u201c\u94a5\u5319\u201d\u505a\u4e86\u4ec0\u4e48\uff0c\u800c\u201c\u94a5\u5319\u201d\u7684\u6ee5\u7528\u53c8\u4f1a\u5bfc\u81f4\u201c\u67dc\u53f0\u201d\u9677\u5165\u5371\u9669\u4e2d\uff1b\u4f46\u662f\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u662f\u5408\u7406\u7684\u3002

    \u53cd\u8fc7\u6765\u8bb2\uff0c\u867d\u7136\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u8fd9\u4e2a\u4efb\u52a1\u5fc5\u987b\u4f7f\u7528\u5e93\u623f\u201c\u94a5\u5319\u201d\u624d\u80fd\u8fdb\u884c\uff0c\u4f46\u662f\u65e0\u8bba\u5982\u4f55\u8fd9\u4e2a\u201c\u94a5\u5319\u201d\u4e5f\u53ea\u4f1a\u88ab\u201c\u67dc\u53f0\u201d\u7528\u6765\u83b7\u53d6\u5e93\u623f\u91cc\u7684\u7279\u5b9a\u8d27\u7269\uff0c\u800c\u4e0d\u4f1a\u53d1\u751f\u8bf8\u5982\u201c\u7528\u6237\u201d\u5e26\u7740\u5341\u516b\u8f66\u9762\u5305\u4eba\u628a\u5e93\u623f\u6d17\u52ab\u4e00\u7a7a\u7684\u60c5\u51b5\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u53ea\u9700\u8981\u5c01\u88c5\u597d\u4e00\u7cfb\u5217\u7c7b\u4f3c\u8fd9\u79cd\u7684\u9700\u6c42-\u7ed3\u679c\u7684\u5904\u7406\u65b9\u6848\uff0c\u8ba9\u7528\u6237\u5728\u6709\u9700\u8981\u7684\u65f6\u5019\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u8fd9\u4e9b\u65b9\u6848\uff0c\u5728\u6267\u884c\u5f53\u524d\u4efb\u52a1\u7684\u65f6\u5019\u5c06\u63a7\u5236\u6743\u8ba9\u6e21\u7ed9\u64cd\u4f5c\u7cfb\u7edf\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5b8c\u6210\u540e\u518d\u8fd8\u56de\u63a7\u5236\u6743\uff0c\u5c31\u53ef\u4ee5\u5b9e\u73b0\u5c06\u7279\u6743\u6307\u4ee4\u9694\u79bb\u5728\u5185\u6838\u6001\uff0c\u540c\u65f6\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u5b8c\u6210\u9700\u6c42\u3002

    \u800c\u90a3\u4e48\u5728\u5177\u4f53\u5b9e\u73b0\u4e0a\uff0c\u8fd9\u4e00\u6b65\u662f\u901a\u8fc7 trap \u5b9e\u73b0\u7684\u3002

    Transition from user to kernel mode.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7cfb\u7edf\u8c03\u7528","title":"\u7cfb\u7edf\u8c03\u7528","text":"

    Examples of W&U system calls.

    \u7cfb\u7edf\u8c03\u7528(System Call)\u662f\u7cfb\u7edf\u5411\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u670d\u52a1\u7684\u4e00\u4e2a\u63a5\u53e3\uff0c\u5b83\u4eec\u7ecf\u5e38\u4ee5 C/C++ \u51fd\u6570\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u5bf9\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u63a5\u8fd1\u5e95\u5c42\u7684\u4efb\u52a1\uff0c\u4e5f\u53ef\u80fd\u662f\u901a\u8fc7\u6c47\u7f16\u7f16\u5199\u7684\u3002

    \u4f46\u8bf4\u5230\u5e95\uff0c\u7cfb\u7edf\u8c03\u7528\u8fd8\u662f\u76f8\u5bf9\u5e95\u5c42\u7684\u8bbe\u8ba1\uff0c\u901a\u5e38\u7684\u5f00\u53d1\u5e76\u4e0d\u57fa\u4e8e\u5982\u6b64\u5e95\u5c42\u7684\u8bbe\u8ba1\u5c55\u5f00\u3002\u66f4\u5e38\u89c1\u7684\u662f\u5229\u7528\u5404\u79cd\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\u7684 Application Programming Interface, API \u8fdb\u884c\u5f00\u53d1\u3002

    API \u662f\u4e00\u4e2a\u975e\u5e38\u5e38\u89c1\u7684\u6982\u5ff5\uff0c\u5728\u6211\u770b\u6765\u7cfb\u7edf\u8c03\u7528\u672c\u8eab\u4e5f\u662f\u4e00\u79cd API\u3002API \u7684\u6838\u5fc3\u601d\u60f3\u662f\u8ba9\u8c03\u7528\u8005\u53ea\u9700\u8981\u77e5\u9053\u5982\u4f55\u4e0e\u88ab\u8c03\u7528\u8005\u4ea4\u6d41\u4ee5\u5b9e\u73b0\u76ee\u7684\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u5177\u4f53\u5b9e\u73b0\u3002\u8fd9\u540c\u65f6\u4e5f\u6697\u793a\u7740\uff0c\u53ea\u8981 API \u4e00\u81f4\uff0c\u540c\u6837\u7684\u7a0b\u5e8f\u5728\u4e0d\u540c\u7684\u5e73\u53f0\u4e0a\u4e5f\u80fd\u76f4\u63a5\u7f16\u8bd1\u540e\u8fd0\u884c\u3002

    \u663e\u7136\uff0cAPI \u4e0e\u7f16\u7a0b\u8bed\u8a00\u5f80\u5f80\u662f\u5f3a\u76f8\u5173\u7684\uff0c\u7279\u5b9a\u7f16\u7a0b\u8bed\u8a00\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u8fd0\u884c\u4e5f\u662f\u9700\u8981\u4e00\u5b9a\u7684\u201c\u73af\u5883\u201d\u7684\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u8fd0\u884c\u65f6\u73af\u5883(run-time environment, RTE)\u3002RTE \u901a\u5e38\u5305\u62ec\u4e86\u7f16\u8bd1\u5668(compilers)\u3001\u89e3\u91ca\u5668(interpreters)\u3001\u5e93(libraries)\u548c\u88c5\u8f7d\u5668(loaders)\u7b49\uff0c\u5b83\u4eec\u5171\u540c\u7ec4\u6210\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684\u8fd0\u884c\u65f6\u73af\u5883\u3002

    \u76f8\u5173\u9605\u8bfb \u601d\u8003\u9898 \u9898\u9762\u89e3\u6790

    \u8fa8\u6790\u5e93\u51fd\u6570\u4e0e\u7cfb\u7edf\u8c03\u7528\uff1f

    \u5e93\u51fd\u6570\u8fd0\u884c\u5728\u7528\u6237\u7a7a\u95f4\u800c\u7cfb\u7edf\u8c03\u7528\u8fd0\u884c\u5728\u5185\u6838\u7a7a\u95f4\u3002\u5927\u90e8\u5206\u5e93\u51fd\u6570\u53ef\u80fd\u4f7f\u7528\u7cfb\u7edf\u8c03\u7528\u6765\u5b9e\u73b0\u76ee\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","title":"\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","text":"

    The role of the linker and loader.

    \u8bf4\u4e86\u8fd9\u4e48\u591a\uff0c\u90a3\u4e48\u64cd\u4f5c\u7cfb\u7edf\u5230\u5e95\u662f\u5982\u4f55\u6267\u884c\u4e00\u4e2a\u7a0b\u5e8f\u7684\u5462\uff1f\u4ee5 C \u4e3a\u4f8b\uff0c\u4e00\u4e2a\u5199\u5b8c\u7684\u4ee3\u7801\u9700\u8981\u7ecf\u8fc7\u7f16\u8bd1\u3001\u94fe\u63a5\u3001\u88c5\u8f7d\u4e09\u4e2a\u6b65\u9aa4\uff0c\u624d\u80fd\u6210\u4e3a\u4e00\u4e2a\u5728\u5185\u5b58\u4e2d\u7684\uff0c\u53ef\u4ee5\u88ab\u6267\u884c\u7684\u7a0b\u5e8f\u3002

    \u7b80\u5355\u6765\u8bf4\uff0c\u7f16\u8bd1\u5668\u9996\u5148\u5c06\u82e5\u5e72 .c \u6e90\u6587\u4ef6\u7f16\u8bd1\u4e3a\u82e5\u5e72 .o \u6587\u4ef6\uff08\u8fd9\u91cc\u5408\u5e76\u4e86\u9884\u5904\u7406\u3001\u7f16\u8bd1\u3001\u6c47\u7f16\u6b65\u9aa4\uff09\uff0c\u8fd9\u4e9b .o \u6587\u4ef6\u88ab\u79f0\u4e3a\u53ef\u91cd\u5b9a\u4f4d\u76ee\u6807\u6587\u4ef6(relocatable object file)\uff0c\u5176\u5b58\u5728\u5f62\u5f0f\u4e3a\u673a\u5668\u7801\uff1b\u968f\u540e\u94fe\u63a5\u5668\u5c06\u82e5\u5e72 .o \u6587\u4ef6\u8fde\u5e26\u6240\u9700\u8981\u7684\u4e00\u4e9b\u5e93\u6587\u4ef6\uff08\u5982 .a \u6587\u4ef6\uff09\u94fe\u63a5\u4e3a\u4e00\u4e2a\u53ef\u6267\u884c\u76ee\u6807\u6587\u4ef6(executable object file)\u3002

    \u7279\u522b\u7684\uff0c\u94fe\u63a5\u5206\u4e3a\u9759\u6001\u94fe\u63a5\u548c\u52a8\u6001\u94fe\u63a5\u4e24\u79cd\u3002\u9759\u6001\u94fe\u63a5\u5c06\u5e93\u6587\u4ef6\u7684\u4ee3\u7801\u76f4\u63a5\u5408\u5e76\u8fdb\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u52a8\u6001\u94fe\u63a5\u4ec5\u4ec5\u5c06\u5e93\u6587\u4ef6\u7684\u5f15\u7528\u4fe1\u606f\u5199\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u518d\u53bb\u5bfb\u627e\u8fd9\u4e9b\u5e93\u6587\u4ef6\u3002

    gcc -E main.c -o main.i # pre-process\ngcc -S main.i -o main.s # compile to assembly code\ngcc -c main.s -o main.o # assemble to object file\ngcc main.o -o main      # link\n./main                  # (load and) execute\n
    \u4e00\u4e9b\u64cd\u4f5c

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u52a8\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u6bd4\u9759\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u8981\u5c0f\u4e0d\u5c11\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u5f15\u5bfc","title":"\u5f15\u5bfc","text":"

    \u5728\u8ba1\u7b97\u673a\u521a\u521a\u542f\u52a8\uff0c\u64cd\u4f5c\u7cfb\u7edf\u8fd8\u672a\u5f00\u59cb\u8fd0\u884c\u4e4b\u524d\uff0c\u9700\u8981\u5f00\u673a\u540e\u7684\u7b2c\u4e00\u4e2a\u7a0b\u5e8f\u2014\u2014\u5f15\u5bfc\u52a0\u8f7d\u5668(bootstrap loader)\u6765\u4e00\u6b65\u4e00\u6b65\u5730\u521d\u59cb\u5316\u64cd\u4f5c\u7cfb\u7edf\u3002\u5bf9\u5927\u591a\u6570\u64cd\u4f5c\u7cfb\u7edf\u6765\u8bf4\uff0cbootstrap \u90fd\u4f1a\u88ab\u5b58\u50a8\u5728 ROM \u4e2d\uff0c\u5e76\u4e14\u9700\u8981\u5728\u4e00\u4e2a\u5df2\u77e5\u7684\u4f4d\u7f6e\uff08\u5426\u5219\u600e\u4e48\u627e\u5230\u5b83\u5462\uff09\u3002Bootstrap loader \u4f1a\u8f7d\u5165\u66f4\u52a0\u7231\u590d\u6742\u7684\uff0c\u5b8c\u6574\u7684 bootstrap\uff0c\u800c\u5305\u542b bootstrap \u7a0b\u5e8f\u7684\u5206\u533a\u5c31\u88ab\u79f0\u4e3a\u5f15\u5bfc\u5206\u533a(bootstrap partition)\u3002

    1. \u5e76\u53d1\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u95f4\u95f4\u9694\u5185\u53d1\u751f\uff0c\u800c\u5e76\u884c\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u523b\u53d1\u751f\u3002\u903b\u8f91\u4e0a\uff0c\u5e76\u884c\u662f\u5e76\u53d1\u7684\u5b50\u96c6\u3002\u00a0\u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/","title":"Unit 1: \u8fdb\u7a0b\u7ba1\u7406 | Process Management","text":"

    \u7ea6 7185 \u4e2a\u5b57 78 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 37 \u5206\u949f

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b","title":"\u8fdb\u7a0b","text":"

    \u4e00\u6bb5\u672c\u8d28\u4e0a\u7a0b\u5e8f\u662f\u9759\u6001\u7684\u3001\u5b58\u50a8\u5728\u786c\u76d8\u4e0a\u7684\u6307\u4ee4\u6570\u636e\uff0c\u800c\u5f53\u5b83\u9644\u5e26\u8fd0\u884c\u7a0b\u5e8f\u6240\u9700\u8981\u7684\u5fc5\u8981\u4fe1\u606f\u8fdb\u5165\u5185\u5b58\uff0c\u5f97\u5230\u76f8\u5173\u8d44\u6e90\u540e\uff0c\u5b83\u6210\u4e3a\u4e00\u4e2a\u52a8\u6001\u7684\u3001\u4e0e\u8ba1\u7b97\u673a\u8d44\u6e90\u4e92\u52a8\u7684\u5b9e\u4f53\uff0c\u8fd9\u4e2a\u5b9e\u4f53\u5c31\u662f\u8fdb\u7a0b(process)\u3002

    \u8fdb\u7a0b\u662f\u662f\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u8d44\u6e90\u5206\u914d\u548c\u8c03\u5ea6\u7684\u4e00\u4e2a\u72ec\u7acb\u5355\u4f4d\uff0c\u5b83\u4ee5\u7279\u5b9a\u5f62\u5f0f\u5b58\u5728\u4e8e\u5185\u5b58\u4e2d\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u5c01\u95ed\u6027\uff0c\u662f\u591a\u9053\u6280\u672f\u7684\u91cd\u8981\u57fa\u7840\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u5f62\u5f0f","title":"\u8fdb\u7a0b\u7684\u5f62\u5f0f","text":"

    \u524d\u9762\u6211\u4eec\u63d0\u5230\uff0c\u8fdb\u7a0b\u52a8\u6001\u5730\u5b58\u5728\u4e8e\u5185\u5b58\u4e2d\uff0c\u56e0\u6b64\u9664\u4e86\u547d\u4ee4\u4ee5\u5916\uff0c\u8fd8\u5305\u62ec\u5176\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u4fe1\u606f\u3002\u62bd\u8c61\u6765\u8bf4\uff0c\u4e3b\u8981\u5305\u542b\u8fd9\u4e09\u4e2a\u7ef4\u5ea6\uff1a\u2460 \u7528\u6765\u8dd1\u7684\u4ee3\u7801\uff1b\u2461 \u8dd1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e0d\u65ad\u4f1a\u88ab\u66f4\u65b0\u7684\u6570\u636e\uff1b\u2462 \u7528\u6765\u7ef4\u62a4\u3001\u63a7\u5236\u8fdb\u7a0b\u7684\u63a7\u5236\u4fe1\u606f\u3002

    \u8fdb\u7a0b\u5728\u5185\u5b58\u4e2d\u5b58\u5728\u9700\u8981\u4e00\u5757\u865a\u62df\u7684\u5730\u5740\u7a7a\u95f4\u4ee5\u5b58\u50a8\u4e0a\u8ff0\u8fd9\u4e9b\u5185\u5bb9\u3002\u5176\u5305\u542b\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7684\u7528\u6237\u90e8\u5206\u548c\u865a\u62df\u5730\u5740\u7a7a\u95f4\u7684\u5185\u6838\u90e8\u5206\u3002

    \u865a\u62df\u5730\u5740\u7a7a\u95f4\u5c06\u4f1a\u5728\u540e\u9762\u7684\u7ae0\u8282\u4e2d\u8be6\u7ec6\u8bb2\u89e3\uff0c\u8bfb\u8005\u53ef\u4ee5\u8003\u8651\u8bbf\u95ee\u94fe\u63a5\u7b80\u5355\u77a5\u4e00\u773c\u7559\u4e2a\u5370\u8c61\u3002

    \u4e0b\u56fe\u662f\u8fdb\u7a0b\u5728\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7528\u6237\u90e8\u5206\u7684\u7ec4\u6210\uff1a

    \u7528\u6237\u90e8\u5206

    \u53ef\u4ee5\u53d1\u73b0\uff0cText \u548c Data \u90e8\u5206\u6240\u9700\u8981\u7684\u7a7a\u95f4\u5728\u4e00\u5f00\u59cb\u5c31\u88ab\u786e\u5b9a\uff0c\u800c Heap \u548c Stack \u90fd\u53ef\u80fd\u52a8\u6001\u7684\u6269\u5c55\u548c\u6536\u7f29\u3002\u89c2\u5bdf\u53f3\u56fe\uff0cHeap \u548c Stack \u662f\u76f8\u5411\u6269\u5c55\u7684\uff0c\u4e8e\u662f\u6574\u4e00\u5757\u7684\u5927\u5c0f\u80fd\u591f\u56fa\u5b9a\u4e0b\u6765\uff0c\u800c\u5728\u5185\u90e8\u8fdb\u884c\u6709\u9650\u5236\u7684\u52a8\u6001\u5206\u914d\u3002\u5f53\u7136\uff0cHeap \u548c Stack \u7684\u533a\u57df\u5e76\u4e0d\u4f1a\u4ea4\u53c9\u3002

    memory layout of a C program

    \u4e4b\u6240\u4ee5\u628a\u6709\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u548c\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u5206\u5f00\u6765\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u5728\u4e00\u5f00\u59cb\u53ea\u5b58\u50a8\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u7684\u5927\u5c0f\uff0c\u800c\u5728\u771f\u6b63\u7b2c\u4e00\u6b21\u8bbf\u95ee\u7684\u65f6\u5019\u624d\u5206\u914d\u5185\u5b58\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u51cf\u5c11\u5185\u5b58\u5360\u7528\u3002

    \u901a\u5e38\u6765\u8bf4\uff0c\u672a\u521d\u59cb\u5316\u7684\u9759\u6001\u53d8\u91cf\u4e00\u822c\u90fd\u88ab\u653e\u5728 .bss \u6bb5\uff0c\u800c\u5728\u88ab\u521d\u59cb\u5316\u7684\u65f6\u5019\u79fb\u52a8\u5230 .data \u6bb5\u30021

    \u800c\u653e\u5728\u5185\u6838\u90e8\u5206\u7684\u5185\u5bb9\uff0c\u5219\u66f4\u4fa7\u91cd\u4e8e\u8fdb\u7a0b\u7684\u63a7\u5236\u4fe1\u606f\uff0c\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u3002

    \u5185\u6838\u90e8\u5206

    \u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7528\u6765\u63cf\u8ff0\u8fdb\u7a0b\u7684\u4e00\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u5305\u542b\u4e86\u8fdb\u7a0b\u7684\u6240\u6709\u4fe1\u606f\uff0c\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u91cd\u8981\u7684\u6570\u636e\u7ed3\u6784\u4e4b\u4e00\u3002\u53ef\u4ee5\u8bf4\uff0cPCB \u662f\u8fdb\u7a0b\u5b58\u5728\u7684\u552f\u4e00\u6807\u5fd7\u3002

    \u901a\u5e38\u6765\u8bf4\uff0cPCB \u53ef\u80fd\u5305\u542b\u8fd9\u4e9b\u5185\u5bb9\uff1a

    \u4e24\u4e2a\u90e8\u5206\u5728\u903b\u8f91\u4e0a\u7684\u5173\u7cfb\u662f\uff0c\u7528\u6237\u90e8\u5206\u5212\u5206\u5e76\u5b9e\u9645\u5b58\u50a8\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u6570\u636e\u8d44\u6e90\uff08\u5305\u62ec\u7a0b\u5e8f\u8fd0\u884c\u7684\u4ee3\u7801\uff09\uff0c\u800c\u5185\u6838\u90e8\u5206\u5b58\u50a8\u8fdb\u7a0b\u7684\u5143\u6570\u636e\uff0c\u5305\u62ec\u63a7\u5236\u4fe1\u606f\u4e0e\u7528\u6237\u90e8\u5206\u4e2d\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u7684\u5206\u914d\u548c\u4f7f\u7528\u60c5\u51b5\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u72b6\u6001","title":"\u8fdb\u7a0b\u7684\u72b6\u6001","text":"

    \u5728\u5355\u673a\u8bed\u5883\u4e0b\uff0c\u8fdb\u7a0b\u8c03\u5ea6\u4e00\u4e2a\u6bd4\u8f83\u6838\u5fc3\u7684\u90e8\u5206\u5c31\u662f\u5c06 CPU \u8d44\u6e90\u7ed9\u54ea\u4e2a\u4efb\u52a1\u7528\u3002\u800c\u5e76\u4e0d\u662f\u4efb\u4f55\u8fdb\u7a0b\u5728\u4efb\u4f55\u65f6\u523b\u90fd\u53ef\u4ee5\u76f4\u63a5\u83b7\u5f97 CPU \u8d44\u6e90\u5e76\u76f4\u63a5\u5f00\u59cb\u4f7f\u7528\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u5bf9\u8fdb\u7a0b\u7684\u72b6\u6001\u8fdb\u884c\u5efa\u6a21\u3002

    \u8fdb\u7a0b\u5728\u5c31\u7eea\u6001\u9700\u8981\u7b49\u5f85 CPU \u8d44\u6e90\u7684\u6d3e\u53d1(dispatch)\uff0c\u63a5\u53d7\u8c03\u5ea6\uff1b\u5728\u963b\u585e\u6001\u9700\u8981\u7b49\u5f85\u5bf9\u5e94\u7684 I/O \u5b8c\u6210\u6216\u4e8b\u4ef6\u5b8c\u6210\uff0c\u56e0\u800c\u5b58\u5728\u4e00\u79cd\u7ed3\u6784\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u4e9b\u201c\u76f8\u5bf9\u9759\u6b62\u201d\u7684\u8fdb\u7a0b\u3002\u901a\u5e38\u4f7f\u7528\u5c31\u7eea\u961f\u5217(ready queue)\u548c\u7b49\u5f85\u961f\u5217(wait queue)\u6765\u5b9e\u73b0\uff0c\u5176\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    \u5b9e\u9645\u5b9e\u73b0\u4e2d\uff0c\u7531\u4e8e\u7b49\u5f85\u7684 I/O \u6216\u4e8b\u4ef6\u4e0d\u540c\uff0c\u53ef\u80fd\u7ef4\u62a4\u591a\u4e2a\u7b49\u5f85\u961f\u5217\uff0c\u4e8e\u662f\u5b9e\u9645\u8fc7\u7a0b\u4e2d\u7684\u60c5\u51b5\u53ef\u80fd\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7ba1\u7406","title":"\u8fdb\u7a0b\u7ba1\u7406","text":"

    \u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u8ba8\u8bba\u4e86\u8fdb\u7a0b\u7684\u5f62\u5f0f\u548c\u4e00\u4e2a\u4e2a\u79bb\u6563\u7684\u72b6\u6001\uff0c\u73b0\u5728\u6211\u4eec\u6765\u8bb2\u8bb2\u8fdb\u7a0b\u5728\u51e0\u4e2a\u9636\u6bb5\u7684\u52a8\u6001\u8fc7\u7a0b\u3002

    \u7528\u6237\u8fdb\u7a0b\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u603b\u4f53\u4e0a\u6765\u8bb2\u9075\u5faa\u4e00\u4e2a\u6811\u72b6\u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u552f\u4e00\u6807\u8bc6\u7b26\u8fdb\u7a0b\u53f7\uff08\u901a\u5e38\u88ab\u79f0\u4e3a pid\uff0c\u4f46\u5728\u7279\u5b9a\u8bed\u5883\u4e0b\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u542b\u4e49\uff09\u3002\u5982\u4e0b\u56fe\u662f Linux \u7684\u4e00\u4e2a\u8fdb\u7a0b\u6811\u3002

    \u4f60\u4e5f\u53ef\u4ee5\u5728 Linux \u4e2d\u4f7f\u7528 pstree \u6765\u67e5\u770b\u8fdb\u7a0b\u6811\u3002 \u8a00\u4e0b\u4e4b\u610f\u5c31\u662f\u8fdb\u7a0b\u4e4b\u95f4\u5b58\u5728\u4e00\u79cd\u7236\u5b50\u5173\u7cfb\uff0c\u5373 child \u8fdb\u7a0b\u662f\u7531 parent \u8fdb\u7a0b\u521b\u5efa\u7684\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9664\u4e86\u81ea\u5df1\u7684 pid \u8fd8\u6709 ppid \u6765\u6807\u8bc6\u5b83\u7684 parent \u8fdb\u7a0b\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u521b\u5efa","title":"\u8fdb\u7a0b\u7684\u521b\u5efa","text":"

    child \u8fdb\u7a0b\u7684\u8d44\u6e90\u53ef\u80fd\u76f4\u63a5\u6765\u81ea\u64cd\u4f5c\u7cfb\u7edf\u7684\u5206\u914d\uff0c\u4e5f\u53ef\u80fd\u6765\u81ea parent \u8fdb\u7a0b\u7684\u5206\u914d\uff0c\u9650\u5236\u4f7f\u7528\u540e\u8005\u7684\u597d\u5904\u662f\u80fd\u591f\u907f\u514d\u56e0\u4e3a\u521b\u5efa\u592a\u591a\u5b50\u8fdb\u7a0b\u800c\u5bfc\u81f4\u8d44\u6e90\u4e0d\u591f\u7528\u3002\u7279\u522b\u7684\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u8fd9\u68f5\u6811\u7684\u6839\u662f systemd\uff0c\u5386\u53f2\u4e0a\u4e5f\u66fe\u53eb\u8fc7 init\uff0c\u5b83\u662f\u64cd\u4f5c\u7cfb\u7edf\u542f\u52a8\u540e\u8fd0\u884c\u7684\u7b2c\u4e00\u4e2a\u7528\u6237\u8fdb\u7a0b\uff0c\u81f3\u5c11\u5728 Linux \u4e2d\uff0c\u5b83\u7684 pid \u88ab\u5206\u914d\u4e3a 1\uff0c\u800c\u5b83\u7684 ppid \u662f 0\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u4e2a\u8fdb\u7a0b\u7684 parent \u662f scheduler \u800c\u975e\u4e00\u4e2a\u8fdb\u7a0b2\u3002

    \u5728 Linux \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 fork \u6765\u521b\u5efa\u4e00\u4e2a child \u8fdb\u7a0b\uff0c\u5728\u8fd9\u91cc\u5148\u5f15\u5165\u5982\u4f55\u5b9e\u73b0\u662f\u4e3a\u4e86\u5f15\u5165\u4e00\u4e2a\u53ef\u4ee5\u501f\u6765\u63cf\u8ff0\u8fc7\u7a0b\u7684\u8bed\u8a00\uff0c\u6211\u4eec\u4ee5\u4e0b\u9762\u7684 C \u7a0b\u5e8f\u4e3a\u4f8b\u5c55\u5f00\u4e4b\u540e\u7684\u8ba8\u8bba\u3002

    #include <stdio.h>\n#include <unistd.h>\n#include <sys/wait.h>\n#include <sys/types.h>\n\nint main() {\nprintf(\"A process starts!\\n\");\n\npid_t pid;\npid = fork();\nif (pid < 0) {\nprintf(\"Fork failed!\\n\");\n} else if (pid == 0) {\n// sleep(1);\nprintf(\"pid is zero, so it's child process!\\n\");\n} else {\n// wait(NULL);\n// sleep(1);\nprintf(\"pid is nonzero thus it's parent process!\\n\");\n}\n}\n

    \u7b2c 10 \u884c\u9ad8\u4eae\u7684 fork() \u8bed\u53e5\u521b\u5efa\u4e86\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u8be5\u8fdb\u7a0b\u53ea\u6709\u8fdb\u7a0b\u53f7\u4e0e parent \u8fdb\u7a0b\u4e0d\u4e00\u6837\uff0c\u540c\u65f6\u901a\u8fc7\u68c0\u67e5\u8fd4\u56de\u503c pid \u6765\u5224\u65ad\u5c5e\u4e8e parent \u8fd8\u662f child\u3002

    \u5982\u679c\u7b2c 18 \u884c\u4ecd\u7136\u88ab\u6ce8\u91ca\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u8bf6 child \u8fdb\u7a0b\u5c06\u5e76\u53d1\u6267\u884c\uff0c\u5373\u5b8c\u6210 fork() \u540e\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u4ece 11 \u884c\u5f00\u59cb\u7ee7\u7eed\u5411\u4e0b\u5e76\u53d1\u7684\u6267\u884c\uff0c\u4e92\u4e0d\u963b\u585e\uff1b\u5982\u679c 18 \u884c\u7684\u6ce8\u91ca\u88ab\u53d6\u6d88\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u5c06\u7b49\u5f85 child \u8fdb\u7a0b\u7ed3\u675f\u540e\u518d\u7ee7\u7eed\u3002\u8bfb\u8005\u53ef\u4ee5\u5c1d\u8bd5\u6392\u5217\u7ec4\u5408\u4e24\u4e2a\u6ce8\u91ca\u6765\u89c2\u5bdf\u7a0b\u5e8f\u8fd0\u884c\u7684\u7ed3\u679c\u4f1a\u5982\u4f55\u53d8\u5316\u3002

    \u903b\u8f91\u4e0a\u521b\u5efa\u7684\u65b0\u8fdb\u7a0b\u6709\u4e24\u79cd\u60c5\u51b5\uff1a

    1. \u590d\u5236 parent \u8fdb\u7a0b\u7684\u4ee3\u7801\u6570\u636e\uff1b
    2. \u8f7d\u5165\u65b0\u7684\u7a0b\u5e8f\u5e76\u7ee7\u7eed\u6267\u884c\uff1b

    \u800c\u5b9e\u9645\u5728 Linux \u4e2d\uff0c\u7b2c\u4e00\u79cd\u901a\u8fc7 fork() \u5b9e\u73b0\uff0c\u7b2c\u4e8c\u79cd\u901a\u8fc7 fork() \u540e execXX() \u5b9e\u73b0\uff0cexecXX() \u4f1a\u8986\u76d6\u90a3\u4e2a\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u6267\u884c\u5176\u4ed6\u7a0b\u5e8f\u30023,4

    copy on write

    \u53ef\u4ee5\u53d1\u73b0\uff0cfork \u7684\u590d\u5236\u64cd\u4f5c\u53ef\u80fd\u4f1a\u5e26\u6765\u8f83\u5927\u7684\u5f00\u9500\u3002\u6240\u4ee5\u6709\u4e00\u79cd\u6280\u672f\u79f0\u4e3a copy on write\uff0c\u4e5f\u5c31\u662f\u53ea\u6709\u5f53\u9700\u8981\u53d1\u751f\u5185\u5bb9\u4fee\u6539\u7684\u65f6\u5019\uff0c\u624d\u771f\u6b63\u53bb\u590d\u5236\u7236\u8fdb\u7a0b\u7684\u5185\u5bb9\uff0c\u4e5f\u5c31\u662f\u4e00\u79cd\u201clazy copy\u201d\u3002

    \u672c\u5757\u5185\u5bb9\u4e8e\u865a\u62df\u5185\u5b58\u76f8\u5173\u7684\u5185\u5bb9\u6709\u5173\uff0c\u5982\u679c\u8bfb\u8005\u60f3\u4e0d\u660e\u767d\u5177\u4f53\u5b9e\u73b0\uff0c\u53ef\u4ee5\u5148\u4e86\u89e3\u529f\u80fd\uff0c\u5728\u4e4b\u540e\u5b66\u4e60\u76f8\u5173\u5185\u5bb9\u540e\u6211\u4f1a\u518d\u6b21\u63d0\u9192\u8bfb\u8005\u56de\u987e\u8be5\u90e8\u5206\u5185\u5bb9\u3002

    virtual memory fork

    \u4e00\u4e9b UNIX \u7cfb\u7edf\u63d0\u4f9b\u4e86 vfork() \u8fd9\u4e2a\u521b\u5efa\u8fdb\u7a0b\u7684\u65b9\u6cd5\u3002\u4e3a\u4e86\u51cf\u5c0f\u590d\u5236\u5e26\u6765\u7684\u5f00\u9500\uff0cvfork() \u5e72\u8106\u5c31\u4e0d\u590d\u5236\u4e86\uff0c\u76f4\u63a5\u628a\u7236\u8fdb\u7a0b\u7ed9\u963b\u585e\u6389\uff0c\u7136\u540e\u81ea\u5df1\u7528\u7236\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u4e8e\u662f\u5b50\u8fdb\u7a0b\u5728\u5730\u5740\u7a7a\u95f4\u5185\u505a\u7684\u4fee\u6539\u5bf9\u7236\u8fdb\u7a0b\u662f\u53ef\u89c1\u7684\uff0c\u6240\u4ee5\uff0c\u4f7f\u7528 vfork() \u65f6\u9700\u8981\u5bf9\u6b64\u7279\u522b\u7559\u5fc3\u3002

    \u6362\u53e5\u8bdd\u8bf4\uff0c\u5728\u4e0a\u9762\u8fd9\u79cd\u8bed\u5883\u4e0b\uff0c\u53ef\u4ee5\u628a vfork() \u5f53\u4f5c\u521b\u5efa\u4e86\u4e00\u4e2a\u5bf9\u5f53\u524d\u8fdb\u7a0b\u7684 reference\uff0cvfork \u51fa\u6765\u7684\u5b50\u8fdb\u7a0b\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u7236\u8fdb\u7a0b\u5176\u5b9e\u4e5f\u5728\u201c\u540c\u6b65\u201d\u5730\u8fd0\u884c\u3002

    \u53ef\u662f\u8fd9\u6709\u5565\u7528\u5462\uff1f\u6211\u521b\u5efa\u4e00\u4e2a reference \u505a\u7684\u4e8b\u60c5\u548c\u6211\u76f4\u63a5\u505a\u7684\u4e8b\u60c5\u6ca1\u5565\u533a\u522b\u554a\uff1f

    \u662f\u7684\uff0c\u6240\u4ee5 vfork() \u538b\u6839\u4e0d\u662f\u8fd9\u4e48\u7528\u7684\u3002\u5b9e\u9645\u4e0a\uff0c\u7531 vfork() \u521b\u5efa\u51fa\u6765\u7684\u5b50\u8fdb\u7a0b\u4e00\u822c\u9a6c\u4e0a\u5c31\u4f1a\u8c03\u7528 execXX() \u65cf\u7684\u63a5\u53e3\uff08\u8fd9\u91cc\u5f53\u7136\u4e0d\u4f1a\u628a\u7236\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4 overwrite \u4e86\uff0c\u800c\u662f\u76f4\u63a5\u66ff\u6362\u5f53\u524d\u8fdb\u7a0b\uff09\u3002

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u65e2\u7136\u4e00\u822c vfork() \u5b8c\u4e86\u9a6c\u4e0a\u5c31 execXX() \u7136\u540e\u66ff\u6362\u5f53\u524d\u8fdb\u7a0b\u4e86\uff0c\u90a3\u4e3a\u4ec0\u4e48 vfork() \u7684\u8fdb\u7a0b\u4f1a\u4f7f\u7528\u7236\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\uff0c\u800c\u4e0d\u662f\u6bd4\u5982\u8bf4\u968f\u4fbf\u6307\u5411\u54ea\u91cc\uff0c\u5c31\u50cf\u91ce\u6307\u9488\u4e00\u6837\u5462\uff1f

    \u63d0\u793a

    \u8fd9\u4e2a\u88ab\u521b\u5efa\u51fa\u6765\u7684\u8fdb\u7a0b\u8981\u600e\u4e48\u77e5\u9053\u63a5\u4e0b\u6765\u5b83\u8981 execXX() \u5462\uff1f

    \u672c\u5757\u5185\u5bb9\u4e8e\u865a\u62df\u5185\u5b58\u76f8\u5173\u7684\u5185\u5bb9\u6709\u5173\uff0c\u5982\u679c\u8bfb\u8005\u60f3\u4e0d\u660e\u767d\u5177\u4f53\u5b9e\u73b0\uff0c\u53ef\u4ee5\u5148\u4e86\u89e3\u529f\u80fd\uff0c\u5728\u4e4b\u540e\u5b66\u4e60\u76f8\u5173\u5185\u5bb9\u540e\u6211\u4f1a\u518d\u6b21\u63d0\u9192\u8bfb\u8005\u56de\u987e\u8be5\u90e8\u5206\u5185\u5bb9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u7ec8\u6b62","title":"\u8fdb\u7a0b\u7684\u7ec8\u6b62","text":"

    \u5f53\u8fdb\u7a0b\u8c03\u7528 exit() \u8fd9\u4e2a\u7cfb\u7edf\u8c03\u7528\u65f6\uff0c\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u88ab\u7ec8\u6b62\uff0c\u8fd9\u610f\u5473\u7740\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u4e0d\u518d\u6267\u884c\uff0c\u5176\u8d44\u6e90\u5c06\u88ab\u91ca\u653e\uff0c\u540c\u65f6\u2014\u2014\u8fd4\u56de\u72b6\u6001\u503c\uff0c\u800c\u8fd9\u4e2a\u72b6\u6001\u503c\u5c06\u88ab parent \u8fdb\u7a0b\u7684 wait() \u63a5\u6536\u3002\u7279\u522b\u7684\uff0c\u5982\u679c parent \u8fdb\u7a0b\u5c1a\u672a\u8c03\u7528 wait()\uff0c\u5219\u8fd9\u4e2a child \u8fdb\u7a0b\u8fd8\u4e0d\u4f1a\u5b8c\u5168\u6d88\u5931\uff0c\u56e0\u4e3a\u8981\u8fd4\u56de\u7684\u4e1c\u897f\u8fd8\u6ca1\u8fd4\u56de\uff0c\u8fd9\u79cd\u903b\u8f91\u4e0a\u5df2\u7ecf\u7ec8\u6b62\uff0c\u4f46\u4ecd\u7136\u5360\u6709\u4e00\u90e8\u5206\u8d44\u6e90\uff0c\u7b49\u5f85 parent \u8fdb\u7a0b\u8c03\u7528 wait() \u7684\u8fdb\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u50f5\u5c38\u8fdb\u7a0b(zombie)\u3002\u4e00\u4e2a\u8fdb\u7a0b\u53d8\u6210\u50f5\u5c38\u8fdb\u7a0b\u662f\u5f88\u666e\u901a\u7684\uff0c\u5173\u952e\u5728\u4e8e\uff0c\u5982\u679c parent \u8fdb\u7a0b\u4e0d\u8c03\u7528 wait()\uff0c\u90a3\u7b49 parent \u7ec8\u6b62\u540e\uff0c\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u53ef\u80fd\u4ecd\u7136\u4e00\u76f4\u5b58\u5728\uff0c\u6b64\u65f6\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u540c\u65f6\u662f\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b(orphan)\u2014\u2014\u5373\u6ca1\u6709 parent \u8fdb\u7a0b\u7684\u8fdb\u7a0b\uff0c\u8fd9\u663e\u7136\u662f\u4e0d\u5408\u7406\u7684\uff0cUNIX \u7684\u89e3\u51b3\u529e\u6cd5\u662f\uff0c\u8ba9\u6240\u6709\u5b64\u513f\u8fdb\u7a0b\u90fd\u6210\u4e3a init/systemd \u7684 child \u8fdb\u7a0b\uff0c\u7531 init/systemd \u6765 wait() \u5b83\u4eec\u3002

    \u5728\u67d0\u4e9b\u7cfb\u7edf\u91cc\uff0c\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u7ea7\u8054\u7ec8\u6b62(cascading termination)\u6765\u907f\u514d\u5b64\u513f\u8fdb\u7a0b\u7684\u51fa\u73b0\uff0c\u5373\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u88ab\u7ec8\u6b62\u65f6\uff0c\u5b83\u7684 child \u4e5f\u5e94\u5f53\u88ab\u9012\u5f52\u5730\u7ec8\u6b62\u3002

    daemon

    \u5b88\u62a4\u8fdb\u7a0bWiki\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5728\u201c\u540e\u53f0\u201d\u957f\u671f\u8fd0\u884c\uff0c\u4f8b\u5982\u67d0\u4e9b\u6570\u636e\u5e93\u670d\u52a1\u3001\u53cd\u4ee3\u7406\u670d\u52a1\u7b49\uff0c\u800c\u975e\u50cf\u666e\u901a\u7684\u7528\u6237\u7a0b\u5e8f\u4e00\u6837\u4f9d\u8d56\u4e8e\u7528\u6237\u4ea4\u4e92\u3002

    \u4e3a\u4e86\u5b9e\u73b0\u201c\u957f\u671f\u8fd0\u884c\u201d\uff0c\u6211\u4eec\u9700\u8981\u8ba9\u5b83\u4ee5 init/systemd \u4e3a parent\uff0c\u56e0\u4e3a\u4efb\u4f55\u5176\u5b83\u8fdb\u7a0b\u90fd\u6709\u53ef\u80fd\u5728\u64cd\u4f5c\u7cfb\u7edf\u8fd0\u884c\u7684\u65f6\u5019\u7ec8\u6b62\u3002

    \u90a3\u4e48\u4e00\u79cd\u529e\u6cd5\u5c31\u662f\u6211\u4eec\u9012\u5f52\u5730 fork() \u4e24\u6b21\uff0c\u7136\u540e\u7ec8\u6b62\u7b2c\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u5373\u7ec8\u6b62\u7b2c\u4e8c\u4e2a\u8fdb\u7a0b\u7684 parent\uff0c\u8fd9\u6837\u5b83\u5c31\u80fd\u6210\u4e3a\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b\uff0c\u8fdb\u800c\u88ab init/systemd \u63a5\u7ba1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u95f4\u901a\u4fe1","title":"\u8fdb\u7a0b\u95f4\u901a\u4fe1","text":"

    \u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u53d7\u5230\u5176\u5b83\u8fdb\u7a0b\u7684\u5f71\u54cd\uff0c\u6216\u4f1a\u5f71\u54cd\u5176\u5b83\u8fdb\u7a0b\uff0c\u90a3\u4e48\u6211\u4eec\u79f0\u4e4b\u4e3a\u534f\u4f5c\u8fdb\u7a0b(cooperation process)\uff0c\u800c\u8fdb\u7a0b\u95f4\u901a\u4fe1(Inter-Process Communication, IPC)\u652f\u6301\u4e86\u8fdb\u7a0b\u534f\u4f5c\uff0c\u4ee5\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u7684\u6570\u636e\u4ea4\u6362\u3002

    Communications models. (a) Shared memory. (b) Message passing.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u8c03\u5ea6","title":"\u8fdb\u7a0b\u8c03\u5ea6","text":"

    \u591a\u9053\u6280\u672f\u5f15\u5165\u540e\uff0c\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\uff0c\u8fdb\u7a0b\u7684\u6570\u91cf\u6211\u4eec\u79f0\u4e4b\u4e3a\u591a\u9053\u7684\u5ea6(degree of multiprogramming)\u3002\u4e00\u6bb5\u65f6\u95f4\u5185\u82e5\u5e72\u8fdb\u7a0b\u5e76\u53d1\u6267\u884c\uff0c\u56e0\u6b64\u8c03\u5ea6\u95ee\u9898(scheduling)\u2014\u2014CPU scheduler \u5c06\u51b3\u5b9a\u5728\u4f55\u65f6\u5c06 CPU \u8d44\u6e90\u5206\u914d\u7ed9\u54ea\u4e00\u4e2a\u5c31\u7eea\u8fdb\u7a0b\uff0c\u4f7f\u4e4b\u8fdb\u5165\u8fd0\u884c\u6001\u2014\u2014\u8fd9\u4e2a\u95ee\u9898\u5c31\u5f88\u91cd\u8981\u4e86\u3002\u603b\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u9ad8\u6548\u3001\u516c\u5e73\u7684\u7684\u8c03\u5ea6\uff0c\u4ee5\u6b64\u4fdd\u8bc1 CPU \u5229\u7528\u7387\u8db3\u591f\u9ad8\uff0c\u540c\u65f6\u53c8\u4fdd\u8bc1\u8ba1\u7b97\u673a\u529f\u80fd\u6b63\u5e38\u8fd0\u4f5c\u3002

    Diagram of process state.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u65f6\u673a","title":"\u8c03\u5ea6\u7684\u65f6\u673a","text":"

    \u6211\u4eec\u518d\u6b21\u5ba1\u89c6\u8fdb\u7a0b\u72b6\u6001\u7684 FSM\uff0c\u53d1\u73b0\u6240\u6709\u72b6\u6001\u90fd\u662f\u56f4\u7ed5\u7740 ready/running \u5c55\u5f00\u7684\uff0c\u800c CPU \u5177\u4f53\u8d44\u6e90\u5206\u914d\u7684\u8fc7\u7a0b\u4e5f\u6b63\u662f\u901a\u8fc7\u8fd9\u4e24\u4e2a\u72b6\u6001\u7684\u8f6c\u5316\u4f53\u73b0\u7684\u3002\u800c \u2776 \u5f53\u8fd0\u884c\u6001\u7684\u8fdb\u7a0b\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u4e3b\u52a8\u79bb\u5f00\u8fd0\u884c\u6001\u65f6\uff0c\u6216 \u2777 \u5f53\u5c31\u7eea\u6001\u7684\u67d0\u4e2a\u8fdb\u7a0b\u9700\u8981\u7acb\u523b\u5f97\u5230 CPU \u8d44\u6e90\u65f6\uff0cscheduler \u4f1a\u8fdb\u884c\u8c03\u5ea6\u3002\u4e0a\u9762\u8fd9\u53e5\u8bdd\u53cd\u5e94\u5728\u3000FSM \u4e0a\uff0c\u5c31\u662f \u2776 \u8fdb\u7a0b\u4ece\u8fd0\u884c\u6001\u8f6c\u5316\u4e3a\u5176\u5b83\u72b6\u6001\uff0c\u5373\u7bad\u5934\u4ece running \u51fa\u53d1\u5411\u5916\uff1b\u2777 \u8fdb\u7a0b\u4ece\u5176\u5b83\u72b6\u6001\u8f6c\u5316\u4e3a\u5c31\u7eea\u6001\uff0c\u5373\u7bad\u5934\u4ece\u5916\u6307\u5411 ready\uff0c\u8fd9\u91cc\u5176\u5b9e\u8fd8\u6697\u542b\u4e86\u4e00\u4e2a ready \u6307\u5411 ready \u7684\u7bad\u5934\uff0c\u5728\u4f8b\u5982 priority aging \u7684\u60c5\u51b5\u4e0b\uff0cready \u4e2d\u53ef\u80fd\u7a81\u7136\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\u8db3\u591f\u5927\u4e86\u5c31\u4f1a\u53d1\u751f\u62a2\u5360\u5f0f\u8c03\u5ea6\u3002\u4e0a\u9762\u63cf\u8ff0\u7684\u8fd9\u4e24\u79cd\u65f6\u673a\u4e0b\u4ea7\u751f\u7684\u8c03\u5ea6\uff0c\u5c31\u5206\u522b\u5b9a\u4e49\u4e3a\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6(non-preemptive scheduling)\u548c\u62a2\u5360\u5f0f\u8c03\u5ea6(preemptive scheduling)\u3002

    Diagram of process state.

    \u4e24\u8005\u672c\u8d28\u4e0a\u7684\u533a\u522b\u5c31\u662f\uff0c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u662f\u7531\u5df2\u7ecf\u62e5\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u4e3b\u52a8\u91ca\u653e CPU \u8d44\u6e90\u5f15\u8d77\u7684\uff0c\u800c\u62a2\u5360\u5f0f\u8c03\u5ea6\u5219\u662f\u4e0d\u5360\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u7d22\u53d6 CPU \u8d44\u6e90\u6210\u529f\u5f15\u8d77\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u8fc7\u7a0b","title":"\u8c03\u5ea6\u7684\u8fc7\u7a0b","text":"

    \u7531 CPU scheduler \u9009\u62e9\u54ea\u4e00\u4e2a\u5c31\u7eea\u6001\u7684\u5c06\u8981\u88ab\u6267\u884c\u540e\uff0c\u7531 dispatcher \u6765\u5b8c\u6210\u5177\u4f53\u7684\u5207\u6362\u5de5\u4f5c\u5305\u62ec\uff1a

    1. \u5728\u4e24\u4e2a\u8fdb\u7a0b\u95f4\u8fdb\u884c\u4e0a\u4e0b\u6587\u5207\u6362\uff1b
    2. \u5207\u6362\u5230\u7528\u6237\u6001\uff1b
    3. \u8df3\u8f6c\u5230\u7528\u6237\u7a0b\u5e8f\u4e2d\u5408\u9002\u7684\u4f4d\u7f6e\u4ee5\u7ee7\u7eed\u8fdb\u7a0b\u6267\u884c\uff1b

    \u800c\u4ece dispatcher \u505c\u6b62\u4e0a\u4e00\u4e2a\u8fd0\u884c\u65f6\u7684\u8fdb\u7a0b\uff0c\u5b8c\u6210\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u5e76\u542f\u52a8\u4e0b\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5ef6\u65f6\uff0c\u79f0\u4e3a dispatch latency\u3002

    \u4e0a\u4e0b\u6587\u5207\u6362

    \u5207\u6362\u8fdb\u7a0b\u7684\u65f6\u5019\u9700\u8981\u4fdd\u5b58\u201c\u73b0\u573a\u201d\uff0c\u5e76\u5728\u4e0b\u4e00\u6b21\u62ff\u51fa\u8fd9\u4e2a\u8fdb\u7a0b\u51c6\u5907\u6267\u884c\u4e4b\u524d\u6062\u590d\u201c\u73b0\u573a\u201d\uff0c\u4ee5\u6b64\u6765\u4fdd\u8bc1\u8fdb\u7a0b\u6267\u884c\u7684\u4e00\u81f4\u6027\u3002\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u73b0\u573a\u201d\u88ab\u79f0\u4e3a\u4e0a\u4e0b\u6587(context)\uff0c\u8868\u793a\u4e00\u79cd\u201c\u8bed\u5883\u201d\uff1b\u800c\u4fdd\u62a4-\u6062\u590d\u7684\u8fc7\u7a0b\uff0c\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u4e0a\u4e0b\u6587\u5207\u6362(context switch)\u3002

    \u5176\u4e2d\uff0c\u4e0a\u4e0b\u6587\u53ef\u80fd\u5305\u62ec \u2460 CPU \u5bc4\u5b58\u5668\u4e2d\u7684\u503c\uff0c\u2461 \u8fdb\u7a0b\u72b6\u6001\uff0c\u2462 \u5185\u5b58\u7684\u7ba1\u7406\u4fe1\u606f\u7b49\u3002

    \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u76f8\u5173\u5185\u5bb9\u5728 Lab2 \u91cc\u6709\u6240\u6d89\u53ca\uff0c\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u3002

    (a) Diagram showing context switch from process to process. (b) Role of dispatcher.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7b97\u6cd5","title":"\u8c03\u5ea6\u7b97\u6cd5","text":"

    \u5728\u8ba8\u8bba\u6709\u54ea\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u77e5\u9053\u600e\u6837\u7b97\u4e00\u4e2a\u597d\u7684\u8c03\u5ea6\u7b97\u6cd5\u3002\u7c7b\u4f3c\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bc4\u4ef7\uff0c\u8c03\u5ea6\u7b97\u6cd5\u7684\u8bc4\u4ef7\u6807\u51c6\u4e5f\u4e0d\u662f\u5355\u4e00\u7684\uff1b\u5bf9\u5e94\u7684\uff0c\u4e0d\u540c\u8c03\u5ea6\u7b97\u6cd5\u6709\u5404\u81ea\u7684\u4f18\u7f3a\u70b9\uff0c\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u548c\u9700\u6c42\u6709\u6240\u9009\u62e9\u3002\u901a\u5e38\u6765\u8bf4\u6709\u8fd9\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u7684\u6307\u6807(scheduling criteria)\uff1a

    \u4e0a\u9762\u4e94\u4e2a\u524d\u4e24\u4e2a\u8d8a\u5927\u8d8a\u597d\uff0c\u540e\u4e09\u4e2a\u8d8a\u5c0f\u8d8a\u597d\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u5f00\u59cb\u4ecb\u7ecd\u5404\u79cd\u8c03\u5ea6\u7b97\u6cd5\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u4e0b\u8c03\u5ea6\u7b97\u6cd5\u4e2d\u5b58\u5728\u4e00\u4e9b\u7406\u60f3\u5316\u7684\u5efa\u6a21\uff08\u4f8b\u5982\u5047\u8bbe\u6211\u4eec\u77e5\u9053\u8fdb\u7a0b\u9700\u8981\u4f7f\u7528\u591a\u4e45 CPU\uff09\uff0c\u800c\u6211\u4eec\u91cd\u70b9\u9700\u8981\u638c\u63e1\u5b83\u7684\u601d\u8def\uff0c\u505a\u5230\u80fd\u753b\u7518\u7279\u56fe\u3001\u80fd\u7b97\u65f6\u95f4\u3002\u6b64\u5916\uff0c\u8fd9\u91cc\u6211\u4eec\u4ee5\u201c\u591a\u9053\u201d\u4e3a\u8bed\u5883\uff0c\u5373\u5982\u679c\u4e0d\u662f\u7279\u522b\u8bf4\u660e\uff0c\u4e0d\u8003\u8651\u5206\u65f6\u6280\u672f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--first-come-first-serve-fcfs","title":"\u7b97\u6cd5 | First-Come, First-Serve (FCFS)","text":"

    FCFS \u662f\u6700\u57fa\u672c\u7684\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65b9\u6cd5\u5c31\u662f\u6309\u7167\u8fdb\u7a0b\u5148\u6765\u540e\u5230\u7684\u987a\u5e8f\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u901a\u8fc7\u4e00\u4e2a FIFO \u7684\u961f\u5217\u5b9e\u73b0\u3002FCFS \u6700\u5927\u7684\u4f18\u70b9\u5c31\u662f\u5b9e\u73b0\u7b80\u5355\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--shortest-job-first-sjf--shortest-remaining-time-first-srtf","title":"\u7b97\u6cd5 | Shortest-Job-First (SJF) / Shortest-Remaining-Time-First (SRTF)","text":"

    SJF \u7684\u601d\u8def\u662f\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u5c0f\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u5f88\u957f\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u8fdb\u7a0b\u8fd0\u884c\u65f6\u95f4\u6709\u591a\u4e45\u3002

    \ud83c\udf30 \u9898\u9762\u89e3\u6790

    \u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

    \u73b0\u5728\u5b83\u4eec\u6309\u7167\u987a\u5e8f\u8fdb\u5165 ready queue\uff0c\u8bf7\u5206\u522b\u8ba1\u7b97 FCFS \u4e0b\u548c SJF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

    \u9996\u5148\u770b FCFS\uff0c\u5373\u6309\u7167\u987a\u5e8f\u6267\u884c\uff0c\u753b\u51fa\u7518\u7279\u56fe\uff1a

    gantt\n    title FCFS\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P1: a, 00, 24\n    P2: b, 24, 27\n    P3: c, 27, 30

    \u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 24 + 27) / 3 = 17\\)\u3002

    \u73b0\u5728\u6309\u7167 SJF \u6765\uff0c\u987a\u5e8f\u53d8\u4e3a P2 \u548c P3 \u5148\u6267\u884c\uff1a

    gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P2: a, 00, 03\n    P3: b, 03, 06\n    P1: c, 06, 30

    \u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 3 + 6) / 3 = 3\\)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4f7f\u7528 SJF \u4ee5\u540e\u5bf9\u4e8e\u8fd9\u79cd\u524d\u9762\u653e\u4e86\u4e2a\u5927\u4efb\u52a1\u7684\u60c5\u51b5\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u5927\u5927\u51cf\u5c11\u3002

    \u8fd9\u79cd\u505a\u6cd5\u53c8\u88ab\u79f0\u4e3a Shortest-Next-CPU-Burst\uff0c\u5b83\u662f\u4e00\u79cd\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u7b97\u6cd5\uff0c\u4f46\u5047\u8bbe\u6211\u4eec\u5728\u6267\u884c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6709\u4e00\u4e2a\u65b0\u7684\u8fdb\u7a0b\u52a0\u5165\u4e86 ready queue\uff0c\u800c\u4e14\u8fd9\u4e2a\u8fdb\u7a0b\u7684\u6267\u884c\u65f6\u95f4\u6bd4\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\u7684\u5269\u4f59\u65f6\u95f4\u8fd8\u8981\u77ed\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u7ee7\u7eed\u6267\u884c\u5b8c\u5f53\u524d\u7684\u8fdb\u7a0b\u624d\u884c\u2014\u2014\u56e0\u4e3a\u5b83\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u800c\u663e\u7136\u8fd9\u4e2a\u8fc7\u7a0b\u662f\u53ef\u4ee5\u901a\u8fc7\u62a2\u5360\u5f0f\u8c03\u5ea6\u6765\u4f18\u5316\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86 Shortest-Remaining-Time-First (SRTF)\uff0c\u5176\u8868\u8ff0\u662f\uff1a\u603b\u662f\u6267\u884c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u3002\u5176\u4f18\u7f3a\u70b9\u4e0e SJF \u4e00\u81f4\u3002

    \u6211\u4eec\u53ea\u9700\u8981\u8003\u8651\u6240\u6709\u62a2\u5360\u5f0f\u8c03\u5ea6\u548c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65f6\u673a\uff0c\u5e76\u9009\u62e9\u6b64\u65f6\u7684\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u8fdb\u884c\u8c03\u5ea6\u5373\u53ef\u3002

    \u5982\u4f55\u5f97\u5230\u5269\u4f59\u65f6\u95f4

    \u6211\u4eec\u77e5\u9053\uff0c\u4e00\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u6240\u9700\u8981\u7684\u65f6\u95f4\u662f\u4e00\u4e2a\u65e0\u6cd5\u5728\u8fd0\u884c\u7ed3\u675f\u524d\u5f97\u5230\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4f7f\u7528\u8fd9\u4e2a\u4e1c\u897f\u8fdb\u884c\u8c03\u5ea6\u5c31\u663e\u5f97\u5341\u5206\u4e0d\u5408\u7406\u3002\u4f46\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u9884\u6d4b\u7684\u65b9\u6cd5\u4f30\u8ba1\u8fd0\u884c\u7684\u5269\u4f59\u65f6\u95f4\uff0c\u4f46\u662f\u65e2\u7136\u662f\u9884\u6d4b\u5c31\u4f1a\u6709\u4e0d\u51c6\u786e\uff0c\u6240\u4ee5 SJF/SRTF \u5e76\u4e0d\u80fd\u5b9e\u73b0\u7406\u8bba\u4e0a\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u4f18\u3002\u81f3\u4e8e\u5982\u4f55\u9884\u6d4b\uff0c\u4e66\u4e0a\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53eb exponential average \u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u4e0d\u5c55\u5f00\u3002

    \ud83c\udf30 \u9898\u9762\u89e3\u6790

    \u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

    \u5b83\u4eec\u5230\u8fbe ready queue \u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

    \u8bf7\u5206\u522b\u8ba1\u7b97 SJF \u4e0b\u548c SRTF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

    \u5bf9\u4e8e SJF \u6765\u8bf4\uff0c\u5728\u7b2c 0 \u65f6\u523b\uff0c\u53ea\u6709 P1 \u53ef\u7528\uff0c\u6240\u4ee5\u53ea\u80fd\u6267\u884c P1\uff1bP1 \u6267\u884c\u7ed3\u675f\u540e\u6240\u6709\u5176\u5b83\u8fdb\u7a0b\u90fd\u53ef\u7528\u4e86\uff0c\u6b64\u65f6\u6309\u7167\u6b63\u5e38\u7684 SJF \u5373\u53ef\u5f97\u5230\u7ed3\u679c\u3002

    gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 08\n\n    section P2\n    ready: b, 01, 08\n    run: e, 08, 12\n\n    section P3\n    ready: c, 02, 17\n    run: 17, 26\n\n    section P4\n    ready: d, 03, 12\n    run: f, 12, 17

    \u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 7 + 15 + 9) / 4 = 7.75\\)\u3002

    \u5bf9\u4e8e SRFT \u6765\u8bf4\uff0c\u540c\u6837\u4ece P1 \u5f00\u59cb\u6267\u884c\uff0c\u4f46\u662f\u7b2c\u4e00\u79d2 P2 \u8fdb\u5165\uff0c\u53d1\u73b0\u6b64\u65f6 P1 \u8fd8\u5269\u4e0b 7\uff0c\u800c P2 \u53ea\u9700\u8981 4\uff0c\u4e8e\u662f P2 \u9700\u8981\u62a2\u5360 P1 \u7684\u8d44\u6e90\uff1b\u4e4b\u540e\u7684\u8fc7\u7a0b\u7c7b\u4f3c

    gantt\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 01\n    ready(rest 7): e, 01, 10\n    run: g, 10, 17\n\n    section P2\n    run: b, 01, 05\n\n    section P3\n    ready(rest 9): c, 02, 17\n    run: h, 17, 26\n\n    section P4\n    ready(rest 5): d, 03, 05\n    run: f, 05, 10

    \u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\(((0+9) + 0 + 15 + 2) / 4 = 6.5\\)\u3002

    \u53ef\u4ee5\u53d1\u73b0 SRTF \u80fd\u591f\u63d0\u5347 SJF \u7684\u6548\u7387\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--round-robin-rr","title":"\u7b97\u6cd5 | Round-Robin (RR)","text":"

    RR \u8c03\u5ea6\u5c31\u662f\u4f7f\u7528\u5206\u65f6\u6280\u672f\u540e\u7684 FCFS \u8c03\u5ea6\uff0c\u56e0\u6b64\u5b83\u4e5f\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u6700\u591a\u8fde\u7eed\u6267\u884c\u4e00\u4e2a\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u5b8c\u6210\u540e\u88ab\u63d2\u5165\u5230 FIFO ready queue \u7684\u672b\u5c3e\uff0c\u5e76\u53d6\u51fa FIFO ready queue \u7684\u961f\u9996\u8fdb\u884c\u6267\u884c\u3002

    \u6211\u4eec\u4e4b\u524d\u63d0\u5230\u5206\u65f6\u7684\u65f6\u5019\u4e5f\u8bf4\u8fc7\uff0c\u5206\u65f6\u6280\u672f\u901a\u8fc7\u4f18\u5316\u54cd\u5e94\u65f6\u95f4\u89e3\u51b3\u4e86\u7528\u6237\u4ea4\u4e92\u95ee\u9898\uff0cRR \u8c03\u5ea6\u867d\u7136\u76f8\u6bd4 SJF \u6709\u4e86\u66f4\u957f\u7684\u7b49\u5f85\u65f6\u95f4\uff0c\u4f46\u662f\u6709\u4e86\u66f4\u77ed\u7684\u54cd\u5e94\u65f6\u95f4\uff0c\u800c\u5b9e\u9645\u76f4\u63a5\u5f71\u54cd\u7528\u6237\u4ea4\u4e92\u95ee\u9898\u7684\u5e94\u8be5\u662f\u54cd\u5e94\u65f6\u95f4\u3002

    \u4e00\u4e2a\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cRR \u8c03\u5ea6\u6709\u4e00\u4e2a\u201c\u8d85\u53c2\u6570\u201d\uff0c\u5373\u65f6\u95f4\u7247\u7684\u957f\u5ea6\u3002\u7406\u8bba\u4e0a\uff0c\u65f6\u95f4\u7247\u7ea6\u77ed\uff0c\u54cd\u5e94\u65f6\u95f4\u8d8a\u77ed\uff1b\u4f46\u66f4\u77ed\u7684\u65f6\u95f4\u7247\u5c06\u5e26\u6765\u66f4\u9891\u7e41\u7684\u8fdb\u7a0b\u5207\u6362\uff0c\u4ece\u800c\u5e26\u6765\u66f4\u591a\u7684 dispatch latency\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--priority-scheduling","title":"\u7b97\u6cd5 | Priority Scheduling","text":"

    \u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u601d\u8def\u662f\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u4f18\u5148\u7ea7\u9ad8\u7684\u8fdb\u7a0b\u4f18\u5148\u8fd0\u884c\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u5f88\u9ad8\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\u3002

    \u4f60\u53ef\u80fd\u53d1\u73b0\u4e86\uff0c\u5982\u679c\u628a\u4e0a\u9762\u8fd9\u53e5\u8bdd\u7684\u201c\u4f18\u5148\u7ea7\u6700\u9ad8\u201d\u6539\u6210\u201c\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d/\u201c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d\uff0c\u90a3\u5c31\u548c SJF/SRTF \u4e00\u6a21\u4e00\u6837\u4e86\uff0cSJF/SRTF \u5b9e\u9645\u4e0a\u5c31\u662f\u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u56e0\u800c\u4f18\u5148\u7ea7\u8c03\u5ea6\u5f53\u7136\u662f\u53ef\u4ee5\u5b9e\u73b0\u62a2\u5360\u5f0f\u548c\u975e\u62a2\u5360\u5f0f\u4e24\u79cd\u7684\u3002

    \u6b64\u5916\uff0c\u4f18\u5148\u7ea7\u7684\u5206\u914d\u53ef\u4ee5\u6839\u636e\u4f7f\u7528\u9700\u6c42\u8fdb\u884c\u8bbe\u8ba1\uff0c\u5b83\u53ef\u80fd\u662f\u4e00\u4e9b\u6d4b\u91cf\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u5177\u6709\u4e00\u4e9b\u88ab\u8d4b\u4e88\u7684\u610f\u4e49\uff0c\u751a\u81f3\u53ef\u4ee5\u662f\u4e00\u4e9b\u590d\u5408\u7684\u503c\uff1b\u4f18\u5148\u7ea7\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u662f\u9759\u6001\u7684\uff0c\u5148\u524d\u6211\u4eec\u63d0\u5230\u8fc7\u7684\u9965\u997f\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7\u52a8\u6001\u7684\u4f18\u5148\u7ea7\u6765\u89e3\u51b3\uff1a\u4f18\u5148\u7ea7\u968f\u7740\u7b49\u5f85\u65f6\u95f4\u589e\u52a0\u4e0d\u65ad\u589e\u957f\uff0c\u7b49\u5f85\u8fc7\u4e45\u7684\u4efb\u52a1\u5c31\u4f1a\u88ab\u8d4b\u4e88\u8f83\u9ad8\u7684\u4f18\u5148\u7ea7\uff0c\u4ee5\u6b64\u907f\u514d\u9965\u997f\u7684\u53d1\u751f\uff0c\u8fd9\u79cd\u7b56\u7565\u53eb priority aging\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Queue Scheduling","text":"

    \u65e2\u7136\u8c03\u5ea6\u7b97\u6cd5\u591a\u79cd\u591a\u6837\uff0c\u4ed6\u4eec\u9002\u914d\u4e0d\u540c\u7684\u9700\u6c42\uff0c\u90a3\u80fd\u5426\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u4f7f\u7528\u7279\u5b9a\u7b97\u6cd5\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 ready queue \u5206\u6210\u591a\u4e2a\u961f\u5217\uff0c\u6bcf\u4e2a\u961f\u5217\u4f7f\u7528\u4e0d\u540c\u7684\u8c03\u5ea6\u7b97\u6cd5\uff0c\u7136\u540e\u518d\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u8fd9\u79cd\u65b9\u6cd5\u88ab\u79f0\u4e3a\u591a\u7ea7\u961f\u5217\u8c03\u5ea6(multilevel queue scheduling)\u3002

    \ud83c\udf30

    \u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u6309\u7167\u4f18\u5148\u7ea7\u5148\u540e\uff0c\u53ef\u80fd\u6709\u8fd9\u4e48\u4e9b\u961f\u5217\uff1a

    1. Real-time processes
    2. System processes
    3. Interactive processes
    4. Batch processes

    \u5b83\u4eec\u7684\u4f18\u5148\u7ea7\u968f\u7740 1 -> 4 \u9012\u51cf\uff0c\u800c\u5f53\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u4e2d\u5b58\u5728\u4efb\u52a1\u65f6\uff0c\u4f18\u5148\u7ea7\u4f4e\u7684\u961f\u5217\u4fbf\u4e0d\u4f1a\u53c2\u4e0e\u8c03\u5ea6\u3002\u4e0d\u4ec5\u5982\u6b64\uff0c\u9ad8\u4f18\u5148\u7ea7\u7684\u961f\u5217\u4e2d\u51fa\u73b0\u65b0\u7684\u4efb\u52a1\u65f6\uff0c\u4e5f\u4f1a\u62a2\u5360\u6b63\u5728\u8fd0\u884c\u7684\u4f4e\u4f18\u5148\u7ea7\u961f\u5217\u7684\u4efb\u52a1\u3002

    \ud83c\udf30

    \u53c8\u6bd4\u5982\uff0c\u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u53ef\u80fd\u5206\u524d\u53f0(foreground)\u7a0b\u5e8f\u961f\u5217\u548c\u540e\u53f0(background)\u7a0b\u5e8f\u961f\u5217\uff0c\u800c\u6211\u4eec\u4f7f\u7528\u65f6\u95f4\u7247\u6765\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u4f46\u524d\u53f0\u5360\u7528 80% \u7684\u65f6\u95f4\uff0c\u800c\u540e\u53f0\u5360\u7528 20% \u7684\u65f6\u95f4\u3002

    \u800c\u5728\u961f\u5217\u5185\u90e8\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u4f7f\u7528\u4e0d\u540c\u7684\u961f\u5217\u5185\u8c03\u5ea6\u7b97\u6cd5\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u7531\u4e8e\u524d\u53f0\u7a0b\u5e8f\u5f80\u5f80\u8981\u6c42\u66f4\u597d\u7684\u54cd\u5e94\u65f6\u95f4\u8868\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 RR \u8c03\u5ea6\uff1b\u800c\u5728\u540e\u53f0\u4f7f\u7528 FCFS \u8c03\u5ea6\u3002

    Windows XP Scheduling

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-feedback-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Feedback Queue Scheduling","text":"

    \u66f4\u8fdb\u4e00\u6b65\uff0cMultilevel Feedback Queue Scheduling \u5728 Multilevel Queue Scheduling \u7684\u57fa\u7840\u4e0a\uff0c\u5141\u8bb8\u8fdb\u7a0b\u5728\u961f\u5217\u95f4\u8f6c\u79fb\uff0c\u4ee5\u6b64\u5b9e\u73b0\u66f4\u7075\u6d3b\u66f4\u79d1\u5b66\u7684\u8c03\u5ea6\u3002\u4f8b\u5982\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5982\u679c\u4f7f\u7528\u4e86\u8fc7\u957f\u7684 CPU \u65f6\u95f4\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u4f4e\u7684\u961f\u5217\uff1b\u76f8\u53cd\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u7b49\u5f85\u4e86\u592a\u4e45\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u3002

    \u5f53\u7136\uff0c\u76f8\u5bf9\u5e94\u7684\uff0c\u7b97\u6cd5\u590d\u6742\u5ea6\u4e5f\u4f1a\u63d0\u9ad8\u4e0d\u5c11\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7ebf\u7a0b","title":"\u7ebf\u7a0b","text":"

    \u7ebf\u7a0b\u662f\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u8fdb\u7a0b\uff0c\u5b83\u5728\u8fdb\u7a0b\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u5212\u5206\uff0c\u662f\u8fdb\u7a0b\u5185\u7684\u4e00\u4e2a\u53ef\u8c03\u5ea6\u7684\u6267\u884c\u5355\u5143\uff0c\u4ee5\u51cf\u5c0f\u8fdb\u7a0b folk \u548c\u5207\u6362\u7684\u5f00\u9500\u4e3a\u76ee\u7684\u3002

    \u540c\u4e00\u8fdb\u7a0b\u7684\u82e5\u5e72\u7ebf\u7a0b\u5171\u4eab\u4ee3\u7801\u3001\u6570\u636e\u7b49\u201c\u76f8\u5bf9\u9759\u6001\u201d\u7684\u8d44\u6e90\uff0c\u800c\u5404\u81ea\u7ef4\u62a4\u5bc4\u5b58\u5668\u3001\u6808\u3001PC \u7b49\u201c\u76f8\u5bf9\u52a8\u6001\u201d\u7684\u8d44\u6e90\uff1b\u6216\u8005\u8bf4\u7ebf\u7a0b\u53ea\u62e5\u6709\u4e00\u4e9b\u8fd0\u884c\u4e2d\u5fc5\u4e0d\u53ef\u7701\u7684\u8d44\u6e90\uff0c\u800c\u6240\u6709\u5176\u5b83\u8d44\u6e90\u90fd\u5c5e\u4e8e\u8fdb\u7a0b\uff0c\u7ebf\u7a0b\u4e0e\u8fdb\u7a0b\u4e2d\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8fd9\u4e9b\u8d44\u6e90\uff0c\u4ee5\u6b64\u6765\u51cf\u5c11\u8fdb\u7a0b\u521b\u5efa\u8fc7\u7a0b\u4e2d\u590d\u5236\u4ee3\u7801\u6bb5\u7b49\u8d44\u6e90\u65f6\u5e26\u6765\u7684\u4e0d\u5c0f\u5f00\u9500\u3002

    \u7ebf\u7a0b\u5929\u751f\u548c\u540c\u4e00\u8fdb\u7a0b\u5185\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8d44\u6e90\uff0c\u56e0\u6b64\u540c\u8fdb\u7a0b\u5185\u7ebf\u7a0b\u5929\u751f\u5c31\u6709\u7ebf\u7a0b\u95f4\u901a\u4fe1\u7684\u80fd\u529b\u3002\u540c\u65f6\uff0c\u7531\u4e8e\u5c06\u8fdb\u7a0b\u8fdb\u884c\u4e86\u518d\u5212\u5206\uff0c\u4e00\u65b9\u9762\u5728\u786c\u4ef6\u652f\u6301\u7684\u60c5\u51b5\u4e0b\u80fd\u66f4\u597d\u5730\u9002\u914d\u5e76\u884c\uff0c\u53e6\u4e00\u65b9\u9762\u4e5f\u80fd\uff08\u4ee3\u4ef7\u66f4\u5c0f\u5730\uff09\u8ba9\u4efb\u52a1\u7684\u7c92\u5ea6\u53d8\u5c0f\uff0c\u6b64\u65f6\u53ef\u4ee5\u5c06\u6574\u4e2a\u8fdb\u7a0b\u7684\u963b\u585e\u8f6c\u79fb\u5230\u5355\u4e2a\u7ebf\u7a0b\u7684\u963b\u585e\u4e0a\uff0c\u8fdb\u4e00\u6b65\u51cf\u5c11\u54cd\u5e94\u65f6\u95f4\u3002

    \u5f53\u7136\uff0c\u7531\u4e8e\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u90e8\u5206\u6574\u4f53\u7684\u5173\u7cfb\uff0c\u5373\u5b58\u5728\u4e00\u4e2a\u201c\u5c06\u82e5\u5e72\u9e21\u86cb\u653e\u5728\u540c\u4e00\u4e2a\u7bee\u5b50\u91cc\u201d\u7684\u95ee\u9898\uff0c\u867d\u7136\u5c06\u82e5\u5e72\u4efb\u52a1\u90fd\u653e\u5230\u4e00\u4e2a\u8fdb\u7a0b\u7684\u591a\u7ebf\u7a0b\u53ef\u4ee5\u63d0\u9ad8\u6548\u7387\uff0c\u4f46\u662f\u4e00\u65e6\u201c\u7bee\u5b50\u201d\u574f\u4e86\uff0c\u90a3\u6240\u6709\u201c\u9e21\u86cb\u201d\u90fd\u65e0\u6cd5\u5e78\u514d\uff1b\u5176\u6b21\uff0c\u867d\u7136\u5929\u7136\u7684\u5171\u4eab\u5c5e\u6027\u8ba9\u7ebf\u7a0b\u80fd\u66f4\u65b9\u4fbf\u5730\u8fdb\u884c\u7ebf\u7a0b\u95f4\u901a\u4fe1\uff0c\u4f46\u4e5f\u5e26\u6765\u4e86\u5185\u5b58\u4fdd\u62a4\u7684\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u591a\u7ebf\u7a0b\u6a21\u578b","title":"\u591a\u7ebf\u7a0b\u6a21\u578b","text":"

    \u6309\u7167\u7ebf\u7a0b\u5212\u5206\u7684\u5b9e\u73b0\u4f4d\u7f6e\uff0c\u591a\u7ebf\u7a0b\u6a21\u578b\u5206\u4e3a\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b(user threads)\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b(kernel threads)\u3002

    \u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u5728\u7528\u6237\u7a7a\u95f4\u5b9e\u73b0\u591a\u7ebf\u7a0b\uff0c\u5373\u4f7f\u7528\u7ebf\u7a0b\u5e93(thread library)\u5229\u7528\u5355\u4e2a\u8fdb\u7a0b\u7684\u8d44\u6e90\uff0c\u5728\u7528\u6237\u7a7a\u95f4\u7ef4\u62a4\u591a\u4e2a\u7ebf\u7a0b\uff1b\u800c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5219\u662f\u7531\u5185\u6838\u652f\u6301\u591a\u7ebf\u7a0b\u64cd\u4f5c\u3002\u4e24\u8005\u5404\u6709\u4f18\u7f3a\u70b9\uff1a

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5e76\u4e0d\u51b2\u7a81\uff0c\u56e0\u800c\u6392\u5217\u7ec4\u5408\u540e\u5f97\u5230\u591a\u7ebf\u7a0b\u4e3b\u8981\u6709\u5982\u4e0b\u4e09\u79cd\u6a21\u578b\uff1a

    (a) Many-to-many model. (b) One-to-one model. (c) Many-to-one model.

    Linux \u7ebf\u7a0b

    1. Where memory will be allocated to \"Uninitialized Static variable\" upon initialization? \u21a9

    2. What process is the parent of the init process in Linux? \u21a9

    3. Linux CreateProcess? \u21a9

    4. Differences between fork and exec? \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/","title":"U2 Part 1: \u540c\u6b65\u5de5\u5177 | Synchronization Tools","text":"

    \u7ea6 8083 \u4e2a\u5b57 216 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 43 \u5206\u949f

    \u5f15\u5165

    \u9996\u5148\u6211\u4eec\u7b80\u5355\u63cf\u8ff0\u4ec0\u4e48\u662f\u540c\u6b65\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u62b1\u7740\u5bf9\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u7684\u7591\u95ee\u53bb\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u3002

    \u4e0d\u5fc5\u5c1d\u8bd5\u7acb\u523b\u7406\u89e3\u8fd9\u6bb5\u8bdd\uff0c\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u591f\u5728\u770b\u7684\u8fc7\u7a0b\u4e2d\u4ee5\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u4e3a\u4e3b\u7ebf\uff0c\u731c\u6d4b\u63a5\u4e0b\u6765\u5c06\u8981\u5c55\u5f00\u7684\u5185\u5bb9\uff0c\u53bb\u53d1\u73b0\u95ee\u9898\u3001\u601d\u8003\u89e3\u51b3\u529e\u6cd5\u3002

    \u5728\u652f\u6301\u5e76\u53d1\u751a\u81f3\u5e76\u884c\u7684\u7cfb\u7edf\u4e2d\uff0c\u867d\u7136\u8fdb\u7a0b\u4e4b\u95f4\u76f8\u5bf9\u9694\u79bb\uff0c\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\u4e92\u4e0d\u76f4\u63a5\u5e72\u6270\uff0c\u81ea\u987e\u81ea\u8dd1\u2014\u2014\u5373\u662f\u5f02\u6b65\u7684\uff1b\u4f46\u7531\u4e8e\u5404\u4e9b\u539f\u56e0\uff08\u4f8b\u5982\u90fd\u9700\u8981\u5bf9\u4e00\u5171\u4eab\u8d44\u6e90\u7684\u4fee\u6539\uff09\uff0c\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u9700\u8981\u4e92\u76f8\u5236\u7ea6\uff0c\u9075\u5faa\u7279\u5b9a\u7684\u5148\u540e\u987a\u5e8f\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9700\u8981\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff0c\u8ba9\u534f\u4f5c\u8fdb\u7a0b\u80fd\u591f\u76f4\u63a5\u6216\u95f4\u63a5\u4e86\u89e3\u5230\u5176\u5b83\u76f8\u5173\u8fdb\u7a0b\u7684\u72b6\u6001\uff0c\u4ee5\u5b9e\u73b0\u5bf9\u5f53\u524d\u8fdb\u7a0b\u6267\u884c\u7684\u63a7\u5236\uff0c\u6700\u7ec8\u5728\u5b8f\u89c2\u4e0a\u5b9e\u73b0\u540c\u6b65\u63a7\u5236\u3002

    \u800c\u4e0a\u9762\u63d0\u5230\u7684\u201c\u5404\u79cd\u539f\u56e0\u201d\u548c\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6211\u4eec\u7a0d\u540e\u5c06\u8ba8\u8bba\u7684\u4e1c\u897f\uff0c\u5176\u4e2d\uff0c\u8fd9\u91cc\u7684\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6307\u6211\u4eec\u7684\u5404\u79cd\u540c\u6b65\u5de5\u5177\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u540c\u6b65\u5e76\u4e0d\u662f\u67d0\u79cd\u4e2d\u592e\u8c03\u63a7\u673a\u5236\uff0c\u800c\u66f4\u50cf\u662f\u4e00\u79cd\u201c\u534f\u8bae\u201d\uff0c\u5f53\u5404\u4e2a\u8fdb\u7a0b\u53d1\u73b0\u6709\u522b\u7684\u8fdb\u7a0b\u4e0e\u81ea\u5df1\u4ea7\u751f\u7ade\u4e89\u65f6\uff0c\u5e94\u5f53\u6709\u67d0\u79cd\u624b\u6bb5\u5141\u8bb8\u5b83\u4eec\u8fbe\u6210\u534f\u5546\uff0c\u4ee5\u51b3\u5b9a\u8c01\u5148\u8c01\u540e\u3002

    \u6211\u4eec\u6309\u7167\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u7531\u6d45\u5165\u6df1\u5730\u8ba8\u8bba\u8fd9\u4e9b\u4e1c\u897f\u3002

    \u8bed\u5883\u95ee\u9898

    \u4e00\u4e2a\u6bd4\u8f83\u5c34\u5c2c\u7684\u95ee\u9898\u662f\uff0c\u4e66\u672c\u4e0a\u4ee5\u534f\u4f5c\u8fdb\u7a0b\u7684\u8bed\u5883\u4e3a\u5f00\u7bc7\uff0c\u4f46\u63a5\u4e0b\u6765\u8bb2\u7684\u6709\u4e9b\u5185\u5bb9\u662f\u4ee5\u7ebf\u7a0b\u540c\u6b65\u4e3a\u8bed\u5883\uff08\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\u6211\u5df2\u7ecf\u653e\u5f03\u53bb\u68b3\u7406\u548c\u7ea0\u6b63\u4e66\u4e2d\u7684\u63aa\u8f9e\u4e86\uff0c\u7d2f\u4e86\uff09\uff0c\u5982\u679c\u5728\u7528\u8bcd\u4e0a\u90fd\u533a\u5206\u7ebf\u7a0b\u548c\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4f1a\u53d8\u5f97\u5f88\u7e41\u6742\uff0c\u6240\u4ee5\u6211\u63a5\u4e0b\u6765\u4e00\u5f8b\u7528\u8fdb\u7a0b\u8868\u793a\uff0c\u4f46\u8bfb\u8005\u5fc3\u4e2d\u5e94\u5f53\u5bf9\u8fd9\u4e2a\u8bed\u5883\u66f4\u9002\u4e8e\u7ebf\u7a0b\u8fd8\u662f\u8fdb\u7a0b\u6709\u6240\u611f\u53d7\u3002

    \u5173\u4e8e\u8fd9\u4e9b\u65b9\u6cd5\u66f4\u9002\u5408\u5728 process \u8fd8\u662f thread \u4e0a\u88ab\u5e94\u7528\uff0c\u53ef\u4ee5\u770b\u8fd9\u4e2a\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7ade\u6001\u6761\u4ef6","title":"\u7ade\u6001\u6761\u4ef6","text":"

    Links

    \u6211\u4eec\u9700\u8981\u610f\u8bc6\u5230\uff0c\u6211\u4eec\u65e0\u6cd5\u4e00\u6b65\u5230\u4f4d\u5730\u3001in-place \u5730\u53bb\u4fee\u6539\u4e00\u4e2a\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6362\u8a00\u4e4b\uff0c\u8981\u60f3\u4fee\u6539 mem[x]\uff0c\u6211\u4eec\u9700\u8981\u4e09\u4e2a\u6b65\u9aa4\uff1a

    1. reg <- mem[x]\uff1b
    2. reg <- update(reg)\uff1b
    3. mem[x] <- reg\uff1b

    \u800c\u5982\u679c\u73b0\u5728\u4e0d\u6b62\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x]\uff0c\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u5b83\u4eec\u90fd\u60f3\u8981\u66f4\u65b0 mem[x]\uff0c\u53c8\u597d\u5de7\u4e0d\u5de7\u7684\u5b83\u4eec\u51e0\u4e4e\u540c\u65f6\u53d1\u751f\u8bfb\u53d6\u4e86 mem[x]\uff0c\u90a3\u4e48\u5c31\u4f1a\u51fa\u73b0\u95ee\u9898\uff1a\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8bfb\u53d6 mem[x]\uff0c\u7136\u540e\u5404\u81ea\u8ba1\u7b97\u66f4\u65b0\u540e\u7684\u503c\uff0c\u7136\u540e\u5404\u81ea\u5199\u56de mem[x]\uff1b\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6700\u7ec8\u7684 mem[x] \u4f1a\u6bd4\u539f\u6765\u5927 3\uff1b\u4f46\u73b0\u5728\u7684 mem[x] \u53ea\u6bd4\u539f\u6765\u5927 2\uff0c\u5176\u4e2d process A \u5bf9\u5b83\u7684\u4fee\u6539\u5728\u7b2c 7 \u884c\u88ab\u8986\u76d6\u4e86\u3002

    \u7a76\u5176\u6839\u672c\uff0c\u7531\u4e8e\u6211\u4eec\u5904\u5728\u5e76\u53d1\u8bed\u5883\u4e0b\uff0c\u6240\u4ee5\u4f1a\u51fa\u73b0\u82e5\u5e72\u7528\u6237\u540c\u65f6\u6301\u6709\u4e00\u4efd\u6570\u636e\u8d44\u6e90\u7684\u60c5\u51b5\uff08\u4e3a\u4e86\u53d1\u6325\u5e76\u53d1\u7684\u4f18\u52bf\uff0c\u6211\u4eec\u4e5f\u5e94\u5f53\u5c3d\u53ef\u80fd\u7684\u6ee1\u8db3\u8fd9\u79cd\u9700\u6c42\uff09\uff0c\u903b\u8f91\u4e0a\u6570\u636e\u4fee\u6539\u8fc7\u7a0b\u5e94\u5f53\u662f\u7b26\u53f7\u7684\u3001\u77ac\u95f4\u7684\u3001\u7acb\u5373\u751f\u6548\u7684\uff1b\u4f46\u5b9e\u9645\u4e0a\u6211\u4eec\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\u3002\u5728\u8fd9\u79cd\uff08\u540e\u8005\uff09\u8bed\u5883\u4e0b\uff0c\u5982\u679c\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8be5\u64cd\u4f5c\u5b9e\u9645\u4e0a\u662f\u4f7f\u7528\u8fc7\u65f6\u6570\u636e\u8fdb\u884c\u8ba1\u7b97\u3002

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u516d\u884c\u7684 t0 \u4ecd\u7136\u5728\u7528\u88ab process A \u66f4\u65b0\u4e4b\u524d\u7684 mem[x] \u505a\u8ba1\u7b97\uff0c\u56e0\u800c\u53ef\u4ee5\u8ba4\u4e3a\u6b64\u65f6 process B \u4e2d t0 \u53c2\u4e0e\u8fd0\u7b97\u7684\u3001\u6697\u542b\u7684 mem[x] \u7684\u6570\u636e\u5df2\u7ecf\u8fc7\u65f6\u3002

    race condition

    \u7c7b\u4f3c\u8fd9\u79cd\u7684\uff0c\u7531\u4e24\u4e2a\u4fe1\u53f7\u4ea7\u751f\u7ade\u4e89\uff0c\u5176\u7ade\u4e89\u60c5\u51b5\u5f71\u54cd\u6700\u7ec8\u7ed3\u679c\u7684\u60c5\u51b5\uff0c\u88ab\u79f0\u4e3a\u7ade\u6001\u6761\u4ef6(race condition)\u3002\u5728\u4e0a\u9762\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u8c01\u540e\u6267\u884c\uff0c\u6700\u7ec8\u7ed3\u679c\u5c31\u662f\u8c01\u7684\u8f93\u51fa\uff0c\u800c\u53e6\u4e00\u4e2a\u7528\u6237\u7684\u8f93\u51fa\u5219\u4f1a\u88ab\u8986\u76d6\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u91cd\u70b9\u5e76\u4e0d\u662f\u201c\u5982\u4f55\u63a7\u5236\u7ade\u4e89\u7ed3\u679c\u201d\uff0c\u56e0\u4e3a\u65e0\u8bba\u7ade\u4e89\u7ed3\u679c\u5982\u4f55\uff08\u751a\u81f3\u8c01\u8d62\u4e86\u7ed3\u679c\u53ef\u80fd\u90fd\u4e00\u6837\uff09\uff0c\u53ea\u8981\u8fd9\u79cd\u201c\u7ade\u4e89\u201d\u51fa\u73b0\uff0c\u90a3\u4e48\u6700\u7ec8\u7ed3\u679c\u5c31\u6709\u53ef\u80fd\u4e0d\u7b26\u5408\u9884\u671f\u7684\u3002 \u771f\u6b63\u7684\u91cd\u70b9\u5e94\u8be5\u662f\u5982\u4f55\u907f\u514d\u8fd9\u79cd\u7ade\u4e89\u7684\u51fa\u73b0\u3002\u5c31\u6bd4\u5982\u4e0a\u9762\u7684\u4f8b\u5b50\uff0c\u65e0\u8bba\u6700\u7ec8 mem[x] \u662f 3 \u8fd8\u662f 2 \u90fd\u4e0d\u5bf9\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u5e94\u8be5\u662f 4\u2014\u2014\u65e0\u8bba\u662f\u5148\u8fdb\u884c +1 \u8fd8\u662f\u5148\u8fdb\u884c +2\u3002

    \u6ce8\u610f

    \u867d\u7136\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\u6211\u4eec\u6a21\u62df\u7684\u4e24\u4e2a\u7a0b\u5e8f\u662f\u6309\u7167\u76f8\u540c\u901f\u5ea6\uff0c\u4e00\u884c\u4e00\u4e2a\u6307\u4ee4\u6267\u884c\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u5bf9\u6240\u6709\u8fdb\u7a0b\u6267\u884c\u7684\u901f\u5ea6\u4e0d\u5e94\u5f53\u6709\u6240\u5047\u8bbe\uff0c\u5373\u8fdb\u7a0b A \u4e0d\u77e5\u9053\u8fdb\u7a0b B \u7684\u901f\u5ea6\u3002

    \u4e0d\u4ec5\u5982\u6b64\uff0c\u6211\u4eec\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u8981\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u5728\u591a\u9053\u8bed\u5883\u4e0b\u8fd9\u4e2a\u95ee\u9898\u90fd\u4f1a\u51fa\u73b0\uff0c\u4f8b\u5982\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502     \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524     \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502              \u2502     \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- mem[x] \u2502\u25c4\u2500\u2500\u2500\u2500\u2524 <ctx switch> \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502     \u2502              \u2502\n\u2502 mem[x] <- t0 \u2502     \u2502              \u2502 mem[x] = 2, B's t0 is out of date\n\u2502 <ctx switch> \u251c\u2500\u2500\u2500\u2500\u25ba\u2502 t0 <- t0 + 1 \u2502\n\u2502              \u2502     \u2502 t0 <- t0 + 1 \u2502 \n\u2502              \u2502     \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u95ee\u9898\u4f9d\u65e7\u3002

    \u6839\u636e\u4e0a\u9762\u8fd9\u4e2a\u5177\u4f53\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u5982\u679c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u6709\u4e24\u79cd\u9009\u62e9\uff1a

    1. \u8fdb\u884c\u7b26\u53f7\u7684\u8fd0\u7b97\u800c\u975e\u6570\u503c\u7684\u8fd0\u7b97\uff0c\u8fd9\u6837\u8f93\u5165\u7684\u53d8\u5316\u80fd\u5728\u4efb\u610f\u65f6\u523b\u53cd\u6620\u5728\u8f93\u51fa\u4e0a\uff0c\u8fd9\u6837\u65f6\u65f6\u523b\u523b\u90fd\u662f\u201c\u6700\u65b0\u201d\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u201c\u8fc7\u65f6\u201d\uff1b
    2. \u4fdd\u8bc1\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u4fdd\u6301\u4e0d\u53d8\uff0c\u5373\u4e24\u4e2a\u53ef\u80fd\u7ade\u4e89\u7684\u64cd\u4f5c\uff0c\u5728\u65f6\u95f4\u4e0a\u4e0d\u5e94\u8be5\u6709\u4ea4\u96c6\uff1b

    \u663e\u7136\uff0c\u6211\u4eec\u5e94\u5f53\u9009\u62e9\u7b2c\u4e8c\u79cd\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#the-critical-section-problem","title":"The Critical-Section Problem","text":"

    \u4e3a\u4e86\u66f4\u597d\u5730\u5c55\u5f00\uff0c\u6211\u4eec\u5bf9\u4e0a\u9762\u7684\u8fd9\u79cd\u60c5\u51b5\u8fdb\u884c\u5efa\u6a21\uff0c\u5e76\u7ed9\u51fa\u89e3\u51b3 race condition \u95ee\u9898\u7684\u65b9\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u8303\u5f0f\uff1a

    \u6211\u4eec\u5e94\u5f53\u4fdd\u8bc1\u5728\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x] \u7684\u65f6\u5019\uff0c\u5176\u5b83\u8fdb\u7a0b\u4e0d\u5e94\u8be5\u8bfb\u53d6 mem[x]\uff08\u81f3\u5c11\u4e0d\u5e94\u4ee5\u4fee\u6539 mem[x] \u4e3a\u76ee\u7684\u6765\u8bfb\u53d6\uff09\uff0c\u76f4\u5230\u8fd9\u4e2a\u8fdb\u7a0b\u5b8c\u6210\u5bf9 mem[x] \u7684\u4fee\u6539\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0cmem[x] \u8fd9\u4e2a\u5171\u4eab\u8d44\u6e90\u5e94\u5f53\u53ea\u80fd\u88ab\u4e00\u4e2a\u7528\u6237\u6301\u6709\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u53ea\u80fd\u88ab\u81f3\u591a\u4e00\u4e2a\u7528\u6237\u5360\u6709\u7684\u8d44\u6e90\u4e3a\u4e34\u754c\u8d44\u6e90\u3002\u800c\u7a0b\u5e8f\u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u4ee3\u7801\u6bb5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e34\u754c\u533a\u6bb5(critical section, CS)Wiki\u3002

    \u90a3\u4e48\uff0c\u5bf9\u4e8e\u4e4b\u524d\u63d0\u5230\u8fc7\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u62ff\u51fa\u6765\u5bf9\u6bd4\u6a21\u62df\u7684\u90e8\u5206\u5c31\u662f critical section\u3002

    \u800c CS \u95ee\u9898\uff0c\u6307\u7684\u5c31\u662f\u5982\u4f55\u4fdd\u8bc1\u6700\u591a\u53ea\u6709\u4e00\u4e2a\u7528\u6237\u5728\u6267\u884c\u4e34\u754c\u533a\u6bb5\u7684\u4ee3\u78011\u3002

    \u56f4\u7ed5\u4e34\u754c\u533a\u6bb5\uff0c\u6211\u4eec\u5b9a\u4e49\u80fd\u591f\u89e3\u51b3 CS \u95ee\u9898\u7684\u4ee3\u7801\u5e94\u5f53\u80fd\u591f\u505a\u5982\u4e0b\u5212\u5206\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Entry Section      \u2502 <-- ask for & wait for permission to enter CS\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Exit Section       \u2502 <-- release the critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u8fdb\u7a0b\u9700\u8981\u5728 entry section \u5224\u65ad\u662f\u5426\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u5373\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u5982\u679c\u4e0d\u884c\u5219\u7b49\u5f85\uff1b\u800c\u5728\u8fdb\u5165 critical section \u540e\uff0c\u8fdb\u7a0b\u9700\u8981\u5728 exit section \u91ca\u653e\u4e34\u754c\u8d44\u6e90\uff1b\u7136\u540e\u8131\u79bb CS \u95ee\u9898\u7684\u8bed\u5883\uff0c\u8fdb\u5165 remainder section \u7ee7\u7eed\u6267\u884c\u3002

    Brainstorming

    \u6574\u4e2a\u8fc7\u7a0b\u6709\u70b9\u50cf\u8c03\u5ea6\uff0c\u7b49\u5f85\u4e34\u754c\u8d44\u6e90\u7684\u8fc7\u7a0b\u5c31\u597d\u50cf ready \u6001\u7b49\u5f85\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u7684 CPU \u8d44\u6e90\uff08CPU \u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u79cd\u4e34\u754c\u8d44\u6e90\uff0c\u53ea\u4e0d\u8fc7\u5b83\u4e0d\u662f\u7531\u8fdb\u7a0b\u4e3b\u52a8\u5904\u7406\u548c\u7d22\u53d6\uff09\u3002

    \u65e2\u7136\u5982\u6b64\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u201c\u72b6\u6001\u201d\u8fd9\u4e2a\u6982\u5ff5\u3002\u6211\u4eec\u53ea\u5173\u5fc3\u76f4\u63a5\u4e0e CS \u95ee\u9898\u6709\u5173\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5b9a\u4e49\uff1a\u5c31\u7eea\u3001\u4e34\u754c\u3001\u65e0\u5173\u4e09\u4e2a\u72b6\u6001\u3002

    1. \u5c31\u7eea\u6001\uff1a\u8fdb\u7a0b\u968f\u65f6\u51c6\u5907\u597d\u8fdb\u5165 critical section\uff0c\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff1b
    2. \u4e34\u754c\u6001\uff1a\u8fdb\u7a0b\u6b63\u5728\u6267\u884c critical section\uff0c\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u8fdb\u7a0b\u6267\u884c\u5b8c critical section\uff0c\u6267\u884c exit section \u6b63\u5728\u91ca\u653e\u6301\u6709\u7684\u4e34\u754c\u8d44\u6e90\u4e2d\uff1b
    3. \u65e0\u5173\u6001\uff1a\u4e0d\u5904\u4e8e\u5c31\u7eea\u6001\u4e5f\u4e0d\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4e0d\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u662f\u4f7f\u7528\u5b8c\u5df2\u7ecf\u91ca\u653e\uff1b

    \u6839\u636e\u6211\u4eec\u5148\u524d\u7ed9\u51fa\u7684\uff0c\u89e3\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u6027\u8d28\u4e2d\u7684 mutual exclusion\uff0c\u4e0d\u80fd\u540c\u65f6\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4f46\u662f\u53ef\u4ee5\u6709\u82e5\u5e72\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\uff0c\u800c\u65e0\u5173\u6001\u5219\u8868\u793a\u4e0d\u4f1a\u4ea7\u751f\u7ade\u4e89\uff0c\u548c\u8c03\u5ea6\u8fc7\u7a0b\u5341\u5206\u76f8\u4f3c\u3002

    \u8fd9\u4e9b\u5b9a\u4e49\u5c06\u4f1a\u5728\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u7d22\u4e2d\u8d77\u4f5c\u7528\u3002

    \u540c\u65f6\uff0c\u6211\u4eec\u8981\u6c42\u89e3\u51b3\u65b9\u6848\u9700\u8981\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

    requirements for solution to CS problem

    1. \u4e34\u754c\u4e92\u65a5(mutual exclusion)\uff1a\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\u4e34\u754c\u533a\u6bb5\u5e94\u5f53\u4e92\u76f8\u6392\u65a5\uff1b
      • \u5982\u679c\u8fdb\u7a0b \\(P_i\\) \u6b63\u5728\u6267\u884c\u5176 critical section\uff0c\u90a3\u4e48\u4e0d\u5e94\u5f53\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\uff08\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\uff09critical section\uff1b
    2. \u9009\u62e9\u65f6\u95f4\u6709\u9650(progress)\uff1a\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u64cd\u4f5c\u5e94\u5f53\u53ea\u6709\u5904\u4e8e entry/critical/exit section \u7684\u8fdb\u7a0b\u53c2\u4e0e\uff0c\u4e14\u8be5\u9009\u62e9\u5e94\u5f53\u5728\u6709\u9650\u65f6\u95f4\u5185\u88ab\u6267\u884c\uff1b
    3. \u7b49\u5f85\u65f6\u95f4\u6709\u9650(bounded waiting)\uff1a\u8fdb\u7a0b\u7b49\u5f85\u88ab\u5141\u8bb8\u8fdb\u5165 critical section \u7684\u65f6\u95f4\u5e94\u5f53\u662f\u6709\u9650\u7684\uff1b

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u8ba8\u8bba CS \u95ee\u9898\u662f\u5982\u4f55\u89e3\u51b3\u7684\u4e3a\u4e3b\u7ebf\uff0c\u63a2\u7d22\u5982\u4f55\u89e3\u51b3 race condition\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#for-kernel-code","title":"For Kernel Code","text":"

    \u7531\u4e8e kernel code \u4e0b\u7684 CS \u95ee\u9898\u89e3\u51b3\u8f83\u4e3a\u6e05\u6670\u76f4\u63a5\uff0c\u6240\u4ee5\u5148\u884c\u4ecb\u7ecd\u3002

    For Kernel Code

    \u5728 kernel code \u4e2d\u4e5f\u666e\u904d\u5b58\u5728\u7740 race condition \u7684\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

    Race condition when assigning a pid.

    \u4e0a\u4f8b\u4e2d \\(P_0\\) \u548c \\(P_1\\) \u540c\u65f6\u8bbf\u95ee\u4e86 next_available_pid \u8fd9\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u4ea7\u751f\u7ade\u4e89\uff0c\u5bfc\u81f4\u6700\u540e\u6709\u4e24\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e86\u540c\u4e00\u4e2a pid\u3002

    \u6b32\u89e3\u51b3 kernel code \u4e2d\u7684 CS \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u5728 kernel code \u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u884c\u4e3a\uff0c\u4ece\u800c\u89e3\u51b3 CS \u95ee\u9898\u3002

    \u5bf9\u4e8e\u5355\u5904\u7406\u5668\u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728 kernel code \u4e2d\u7981\u6b62\u4e2d\u65ad\uff0c\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff1b\u800c\u5bf9\u4e8e\u591a\u5904\u7406\u5668\u6765\u8bf4\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c31\u4e0d\u90a3\u4e48\u5408\u9002\u4e86\u2014\u2014\u6211\u4eec\u9700\u8981\u540c\u65f6\u544a\u8bc9\u591a\u4e2a\u5904\u7406\u5668\u4e2d\u65ad\u88ab\u7981\u6b62\uff0c\u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u7684\u65f6\u5ef6\u4ecd\u7136\u4f1a\u4ea7\u751f\u95ee\u9898\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u4e5f\u4f1a\u5e26\u6765\u989d\u5916\u7684\u5f00\u9500\u3002\u5728\u591a\u5904\u7406\u5668\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u62a2\u5360\u5f0f\u5185\u6838(preemptive kernels)\u548c\u975e\u62a2\u5360\u5f0f\u5185\u6838(non-preemptive kernels)\uff0c\u5173\u952e\u662f\u540e\u8005\u5b9e\u73b0\u4e86\u4e00\u6bb5\u65f6\u95f4\u5185\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode2\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u63a2\u7d22\u66f4\u4e3a\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\u3002

    \u8bf4\u660e

    \u4e3a\u4e86\u7b80\u5316\u8bf4\u660e\u4ee3\u7801\uff0c\u6211\u4eec\u7528\u5168\u5927\u5199\u6765\u8868\u793a\u4e00\u4e2a\u5171\u4eab\u8d44\u6e90\uff0c\u4f8b\u5982 READY\uff0c\u5b83\u80fd\u591f\u88ab\u82e5\u5e72\u8fdb\u7a0b\u8bbf\u95ee\u3002\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5e94\u5f53\u7531\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\uff0c\u5e76\u4e0d\u662f\u6211\u4eec\u5173\u6ce8\u7684\u91cd\u70b9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#petersons-algorithm","title":"Peterson\u2019s Algorithm","text":"

    Links

    Peterson's algorithm \u662f\u5bf9\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7684\u540c\u6b65\u95ee\u9898\u7684\u4e00\u4e2a\u89e3\u6cd5\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u5c40\u9650\u6027\uff0c\u4f46\u5176\u8bbe\u8ba1\u76f8\u5bf9\u7b80\u5355\uff0c\u6240\u4ee5\u5148\u884c\u7ed9\u51fa\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe \\(P_0\\) \u548c \\(P_1\\) \u662f\u53c2\u4e0e\u540c\u6b65\u95ee\u9898\u8ba8\u8bba\u7684\u4e24\u4e2a\u8fdb\u7a0b\u3002

    \u57fa\u4e8e Peterson's algorithm \u5bf9\u591a\u8fdb\u7a0b\u60c5\u51b5\u7684\u6269\u5c55\u88ab\u79f0\u4e3a filter algorithm\uff0c\u4f46 filter algorithm \u4e0d\u6ee1\u8db3 bounded waiting time \u7684\u6761\u4ef6\uff0c\u8bfb\u8005\u6709\u5174\u8da3\u53ef\u4ee5\u81ea\u884c\u4e86\u89e3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7b97\u6cd5\u63cf\u8ff0","title":"\u7b97\u6cd5\u63cf\u8ff0","text":"

    \u4e3a\u4e86\u4fdd\u8bc1\u5904\u4e8e\u4e34\u754c\u6001\u7684\u8fdb\u7a0b\u81f3\u591a\u53ea\u6709\u4e00\u4e2a\uff0c\u6211\u4eec\u5e94\u5f53\u5728\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u786e\u8ba4\u6ca1\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\u540e\u518d\u8fdb\u5165\u3002\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4ef6\u4e8b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u5904\u5728 \\(P_0\\) \u65f6\uff0c\u6211\u4eec\u5982\u4f55\u77e5\u9053 \\(P_1\\) \u662f\u5426\u6b63\u5904\u4e8e\u4e34\u754c\u6001\u5462\uff1fPeterson\u2019s Algorithm \u901a\u8fc7\u5982\u4e0b\u65b9\u5f0f\u5b9e\u73b0\u4e86\u8fd9\u4ef6\u4e8b\uff1a

    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    \u9996\u5148\uff0c\u6211\u4eec\u8bf4\u660e entry section \u6ca1\u6709\u4e34\u754c\u8d44\u6e90\u3002READY \u662f\u4e00\u4e2a\u5171\u4eab\u7684\u6570\u7ec4\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u53ea\u4fee\u6539\u4e0e\u81ea\u5df1\u4e00\u4e00\u5bf9\u5e94\u7684 element\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a READY \u4e0d\u4f1a\u51fa\u73b0 race condition\uff0c\u56e0\u800c\u4e5f\u4e0d\u662f\u4e34\u754c\u8d44\u6e90\u3002\u800c TURN\uff0c\u6211\u4eec\u8fd9\u91cc\u53ea\u5bf9 TURN \u8fdb\u884c\u5199\u7684\u64cd\u4f5c\uff0c\u4f46\u662f P1 \u548c P2 \u8c01\u5148\u8dd1\u5230\u8fd9\u4e00\u884c\u4f1a\u51b3\u5b9a TURN \u6700\u540e\u7684\u503c\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u8fd9\u91cc\u6709 race condition\u3002

    \u4f46\u8fd9\u5c31\u662f Peterson\u2019s Algorithm \u5de7\u5999\u7684\u5730\u65b9\uff0cPeterson's \u5229\u7528 race condition \u8fd9\u4e2a\u201c\u540e\u8986\u76d6\u524d\u201d\u7684\u6027\u8d28\uff0c\u5b9e\u73b0\u4e86\u6807\u8bb0\u4e86\u8fd9\u4e24\u4e2a\u8fdb\u7a0b\u7684\u5148\u6765\u540e\u5230\u7684\u6548\u679c\u3002\u6211\u4eec\u90fd\u5411\u8fd9\u4e2a TURN \u5199\u4e00\u4e2a\u4e92\u5f02\u7684\u503c\uff08\u6bd4\u5982\u81ea\u5df1\u7684 id\uff0c\u6216\u8005\u5bf9\u65b9\u7684 id\uff09\uff0c\u7b49\u5927\u5bb6\u90fd\u5199\u597d\u540e\u6211\u4eec\u770b\u770b\u8fd9\u4e2a\u503c\u6700\u7ec8\u662f\u8c01\u5199\u7684\uff0c\u4e8e\u662f\u5c31\u77e5\u9053\u8c01\u540e\u5230\u3002

    \u5229\u7528\u8fd9\u4e2a\u539f\u7406\uff0cPeterson's \u8fd9\u91cc\u505a\u4e86\u4e00\u4e2a\u201c\u975e\u5e38\u6709\u4e2d\u56fd\u4eba\u6c14\u8d28\u201d\u7684\u4e8b\u60c5\uff1a\\(P_0\\) \u548c \\(P_1\\) \u4e0a\u516c\u4ea4\u8f66\u540e\u540c\u65f6\u770b\u4e0a\u4e86\u4e00\u4e2a\u5ea7\u4f4d\uff0c\\(P_0\\) \u8bf4\uff1a\u201c\u4f60\u5750\u5427\u3002\u201d\uff0c \\(P_1\\) \u81ea\u7136\u4e5f\u8981\u5ba2\u6c14\u4e00\u4e0b\uff0c\u8bf4\uff1a\u201c\u8fd8\u662f\u4f60\u5750\u5427\uff01\u201d\u3002\u73b0\u5728\u4e24\u8fb9\u90fd\u5ba2\u6c14\u8fc7\u4e86\uff0c\\(P_0\\) \u5c31\u53ef\u4ee5\u5fc3\u5b89\u7406\u5f97\u5730\u5750\u4e0b\u4e86\u3002\u5bf9\u4e0a\u8ff0\u8fc7\u7a0b\uff0c\u6211\u4eec\u7ed9\u51fa \\(P_0\\) \u83b7\u5f97\u6905\u5b50\u7684\u51c6\u786e\u6761\u4ef6\u6709\uff1a

    1. \\(P_0\\) \u60f3\u5750\u4e0b\uff0c\\(P_1\\) \u4e5f\u60f3\u5750\u4e0b\uff0c\u5426\u5219\u5c31\u6ca1\u6709\u51b2\u7a81\u4e86\uff1b
    2. \\(P_0\\) \u53d1\u73b0 \\(P_1\\) \u5728\u5ba2\u6c14\uff0c\u4f46 \\(P_0\\) \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e86\uff1b

    \u5bf9\u5e94\u5230\u4e0a\u9762\u7ed9\u51fa\u7684\u4ee3\u7801\u91cc\uff0c\u8fd9\u4e2a\u6761\u4ef6\u53ef\u4ee5\u7ffb\u8bd1\u4e3a\uff1a

    1. READY[0] = READY[1] = true\uff1b
    2. TURN \u2260 j\uff0c\u4f46\u6b64\u524d \\(P_i\\) \u5df2\u7ecf\u6267\u884c\u8fc7 TURN <- j\uff1b

    \u8bf7\u8bfb\u8005\u4ed4\u7ec6\u601d\u8003\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5e76\u9002\u5f53\u8fdb\u884c\u5168\u9762\u7684\u6a21\u62df\u4ee5\u7406\u89e3 Peterson's \u662f\u5982\u4f55\u5de5\u4f5c\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u6027\u8d28\u8bc1\u660e","title":"\u6027\u8d28\u8bc1\u660e","text":"

    \u73b0\u5728\u6211\u4eec\u9700\u8981\u8bc1\u660e\u8fd9\u4e2a\u7b97\u6cd5\u6ee1\u8db3\u6027\u8d28\u3002

    \u6211\u7684\u8bc1\u660e\u6bd4\u8f83\u8be6\u7ec6\u548c\u5570\u55e6\uff0c\u4f46\u6211\u8ba4\u4e3a\u5b8c\u6574\u5730\u6a21\u62df\u66f4\u52a0\u6709\u5229\u4e8e\u76f4\u89c9\u7406\u89e3\uff0c\u5982\u679c\u4f60\u60f3\u8981\u66f4\u7b80\u6d01\u7684\u8bc1\u660e\uff0c\u53ef\u4ee5\u53c2\u8003 xyx \u7684\u7b14\u8bb0\u3002

    mutual exclusion
    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    lemma

    \u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c 7 \u884c\uff0c\u90a3\u4e48\u663e\u7136\uff1a

    1. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u60f3\u8981\u8fdb\u5165 critical section\uff0c\u5373 READY[i] \u548c READY[j] \u90fd\u4e3a true\uff1b
    2. TURN \u7684\u503c\u4e0d\u518d\u4f1a\u88ab\u66f4\u6539\uff1b
    3. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u5c1a\u672a\u8fdb\u5165 critical section\uff1b

    \u7531\u4e8e TURN \u5fc5\u5b9a\u4e5f\u53ea\u80fd\u4e3a i \u6216 j\uff0c\u6240\u4ee5 i \u548c j \u5fc5\u7136\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u8fdb\u7a0b\u63a5\u4e0b\u6765\u4f1a break loop \u5e76\u8fdb\u5165 critical section\uff0c\u5728\u5b83\u7ed3\u675f\u4e4b\u524d\uff0c\u5373\u5728 READY[?] \u88ab\u6539\u53d8\u4e4b\u524d\uff0c\u8be5\u6761\u4ef6\u6301\u7eed\u6210\u7acb\u3002

    \u56e0\u6b64\u6211\u4eec\u5f97\u5230\u4e00\u4e2a\u7ed3\u8bba\uff1a\u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c\u4e03\u884c\uff0c\u90a3\u4e48\u4ece\u8be5\u65f6\u523b\u5f00\u59cb\uff0c\u5230\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u79bb\u5f00 critical section \u4e3a\u6b62\uff0c\u4e92\u65a5\u6027\u8d28\u90fd\u6210\u7acb\u3002

    \u73b0\u5728\u6211\u4eec\u8003\u8651 i \u5df2\u7ecf\u5148\u884c\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff0c\u800c j \u8fd8\u6ca1\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff1a

    Situation 1

    \u5982\u679c j \u8fd8\u6ca1\u8fdb\u5165\u7b2c 5 \u884c\uff0c\u90a3\u4e48 READY[j] \u4e3a false\uff0c\u6b64\u65f6\u6ca1\u6709\u7ade\u4e89\uff0ci \u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6001\u3002\u5e76\u4e14 j \u4e4b\u540e\u8fd0\u884c\u5230\u7b2c 7 \u884c\u65f6\uff0cTURN == <another> \u59cb\u7ec8\u6210\u7acb\u3002\u6240\u4ee5 j \u4f55\u65f6\u8fdb\u5165 critical section \u5b8c\u5168\u53d6\u51b3\u4e8e READY[j]\uff0c\u5373 j \u4f55\u65f6\u79bb\u5f00 critical section\u3002

    \u663e\u7136\uff0c\u6b64\u65f6\u6ee1\u8db3\u4e92\u65a5\u6027\u8d28\u3002

    Situation 2

    \u5982\u679c j \u5df2\u7ecf\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\uff0c\u8fd8\u6ca1\u6267\u884c\u7b2c 6 \u884c\uff0c\u90a3\u4e48\u5bf9\u4e8e i \u6765\u8bf4\uff0c(READY[j] && TURN == j) \u4e3a true\uff0c\u6b64\u65f6 i \u5c06\u7b49\u5f85 j\uff0c\u8fdb\u5165 Situation 3\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u8981\u4e48 i \u548c j \u4e0d\u7ade\u4e89\uff0c\u8981\u4e48\u4e24\u8005\u90fd\u8fd0\u884c\u5230\u7b2c 7 \u884c\u540e\u624d\u4f1a\u6709\u8fdb\u7a0b\u8fdb\u5165 critical section

    \u8fd9\u5c31\u597d\u50cf\u4e24\u8005\u5728\u7b2c 6 \u884c\u6bd4\u8c01\u5148\u4e3e\u624b\uff0c\u7136\u540e\u7b49\u4e24\u8005\u90fd\u4e3e\u8fc7\u624b\uff08\u90fd\u8dd1\u5b8c\u7b2c 6 \u884c\uff0c\u5230\u8fbe\u7b2c 7 \u884c\uff09\u540e\uff0c\u518d\u5224\u65ad\u8c01\u8fdb\u5165 critical section\uff0c\u800c\u8fdb\u5165\u7b2c 7 \u884c\u4ee5\u540e\u6240\u6709\u7684\u5224\u65ad\u6761\u4ef6\u90fd\u662f\u76f8\u5bf9\u9759\u6b62\u7684\u3001\u4e0d\u4f1a\u518d\u88ab\u4fee\u6539\u7684\uff0c\u56e0\u800c\u907f\u514d\u751a\u81f3\u5229\u7528\u4e86 race condition \u5bf9 selection \u7684\u5f71\u54cd\uff0c\u4fdd\u8bc1\u4e86\u4e92\u65a5\u7684\u6027\u8d28\u3002

    progress

    \u8fd9\u6761\u6027\u8d28\u7684\u6210\u7acb\u6bd4\u8f83\u7b26\u5408\u76f4\u89c9\uff0c\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f\u4e0d\u4f1a\u51fa\u73b0\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u5728 while () \u88ab\u963b\u585e\u4f4f\u7684\u60c5\u51b5\u3002\u4f46\u662f\u8fd9\u70b9\u975e\u5e38\u663e\u7136\uff0cTURN == i && TURN == j \u5fc5\u7136\u662f false\uff0c\u6240\u4ee5\u4e24\u4e2a\u5faa\u73af\u603b\u6709\u4e00\u4e2a\u4f1a\u88ab break\u3002

    bounded waiting time

    \u5728 Peterson's \u4e2d\uff0c\u7b49\u5f85\u65f6\u95f4\u4e3b\u8981\u6307\u8fd9\u90e8\u5206\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u5c24\u5176\u6307\u7b2c\u4e03\u884c\u7684 while \u5faa\u73af\u3002

    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u65ad\u5faa\u73af\u7684\u6761\u4ef6\u662f\uff1aREADY[j] && TURN == j\uff0c\u5982\u679c\u8be5\u5faa\u73af\u4e00\u5f00\u59cb\u5c31\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u663e\u7136\u662f\u7b26\u5408 bounded waiting time \u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u8fd9\u4e2a\u6761\u4ef6\u6700\u591a\u80fd\u6301\u7eed\u591a\u4e45\u3002

    A. READY[j] \u4e3a true

    \u8fd9\u9700\u8981 process j \u5df2\u7ecf\u8fd0\u884c\u8fc7\u7b2c 5 \u884c\uff0c\u5e76\u4e14\u8fd8\u6ca1\u8fd0\u884c\u7b2c 15 \u884c\uff0c\u5373 process j \u4e5f\u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\u3002

    \u8fd9\u4e00\u6761\u662f\u5728\u5224\u65ad\u662f\u5426\u6709\u51b2\u7a81\u5b58\u5728\uff0c\u5982\u73b0\u5728\u53ea\u6709 process i \u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\uff0c\u90a3\u65e0\u9700\u7b49\u5f85\u76f4\u63a5\u8fdb\u5165\u5373\u53ef\u3002\u901a\u8fc7\u6539\u53d8\u8fd9\u4e2a\u6761\u4ef6\u800c\u8fdb\u5165\u4e34\u754c\u6001\u6709\u4e24\u79cd\u53ef\u80fd\uff1a

    1. \u4e00\u5f00\u59cb\u51b2\u7a81\u5c31\u4e0d\u5b58\u5728\uff1b
    2. process j \u521a\u79bb\u5f00\u4e34\u754c\u6001\uff0c\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff1b

    B. TURN == j \u4e3a true

    \u6709\u4e24\u79cd\u53ef\u80fd\uff1a

    1. process j \u8fd8\u6ca1\u8fd0\u884c\u7b2c 6 \u884c\uff1b
    2. process j \u5728 process i \u4e4b\u524d\u5c31\u8fd0\u884c\u4e86\u7b2c 6 \u884c\uff1b

    \u5bf9\u4e8e\u7b2c\u4e00\u79cd\u60c5\u51b5\uff0c\u7531\u4e8e A. \u6210\u7acb\u540e\u624d\u4f1a\u5224\u65ad\u8fd9\u6761\uff0c\u6240\u4ee5 process j \u7684\u72b6\u6001\u5176\u5b9e\u662f\u521a\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\u8fd8\u6ca1\u8fd0\u884c\u5b8c\u7b2c 6 \u884c\uff0c\u663e\u7136\u8fd9\u4e2a\u65f6\u95f4\u662f\u6709\u754c\u7684\u3002

    \u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u8bf4\u660e i \u662f\u540e\u6765\u8005\uff0cj \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e00\u6b21\u4e86\uff0c\u6240\u4ee5\u5e94\u5f53\u8ba9 j \u8fd0\u884c\uff0ci \u7b49\u5f85 j \u79bb\u5f00\u4e34\u754c\u6001\u91ca\u653e\u8d44\u6e90\uff0c\u6b64\u65f6\u901a\u8fc7 A.2. \u6765\u8fdb\u5165\u4e34\u754c\u6001\u3002\u800c process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\u4e5f\u5e94\u5f53\u6709\u9650\u7684\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0cwaiting time \u7684\u6700\u5927\u503c\u57fa\u672c\u4e0a\u53d6\u81ea\uff1a

    1. process j \u6267\u884c\u7b2c 6 \u884c\u7684\u65f6\u95f4\uff1b
    2. process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\uff1b

    \u901a\u8fc7\u4e4b\u524d\u7684\u8bba\u8ff0\u6211\u4eec\u77e5\u9053\uff0c\u8fd9\u4e24\u4e2a\u90fd\u662f\u6709\u754c\u7684\uff0c\u4e8e\u662f\u8be5\u6027\u8d28\u5f97\u8bc1\u3002

    Oops!

    \u4f46\u662f\uff0cPeterson's \u5b9e\u9645\u4e0a\u65e0\u6cd5\u9002\u7528\u4e8e\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\u3002\u4e0a\u8ff0\u505a\u6cd5\u6709\u4e00\u4e2a\u5173\u952e\uff0c\u4e5f\u662f\u6211\u4eec\u5728\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u4e00\u76f4\u9ed8\u8ba4\u6210\u7acb\u7684\u4e8b\u60c5\uff1a\u8fdb\u7a0b\u603b\u662f\u5148\u6267\u884c READY[i] = true;\uff0c\u7136\u540e\u624d\u4f1a\u6267\u884c TURN = j;\uff0c\u5373\u5148\u8fdb\u5165\u5c31\u7eea\u6001\uff0c\u518d\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u8fd9\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u5408\u7406\u7684\u6761\u4ef6\u3002\u4f46\u5728\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0c\u7f16\u8bd1\u5668\u53ef\u80fd\u4f1a\u901a\u8fc7\u91cd\u6392\u5217\u90e8\u5206\u8bed\u53e5\u6765\u66f4\u597d\u5730\u5229\u7528 CPU \u8d44\u6e90\uff08\u53c2\u8003\u8ba1\u7ec4\u7684\u5404\u79cd\u7ade\u4e89\uff09\u3002\u800c\u5bf9\u7f16\u8bd1\u5668\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\uff08\u5c31\u7eea\u548c\u8bf7\u6c42\uff09\u5e76\u6ca1\u6709\u64cd\u4f5c\u76f8\u540c\u5185\u5bb9\uff0c\u56e0\u800c\u4ea4\u6362\u987a\u5e8f\u662f\u4e0d\u4f1a\u5f71\u54cd\u7ed3\u679c\u7684\uff0c\u6240\u4ee5\u53ef\u80fd\u88ab\u7f16\u8bd1\u5668\u4ea4\u6362\u3002\u800c\u8fd9\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u51fa\u73b0\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

    The effects of instruction reordering in Peterson\u2019s solution.

    \u5728\u68d5\u8272\u6807\u8bb0\u65f6\u523b\uff0cprocess 1 \u8fdb\u884c while \u5faa\u73af\u5224\u65ad\uff0c\u53d1\u73b0 READY[0] \u4e3a false\uff0c\u4f46\u6b64\u65f6 TURN \u6307\u5411\u5bf9\u65b9\uff0c\u6240\u4ee5\u6309\u7167\u6211\u4eec\u5148\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 1 \u4f1a\u8ba4\u4e3a process 0 \u662f\u5df2\u7ecf\u8fd0\u884c\u5b8c critical section\uff0c\u5df2\u7ecf\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u8fdb\u5165\u4e34\u754c\u6001\uff1b\u7136\u800c\uff0c\u5728\u7eff\u8272\u6807\u8bb0\u65f6\u523b\uff0c\u5bf9\u4e8e process 0\uff0c\u6b64\u65f6 TURN \u6307\u5411\u81ea\u5df1\uff0cprocess 1 \u8fd8\u6ca1\u8fd0\u884c\u5b8c\u6240\u4ee5 READY[1] \u8fd8\u662f true\uff0c\u6839\u636e\u6211\u4eec\u4e4b\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 0 \u4f1a\u8ba4\u4e3a process 1 \u5728\u7b49\u5f85\u81ea\u5df1\uff0c\u6240\u4ee5\u4e5f\u8fdb\u5165\u4e86\u4e34\u754c\u6001\u3002\u4e8e\u662f\uff0c\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8fdb\u5165\u4e86\u4e34\u754c\u6001\uff0c\u8fdd\u53cd\u4e86 mutual exclusion \u7684\u6027\u8d28\u3002

    \u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a Peterson's Algorithm \u4ecd\u7136\u6ca1\u6709\u89e3\u51b3\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#memory-barriers","title":"Memory Barriers","text":"

    \u8be5\u65b9\u6cd5\u5b9e\u9645\u4e0a\u662f\u5bf9\u8f6f\u4ef6\u65b9\u6cd5\u7684\u8865\u8db3\u3002\u6211\u4eec\u5148\u524d\u63d0\u5230\uff0cPeterson's Algorithm \u5931\u6548\u7684\u539f\u56e0\u662f\u7f16\u8bd1\u5668\u4f1a\u6839\u636e\u9700\u6c42\u91cd\u6392\u5217\u4e00\u4e9b\u5185\u5b58\u64cd\u4f5c\uff0c\u800c memory barriers \u4fdd\u8bc1 barrier \u4e4b\u524d\u7684 S/L \u6307\u4ee4\u5fc5\u987b\u5728 barrier \u4e4b\u540e\u7684 S/L \u6307\u4ee4\u4e4b\u524d\u5b8c\u6210\uff0c\u4f7f\u6211\u4eec\u80fd\u591f\u4e3b\u52a8\u7981\u6b62\u7f16\u8bd1\u5668\u505a\u8fd9\u79cd\u91cd\u6392\u3002

    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nmemory_barrier();                   // \u2502\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    Memory Model

    \u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u67b6\u6784\u53ef\u80fd\u4f1a\u5bf9\u7528\u6237\u7a0b\u5e8f\u64cd\u4f5c\u5185\u5b58\u7684\u4fdd\u8bc1\u6709\u6240\u4e0d\u540c\uff0c\u8fd9\u79cd\u4fdd\u8bc1\u88ab\u79f0\u4e3a memory model\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u5206\u4e3a\u4e24\u5927\u7c7b\uff1a

    1. \u5f3a\u6709\u5e8f(strongly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b
    2. \u5f31\u6709\u5e8f(weakly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u4e0d\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b

    \u6211\u4eec\u77e5\u9053\uff0c\u4e3a\u4e86\u63d0\u9ad8\u5185\u5b58\u64cd\u4f5c\u7684\u6548\u7387\uff0c\u6211\u4eec\u5f15\u5165\u4e86 cache\uff0c\u5728\u591a\u5904\u7406\u5668\u60c5\u51b5\u4e0b\uff0ccache \u673a\u5236\u7684\u5b58\u5728\u53ef\u80fd\u5bfc\u81f4\u8fdb\u7a0b A \u5bf9\u5185\u5b58\u7684\u5199\u65e0\u6cd5\u5bf9\u8fdb\u7a0b B \u7acb\u523b\u53ef\u89c1\uff0c\u8fd9\u5c31\u662f\u5f31\u6709\u5e8f\u7684\u4e00\u79cd\u4f53\u73b0\u3002

    \u8865\u5145\u6750\u6599

    \u611f\u8c22 ltgg \u63d0\u4f9b\u7684\u53c2\u8003\u8d44\u6599\uff0c\u8bfb\u8005\u6709\u5174\u8da3\u53ef\u4ee5\u81ea\u884c\u9605\u8bfb\uff1a

    \u5173\u4e8e\u5f3a\u5f31\u7684\u5b9a\u4e49\uff0c\u5927\u81f4\u7684\u610f\u601d\u662f\uff1a

    A strong hardware memory model is one in which every machine instruction comes implicitly with acquire and release semantics. As a result, when one CPU core performs a sequence of writes, every other CPU core sees those values change in the same order that they were written.

    \u8fd9\u90e8\u5206\u6211\u6ca1\u6709\u5b8c\u5168\u641e\u6e05\u695a\uff0c\u4e66\u672c\u7684\u903b\u8f91\u975e\u5e38\u7684\u8be1\u5f02\uff1a\u4e66\u672c\u8ba4\u4e3a memory barrier \u662f\u5f31\u6709\u5e8f\u95ee\u9898\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4f46\u662f\u6211\u59cb\u7ec8\u6ca1\u660e\u767d\u5b83\u4eec\u4e4b\u95f4\u7684\u903b\u8f91\u5728\u54ea\u91cc\uff0c\u4ee5\u53ca\u201c\u6709\u5e8f\u201d\u548c\u201c\u7acb\u523b\u53ef\u89c1\u201d\u7684\u6839\u672c\u8054\u7cfb\u5728\u54ea\u91cc\u3002\u8fd9\u91cc\u4e00\u5b9a\u662f\u5b58\u5728\u4e0d\u6e05\u695a\u7684\u5730\u65b9\u7684\u3002\u4f46\u662f\u8fd9\u90e8\u5206\u770b\u8d77\u6765\u4e0d\u662f\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u6211\u5c31\u5148\u653e\u7740\u4e0d\u7ba1\u4e86\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#hardware-instructions","title":"Hardware Instructions","text":"

    \u8ba8\u8bba Peterson's Algorithm \u540e\u6211\u4eec\u5e94\u5f53\u610f\u8bc6\u5230\uff0c\u540c\u6b65\u95ee\u9898\u7684\u51fa\u73b0\u662f \u24f5 \u786c\u4ef6\u64cd\u4f5c\u6570\u636e\u9700\u8981\u65f6\u95f4\uff0c\u4e0e \u24f6 \u6570\u636e\u5177\u6709\u5171\u4eab\u6027\u7684\u4e0d\u534f\u8c03\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u786c\u4ef6\u4ea7\u751f\u7684\u95ee\u9898\u3002\u56e0\u800c\uff0c\u8981\u60f3\u66f4\u597d\u7684\u89e3\u51b3\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u662f\u5e94\u5f53\u4ece\u786c\u4ef6\u51fa\u53d1\u3002\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u539f\u5b50\u6027(atomic)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5b83\u7684\u57fa\u672c\u903b\u8f91\u662f\u8ba9\u201c\u9700\u8981\u65f6\u95f4\u7684\uff0c\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u201d\uff0c\u53d8\u6210\u4e00\u4e2a\u201c\u5728\u65f6\u95f4\u4e0a\u4e0d\u53ef\u5206\u5272\u3001\u4e0d\u53ef\u88ab\u6253\u65ad\u7684\uff0c\u5373\u539f\u5b50\u6027\u7684\u64cd\u4f5c\u201d\u3002\u4e0d\u540c\u786c\u4ef6\u53ef\u80fd\u63d0\u4f9b\u4e0d\u540c\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6211\u4eec\u8fd9\u91cc\u5c06\u5b83\u4eec\u62bd\u8c61\u4e3a test_and_set() \u548c compare_and_swap() \u4e24\u7c7b\u6765\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#test_and_set","title":"test_and_set()","text":"

    Links

    <atomic> test_and_set(bool * target) {\nbool ret = *target;\n*target = true;\nreturn ret;\n}\n

    \u8be5\u6307\u4ee4\u7684\u529f\u80fd\u5c31\u7c7b\u4f3c\u4e0a\u9762\u8fd9\u6bb5\u4ee3\u7801\uff1a\u5c06\u76ee\u6807\u8bbe\u4e3a true\uff0c\u540c\u65f6\u8fd4\u56de\u5176\u65e7\u503c\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u4e2a\u6307\u4ee4\u9700\u8981\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u5982\u679c\u6709\u82e5\u5e72 test_and_set() \u540c\u65f6\u53d1\u751f\uff0c\u90a3\u4e48\u65e0\u8bba\u5e76\u53d1\u8fd8\u662f\u5e76\u884c\uff0c\u5b83\u4eec\u90fd\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u5730\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u4ea7\u751f\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u79cd atomic \u7684\u64cd\u4f5c\u5929\u7136\u4fdd\u8bc1\u4e86 mutual exclusion\uff0c\u56e0\u800c\u5bf9\u4e8e\u5b9e\u73b0\u4e86 test_and_set() \u7684\u673a\u5668\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 test_and_set() \u6765\u89e3\u51b3 CS \u95ee\u9898\u3002

    process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n\n/* other things */                  // - remainder section\n}\n

    \u5728\u7b2c 3 \u884c\uff0c\u5faa\u73af\u7b49\u5f85\u7684\u6761\u4ef6\u53d8\u4e3a test_and_set(&LOCK)\uff0c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f false\uff0c\u5219\u53ef\u4ee5\u7ee7\u7eed\uff0c\u5e76\u4e14\u6b64\u65f6 LOCK \u7684\u503c\u88ab\u539f\u5b50\u6027\u5730\u4fee\u6539\u4e3a true\uff1b\u800c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f true\uff0c\u90a3\u4e48\u5b83\u7ecf\u8fc7 test_and_set(&LOCK) \u540e\u7684\u503c\u4ecd\u7136\u662f true\uff0c\u4e14\u9700\u8981\u7b49\u5f85\uff0c\u76f4\u5230\uff1a\u5c06 LOCK \u6539\u6210 true \u7684\u90a3\u4e2a\u8fdb\u7a0b\u5728 exit section \u5c06 LOCK \u6539\u56de false\uff0c\u5373\u91ca\u653e\u9501\u3002

    \u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u4e0e\u6211\u4eec\u8ba8\u8bba Peterson's Algorithm \u65f6\u7684\u8bed\u5883\u4e0d\u540c\uff0c\u6211\u4eec\u73b0\u5728\u4e0d\u518d\u5047\u8bbe\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53ea\u6709\u4e24\u4e2a\uff08\u8fd9\u662f Peterson's \u7684\u5c40\u9650\u6027\u4e4b\u4e00\uff09\u3002\u5728\u8fd9\u4e2a\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u518d\u6765\u8003\u8651\u5b83\u662f\u5426\u6ee1\u8db3\u4e09\u6761\u6027\u8d28\u3002

    mutual exclusion

    \u7531\u4e8e test_and_set() \u662f\u539f\u5b50\u6027\u7684\uff0c\u6240\u4ee5\u540c\u65f6\u6267\u884c\u7684\u4e00\u7cfb\u5217 test_and_set() \u4e2d\uff0c\u53ea\u6709\u4e00\u4e2a\u80fd\u8fd4\u56de false\uff0c\u5373\u53ea\u6709\u4e00\u4e2a\u80fd\u901a\u8fc7\u9501\uff0c\u56e0\u800c\u5929\u751f\u6ee1\u8db3\u4e86 mutual exclusion\u3002

    progress

    \u4ee3\u7801\u4e2d\u5bf9 LOCK \u7684\u4fee\u6539\u64cd\u4f5c\u662f\u95ed\u5408\u7684\uff0c\u5373\u8fdb\u5165 critical section \u4f1a\u5bfc\u81f4 LOCK \u53d8\u4e3a false\uff0c\u4f46\u79bb\u5f00 critical section \u5fc5\u5b9a\u5bfc\u81f4 LOCK \u53d8\u4e3a true\u3002\u56e0\u6b64\uff0c\u53ea\u8981\u6ca1\u6709\u8fdb\u7a0b\u5904\u4e8e critical section\uff0c\u90a3\u4e48 LOCK \u5fc5\u5b9a\u4e3a false\uff0c\u5219\u4e00\u5b9a\u6709\u5c31\u7eea\u7684\u8fdb\u7a0b\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u800c\u8fd0\u884c critical section \u7684\u65f6\u95f4\u662f\u6709\u9650\u7684\uff0c\u56e0\u6b64 LOCK \u53c8\u4e00\u5b9a\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u53d8\u4e3a false\uff0c\u4ece\u800c\u6ee1\u8db3 progress\u3002

    bounded waiting time

    \u5982\u679c\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7ade\u4e89\uff0c\u90a3\u4e48\u901a\u8fc7\u7c7b\u4f3c\u8bc1\u660e progress \u7684\u8fc7\u7a0b\u53ef\u4ee5\u5f97\u5230 bounded waiting time \u662f\u53ef\u4ee5\u6210\u7acb\u7684\u3002A \u79bb\u5f00\u4e34\u754c\u6001\u540e\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u7684 B \u7acb\u523b\u5c31\u80fd\u8fdb\u5165 critical section\uff0c\u5373\u53ea\u6709\u4e24\u4e2a\u4eba\u6392\u961f\u662f\u4e0d\u4f1a\u88ab\u63d2\u961f\u7684\u3002

    \u4f46\u5728\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53d8\u591a\u4ee5\u540e\uff0c\u5c31\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u7c7b\u4f3c\u4e8e\u8c03\u5ea6\u4e2d\u201c\u9965\u997f\u201d\u7684\u73b0\u8c61\uff1a

        \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \nP0  \u2502 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500 \u00b7\u00b7\u00b7\n    \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \n          \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510\nP1  \u2500\u2500\u2500\u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502 \u00b7\u00b7\u00b7\n          \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518\n\nP2  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u00b7\u00b7\u00b7\n

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7531\u4e8e P0 \u548c P1 \u603b\u662f\u8f6e\u6d41\u83b7\u5f97\u9501\uff0c\u5bfc\u81f4 P2 \u59cb\u7ec8\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u9501\uff0c\u56e0\u800c\u5bf9\u4e8e P2 \u6765\u8bf4 waiting time \u5c31\u4e0d\u518d\u6709\u9650\u4e86\u3002

    \u7cdf\u4e86\uff0c\u770b\u8d77\u6765\u5f88\u9177\u7684\u4e00\u4e2a\u65b9\u6cd5\u8c8c\u4f3c\u4e0d\u80fd\u6ee1\u8db3 CS \u89e3\u6cd5\u7684\u6027\u8d28\uff0c\u4f46\u4ed4\u7ec6\u5206\u6790\uff0c\u8fd9\u662f\u7531\u4e8e\u9501\u7684\u5206\u914d\u673a\u5236\u662f\u4e0d\u53ef\u63a7\u7684\u2014\u2014\u5728\u4e00\u4e2a\u9501\u88ab\u91ca\u653e\u540e\uff0c\u63a5\u4e0b\u6765\u5c06\u62ff\u5230\u9501\u7684\u8fdb\u7a0b\u5e94\u5f53\u662f\u63a5\u4e0b\u6765\u7b2c\u4e00\u4e2a\u5b9e\u9645\u6267\u884c test_and_set() \u7684\u8fdb\u7a0b\uff0c\u7136\u800c\u7531\u4e8e \u2776 \u6211\u4eec\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u8fd0\u884c\u901f\u5ea6\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u2777 \u6211\u4eec\u5bf9\u540c\u65f6\u4ea7\u751f\u7684 test_and_set() \u5c06\u6309\u4f55\u987a\u5e8f\u88ab\u5904\u7406\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u624b\u52a8\u7528\u67d0\u79cd\u65b9\u6cd5\u6765\u5b9e\u73b0\u8fd9\u79cd\u201c\u9501\u7684\u8c03\u5ea6\u201d\uff1a

    // `i` is process id in [0, n), where `n` is the count of related process. \nprocess(i) {\nWAITING[i] = true;                                  // \u2510\nwhile ( WAITING[i] && test_and_set(&LOCK) ) {}      // \u251c entry sec.\n// \u2502\nWAITING[i] = false;                                 // \u2518\n\n/* operate critical resources */                    // - critical sec.\n\n// i.e. find next waiting process j                 // \u2510\nj = (i + 1) % n;                                    // \u2502\nwhile (i != j && !WAITING[j]) {                     // \u251c exit sec.\nj = (i + 1) % n;                                // \u2502\n}                                                   // \u2502\n// release j's LOCK or release whole LOCK           // \u2502\nif (i == j)     LOCK = false;                       // \u2502\nelse            WAITING[j] = false;                 // \u2518\n\n/* other things */                                  // - remainder sec.\n}\n

    \u6211\u4eec\u5f15\u5165\u4e86\u4e00\u4e2a WAITING[] \u6570\u7ec4\u6765\u8f85\u52a9 LOCK \u7ec6\u5316\u9501\u7684\u7c92\u5ea6\uff0c\u6b64\u65f6 LOCK \u8868\u793a\u7684\u201c\u662f\u5426\u5b58\u5728\u7ade\u4e89\u201d\uff0c\u800c WAITING[] \u5219\u6807\u8bc6\u4e86\u6240\u6709\u6b63\u5728\u7b49\u5f85\u7684\u8fdb\u7a0b\u3002\u533a\u522b\u4e8e\u4e4b\u524d\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0c\u8ba9\u5269\u4e0b\u7684\u8fdb\u7a0b\u53bb\u201c\u62fc\u624b\u901f\u201d\uff0c\u6211\u4eec\u8fd9\u6b21\u7531\u91ca\u653e\u9501\u7684\u8fdb\u7a0b\u6765\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u662f\u8c01\u3002

    \u5728 11-14 \u884c\uff0c\u901a\u8fc7\u4e00\u4e2a\u5faa\u73af\u627e\u5230\u4e0b\u4e00\u4e2a WAITING[j] \u4e3a true \u7684 j\uff0c\u2776 \u5982\u679c\u627e\u5230\u4e86\u8fd9\u4e2a j\uff0c\u90a3\u4e48\u5c31\u5c06 WAITING[j] \u8bbe\u4e3a false\uff0819 \u884c\uff09\uff0c\u8fd9\u6837 j \u9a6c\u4e0a\u5c31\u4f1a\u5728\u7b2c 4 \u884c break\uff0c\u8fdb\u5165 critical section\uff1b\u2777 \u800c\u5982\u679c\u627e\u4e0d\u5230\u8fd9\u4e2a j\uff0c\u5373\u627e\u4e86\u4e00\u5708\u53c8\u627e\u56de\u4e86 i\uff0c\u90a3\u4e48\u8bf4\u660e i \u662f\u6700\u540e\u4e00\u4e2a\u4e86\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0817 \u884c\uff09\u3002

    \u901a\u8fc7\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u4fdd\u8bc1\u4e86\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u6700\u591a\u53ea\u9700\u8981\u7b49\u5f85 n-1 \u4e2a\u8fdb\u7a0b\u8fd0\u884c\u5b8c critical section\uff08\u7c7b\u4f3c\u4e8e\u5b9e\u73b0\u4e86\u201cFCFS\u201d\uff09\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#compare_and_swap","title":"compare_and_swap()","text":"

    Links

    compare_and_swap() \u4e5f\u88ab\u7b80\u5199\u4e3a CAS \u6307\u4ee4\uff0c\u5b83\u7684\u529f\u80fd\u5982\u4e0b\uff1a

    <atomic> compare_and_swap(int * target, int expected, int new_val) {\nint ret = *target;\n\n// *target = (*target == expected) ? new_val : *target;\nif (*target == expected) {\n*target = new_val;\n}\n\nreturn ret;\n}\n

    CAS \u63a5\u53d7\u4e09\u4e2a\u503c\uff1a

    1. target \u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u5730\u5740\uff1b
    2. expected \u9884\u671f\u4e2d\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u65e7\u503c\uff1b
    3. new_val \u5e0c\u671b\u5c06\u6570\u636e\u4fee\u6539\u4e3a\u7684\u65b0\u503c\uff1b

    \u800c\u5f53\u4e14\u4ec5\u5f53 *target \u7b26\u5408\u9884\u671f\uff0c\u4e0e expected \u76f8\u540c\u65f6\u5019\uff0c\u624d\u4f1a\u5c06\u5b83\u6539\u4e3a new_val\u3002\u540c\u6837\uff0cCAS \u4e5f\u5e94\u5f53\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u82e5\u5e72 CAS \u540c\u65f6\u53d1\u751f\u65f6\uff0c\u4e5f\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u5b58\u5728\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

    \u6211\u4eec\u6ce8\u610f\u5230\uff0c\u5b9e\u9645\u4e0a test_and_set(target) \u5c31\u662f compare_and_swap(target, false, true)\uff0c\u56e0\u800c\u5b9e\u9645\u4e0a CAS \u89e3\u51b3 CS \u95ee\u9898\u7684\u65b9\u6cd5\u4ee5\u53ca\u95ee\u9898\u548c\u4e0a\u4e00\u8282\u7684\u5185\u5bb9\u6ca1\u4ec0\u4e48\u5dee\u522b\u3002

    \u4f46\u662f\u6211\u4eec\u53d1\u73b0\uff0ccompare_and_swap() \u76f8\u6bd4\u4e8e test_and_set()\uff0c\u663e\u7136\u6709\u66f4\u5927\u7684\u64cd\u4f5c\u7a7a\u95f4\uff0c\u4e5f\u66f4\u6cdb\u7528\uff0c\u8003\u8651\u5230 CAS \u6307\u4ee4\u81ea\u8eab\u5df2\u7ecf\u80fd\u591f\u652f\u6301\u539f\u5b50\u6027\u7684\u4fee\u6539\u503c\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u8df3\u51fa CS \u95ee\u9898\u7684\u8303\u5f0f\u6765\u8003\u8651\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#atomic-variables","title":"Atomic Variables","text":"

    \u539f\u5b50\u53d8\u91cf(atomic variables)\u662f\u4e00\u79cd\u7528\u539f\u5b50\u6027\u64cd\u4f5c\u7ef4\u62a4\u7684\u53d8\u91cf\u3002\u6211\u4eec\u6240\u6709\u5bf9\u539f\u5b50\u53d8\u91cf\u7684\u64cd\u4f5c\u53ef\u4ee5\u901a\u8fc7 CAS \u6765\u5b9e\u73b0\uff0c\u4f8b\u5982\u81ea\u589e\u64cd\u4f5c\uff1a

    increment(atomic_int * v) {\nint tmp;\ndo {\ntmp = *v;\n} while ( tmp != compare_and_swap(v, tmp, tmp+1) );\n}\n

    \u4f7f\u7528 atomic variables \u540e\u5b9e\u9645\u4e0a\u5c31\u4e0d\u592a\u7b26\u5408 CS \u95ee\u9898\u7684\u6a21\u578b\u4e86\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u91cc\u5e76\u4e0d\u518d\u9700\u8981\u7ef4\u62a4\u7c7b\u4f3c LOCK \u7684\u4e1c\u897f\uff0c\u800c\u662f\u4ee5 *target \u662f\u5426\u7b26\u5408 expected \u7684\u9884\u8bbe\u6765\u5224\u65ad\u662f\u5426\u6709\u7ade\u4e89\u51fa\u73b0\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u540c\u6b65\u5de5\u5177\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u79cd\u5c01\u88c5\u540e\u7684\u539f\u5b50\u6027\u64cd\u4f5c\u6765\u89e3\u51b3 race condition\uff0c\u800c\u4e0d\u9700\u8981\u518d\u533a\u5206 entry section \u6216\u662f critical section \u7b49\u3002

    \u4e66\u672c\u4e0a\u7279\u5730\u63d0\u5230\uff0c\u5728\u4f8b\u5982 producer&consumer \u7684\u6a21\u578b\u4e2d\uff0c\u4f7f\u7528 atomic variables \u7ef4\u62a4 count \u5e76\u4e0d\u80fd\u89e3\u51b3 race condition\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u79cd\u8ba8\u8bba\u662f\u6709\u5931\u504f\u9887\u7684\uff0c\u6240\u8c13\u7684\u201c\u539f\u5b50\u6027\u201d\u5e94\u8be5\u5305\u62ec\u6240\u6709\u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u90e8\u5206\uff0c\u4e66\u4e2d\u53ea\u7ef4\u62a4 count \u4e0d\u7ef4\u62a4 buffer \u7684\u5047\u8bbe\u6211\u89c9\u5f97\u5bf9\u4e8e atomic \u8fd9\u4e2a\u6982\u5ff5\u6765\u8bf4\u5b9e\u5728\u4e0d\u591f\u516c\u5e73\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5c31\u4e0d\u7740\u91cd\u8bf4\u660e\u8fd9\u4e2a\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#mutex-locks","title":"Mutex Locks","text":"

    \u7531\u6b64\u6211\u4eec\u5df2\u7ecf\u5f97\u5230\u4e86\u80fd\u5728\u786c\u4ef6\u5c42\u9762\u89e3\u51b3 race condition \u95ee\u9898\u7684\u6839\u6e90\u7684\u5de5\u5177\u4e86\uff0c\u4f46\u662f\u4e3a\u4e86\u80fd\u8ba9\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u66f4\u597d\u7684\u4f7f\u7528\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u505a\u4e00\u6b21\u8f6f\u4ef6\u5c42\u9762\u7684\u5c01\u88c5\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e92\u65a5\u9501(mutex locks)\u8fd9\u4e2a\u4e1c\u897f\u3002

    \u5229\u7528\u4e92\u65a5\u9501\u907f\u514d race condition \u7684\u57fa\u672c\u601d\u8def\u4ecd\u7136\u662f\u57fa\u4e8e CS \u95ee\u9898\u7684\u5efa\u6a21\uff0c\u4f46\u5b83\u66f4\u5177\u4f53\u5730\u8ba4\u4e3a\u5728 entry section \u5c31\u8be5\u53bb\u7d22\u53d6\u4e92\u65a5\u9501\uff0c\u800c\u5728 exit section \u5c31\u5e94\u8be5\u53bb\u91ca\u653e\u4e92\u65a5\u9501\uff0c\u5373\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Acquire Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Release Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u56de\u987e\u6211\u4eec\u5728\u4ecb\u7ecd test_and_set() \u90e8\u5206\u7ed9\u51fa\u7684\u8fd9\u6bb5\u4ee3\u7801\uff1a

    process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n/* other things */                  // - remainder section\n}\n

    \u6211\u4eec\u53ea\u9700\u8981\u5c06\u9ad8\u4eae\u7684\u8fd9\u4e24\u884c\u5c01\u88c5\u8d77\u6765\uff0c\u5c31\u5b9e\u73b0\u4e86 acquire LOCK \u548c release LOCK\u3002

    // `available` means whether the `LOCK` is free, or whether the related \n// resources is available\nacquire() {\nwhile ( !compare_and_swap(&available, true, false) ) {}\n}\n\nrelease() {\navailable = true;\n}\n

    \u4f60\u53ef\u80fd\u6ce8\u610f\u5230\u4e86\uff0c\u6211\u4eec\u5728 test_and_set() \u8ba8\u8bba\u4e0a\u9762\u90a3\u6bb5\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u8ba8\u8bba\u8fc7\u5b83\u65e0\u6cd5\u6ee1\u8db3 bounded waiting time \u7684\u95ee\u9898\uff0c\u90a3\u65e2\u7136\u5982\u6b64\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u628a WAITING[] \u4e5f\u4e00\u8d77\u5c01\u8fdb\u53bb\u5462\uff1f

    \u8fd9\u662f\u56e0\u4e3a\u4e66\u4e0a\u76f4\u63a5\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u76f4\u5230\u5728\u4e4b\u540e\u8bb2 semaphores \u7684\u65f6\u5019\u624d\u60f3\u8d77\u6765\uff0c\u4f46 semaphores \u548c mutex lock \u53c8\u662f\u4e24\u4e2a\u8def\u5b50\uff0c\u6211\u4e5f\u4e0d\u77e5\u9053\u5b83\u5230\u5e95\u60f3\u8bf4\u660e\u4ec0\u4e48\u95ee\u9898\u3002\u4f46\u662f\u65e2\u7136\u5b83\u73b0\u5728\u5ffd\u7565\u4e86\uff0c\u6211\u4eec\u5c31\u5148\u4e0d\u7ba1\u5b83\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u610f\u8bc6\u5230\u8fd9\u4e2a\u95ee\u9898\u662f\u5b58\u5728\u7684\u3002

    \u7ecf\u8fc7\u8fd9\u4e48\u957f\u7684\u94fa\u57ab\uff0c\u6211\u4eec\u73b0\u5728\u80fd\u591f\u4fdd\u8bc1\u7684\u4e00\u4ef6\u4e8b\u662f\uff0c\u6211\u4eec\u7ec8\u4e8e\u5f97\u5230\u4e86\u4e00\u4e2a\u8f6f\u4ef6\u5c42\u9762\u7684\u3001\u80fd\u591f\u907f\u514d race condition \u7684\u540c\u6b65\u5de5\u5177\u3002\u90a3\u4e48\u5b9e\u73b0\u57fa\u672c\u9700\u6c42\u4ee5\u540e\u6211\u4eec\u5c31\u5f00\u59cb\u8003\u8651\u80fd\u4e0d\u80fd\u4f18\u5316\u5b83\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u5fd9\u7b49\u5f85","title":"\u5fd9\u7b49\u5f85","text":"

    \u5982\u679c\u8bfb\u8005\u5bf9\u4ee3\u7801\u6709\u6bd4\u8f83\u654f\u611f\u7684\u55c5\u89c9\uff0c\u90a3\u53ef\u80fd\u770b\u8fd9\u51e0\u5343\u4e2a\u5b57\u5230\u73b0\u5728\uff0c\u4f60\u5df2\u7ecf\u4e3a\u6570\u4e0d\u6e05\u7684 while() \u63d0\u5fc3\u540a\u80c6\u8fc7\u5341\u591a\u6b21\u4e86\u3002\u6ca1\u9519\uff0c\u867d\u7136\u6211\u4eec\u901a\u8fc7\u903b\u8f91\u4fdd\u8bc1\u8fd9\u91cc\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u5faa\u73af\uff0c\u4f46\u5bf9\u4e8e\u7b49\u5f85\u4e2d\u7684 process\uff0c\u786e\u5b9e\u8981\u5728\u6570\u4e0d\u5c3d\u7684 while loop \u4e2d\u6d6a\u8d39 CPU\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u7b49\u5f85\u9501\u91ca\u653e\u7684\u884c\u4e3a\u4e3a\u5fd9\u7b49\u5f85(busy waiting)\uff0c\u5176\u4e2d\u201c\u5fd9\u201d\u6307\u7684\u5c31\u662f\u5728\u7b49\u5f85\u8fc7\u7a0b\u4e2d\u4ecd\u7136\u5360\u7528 CPU \u8d44\u6e90\u3002\u800c\u8fd9\u79cd\u4f7f\u7528\u5fd9\u7b49\u5f85\u7684\u4e92\u65a5\u9501\uff0c\u4e5f\u88ab\u79f0\u4e3a\u81ea\u65cb\u9501(spinlock)\u3002

    \u6211\u4eec\u5f15\u5165\u4e24\u4e2a\u8bcd\u6765\u66f4\u51c6\u786e\u7684\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\uff1a

    Lock Contention

    \u5982\u679c\u4e00\u4e2a\u7528\u6237\u8bd5\u56fe\u7d22\u53d6\u67d0\u4e2a\u9501\u65f6\uff0c\u5982\u679c\u8fd9\u4e2a\u9501\u4e0d\u662f available \u7684\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u6709\u7528\u6237\u6b63\u5728\u4f7f\u7528\u8fd9\u4e2a\u9501\uff0c\u800c\u5f53\u524d\u7528\u6237\u9700\u8981\u7b49\u5f85\u8fd9\u4e2a\u9501\u91cd\u65b0\u53ef\u7528\uff0c\u6b64\u65f6\u6211\u4eec\u79f0\u8fd9\u4e2a\u9501\u662f\u88ab\u4e89\u62a2\u7684(contended)\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u4e89\u62a2\uff0c\u6211\u4eec\u5c31\u79f0\u4e4b\u4e3a\u4e0d\u88ab\u4e89\u62a2\u7684(uncontended)\u3002

    \u5982\u679c\u73b0\u5728\u6709\u597d\u591a\u7528\u6237\u90fd\u5728\u4e89\u62a2\u4e00\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a high contention\uff1b\u53cd\u4e4b\u5982\u679c\u53ea\u6709\u96f6\u661f\u51e0\u4e2a\u7528\u6237\u5728\u4e89\u62a2\u8fd9\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a low contention\u3002

    \u5982\u679c\u5ef6\u7528 spinlock\uff0c\u90a3\u4e48\u4e0d\u96be\u5f97\u5230\u7ed3\u8bba\uff1ahigh contention \u4f1a\u5bfc\u81f4\u4e25\u91cd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u603b\u662f\u4f1a\u6709\u5927\u91cf\u5f97\u4e0d\u5230\u9501\u7684\u7528\u6237\u5904\u4e8e busy waiting \u4e2d\u3002

    \u65e2\u7136\u5b83\u4eec\u90fd\u662f\u5728\u505a\u65e0\u610f\u4e49\u7684\u7b49\u5f85\uff0c\u90a3\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u5728\u8fd9\u4e2a\u65f6\u5019\u628a\u8d44\u6e90\u8ba9\u7ed9\u6709\u9700\u8981\u7684\u4eba\u5462\uff1f

    \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6682\u65f6\u5730\u5207\u6362\u8fdb\u7a0b\uff0c\u8ba9\u8fd9\u4e9b\u5904\u4e8e\u7b49\u5f85\u7684\u7528\u6237\u6682\u65f6\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5230\u6765\u518d\u5524\u9192\u5b83\u4eec\uff0c\u6b64\u65f6\u5c31\u9700\u8981\u7cfb\u7edf\u8c03\u7528\u7684\u4ecb\u51653\u3002\u800c\u5177\u4f53\u7684\u65b9\u6cd5\u6211\u4eec\u5728\u4e0b\u4e00\u8282\u7684\u907f\u514d\u5fd9\u7b49\u5f85\u4e2d\u4ecb\u7ecd\u3002

    \u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u9700\u8981\u4fdd\u6301\u5ba2\u89c2\uff1aspinlock \u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u662f\u6709\u597d\u5904\u7684\uff0c\u5728\u7b49\u5f85\u65f6\u95f4\u5e76\u4e0d\u957f\u7684\u60c5\u51b5\u4e0b\uff0c\u76f8\u6bd4\u4e8e\u62e5\u6709\u9501\u7684\u7528\u6237\u91ca\u653e\u9501\uff0c\u8fdb\u884c\u8c03\u5ea6\u9501\u9700\u8981\u7684 context switch \u7684\u5f00\u9500\u53ef\u80fd\u663e\u5f97\u8f83\u5927\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6211\u4eec\u8fd8\u6ca1\u6765\u5f97\u53ca\u628a\u8d44\u6e90\u8ba9\u7ed9\u522b\u4eba\u9501\u5c31\u597d\u4e86\uff0c\u90a3\u4e48\u8fd9\u79cd\u8d44\u6e90\u8f6c\u8ba9\u8fd8\u4e0d\u5982\u4e0d\u8f6c\u3002\u800c\u4e8b\u5b9e\u4e0a\uff0c\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\uff0c\u81ea\u65cb\u9501\u4e5f\u786e\u5b9e\u662f\u4e00\u4e9b\u591a\u6838\u7cfb\u7edf\u7684\u9996\u9009\u3002

    \u4e0d\u8fc7\u5728\u8bb8\u591a\u8bed\u5883\u91cc mutex \u548c spinlock \u662f\u88ab\u533a\u5206\u5f00\u6765\u7684\u4e24\u4e2a\u6982\u5ff5\uff0c\u5177\u4f53\u4f7f\u7528\u54ea\u4e2a\u5219\u9700\u8981\u9002\u65f6\u5224\u65ad4\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#semaphores","title":"Semaphores","text":"

    Links

    Mutex lock \u4e3a\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u4e86\u7c7b\u4f3c\u4e8e\u201c\u623f\u95f4\u7533\u8bf7\u201d\u7684\u529f\u80fd\uff0c\u9501\u7ade\u4e89\u5c31\u597d\u50cf\u5927\u5bb6\u62a2\u623f\u95f4\u7684\u4f7f\u7528\u6743\u3002\u800c\u4fe1\u53f7\u91cf(semaphores)\u5219\u662f\u7c7b\u4f3c\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u8fc7\u7684 atomic variables\uff0c\u901a\u8fc7\u63d0\u4f9b\u6807\u51c6\u5316\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6765\u7ef4\u62a4\u4e00\u4e9b\u53d8\u91cf\uff0c\u53ea\u4e0d\u8fc7\u5b83\u989d\u5916\u5bf9\u53d8\u91cf\u7684\u503c\u6709\u4e00\u5b9a\u7684\u7ea6\u675f\u3002

    \uff08\u8bf4\u5b9e\u8bdd\u6211\u611f\u89c9\u8fd9\u4fe9\u4e1c\u897f\u672c\u8d28\u4e0a\u771f\u6ca1\u5565\u533a\u522b\u2026\u2026\uff09

    Semaphores \u53ea\u63d0\u4f9b\u4e24\u4e2a\u6807\u51c6\u5316\u7684\u63a5\u53e3\uff1await()\uff08\u6216P()\uff09 \u548c signal()\uff08\u6216V()\uff09\uff0c\u5b83\u4eec\u7684\u529f\u80fd\u5982\u4e0b\uff1a

    <atomic> wait(reference S) {\nwhile (S <= 0) {} // busy wait here\nS--;\n}\n\n<atomic> signal(reference S) {\nS++;\n}\n

    \u663e\u7136\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\u7684\u5b9e\u73b0\u4e5f\u5e94\u5f53\u4fdd\u8bc1\u662f atomic \u7684\u3002

    \u533a\u522b\u4e8e\u666e\u901a\u7684 atomic variables\uff0csemaphores \u591a\u4e86\u5728\u7b2c 2 \u884c\u7684 busy wait\uff0c\u8fd9\u6697\u542b\u4e86\u4e00\u79cd\u201c\u6709\u9650\u201d\u7684\u6982\u5ff5\uff0c\u5373\u4fdd\u8bc1 \\(0 \\leq S\\)\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\uff0csemaphores \u5206\u4e3a counting semaphore \u548c binary semaphore\uff0c\u524d\u8005\u7684\u529f\u80fd\u5982\u4e0a\uff0c\u540e\u8005\u53ea\u4e0d\u8fc7\u662f\u989d\u5916\u8981\u6c42 \\(0 \\leq S \\leq 1\\)\uff0c\u4fee\u6539 loop \u7684\u6761\u4ef6\u5373\u53ef\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u4f7f\u7528","title":"\u4f7f\u7528","text":"

    \u4f8b\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u5f0f\uff0c\u4fdd\u8bc1 P0() \u4e2d\u7684 section A \u5fc5\u987b\u5728 P1() \u7684 section B \u4e4b\u524d\u5b8c\u6210\uff1a

    semaphore S = 0;\n\nP0() {\n/* Section A */\nsignal(S);\n}\n\nP1() {\nwait(S);\n/* Section B */\n}\n

    \u4e0a\u9762\u7684\u4f8b\u5b50\u975e\u5e38\u5f62\u8c61\u5730\u5c55\u793a\u4e86\u4fe1\u53f7\u91cf\u662f\u5982\u4f55\u53d1\u6325\u4f5c\u7528\u7684\uff0c\u5f53\u7136\uff0c\u4e0a\u9762\u53ea\u5c55\u793a\u4e86\u7c7b\u4f3c\u8fdb\u7a0b\u95f4\u901a\u8baf\u7684\u529f\u80fd\uff0c\u4e0b\u9762\u8fd9\u4e2a\u5f62\u5f0f\u5219\u66f4\u63a5\u8fd1\u6211\u4eec\u4e0a\u6587\u4e2d\u8ba8\u8bba\u7684\u60c5\u51b5\uff0c\u5373\u5b9e\u73b0\u4e86\u4e92\u65a5\uff1a

    // `i` is process id and S is the semaphores\nprocess(i) {\nwait(S);    // i.e. release the 'LOCK'\n\n/* critical section */\n\nsignal(S);  // only one process can pass this line at once\n}\n
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u907f\u514d\u5fd9\u7b49\u5f85","title":"\u907f\u514d\u5fd9\u7b49\u5f85","text":"

    \u6211\u4eec\u5728 mutex \u4e2d\u63d0\u51fa\u5fd9\u7b49\u5f85\u7684\u65f6\u5019\u5c31\u5df2\u7ecf\u63d0\u5230\u8fc7\uff0c\u53ef\u4ee5\u901a\u8fc7\u300c\u5728\u7b49\u5f85\u7684\u65f6\u5019\u8ba9\u8fdb\u7a0b\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5408\u9002\u7684\u65f6\u5019\u518d\u5524\u9192\u300d\u7684\u65b9\u5f0f\uff0c\u6765\u51cf\u5c0f\u8f83\u957f\u7684\u5fd9\u7b49\u5f85\u5f15\u8d77\u7684\u6027\u80fd\u964d\u4f4e\u3002\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u9700\u8981\u6269\u5c55 semaphores \u7684\u5185\u5bb9\uff0c\u5f15\u5165\u4e00\u4e2a\u94fe\u8868\u6765\u7ef4\u62a4\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u3002

    struct semaphore {\nvalue;\nwaiting_list;\n};\n\n<atomic> wait(reference S) {\nS->value--;\nif (S->value < 0) {\nS->waiting_list.push(current process);\nsleep();\n}\n}\n\n<atomic> signal(reference S) {\nS->value++;\nif (S->value <= 0) {\np = S->waiting_list.pop();\nwakeup(p);\n}\n}\n

    \u76f8\u6bd4\u4e8e\u4e4b\u524d\u7684\u903b\u8f91\uff0c\u73b0\u5728\u7684\u903b\u8f91\u7a0d\u5fae\u6709\u70b9\u53d8\u5316\uff0c\u8bf7\u8bfb\u8005\u5c1d\u8bd5\u72ec\u7acb\u5206\u6790\u5176\u4e2d\u7684\u5965\u79d8\u3002\u8fd9\u91cc\u662f\u4e00\u4e9b\u63d0\u793a\uff1a

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u601d\u8003\uff1a

    1. \u73b0\u5728\u5df2\u7ecf\u6ca1\u6709 while \u4e86\uff0c\u53ea\u4f59\u4e0b if\uff0c\u73b0\u5728\u662f\u5982\u4f55\u4fdd\u8bc1\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u80fd\u591f\u88ab\u53ca\u65f6\u5524\u9192\uff1f
    2. wait \u539f\u5148\u662f\u5148\u7b49\u5f85\u518d\u4fee\u6539\uff0c\u73b0\u5728\u662f\u5148\u4fee\u6539\u3001\u518d\u7b49\u5f85\uff0c\u8fd9\u5bf9\u6574\u4f53\u903b\u8f91\u6709\u4f55\u5f71\u54cd\uff1f
    3. signal \u4e2d\u7684\u6761\u4ef6\u8bed\u53e5\uff0c\u4e3a\u4f55\u662f S->value <= 0\uff1f\u8fd9\u4e2a\u6761\u4ef6\u4e3a false \u65f6\u610f\u5473\u7740\u4ec0\u4e48\uff1f
      • \u8003\u8651\u5728 high contention \u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u603b\u662f\u4e00\u51fa\u73b0\u5c31\u88ab\u62a2\u7a7a\u3002

    \u800c\u5b9e\u9645\u4e0a\uff0c\u73b0\u5728\u6211\u4eec\u63d0\u5230\u4fe1\u53f7\u91cf\uff0c\u9ed8\u8ba4\u6307\u7684\u5c31\u662f\u907f\u514d\u5fd9\u7b49\u5f85\u8fd9\u4e00\u8282\u4e2d\u63d0\u5230\u7684\u8fd9\u79cd\u3002

    1. The Critical Section Problem \u21a9

    2. \u4e66\u672c\u4e2d\u5bf9 preemptive kernels \u548c non-preemptive kernels \u7684\u5b9a\u4e49\u5e76\u4e0d\u51c6\u786e\uff0c\u4e24\u8005\u6700\u672c\u8d28\u7684\u533a\u522b\u662f\u540e\u8005\u5b9e\u73b0\u4e86 Giant Lock\u3002\u540c\u65f6\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff1aWhat was the reason of the non-preemptivity of older Linux kernels? | Stack Exchange \u21a9

    3. Mutex access and system call | Stack Overflow \u21a9

    4. \u2b50\ufe0f When should one use a spinlock instead of mutex? | Stack Overflow \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/","title":"U2 Part 2: \u540c\u6b65\u95ee\u9898\u4f8b\u5b50 | Synchronization Problems Examples","text":"

    \u7ea6 1567 \u4e2a\u5b57 51 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-bounded-buffer-problem","title":"The Bounded-Buffer Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f","title":"\u95ee\u9898\u80cc\u666f","text":"

    The Bounded-Buffer Problem \u53c8\u79f0 The Producer\u2013Consumer Problem\uff0c\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u6709\u4e24\u4e2a\u89d2\u8272\uff0cproducer \u548c consumer\uff1aproducer \u4f1a\u4ea7\u751f item \u5b58\u653e\u5230 buffer \u4e2d\uff0c\u800c consumer \u53ef\u4ee5\u5c06\u6570\u636e\u4ece buffer \u4e2d\u53d6\u51fa item\u3002\u5982\u679c\u6211\u4eec\u7528 \\(n = \\# items\\) \u6765\u63cf\u8ff0 buffer \u7684\u72b6\u6001\uff0c\u90a3\u4e48\u95ee\u9898\u5c06\u62bd\u8c61\u4e3a\uff1a

    void produce() {\n/* something */\n++n;\n/* something */\n}\n\nvoid consume() {\n/* something */\n--n;\n/* something */\n}\n

    \u540c\u65f6\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(0 \\leq n \\leq n_{max}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728 \\(n = 0\\) \u65f6\uff0c\u8ba9 consumer \u7b49\u5f85 \\(n > 0\\) \u518d consume()\uff1b\u5bf9\u5e94\u7684\uff0c\u5728 \\(n = n_{max}\\) \u65f6\u5019\uff0c\u8ba9 producer \u7b49\u5f85 \\(n < n_{max}\\) \u518d produce()\u3002\u4f46\u8fd9\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u5355\u5143\u63d0\u53ca\u5b83\u7684\u91cd\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u8fd9\u91cc\u8ba4\u4e3a\u5b83\u4eec\u5728 /* something */ \u4e2d\u3002

    \u5b9e\u9645\u7684 The Bounded-Buffer Problem \u4e2d\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7ec6\u8282\uff0c\u4f46\u662f\u8fd9\u91cc\u6211\u4eec\u5c06\u6574\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u6211\u4eec\u9700\u8981\u7684\u6a21\u6837\uff0c\u8bf7\u4e0d\u8981\u8ba4\u4e3a\u4e0a\u9762\u7684\u4ee3\u7801\u5c31\u662f The Bounded-Buffer Problem \u7684\u5168\u90e8\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u63cf\u8ff0","text":"

    \u8003\u8651\u5728\u5e76\u884c\u8bed\u5883\u4e0b\uff0cproduce() \u548c consume() \u540c\u65f6\u53d1\u751f\uff0c\u7531\u4e8e ++n \u548c --n \u8fd9\u4e9b\u64cd\u4f5c\u672c\u8d28\u4e0a\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\uff0c\u6240\u4ee5\u5bb9\u6613\u51fa\u73b0 race condition\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores","title":"\u89e3\u51b3 - semaphores","text":"

    \u6211\u4eec\u4f7f\u7528\u4fe1\u53f7\u91cf\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u9700\u8981\u5b9a\u4e49\u4e09\u4e2a\u4fe1\u53f7\u91cf\uff1a

    // suppose the capacity of the buffer is n\nsemaphore mutex = 1;\nsemaphore empty = n;\nsemaphore full  = 0;\n

    \u903b\u8f91\u4e0a\u6211\u4eec\u8981\u6c42 empty + full == n \u59cb\u7ec8\u6210\u7acb\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u4f1a\u4ea7\u751f\u4e00\u5b9a\u8bef\u5dee\uff08\u8003\u8651\u67d0\u4e2a\u539f\u8bed\u8fd8\u6ca1\u5f7b\u5e95\u6267\u884c\u5b8c\uff09\u3002\u800c\u6211\u4eec\u8fd9\u91cc\u4e4b\u6240\u4ee5\u8981\u4f7f\u7528\u4e24\u4e2a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a buffer \u7684\u5360\u7528\u72b6\u6001\uff0c\u662f\u56e0\u4e3a\u4fe1\u53f7\u91cf\u7684\u201c\u6709\u754c\u201d\u662f\u901a\u8fc7 0 \u7ef4\u62a4\u7684\uff0c\u4e5f\u5c31\u662f\u53ea\u6709\u5728\u201c\u51cf\u5c11\u201d\u7684\u65f6\u5019\u624d\u80fd\u7ef4\u62a4\uff1b\u800c\u6211\u4eec\u7684\u8981\u6c42\u662f\uff0cbuffer \u7684\u4e0a\u4e0b\u754c\u90fd\u6709\u754c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e24\u4e2a\u4fe1\u53f7\u91cf\u5206\u522b\u6765\u7ef4\u62a4\u4e24\u4e2a\u8fb9\u754c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-readerswriters-problem","title":"The Readers\u2013Writers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

    \u8be5\u95ee\u9898\u62bd\u8c61\u81ea\u6570\u636e\u5e93\u7684\u4f7f\u7528\u3002\u7528\u6237\u4f7f\u7528\u6570\u636e\u5e93\u4fee\u6539\u6570\u636e\uff08UPDATE\uff09\uff0c\u672c\u8d28\u4e0a\u4e5f\u662f\u6709\u4e09\u4e2a\u6b65\u9aa4\uff1a

    1. [READ] \u4ece\u6570\u636e\u5e93\u4e2d\u68c0\u7d22\u3001\u8bfb\u53d6\u6570\u636e\uff1b
    2. \u6570\u636e\u7ecf\u8fc7\u4e1a\u52a1\u903b\u8f91\u7684\u5904\u7406\uff0c\u5f97\u5230\u65b0\u503c\uff1b
    3. [WRITE] \u5c06\u65b0\u503c\u5199\u56de\u6570\u636e\u5e93\uff1b

    \u8fd9\u4e2a\u6b65\u9aa4\u4e0e\u6211\u4eec\u4fee\u6539 mem[x] \u7684\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\uff0c\u56e0\u6b64\u9047\u5230\u7684\u95ee\u9898\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002

    \u51b2\u7a81\u4e3b\u8981\u4f53\u73b0\u5728\u4e24\u79cd\u60c5\u51b5\uff1a

    \u663e\u7136\uff0creader \u548c reader \u4e0d\u4f1a\u6709\u51b2\u7a81\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_1","title":"\u89e3\u51b3 - semaphores","text":"

    \u6709\u4e24\u79cd\u79cd\u6734\u7d20\u7684\u89e3\u51b3\u529e\u6cd5\uff1a\u24f5 writer \u603b\u662f\u7b49\u5f85 reader\uff0c\u24f6 reader \u603b\u662f\u7b49\u5f85 writer\u3002\u4f46\u662f\u8fd9\u4e24\u79cd\u89e3\u51b3\u529e\u6cd5\u90fd\u4e0d\u662f\u5f88\u597d\uff0c\u56e0\u4e3a \u24f5 \u4f1a\u5bfc\u81f4 writer \u9965\u997f\uff0c\u24f6 \u4f1a\u5bfc\u81f4 reader \u9965\u997f\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u7ed9\u51fa\u6b63\u5f0f\u7684\u89e3\u51b3\u65b9\u6cd5\uff0c\u5f15\u5165\u4e24\u4e2a\u4fe1\u53f7\u91cf\u548c\u4e00\u4e2a\u5171\u4eab\u53d8\u91cf\uff1a

    semaphores rw_mutex   = 1;\nsemaphores mutex      = 1;\nint        read_count = 0;\n

    \u8003\u8651\u5230 reader \u548c reader \u4e0d\u4f1a\u51b2\u7a81\uff0c\u6240\u4ee5 readers \u4e4b\u95f4\u4e0d\u5e94\u8be5\u4e92\u65a5\u3002\u800c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1\u7684\u662f\uff1a\u5355\u4e2a writer \u548c\u82e5\u5e72 readers \u4e4b\u95f4\u4e92\u65a5\uff0c\u5355\u4e2a writer \u548c\u5355\u4e2a writer \u4e4b\u95f4\u4e92\u65a5\u3002\u800c rw_mutex \u5c31\u662f\u7528\u4e8e\u63a7\u5236\u8fd9\u79cd\u4e92\u65a5\u3002

    writer's code
    writer() {\nwait(rw_mutex);\n\n/* critical section */\nsignal(rw_mutex);\n}\n

    \u4f46\u6b64\u65f6\u5982\u4f55\u4fdd\u8bc1 readers \u4e4b\u95f4\u4e0d\u4f1a\u4e92\u65a5\u5462\uff1f\u9996\u5148\uff0c\u5f53\u7b2c\u4e00\u4e2a reader \u8bd5\u56fe\u8fdb\u5165\u4e34\u754c\u6bb5\u65f6\uff0c\u5b83\u5e94\u5f53\u83b7\u53d6\u4e00\u4e2a rw_mutex\uff0c\u4ee5\u963b\u6b62\u5176\u5b83 writer \u8fdb\u5165\u4e34\u754c\u6bb5\u3002\u800c\u5bf9\u4e8e\u4e4b\u540e\u7684 reader \u6765\u8bf4\uff0c\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a reader\uff0c\u90a3\u4e48\u5b83\u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6bb5\uff1b\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a writer\uff0c\u90a3\u4e48\u5b9e\u9645\u4e0a\u5b83\u624d\u662f\u7b2c\u4e00\u4e2a reader\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u62ff rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5224\u65ad\u5f53\u524d\u6709\u6ca1\u6709 reader \u6b63\u5728\u4eab\u7528\u4e34\u754c\u8d44\u6e90\u5373\u53ef\uff1b\u800c\u5bf9\u4e8e\u653e rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u9700\u8981\u5224\u65ad\u5f53\u524d\u662f\u4e0d\u662f\u6700\u540e\u4e00\u4e2a reader\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u8ba1\u6570\u5668 read_count\uff0c\u800c\u7531\u4e8e\u8fd9\u4e2a\u8ba1\u6570\u5668\u662f\u4e2a\u666e\u901a\u7684\u5171\u4eab\u53d8\u91cf\uff0c\u800c\u4e14\u8fd9\u4e2a\u8ba1\u6570\u5668\u672c\u8eab\u4e5f\u662f\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a mutex \u6765\u7ef4\u62a4\u5b83\u3002

    \u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a reader \u7684\u4ee3\u7801\u4e2d\u542b\u6709 3 \u4e2a\u4e34\u754c\u6bb5\uff0c\u5206\u522b\u662f\uff1a\u8ba1\u6570\u5668\u589e\u3001\u8bfb\u53d6\u4e34\u754c\u8d44\u6e90\u3001\u8ba1\u6570\u5668\u51cf\u3002

    reader's code
    reader() {\nwait(mutex);            //   \u2510\nread_count++;           //   \u251c obtain `mutex` to increase\nif (read_count == 1) {  //   \u2502 `read_count`\nwait(rw_mutex);     // \u2510 \u2502\n}                       // \u2502 \u2502\nsignal(mutex);          // \u2502 \u2518\n// \u251c\u2500\u2500 readers share `rw_mutex` to\n/* critical section */  // \u2502   read critical resource\n// \u2502\nwait(mutex);            // \u2502 \u2510\nread_count--;           // \u2502 \u251c obtain `mutex` to decrease\nif (read_count == 0) {  // \u2502 \u2502 `read_count`\nsignal(rw_mutex);   // \u2518 \u2502\n}                       //   \u2502\nsignal(mutex);          //   \u2518\n}\n

    \u903b\u8f91\u4e0a\uff0c\u91ca\u653e rw_mutex \u7684 reader \u4e0d\u9700\u8981\u662f\u7533\u8bf7 rw_mutex \u7684 reader\uff0c\u8fd9\u4e5f\u5370\u8bc1\u4e86\u8fd9\u4e2a\u9501\u7ef4\u62a4\u7684\u662f\u6574\u4e2a readers \u7fa4\u4f53\u7684\u5b58\u5728\u4e0e\u5426\uff0c\u800c\u4e0d\u662f\u201c\u67d0\u4e2a reader\u201d\u7684\u5b58\u5728\u4e0e\u5426\u3002

    \u4e3a\u4ec0\u4e48 read_count \u4e0d\u4f7f\u7528\u4fe1\u53f7\u91cf\uff1f

    \u6211\u4eec\u89c2\u5bdf\u5bf9 read_count \u7684\u64cd\u4f5c\uff0c\u4e00\u5171\u6709\u4e09\u7c7b\uff1a

    1. read_count++\uff1b
    2. read_count--\uff1b
    3. read_count == k\uff1b

    \u5e76\u4e14 read_count >= 0 \u5e94\u5f53\u59cb\u7ec8\u6210\u7acb\uff0c\u6240\u4ee5\u5149\u770b\u524d\u4e24\u7c7b\uff0c\u5176\u5b9e\u5f88\u9002\u5408\u76f4\u63a5\u4f5c\u4e3a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u3002\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\u5bf9\u4fe1\u53f7\u91cf\u8fdb\u884c\u6bd4\u8f83\u64cd\u4f5c\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528 mutex \u7ef4\u62a4\u4e86 read_count\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6240\u6709\u5bf9 read_count \u7684\u64cd\u4f5c\u90fd\u662f\u5728 mutex \u7684\u4fdd\u62a4\u4e0b\u8fdb\u884c\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5176\u5b9e read_count \u548c mutex \u4e00\u8d77\u6784\u6210\u4e86\u4e00\u4e2a\u539f\u5b50\u53d8\u91cf\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-dining-philosophers-problem","title":"The Dining Philosophers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0_1","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

    \u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6709\u4e94\u4e2a\u54f2\u5b66\u5bb6\uff0cta \u4eec\u56f4\u5750\u5728\u4e00\u5f20\u5706\u684c\u65c1\uff0c\u6bcf\u4e2a\u54f2\u5b66\u5bb6\u9762\u524d\u90fd\u6709\u4e00\u7897\u7c73\u996d\uff0c\u800c ta \u4eec\u4e24\u4e24\u4e4b\u95f4\u5206\u522b\u6709\u4e00\u6839\u7b77\u5b50\u3002

    \u6bcf\u5e27\u54f2\u5b66\u5bb6\u90fd\u80fd\u9009\u62e9\u6267\u884c\u4ee5\u4e0b\u4e24\u4e2a\u884c\u4e3a\u4e4b\u4e00\uff1a

    1. \u601d\u8003\uff1b
    2. \u62ff\u7b77\u5b50\uff1b

    \u54f2\u5b66\u5bb6\u5982\u679c\u60f3\u8981\u5e72\u996d\u5c31\u5fc5\u987b\u6709\u4e24\u6839\u7b77\u5b50\uff0cta \u540c\u65f6 \u62ff\u8d77 ta \u5de6\u53f3\u4fa7\u7b77\u5b50\u65f6\uff0c\u624d\u80fd\u5e72\u996d\u3002\u663e\u7136\uff0c\u4e24\u4e2a\u54f2\u5b66\u5bb6\u4e0d\u80fd\u540c\u65f6\u62ff\u8d77\u540c\u4e00\u6839\u7b77\u5b50\uff1b\u5e72\u5b8c\u996d\u54f2\u5b66\u5bb6\u4f1a\u653e\u4e0b\u7b77\u5b50\u3002\u5047\u8bbe\u54f2\u5b66\u5bb6\u4eec\u90fd\u4e0d\u5acc\u810f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_2","title":"\u89e3\u51b3 - semaphores","text":"

    \u663e\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a\u7b77\u5b50\u662f\u5426\u53ef\u7528\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u4e0b\u9762\uff08\u6709\u95ee\u9898\u7684\uff09\u89e3\u6cd5\uff1a

    process() {\nwait(chopstick[i]);\nwait(chopstick[ (i+1) % 5 ]); // i.e. the next chopstick\n\n/* eat rice */\n\nsignal(chopstick[i]);\nsignal(chopstick[ (i+1) % 5 ]);\n}\n

    \u4e0a\u8ff0\u65b9\u6848\u5b58\u5728\u95ee\u9898\uff01

    \u8003\u8651\u8fd9\u79cd\u60c5\u51b5\uff1a\u6240\u6709\u54f2\u5b66\u5bb6\u5728\u7b2c\u4e00\u5e27\u90fd\u60f3\u8981\u5e72\u996d\uff0c\u6b64\u65f6\u5b83\u4eec\u540c\u65f6\u8fd0\u884c\u5b8c\u4e86\u7b2c 2 \u884c\uff08\u4f8b\u5982\uff0c\u540c\u65f6\u62ff\u8d77\u4e86\u53f3\u624b\u8fb9\u7684\u7b77\u5b50\uff09\uff0c\u8fd9\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\u6240\u6709\u7b77\u5b50\u90fd\u88ab\u5360\u6709\uff0c\u6ca1\u6709\u4efb\u4f55\u4e00\u4e2a\u4eba\u80fd\u7b49\u5230\u4e0b\u4e00\u4e2a\u7b77\u5b50\uff0c\u6b64\u65f6\uff0c\u54f2\u5b66\u5bb6\u4eec\u53d1\u751f\u4e86\u6b7b\u9501\u3002

    \u5bf9\u4e8e\u8fd9\u4e2a\u6b7b\u9501\uff0c\u4e66\u4e2d\u7ed9\u51fa\u4e86\u4e09\u79cd\u89e3\u51b3\u65b9\u6848\uff1a

    1. \u5141\u8bb8\u6700\u591a 4 \u4f4d\u54f2\u5b66\u5bb6\u540c\u65f6\u83b7\u53d6\u7b77\u5b50\uff1b
    2. \u54f2\u5b66\u5bb6\u5fc5\u987b\u540c\u65f6\u83b7\u53d6\u4e24\u4e2a\u7b77\u5b50\uff0c\u800c\u4e0d\u80fd\u6293\u4e00\u652f\u7b49\u4e00\u652f\uff1b
      • \u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u201c\u6293\u7b77\u5b50\u201d\u8fd9\u4ef6\u4e8b\u5e94\u5f53\u5728\u4e00\u4e2a\u4e34\u754c\u6bb5\u4e2d\u5b8c\u6210\uff1b
    3. \u5947\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u5de6\u624b\u7684\u7b77\u5b50\uff0c\u5076\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u53f3\u624b\u7684\u7b77\u5b50\uff0c\u8fd9\u6837\u4e0d\u4f1a\u4ea7\u751f\u5faa\u73af\u7b49\u5f85\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---monitors","title":"\u89e3\u51b3 - monitors","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/","title":"U2 Part 3: \u6b7b\u9501 | Deadlocks","text":"

    \u7ea6 5209 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 26 \u5206\u949f

    \u5f15\u5165

    \u6b7b\u9501\u95ee\u9898\u5e7f\u6cdb\u5b58\u5728\u4e8e\u8ba1\u7b97\u673a\u8f6f\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u800c\u6211\u4eec\u672c\u8282\u53ea\u8ba8\u8bba\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u5efa\u6a21","title":"\u6b7b\u9501\u5efa\u6a21","text":"

    \u6211\u4eec\u5728\u4e0a\u4e00\u8282\u4e2d\u5df2\u7ecf\u63d0\u5230\u4e86\u4e00\u4e2a\u6b7b\u9501\u60c5\u51b5\u3002\u672c\u8282\u6211\u4eec\u4e13\u6ce8\u4e8e\u5982\u4f55\u89e3\u51b3\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501(deadlock)\u95ee\u9898\u3002

    deadlock

    A deadlock is a situation in which every process in a set of processes is waiting for an event that can be caused only by another process in the set.

    \u5373\u5b58\u5728\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u96c6\u5408\uff0c\u5b83\u4eec\u4e92\u76f8\u7b49\u5f85\u5bf9\u65b9\u6301\u6709\u7684\u8d44\u6e90\u3002

    \u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u53eb\u6d3b\u9501(livelock)1\u7684\u4e1c\u897f\u3002

    \u6b7b\u9501\u4ea7\u751f\u4e8e\u8d44\u6e90\u7684\u4f7f\u7528\u8fc7\u7a0b\uff0c\u800c\u4e14\u901a\u5e38\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u624d\u4f1a\u53d1\u751f\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u8fd9\u79cd\u4e0d\u786e\u5b9a\u6027\uff0c\u6b7b\u9501\u95ee\u9898\u624d\u5f02\u5e38\u68d8\u624b\u3002\u4e3a\u4e86\u89e3\u51b3\u6b7b\u9501\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u7406\u89e3\u6b7b\u9501\u4ea7\u751f\u7684\u539f\u56e0\uff0c\u4ee5\u65b9\u4fbf\u5bf9\u5b83\u8fdb\u884c\u5efa\u6a21\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u63cf\u8ff0\u6b7b\u9501\u3002

    \u4ece\u8d44\u6e90\u4f7f\u7528\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7cfb\u7edf\u7684\u884c\u4e3a\u5206\u6210\u4e09\u4e2a\u90e8\u5206\uff1a

    1. \u7533\u8bf7\u8d44\u6e90\uff1b
    2. \u4f7f\u7528\u8d44\u6e90\uff1b
    3. \u91ca\u653e\u8d44\u6e90\uff1b

    \u5176\u4e2d\uff0c\u7533\u8bf7\u8d44\u6e90\u548c\u91ca\u653e\u8d44\u6e90\u901a\u5e38\u901a\u8fc7\u4e0d\u540c\u7684\u7cfb\u7edf\u8c03\u7528\u5b9e\u73b0\u3002\u800c\u90e8\u5206\u8d44\u6e90\u662f\u6709\u9650\u4e14\u4e92\u65a5\u7684\uff0c\u56e0\u800c\u5982\u679c\u5728\u7f3a\u4e4f\u8d44\u6e90\u7684\u60c5\u51b5\u4e0b\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u4ecd\u7136\u60f3\u8981\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u53ea\u80fd\u9677\u5165\u7b49\u5f85\u3002\u800c\u6b63\u5728\u7b49\u5f85\u7684\u8d44\u6e90\u4e5f\u53ef\u80fd\u6301\u6709\u4e00\u4e9b\u8d44\u6e90\uff0c\u4e00\u65e6\u6070\u597d\u51fa\u73b0\u4e86\u4e92\u76f8\u7b49\u5f85\u7684\u60c5\u51b5\uff0c\u5c31\u4f1a\u51fa\u73b0\u6b7b\u9501\u3002\u4f8b\u5982\uff0c\u4e92\u65a5\u9501\u548c\u4fe1\u53f7\u91cf\u8fd9\u4e9b\u4e1c\u897f\u5c31\u662f\u6b7b\u9501\u4ea7\u751f\u7684\u4e00\u5927\u91cd\u8981\u6765\u6e90\u3002

    \u8ba1\u7b97\u673a\u8d44\u6e90\u5206\u4e3a\u5f88\u591a\u7c7b\uff0c\u6bcf\u4e00\u7c7b\u4e2d\u53ef\u80fd\u6709\u82e5\u5e72\u5e73\u7b49\u7684\u201c\u5b9e\u4f8b(instance)\u201d\u3002\u5bf9\u4e8e\u4e00\u4e2a\u5408\u7406\u7684\u201c\u8d44\u6e90\u5206\u7c7b\u201d\u6765\u8bf4\uff0c\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u67d0\u79cd\u8d44\u6e90\u65f6\u5019\uff0c\u8fd9\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u7684\u4efb\u610f\u7a7a\u95f2\u5b9e\u4f8b\u90fd\u5e94\u5f53\u53ef\u4ee5\u88ab\u7528\u4e8e\u6ee1\u8db3\u8fd9\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u9700\u6c42\u3002

    \u5bfc\u8bfb

    \u4e0b\u9762\u4e24\u4e2a\u90e8\u5206\u5e76\u4e0d\u4f1a\u5f88\u5feb\u5c31\u88ab\u7528\u5230\uff0c\u5c24\u5176\u662f\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u662f\u88ab\u6211\u63d0\u524d\u653e\u5230\u8fd9\u91cc\u6765\u7684\uff0c\u8bfb\u8005\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u662f\u76f4\u63a5\u987a\u5e8f\u9605\u8bfb\uff0c\u8fd8\u662f\u6682\u65f6\u8df3\u8fc7\uff08\u4e4b\u540e\u7528\u5230\u7684\u65f6\u5019\u6211\u4f1a\u7ed9\u51fa\u8df3\u56de\u94fe\u63a5\uff09\u3002

    \u6211\u4e2a\u4eba\u8ba4\u4e3a\u7ed3\u6784\u4e0a\u8fd9\u6837\u5b89\u6392\u66f4\u6e05\u6670\uff0c\u4f46\u8003\u8651\u5230\u4e24\u4e2a\u5185\u5bb9\u5b58\u5728\u4e00\u5b9a\u95f4\u9694\uff0c\u6240\u4ee5\u5f80\u540e\u653e\u7f6e\u4e5f\u6709\u5f80\u540e\u653e\u7f6e\u7684\u9053\u7406\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe","title":"\u8d44\u6e90\u5206\u914d\u56fe","text":"

    \u6839\u636e\u4e0a\u9762\u7684\u63cf\u8ff0\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\uff0c\u5efa\u6a21\u6b7b\u9501\u53ef\u4ee5\u4ece\u8ba8\u8bba\u8fdb\u7a0b/\u7ebf\u7a0b\u4e0e\u8d44\u6e90\u7684\u6c42\u53d6\u5173\u7cfb\u5165\u624b\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u8d44\u6e90\u5206\u914d\u56fe(resource-allocation graph)\u6765\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\u3002

    \u9759\u6001

    \u8d44\u6e90\u5206\u914d\u56fe\u662f\u4e00\u79cd\u6709\u4e24\u7c7b\u8282\u70b9\u7684\u6709\u5411\u56fe\uff0c\u6211\u4eec\u7528\u5706\u8282\u70b9 \\(T_i\\) \u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b\uff0c\u7528\u65b9\u8282\u70b9 \\(R_j\\) \u8868\u793a\u8d44\u6e90\uff0c\u65b9\u8282\u70b9\u4e2d\u7684\u5b9e\u5fc3\u70b9\u8868\u793a\u4e00\u4e2a\u8d44\u6e90\u7c7b\u522b\u7684\u4e00\u4e2a\u5b9e\u4f8b\u3002\u540c\u65f6\uff0c\u6211\u4eec\u79f0\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b\u6307\u5411\u8d44\u6e90\u7c7b\u522b\u7684\u6709\u5411\u8fb9\u4e3a\u8bf7\u6c42\u8fb9(request edge)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6b63\u5728\u7b49\u5f85\u8fd9\u79cd\u8d44\u6e90\uff1b\u79f0\u4ece\u8d44\u6e90\u5b9e\u4f8b\u6307\u5411\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u6709\u5411\u8fb9\u4e3a\u5206\u914d\u8fb9(assignment edge)\uff0c\u8868\u793a\u8d44\u6e90 \\(R_j\\) \u88ab\u5206\u914d\u7ed9\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\)\uff0c\u5373\u76ee\u524d\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6301\u6709\u4e00\u4e2a\uff08\u4e00\u6761\u8fb9\u8868\u793a\u4e00\u4e2a\uff09\u8d44\u6e90 \\(R_j\\) \u7684\u5b9e\u4f8b\uff0c\u4f8b\u5982\u4e0b\u56fe\uff1a

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u5b58\u5728\u73af\uff0c\u662f\u7cfb\u7edf\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\u7684\u5fc5\u8981\u6761\u4ef6\u3002

    \u52a8\u6001

    \u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u4eec\u8fd8\u5c06\u770b\u5230\u4e00\u4e9b\u8d44\u6e90\u5206\u914d\u56fe\u7684\u53d8\u4f53\uff1a\u5f15\u5165 claim edge \u7684\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u4ee5\u53ca\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7b49\u5f85\u5173\u7cfb\u7684 wait for graph\u3002

    \u7531\u4e8e\u552f\u4e00\u5b9e\u4f8b\u8fd9\u4e2a\u6027\u8d28\u88ab\u7834\u574f\u540e\uff0c\u6b7b\u9501\u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e0a\u4e0d\u518d\u90a3\u4e48\u76f4\u89c2\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5f15\u5165\u65b0\u7684\u5de5\u5177\u6765\u63cf\u8ff0\u6b7b\u9501\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","title":"\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","text":"

    \u8be5\u90e8\u5206\u5185\u5bb9\u88ab\u4e66\u672c\u5b89\u6392\u5728\u6b7b\u9501\u907f\u514d\u4e2d\uff0c\u88ab\u6211\u63d0\u524d\uff0c\u53ef\u4ee5\u8003\u8651\u4e0d\u76f4\u63a5\u6df1\u5165\u800c\u662f\u7b49\u4e4b\u540e\u9047\u5230\u4e86\u518d\u770b\u3002

    \u5b89\u5168\u72b6\u6001(safe state)\u6307\u5b58\u5728\u5b89\u5168\u5e8f\u5217(safe sequence)\u7684\u72b6\u6001\uff0c\u7cfb\u7edf\u6309\u7167 safe sequence \u7684\u987a\u5e8f\u6267\u884c\u8fdb\u7a0b/\u7ebf\u7a0b\u548c\u5206\u914d\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b\u76f8\u5bf9\u5e94\u7684\uff0c\u4e0d\u662f\u5b89\u5168\u72b6\u6001\u7684\u72b6\u6001\u79f0\u4e3a\u4e0d\u5b89\u5168\u72b6\u6001(unsafe state)\u3002\u5177\u4f53\u6765\u8bf4\uff0csafe sequence \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

    safe sequence

    \u9996\u5148 high level \u5730\u8bb2\u4e00\u4e0b safe sequence \u7684\u601d\u8def\uff0csafe sequence \u4e2d\u7684\u6bcf\u4e00\u9879 \\(T_i\\) \u6240\u9700\u8981\u7684\u8d44\u6e90\uff0c\u90fd\u80fd\u901a\u8fc7\u73b0\u6709\u8d44\u6e90\u6216\u5176\u4e4b\u524d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b \\(\\forall j < i T_{j}\\) \u6267\u884c\u5b8c\u6bd5\u91ca\u653e\u7684\u8d44\u6e90\u6765\u6ee1\u8db3\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5bf9\u4e8e safe sequence \\(<T_1, T_2, \\dots, T_n>\\)\uff0c\u6211\u4eec\u5b9a\u4e49\u6bcf\u4e00\u9879\u8fd8\u9700\u8981\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(need_{i,j}\\)\u3001\u5df2\u7ecf\u88ab\u5206\u914d\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(allocated_{i,j}\\)\uff0c\u4ee5\u53ca\u8d44\u6e90 \\(R_j\\) \u4e2d\u8fd8\u7a7a\u95f2\u7684\u8d44\u6e90\u7684\u91cf \\(available_{j}\\)\uff0c\u5219\u5e94\u5f53\u6709\uff1a

    \\[ \\begin{aligned} \\forall i \\in \\{1, 2, \\dots, n\\},\\quad \\forall j \\in \\{1, 2, \\dots, m\\}, \\\\ available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j} \\geq need_{i,j} \\end{aligned} \\]

    \u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6765\u8bf4\uff0c\u5b9e\u9645\u8fd0\u884c\u65f6\u7684\u7a7a\u95f2\u8d44\u6e90\u53ef\u80fd\u6765\u81ea\u4e8e \\(allocated_{k,j}\\)\uff0c\u4f46\u8fd9\u91cc\u662f\u7528\u6765\u505a\u5224\u65ad\u7684\uff0c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5728\u7ebf\u7684\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u7528 \\(available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j}\\) \u8fd9\u4e2a\u5f0f\u5b50\u6765\u7ef4\u62a4\u6b64\u65f6 \\(T_i\\) \u7684\u6700\u5927\u53ef\u7528\u8d44\u6e90\u3002

    \u601d\u8003\u5982\u4f55\u5bfb\u627e\u4e00\u4e2a safe sequence

    \u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728\u4e4b\u540e\u6b7b\u9501\u68c0\u6d4b\u7684\u90e8\u5206\u4f1a\u7ed9\u51fa\u7b54\u6848\uff0c\u4f46\u4e0d\u59a8\u7b80\u5355\u601d\u8003\u4e00\u4e0b\u600e\u6837\u5bfb\u627e\u4e00\u4e2a safe sequence \u5462\uff1f\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\uff1f

    \u4f46\u662f\uff0csafe state \u662f\u4e00\u4e2a\u76f8\u5bf9\u8f83\u5f3a\u7684\u7ea6\u675f\uff0c\u4e0d\u5b89\u5168\u72b6\u6001\u4e0d\u4ee3\u8868\u6b7b\u9501\u4e00\u5b9a\u4f1a\u53d1\u751f\uff0c\u7528\u97e6\u6069\u56fe\u6765\u8868\u793a\u5b83\u4eec\u7684\u5173\u7cfb\u5c31\u662f\uff1a

    \u5982\u679c\u6211\u4eec\u80fd\u4fdd\u8bc1\u7cfb\u7edf\u53ea\u8fd0\u884c\u5728 safe state\uff0c\u4e5f\u5c31\u80fd\u5145\u5206\u5730\u907f\u514d\u6b7b\u9501\u7684\u53d1\u751f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u6761\u4ef6","title":"\u6b7b\u9501\u7684\u6761\u4ef6","text":"

    \u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u4e0b\u9762\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\uff1a

    1. \u4e92\u65a5(mutual exclusion)\uff1a\u6b7b\u9501\u4e2d\u7684\u8d44\u6e90\u5fc5\u987b\u662f\u975e\u5171\u4eab\u7684\uff0c\u5373\u4e00\u6b21\u53ea\u80fd\u88ab\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u4f7f\u7528\uff1b
      • \u6b63\u56e0\u4e3a\u4e92\u65a5\u8d44\u6e90\u65e0\u6cd5\u88ab\u540c\u65f6\u4f7f\u7528\uff0c\u6240\u4ee5\u9700\u8981\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u7b49\u5f85\u6301\u6709\u76ee\u6807\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u91ca\u653e\u8be5\u8d44\u6e90\u4ee5\u540e\u624d\u80fd\u4f7f\u7528\u76ee\u6807\u8d44\u6e90\uff1b
    2. \u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5728\u7b49\u5f85\u8d44\u6e90\u7684\u540c\u65f6\uff0c\u4e5f\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff1b
      • \u4e3a\u4e86\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\uff0c\u4e00\u4e2a\u7b49\u5f85\u5176\u5b83\u8d44\u6e90\uff08\u6709\u51fa\u8fb9\uff09\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff0c\u8fd9\u6837\u624d\u80fd\u8ba9\u5176\u5b83\u8d44\u6e90\u4e5f\u7b49\u5f85\u5b83\uff08\u6709\u5165\u8fb9\uff09\uff1b
      • \u8bf4\u767d\u4e86\u5c31\u662f\uff1a\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85
    3. \u975e\u62a2\u5360(no preemption)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u5728\u4f7f\u7528\u5b8c\u8d44\u6e90\u540e\u4e3b\u52a8\u91ca\u653e\u8d44\u6e90\uff0c\u5176\u6301\u6709\u7684\u8d44\u6e90\u65e0\u6cd5\u88ab\u5176\u5b83\u8fdb\u7a0b/\u7ebf\u7a0b\u62a2\u5360\uff1b
      • \u4e3a\u4e86\u4fdd\u8bc1\u7b49\u5f85\u5173\u7cfb\u4e0d\u4f1a\u88ab\u5f3a\u884c\u7834\u574f\uff1b
    4. \u5faa\u73af\u7b49\u5f85(circular wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b\u5b58\u5728\u73af\u72b6\u7684\u7b49\u5f85\u8d44\u6e90\u5173\u7cfb\uff0c\u5373 wait for graph \u4e2d\u5b58\u5728\u73af\uff1b
      • \u903b\u8f91\u4e0a\u5bfc\u81f4\u6b7b\u9501\u51fa\u73b0\u7684\u76f4\u63a5\u539f\u56e0\uff0c\u4e92\u76f8\u7b49\u5f85\u5bfc\u81f4\u6ca1\u6709\u8d44\u6e90\u4f1a\u88ab\u91ca\u653e\uff0c\u5bfc\u81f4\u6b7b\u9501\u72b6\u6001\u65e0\u6cd5\u88ab\u6253\u7834\uff1b

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u56db\u4e2a\u5173\u7cfb\u5e76\u4e0d\u5b8c\u5168\u72ec\u7acb\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u5904\u7406","title":"\u6b7b\u9501\u7684\u5904\u7406","text":"

    \u5f88\u5bb9\u6613\u8ba4\u8bc6\u5230\uff0c\u6b7b\u9501\u7684\u5371\u5bb3\u662f\u5de8\u5927\u7684\uff0c\u90a3\u4e48\u5982\u4f55\u5904\u7406\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u5462\uff1f\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\u601d\u8def\uff1a

    1. \u4e0d\u505a\u989d\u5916\u5904\u7406\uff0c\u8981\u6c42\u7a0b\u5e8f\u5458\u4fdd\u8bc1\u903b\u8f91\u4e0a\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b
    2. \u6b7b\u9501\u9884\u9632(deadlock prevention)\uff1a\u4f7f\u7528\u67d0\u79cd\u89c4\u8303\u6216\u534f\u8bae\u6765\u4fdd\u8bc1\u6b7b\u9501\u4e0d\u4f1a\u51fa\u73b0\uff1b
    3. \u6b7b\u9501\u907f\u514d(deadlock avoidance)\uff1a\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u7684\u53d1\u751f\uff1b
      • \u4e0e 2. \u7684\u6700\u4e3b\u8981\u7684\u533a\u522b\u662f\uff0c2. \u5728\u89c4\u8303\u4e0b\u7684\u6240\u6709\u884c\u4e3a\u90fd\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\u95ee\u9898\uff1b\u800c 3. \u5219\u662f\u4e0d\u7ea6\u675f\u884c\u4e3a\uff0c\u4f46\u662f\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u6267\u884c\uff0c\u5728\u7a0d\u5019\u4ecb\u7ecd\u5177\u4f53\u5185\u5bb9\u540e\u4f1a\u66f4\u5bb9\u6613\u7406\u89e3\uff1b
    4. \u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u5141\u8bb8\u6b7b\u9501\u7684\u51fa\u73b0\uff0c\u4f46\u662f\u5f53\u68c0\u6d4b\u5230\u6b7b\u9501\u65f6\uff0c\u9700\u8981\u53bb\u6d88\u9664\u6b7b\u9501\u95ee\u9898\uff1b

    \u4e8b\u5b9e\u4e0a\uff0c\u5728\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u4e00\u822c\u9009\u62e9\u4f7f\u7528\u7b2c\u4e00\u79cd\uff0c\u5373\u5c06\u95ee\u9898\u4ea4\u7ed9\u5f00\u53d1\u8005\u53bb\u89e3\u51b3\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u6765\u4ecb\u7ecd\u4e0a\u9762\u63d0\u5230\u7684\u540e\u4e09\u4e2a\u65b9\u6cd5\u4e2d\u7684\u56db\u5757\u5185\u5bb9\u3002\u5176\u4e2d\u6709\u90e8\u5206\u5185\u5bb9\u6709\u8f83\u5927\u4ea4\u96c6\uff0c\u5b83\u4eec\u53ef\u80fd\u5c5e\u4e8e\u540c\u4e00\u7eb2\u9886\u4e0b\u5728\u4e0d\u540c\u65f6\u523b\u505a\u7684\u5904\u7406\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u9884\u9632","title":"\u6b7b\u9501\u9884\u9632","text":"

    \u6b7b\u9501\u9884\u9632(deadlock prevention)\u7684\u6838\u5fc3\u601d\u8def\u662f\u7834\u574f\u6b7b\u9501\u4ea7\u751f\u7684\u5fc5\u8981\u6761\u4ef6\u3002\u7531\u4e8e\u300c\u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\u300d\uff0c\u6240\u4ee5\u6211\u4eec\u5982\u679c\u80fd\u4fdd\u8bc1\u56db\u4e2a\u6761\u4ef6\u4e2d\u67d0\u4e00\u4e2a\u4e00\u76f4\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u6b7b\u9501\u5c06\u6c38\u8fdc\u4e0d\u4f1a\u4ea7\u751f\uff0c\u800c\u65e2\u7136\u6b7b\u9501\u4e0d\u4f1a\u4ea7\u751f\uff0c\u90a3\u4e5f\u5c31\u4e0d\u9700\u8981\u53bb\u5904\u7406\u6b7b\u9501\u95ee\u9898\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5bf9\u56db\u4e2a\u5fc5\u8981\u6761\u4ef6\u9010\u4e00\u5206\u6790\uff1a

    1. \u7834\u574f\u4e92\u65a5(mutual exclusion)\uff1a
      • \u8fd9\u4e2a\u6761\u4ef6\u51e0\u4e4e\u662f\u65e0\u6cd5\u7834\u574f\u7684\uff0c\u5f88\u591a\u8d44\u6e90\u5929\u7136\u662f\u4e92\u65a5\u7684\uff1b
      • \u6709\u4e9b\u8d44\u6599\u91cc\u4e5f\u6709\u5199\u4e00\u4e9b\u65b9\u6cd5\u6765\u7834\u574f\u8fd9\u4e2a\u6761\u4ef62\uff0c\u4f46\u662f\u6211\u611f\u89c9\u8fd8\u662f\u6709\u5c40\u9650\u6027\u7684\uff0c\u53cd\u6b63\u4e66\u672c\u91cc\u8bf4\u7684\u662f\u6ca1\u6cd5\u7834\u574f\uff1b
    2. \u7834\u574f\u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a
      • \u5728\u6211\u4eec\u524d\u9762\u7684\u5206\u6790\u4e2d\u77e5\u9053\uff1a\u300c\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\u300d\uff1b
      • \u4f46\u662f\uff0c\u5982\u679c\u6211\u4eec\u53ea\u5141\u8bb8\u4e00\u4e2a\u8282\u70b9\u53ea\u80fd\u5728\u201c\u88ab\u7b49\u5f85\u201d\u548c\u201c\u7b49\u5f85\u201d\u4e2d\u4e8c\u9009\u4e00\uff0c\u4e5f\u5c31\u662f\u8bf4\u8ba9\u4e00\u4e2a\u7ebf\u7a0b/\u8fdb\u7a0b\u4e00\u65e6\u7533\u8bf7\u8d44\u6e90\u5c31\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\uff0c\u5982\u679c\u6ca1\u6cd5\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\u5c31\u91ca\u653e\u5df2\u7ecf\u7533\u8bf7\u5230\u7684\u8d44\u6e90\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\u907f\u514d\u4e86\u5faa\u73af\u7b49\u5f85\u7684\u4ea7\u751f\uff1b
    3. \u7834\u574f\u975e\u62a2\u5360(no preemption)\uff1a
      • \u901a\u8fc7\u5141\u8bb8\u8fdb\u7a0b/\u7ebf\u7a0b\u5f3a\u884c\u62a2\u5360\u53e6\u5916\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6301\u6709\u7684\u8d44\u6e90\uff0c\u53ef\u4ee5\u7834\u574f\u88ab\u52a8\u7684\u7b49\u5f85\u5173\u7cfb\uff0c\u4ece\u800c\u907f\u514d\u6b7b\u9501\uff1b
      • \u4f46\u662f\u548c\u4e92\u65a5\u5176\u5b9e\u662f\u7c7b\u4f3c\u7684\uff0c\u975e\u62a2\u5360\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u5929\u7136\u6027\uff0c\u5f3a\u884c\u62a2\u5360\u4e00\u90e8\u5206\u8d44\u6e90\u53ef\u80fd\u5bfc\u81f4\u8fdb\u884c\u5230\u4e00\u534a\u7684\u4efb\u52a1\u5931\u8d25\uff0c\u751a\u81f3\u4e00\u4e9b\u66f4\u4e25\u91cd\u7684\u540e\u679c\uff0c\u6240\u4ee5\u8fd9\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u529e\u6cd5\uff1b
      • \u800c\u4e14\uff0c\u5141\u8bb8\u201c\u62a2\u5360\u201d\u4e5f\u4f1a\u5e26\u6765\u9965\u997f\u95ee\u9898\uff0c\u603b\u4f53\u6765\u8bf4\u96be\u4ee5\u5b9e\u73b0\u800c\u4e14\u6548\u7387\u4e0d\u9ad8\uff1b
    4. \u7834\u574f\u5faa\u73af\u7b49\u5f85(circular wait)\uff1a
      • \u901a\u8fc7\u7ed9\u8d44\u6e90\u7f16\u53f7\uff0c\u89c4\u5b9a\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7279\u5b9a\u7684\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u5faa\u73af\u7b49\u5f85\u7684\u60c5\u51b5\uff1b
      • \u7531\u4e8e\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u800c\u8d44\u6e90\u7684\u7533\u8bf7\u5e94\u5f53\u662f\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u300c\u8fdb\u7a0b\u5927\u534a\u90e8\u5206\u53ea\u9700\u8981\u7528\u5230 \\(R_3\\)\uff0c\u4f46\u662f\u7531\u4e8e\u6700\u540e\u9700\u8981\u7528\u4e00\u4e0b \\(R_1\\)\uff0c\u6240\u4ee5\u5fc5\u987b\u5148\u7533\u8bf7 \\(R_1\\) \u518d\u7533\u8bf7 \\(R_3\\)\uff0c\u5bfc\u81f4\u8fc7\u7a0b\u4e2d \\(R_1\\) \u4e00\u76f4\u88ab\u6301\u6709\u4f46\u4e00\u76f4\u672a\u88ab\u4f7f\u7528\u300d\u7684\u60c5\u51b5\uff0c\u6548\u7387\u582a\u5fe7\uff1b
      • \u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u5728\u8bbe\u8ba1\u7f16\u53f7\u65f6\u5c06\u8d44\u6e90\u4f7f\u7528\u7684\u5e38\u89c4\u987a\u5e8f\u7b49\u56e0\u7d20\u7eb3\u5165\u8003\u8651\uff0c\u4f46\u7cbe\u5fc3\u8bbe\u8ba1\u7684\u8d44\u6e90\u5e8f\u53f7\u9047\u5230\u65e0\u7a77\u65e0\u5c3d\u7684\u8d44\u6e90\u7c7b\u578b\u65f6\uff0c\u53c8\u5f53\u5982\u4f55\u5462\uff1f\u7531\u4e8e\u9700\u8981\u5927\u91cf\u8bbe\u8ba1\uff0c\u6240\u4ee5\u5e26\u6765\u4e86\u8d44\u6e90\u7684\u6269\u5c55\u6027\u8f83\u5dee\u7684\u95ee\u9898\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u907f\u514d","title":"\u6b7b\u9501\u907f\u514d","text":"

    \u6b7b\u9501\u907f\u514d(deadlock avoidance)\u901a\u8fc7\u963b\u6b62\u53ef\u80fd\u8ba9\u7cfb\u7edf\u8fdb\u5165\u6b7b\u9501\u72b6\u6001\u7684\u884c\u4e3a\uff0c\u6765\u89e3\u51b3\u6b7b\u9501\u95ee\u9898\u3002\u5373\uff1a\u5982\u679c\u8fd9\u4e48\u505a\u53ef\u80fd\u5bfc\u81f4\u6b7b\u9501\uff0c\u90a3\u6211\u5c31\u4e0d\u8fd9\u4e48\u505a\uff0c\u4ee5\u6b64\u6765\u907f\u514d\u6b7b\u9501\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","title":"\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","text":"

    \u524d\u7f6e\uff1a\u8d44\u6e90\u5206\u914d\u56fe\uff01

    \u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u8f83\u4e3a\u76f4\u63a5\uff0c\u5b83\u4e0e\u5b89\u5168\u72b6\u6001\u7684\u6982\u5ff5\u65e0\u5173\uff0c\u76f4\u63a5\u68c0\u6d4b\u67d0\u79cd\u5206\u914d\u662f\u5426\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5982\u679c\u8be5\u5206\u914d\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5219\u4e0d\u8fdb\u884c\u8be5\u5206\u914d\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8be5\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002\uff08\u56e0\u4e3a\u5b83\u4ee5\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u7684\u90a3\u4e2a\u7279\u4f8b\u4e3a\u539f\u7406\uff01\uff09

    \u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u5f15\u5165\u4e86\u8d44\u6e90\u5206\u914d\u56fe\u8fd9\u4e2a\u5de5\u5177\uff0c\u73b0\u5728\u6211\u4eec\u8981\u5728\u8d44\u6e90\u5206\u914d\u56fe\u7684\u57fa\u7840\u4e0a\uff0c\u5f15\u5165\u4e00\u6761\u8bc9\u6c42\u8fb9(claim edge)\uff0c\u7528\u865a\u7ebf\u8868\u793a\uff0c\u5b83\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6307\u5411\u8d44\u6e90 \\(R_j\\)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u4f1a\u5728\u672a\u6765\u7533\u8bf7\u8d44\u6e90 \\(R_j\\)\u3002

    \u4e8e\u662f\uff0c\u5728\u52a8\u6001\u8fc7\u7a0b\u4e2d\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u6309\u7167\u5982\u4e0b\u89c4\u5219\u53cd\u5e94\u5206\u914d\u8fc7\u7a0b\uff1a

    1. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u88ab\u6dfb\u52a0\u5230\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u65f6\u5019\uff0c\u9700\u8981\u8fde\u597d\u6240\u6709\u76f8\u5173\u7684 claim edge\uff1b
      • \u8981\u6c42\u6700\u521d\u5c31\u77e5\u9053\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\uff0c\u8fd9\u4e5f\u6784\u6210\u8fd9\u7c7b\u65b9\u6cd5\u7684\u4e00\u4e2a\u5c40\u9650\u6027\uff1b

    2. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u7533\u8bf7\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5982\u679c\u8fd9\u6761\u8fb9\u53d8\u4e3a assignment edge \u4e0d\u4f1a\u5bfc\u81f4\u6210\u73af\uff0c\u5219\u5c06 claim edge \u8f6c\u5316\u4e3a\u4e00\u6761 request edge \\(T_i \\rightarrow R_j\\)\uff1b
      • \u8bf7\u6ce8\u610f\uff0c\u8fd9\u91cc\u9700\u8981\u5224\u65ad\u7684\u662f assignment edge\uff0c\u800c\u8f6c\u5316\u7684\u662f request edge\uff1b

    3. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u83b7\u5f97\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 request edge \u8f6c\u5316\u4e3a\u4e00\u6761 assignment edge \\(R_j \\rightarrow T_i\\)\uff1b
    4. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u91ca\u653e\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 assignment edge \u5220\u53bb\uff1b

    \u6211\u4eec\u5728\u4e0a\u9762\u4e5f\u8bf4\u4e86\uff1a\u300c\u8be5\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u300d\uff0c\u90a3\u4e48\u5982\u4f55\u89e3\u9664\u8fd9\u4e2a\u9650\u5236\u5462\uff1f\u8be5\u95ee\u9898\u6211\u4eec\u65e9\u5728\u8d44\u6e90\u5206\u914d\u56fe\u5c0f\u8282\u5c31\u5df2\u7ecf\u8ba8\u8bba\uff0c\u6211\u4eec\u4f7f\u7528\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u6765\u63cf\u8ff0\u4e00\u4e2a\u7ea6\u675f\u8f83\u5f3a\u7684\u3001\u4e0d\u4f1a\u4ea7\u751f\u6b7b\u9501\u7684\u72b6\u6001\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u94f6\u884c\u5bb6\u7b97\u6cd5","title":"\u94f6\u884c\u5bb6\u7b97\u6cd5","text":"

    \u524d\u7f6e\uff1a\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\uff01

    \u94f6\u884c\u5bb6\u7b97\u6cd5(Banker's algorithm)\u5f25\u8865\u4e86\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u7684\u7f3a\u9677\uff0c\u5b83\u652f\u6301\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e0d\u6b62\u4e00\u4e2a\u7684\u60c5\u51b5\uff0c\u4f46\u662f\u6548\u7387\u4e0d\u5982\u5206\u914d\u56fe\u7b97\u6cd5\u3002\u7c7b\u4f3c\u4e8e\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u9700\u8981\u5728\u6700\u5f00\u59cb\u7ed9\u51fa\u6240\u6709 claim edge\uff0c\u94f6\u884c\u5bb6\u7b97\u6cd5\u8981\u6c42\u6bcf\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7ed9\u51fa\u6267\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u8981\u7684\u5404\u7c7b\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff0c\u540c\u65f6\u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u4ee5\u52a8\u6001\u5730\u8ba1\u7b97\u5b89\u5168\u72b6\u6001\u3002High level \u5730\u6765\u8bb2\uff0c\u5c31\u662f\u9700\u8981\u52a8\u6001\u5730\u68c0\u6d4b\u67d0\u4e2a\u8d44\u6e90\u7533\u8bf7\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5982\u679c\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5219\u7b49\u5f85\u8d44\u6e90\u8db3\u591f\u518d\u5206\u914d\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u9700\u8981\u7ef4\u62a4\u8fd9\u4e9b\u4e1c\u897f\uff08\u5047\u8bbe\u95ee\u9898\u4e2d\u6709 n \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u548c m \u79cd\u8d44\u6e90\uff09\uff1a

    data structure

    \u94f6\u884c\u5bb6\u7b97\u6cd5\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u662f\u5b89\u5168\u7b97\u6cd5(safety algorithm)\u548c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5(resource request algorithm)\u3002\u524d\u8005\u68c0\u6d4b\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u540e\u8005\u4ee5\u524d\u8005\u4e3a\u57fa\u7840\uff0c\u5224\u65ad\u662f\u5426\u5141\u8bb8\u5f53\u524d\u8d44\u6e90\u8bf7\u6c42\u53d1\u751f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u7b97\u6cd5","title":"\u5b89\u5168\u7b97\u6cd5","text":"

    \u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u5bfb\u627e\u662f\u5426\u5b58\u5728\u4e00\u4e2a\u5b89\u5168\u5e8f\u5217\u6765\u5224\u65ad\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u5b89\u5168\u72b6\u6001\u3002\u5148\u524d\u5728\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u4e00\u8282\u4e2d\u6211\u7559\u4e0b\u8fc7\u4e00\u4e2a\u95ee\u9898\uff1a\u300c\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\u300d\uff0c\u7b54\u6848\u662f\u53ef\u4ee5\uff0c\u6211\u4eec\u4ee5\u4e00\u79cd\u8fd1\u4f3c\u8d2a\u5fc3\u5730\u7b56\u7565\u53bb\u6a21\u62df\u5b89\u5168\u5e8f\u5217\u7684\u8d44\u6e90\u5206\u914d\u8fc7\u7a0b\uff0c\u5c31\u53ef\u4ee5\u5224\u65ad\u662f\u5426\u5b58\u5728\u5b89\u5168\u7b56\u7565\u3002

    \u56e0\u4e3a\u5bf9\u4e8e\u6240\u6709\u53ef\u4ee5\u4f5c\u4e3a\u5b89\u5168\u72b6\u6001\u4e0b\u4e00\u9879\u7684 \\(T_{i_k}\\)\uff0c\u7531\u4e8e\u6267\u884c\u5b83\u4eec\u540e\uff0c\u7b49\u5230\u8fdb\u7a0b/\u7ebf\u7a0b\u8fd0\u884c\u7ed3\u675f\uff0c\u4f59\u4e0b\u7684\u8d44\u6e90\u53ea\u4f1a\u66f4\u591a\u4e0d\u4f1a\u66f4\u5c11\uff08\u5bf9\u6bd4\u8fd0\u884c\u524d\u540e\uff0c\u4f1a\u591a\u51fa\u6765\u539f\u672c\u5206\u914d\u7ed9\u8fd9\u4e9b\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u90a3\u4e9b\u8d44\u6e90\uff09\uff0c\u56e0\u800c\u53ea\u8981\u7b26\u5408\u6761\u4ef6\uff0c\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e0b\u4e00\u9879\uff0c\u6b65\u6b65\u53ef\u884c\u6700\u7ec8\u4e5f\u53ef\u884c\u3002

    \u8bf7\u4ed4\u7ec6\u601d\u8003\u8fd9\u4e2a\u8fc7\u7a0b\u7684\u5408\u7406\u6027\uff0c\u5c24\u5176\u662f\u6211\u4e3a\u4ec0\u4e48\u5728\u8fd9\u91cc\u63d0\u5230\u4e86\u201c\u8d2a\u5fc3\u201d\uff0c\u6211\u611f\u89c9\u6211\u67e5\u5230\u7684\u8d44\u6599\u51e0\u4e4e\u90fd\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5b89\u5168\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

    algorithm

    1. \u521d\u59cb\u5316\uff1a
      • Work[m] <- Available[m]\uff0cWork[m] \u8868\u793a\u5f53\u524d\u72b6\u6001\u7684\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
      • Finish[n] <- false\uff0c\u8868\u793a\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u8fd8\u6ca1\u8fd0\u884c\uff1b
    2. \u627e\u5230\u4e00\u4e2a i \u4f7f\u5f97\uff1a
      • (Finish[i] == false) && (Need[i] <= Work)\uff08\u6ce8\u610f\uff0c\u7b2c\u4e8c\u4e2a term \u662f vector \u6bd4\u8f83\uff0c\u8981\u6c42\u6bcf\u4e00\u9879\u90fd\u6ee1\u8db3\uff09\uff0c\u6ee1\u8db3\u8be5\u6761\u4ef6\u8868\u793a\u8be5\u8fdb\u7a0b/\u7ebf\u7a0b\u6240\u9700\u8981\u7684\u8d44\u6e90\u53ef\u4ee5\u88ab\u6ee1\u8db3\uff1b
      • \u5982\u679c\u6ca1\u6709\u8fd9\u4e2a i\uff0c\u5219 goto 3.\uff1b
      • \u5982\u679c\u6709\u8fd9\u4e2a i\uff0c\u5219\u66f4\u65b0\u72b6\u6001\uff1a
        • Finish[i] <- true\uff0c\u8868\u793a\u8be5\u8fdb\u7a0b/\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\uff1b
        • Work <- Work + Allocation[i]\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\u540e\u91ca\u653e\u8d44\u6e90\uff1b
        • repeat 2.\uff1b
    3. \u5982\u679c\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u6ee1\u8db3 Finish[i] == true\uff0c\u5219\u7cfb\u7edf\u5904\u4e8e\u5b89\u5168\u72b6\u6001\uff0c\u5426\u5219\u7cfb\u7edf\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","title":"\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","text":"

    \u6709\u4e86\u5b89\u5168\u7b97\u6cd5\u4f5c\u4e3a\u57fa\u7840\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5728\u5b83\u7684\u57fa\u7840\u4e0a\uff0c\u5224\u65ad\u67d0\u4e2a\u8d44\u6e90\u8bf7\u6c42\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u8fdb\u800c\u5f97\u5230\u5b8c\u6574\u7684\u94f6\u884c\u5bb6\u7b97\u6cd5\u4e86\u3002

    \u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u6a21\u62df\u7684\u65b9\u5f0f\u5224\u65ad\u4e00\u4e2a\u72b6\u6001\u662f\u4e0d\u662f\u5b89\u5168\u72b6\u6001\uff0c\u800c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u5219\u662f\u8d1f\u8d23\u7ef4\u62a4\u8fd9\u4e2a\u201c\u72b6\u6001\u201d\uff0c\u5e76\u6839\u636e\u5b89\u5168\u7b97\u6cd5\u8fd4\u56de\u7684\u7ed3\u679c\u6765\u5224\u65ad\u67d0\u4e2a\u8bf7\u6c42\u662f\u5426\u5e94\u5f53\u88ab\u63a5\u53d7\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

    algorithm

    1. \u7528 Request[n][m] \u6765\u7ef4\u62a4\u8fdb\u7a0b/\u7ebf\u7a0b\u60f3\u8981\u8bf7\u6c42\u7684\u8d44\u6e90\u7684\u6570\u91cf\uff1b
    2. \u5728\u6bcf\u4e2a\u8bf7\u6c42\u4e2d\uff0c\u5982\u679c Request[i] <= Need[i]\uff08\u6ce8\u610f\u5411\u91cf\u6bd4\u8f83\uff09\uff0c\u5219\u7ee7\u7eed\uff1b\u5426\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u56e0\u4e3a\u6b64\u65f6\u5b83\u8bf7\u6c42\u7684\u91cf\u8d85\u8fc7\u4e86\u5b83\u9884\u671f\u9700\u8981\u7684\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff1b
    3. \u5982\u679c Request[i] <= Available\uff0c\u8bf4\u660e\u8d44\u6e90\u8db3\u591f\uff0c\u7ee7\u7eed\uff1b\u5426\u5219\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u7b49\u5f85\u8db3\u591f\u7684\u8d44\u6e90\uff1b
    4. \u5047\u8bbe\u7cfb\u7edf\u5206\u914d\u4e86\u8d44\u6e90\uff0c\u5219\u9700\u8981\u66f4\u65b0\u6a21\u62df\u72b6\u6001\uff08\u6b64\u65f6\u8d44\u6e90\u8fd8\u672a\u5b9e\u9645\u5206\u914d\uff01\u53ea\u662f\u4e3a\u4e86\u4ece\u6570\u503c\u4e0a\u6d4b\u8bd5\u662f\u5426\u5b89\u5168\u800c\u4e34\u65f6\u6784\u9020\u7684\u865a\u62df\u5c40\u9762\uff01\uff09\uff1a
      • Available <- Available - Request[i]\uff0c\u5373\u6a21\u62df\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
      • Allocation[i] <- Allocation[i] + Request[i]\uff0c\u5373\u6a21\u62df\u5206\u914d\u5f97\u5230\u7684\u8d44\u6e90\uff1b
      • Need[i] <- Need[i] - Request[i]\uff0c\u5373\u6a21\u62df\u9884\u671f\u9700\u6c42\u91cf\uff1b
    5. \u4f7f\u7528\u5b89\u5168\u7b97\u6cd5\u5224\u65ad\uff1a
      • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u5b89\u5168\u7684\uff0c\u5219\u8bf7\u6c42\u88ab\u63a5\u53d7\uff1b
      • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u4e0d\u5b89\u5168\u7684\uff0c\u8bf7\u6c42\u4e0d\u88ab\u5141\u8bb8\uff0c\u540c\u65f6\u9700\u8981\u5c06\u8fd9\u4e9b\u77e9\u9635\u56de\u6eda\u5230\u6a21\u62df\u4e4b\u524d\u7684\u72b6\u60013\uff1b

    Limitations

    Like the other algorithms, the Banker's algorithm has some limitations when implemented.

    Specifically, it needs to know how much of each resource a process could possibly request. In most systems, this information is unavailable, making it impossible to implement the Banker's algorithm.

    Also, it is unrealistic to assume that the number of processes is static since in most systems the number of processes varies dynamically.

    Moreover, the requirement that a process will eventually release all its resources (when the process terminates) is sufficient for the correctness of the algorithm, however it is not sufficient for a practical system. Waiting for hours (or even days) for resources to be released is usually not acceptable.

    From Banker's algorithm | Wikipedia.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u68c0\u6d4b","title":"\u6b7b\u9501\u68c0\u6d4b","text":"

    \u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u642d\u914d\u4f7f\u7528\uff0c\u5176\u6838\u5fc3\u601d\u8def\u662f\u4e0d\u5bf9\u8d44\u6e90\u8bf7\u6c42\u505a\u8fc7\u591a\u7ea6\u675f\uff0c\u800c\u662f\u5728\u68c0\u6d4b\u5230\u7cfb\u7edf\u4e2d\u5b58\u5728\u6b7b\u9501\u65f6\uff0c\u53bb\u5904\u7406\u6b7b\u9501\u3002\u5176\u4e2d\u7684\u7b2c\u4e00\u6b65\u5c31\u662f\u68c0\u6d4b\u5230\u6b7b\u9501\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","text":"

    \u7b49\u5f85\u56fe(wait-for graph)\u662f\u8d44\u6e90\u5206\u914d\u56fe\u7684\u5316\u7b80\uff0c\u8be5\u7b97\u6cd5\u53ea\u80fd\u89e3\u51b3\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002

    \u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\uff0c\u53ea\u8981\u6709\u73af\u5c31\u4f1a\u6709\u6b7b\u9501\uff0c\u800c\u53ea\u8981\u80fd\u68c0\u6d4b\u8fd9\u4e2a\u73af\uff0c\u5c31\u80fd\u68c0\u6d4b\u6b7b\u9501\u3002\u800c\u5b9e\u9645\u7684\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u8d44\u6e90\u548c\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\u4ece\u662f\u6210\u5bf9\u51fa\u73b0\u5728\u73af\u4e2d\uff0c\u800c wait-for graph \u5219\u662f\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\uff08\u8bf7\u8bfb\u8005\u601d\u8003\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u8fd9\u6837\uff09\u4ee5\u51cf\u5c0f\u70b9\u7684\u6570\u91cf\uff0c\u63d0\u9ad8\u6548\u7387\u3002

    \u6211\u4eec\u5c06\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u7684\u8d44\u6e90\u5206\u914d\u56fe\u6539\u4e3a\u7b49\u5f85\u56fe\uff0c\u5373\u4e3a\uff1a

    \u901a\u8fc7\u52a8\u6001\u5730\u7ef4\u62a4\u8fd9\u4e2a wait-for graph \u548c\u5b9a\u671f\u8c03\u7528\u4e00\u4e2a\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u6765\u5b9e\u73b0\u6b7b\u9501\u68c0\u6d4b\u3002

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u5c31\u7b97\u629b\u5f00\u5b83\u53ea\u652f\u6301\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4ec5\u80fd\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u7f3a\u70b9\uff0c\u9891\u7e41\u5730\u7ef4\u62a4\u56fe\u548c\u5b9a\u671f\u8c03\u7528\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u90fd\u4f1a\u5e26\u6765\u8f83\u5927\u7684\u5f00\u9500\u3002\u6240\u4ee5\uff0c\u8be5\u65b9\u6cd5\u5176\u5b9e\u8868\u73b0\u5e76\u4e0d\u7406\u60f3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","text":"

    \u4ece\u5355\u5b9e\u4f8b\u5411\u591a\u5b9e\u4f8b\u7684\u8fc1\u79fb\u601d\u8def\u548c\u6b7b\u9501\u907f\u514d\u4e2d\u4f7f\u7528\u7684\u8fc1\u79fb\u601d\u8def\u662f\u7c7b\u4f3c\u7684\uff0c\u4f7f\u7528\u5b89\u5168\u72b6\u6001\u6765\u5224\u65ad\u800c\u975e\u627e\u73af\u3002\u56e0\u800c\u8fd9\u4e2a\u7b97\u6cd5\u7684\u5b9e\u73b0\u548c\u94f6\u884c\u5bb6\u7b97\u6cd5\u7684\u5b9e\u73b0\u4e5f\u662f\u7c7b\u4f3c\u7684\uff08\u4f46\u662f\u6709\u4e00\u5b9a\u533a\u522b\uff0c\u53c2\u8003\u4e66\u672c P339\uff09\uff0cjjm \u8868\u793a\u4e00\u822c\u53ea\u8003\u94f6\u884c\u5bb6\u7b97\u6cd5\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u4e5f\u4e0d\u8bb2\u8fd9\u4e2a\u7b97\u6cd5\u4e86\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u89e3\u9664","title":"\u6b7b\u9501\u89e3\u9664","text":"

    \u6b7b\u9501\u89e3\u9664(deadlock recovery)\u867d\u7136\u662f \"recovery\"\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u7834\u574f\u6b7b\u9501\u800c\u5e76\u6ca1\u6709\u6062\u590d\u5230\u4e00\u4e2a\u6b7b\u9501\u4e0d\u5b58\u5728\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u7ffb\u8bd1\u4e3a\u89e3\u9664\u3002\u5bf9\u4e8e\u5df2\u7ecf\u4ea7\u751f\u7684\u6b7b\u9501\uff0c\u81f3\u5c11\u5f97\u6b7b\u4e00\u4e2a\uff0c\u6211\u4eec\u9700\u8981\u4f5c\u51fa\u51b3\u65ad\u3002\u4e66\u672c\u4e2d\u63d0\u5230\u4e86\u7ec8\u6b62\u548c\u8d44\u6e90\u62a2\u5360\u4e24\u79cd\u65b9\u6cd5\uff0c\u4f46\u6211\u8ba4\u4e3a\u672c\u8d28\u4e0a\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u5e76\u5217\u5730\u7ed9\u51fa\uff1a

    1. \u90fd\u522b\u6d3b\uff0c\u6740\u6b7b\u6240\u6709\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\uff1b
      • \u5f00\u9500\u5f88\u5927\uff0c\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u5de5\u4f5c\u90fd\u76f8\u5f53\u4e8e\u767d\u8d39\u4e86\uff0c\u800c\u4e14\u5e76\u4e0d\u662f\u968f\u968f\u4fbf\u4fbf\u5c31\u80fd\u6740\u7684\uff1b
    2. \u4e00\u4e2a\u4e00\u4e2a\u6740\uff0c\u6740\u5230\u6ca1\u6709\u6b7b\u9501\uff1b
      • \u4ee5\u7279\u5b9a\u987a\u5e8f\u6740\u8fd9\u4e9b\u8fdb\u7a0b\uff0c\u53ef\u4ee5\u4f18\u5316\u8868\u73b0\uff0c\u4f8b\u5982\u6309\u7167\u4f18\u5148\u7ea7\u4ece\u4f4e\u5230\u9ad8\u6740\uff1b
    3. \u7559\u6d3b\u547d\uff0c\u4f46\u662f\u9700\u8981\u56de\u6eda\u90e8\u5206\u8fdb\u7a0b\uff0c\u5f3a\u884c\u62a2\u5360\u5360\u6709\u7684\u8d44\u6e90\uff1b
      • \u5f88\u96be\u754c\u5b9a\u5e94\u8be5\u56de\u6eda\u5230\u54ea\u91cc\uff0c\u56de\u6eda\u4e5f\u96be\u5b9e\u73b0\uff0c\u4e3a\u4e86\u56de\u6eda\u4e5f\u9700\u8981\u5b58\u50a8\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u5f00\u9500\u5f88\u5927\uff1b
      • \u53c8\u770b\u5230\u62a2\u5360\u8fd9\u4e24\u4e2a\u5b57\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e5f\u4f1a\u6709\u9965\u997f\u95ee\u9898\uff0c\u89e3\u51b3\u65b9\u6cd5\u4e5f\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u901a\u8fc7\u8003\u8651\u4f18\u5148\u7ea7\uff0c\u5e76\u5c06\u88ab\u62a2\u5360\uff08\u88ab\u8feb\u56de\u6eda\uff09\u7684\u6b21\u6570\u7eb3\u5165\u4f18\u5148\u7ea7\u7684\u8003\u8651\u8303\u7574\u3002
    1. What's the difference between deadlock and livelock? \u21a9

    2. Deadlock Prevention \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u4f7f\u7528\u5047\u8131\u673a(spooling)\u7684\u65b9\u6cd5\u6765\u89e3\u9664\u6253\u5370\u673a\u8d44\u6e90\u7684\u4e92\u65a5\u6027\u3002\u00a0\u21a9

    3. Banker's Algorithm in Operating System (OS) \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u8981\u6062\u590d\u77e9\u9635\u72b6\u6001\uff0c\u4e66\u4e0a\u8c8c\u4f3c\u6ca1\u5199\u8fd9\u4e2a\u3002\u00a0\u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/","title":"U3 Part 1: \u5185\u5b58\u8bbe\u8ba1 | Memory Design","text":"

    \u7ea6 9173 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 46 \u5206\u949f

    \u5bfc\u8bfb

    \u5185\u5b58\u662f\u8ba1\u7b97\u673a\u4e2d\u6700\u91cd\u8981\u7684\u90e8\u4ef6\u4e4b\u4e00\uff0c\u5728 Von Neumann \u67b6\u6784\u4e2d\uff0c\u5185\u5b58\u662f\u7a0b\u5e8f\u548c\u6570\u636e\u7684\u8f7d\u4f53\uff0c\u4e5f\u662f CPU \u8bbf\u95ee\u6570\u636e\u7684\u91cd\u8981\u9014\u5f84\uff08CPU \u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u7684\u5b58\u50a8\u7ed3\u6784\u4e00\u822c\u53ea\u6709\u5bc4\u5b58\u5668\u548c\u5185\u5b58\uff0c\u4ee5\u53ca\u4f5c\u4e3a\u4e2d\u4ecb\u7684\u7f13\u5b58\uff09\u3002\u6b64\u5916\uff0cCPU \u6267\u884c\u7684\u6307\u4ee4(instructions)\uff0c\u53ea\u6709\u5728\u7269\u7406\u5185\u5b58\u4e2d\u65f6\u624d\u80fd\u88ab\u6267\u884c\u3002

    \u800c\u6211\u4eec\u77e5\u9053\uff0c\u5185\u5b58 I/O \u901a\u5e38\u662f\u6bd4\u8f83\u6162\u7684\uff0c\u5982\u679c\u518d\u8fdb\u4e00\u6b65\u5bf9\u5185\u5b58\u4e4b\u5916\u7684\u5b58\u50a8\u8bbe\u5907\u505a I/O\uff08\u5185\u5b58\u6bd5\u7adf\u4e5f\u662f\u6709\u9650\u7684\uff09\uff0c\u5219\u4f1a\u66f4\u6162\u3002\u56e0\u6b64\uff0c\u5c31\u50cf\u69a8\u5e72 CPU \u7684\u6027\u80fd\u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u8981\u5c3d\u53ef\u80fd\u5730\u5229\u7528\u597d\u5185\u5b58\u3002

    \u9664\u4e86\u6027\u80fd\uff0c\u5185\u5b58\u8fd8\u9700\u8981\u5b9e\u73b0\u4e00\u4e9b\u4fdd\u62a4\u63aa\u65bd\uff0c\u9632\u6b62\u7a0b\u5e8f\u8d8a\u754c\u8bbf\u95ee\u5185\u5b58\uff0c\u6216\u8005\u7a0b\u5e8f\u4e4b\u95f4\u4e92\u76f8\u5e72\u6270\u3002

    \u540c\u65f6\uff0c\u7531\u4e8e\u8ba1\u7b97\u673a\u8fd0\u884c\u7a0b\u5e8f\u662f\u4e00\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u800c\u6211\u4eec\u4f7f\u7528\u5185\u5b58\u5f80\u5f80\u9700\u8981\u7684\u662f\u8fde\u7eed\u7684\u3001\u5927\u5757\u7684\u5185\u5b58\uff0c\u6240\u4ee5\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u5982\u4f55\u4fdd\u8bc1\u5185\u5b58\u7684\u5206\u5e03\u662f\u76f8\u5bf9\u5b8c\u6574\u7684\uff0c\u4e5f\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u95ee\u9898\u3002

    \u5728\u5f15\u5165\u5e27 & \u9875\u8bbe\u8ba1\u540e\uff0c\u6211\u4eec\u4e0d\u518d\u9700\u8981\u4ee5\u8fdb\u7a0b\u4e3a\u5355\u4f4d\u53bb\u89c2\u5bdf\u5185\u5b58\uff0c\u800c\u662f\u4ee5\u9875\u4e3a\u5355\u4f4d\uff0c\u8fd9\u610f\u5473\u7740\u7c92\u5ea6\u66f4\u5c0f\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u52a0\u7075\u6d3b\u5730\u53bb\u7ba1\u7406\u5185\u5b58\u3002

    \u5728\u4ea4\u6362\u6280\u672f\u7684\u652f\u6301\u4e0b\uff0c\u4e0d\u662f\u6b63\u5728\u88ab\u4f7f\u7528\u7684\u865a\u62df\u5185\u5b58\u53ef\u4ee5\u5b9e\u9645\u88ab\u6620\u5c04\u5230\u7269\u7406\u5185\u5b58\u6216\u540e\u5907\u5b58\u50a8\u4e2d\u3002\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u4f1a\u5c06\u201c\u6682\u65f6\u7528\u4e0d\u5230\u201d\u7684\u4e1c\u897f\u6682\u653e\u5728\u540e\u5907\u5b58\u50a8\u4e2d\uff0c\u800c\u5728\u9700\u8981\u7684\u65f6\u5019\u5c06\u5b83\u4eec\u6362\u5230\u7269\u7406\u5185\u5b58\u4e2d\u3002\u800c\u5728\u4e0b\u4e00\u8282\uff0c\u6211\u4eec\u8981\u5173\u6ce8\u7684\u91cd\u8981\u95ee\u9898\u5c31\u662f\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u5177\u4f53\u5982\u4f55\u6267\u884c\u3001\u5982\u4f55\u4f18\u5316\uff0c\u4e5f\u5c31\u662f\u4ecb\u7ecd demand paging \u7cfb\u7edf\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5185\u5b58\u57fa\u7840\u8bbe\u8ba1","title":"\u5185\u5b58\u57fa\u7840\u8bbe\u8ba1","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5185\u5b58\u4fdd\u62a4","title":"\u5185\u5b58\u4fdd\u62a4","text":"

    \u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u5728\u5185\u5b58\u4e2d\u90fd\u5e94\u5f53\u6709\u4e00\u5757\u8fde\u7eed\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u800c\u5355\u4e2a\u8fdb\u7a0b\u5e94\u5f53\u53ea\u80fd\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u800c\u4e0d\u80fd\u8bbf\u95ee\u5176\u4ed6\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\u3002\u8fd9\u5c31\u662f\u5185\u5b58\u4fdd\u62a4\u7684\u57fa\u672c\u8981\u6c42\u3002

    \u6211\u4eec\u901a\u8fc7\u5f15\u5165 base \u548c limit \u4e24\u4e2a\u5bc4\u5b58\u5668\u6765\u5b9e\u73b0\u6846\u5b9a\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u5f53\u524d\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\u59cb\u4e8e base \u5bc4\u5b58\u5668\u4e2d\u5b58\u50a8\u7684\u5730\u5740\uff0c\u7ec8\u4e8e base + limit \u5bf9\u5e94\u7684\u5730\u5740\uff0c\u5373\uff1a

    A base and a limit register define a logical address space. (left) Hardware address protection with base and limit registers. (right)

    \u4e24\u4e2a\u7279\u6b8a\u7684\u5bc4\u5b58\u5668\u53ea\u80fd\u7531\u5185\u6838\u901a\u8fc7\u7279\u5b9a\u7684\u7279\u6743\u6307\u4ee4\u6765\u4fee\u6539\u3002\u800c\u5185\u5b58\u7684\u4fdd\u62a4\uff0c\u901a\u8fc7\u5185\u5b58\u7ba1\u7406\u5355\u5143(memory management unit, MMU)\u6765\u5b9e\u73b0\uff0cMMU \u4f1a\u5728\u6bcf\u6b21\u8bbf\u95ee\u5185\u5b58\u65f6\uff0c\u68c0\u67e5\u8bbf\u95ee\u7684\u5730\u5740\u662f\u5426\u5728 base \u548c limit \u5bc4\u5b58\u5668\u6240\u5b9a\u4e49\u7684\u8303\u56f4\u5185\uff0c\u5982\u679c\u4e0d\u5728\uff0c\u5219\u4f1a\u4ea7\u751f\u4e00\u4e2a\u5f02\u5e38\uff0c\u4e2d\u65ad\u7a0b\u5e8f\u7684\u6267\u884c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5730\u5740\u7ed1\u5b9a","title":"\u5730\u5740\u7ed1\u5b9a","text":"

    \u6211\u4eec\u5728\u603b\u89c8#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668\u4e2d\u63d0\u5230\u8fc7\uff0c\u9759\u6001\u7684\u4ee3\u7801\u7a0b\u5e8f\u6210\u4e3a\u52a8\u6001\u7684\u8fdb\u7a0b\uff0c\u53ef\u80fd\u4f1a\u9700\u8981\u56fe\u4e2d\u8fd9\u4e48\u51e0\u6b65\u3002

    \u5177\u4f53\u6765\u8bf4\u6709\u4e09\u4e2a\u9636\u6bb5\uff1a\u7f16\u8bd1\u65f6\u95f4(compile time)\uff0c\u88c5\u8f7d\u65f6\u95f4(load time)\u548c\u6267\u884c\u65f6\u95f4(execution time)\u3002\u800c\u5185\u5b58\u4e5f\u5206\u4e09\u79cd\uff1a\u7b26\u53f7\u5730\u5740(symbolic addresses)\uff0c\u53ef\u91cd\u5b9a\u4f4d\u5730\u5740(relocatable addresses)\uff08\u7c7b\u4f3c\u4e8e\u4e00\u79cd\u76f8\u5bf9\u91cf\uff09\u548c\u7edd\u5bf9\u5730\u5740(absolute addresses)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u52a8\u6001\u88c5\u8f7d","title":"\u52a8\u6001\u88c5\u8f7d","text":"

    \u7531\u4e8e\u5f15\u5165\u4e86\u591a\u9053\u6280\u672f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u4e2d\u53ef\u80fd\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002\u4e3a\u4e86\u66f4\u52a0\u7075\u6d3b\u5730\u4f7f\u7528\u5185\u5b58\u8d44\u6e90\uff0c\u6211\u4eec\u5f15\u5165\u52a8\u6001\u88c5\u8f7d(dynamic loading)\u673a\u5236\u3002

    \u52a8\u6001\u88c5\u8f7d\u6307\u7684\u662f\uff0c\u5982\u679c\u4e00\u4e2a\u4f8b\u7a0b\u8fd8\u6ca1\u6709\u88ab\u8c03\u7528\uff0c\u90a3\u4e48\u5b83\u4f1a\u4ee5\u53ef\u91cd\u5b9a\u4f4d\u88c5\u8f7d\u683c\u5f0f(relocatable load format)5\u5b58\u50a8\u5728\u78c1\u76d8\u4e0a\uff1b\u5f53\u5b83\u88ab\u8c03\u7528\u65f6\uff0c\u5c31\u52a8\u6001\u5730\u88ab\u88c5\u8f7d\u5230\u5185\u5b58\u4e2d\u3002\u5373\uff0c\u4f8b\u7a0b\u53ea\u6709\u5728\u9700\u8981\u7684\u65f6\u5019\u624d\u88ab\u8f7d\u5165\u5185\u5b58\u3002\u5bf9\u4e8e\u5927\u91cf\u4f46\u4e0d\u7ecf\u5e38\u9700\u8981\u8bbf\u95ee\u7684\u4ee3\u7801\u7247\u6bb5\uff08\u4f8b\u5982\u9519\u8bef\u5904\u7406\u4ee3\u7801\uff09\uff0c\u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u8282\u7701\u5927\u91cf\u7684\u5185\u5b58\u7a7a\u95f4\u2014\u2014\u8fd9\u79cd\u53ea\u6709\u5076\u5c14\u4f1a\u88ab\u8bbf\u95ee\u7684\u4ee3\u7801\u4e5f\u4e0d\u5e94\u5f53\u957f\u4e45\u5730\u5360\u6709\u5185\u5b58\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u52a8\u6001\u88c5\u8f7d\u5e76\u4e0d\u9700\u8981\u64cd\u4f5c\u7cfb\u7edf\u7684\u652f\u6301\uff0c\u800c\u662f\u7531\u5f00\u53d1\u8005\u6765\u8d1f\u8d23\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u52a8\u6001\u94fe\u63a5\u548c\u5171\u4eab\u5e93","title":"\u52a8\u6001\u94fe\u63a5\u548c\u5171\u4eab\u5e93","text":"

    \u6211\u4eec\u5728\u603b\u89c8#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668\u4e2d\u5df2\u7ecf\u8c08\u8bba\u8fc7\u52a8\u6001\u94fe\u63a5\u4e86\u3002\u800c\u80fd\u88ab\u52a8\u6001\u94fe\u63a5\u7684\u5e93\u5c31\u88ab\u79f0\u4e3a\u52a8\u6001\u94fe\u63a5\u5e93(dynamically linked libraries, DDLs)\uff0c\u7531\u4e8e\u5b83\u4eec\u53ef\u4ee5\u88ab\u591a\u4e2a\u8fdb\u7a0b\u5171\u4eab\uff0c\u6240\u4ee5\u4e5f\u88ab\u79f0\u4e3a\u5171\u4eab\u5e93(shared libraries)\u3002

    \u533a\u522b\u4e8e\u52a8\u6001\u88c5\u8f7d\uff0c\u52a8\u6001\u94fe\u63a5\u9700\u8981\u64cd\u4f5c\u7cfb\u7edf\u7684\u652f\u6301\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u8fde\u7eed\u5206\u914d\u53ca\u5176\u95ee\u9898","title":"\u8fde\u7eed\u5206\u914d\u53ca\u5176\u95ee\u9898","text":"

    \u5305\u62ec\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\uff0c\u5185\u5b58\u4e2d\u80fd\u5b58\u4e0b\u591a\u5c11\u4e1c\u897f\uff0c\u51b3\u5b9a\u4e86\u64cd\u4f5c\u7cfb\u7edf\u80fd\u540c\u65f6\u8fd0\u884c\u591a\u5c11\u8fdb\u7a0b\u3002\u800c\u8fdb\u7a0b\u9700\u8981\u7684\u5185\u5b58\u9700\u8981\u662f\u8fde\u7eed\u7684\uff0c\u800c\u5185\u5b58\u7684\u5206\u914d\u4e8e\u91ca\u653e\u53c8\u662f\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u60f3\u4e00\u4e2a\u529e\u6cd5\u9ad8\u6548\u5730\u5229\u7528\u5185\u5b58\u7a7a\u95f4\u3002

    \u4e3a\u4ec0\u4e48\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u5185\u5b58\u662f\u8fde\u7eed\u7684\uff1f

    \u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u4e3a\u4ec0\u4e48\u88c5\u8f7d\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u5185\u5b58\u9700\u8981\u662f\u5b8c\u6574\u3001\u8fde\u7eed\u7684\uff0c\u800c\u4e0d\u80fd\u662f\u4e1c\u4e00\u5757\u800c\u897f\u4e00\u5757\u7684\u5462\uff1f

    \u6216\u8005\u8bf4\uff0c\u5982\u679c\u4f60\u8ba4\u4e3a\u5b83\u53ef\u4ee5\u4e0d\u8fde\u7eed\uff0c\u4e3a\u4e86\u5b9e\u73b0\u8ba9\u5b83\u80fd\u6b63\u5e38\u8fd0\u4f5c\uff0c\u4f60\u53ef\u80fd\u9700\u8981\u54ea\u4e9b\u63aa\u65bd\u5462\uff1f\u4f60\u7684\u8bbe\u8ba1\u76f8\u6bd4\u4f7f\u7528\u6734\u7d20\u7684\u8fde\u7eed\u5185\u5b58\u5206\u914d\uff0c\u6709\u4ec0\u4e48\u4f18\u52bf\u548c\u52a3\u52bf\u5462\uff1f

    \u63d0\u793a

    Von Neumann \u67b6\u6784\u4e2d\uff0cCPU \u548c\u5185\u5b58\u662f\u5982\u4f55\u4e92\u52a8\uff0c\u4ece\u800c\u5b9e\u73b0\u5176\u529f\u80fd\u7684\uff1f\u5173\u6ce8\u53d6\u6307\u8fc7\u7a0b\u548c\u6c47\u7f16\u4e2d\u7684\u5730\u5740\u64cd\u4f5c\uff01

    \u901a\u5e38\u6765\u8bf4\uff0c\u4e3b\u5b58\u4f1a\u88ab\u5212\u5206\u4e3a\u7528\u6237\u7a7a\u95f4\u548c\u5185\u6838\u7a7a\u95f4\u4e24\u4e2a\u90e8\u5206\uff0c\u540e\u8005\u7528\u4e8e\u8fd0\u884c\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u3002\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u503e\u5411\u4e8e\u5c06\u9ad8\u4f4d\u5730\u5740\u5212\u4e3a\u7ed9\u64cd\u4f5c\u7cfb\u7edf\uff0c\u6240\u4ee5\u6211\u4eec\u6b64\u5904\u7684\u8bed\u5883\u4e5f\u4f9d\u7167\u4e3b\u6d41\u8bbe\u8ba1\u3002

    \u5728\u8fde\u7eed\u5185\u5b58\u5206\u914d(contiguous memory allocation)\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u8ba4\u4e3a\u6240\u6709\u8fdb\u7a0b\u90fd\u88ab\u56ca\u62ec\u5728\u4e00\u6bb5\u5b8c\u6574\u7684\u5185\u5b58\u4e2d\u3002\u800c\u5728\u5185\u5b58\u5206\u914d\u7684\u52a8\u6001\u8fc7\u7a0b\u4e2d\uff0c\u6574\u4e2a\u5185\u5b58\u4e2d\u7a7a\u95f2\u7684\u90e8\u5206\u5c06\u6709\u53ef\u80fd\u88ab\u5206\u914d\u7ed9\u7d22\u53d6\u5185\u5b58\u7684\u8fdb\u7a0b\uff0c\u800c\u88ab\u5206\u914d\u7684\u5185\u5b58\u5728\u91ca\u653e\u4e4b\u524d\u90fd\u4e0d\u80fd\u88ab\u5206\u914d\u7ed9\u5176\u5b83\u8fdb\u7a0b\u3002\u5728\u8fdb\u7a0b\u6267\u884c\u5b8c\u6bd5\u540e\uff0c\u5185\u5b58\u4f1a\u88ab\u91ca\u653e\uff0c\u5207\u6211\u4eec\u5bf9\u4e8e\u8fdb\u7a0b\u4f55\u65f6\u91ca\u653e\u5185\u5b58\u4e0d\u505a\u5047\u8bbe\u3002

    \u6700\u7b80\u5355\u7684\u662f\u4e00\u79cd\u53ef\u53d8\u5212\u5206(variable partition)\u7684\u8bbe\u8ba1\uff0c\u5373\u4e0d\u5bf9\u5185\u5b58\u4e2d\u7684\u5212\u5206\u65b9\u5f0f\u505a\u7ea6\u675f\uff0c\u53ea\u8981\u662f\u7a7a\u95f2\u4e14\u8db3\u591f\u5927\u7684\u8fde\u7eed\u5185\u5b58\u533a\u57df\u90fd\u53ef\u4ee5\u88ab\u5206\u914d\u3002\u4f46\u6211\u4eec\u53ef\u4ee5\u60f3\u8c61\uff0c\u5728\u5185\u5b58\u88ab\u52a8\u6001\u4f7f\u7528\u7684\u8fc7\u7a0b\u4e2d\uff0c\u539f\u672c\u5b8c\u6574\u7684\u5185\u5b58\u53ef\u80fd\u53d8\u5f97\u652f\u79bb\u7834\u788e\u3002\u5982\u679c\u6211\u4eec\u8bb0\u4e00\u5757\u8fde\u7eed\u7684\u7a7a\u95f2\u5185\u5b58\u4e3a\u4e00\u4e2a hole\uff0c\u5219\u539f\u5148\u53ef\u80fd\u53ea\u6709\u4e00\u4e2a hole\uff0c\u800c\u5728\u957f\u65f6\u95f4\u7684\u8fd0\u884c\u540e\uff0c\u5185\u5b58\u4e2d\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u8f83\u5c0f\u7684\uff0c\u96be\u4ee5\u5229\u7528\u7684 holes\u3002\u8fd9\u5c31\u662f\u5916\u90e8\u788e\u7247(external fragmentation)\uff0c\u5728\u6700\u574f\u7684\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e2a\u975e\u7a7a\u95f2\u7684\u5185\u5b58\u5212\u5206\u4e4b\u95f4\u90fd\u53ef\u80fd\u6709\u4e00\u5757\u4e0d\u5927\u4e0d\u5c0f\u7684 hole\uff0c\u800c\u8fd9\u4e9b hole \u5355\u72ec\u6765\u770b\u53ef\u80fd\u65e0\u6cd5\u5229\u7528\uff0c\u4f46\u5176\u603b\u548c\u53ef\u80fd\u5e76\u4e0d\u5c0f\uff0c\u8fd9\u662f\u4e2a\u975e\u5e38\u4e25\u91cd\u7684\u95ee\u9898\u3002

    Variable partition. 1 hole to 2 holes.

    \u4f46\u662f\u663e\u7136\u6211\u4eec\u4e0d\u80fd\u9891\u7e41\u5730\u8981\u6c42\u64cd\u4f5c\u7cfb\u7edf\u53bb\u91cd\u65b0\u6574\u7406\u5185\u5b58\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u60f3\u529e\u6cd5\u6765\u51cf\u5c11\u5916\u90e8\u788e\u7247\u7684\u4ea7\u751f\u3002\u6211\u4eec\u8003\u8651\u4e09\u79cd\u5206\u914d\u7b56\u7565\uff1a

    \u5173\u4e8e\u8fd9\u4e09\u4e2a\u662f\u4ec0\u4e48\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7 ADS \u7b14\u8bb0\u3002

    \u5b9e\u9a8c\u7ed3\u679c\u8868\u660e\uff0cFF \u548c BF \u7684\u901f\u5ea6\u90fd\u6bd4 WF \u5feb\uff0c\u4f46\u901a\u5e38 FF \u4f1a\u66f4\u5feb\u4e00\u4e9b\uff1b\u800c\u770b\u5185\u5b58\u7684\u5229\u7528\u6548\u7387\uff0c\u4e24\u8005\u5219\u6ca1\u6709\u660e\u663e\u7684\u533a\u522b\uff0c\u4f46\u662f FF \u548c BF \u90fd\u6df1\u53d7\u5916\u90e8\u788e\u7247\u4e4b\u5bb3\u3002

    \u9664\u4e86 variable partition \u7684\u8bbe\u8ba1\u4ee5\u5916\uff0c\u8fd8\u6709\u4e00\u4e9b\u522b\u7684\u8bbe\u8ba1\uff0c\u4f8b\u5982\u56fa\u5b9a\u5212\u5206(fixed partition)\uff0c\u5185\u5bb9\u6bd4\u8f83\u7b80\u5355\u6211\u5c31\u4e0d\u4ecb\u7ecd\u4e86\u3002\u8bfb\u8005\u53ef\u4ee5\u901a\u8fc7 xxjj \u7684\u7b14\u8bb0\u6765\u505a\u4e00\u4e9b\u4e86\u89e3\u3002

    \u5728 fixed partition \u4e2d\uff0c\u8fd8\u4f1a\u4ea7\u751f\u53e6\u5916\u4e00\u79cd\u788e\u7247\uff0c\u53eb\u5185\u90e8\u788e\u7247(internal fragmentation)\uff0c\u5b83\u6307\u7684\u662f\u5728\u7c7b\u4f3c fixed partition \u7684\u7b56\u7565\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5206\u914d\u7ed9\u8fdb\u7a0b\u7684\u5185\u5b58\u5f80\u5f80\u662f\u6210\u5757\u7684\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u9700\u6c42\u7684\u5206\u914d\u91cf\u5927\u4e8e\u8fdb\u7a0b\u5b9e\u9645\u9700\u6c42\u91cf\uff0c\u800c\u90a3\u4e9b\u88ab\u5206\u914d\u4e86\u4f46\u5b9e\u9645\u95f2\u7f6e\u7684\u5185\u5b58\uff0c\u5c31\u88ab\u79f0\u4e3a\u5185\u90e8\u788e\u7247\u3002\u6211\u4eec\u4e4b\u540e\u4ecb\u7ecd\u7684\u5206\u9875\u6280\u672f\uff0c\u4e5f\u540c\u6837\u4f1a\u4ea7\u751f\u5185\u90e8\u788e\u7247\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740","title":"\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740","text":"

    \u4e3a\u4e86\u8ba9\u5185\u5b58\u5177\u6709\u66f4\u5f3a\u7684\u7075\u6d3b\u6027\uff0c\u6211\u4eec\u533a\u5206\u5185\u5b58\u7684\u7269\u7406\u5730\u5740(physical address)\u548c\u865a\u62df\u5730\u5740(virtual address)\uff0c\u540e\u8005\u4e5f\u53eb\u903b\u8f91\u5730\u5740(logical address)\u3002

    \u7269\u7406\u5730\u5740\u5b9e\u9645\u5728\u5185\u5b58\u8bbe\u5907\u4e2d\u8fdb\u884c\u5185\u5b58\u5bfb\u5740\uff0c\u4e3b\u8981\u53cd\u5e94\u5185\u5b58\u5728\u786c\u4ef6\u5b9e\u73b0\u4e0a\u7684\u5c5e\u6027\uff1b\u800c CPU \u6240\u4f7f\u7528\u7684\u4e00\u822c\u6307\u7684\u662f\u865a\u62df\u5185\u5b58\uff0c\u4e3b\u8981\u53cd\u5e94\u5185\u5b58\u5728\u903b\u8f91\u4e0a\u7684\u5c5e\u6027\u3002\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u5b58\u5728\u6620\u5c04\u5173\u7cfb\uff0c\u800c\u5b9e\u73b0\u4ece\u865a\u62df\u5730\u5740\u5230\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u7684\u786c\u4ef6\uff0c\u662f\u5185\u5b58\u7ba1\u7406\u5355\u5143(memory management unit, MMU)\uff0c\u9664\u4e86\u662f\u5b9e\u73b0\u865a\u62df\u5730\u5740->\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u5916\uff0cMMU \u8fd8\u8d1f\u8d23\u5185\u5b58\u8bbf\u95ee\u7684\u4fdd\u62a4\u3002\u6211\u4eec\u5728\u4e4b\u540e\u4f1a\u5c06\u4e86\u89e3\u5230\uff0cTBL \u4e5f\u5c5e\u4e8e MMU \u7684\u4e00\u90e8\u5206\u3002

    Dynamic relocation using a relocation register.

    \u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u7684\u533a\u5206\u8ba9\u4f7f\u5f97\u7528\u6237\u7a0b\u5e8f\u4e0d\u518d\u9700\u8981\uff08\u4e5f\u4e0d\u88ab\u5141\u8bb8\uff09\u5173\u6ce8\u7269\u7406\u5730\u5740\u3002\u6b64\u5916\uff0c\u901a\u8fc7\u5229\u7528\u865a\u62df\u5730\u5740\u548c\u7269\u7406\u5730\u5740\u7684\u7075\u6d3b\u6620\u5c04\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5206\u9875\u6765\u5b9e\u73b0\u826f\u597d\u7684\u5185\u5b58\u7ba1\u7406\u3002

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u5c1d\u8bd5\u8bbe\u60f3\uff0c\u5229\u7528\u865a\u62df\u5730\u5740\u548c\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u6211\u4eec\u80fd\u505a\u5230\u54ea\u4e9b\u4e8b\uff1f

    \u63d0\u793a
    1. \u8003\u8651\u6570\u5b66\u4e0a\u5982\u4f55\u5206\u7c7b\u201c\u51fd\u6570\u6620\u5c04\u201d\uff1b
    2. \u8003\u8651\u5982\u4f55\u5b9e\u73b0\u5730\u5740\u8fde\u7eed\uff1b

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u7684\u957f\u5ea6\u9700\u8981\u4e00\u6837\u5417\uff1f

    \u4e00\u4e2a\u8fdb\u7a0b\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4(virtual address space)\uff0c\u6307\u7684\u662f\u5728\u865a\u62df\u5185\u5b58\u7684\u8bed\u5883\u4e0b\uff0c\u8fdb\u7a0b\u7684\u5185\u5b58\u7ed3\u6784\u3002\u901a\u5e38\u8fdb\u7a0b\u5728\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7684\u5927\u81f4\u7ed3\u6784\u548c\u5730\u5740\u5206\u5e03\u90fd\u662f\u76f8\u540c\u7684\uff0c\u4f8b\u5982\u53ef\u80fd\u90fd\u662f\u4ece 0 \u5730\u5740\u5f00\u59cb\u653e text \u6bb5\uff0c\u6808\u5e95\u4e00\u822c\u90fd\u5728\u672b\u5c3e\u7b49\u2014\u2014\u8fd9\u5c31\u610f\u5473\u7740\u8fdb\u7a0b\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4\u5e94\u5f53\u662f\u4e92\u4e0d\u76f8\u5173\u7684\uff0c\u7531\u5c06\u82e5\u5e72\u4e92\u76f8\u9694\u79bb\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4\u6620\u5c04\u5230\u5404\u81ea\u7684\u7269\u7406\u5730\u5740\u8fd9\u4e2a\u4efb\u52a1\uff0c\u5219\u7531 MMU \u5b8c\u6210\u3002\uff08\u5728\u6211\u4eec\u4e4b\u540e\u4ecb\u7ecd\u4e86\u9875\u8868\u540e\uff0c\u8fd9\u610f\u5473\u7740\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u5e94\u5f53\u6709\u81ea\u5df1\u7684\u9875\u8868\u3002\uff09

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5206\u9875\u6280\u672f","title":"\u5206\u9875\u6280\u672f","text":"

    \u5206\u9875\u6280\u672f\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\u662f\u51cf\u8f7b\u8fdb\u7a0b\u201c\u5fc5\u987b\u8981\u4f7f\u7528\u8fde\u7eed\u5185\u5b58\u201d\u8fd9\u4e00\u9650\u5236\u3002\u6211\u4eec\u5728\u524d\u9762\u7684\u601d\u8003\u9898\u4e2d\u5df2\u7ecf\u63d0\u5230\uff0c\u9700\u8981\u4f7f\u7528\u8fde\u7eed\u5185\u5b58\u662f\u9700\u8981\u4e00\u79cd\u903b\u8f91\u4e0a\u7684\u8fde\u7eed\uff0c\u56e0\u6b64\uff0c\u5728\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u7684\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u53ea\u9700\u8981\u4fdd\u8bc1\u865a\u62df\u5730\u5740\u662f\u8fde\u7eed\u7684\u5373\u53ef\u3002\u5f53\u7136\uff0c\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u7269\u7406\u5730\u5740\u7684\u8fde\u7eed\u5c31\u662f\u6beb\u65e0\u610f\u4e49\u7684\u4e86\uff0c\u7269\u7406\u5730\u5740\u7684\u8fde\u7eed\u662f\u5b9e\u9645\u4e0a\u63d0\u4f9b\u9ad8\u6548\u5185\u5b58\u8bbf\u95ee\u7684\u57fa\u7840\u3002

    \u663e\u7136\u8fd9\u91cc\u7684 \u201cpage\u201d \u662f\u57fa\u4e8e Definition 2\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u57fa\u672c\u8bbe\u8ba1","title":"\u57fa\u672c\u8bbe\u8ba1","text":"

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u4e0d\u518d\u4e25\u683c\u9700\u8981\u7269\u7406\u5730\u5740\u4e5f\u662f\u5b8c\u6574\u7684\u3001\u5927\u5757\u7684\u3001\u5b8c\u5168\u8fde\u7eed\u7684\u4e86\u3002\u542c\u8d77\u6765 external fragmentation \u7684\u95ee\u9898\u5df2\u7ecf\u89e3\u51b3\u4e86\uff0c\u8c8c\u4f3c\u6211\u4eec\u53ea\u9700\u8981\u6bcf\u6b21\u4ece\u91cc\u9762\u6162\u6162\u6361\u5783\u573e\uff0c\u51d1\u51fa\u4e00\u6574\u5757\u5c31\u884c\u4e86\u2026\u2026

    \u563f\uff01\u60f3\u7684\u6709\u70b9\u592a\u7f8e\u4e86\uff01\u867d\u7136\u903b\u8f91\u4e0a\u7269\u7406\u5730\u5740\u4e0d\u9700\u8981\u8fde\u7eed\uff0c\u4f46\u8fc7\u4e8e\u7a00\u788e\u7684\u7269\u7406\u5730\u5740\u4f1a\u5bfc\u81f4\u5185\u5b58\u8bbf\u95ee\u7f13\u6162\uff0c\u6361\u5783\u573e\u51d1\u51fa\u6765\u7684\u865a\u62df\u5185\u5b58\u5757\u4e5f\u50cf\u5783\u573e\u4e00\u6837\u98df\u4e4b\u65e0\u5473\u3002\u5185\u5b58\u6620\u5c04\u5173\u7cfb\u8fc7\u4e8e\u7410\u788e\uff0c\u867d\u7136\u7075\u6d3b\u6027\u4e0a\u5347\u4f46\u6548\u7387\u4e0b\u964d\uff1b\u5982\u679c\u6620\u5c04\u5173\u7cfb\u8f83\u4e3a\u5927\u5757\u3001\u5b8c\u6574\uff0c\u90a3\u4e48\u6548\u7387\u4e0a\u5347\u4f46\u7075\u6d3b\u6027\u4e0b\u964d\u3002\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u4e2d\u5eb8\u7684\u65b9\u6848\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5e27--\u9875","title":"\u5e27 & \u9875","text":"

    \u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u4e24\u8005\u7684\u4f18\u70b9\u5408\u5e76\uff0c\u6211\u4eec\u5c06\u7269\u7406\u5185\u5b58\u5212\u5206\u4e3a\u56fa\u5b9a\u5927\u5c0f\u7684\u5757\uff0c\u79f0\u4e3a\u5e27(frames)\uff08\u7c7b\u4f3c\u4e8e fixed partition\uff09\uff0c\u6bcf\u4e2a\u5e27\u5bf9\u5e94\u865a\u62df\u5730\u5740\u4e2d\u7b49\u5927\u7684\u4e00\u5757\u9875(pages)\uff0c\u7528\u8fd9\u4e9b\u5e27\u6765\u4f5c\u4e3a\u8fde\u7eed\u7684\u865a\u62df\u5730\u5740\u7684\u7269\u7406\u57fa\u7840\uff0c\u7528\u865a\u62df\u7684\u9875\u53f7\u6765\u652f\u6301\u8fde\u7eed\u865a\u62df\u5730\u5740\uff08\u9a6c\u4e0a\u5c31\u4f1a\u7ec6\u8bf4\uff09\uff0c\u8fd9\u6837\u4fdd\u8bc1\u4e86\u5728\u4e00\u5b9a\u9650\u5ea6\u5185\u9875\u5206\u914d\u7684\u81ea\u7531\u5ea6\uff0c\u5229\u7528\u4e86\u865a\u62df\u5730\u5740\u7684\u7075\u6d3b\u6027\uff1b\u53c8\u4fdd\u8bc1\u4e86\u5185\u5b58\u76f8\u5bf9\u6765\u8bf4\u8fd8\u662f\u6210\u5757\u8fde\u7eed\u7684\uff0c\u63d0\u4f9b\u4e86\u7269\u7406\u5730\u5740\u8fde\u7eed\u7684\u9ad8\u6548\u6027\u3002\u800c\u5e27\u4e0e\u9875\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u662f\u901a\u8fc7\u9875\u8868(page table)\u6765\u5b9e\u73b0\u7684\uff0c\u5728\u9875\u8868\u4e2d\uff0c\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a\u4ee5\u9875\u53f7\u4e3a\u7d22\u5f15\u7684\u5e27\u53f7\u6570\u7ec4\uff0c\u6309\u7167\u9875\u53f7\u987a\u5e8f\u6392\u5217\uff0c\u56e0\u6b64\uff0c\u9875\u53f7\u5c31\u662f\u5bf9\u5e94\u7684\u8868\u9879\u5728\u6570\u5217\u4e2d\u7684\u4f4d\u6b21\u3002

    pages v.s. frames

    \u4e0b\u9762\u7684\u5185\u5bb9\u662f\u5728\u6263\u5b9a\u4e49\u6263\u5b57\u773c\uff0c\u5982\u679c\u8bfb\u8005\u8ba4\u4e3a\u8fd9\u6beb\u65e0\u610f\u4e49\uff0c\u53ef\u4ee5\u76f4\u63a5\u8df3\u8fc7\uff0c\u4f46\u6211\u4e2a\u4eba\u8ba4\u4e3a\u8fd9\u4e9b\u4e8b\u662f\u6784\u6210\u6d41\u7545\u903b\u8f91\u7684\u4e00\u4e2a\u57fa\u7840\u3002

    \u867d\u7136\u6211\u4eec\u5df2\u7ecf\u7ed9\u51fa\u4e86\u660e\u786e\u7684 page \u548c frame \u7684\u5b9a\u4e49\uff0c\u4f46\u73b0\u5b9e\u5f88\u6df7\u4e71\uff0c\u6211\u4e3b\u8981\u67e5\u627e\u5230\u5173\u4e8e page \u548c frame \u6709\u8fde\u5957\u4e0d\u540c\u7684\u5b9a\u4e49\u3002

    Definition 1

    \u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff0c\u8fd9\u79cd\u6d41\u6d3e\u7684\u5b9a\u4e49\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u8fc7\u7684\u8fd9\u79cd\uff1a

    1. page \u8868\u793a\u865a\u62df\u5185\u5b58\u4e2d\u7684\u5b8c\u6574\u4e00\u5757\uff1b
    2. frame \u8868\u793a\u7269\u7406\u5185\u5b58\u4e2d\u7684\u5b8c\u6574\u4e00\u5757\uff1b

    \u8fd9\u91cc\u6211\u4eec\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u4e0d\u51c6\u786e\u63cf\u8ff0\u662f\u600e\u6837\u201c\u5b8c\u6574\u4e00\u5757\u201d\uff0c\u4e3b\u8981\u533a\u522b\u5728\u4e8e\u52a0\u7c97\u90e8\u5206\u3002

    Definition 2

    \u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff0c\u8fd9\u79cd\u6d41\u6d3e\u7684\u5b9a\u4e49\u4e0d\u540c\uff0c\u5728\u8fd9\u5957\u5b9a\u4e49\u91cc\uff0c\u51c6\u786e\u7684 page \u548c frame \u4e0d\u662f\u5bf9\u7b49\u7684\u6982\u5ff5\uff0c\u800c\u662f\u8bf4\uff1a

    1. \u4f5c\u4e3a\u7f29\u5199\u7684 page \u6307\u4ee3 virtual page\uff0c\u5373\u865a\u62df\u5185\u5b58\u4e2d\u7684\u4e00\u5757\uff1b
    2. \u4f5c\u4e3a\u7f29\u5199\u7684 frame \u5168\u79f0\u662f page frame\uff0c\u4e5f\u88ab\u5b9a\u4e49\u4e3a physical page\uff1b

    \u4e3a\u4e86\u907f\u514d\u6b67\u4e49\uff0c\u672c block \u4e2d\uff0c\u6211\u4eec\u53ea\u4f7f\u7528 page\uff0cvirtual page\uff0cphysical page \u8fd9\u4e09\u4e2a\u672f\u8bed\uff01

    \u5728\u8fd9\u4e2a\u5b9a\u4e49\u91cc\uff0cpage \u8868\u793a\u7684\u5b9e\u9645\u4e0a\u662f\u62bd\u8c61\u7684\u6570\u636e\u5757\uff08\u6ce8\u610f\uff0c\u4e0d\u662f\u865a\u62df\u7684\uff09\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff1a

    1. page \u7684\u672c\u8d28\u662f\u201c\u6570\u636e\u4fe1\u606f\u201d\uff1b
    2. physical page \u662f page \u5728\u7269\u7406\u5185\u5b58\u4e0a\u7684\u5b9e\u9645\u5b58\u50a8\u5f62\u5f0f\uff1b
    3. virtual page \u662f page \u7684\u5728\u865a\u62df\u5185\u5b58\u4e0a\u7684\u903b\u8f91\u6620\u8c61\uff0c\u4e5f physical page \u7684\u4e00\u4e2a view\uff1b

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u867d\u7136\u7528\u8bcd\u6539\u53d8\uff0c\u4f46\u662f \u201cphysical page\u201d \u548c \u201cvirtual page\u201d \u7684\u5173\u7cfb\u548c\u4e4b\u524d\u662f\u4e00\u6837\u7684\uff0c\u53ea\u662f \u201cpage\u201d \u8fd9\u4e2a\u8bcd\u7684\u542b\u4e49\u4e0d\u4e00\u6837\u4e86\u3002

    \u6240\u4ee5\u6700\u8fdd\u548c\u7684\u5c31\u662f\uff0c\u4f5c\u4e3a\u7f29\u5199\u7684 page \u548c\u51c6\u786e\u7684 page \u7684\u542b\u4e49\u662f\u4e0d\u4e00\u81f4\u7684\uff0c\u751a\u81f3\u533a\u522b\u5de8\u5927\u3002\u6240\u4ee5\u6211\u4e0d\u559c\u6b22\u8fd9\u4e2a\u5b9a\u4e49\u3002\u4f46\u662f\u6ca1\u529e\u6cd5\uff0cpaging \u6280\u672f\u7684\u547d\u540d\u53cd\u800c\u5c31\u662f\u57fa\u4e8e\u8fd9\u5957\u5b9a\u4e49\u7684\uff0c\u8fd9\u91cc\u5927\u6982\u5b58\u5728\u4e00\u4e2a\u975e\u5e38\u6076\u5fc3\u7684\u5386\u53f2\u9057\u7559\u95ee\u9898\u5728\uff0c\u8bf7\u8bfb\u8005\u7559\u4e2a\u5fc3\u773c\uff0c\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u4ed4\u7ec6\u8fa8\u522b\u3002

    \u56de\u5fc6\u865a\u62df\u5730\u5740\u7a7a\u95f4\u7684\u76f8\u5173\u6982\u5ff5\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u5e94\u5f53\u90fd\u6709\u81ea\u5df1\u7684\u9875\u8868\uff0c\u5373\u6211\u4eec\u79f0\u9875\u8868\u662f per-process data structures\u3002

    \u5934\u8111\u98ce\u66b4

    \u7531\u4e8e\u5e27\u548c\u9875\u7684\u5927\u5c0f\u662f\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u867d\u7136\u7406\u8bba\u4e0a\u6211\u4eec\u9700\u8981\u7684\u662f\u6bcf\u4e00\u5e27\u7684\u9996\u5730\u5740\uff0c\u4f46\u6240\u8c13\u7684\u201c\u9996\u5730\u5740\u201d\u5b9e\u9645\u4e0a\u662f \\(m * FrameSize\\)\uff0c\u56e0\u6b64\uff0c\u53ea\u9700\u8981\u7528 \\(m\\) \u5c31\u53ef\u4ee5\u552f\u4e00\u786e\u5b9a\u4e86\uff08\u5c31\u50cf\u6570\u7ec4\u7684 random access\uff09\u3002

    \u73b0\u5728\uff0c\u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u5f53 \\(FrameSize = 2^k\\) \u65f6\uff0c\u4f1a\u6709\u600e\u6837\u826f\u597d\u7684\u6027\u8d28\uff1f

    \u63d0\u793a

    \u8054\u7cfb\u9875 & \u865a\u62df\u5730\u5740\uff0c\u8003\u8651\u6574\u4e2a\u5730\u5740\u7684\u4e8c\u8fdb\u5236\u8868\u793a\u4e2d\u8868\u793a\u9875\u53f7\u7684\u90e8\u5206\u5728\u6574\u4e2a\u4e8c\u8fdb\u5236\u4e32\u4e2d\u7684\u6784\u6210\uff01

    Paging model of logical and physical memory. \u4ee5 page table \u4e2d\u7684\u7b2c\u4e00\u9879\u4e3a\u4f8b\uff1a0:5 \u8868\u793a\u865a\u62df\u5730\u5740\u4e2d\u7684\u7b2c 0 \u9875\u5bf9\u5e94\u7269\u7406\u5730\u5740\u4e2d\u7684\u7b2c 5 \u5e27\u3002

    \u5934\u8111\u98ce\u66b4

    \u4e0d\u77e5\u9053\u4f60\u770b\u4e86\u8fd9\u4e2a\u5bfb\u5740\u6a21\u5f0f\u662f\u5426\u611f\u89c9\u6709\u4e9b\u5fae\u5999\u7684\u70b9\uff1f\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u8bf7\u5c1d\u8bd5\u53d1\u73b0\u8fd9\u4e2a\u8fdd\u548c\u7684\u5730\u65b9\u5728\u4f55\u5904\u3002

    \u9ec4\u6cb9\u732b\uff01

    \u9996\u5148\u4e00\u4e2a\u7ed3\u8bba\u662f\uff0c\u6211\u4eec\u663e\u7136\u4e0d\u80fd\u62ff\u7740\u865a\u62df\u5730\u5740\u53bb\u627e\u9875\u8868\uff0c\u56e0\u4e3a\u4f1a\u9677\u5165\uff1a\u300e\u627e\u9875\u8868\u9700\u8981\u8bbf\u95ee\u9875\u8868\u7684\u7269\u7406\u5730\u5740\u3001\u627e\u865a\u62df\u5730\u5740\u5bf9\u5e94\u7684\u7269\u7406\u5730\u5740\u9700\u8981\u9875\u8868\u3001\u627e\u9875\u8868\u9700\u8981\u8bbf\u95ee\u9875\u8868\u7684\u7269\u7406\u5730\u5740\u2026\u2026\u300f\u7684\u9ec4\u6cb9\u732b3\u4e2d\u3002

    \u5c31 RSICV \u6765\u8bf4\uff0c\u4f60\u53ef\u4ee5\u5728\u5b9e\u9a8c\u4e09\u7684\u624b\u518c\u91cc\u627e\u5230\u4e00\u6bb5\u63cf\u8ff0 satp \u5bc4\u5b58\u5668\u7684\u90e8\u5206\u3002

    \u6211\u4eec\u53ef\u4ee5\u6ce8\u610f\u5230\uff0csatp \u5bc4\u5b58\u5668\u7684\u672b\u5c3e\u5b58\u50a8\u7684\u662f\u7269\u7406\u9875\u53f7\uff0c\u4e5f\u5c31\u662f\u5e27\u53f7\uff0c\u6240\u4ee5\u975e\u5e38\u663e\u7136\u7684\uff0c\u6211\u4eec\u9700\u8981\u7279\u522b\u5730\u53bb\u5b58\u50a8\u9875\u8868\u7684\u7269\u7406\u5730\u5740\u4fe1\u606f\uff0c\u5e76\u7528\u8fd9\u4e2a\u7269\u7406\u5730\u5740\u6765\u8bbf\u95ee\u9875\u8868\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u9875--\u865a\u62df\u5730\u5740","title":"\u9875 & \u865a\u62df\u5730\u5740","text":"

    \u6211\u4eec\u6765\u770b\u865a\u62df\u5730\u5740\u662f\u5982\u4f55\u5728\u8fde\u7eed\u6027\u4e0a\u53d1\u6325\u4f5c\u7528\u7684\uff1a\u4e00\u4e2a\u7a0b\u5e8f\u8f7d\u5165\u5185\u5b58\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u9875\uff0c\u8fd9\u4e9b\u9875\u6309\u987a\u5e8f\u88ab\u5206\u914d\u4e86\u9875\u53f7(page number)\uff0c\u5b9e\u9645\u4f7f\u7528\u7684\u5730\u5740\u4f1a\u843d\u5728\u67d0\u4e00\u9875\u4e2d\uff0c\u5c31\u901a\u8fc7 page number \u8fdb\u884c\u7d22\u5f15\u3002\u800c\u7531\u4e8e\u4e00\u9875\u4e2d\u5305\u542b\u4e00\u5927\u5757\u5185\u5b58\uff08page size \u5e38\u5e38\u53d6 4KB\uff09\uff0c\u800c\u6211\u4eec\u6240\u9700\u8981\u5bfb\u7684\u5740\u603b\u662f\u5176\u4e2d\u7684\u4e00\u4e2a Byte\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u9875\u5185\u504f\u79fb(page offset)\u6765\u7d22\u5f15\u6211\u4eec\u6240\u9700\u8981\u7684\u5730\u5740\u5728\u9875\u4e2d\u7684\u4f4d\u7f6e\uff0c\u5bf9\u4e8e page size \u4e3a 4KB \u7684\u9875\uff0cpage offset \u9700\u8981\u6709 \\(\\log_2{4096} = 12\\) \u4f4d\u3002

    \u56e0\u6b64\uff0c\u5b9e\u9645\u5728 paging \u903b\u8f91\u4e2d\uff0c\u4e00\u4e2a\u865a\u62df\u5730\u5740\u7684\u53ef\u4ee5\u88ab\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502page number    \u2502page offset   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n p: m-n bits     d: n bits\n

    \u663e\u7136\uff0c\u7531\u4e8e\u5e27\u548c\u9875\u662f\u4e00\u4f53\u4e24\u9762\u3001\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c\u6240\u4ee5\u5355\u4e2a\u9875\u5185\u7684\u8fde\u7eed\u5185\u5b58\u9875\u5bf9\u5e94\u5e27\u4e0a\u7684\u8fde\u7eed\u5185\u5b58\u3002\u4f7f\u7528 page offset \u6765\u6807\u8bc6\u9875\u5185\u5730\u5740\uff0c\u5b9e\u9645\u5c31\u5f97\u5230\u4e86\u76ee\u6807\u7269\u7406\u5730\u5740\u76f8\u5bf9\u4e8e\u5e27\u4e2d\u8d77\u59cb\u5730\u5740\u7684\u504f\u79fb\u91cf\u3002\u800c\u5bf9\u4e8e\u9875\u95f4\u7684\u5730\u5740\uff0c\u5047\u8bbe\u9875\u672b\u5730\u5740\u662f\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502page number    \u250211111111111111\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n p: m-n bits     d: n bits\n

    \u7531\u4e8e\u865a\u62df\u5730\u5740\u8868\u73b0\u4e0a\u8fd8\u662f\u4e2a\u6b63\u5e38\u7684\u4e8c\u8fdb\u5236\u6570\uff0c\u6240\u4ee5\u5176\u4e0b\u4e00\u4e2a\u5730\u5740\u5c31\u662f\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502page number + 1\u250200000000000000\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n p: m-n bits     d: n bits\n

    \u800c\u5176\u542b\u4e49\u5c31\u662f\u4e0b\u4e00\u5f20\u9875\u8868\u7684 0 \u53f7\u4f4d\u3002\u800c\u6211\u4eec\u77e5\u9053\uff0c\u76f8\u90bb\u9875\u5bf9\u5e94\u7684\u5e27\u4e0d\u4e00\u5b9a\u662f\u8fde\u7eed\u7684\uff0c\u4f46\u8fd9\u4e2a\u4e0d\u8fde\u7eed\u7684\u6027\u8d28\u5bf9\u865a\u62df\u5730\u5740\u662f\u900f\u660e\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u603b\u4f53\u68b3\u7406","title":"\u603b\u4f53\u68b3\u7406","text":"

    \u7a0d\u5fae\u5bf9\u4e0a\u9762\u7684\u5185\u5bb9\u505a\u4e00\u4e0b\u603b\u7ed3\uff0c\u6211\u4eec\u62e5\u6709\u4e86\u903b\u8f91\u7684\u9875\u5230\u7269\u7406\u7684\u5e27\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u8fd9\u4e2a\u6620\u5c04\u5173\u7cfb\u5b58\u5728\u9875\u8868\u91cc\uff0c\u5b9e\u73b0\u903b\u8f91\u4e0a\u8fde\u7eed\u3001\u7269\u7406\u4e0a\u79bb\u6563\u7684\u5185\u5b58\u5757\u7d22\u5f15\uff1b\u800c\u5229\u7528 page number + offset \u7684\u7ed3\u6784\u5b9a\u4f4d\u4e86\u5185\u5b58\u5757\u4e2d\u7684\u5177\u4f53\u5730\u5740\uff0c\u5176\u4e2d offset \u5728\u5e27\u548c\u9875\u4e2d\u90fd\u8868\u793a\u5bf9\u4e8e\u5757\u9996\u5730\u5740\u7684\u504f\u79fb\uff0c\u56e0\u6b64\u53ef\u4ee5\u76f4\u63a5\u8fc1\u79fb\u4f7f\u7528\u3002

    \u56e0\u6b64\uff0c\u4ece\u865a\u62df\u5730\u5740\u5230\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5728\u9875\u8868\u4e2d\u67e5\u8be2\u865a\u62df\u5730\u5740\u4e2d\u7684 page number\uff0c\u5c06\u5176\u6362\u4e3a frame number\uff0c\u518d\u76f4\u63a5\u62fc\u63a5 offset \u5c31\u884c\u4e86\u3002

    \u5b9e\u9645\u4e0a\u8fd9\u662f\u4e2a\u975e\u5e38\u81ea\u7136\u7684\u8fc7\u7a0b\uff1a\u6574\u4f53\u5730\u770b\u865a\u62df\u5730\u5740\uff0c\u5c31\u662f\u76f4\u63a5\u5728\u8fde\u7eed\u7684\u865a\u62df\u5185\u5b58\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 Byte\uff1b\u6574\u4f53\u5730\u770b\u7269\u7406\u5730\u5740\uff0c\u540c\u6837\u4e5f\u662f\u76f4\u63a5\u5728\u8fde\u7eed\u7684\u7269\u7406\u5185\u5b58\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 Byte\u3002\u73b0\u5728\u901a\u8fc7\u7f6e\u6362\u4e8c\u8fdb\u5236\u5730\u5740\u5b57\u7b26\u4e32\u7684\u524d\u7f00\uff0c\u5b9e\u73b0\u4e86\u4e00\u4e2a\u5bfb\u5740\u7a7a\u95f4\u7684\u6620\u5c04\u3002\u800c\u8fd9\u4e2a\u6620\u5c04\u4e2d\uff0c\u8868\u793a offset \u7684\u540e\u7f00\u4e0d\u53d8\uff0c\u6b63\u5bf9\u5e94\u7740\u9875\u548c\u5e27\u4e2d\u504f\u79fb\u5bfb\u5740\u89c4\u5219\u7684\u7edf\u4e00\u3002

    Protection

    \u8bf7\u6ce8\u610f\uff0c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u6709\u4e9b\u9875\u53ef\u80fd\u5c1a\u672a\u4e0e\u5b9e\u9645\u7684\u5e27\u5efa\u7acb\u6620\u5c04\u5173\u7cfb\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u662f\u4e0d\u53ef\u7528\u7684\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u624b\u6bb5\u6765\u6807\u8bc6\u8868\u9879\u662f\u5426\u6709\u6548\uff0c\u4e8e\u662f\u5728\u9875\u8868\u4e2d\u5f15\u5165 valid bit\uff0c\u7528\u6765\u6807\u8bc6\u9875\u662f\u5426\u6709\u6548\uff0c\u5982\u679c\u8bd5\u56fe\u8bbf\u95ee invalid \u7684\u5730\u5740\uff0c\u5219\u4f1a\u51fa\u73b0\u5f02\u5e38\uff0c\u4ee5\u6b64\u5b9e\u73b0\u4e86 protection\u3002

    \u4e5f\u6709\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u7ef4\u62a4 page-table length register, PTLR \u6765\u5b9e\u73b0 protection\uff0c\u8fd9\u91cc\u4e0d\u91cd\u70b9\u4ecb\u7ecd\u3002

    page size \u7684\u9009\u62e9

    \u5bb9\u6613\u7406\u89e3\uff0cpage size \u8f83\u5927\u65f6\uff0c\u9875\u8868\u9879\u66f4\u5c11\uff0c\u800c\u9875\u66f4\u5bb9\u6613\u88ab\u6d6a\u8d39\uff0c\u4f46\u5bf9\u4e8e\u78c1\u76d8\u6765\u8bf4\uff0c\u5355\u6b21\u5927\u91cf\u7684\u4f20\u8f93\u6548\u7387\u66f4\u9ad8\uff1bpage size \u8f83\u5c0f\u65f6\uff0c\u9875\u8868\u9879\u66f4\u591a\uff0c\u9700\u8981\u66f4\u591a\u5185\u5b58\u548c\u65f6\u95f4\u6765\u5904\u7406\u9875\u8868\uff0c\u6240\u4ee5\u5177\u4f53 page size \u7684\u5927\u5c0f\u8981\u5177\u4f53\u95ee\u9898\u5177\u4f53\u5206\u6790\u3001\u4e0e\u65f6\u4ff1\u8fdb\u3002

    \u5728\u4e4b\u540e\u9875\u8868\u8bbe\u8ba1\u6539\u8fdb\u4e00\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u7ee7\u7eed\u5bf9\u9875\u8868\u7684\u7ed3\u6784\u8fdb\u884c\u4fee\u6539\uff0c\u4f46\u6574\u4f53\u4f7f\u7528\u903b\u8f91\u4e0d\u53d8\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u786c\u4ef6\u652f\u6301","title":"\u786c\u4ef6\u652f\u6301","text":"

    \u5bfc\u8bfb

    \u672c\u8282\u4fa7\u91cd\u4e8e\u4ece\u786c\u4ef6\u5b9e\u73b0\u7684\u89d2\u5ea6\u6765\u770b\u5206\u9875\u6280\u672f\u3002

    \u6211\u4eec\u524d\u9762\u8bf4\u8fc7\uff0c\u9875\u8868\u662f per-process data structures\uff0c\u6240\u4ee5\u9875\u8868\u5e94\u5f53\u4f5c\u4e3a\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5143\u4fe1\u606f\u88ab\u7ef4\u62a4\u3002\u663e\u7136\u6211\u4eec\u4e0d\u80fd\u76f4\u63a5\u7528\u5927\u91cf\u5bc4\u5b58\u5668\u6765\u7ef4\u62a4\u9875\u8868\uff08\u7406\u8bba\u4e0a\u5f88\u5feb\uff0c\u4f46\u662f\u592a\u8d35\u3001\u8bbe\u8ba1\u4e0a\u4e5f\u4e0d\u73b0\u5b9e\uff09\uff0c\u6240\u4ee5\u9875\u8868\u5b9e\u9645\u4e0a\u5e94\u5f53\u88ab\u653e\u5728\u5185\u5b58\u4e2d\uff08\u8fdb\u4e00\u6b65\u7684\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6548\u7387\uff0c\u6211\u4eec\u5c06\u9875\u8868\u653e\u5728\u4e3b\u5b58\u4e2d\uff09\uff0c\u6211\u4eec\u901a\u8fc7\u7528\u5bc4\u5b58\u5668\u7ef4\u62a4\u4e00\u4e2a\u6307\u5411\u9875\u8868\u7684\u6307\u9488\u6765\u7ef4\u62a4\u9875\u8868\uff0c\u8fd9\u4e2a\u7279\u6b8a\u7684\u5bc4\u5b58\u5668\u88ab\u79f0\u4e3a\u9875\u8868\u57fa\u5740\u5bc4\u5b58\u5668(page-table base register, PTBR)\uff0c\u5f53\u8fdb\u7a0b\u4e0d\u5904\u4e8e running \u6001\u65f6\uff0cPTBR \u5e94\u5f53\u88ab\u5b58\u50a8\u5728 PCB \u4e2d\uff0c\u5728 context switch \u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4e5f\u5e94\u5f53\u5bf9 PTBR \u8fdb\u884c\u4ea4\u6362\u3002

    \u563f\uff01\u53ef\u662f\u5185\u5b58\u771f\u7684\u597d\u6162\uff01

    \u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u5730\u5740\u6620\u5c04\u7684\u5b9e\u73b0\u903b\u8f91\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u5229\u7528\u9875\u8868\u67e5\u8be2\u5e27\u53f7\uff0c\u5229\u7528\u5e27\u53f7\u53bb\u5f97\u5230\u7269\u7406\u5730\u5740\uff0c\u518d\u53bb\u5185\u5b58\u91cc\u505a\u67e5\u8be2\uff0c\u8fd9\u91cc\u6709\u8db3\u8db3\u4e24\u6b21\u5185\u5b58\u8bbf\u95ee\u64cd\u4f5c\uff01

    \u4e0d\u4ec5\u5982\u6b64*2\uff0c\u4f60\u53ef\u80fd\u8fd8\u9700\u8981\u904d\u5386\u6574\u4e2a\u9875\u8868\u624d\u80fd\u8fbe\u5230\u4f60\u7684\u76ee\u7684\uff01

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#tlb","title":"TLB","text":"

    \u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u5f15\u7528\u8ba1\u7ec4\u91cc\u5b66\u5230\u7684 Eight Great Ideas \u4e4b Make Common Case Fast\uff01\u5f15\u5165\u4e00\u4e2a\u7f13\u5b58\u6765\u52a0\u901f\u9875\u8868\u7684\u7ef4\u62a4\uff1a\u9875\u8868\u7f13\u5b58(translation look-aside buffer, TLB)\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f MMU \u7684\u4e00\u90e8\u52061\uff0c\u9875\u53f7\u548c\u5e27\u53f7\u4ee5\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u5b58\u50a8\u5728 TLB \u4e2d\u3002\u9664\u4e86\u8bbf\u95ee\u901f\u5ea6\u5feb\u4ee5\u5916\uff0cTLB \u5141\u8bb8\u5e76\u884c\u5730\u67e5\u8be2\u6240\u6709\u952e\u503c\u5bf9\uff0c\u8fd9\u610f\u5473\u7740\u4f60\u4e0d\u518d\u9700\u8981\u4e00\u4e2a\u4e00\u4e2a\u904d\u5386\u9875\u8868\u4e2d\u7684\u5185\u5bb9\u4e86\uff01\u4ece\u6548\u7387\u4e0a\u6765\u8bf4\uff0c\u73b0\u4ee3\u7684 TLB \u5df2\u7ecf\u80fd\u591f\u5728\u4e00\u4e2a\u6d41\u6c34\u7ebf\u8282\u62cd\u4e2d\u5b8c\u6210\u67e5\u8be2\u64cd\u4f5c\u3002

    \u4f46\u662f\u8fd9\u4e48\u5389\u5bb3\u7684\u4e1c\u897f\u80af\u5b9a\u8fd8\u662f\u6709\u5c40\u9650\u6027\u7684\uff0cTLB \u4e00\u822c\u90fd\u6bd4\u8f83\u5c0f\uff0c\u5f80\u5f80\u53ea\u80fd\u652f\u6301 32 - 1024 \u4e2a\u8868\u9879\u3002\u800c\u4e14\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u201c\u7f13\u5b58\u201d\uff0c\u5b83\u6709\u53ef\u80fd\u4ea7\u751f miss\uff08\u5373\u6ca1\u5728 TLB \u4e2d\u627e\u5230\u5f85\u67e5\u7684\u9875\u53f7\uff09\uff0c\u5f53 TLB miss \u51fa\u73b0\u7684\u65f6\u5019\uff0c\u5c31\u9700\u8981\u8bbf\u95ee\u653e\u5728\u5185\u5b58\u4e2d\u7684\u9875\u8868\uff0c\u5e76\u505a\u6734\u7d20\u7684\u67e5\u8be2\u3002\u540c\u65f6\uff0c\u6309\u7167\u4e00\u5b9a\u7b56\u7565\uff08\u5982 LRU\u3001round-robin to random \u7b492\uff09\u5c06\u5f53\u524d\u67e5\u8be2\u7684\u952e\u503c\u5bf9\u66f4\u65b0\u5230 TLB \u4e2d\u3002

    \u6b64\u5916\uff0cTLB \u5141\u8bb8\u7279\u5b9a\u7684\u8868\u9879\u88ab\u7ebf\u56fa(wired down)\uff0c\u88ab\u7ebf\u56fa\u7684\u8868\u9879\u4e0d\u518d\u5141\u8bb8\u88ab\u66ff\u6362\u3002\uff08\u8fd9\u4e2a\u4e2d\u6587\u662f\u6211\u81ea\u5df1\u624d\u534e\u6a2a\u6ea2\u51fa\u6765\u7684\uff0c\u8bf7\u4e0d\u8981\u5230\u5904\u7528\u5bb9\u6613\u88ab\u5f53\u6ca1\u89c1\u8bc6\u3002\uff09

    \u867d\u7136\u9875\u8868\u662f per-process data structures\uff0c\u4f46 TLB \u5e76\u4e0d\u662f\uff01

    \u6b63\u56e0\u5982\u6b64\uff0c\u5728 context switch \u7684\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u6e05\u7a7a TLB\uff0c\u5373\u8fdb\u884c flush \u64cd\u4f5c\uff0c\u5426\u5219\u4e0b\u4e00\u4e2a\u8fdb\u7a0b\u5c31\u4f1a\u8bbf\u95ee\u5230\u4e0a\u4e00\u4e2a\u8fdb\u7a0b\u7684\u9875\u8868\u3002\u53c8\u6216\u8005\u6211\u4eec\u4e0d\u9700\u8981\u6bcf\u6b21\u90fd\u6e05\u7a7a TLB\uff0c\u800c\u662f\u5728 TLB \u7684\u8868\u9879\u4e2d\u52a0\u5165\u4e00\u4e2a\u5730\u5740\u7a7a\u95f4\u6807\u8bc6\u7b26(address-space identifier, ASIDs)\u5b57\u6bb5\uff1b\u5728\u67e5\u8be2\u9875\u53f7\u65f6\uff0c\u4e5f\u6bd4\u8f83 ASID\uff0c\u53ea\u6709 ASID \u4e00\u81f4\u624d\u7b97\u5339\u914d\u6210\u529f\u3002

    \u5b9a\u91cf\u5206\u6790

    \u6211\u4eec\u4f7f\u7528\u51fb\u4e2d\u6bd4\u4f8b(hit ratio)\u6765\u63cf\u8ff0\u6211\u4eec\u5728 TLB \u4e2d\u6210\u529f\u627e\u5230\u6211\u4eec\u9700\u8981\u7684\u9875\u5e27\u952e\u503c\u5bf9\u7684\u6982\u7387\uff0c\u90a3\u4e48\u5047\u8bbe\u8bbf\u95ee\u4e00\u6b21\u5185\u5b58\u9700\u8981 \\(t \\text{nanoseconds}\\)\uff0c\u90a3\u4e48\u4f7f\u7528\u8be5 TLB \u7684\u6709\u6548\u5185\u5b58\u8bbf\u95ee\u65f6\u95f4(effective memory-access time)\u4e3a\uff1a

    \\[ \\begin{aligned} &\\text{effective memory-access time} \\\\ &= \\underbrace{\\text{hit ratio} \\times \\text{memory-access} }_\\text{TLB hit} + \\underbrace{(1 - \\text{hit ratio}) \\times 2 \\times \\text{memory-access}}_\\text{TLB miss} \\\\ &= p_{\\text{hit}} \\times t + (1 - p_{\\text{hit}}) \\times 2t \\\\ &= (2 - p_{\\text{hit}})t \\end{aligned} \\]

    \u5728\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0cTLB \u7684\u7ed3\u6784\u53ef\u80fd\u4f1a\u66f4\u52a0\u590d\u6742\uff08\u53ef\u80fd\u6709\u66f4\u591a\u5c42\uff09\uff0c\u6240\u4ee5\u5b9e\u9645\u7684\u8ba1\u7b97\u53ef\u80fd\u6bd4\u4e0a\u8ff0\u66f4\u52a0\u590d\u6742\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5171\u4eab\u9875","title":"\u5171\u4eab\u9875","text":"

    \u865a\u62df\u5730\u5740\u4e0e\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u5e76\u975e\u9700\u8981\u662f\u5355\u5c04\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u591a\u4e2a\u9875\u53ef\u4ee5\u5bf9\u5e94\u540c\u4e00\u4e2a\u5e27\uff0c\u8fd9\u5c31\u662f\u5171\u4eab\u9875(shared page)\u3002

    \u5171\u4eab\u9875\u53ef\u4ee5\u7528\u6765\u63d0\u9ad8\u4ee3\u7801\u91cd\u7528\u7387\uff0c\u4f8b\u5982\uff0c\u591a\u4e2a\u8fdb\u7a0b\u53ef\u80fd\u4f1a\u4f7f\u7528\u540c\u4e00\u4e2a\u5e93\uff0c\u90a3\u4e48\u8fd9\u4e2a\u5e93\u5c31\u53ef\u4ee5\u88ab\u5171\u4eab\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u5404\u81ea\u5728\u7269\u7406\u5185\u5b58\u4e2d\u51c6\u5907\u4e00\u4efd\u3002\u5171\u4eab\u5e93\u5c31\u901a\u5e38\u662f\u4f7f\u7528\u5171\u4eab\u9875\u6765\u5b9e\u73b0\u76847,8\u3002

    \u518d\u6bd4\u5982\uff0c\u6211\u4eec\u5728\u8fdb\u7a0b\u7ba1\u7406#\u8fdb\u7a0b\u95f4\u901a\u4fe1\u4e2d\u63d0\u5230\u8fc7\u901a\u8fc7\u5171\u4eab\u5185\u5b58\u6765\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff0c\u5728\u67d0\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u5171\u4eab\u5185\u5b58\u5c31\u662f\u901a\u8fc7\u5171\u4eab\u9875\u6765\u5b9e\u73b0\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u9875\u8868\u8bbe\u8ba1\u6539\u8fdb","title":"\u9875\u8868\u8bbe\u8ba1\u6539\u8fdb","text":"

    \u6211\u4eec\u56de\u987e\u4e00\u4e0b\u76ee\u524d\u7684\u9875\u8868\u7684\u8bbe\u8ba1\uff1a\u73b0\u5728\u7684\u9875\u8868\u662f\u4ee5\u9875\u53f7\u4e3a\u7d22\u5f15\u3001\u5e27\u53f7\u4e3a\u503c\u7684\u4e00\u7ef4\u6570\u7ec4\uff0c\u800c\u7531\u4e8e\u6211\u4eec\u76f4\u63a5\u5c06\u9875\u8868\u5b58\u5728\u7269\u7406\u5185\u5b58\u4e2d\uff08\u5426\u5219\u4f1a\u9ec4\u6cb9\u732b3\uff01\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u5176\u5b9e\u9700\u8981\u4e00\u5757\u5b8c\u6574\u7684\u8fde\u7eed\u7269\u7406\u5185\u5b58\u6765\u5b58\u50a8\u6574\u4e2a\u9875\u8868\u2014\u2014\u6bcf\u4e00\u4e2a\u865a\u62df\u5730\u5740\u6211\u4eec\u90fd\u5f97\u5b58\u3002

    \u5047\u8bbe\u6211\u4eec\u7684\u865a\u62df\u5730\u5740\u4e00\u5171 32 \u4f4d\uff0c\u800c page size \u4e3a 4 KB = 212 B\uff0c\u5373 offset \u5bf9\u5e94\u865a\u62df\u5730\u5740 32 \u4f4d\u4e2d\u7684\u540e 12 \u4f4d\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u9700\u8981\u8fde\u7eed\u7684 220 \u4e2a\u8868\u9879\uff08\u5bf9\u5e94\u4e00\u5171 220 \u4e2a\u865a\u62df\u5730\u5740\uff09\u6765\u5b58\u50a8\u9875\u5e27\u7684\u6620\u5c04\u5173\u7cfb\u3002\u5047\u8bbe\u4e00\u4e2a\u8868\u9879 4 Bytes\uff0c\u90a3\u4e48\u5149\u4e00\u4e2a\u9875\u8868\u5c31\u8981\u5360\u636e\u6211\u4eec 4 MB \u7684\u7269\u7406\u5185\u5b58\u2014\u2014\u800c\u4e14\u662f\u8fde\u7eed\u7684\u7269\u7406\u5185\u5b58\u3002\u8fd9\u5b9e\u5728\u662f\u592a\u5938\u5f20\u4e86\uff01

    \u73b0\u5728\u6211\u4eec\u8981\u51b7\u9759\u5730\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff01\u73b0\u5728\u95ee\u9898\u6709\u4e24\u4e2a\uff1a\u24f5 \u9875\u8868\u5b9e\u5728\u592a\u5927\u4e86\uff0c\u24f6 \u5b83\u4e0d\u4ec5\u5927\uff0c\u800c\u4e14\u5fc5\u987b\u662f\u8fde\u7eed\u7684\u3002\u5176\u4e2d\u7b2c\u4e8c\u70b9\u662f\u6700\u5173\u952e\u7684\uff0c\u5728\u672c\u8282\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u5c06\u79f0\u4e4b\u4e3a\u201c\u8fde\u7eed\u5185\u5b58\u7ea6\u675f\u95ee\u9898\u201d\uff08\u975e\u6b63\u5f0f\u8868\u8ff0\uff09\u3002

    \u6211\u4eec\u4ecb\u7ecd\u4e09\u4e2a\u65b9\u6cd5\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898\uff1a\u5206\u5c42\u9875\u8868\u3001\u54c8\u5e0c\u9875\u8868\u548c\u53cd\u8f6c\u9875\u8868\u3002

    \u5206\u5c42\u9875\u8868

    \u540c\u6837\uff0c\u6211\u4eec\u9996\u5148\u6765\u601d\u8003\u4e3a\u4ec0\u4e48\u8fd9\u91cc\u9700\u8981\u7684\u5185\u5b58\u662f\u8fde\u7eed\u7684\u2014\u2014\u4f5c\u4e3a\u4e00\u4e2a\u4e00\u7ef4\u6570\u5b57\uff0c\u53ea\u6709\u5185\u5b58\u8fde\u7eed\u624d\u80fd\u4fdd\u8bc1 random access\u3002\u7c7b\u4f3c\u7684\u95ee\u9898\u6211\u4eec\u5728\u63a2\u7d22\u8fde\u7eed\u5206\u914d\u7684\u8fc7\u7a0b\u4e2d\u5df2\u7ecf\u9047\u5230\u8fc7\u4e86\uff1a\u5728\u7269\u7406\u5730\u5740\u7a7a\u95f4\u4e2d\u5bfb\u6c42\u8fde\u7eed\uff0c\u4e00\u4e2a\u91cd\u8981\u5c31\u662f\u56e0\u4e3a\u53ea\u6709\u7269\u7406\u5730\u5740\u7684\u8bbe\u8ba1\u4e2d\uff0c\u53ea\u6709\u4fdd\u8bc1\u8fde\u7eed\u624d\u80fd\u4fdd\u8bc1\u80fd random access \u5730\u53bb\u8bbf\u95ee\u5730\u5740\uff0c\u800c\u73b0\u5728\u8fd9\u4e2a\u4e00\u7ef4\u6570\u7ec4\u592a\u5927\u5757\u4e86\uff0c\u6211\u4eec\u5e0c\u671b\u5b83\u788e\u4e00\u70b9\uff1b\u800c\u6211\u4eec\u901a\u8fc7\u4fdd\u8bc1\u5206\u5757\u5730\u8fde\u7eed\uff08\u5e27\u5185\u7269\u7406\u5730\u5740\u7684\u8fde\u7eed\uff09\uff0c\u518d\u4fdd\u8bc1\u5757\u7d22\u5f15\u7684\u8fde\u7eed\uff08\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u9875\u53f7\u7684\u8fde\u7eed\uff09\u7684\u65b9\u5f0f\u89e3\u51b3\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c31\u597d\u50cf\u628a\u4e00\u4e2a\u4e00\u7ef4\u6570\u7ec4\u53d8\u6210\u4e86\u4e00\u4e2a\u6307\u9488\u6570\u7ec4\uff0c\u6216\u8005\u8bf4\u903b\u8f91\u4e0a\u7684\u4e8c\u7ef4\u6570\u7ec4\u3002

    \u73b0\u5728\u6211\u4eec\u9047\u5230\u7684\u95ee\u9898\u5b9e\u9645\u4e0a\u5c31\u662f\u8fd9\u4e2a\u201c\u6307\u9488\u6570\u7ec4\u201d\u4e5f\u592a\u5927\u5757\u4e86\uff0c\u5e0c\u671b\u5b83\u80fd\u788e\u4e00\u70b9\uff0c\u6240\u4ee5\u89e3\u51b3\u65b9\u6cd5\u5df2\u7ecf\u547c\u4e4b\u6b32\u51fa\u4e86\u2014\u2014\u5c06\u8fd9\u4e2a\u6307\u9488\u6570\u7ec4\u518d\u8fdb\u884c\u62c6\u5206\uff0c\u53d8\u6210\u4e00\u4e2a\u7ef4\u62a4\u6307\u9488\u6570\u7ec4\u6307\u9488\u7684\u6570\u7ec4\uff0c\u6216\u8005\u8bf4\u903b\u8f91\u4e0a\u7684\u4e09\u7ef4\u6570\u7ec4\uff1a

    page number     page offset\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 p1    \u2502 p2    \u2502 d            \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u770b\u4f5c\u5728\u539f\u5148\u7ef4\u62a4 p2 -> d \u7684 inner \u9875\u8868\u5916\uff0c\u518d\u7ef4\u62a4\u4e00\u4e2a p1 -> inner \u7684 outer \u9875\u8868\u3002\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u6211\u4eec\u51cf\u5c11\u4e86\u5355\u4e2a\u9875\u8868\u6240\u9700\u8981\u5305\u542b\u7684\u8868\u9879\u6570\uff08\u539f\u5148\u4e00\u4e2a\u9875\u8868\u9700\u8981\u6709 2p \u4e2a\u8868\u9879\uff0c\u73b0\u5728\u53ea\u9700\u8981\u6709 2p1 \u6216 2 p2 \u4e2a\u5373\u53ef\uff09\uff1b\u9664\u6b64\u4e4b\u5916\uff0c\u867d\u7136\u770b\u8d77\u6765\u8868\u603b\u91cf\u589e\u52a0\u4e86\uff08\u73b0\u5728\u4e00\u5171\u9700\u8981 2p1+p2 + 2p1 \u4e2a\u8868\uff0c\u539f\u6765\u53ea\u9700\u8981 2p1+p2 \u4e2a\u8868\uff09\uff0c\u4f46\u662f \u24f5 \u4e00\u65b9\u9762\u8fd9\u4e2a\u589e\u52a0\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u76f8\u5bf9\u5c0f\u91cf\uff0c\u24f6 \u53e6\u5916\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u4e0d\u603b\u662f\u9700\u8981\u521b\u5efa\u6240\u6709\u7684\u8868\u2014\u2014\u5047\u8bbe\u67d0\u4e2a inner \u8868\u91cc\u7684\u865a\u62df\u5185\u5730\u5740\u6211\u4eec\u90fd\u7528\u4e0d\u5230\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u521b\u5efa\u8fd9\u4e2a inner \u8868\uff0c\u53ea\u9700\u8981\u5728 outer \u8868\u4e2d\u6807\u8bb0\u8fd9\u4e2a inner \u8868\u662f invalid \u5c31\u53ef\u4ee5\u4e86\u3002

    \u901a\u8fc7\u8fd9\u79cd\u8bbe\u8ba1\uff0c\u6211\u4eec\u6210\u529f\u5730\u8282\u7701\u4e86\u7ef4\u62a4\u9875\u8868\u6240\u9700\u8981\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u540c\u65f6\u51cf\u5c0f\u4e86\u8fde\u7eed\u5185\u5b58\u5bf9\u9875\u8868\u7ef4\u62a4\u7684\u7ea6\u675f\u3002

    \u5982\u4e0a\u8fd9\u79cd\u8bbe\u8ba1\uff0c\u5c31\u662f\u5206\u5c42\u5206\u9875(hierarchical paging)\uff0c\u800c\u4e0a\u9762\u8fd9\u4e2a\u5c31\u662f\u4e8c\u7ea7\u9875\u8868(two-level page table)\u8bbe\u8ba1\u3002

    \u663e\u7136\uff0c\u6709\u4e8c\u5c31\u53ef\u4ee5\u6709\u4e09\uff0c\u6709\u4e09\u5c31\u53ef\u4ee5\u6709\u56db\uff0c\u5177\u4f53\u4f7f\u7528\u54ea\u79cd\uff0c\u5e94\u5f53\u79c9\u6301\u5177\u4f53\u95ee\u9898\u5177\u4f53\u5206\u6790\u7684\u539f\u5219\u3002

    Risc-V

    \u6709\u5174\u8da3\u7684\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003 xg \u7684\u8fd9\u7bc7\u300aRISC-V \u9875\u8868\u76f8\u5173\u300b\u7b14\u8bb0\uff0c\u6765\u4e86\u89e3 Risc-V \u4e2d\u7684\u5206\u9875\u8bbe\u8ba1\uff0c\u5199\u5f97\u5f88\u6e05\u695a\uff0c\u63a8\u8350\u9605\u8bfb\u3002

    \u540c\u65f6\uff0c\u5b9e\u9a8c\u4e09\u6307\u5bfc\u624b\u518c\u4e5f\u63d0\u4f9b\u4e86\u5173\u4e8e Risc-V Sv39 \u7684\u4e00\u4e9b\u4ecb\u7ecd\u3002

    \u54c8\u5e0c\u9875\u8868

    \u7b80\u5355\u56de\u987e\u4e00\u4e0b\u6211\u4eec\u9047\u5230\u7684\u95ee\u9898\uff1a\u9875\u8868\u592a\u5927\uff0c\u800c\u4e14\u5fc5\u987b\u662f\u8fde\u7eed\u7684\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\u6211\u4eec\u4f7f\u7528\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u4ece\u865a\u62df\u5730\u5740\u6765\u770b\u662f\u96c6\u4e2d\u7684\uff0c\u4ece\u7269\u7406\u5730\u5740\u6765\u770b\u662f\u7a00\u758f\u7684\uff0c\u53cd\u6b63\u9875\u8868\u4e2d\u6709\u5927\u91cf\u8868\u9879\u662f invalid \u7684\uff0c\u6240\u4ee5\u60f3\u529e\u6cd5\u4e0d\u5b58\u8fd9\u4e9b\u7528\u4e0d\u5230\u7684\u8868\u9879\uff0c\u4e5f\u662f\u4e00\u79cd\u89e3\u51b3\u601d\u8def\u3002

    Links

    \u54c8\u5e0c\u9875\u8868(hashed page table)\u7ef4\u62a4\u4e86\u4e00\u5f20\u54c8\u5e0c\u8868\uff0c\u4ee5\u9875\u53f7\u7684\u54c8\u5e0c\u4e3a\u7d22\u5f15\uff0c\u7ef4\u62a4\u4e86\u4e00\u4e2a\u94fe\u8868\uff0c\u6bcf\u4e00\u4e2a\u94fe\u8868\u9879\u5305\u542b\u9875\u53f7\u3001\u5e27\u53f7\u3001\u548c\u94fe\u8868 next \u6307\u9488\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u9875\u53f7\u5230\u5e27\u53f7\u7684\u6620\u5c04\u3002\u6b64\u65f6\uff0c\u4e00\u65b9\u9762\u6211\u4eec\u6ca1\u5fc5\u8981\u518d\u7ef4\u62a4\u4e00\u4e2a\u5927\u82e5\u865a\u62df\u5730\u5740\u603b\u6570\u7684\u8868\uff0c\u53e6\u4e00\u65b9\u9762\u7531\u4e8e\u5f15\u5165\u94fe\u8868\uff0c\u5927\u91cf\u7684\u6307\u9488\u64cd\u4f5c\u5bfc\u81f4\u5bf9\u5730\u5740\u8fde\u7eed\u6027\u7684\u8981\u6c42\u964d\u4f4e\uff0c\u4e5f\u80fd\u53d8\u76f8\u5730\u51cf\u8f7b\u8fde\u7eed\u5185\u5b58\u7ea6\u675f\u3002

    clustered page tables

    A variation of this scheme that is useful for 64-bit address spaces has been proposed. This variation uses clustered page tables, which are similar to hashed page tables except that each entry in the hash table refers to several pages (such as 16) rather than a single page.

    Therefore, a single page-table entry can store the mappings for multiple physical-page frames. Clustered page tables are particularly useful for sparse address spaces, where memory references are noncontiguous and scattered throughout the address space.

    \u53cd\u5f0f\u9875\u8868

    \u6211\u4eec\u4e4b\u524d\u7684\u9875\u8868\u901a\u8fc7\u7ef4\u62a4\u865a\u62df\u5730\u5740\u7684\u6709\u5e8f\u6765\u5b9e\u73b0\u5bf9\u9875\u53f7\u7684 random access\uff0c\u4f46\u662f\u4ee3\u4ef7\u662f\u9700\u8981\u7ef4\u62a4\u5927\u91cf\u8fde\u7eed\u865a\u62df\u5730\u5740\u3002\u53cd\u5f0f\u9875\u8868(inverted page table)\u5219\u76f4\u63a5\u5927\u9006\u4e0d\u9053\u5730\u4fee\u6539\u4e86\u6574\u5957\u601d\u8def\u2014\u2014\u4ee5\u7269\u7406\u5730\u5740\u4e3a\u7d22\u5f15\u7ef4\u62a4\u6620\u5c04\u5173\u7cfb\u3002

    \u540c\u65f6\uff0c\u5728\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\uff0c\u6574\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u53ea\u7ef4\u62a4\u4e00\u5f20\u53cd\u8f6c\u9875\u8868\u3002\u7531\u4e8e\u4e0d\u9700\u8981\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u5b58\u50a8\u4e00\u5f20\u9875\u8868\uff0c\u6574\u4f53\u53ea\u5b58\u50a8\u7269\u7406\u5730\u5740\u6570\u91cf\u4e2a\u8868\u9879\uff0c\u6240\u4ee5\u76f8\u5bf9\u6765\u8bf4\u8282\u7701\u4e86\u5185\u5b58\u7a7a\u95f4\u3002

    \u4f46\u662f\u663e\u7136\uff0c\u8fd9\u6837\u505a\u6211\u4eec\u5c31\u6ca1\u6cd5\u81ea\u7136\u5730\u652f\u6301\u5171\u4eab\u9875\u4e864\uff0c\u56e0\u4e3a\u7d22\u5f15\u5e94\u5f53\u662f unique \u7684\u3002\u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u6211\u4eec\u53ea\u505a\u865a\u62df\u5730\u5740 -> \u7269\u7406\u5730\u5740\u7684\u67e5\u8be2\uff0c\u6240\u4ee5\u5728\u8fd9\u79cd\u7ed3\u6784\u4e0b\u6211\u4eec\u53ea\u80fd\u904d\u5386\u6574\u4e2a\u8868\u6765\u627e\u6620\u5c04\u5173\u7cfb\u3002\u8bf8\u5982\u6b64\u7c7b\u8fd8\u6709\u4e0d\u5c11\u9650\u5236\u3002

    \u603b\u800c\u8a00\u4e4b\uff0c\u6211\u89c9\u5f97\u8fd9\u4e2a\u65b9\u6cd5\u5f88\u81ed\u3002

    \u5176\u5b83

    \u53ef\u80fd\u8fd8\u4f1a\u6d89\u53ca\u4e00\u4e9b\u6bb5\u5f0f\u8bbe\u8ba1\u4ee5\u53ca\u76f8\u5173\u8bbe\u8ba1\uff0c\u4f46\u662f\u5e76\u4e0d\u4e3b\u6d41\uff0c\u4f46\u8003\u8bd5\u53ef\u80fd\u4f1a\u8003\uff0c\u5927\u5bb6\u53ef\u4ee5\u9009\u62e9\u6027\u53bb\u4e86\u89e3\u4e00\u4e0b\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u4ea4\u6362\u6280\u672f","title":"\u4ea4\u6362\u6280\u672f","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u53ea\u6709\u5728\u5185\u5b58\u4e2d\u7684\u6307\u4ee4(instructions)\u624d\u80fd\u88ab CPU \u6267\u884c\uff0c\u56e0\u800c\u5185\u5b58\u5927\u5c0f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u9650\u5236\u4e86\u591a\u9053\u7a0b\u5ea6(degree of multiprogramming)\u3002\u4f46\u662f\uff0c\u5927\u90e8\u5206\u5185\u5bb9\u5e76\u4e0d\u9700\u8981\u5168\u7a0b\u5f85\u5728\u5185\u5b58\u4e2d6\uff0c\u5373\u4e0d\u4f1a\u9891\u7e41\u5730\u88ab\u4f7f\u7528\u3002

    \u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u8003\u8651\u5728\u4e0d\u9700\u8981\u7684\u65f6\u5019\u5c06\u90e8\u5206\u5185\u5bb9\u653e\u5728\u540e\u5907\u5b58\u50a8(backing store)\u4e2d\uff0c\u800c\u5728\u9700\u8981\u7684\u65f6\u5019\u518d\u5c06\u5b83\u4eec\u5f04\u5230\u5185\u5b58\u91cc\u2014\u2014\u8fd9\u5c31\u662f\u4ea4\u6362(swap)\u6280\u672f\u3002\u5728\u5e94\u7528\u4ea4\u6362\u6280\u672f\u540e\uff0c\u90a3\u4e9b\u5b9e\u9645\u653e\u5728\u540e\u5907\u5b58\u50a8\u91cc\u7684 instructions\uff0c\u53ef\u4ee5\u201c\u5047\u88c5\u4e5f\u5728\u5185\u5b58\u4e2d\u201d\uff0c\u5373 high level \u7684\u770b\uff0c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u5b83\u5230\u5e95\u662f\u653e\u5728\u5185\u5b58\u8fd8\u662f\u540e\u5907\u5b58\u50a8\u91cc\uff0c\u4f46\u662f\u4fdd\u8bc1\u5f53 CPU \u9700\u8981\u8bbf\u95ee\u8fd9\u4e00\u5757\u5185\u5bb9\u65f6\uff0c\u8fd9\u4e9b\u5185\u5bb9\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\u3002

    \u5728\u8fd9\u91cc\u6211\u4eec\u53ea\u7b80\u5355\u4ecb\u7ecd\u4e00\u4e0b\u4ea4\u6362\u7684\u601d\u60f3\uff0c\u800c\u5177\u4f53\u7684\u7ec6\u8282\u4e0e\u5b9e\u73b0\uff0c\u5c06\u4f1a\u5728\u4e4b\u540e\u8fde\u540c\u66f4\u660e\u786e\u7684\u5b9a\u4e49\u7ed9\u51fa\u3002

    Standard swapping of two processes using a disk as a backing store.

    \u5728\u6807\u51c6\u7684 swap \u64cd\u4f5c\u4e2d\uff0c\u6211\u4eec\u4ee5\u8fdb\u7a0b\u4e3a\u5355\u4f4d\u8fdb\u884c swap\uff0c\u8fd9\u610f\u5473\u7740\u6211\u4eec\u8981\u628a\u6240\u6709 per-process \u7684\u4e1c\u897f\u90fd\u4e00\u540c swap\uff0c\u76f8\u5f53\u4e8e\u201c\u51bb\u7ed3\u201d\u6574\u4e2a process \u6216\u201c\u89e3\u51bb\u201d\u4e86\u6574\u4e2a process\uff0c\u5c31\u597d\u50cf\u8de8\u5185\u5b58\u548c\u540e\u5907\u5b58\u50a8\u8fdb\u884c context switch\u3002\u53ef\u60f3\u800c\u77e5\uff0c\u8fd9\u4e2a\u5f00\u9500\u662f\u5de8\u5927\u7684\u3002

    \u5982\u4eca\u6211\u4eec\u6709\u5206\u9875\u6280\u672f\uff0c\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u4ee5\u9875/\u5e27\u4e3a\u5355\u4f4d\u8fdb\u884c swap\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u79f0\u8fd9\u79cd\u4ee5\u9875/\u5e27\u4e3a\u5355\u4f4d\u7684\u4ea4\u6362(swap)\u53eb\u6362\u9875(page)\u3002

    \u663e\u7136\u8fd9\u91cc\u7684 \u201cpage\u201d \u662f\u57fa\u4e8e Definition 2\u3002

    Swapping with paging.

    \u4f18\u52bf

    \u5229\u7528\u9875\u7f6e\u6362\u6280\u672f\u548c\u865a\u62df\u5185\u5b58\u7684\u7ec4\u5408\u62f3\uff0c\u6211\u4eec\u53ef\u4ee5\u8ba9\u8fdb\u7a0b\u6240\u4f7f\u7528\u7684\u5185\u5b58\u7a7a\u95f4\u603b\u548c\u770b\u8d77\u6765\u5927\u4e8e\u786c\u4ef6\u652f\u6301\u7684\u7269\u7406\u5185\u5b58\u7a7a\u95f4\u5927\u5c0f\u4e0a\u9650\uff0c\u6269\u5c55\u62bd\u8c61\u7684\u201c\u5185\u5b58\u201d\u7684\u5bb9\u91cf\u3002

    Diagram showing virtual memory that is larger than physical memory.

    \u5b8f\u89c2\u5730\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u53ea\u5c06\u6bcf\u4e2a\u8fdb\u7a0b\u4e2d\u6700\u8feb\u5207\u9700\u8981\u7684\u90a3\u4e9b\u9875\u7559\u5728\u7269\u7406\u5185\u5b58\u4e2d\uff0c\u5bf9\u8fdb\u7a0b\u8fdb\u884c\u9875\u7ea7\u7684\u5185\u5b58\u7ba1\u7406\uff0c\u4e8e\u662f\u5e73\u5747\u6bcf\u4e2a\u8fdb\u7a0b\u9700\u8981\u5728\u7269\u7406\u5185\u5b58\u4e2d\u7684\u6570\u636e\u91cf\u66f4\u5c0f\u3001\u7269\u7406\u5185\u5b58\u4e2d\u53ef\u4ee5\u5b58\u653e\u7684\u201c\u8fdb\u7a0b\u201d\u6570\u91cf\u66f4\u591a\u3001\u591a\u9053\u7a0b\u5ea6(degree of multiprogramming)\u5f97\u4ee5\u63d0\u9ad8\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#swap-\u7a7a\u95f4","title":"swap \u7a7a\u95f4","text":"

    \u8fdb\u884c swap \u9700\u8981\u4ece\u540e\u5907\u5b58\u50a8\u4e2d\u6765\u83b7\u53d6\u8fdb\u7a0b\u5185\u5bb9\u3002\u5728\u540e\u5907\u5b58\u50a8\u4e2d\uff0c\u6709\u4e00\u5757\u4e13\u95e8\u7528\u6765\u505a\u8fd9\u4ef6\u4e8b\u7684\u5730\u65b9\uff0c\u53eb\u4ea4\u6362\u7a7a\u95f4(swap space)\uff0c\u901a\u5e38\u548c swap space \u8fdb\u884c\u4ea4\u6362\u4f1a\u66f4\u5feb\u3002\u4f46\u662f\uff0c\u4ee3\u7801\u5e76\u4e0d\u662f\u4e00\u5f00\u59cb\u5c31\u5728\u4ea4\u6362\u7a7a\u95f4\u7684\uff0c\u6211\u4eec\u9700\u8981\u627e\u4e00\u4e2a\u65f6\u673a\u628a\u4ee3\u7801\u653e\u8fdb\u53bb\u4ee5\u540e\uff0c\u624d\u80fd\u7eb5\u4eab\u4e1d\u6ed1\u3002

    \u4e00\u79cd naive \u7684\u505a\u6cd5\u662f\uff0c\u5728\u8fdb\u7a0b\u521b\u5efa\u7684\u65f6\u5019\u5c31\u628a\u6574\u4e2a\u4ee3\u7801\u955c\u50cf\u653e\u8fdb\u4ea4\u6362\u7a7a\u95f4\uff0c\u8fd9\u4e2a\u505a\u6cd5\u7684\u7f3a\u70b9\u5c31\u662f\u5b83\u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u4f1a\u9700\u8981\u5728\u4e00\u5f00\u59cb\u505a\u4e00\u4e2a\u5927\u89c4\u6a21\u7684\u590d\u5236\uff0c\u8fd9\u4e2a\u505a\u6cd5\u6709\u8bf8\u591a\u663e\u7136\u7684\u5f0a\u7aef\u3002

    \u53e6\u4e00\u79cd\u505a\u6cd5\u662f\uff0c\u5f53\u4e00\u4e2a page \u7b2c\u4e00\u6b21\u88ab\u4f7f\u7528\u7684\u65f6\u5019\uff0c\u5b83\u4ece\u6587\u4ef6\u7cfb\u7edf\u4e2d\u88ab page in\uff1b\u800c\u5728\u88ab replace \u800c page out \u7684\u65f6\u5019\uff0c\u5c06\u5b83\u5199\u5165 swap space\u3002\u8fd9\u6837\uff0c\u4e0b\u6b21\u9700\u8981\u8fd9\u4e2a page \u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u4ece swap space \u91cc page in\u3002

    \u8fd8\u6709\u4e00\u79cd\u7b56\u7565\u662f\uff0c\u5f53\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u67d0\u4e2a\u9875\u9762\u65f6\uff0c\u5b83\u4f1a\u76f4\u63a5\u4ece\u6587\u4ef6\u7cfb\u7edf\u4e2d\u5c06\u8fd9\u4e9b\u9875\u9762\u52a0\u8f7d\u5230\u5185\u5b58\u4e2d\u3002\u8fd9\u4e9b\u9875\u9762\u5728\u5185\u5b58\u4e2d\u7684\u526f\u672c\u662f\u4e0d\u4f1a\u88ab\u4fee\u6539\u7684\uff0c\u56e0\u6b64\u5f53\u8fd9\u4e9b\u5185\u5b58\u9700\u8981\u88ab\u66ff\u6362\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u88ab\u8986\u76d6\u3002\uff08\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6587\u4ef6\u7cfb\u7edf\u672c\u8eab\u5c31\u50cf\u4e00\u4e2a\u540e\u5907\u5b58\u50a8\uff09\u4f46\u662f\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u4e0d\u4e0e\u6587\u4ef6\u76f8\u5173\u8054\u7684\u9875\u9762\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u533f\u540d\u5185\u5b58(anonymous memory)\uff0c\u4f8b\u5982\u8fdb\u7a0b\u7684\u6808\u548c\u5806\uff0c\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u4ea4\u6362\u7a7a\u95f4\u3002

    \u8fd9\u4e00\u90e8\u5206\u7684\u5185\u5bb9\u5199\u7684\u6bd4\u8f83\u7b80\u7565\uff0c\u5bf9\u5e94\u8bfe\u672c 10.2.3 \u7684\u540e\u534a\u90e8\u5206\u3002

    \u4f46\u662f\u65e0\u8bba\u5982\u4f55\uff0c\u786c\u76d8\u7684\u901f\u5ea6\u8fd8\u662f\u4e0d\u5982\u5185\u5b58\uff0c\u6240\u4ee5\u5728\u5185\u5b58\u8db3\u591f\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u4e00\u822c\u4e0d\u4f7f\u7528 swap\u3002

    \u5728\u4e0b\u4e00\u8282\uff0c\u6211\u4eec\u5f15\u5165\u4e00\u5957\u66f4\u5b8c\u5584\u7684\u865a\u62df\u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\uff1ademand paging\u3002

    1. Translation lookaside buffer | Wikipedia \u21a9

    2. Cache replacement policies | Wikipedia \u21a9

    3. \u51fa\u81ea Buttered cat paradox | Wikipedia\uff0c\u6211\u5728\u8fd9\u91cc\u8868\u793a\u6b7b\u5faa\u73af\u3002\u00a0\u21a9\u21a9

    4. how does an inverted page table deal with multiple process accessing the same frame | Stack Overflow \u21a9

    5. What is the difference between executable and relocatable in elf format? | Stack Overflow \u21a9

    6. \u4f8b\u5982 \u24f5 \u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\uff0c\u5f02\u5e38\u7c7b\u578b\u53ef\u80fd\u5f88\u591a\uff0c\u5bf9\u5e94\u7684\u5904\u7406\u65b9\u6848\u53ef\u80fd\u4e5f\u4f1a\u6709\u5f88\u591a\uff0c\u4f46\u5747\u644a\u4e0b\u6765\u6bcf\u4e00\u4e2a\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u7684\u4f7f\u7528\u9891\u7387\u90fd\u4e0d\u4f1a\u5f88\u9ad8\uff1b\u24f6 \u6570\u7ec4\u5217\u8868\u7b49\u76f8\u5bf9\u4e0d\u90a3\u4e48\u667a\u80fd\u7684\u6570\u636e\u7ed3\u6784\u5728\u5b9a\u4e49\u58f0\u660e\u7684\u65f6\u5019\u53ef\u80fd\u5f00\u4e86\u4e00\u5927\u5757\u5185\u5b58\uff0c\u57fa\u672c\u90fd\u662f\u4e3a\u4e86 bound \u4f4f\u53ef\u80fd\u9700\u8981\u7684\u5185\u5b58\u91cf\u7684\u4e0a\u754c\uff0c\u4f46\u662f\u53ef\u80fd\u5b9e\u9645\u4e0a\u7ecf\u5e38\u78b0\u4e0d\u5230\u4e0a\u754c\uff0c\u4f8b\u5982\u6211\u7533\u8bf7\u4e86\u4e00\u4e2a 1024 \u957f\u7684 int \u6570\u7ec4\uff0c\u4f46\u662f\u6211\u53ef\u80fd\u4e00\u822c\u53ea\u4f1a\u7528\u5230\u5176\u4e2d\u7684\u524d 128 \u4e2a\u5143\u7d20\uff1b\u24f7 \u4e00\u4e9b\u53ef\u80fd\u5355\u7eaf\u4e0d\u600e\u4e48\u5e38\u7528\u7684\u529f\u80fd\uff0c\u9053\u7406\u548c\u7b2c\u4e00\u70b9\u662f\u7c7b\u4f3c\u7684\u3002\u00a0\u21a9

    7. Shared Memory \"Segment\" in Operating System | Stack Overflow \u21a9

    8. Where is linux shared memory actually located? | Stack Overflow \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/","title":"U3 Part 2: \u5185\u5b58\u7ba1\u7406 | Memory Management","text":"

    \u7ea6 7911 \u4e2a\u5b57 21 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 40 \u5206\u949f

    \u5bfc\u8bfb

    \u4e0a\u4e00\u8282\u6211\u4eec\u4ecb\u7ecd\u4e86\u5185\u5b58\u7684\u4e00\u4e9b\u57fa\u672c\u8bbe\u8ba1\uff0c\u5e76\u5728\u6700\u540e\u63d0\u51fa\u4e86 swap\uff0c\u8fd9\u4e00\u8282\u6211\u4eec\u5c06\u5229\u7528 swap \u7684\u601d\u60f3\uff0c\u63d0\u51fa\u4e00\u5957\u66f4\u5b8c\u5584\u7684\u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\uff1ademand paging\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u6309\u9700\u6362\u9875\u7cfb\u7edf\u6982\u8ff0","title":"\u6309\u9700\u6362\u9875\u7cfb\u7edf\u6982\u8ff0","text":"

    \u6309\u9700\u6362\u9875(demand paging)Wiki\u548c\u4ea4\u6362\u6280\u672f\u4e2d\u7684\u9875\u7f6e\u6362\u5f88\u7c7b\u4f3c\uff0c\u6307\u53ea\u628a\u88ab\u9700\u8981\u7684\u9875\u8f7d\u5165\u5185\u5b58\uff0c\u662f\u4e00\u79cd\u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\u3002

    pure demand paging

    \u5982\u679c\u6fc0\u8fdb\u4e00\u70b9\uff0c\u5982\u679c\u5728\u88ab\u9700\u6c42\u4e4b\u524d\u9875\u4e0d\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\uff0c\u53ea\u6709\u5728\u5185\u5b58\u88ab\u9700\u6c42\u540e\u624d\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u7eaf\u6309\u9700\u6362\u9875(pure demand paging)\u3002

    This scheme is pure demand paging: never bring a page into memory until it is required.

    pre-paging

    Pure demand paging \u7684\u7f3a\u70b9\u5c31\u662f\u5728\u7a0b\u5e8f\u5f00\u59cb\u7684\u65f6\u5019\u4f1a\u4ea7\u751f\u5927\u91cf\u7684 page fault\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u529e\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u4e00\u5f00\u59cb\u5c06\u9700\u8981\u7684\u9875\u4e00\u8d77\u5b58\u5165\u5185\u5b58\u3002\u8fd9\u79cd\u505a\u6cd5\u53eb\u505a\u9884\u6362\u9875(pre-paging)\u3002

    \u665a\u4e9b\u6211\u4eec\u4ecb\u7ecd\u7684 working set \u7684\u8bbe\u8ba1\u601d\u8def\u53ef\u4ee5\u7528\u4e8e\u5904\u7406 pre-paging\u3002

    \u53ef\u4ee5\u60f3\u8c61\uff0c\u73b0\u5728\u7ed9\u5b9a\u4efb\u610f\u4e00\u4e2a\u865a\u62df\u5730\u5740\uff0c\u6709\u4e09\u79cd\u53ef\u80fd\uff1a

    1. \u8be5\u201c\u5730\u5740\u201d\u5728\u7269\u7406\u5185\u5b58\u4e2d\uff0c\u9875\u8868\u4e2d\u5b58\u5728\u865a\u62df\u5185\u5b58\u5230\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u662f valid \u7684\uff1b
    2. \u8be5\u201c\u5730\u5740\u201d\u5728\u540e\u5907\u5b58\u50a8\u4e2d\uff0c\u9875\u8868\u4e2d\u4e0d\u5b58\u5728\u865a\u62df\u5185\u5b58\u5230\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u662f invalid \u7684\uff1b
    3. \u8be5\u201c\u5730\u5740\u201d\u5e76\u6ca1\u6709\u88ab\u5206\u914d\uff0c\u9875\u8868\u4e2d\u4e0d\u5b58\u5728\u865a\u62df\u5185\u5b58\u5230\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u662f invalid \u7684\uff0c\u6216\u6743\u9650\u4e0d\u7b26\uff08\u5982\u8bd5\u56fe\u5199\u5165\u4e00\u4e2a\u53ea\u8bfb\u9875\uff09\uff1b

    \u4e0e\u5f15\u5165\u4ea4\u6362\u6280\u672f\u4e4b\u524d\u7684\u9875\u8868\u8bbe\u8ba1\u76f8\u6bd4\uff0c\u591a\u51fa\u6765\u7684\u5c31\u662f\u60c5\u51b5 2.\u3002\u5982\u679c\u7cfb\u7edf\u8bbf\u95ee\u4e86\u4e00\u4e2a\u5728\u9875\u8868\u4e2d\u662f invalid \u7684\u9875\uff0c\u5c31\u4f1a\u751f\u6210\u5f02\u5e38\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u60c5\u51b5\u4e3a\u7f3a\u9875(page fault)\u3002

    major & minor page fault

    \u5b9e\u9645\u4e0a\uff0c\u60c5\u51b5 2. \u8fd8\u53ef\u4ee5\u7ec6\u5206\u4e3a\u4e24\u79cd\uff0c\u4e00\u79cd\u662f major/hard page fault\uff0c\u4e00\u79cd\u662f minor/soft page fault\u3002

    Major page fault \u6307\u7684\u662f\u7f3a\u4e86\u7684\u9875\u4e0d\u5728\u5185\u5b58\u4e2d\u7684\u60c5\u51b5\uff1b\u800c minor page fault \u6307\u7684\u662f\u7f3a\u4e86\u7684\u9875\u5728\u5185\u5b58\u4e2d\u5b58\u5728\uff0c\u53ea\u4e0d\u8fc7\u6ca1\u5728\u5f53\u524d\u9875\u8868\u4e2d\u5efa\u7acb\u6620\u5c04\u3002

    \u8fd9\u91cc\u7a0d\u5fae\u7ec6\u8bf4\u4e00\u4e0b minor page fault\uff0c\u51fa\u73b0 minor page fault \u6709\u4e24\u79cd\u53ef\u80fd\uff1a

    1. \u8fdb\u7a0b\u53ef\u80fd\u9700\u8981\u5f15\u7528\u4e00\u4e2a\u5171\u4eab\u5e93\u7684 page\uff0c\u800c\u8fd9\u4e2a\u5171\u4eab\u5e93\u7684 page \u5df2\u7ecf\u5728\u5185\u5b58\u4e2d\uff0c\u6211\u4eec\u53ea\u9700\u8981\u66f4\u65b0\u4e00\u4e0b\u9875\u8868\u628a\u5b83\u94fe\u4e0a\u53bb\u5c31\u884c\u4e86\uff1b
    2. \u8fdb\u7a0b\u53ef\u80fd\u9700\u8981\u5f15\u7528\u4e00\u4e2a\u4e4b\u524d\u88ab\u91ca\u653e\u4e86\u7684 page\uff0c\u800c\u90a3\u4e2a\u88ab\u91ca\u653e\u7684 page \u8fd8\u6ca1\u6709\u88ab flush \u6216\u5206\u914d\u7ed9\u522b\u7684\u8fdb\u7a0b\uff0c\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u4e2a page\uff08\u6361\u5783\u573e\uff01\u4e94\u79d2\u539f\u5219\uff1f\uff09\uff1b

    \u533a\u522b\u4e8e\u4e4b\u524d\u7684\u9875\u8868\u8bbe\u8ba1\u2014\u2014\u8bbf\u95ee invalid \u7684\u8868\u9879\u662f\u4e00\u79cd\u9884\u671f\u5916\u884c\u4e3a\uff0c\u73b0\u5728\u4ea7\u751f\u7f3a\u9875\u53cd\u800c\u66f4\u591a\u662f\u4e00\u79cd\u9884\u671f\u5185\u7684\u884c\u4e3a\u2014\u2014\u7cfb\u7edf\u5bf9\u67d0\u4e2a\u88ab page out \u4e86\u7684\u9875\u4ea7\u751f\u4e86\u201c\u9700\u6c42\u201d\u3002\u5f53\u7136\uff0c\u60c5\u51b5 3. \u8fd9\u79cd\u975e\u6cd5\u64cd\u4f5c\u4e5f\u4f1a\u5f15\u8d77\u5f02\u5e38\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728\u4e4b\u540e\u7684\u5f02\u5e38\u5904\u7406\u8fc7\u7a0b\u4e2d\u5bf9\u6b64\u505a\u533a\u5206\u5e76\u5206\u522b\u5904\u7406\u3002

    \u8bf4\u5b9e\u8bdd\u5176\u5b9e\u6211\u611f\u89c9\u8fd9\u91cc\u7684\u903b\u8f91\u7a0d\u5fae\u6709\u70b9\u7ed5\uff0c\u53ef\u80fd\u662f\u4e00\u4e9b\u5386\u53f2\u539f\u56e0\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u5c31\u9700\u8981\u53bb\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38\u7684\u5927\u6982\u6d41\u7a0b\u5982\u4e0b\uff1a

    page fault \u5904\u7406\u6d41\u7a0b

    1. \u68c0\u67e5\u4e00\u5f20 PCB \u91cc\u7684\u5185\u90e8\u8868\uff0c\u6765\u533a\u5206\u8fd9\u4e2a\u5730\u5740\u5230\u5e95\u662f\u60c5\u51b5 2. \u8fd8\u662f\u60c5\u51b5 3.\uff1b
      1. \u5982\u679c\u662f\u60c5\u51b5 2.\uff0c\u5219\u7ee7\u7eed\u5982\u4e0b\u64cd\u4f5c\u4ee5\u5c06\u5176 page in\uff1b
      2. \u5982\u679c\u662f\u60c5\u51b5 3.\uff0c\u5219\u7ec8\u6b62\u8fdb\u7a0b\uff1b
    2. \u4ece\u53ef\u7528\u5e27\u5217\u8868\u91cc\u62ff\u51fa frame \u7528\u6765\u5199\u5165\uff1b
      • \u5982\u679c\u53ef\u7528\u5e27\u5217\u8868\u4e3a\u7a7a\uff0c\u5219\u8fdb\u884c\u9875\u7f6e\u6362\uff1b
    3. \u5f00\u59cb\u4ece\u540e\u5907\u5b58\u50a8\u8bfb\u53d6\u5185\u5bb9\uff0c\u5e76\u5199\u5165 frame\uff1b
    4. \u5b8c\u6210\u8bfb\u5199\u540e\uff0c\u66f4\u65b0\u5185\u90e8\u8868\u548c\u9875\u8868\u7b49\u5143\u4fe1\u606f\uff1b
    5. \u91cd\u65b0\u6267\u884c\u5f15\u8d77 page fault \u7684 instruction\uff1b
      • \u8be5\u64cd\u4f5c\u5341\u5206\u5173\u952e\uff0c\u7c7b\u4f3c\u4e8e\u6b7b\u9501\u91cc\u7684\u56de\u6eda\u64cd\u4f5c\uff0c\u652f\u6301\u8fd9\u9879\u64cd\u4f5c\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u96be\u5ea6\uff0c\u5305\u62ec\u5982\u4f55\u786e\u5207\u5730\u6062\u590d\u56de\u6307\u4ee4\u6267\u884c\u4e4b\u524d\u7684\u72b6\u6001\u3001\u5982\u4f55\u6d88\u9664\u6267\u884c\u4e86\u4e00\u534a\u7684\u6307\u4ee4\u7684\u6548\u679c\u7b49\uff1b

    Steps in handling a page fault.

    \u6211\u4eec\u53ef\u4ee5\u5728 Lab5 \u91cc\u5bf9\u8fd9\u4e00\u7cfb\u5217\u6b65\u9aa4\u6709\u8ddf\u6df1\u523b\u7684\u5f71\u54cd\uff0cLab5 \u4e2d\u7684 vma \u5927\u6982\u5c31\u662f\u8fd9\u91cc\u7684\u201c\u5185\u90e8\u8868\u201d\u3002

    \u6162\uff01

    \u60f3\u8c61\u4e00\u4e0b\uff0c\u6bcf\u5f53\u53d1\u751f\u4e00\u6b21 page fault\uff0c\u5e76\u4e14\u6211\u4eec\u5047\u8bbe\u8fd9\u4e9b page faults \u90fd\u5c5e\u4e8e\u60c5\u51b5 2.\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u7ecf\u5386\u8fd9\u4e9b\u8fc7\u7a0b\uff1a

    1. \u4ea7\u751f\u5f02\u5e38\u540e\uff0c\u8fdb\u884c\u4e00\u6b21 context switch \u540e\u8fdb\u5165\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\uff1b
      1. \u5904\u7406\u5f02\u5e38\uff0c\u5305\u62ec\u51b3\u5b9a\u5f02\u5e38\u7c7b\u578b\u3001\u5728\u5185\u90e8\u8868\u91cc\u5bfb\u627e\u5730\u5740\u5bf9\u5e94\u4e8e\u540e\u5907\u5b58\u50a8\u4e2d\u7684\u4f55\u5904\uff1b
      2. \u53d1\u8d77\u540e\u5907\u5b58\u50a8 -> \u5185\u5b58\u7684 I/O \u8bf7\u6c42\uff1b
    2. \uff08\u7b49\u5f85\u8fc7\u7a0b\u4e2d CPU \u88ab\u8c03\u5ea6\uff09\uff1b
    3. I/O \u4e2d\u65ad\u4ea7\u751f\uff0c\u6b64\u65f6\u4e5f\u4f1a\u6709\u4e00\u4e2a context switch\uff1b
      • \u5904\u7406\u4e2d\u65ad\uff0c\u5305\u62ec\u51b3\u5b9a\u4e2d\u65ad\u7c7b\u578b\u3001\u66f4\u65b0\u9875\u8868\u548c\u5176\u4ed6\u5185\u90e8\u8868\uff1b
    4. \u7b49\u5f85 CPU \u518d\u6b21\u8c03\u5ea6\u5230\u8be5\u8fdb\u7a0b\uff0c\u663e\u7136\u8fd9\u91cc\u4e5f\u6709\u4e2a context switch\uff1b
      • \u505a\u4e00\u4e9b\u56de\u6eda\u64cd\u4f5c\uff0c\u7136\u540e\u91cd\u65b0\u6267\u884c\u5f15\u8d77 page fault \u7684\u6307\u4ee4\uff1b

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5904\u7406 page fault \u8d85\u6162\u7684\uff01\u56e0\u6b64\uff0c\u6211\u4eec\u5e94\u5f53\u5c3d\u53ef\u80fd\u51cf\u5c11 page fault rate\u3002

    \u601d\u8003\u9898

    \u4e0b\u9762\u4e24\u6bb5\u7a0b\u5e8f\u5c55\u793a\u7684\u4ee3\u7801\u6bb5\u7684\u6267\u884c\u6548\u7387\u662f\u5426\u6709\u533a\u522b\uff1f\u5982\u679c\u4e0e\u533a\u522b\u7684\u8bdd\uff0c\u54ea\u4e2a\u66f4\u5feb\uff1f\u4e3a\u4ec0\u4e48\uff1f

    const int N = PAGE_SIZE;\n\nvoid foo() {\n/* ... */\nfor (int i = 0; i < N; i++) {\nfor (int j = 0; j < N; j++) {\na[i][j] = 0;\n}\n}\n/* ... */\n}\n\nvoid bar() {\n/* ... */\nfor (int j = 0; j < N; j++) {\nfor (int i = 0; i < N; i++) {\na[i][j] = 0;\n}\n}\n/* ... */\n}\n
    \u63d0\u793a

    \u8003\u8651 a[i][j] \u7684\u5143\u7d20\u5728\u5185\u5b58\u4e0a\u7684\u5206\u5e03\uff0c\u8003\u8651 page fault \u7684\u6b21\u6570\uff1afoo() \u4f1a\u4ea7\u751f \\(N\\) \u6b21 page fault\uff0c\u800c bar() \u4f1a\u4ea7\u751f \\(N^2\\) \u6b21 page fault\u3002

    \u505a\u5230\u7c7b\u4f3c\u7684\u9898\u7684\u65f6\u5019\u8981\u6ce8\u610f PAGE_SIZE \u7684\u5927\u5c0f\uff0c\u4ee5\u53ca\u4f7f\u7528\u7684 replacement algorithm\u3002

    \u7a0b\u5e8f\u6267\u884c\u7684\u5c40\u90e8\u6027\u5047\u8bbe\u4e0b\uff0c\u5e94\u5f53\u4e0d\u4f1a\u56e0\u4e3a page fault \u592a\u9891\u7e41\u5bfc\u81f4\u5e26\u6765\u4e0d\u53ef\u63a5\u53d7\u7684\u989d\u5916\u5f00\u9500\u3002\u9700\u8981\u6ce8\u610f\uff0c\u5355\u6761\u6307\u4ee4\u662f\u6709\u53ef\u80fd\u5e26\u6765\u82e5\u5e72\u6b21 page fault \u7684\uff08\u4f8b\u5982\u53ef\u80fd\u5728 instruction fetch \u7684\u65f6\u5019\u4ea7\u751f\u3001\u53ef\u80fd\u5728 operand fetch \u7684\u65f6\u5019\u4ea7\u751f\u7b49\uff09\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u56de\u987e-copy-on-write","title":"\u56de\u987e copy on write","text":"

    \u6211\u4eec\u5728\u8fdb\u7a0b\u7ba1\u7406\u4e00\u8282\u4e2d\u63d0\u51fa\u4e86 copy on write \u6280\u672f\u548c vfork \u6280\u672f\uff0c\u73b0\u5728\u8bfb\u8005\u53ef\u4ee5\u5c1d\u8bd5\u518d\u56de\u987e\u4e00\u4e0b\u8fd9\u4e24\u4e2a\u77e5\u8bc6\u70b9\u4e0e\u672c\u8282\u5185\u5bb9\u7684\u8054\u7cfb\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u53ef\u7528\u5e27\u5217\u8868","title":"\u53ef\u7528\u5e27\u5217\u8868","text":"

    \u5728 demand paging \u7cfb\u7edf\u91cc\uff0c\u9875\u662f\u52a8\u6001\u5730\u88ab\u6620\u5c04\u5230\u5e27\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u53ef\u7528\u5e27\u5217\u8868(free-frame list)\uff0c\u7528\u6765\u8bb0\u5f55\u5f53\u524d\u54ea\u4e9b\u5e27\u662f\u7a7a\u95f2\u7684\u3002

    Example of free-frame list.

    \u5728\u7cfb\u7edf\u542f\u52a8\u540e\uff0c\u6211\u4eec\u9700\u8981\u5c06\u6240\u6709\u53ef\u7528\u7684\u5e27\u90fd\u52a0\u5165\u5230 free-frame list \u4e2d\uff1b\u5f53\u6709\u7528\u6237\u9700\u8981\u7269\u7406\u5185\u5b58\u65f6\u5019\uff0c\u5c31\u4ece free-frame list \u4e2d\u53d6\u51fa\u4e00\u9879\uff0c\u5bf9\u5176\u8fdb\u884c\u64e6\u9664\uff0c\u5373\u88ab\u9700\u6c42\u65f6\u6e05\u96f6(zero-fill-on-deman)\u3002

    \u8003\u8651\u4e3a\u4ec0\u4e48\u8981\u6267\u884c zero-fill-on-deman\uff01

    \u5982\u679c\u8bfb\u8005\u8db3\u591f\u654f\u9510\u5c31\u4f1a\u53d1\u73b0\uff0c\u6211\u4eec\u53ea\u8bf4\u4e86\u600e\u4e48\u53d6\u51fa free-frame\uff0c\u800c\u6ca1\u8bf4 free-frame \u5982\u4f55\u201c\u518d\u751f\u201d\u3002

    \u5f53\u6211\u4eec\u53d1\u73b0 free-frame list \u4e3a\u7a7a\uff0c\u5373\u6ca1\u6709\u7a7a\u95f2\u7684 frame \u65f6\uff0c\u6211\u4eec\u8003\u8651\u5c06\u4e00\u4e9b\u5148\u524d\u5df2\u7ecf\u88ab\u5206\u914d\u7684 frame \u7ed9 page out \u8d70\uff0c\u62ff\u6765\u7ed9\u5f53\u524d\u8fd9\u4e2a\u9875\u7528\u3002\u800c\u5177\u4f53\u5982\u4f55\u9009\u62e9\u6362\u8d70\u54ea\u4e2a frame\uff0c\u6211\u4eec\u4f1a\u5728\u7f6e\u6362\u7b56\u7565\u4e00\u8282\u4e2d\u4ecb\u7ecd\u3002

    free-frame buffer pool

    \u867d\u7136\u6211\u4eec\u8fd8\u6ca1\u4ecb\u7ecd\u7f6e\u6362\u7b56\u7565\uff0c\u4f46\u662f\u60f3\u8c61\u4e00\u4e0b\uff0c\u5982\u679c\u7b49\u5230\u6ca1\u6709 free-frame \u7684\u65f6\u5019\u518d\u53bb\u505a\u7f6e\u6362\uff0c\u90a3\u4e48\u8fdb\u7a0b\u5c31\u9700\u8981\u7b49\u5f85\u7f6e\u6362\u5b8c\u6210\u4ee5\u540e\u518d\u5206\u914d\u3002

    \u6211\u4eec\u53ef\u4ee5\u8003\u8651\u5728\u8fd9\u91cc\u5f15\u5165\u4e00\u4e2a\u62bd\u8c61\u7684 buffer\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1 free-frame list \u59cb\u7ec8\u6709\u4e00\u5b9a\u6570\u91cf\u7684\u7a7a\u95f2\u5e27\uff0c\u4f8b\u5982 3 \u4e2a\u3002\u8fd9\u6837\u5f53\u8fdb\u7a0b\u6765\u7d22\u53d6 free-frame \u7684\u65f6\u5019\uff0cfree-frame list \u5927\u6982\u7387\u603b\u662f\u80fd\u591f\u76f4\u63a5\u7ed9\u51fa\u4e00\u4e2a free-frame \u7684\uff0c\u800c\u7ed9\u51fa free-frame \u540e\uff0c\u5982\u679c\u53d1\u73b0 free-frame list \u4e2d\u7684\u5269\u4f59\u5e27\u6570\u5c0f\u4e8e 3\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u72ec\u7acb\u5730\u5f00\u59cb\u8fdb\u884c\u7f6e\u6362\uff0c\u800c\u4e0d\u5fc5\u963b\u585e\u8fdb\u7a0b\u3002

    \u53c8\u6216\u8005\uff0c\u6211\u4eec\u4e0d\u4f7f\u7528\u4e00\u4e2a\u786e\u5207\u7684\u754c\uff0c\u800c\u662f\u901a\u8fc7\u4e00\u79cd\u8d1f\u53cd\u9988\u63a7\u5236\uff0c\u7ef4\u62a4\u4e00\u4e2a\u4e0a\u754c\u548c\u4e0b\u754c\uff1a\u5f53 free-frame \u6570\u5c0f\u4e8e\u4e0b\u754c\u65f6\uff0c\u4e00\u7c7b\u53eb\u6536\u5272\u8005(reapers)\u7684\u5185\u6838\u4f8b\u7a0b\u5c31\u5f00\u59cb\u4f7f\u7528 replacement algorithm \u6765 reclaim \u5df2\u7ecf\u88ab\u5206\u914d\u7684 frame\uff0c\u76f4\u5230 free-frame \u7684\u6570\u91cf\u89e6\u78b0\u5230\u4e0a\u754c\u3002

    Reclaiming pages.

    \u8fdb\u4e00\u6b65\u7684\uff0c\u4e07\u4e00\u6b64\u65f6\u51fa\u73b0\u4e86\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u5bfc\u81f4\u5b9e\u9645\u7684 free-frame \u6570\u975e\u5e38\u5c11\uff0c\u8fbe\u5230\u4e86\u4e00\u4e2a\u975e\u5e38\u4f4e\u7684\u754c\uff0c\u6b64\u65f6\u5c31\u51fa\u73b0\u4e86 OOM(out-of-memory)\u3002\u6b64\u65f6\uff0c\u4e00\u4e2a\u53eb\u505a OOM killer \u7684\u4f8b\u7a0b\u5c31\u4f1a\u6740\u6b7b\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u4ee5\u817e\u51fa\u5185\u5b58\u7a7a\u95f4\u3002

    \u5728 Linux \u4e2d\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u4f1a\u6709\u4e00\u4e2a OOM score\uff0cOOM score \u8d8a\u9ad8\u7ea6\u5bb9\u6613\u88ab OOM killer \u76ef\u4e0a\uff0c\u800c OOM score \u4e0e\u8fdb\u7a0b\u4f7f\u7528\u7684\u5185\u5b58\u7684\u767e\u5206\u6bd4\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u5927\u6982\u7684\u611f\u89c9\u5c31\u662f\u8c01\u5185\u5b58\u7528\u7684\u6700\u591a\u5c31\u6740\u8c01\u30021\u5982\u679c\u8bfb\u8005\u5bf9 Linux \u7684 OOM \u673a\u5236\u6709\u5174\u8da3\uff0c\u53ef\u4ee5\u770b\u770b\u89d2\u6ce8 1\u3002

    \u5bfc\u8bfb

    \u51c6\u786e\u6765\u8bf4\u63a5\u4e0b\u6765\u5206\u914d\u7b56\u7565\u548c\u7f6e\u6362\u7b56\u7565\u90fd\u5e94\u5f53\u662f demand paging \u7684\u5b50\u6761\u76ee\uff0c\u4f46\u662f\u56db\u7ea7\u6807\u9898\u5b9e\u5728\u592a\u5c0f\u4e86\uff0c\u6240\u4ee5\u6211\u8bbe\u4e3a\u4e86\u4e09\u7ea7\u6807\u9898\u3002

    \u6211\u4eec\u5df2\u7ecf\u9610\u8ff0\u4e86\u4e00\u4e2a\u6b63\u5728\u8fd0\u884c\u4e2d\u7684 demand paging \u7cfb\u7edf\u662f\u5982\u4f55\u8fd0\u4f5c\u7684\uff0c\u73b0\u5728\u9700\u8981\u8865\u8db3\u4e00\u4e9b\u7ec6\u8282\u3002

    1. \u5206\u914d\u7b56\u7565\uff1a\u521d\u59cb\u5316\u65f6\uff0c\u5982\u4f55\u5206\u914d\u8fdb\u7a0b\u6240\u9700\u8981\u7684 frame\uff1f
    2. \u7f6e\u6362\u7b56\u7565\uff1a\u5f53 free-frame \u4e0d\u8db3\u65f6\uff0c\u5982\u4f55\u8fdb\u884c replacement\uff1f
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u5206\u914d\u7b56\u7565","title":"\u5206\u914d\u7b56\u7565","text":"

    \u5728 pure demand paging \u91cc\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u901a\u8fc7 page fault \u4e0d\u65ad\u201c\u8695\u98df\u201d free-frame\uff0c\u4f46\u5982\u679c\u6211\u4eec\u4e0d\u9002\u7528 pure \u7684 demand paging\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u51b3\u5b9a\u4e00\u5f00\u59cb\u5206\u914d\u591a\u5c11 frames \u7ed9\u4e00\u4e2a process\u3002

    \u9996\u5148\uff0c\u5bf9\u4e8e\u5355\u4e2a\u8fdb\u7a0b\u7684\u5206\u914d\uff0c\u5b58\u5728\u4e00\u4e2a\u8f83\u4e25\u683c\u7684\u4e0a\u4e0b\u754c\uff1a

    lower bound & upper bound

    1. \u5206\u914d\u7ed9\u4e00\u4e2a process \u7684 frames \u6570\u91cf\u4e0d\u80fd\u5927\u4e8e free-frame \u603b\u91cf\uff1b
      • \u5373 the maximum number of frames per process is defined by the amount of available physical memory\uff1b
    2. \u5206\u914d\u7ed9\u4e00\u4e2a process \u7684 frames \u6570\u91cf\u4e0d\u80fd\u5c0f\u4e8e process\u300c\u6267\u884c\u6bcf\u4e00\u6761\u6307\u4ee4\u6240\u9700\u8981\u6d89\u53ca\u7684 frames\u300d\u7684\u6700\u5927\u503c\uff1b
      • \u8fd9\u53e5\u8bdd\u6709\u70b9\u7ed5\uff0c\u7a0d\u5fae\u89e3\u91ca\u4e00\u4e0b\uff1a
        • \u4e00\u4e9b\u6307\u4ee4\u53ef\u80fd\u4f1a\u9700\u8981\u5f15\u7528\u5176\u5b83 frame\uff08\u4f8b\u5982\u7684 load\uff0cmove\uff0c\u4ee5\u53ca\u4f1a\u4ea7\u751f indirect references \u7684\u6307\u4ee4\u7b49\uff09\uff0c\u800c\u4e14 instruction fetch \u4ee5\u5916\u7684\u989d\u5916 memory reference \u53ef\u80fd\u4e0d\u6b62\u4e00\u4e2a\uff1b
        • \u6211\u4eec\u5e94\u5f53\u4fdd\u8bc1\u6d89\u53ca\u7684\u82e5\u5e72 page \u90fd\u80fd\u88ab\u5b58\u5728\u5185\u5b58\u4e2d\uff1b
        • \u56e0\u6b64\uff0c\u4ece\u67d0\u79cd\u89d2\u5ea6\u6765\u8bf4\uff1athe minimum number of frames per process is defined by architecture\uff1b

    \u65e9\u671f\u5206\u914d\u7b97\u6cd5(frame-allocation algorithm)\u6309\u7167\u5206\u914d\u7684\u5e27\u7684\u5927\u5c0f\u6765\u5206\uff0c\u4e3b\u8981\u6709\u8fd9\u4e48\u4e24\u79cd\uff1a

    equal allocation

    \u987e\u540d\u601d\u4e49\uff0c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u88ab\u5206\u914d\u7684 frame \u603b\u91cf\u90fd\u76f8\u540c\uff0c\u5047\u8bbe\u5171 \\(n\\) \u4e2a process\uff0c\\(m\\) \u5757\u53ef\u7528 frame\uff0c\u90a3\u4e48\u6bcf\u4e2a\u8fdb\u7a0b\u88ab\u5206\u914d\u7684 \\(\\left\\lceil\\frac{m}{n}\\right\\rceil\\)\u3002

    proportional allocation

    \u6bd4\u4f8b\u6307\u6309\u8fdb\u7a0b\u7684\u5927\u5c0f\u6765\u5206\u914d\uff0c\u5047\u8bbe\u5171 \\(n\\) \u4e2a process\uff0c\\(m\\) \u5757\u53ef\u7528 frame\uff0c\u5176\u4e2d\u6bcf\u4e2a process \u7684\u5927\u5c0f\u4e3a \\(s_i\\)\uff0c\u90a3\u4e48\u6bcf\u4e2a\u8fdb\u7a0b\u88ab\u5206\u914d\u7684 frame \u5927\u5c0f\u4e3a \\(a_i = \\left\\lceil \\frac{s_i}{\\sum_{j}^n s_j} \\times m\\right\\rceil\\)\u3002

    proportional allocation with priority

    \u6ce8\u610f\u5230\uff0c \u76ee\u524d\u63d0\u5230\u7684\u4e24\u79cd\u505a\u6cd5\u90fd\u548c\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u65e0\u5173\uff0c\u4f46\u4ece\u9700\u6c42\u4e0a\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u80fd\u503e\u5411\u4e8e\u8ba9\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u88ab\u5206\u914d\u66f4\u591a\u7684 frame \u4ee5\u964d\u4f4e page fault rate \u6765\u589e\u52a0\u5b83\u4eec\u7684\u6548\u7387\u3002

    \u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u5728 proportional allocation \u7684\u57fa\u7840\u4e0a\uff0c\u5728\u8ba1\u7b97 \\(a_i\\) \u65f6\u7efc\u5408\u8003\u8651 priority\u3002

    \u6211\u4eec\u53d1\u73b0\uff0c\u4e0a\u9762\u5173\u4e8e\u5185\u5b58\u5206\u914d\u5927\u5c0f\u7684\u5f0f\u5b50\u4e2d\uff0c\u6709\u4e00\u9879 \\(n\\) \u8868\u793a #process\uff0c\u533a\u522b\u4e8e\u5176\u5b83\u76f8\u5bf9\u9759\u6001\u7684\u53c2\u6570\uff0c\u8fd9\u4e2a\u53c2\u6570\u662f\u4f1a\u5728\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u52a8\u6001\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5206\u914d\u7ed9\u6bcf\u4e2a\u8fdb\u7a0b\u7684 frame \u6570\u91cf\u4e5f\u662f\u4f1a\u52a8\u6001\u53d8\u5316\u7684\u3002

    \u5728\u591a\u6838\u8bbe\u8ba1\u4e0b\uff0c\u6709\u4e00\u79cd\u8bbe\u8ba1\u53eb\u505a NUMAWiki\uff0c\u6211\u4eec\u5728 Overview \u5176\u5b9e\u4e5f\u63d0\u5230\u8fc7\u3002\u5728\u8fd9\u79cd\u8bbe\u8ba1\u91cc\uff0c\u7531\u4e8e\u786c\u4ef6\u8bbe\u8ba1\u95ee\u9898\uff0c\u4e0d\u540c\u7684 CPU \u90fd\u6709\u81ea\u5df1\u201c\u66f4\u5feb\u201d\u8bbf\u95ee\u7684\u5185\u5b58\u3002\u8bfb\u8005\u53ef\u4ee5\u901a\u8fc7\u4e0a\u9762\u7684 Wiki \u94fe\u63a5\u505a\u8be6\u7ec6\u4e86\u89e3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u7f6e\u6362\u7b56\u7565","title":"\u7f6e\u6362\u7b56\u7565","text":"

    \u5f53 free-frame list \u4e3a\u7a7a\uff0c\u4f46\u7528\u6237\u4ecd\u7136\u9700\u8981 frame \u6765\u8fdb\u884c page in \u65f6\uff0c\u5c31\u9700\u8981\u8fdb\u884c\u9875\u7f6e\u6362(page replacement)\uff0c\u5c06\u5e76\u6ca1\u6709\u6b63\u5728\u88ab\u4f7f\u7528\u7684\u9875\u817e\u51fa\u6765\u7ed9\u9700\u8981 page in \u7684\u5185\u5bb9\u7528\uff0c\u800c\u8fd9\u4e2a\u201c\u88ab\u8981\u6c42\u817e\u51fa\u5730\u65b9\u201d\u7684\u9875\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u727a\u7272\u5e27(victim frame)\u3002

    \u663e\u7136\u8fd9\u91cc\u7684 \u201cpage\u201d \u662f\u57fa\u4e8e Definition 2\u3002

    \u6211\u4eec\u7ec6\u5316 page fault \u5904\u7406\u6d41\u7a0b\u7684 2.a. \u9879\uff0c\u5927\u6982\u662f\u5982\u4e0b\u7684\u6b65\u9aa4\uff1a

    page replacement

    1. \u5229\u7528\u7f6e\u6362\u7b97\u6cd5(replacement algorithm)\u51b3\u5b9a\u54ea\u4e2a frame \u662f victim frame\uff1b
    2. \u5982\u679c\u6709\u5fc5\u8981\uff08dirty\uff09\uff0cvictim frame -> \u540e\u5907\u5b58\u50a8\uff1b
    3. \u66f4\u65b0\u76f8\u5173\u5143\u4fe1\u606f\uff1b
    4. \u8fd4\u56de\u8fd9\u4e2a victim frame \u4f5c\u4e3a free-frame\uff1b

    \u5982\u679c\u8fd9\u4e2a victim frame \u5728\u88ab page in \u4ee5\u540e\u6ca1\u6709\u88ab\u4fee\u6539\u8fc7\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5c06\u5b83\u8986\u76d6\uff0c\u4e0d\u9700\u8981\u5199\u56de\u540e\u5907\u5b58\u50a8\uff0c\u80fd\u8282\u7701\u4e00\u6b21\u5185\u5b58\u64cd\u4f5c\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u8fd9\u4e2a victim frame \u88ab\u4fee\u6539\u8fc7\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u5c06\u5b83\u5199\u56de\u540e\u5907\u5b58\u50a8\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u4fee\u6539\u7ed9 \u201ccommit\u201d \u4e86\u3002\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u4f18\u5316\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u4fee\u6539\u4f4d(dirty bit \u6216 modified bit)\u6765\u8bb0\u5f55\u9875\u662f\u5426\u88ab\u4fee\u6539\u8fc7\uff0c\u5f53 frame \u521a\u88ab\u8f7d\u5165\u5185\u5b58\u65f6\uff0cdirty bit \u5e94\u5f53\u4e3a 0\uff1b\u800c\u4e00\u65e6\u5e27\u5185\u6709\u4efb\u4f55\u5199\u5165\u64cd\u4f5c\u53d1\u751f\uff0cdirty bit \u5c31\u4f1a\u88ab\u7f6e 1\u3002

    \u73b0\u5728\u6211\u4eec\u6765\u8ba8\u8bba\u5177\u4f53\u7684\u7f6e\u6362\u7b97\u6cd5(replacement algorithm)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#opt","title":"OPT","text":"

    \u7406\u8bba\u4e0a\u6700\u4f18\uff0c\u5373 \u24f5 \u80fd\u5e26\u6765\u6700\u4f4e\u7684 page fault rate\uff0c\u24f6 \u7edd\u5bf9\u4e0d\u4f1a\u906d\u53d7 Belady's anomaly \u7684\u505a\u6cd5\u662f\uff1a\u5728\u672a\u6765\u6700\u4e45\u7684\u65f6\u95f4\u5185\u4e0d\u4f1a\u88ab\u8bbf\u95ee\u5230\u7684\u9875\u4f5c\u4e3a victim frame\u3002\u8fd9\u53e5\u8bdd\u8bf4\u8d77\u6765\u6709\u70b9\u7ed5\uff0c\u7528\u82f1\u6587\u63cf\u8ff0\u662f\uff1aReplace the page that will not be used for the longest period of time.

    \u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u9009\u4e4b\u540e\u518d\u4e5f\u4e0d\u4f1a\u88ab\u7528\u5230\u7684\u6216\uff08\u5982\u679c\u6ca1\u6709\u524d\u8005\uff09\u4e0b\u4e00\u6b21\u7528\u5230\u7684\u65f6\u95f4\u6700\u665a\u7684\u9875\u4f5c\u4e3a victim frame\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u5f88\u96be\u6765\u9884\u6d4b\u4e00\u4e2a frame \u4e0b\u4e00\u6b21\u88ab\u4f7f\u7528\u662f\u4ec0\u4e48\u65f6\u5019\uff0c\u6240\u4ee5\u8be5\u65b9\u6cd5\u53ea\u662f\u4e00\u4e2a\u7406\u8bba\u4e0a\u7684\u6700\u4f18\u5efa\u6a21\uff0c\u6211\u4eec\u5728\u540e\u9762\u5e94\u5f53\u8003\u8651\u53bb\u903c\u8fd1\u8fd9\u4e2a\u5efa\u6a21\u3002

    \u5934\u8111\u98ce\u66b4

    \u8fd9\u6bb5\u5185\u5bb9\u6709\u6ca1\u6709\u8ba9\u4f60\u60f3\u8d77\u6211\u4eec\u5df2\u7ecf\u5b66\u8fc7\u7684\u67d0\u4e2a\u4e1c\u897f\uff1f

    \u63d0\u793a

    Shortest-Job-First Scheduling!

    \u5b9e\u9645\u4e0a\uff0c\u4e0b\u9762\u4ecb\u7ecd FIFO \u4f60\u4e5f\u5e94\u5f53\u4f1a\u60f3\u8d77 FCFS \u8c03\u5ea6\u7b97\u6cd5\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#fifo","title":"FIFO","text":"

    \u5148\u5165\u5148\u51fa(first-in, first-out, FIFO)\u7b56\u7565\uff0c\u5373\u9009\u62e9\u6b63\u5728\u4f7f\u7528\u4e2d\u7684\u3001\u6700\u65e9\u8fdb\u5165\u5185\u5b58\u7684 frame \u4f5c\u4e3a victim frame\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5728\u5185\u5b58\u4e2d\u5b8c\u6574\u5730\u7ef4\u62a4\u4e00\u4e2a FIFO \u961f\u5217\u6765\u5b9e\u73b0\u8fd9\u4e2a\u7b56\u7565\u3002

    FIFO \u7b56\u7565\u7684\u4f18\u70b9\u5c31\u662f\u7b80\u5355\uff0c\u65b9\u4fbf\u5b9e\u73b0\uff1b\u7f3a\u70b9\u662f\u5e76\u4e0d\u591f\u597d\u2014\u2014\u65e9\u88ab\u8f7d\u5165\u7684 page \u4e5f\u53ef\u80fd\u4f1a\u88ab\u9891\u7e41\u7684\u4f7f\u7528\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u7528\u88ab\u8f7d\u5165\u7684\u65e9\u665a\u6765\u5efa\u6a21 page \u7684\u4f7f\u7528\u9891\u7387\uff0c\u4f46\u662f\u8fd9\u4e2a\u5efa\u6a21\u76f8\u6bd4 optimal \u7684\u5efa\u6a21\u5e76\u4e0d\u8db3\u591f\u63a5\u8fd1\u3002

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u8bd5\u7740\u601d\u8003\u4e00\u4e0b\uff0c\u5047\u8bbe\u73b0\u5728\u6700\u65e9\u88ab\u8f7d\u5165\u7684 page \u6b63\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u8fd9\u65f6\u5019\u51fa\u73b0\u4e86\u4e00\u4e2a page fault\uff0c\u4f1a\u53d1\u751f\u4ec0\u4e48\uff1f\u4f1a\u5bfc\u81f4\u51fa\u73b0\u9519\u8bef\u5417\uff1f

    \u63d0\u793a

    \u4f1a\u5f71\u54cd\u6548\u7387\uff0c\u4f46\u662f\u4e0d\u4f1a\u51fa\u9519\u54e6\uff01

    Belady's anomaly

    \u8fd9\u4e00\u6bb5\u5185\u5bb9\u6ca1\u5565\u7528\uff0c\u53ea\u662f\u4e00\u4e2a\u6709\u8da3\u7684\u73b0\u8c61\u3002

    \u6709\u4e00\u79cd\u60c5\u51b5\u53eb\u505a Belady's anomaly\uff0c\u5728 FIFO \u7b56\u7565\u4e0b\uff08\u5176\u5b83 replacement algorithm \u53ef\u80fd\u4e5f\u4f1a\u53d1\u751f\uff09\uff0c\u968f\u7740 frame \u6570\u91cf\u7684\u589e\u52a0\uff0cpage fault rate \u53ef\u80fd\u4f1a\u589e\u52a0\u3002

    \u4f8b\u5982\u5982\u4e0b page \u8bbf\u95ee\u5e8f\u5217\uff1a

    \\[ 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 \\]

    \u5728 3 \u4e2a frame \u7684\u60c5\u51b5\u4e0b\uff0cpage fault rate \u4e3a \\(\\frac{9}{12} = 75.0%\\)\uff1b\u800c\u5728 4 \u4e2a frame \u7684\u60c5\u51b5\u4e0b\uff0cpage fault rate \u4e3a\\(\\frac{10}{12} = 83.3%\\)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#lru","title":"LRU","text":"

    \u6211\u4eec\u7684\u76ee\u6807\u662f\u4e3a\u4e86\u903c\u8fd1\u96be\u4ee5\u5b9e\u73b0\u7684 optimal\uff0c\u800c optimal \u4e4b\u6240\u4ee5\u96be\u4ee5\u5b9e\u73b0\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u5f88\u96be\u201c\u9884\u77e5\u672a\u6765\u201d\uff0c\u6211\u4eec\u80fd\u5229\u7528\u7684\u53ea\u6709\u5df2\u7ecf\u7ecf\u5386\u8fc7\u7684\u4e8b\u60c5\u3002

    Least recently used(LRU) \u7b97\u6cd5\u7684\u601d\u8def\u662f\uff0c\u57fa\u4e8e\u300c\u5f88\u4e45\u6ca1\u88ab\u7528\u8fc7\u7684 page \u53ef\u80fd\u5728\u77ed\u671f\u4e0d\u592a\u4f1a\u88ab\u518d\u6b21\u4f7f\u7528\uff0c\u521a\u521a\u7528\u8fc7\u7684 page \u53ef\u80fd\u5728\u77ed\u671f\u88ab\u9891\u7e41\u5730\u7528\u300d\u7684\u5047\u8bbe\uff0c\u7528\u201c\u6700\u4e45\u6ca1\u7528\u8fc7\u201d\u6765\u5efa\u6a21\u300c\u672a\u6765\u6700\u4e45\u65f6\u95f4\u5185\u4e0d\u4f1a\u88ab\u8bbf\u95ee\u300d\uff0c\u5373\u9009\u62e9\u6700\u4e45\u6ca1\u88ab\u8bbf\u95ee\u8fc7\u7684 frame \u4f5c\u4e3a victim\u3002

    LRU \u662f\u6bd4\u8f83\u5e38\u7528\u7684 replacement algorithm\uff08\u5b9e\u9645\u4e0a\u662f LRU-Approximation\uff09\uff0c\u56e0\u4e3a\u662f\u88ab\u8ba4\u4e3a\u6bd4\u8f83\u597d\u7684 replacement algorithm\u3002

    \u73b0\u5728\u6211\u4eec\u6765\u8003\u8651\u5982\u4f55\u5b9e\u73b0 LRU\uff0c\u6216\u8005\u8bf4\uff0c\u5982\u4f55\u6765\u7ef4\u62a4\u4e00\u4e2a frame \u6709\u591a\u4e45\u6ca1\u88ab\u8bbf\u95ee\u8fc7\u3002

    stack algorithms

    1. \u8ba1\u6570\u5668\uff1a\u4f7f\u7528\u4e00\u4e2a\u8ba1\u6570\u5668\u6765\u6807\u8bb0\u4e00\u4e2a\u5e27\u6709\u591a\u4e45\u6ca1\u88ab\u4f7f\u7528\u8fc7\uff1b
      1. \u5f53\u4e00\u4e2a frame \u88ab\u4f7f\u7528\u7684\u65f6\u5019\u5c06\u8ba1\u6570\u5668\u5f52\u96f6\uff1b
      2. \u9700\u8981\u8003\u8651\u6bcf\u4e2a frame \u7684\u8ba1\u6570\u5668\u90fd\u9700\u8981\u88ab\u5b9a\u671f\u66f4\u65b0\uff1b
      3. \u9700\u8981\u8003\u8651\u8ba1\u6570\u5668\u53ef\u80fd\u6ea2\u51fa\uff1b
      4. \u5728\u627e least recently used frame \u7684\u65f6\u5019\u9700\u8981\u53bb\u641c\u7d22 counter \u6700\u5927\u7684 frame\uff08\u4f60\u4e5f\u53ef\u4ee5\u8003\u8651\u7528\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u53bb\u7ef4\u62a4\u5b83\uff0c\u4f46\u662f\u4f1a\u589e\u52a0\u8bbe\u8ba1\u590d\u6742\u5ea6\uff09\uff1b
    2. \u94fe\u8868\u5e8f\u5217\uff1a\u4f7f\u7528\u4e00\u4e2a\u53cc\u5411\u94fe\u8868\u6765\u7ef4\u62a4\u4e00\u4e2a\u6709\u5e8f\u5e8f\u5217\uff0cframe \u5728\u5e8f\u5217\u4e2d\u7684\u4f4d\u7f6e\u6697\u793a\u4e86\u5b83\u4eec\u6700\u8fd1\u88ab\u4f7f\u7528\u7684\u65f6\u95f4\uff1b
      • \u8c8c\u4f3c\u4e3b\u6d41\u90fd\u7528\u201c\u6808\u201d\u6765\u5efa\u6a21\uff0c\u4f46\u6211\u89c9\u5f97\u8fd9\u4e0d\u662f\u6808\uff0c\u51b5\u4e14\u8bf4\u662f\u6808\uff0c\u5176\u5b9e\u73b0\u8fd8\u662f\u7528\u53cc\u5411\u94fe\u8868\uff1b

      • \u6bcf\u5f53\u4e00\u4e2a frame \u88ab\u4f7f\u7528\u7684\u65f6\u5019\uff1a
        1. \u5982\u679c\u5b83\u5728\u94fe\u8868\u4e2d\uff0c\u5c31\u5c06\u5b83\u79fb\u52a8\u5230\u94fe\u8868\u5934\u90e8\uff1b
        2. \u5982\u679c\u5b83\u4e0d\u5728\u94fe\u8868\u4e2d\uff0c\u5c31\u5c06\u5b83\u52a0\u5165\u5230\u94fe\u8868\u5934\u90e8\uff1b
      • \u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u6bcf\u6b21\u7684 \u201cleast used frame\u201d \u603b\u662f\u4f4d\u4e8e\u5e8f\u5217\u672b\u5c3e\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u505a\u989d\u5916\u7684\u641c\u7d22\uff1b

    \u4e0a\u9762\u4e24\u79cd\u505a\u6cd5\u90fd\u88ab\u79f0\u4e3a\u6808\u7b97\u6cd5(Stack Algorithms)\u3002

    \u867d\u7136\u6211\u575a\u6301\u8ba4\u4e3a\u8fd9\u91cc\u548c\u6808\u6ca1\u5173\u7cfb\u3002

    \u4f18\u52bf

    1. LRU \u5bf9\u4e8e optimal \u7684\u62df\u5408\u662f\u6bd4\u8f83\u597d\u7684\uff1b
    2. LRU \u7b97\u6cd5\u4e0d\u4f1a\u51fa\u73b0 Belady's anomaly\uff1b

    \u7f3a\u9677

    1. \u5bf9\u4e8e\u8ba1\u6570\u5668\u505a\u6cd5\uff0c\u7ef4\u62a4\u6bcf\u4e2a frame \u7684 clock \u60f3\u60f3\u5c31\u5f88\u6162\uff0c\u9664\u975e\u6709\u7279\u5b9a\u7684\u786c\u4ef6\u6765\u4f18\u5316\u8fd9\u4e2a\u64cd\u4f5c\uff08\u4f8b\u5982\u4e0d\u9700\u8981\u7531\u64cd\u4f5c\u7cfb\u7edf\u6765\u64cd\u5fc3 clock \u7684\u7ef4\u62a4\uff09\uff1b
    2. \u5bf9\u4e8e\u4e24\u8005\uff0c\u7531\u4e8e\u6bcf\u6b21\u5185\u5b58\u88ab\u8bbf\u95ee\u7684\u65f6\u5019\u90fd\u9700\u8981\u8fdb\u884c\u7ef4\u62a4\uff0c\u5982\u679c\u901a\u8fc7 interrupt \u6765\u8c03\u7528 stack algorithms\uff0c\u90a3\u4e48\u5f00\u9500\u5c06\u4f1a\u5de8\u5927\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#lru-approx","title":"LRU Approx.","text":"

    \u7531\u4e8e\u6211\u4eec\u5728 Stack Algorithm \u91cc\u63d0\u5230\u7684\u8bf8\u591a\u5f0a\u7aef\uff0c\u6211\u4eec\u8003\u8651\u8fd1\u4f3c\u5730\uff0c\u5b9e\u73b0 LRU \u7b97\u6cd5\u2014\u2014\u5b9e\u9645\u4e0a\u662f\u8fd1\u4f3c\u5b9e\u73b0 Stack Algorithm\u3002

    \u591a\u6570\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e2a\u53eb reference bit \u7684\u529f\u80fd\u3002\u6240\u6709 frame \u90fd\u6709\u4e00\u4e2a\u4e0e\u4e4b\u5173\u8054\u7684 reference bit\uff0c\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u90fd\u4f1a\u88ab\u7f6e 0\uff1b\u800c\u6bcf\u5f53 frame \u88ab\u4f7f\u7528\u65f6\uff0creference bit \u5c31\u4f1a\u88ab\u7f6e 1\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u89c2\u5bdf reference bit \u6765\u89c2\u5bdf\u67d0\u4e9b frame \u662f\u5426\u88ab\u4f7f\u7528\u8fc7\u3002

    \u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u4eec\u5206\u6790 LRU \u7684\u9650\u5236\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\u4e24\u4e2a\u65b9\u9762\uff1a\u24f5 \u9700\u8981\u5168\u90e8\u5386\u53f2\u4fe1\u606f\uff0c\u7ef4\u62a4\u6210\u672c\u8f83\u5927\uff08\u9700\u8981\u8bbe\u8ba1\u6570\u636e\u7ed3\u6784\u6765\u5b58\u50a8\uff09\uff1b\u24f6 \u6570\u636e\u7ef4\u62a4\u8fc7\u4e8e\u9891\u7e41\uff0c\u6bcf\u6b21\u4f7f\u7528 frame \u90fd\u9700\u8981\u7528\u4e00\u6bb5\u4e0d\u5c0f\u7684\u5f00\u9500\u53bb\u66f4\u65b0\u72b6\u6001\u3002

    \u5bf9\u5e94\u7684\u89e3\u51b3\u65b9\u6848\u662f\uff1a\u24f5 \u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u53ea\u5173\u6ce8\u4e00\u4e2a\u90bb\u57df\u91cc\u7684\u5386\u53f2\u4fe1\u606f\uff0c\u24f6 \u6211\u4eec\u53ef\u4ee5\u964d\u4f4e\u66f4\u65b0 frame \u4fe1\u606f\u7684\u9891\u7387\u3002\uff08\u867d\u7136\u5bf9\u4e8e\u540e\u8005\uff0c\u5b9e\u9645\u4e0a\u5982\u679c\u5bf9\u5e94\u4e8e reference bit \u7684\u66f4\u65b0\uff0c\u5176\u5b9e\u5e76\u6ca1\u6709\u964d\u4f4e\u9891\u7387\u3002\uff09

    Additional-Reference-Bits Algorithm

    \u53ea\u6709 reference bit \u7684\u8bdd\u6ca1\u6cd5\u53cd\u5e94\u51fa frame \u4f7f\u7528\u7684\u201c\u8fdc\u8fd1\u201d\uff0c\u4e5f\u5c31\u662f\u4f7f\u7528\u7684\u987a\u5e8f\u3002

    \u65e2\u7136\u7f3a\u7684\u662f\u987a\u5e8f\uff0c\u6211\u4eec\u5c31\u8003\u8651\u5efa\u6a21 frame \u7684\u4f7f\u7528\u8fdc\u8fd1\u3002\u5176\u4e2d\u6700\u9996\u8981\u7684\u4e00\u4e2a\u4efb\u52a1\u5c31\u662f\u83b7\u53d6\u5386\u53f2\u4fe1\u606f\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7528\u4e00\u4e9b bits \u6765\u5b58\u50a8\u6bcf\u4e2a frame \u7684\u5386\u53f2\u4f7f\u7528\u4fe1\u606f\uff1b\u7136\u540e\u5b9a\u671f\uff08\u5229\u7528\u65f6\u949f\u4e2d\u65ad\uff09\u5730\u53bb\u68c0\u67e5\u3001\u5b58\u50a8\u5f53\u524d\u65f6\u95f4\u5f53\u524d frame \u7684 reference bit\uff0c\u76f8\u5f53\u4e8e\u68c0\u6d4b\u4e0a\u4e00\u4e2a\u91c7\u6837\u95f4\u9694\u4e2d\u8be5\u5e27\u6709\u6ca1\u6709\u88ab\u7528\u8fc7\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u7ed9\u6bcf\u4e2a frame \u4e00\u4e2a \\(k\\) bits \u7684 bits vector \\(h = (h_{k-1}h_{k-2} \\dots h_{1}h_{0})_2, \\quad h_i \\in \\{0, 1\\}\\) \u7528\u6765\u5b58\u50a8\u5386\u53f2\u7684 reference bits\uff1b\u7136\u540e\u6bcf\u8fc7 \\(\\Delta t\\) ms\uff0c\u5c31\u4ea7\u751f\u4e00\u6b21\u65f6\u949f\u4e2d\u65ad\uff0c\u68c0\u67e5 frame \\(f_i\\) \u7684 reference bit \\(r_{t}\\)\uff08\u4e3a\u4e86\u7b80\u6d01\u6211\u4eec\u7701\u7565\u8fd9\u4e2a \\(i\\)\uff09\uff0c\u6b64\u65f6\u6211\u4eec\u66f4\u65b0 \\(h' = (r_{i,t}h_{k-1}h_{k-2} \\dots h_{2}h_{1})_2\\)\uff0c\u5373\u5c06 \\(h\\) \u53f3\u79fb\u4e00\u4f4d\uff0c\u5728\u9ad8\u4f4d\u8865 \\(r_{i,t}\\)\u3002

    \u5b9e\u9645\u4e0a \\(h\\) \u662f\u4e00\u4e2a\u7c7b\u4f3c\u961f\u5217\u7684\u5b58\u5728\uff0c\u800c\u6bcf\u6b21\u68c0\u67e5\u4f1a\u628a reference bit \u7ed9 push \u8fdb\u8fd9\u4e2a\u961f\u5217\u91cc\u3002\u56e0\u6b64\uff0c\\(h\\) \u6362\u4e00\u4e2a\u5199\u6cd5\u5c31\u662f\uff1a\\(h' = (\\underbrace{r_{t}r_{t-1}r_{t-2}r_{t-3} \\dots }_{k\\text{ bits}})_2\\)\uff0c\u4e5f\u5c31\u662f\u6700\u8fd1\u7684 \\(k\\) \u6b21\u68c0\u6d4b\u7684\u5386\u53f2\u8bb0\u5f55\u3002

    \u800c\u4e4b\u6240\u4ee5\u4ece\u9ad8\u4f4d\u5f00\u59cb\uff0c\u662f\u56e0\u4e3a\u5728\u6570\u503c\u5927\u5c0f\u4f53\u7cfb\u4e2d\uff0c\u9ad8\u4f4d\u4ee3\u8868\u7740\u9ad8\u6743\u91cd\uff0c\u6b63\u597d\u5bf9\u5e94 reference \u51fa\u73b0\u7684\u8d8a\u8fd1\uff0cframe \u8d8a\u65b0\u3002\u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u627e\u8fd9\u4e2a bits vector \u4e2d\u6700\u5c0f\u7684\u90a3\u4e2a frame \u4f5c\u4e3a victim frame\u3002

    Second-Chance Algorithm

    Second-Chance Algorithm \u53ea\u5229\u7528 reference bit \u6765\u8fdb\u884c\u7f6e\u6362\uff0c\u7c7b\u4f3c FIFO \u7684\u6539\u8fdb\u7248\uff0c\u5728 FIFO \u7684\u57fa\u7840\u4e0a\uff0c\u6211\u4eec\u5f15\u5165\u4e86 reference bit\uff0c\u5e76\u4e14\u5b9a\u671f\u64e6\u9664 reference bit\u3002

    \u6211\u4eec\u5faa\u73af\u5730\u904d\u5386 frames\uff0c\u5e76\u9010\u4e00\u68c0\u6d4b reference bit\uff1a

    1. \u5982\u679c reference bit \u4e3a 0\uff0c\u8bf4\u660e\u91c7\u6837\u95f4\u9694\u4e2d\u8fd9\u4e2a frame \u6ca1\u88ab\u7528\u8fc7\uff0c\u90a3\u4e48\u8fd9\u4e2a frame \u5c31\u662f\u6211\u4eec\u8981\u627e\u7684 victim frame\uff1b
    2. \u5982\u679c reference bit \u4e3a 1\uff0c\u8bf4\u660e\u91c7\u6837\u95f4\u9694\u4e2d\u8fd9\u4e2a frame \u88ab\u7528\u8fc7\uff0c\u4e8e\u662f\u7ed9\u8fd9\u4e2a frame \u4e00\u6b21\u201c\u8c41\u514d\u201d\u7684\u673a\u4f1a\uff0c\u5c06\u5b83\u7684 reference bit \u8bbe\u7f6e\u4e3a 0\uff0c\u5e76\u7ee7\u7eed\u5bfb\u627e\u4e0b\u4e00\u4e2a frame\uff1b

    \u5934\u8111\u98ce\u66b4

    \u5728 2. \u4e2d\u4e3a\u4ec0\u4e48\u8981\u5c06\u5b83\u7f6e 0\uff1f\u8fd9\u4e2a\u7f6e 0 \u7684\u542b\u4e49\u548c\u5728\u65f6\u949f\u4e2d\u65ad\u91c7\u6837\u7684\u65f6\u5019\u7684\u7f6e 0 \u4e00\u6837\u5417\uff1f

    \u63d0\u793a

    \u8fd9\u5c31\u662f Second-Chance Algorithm \u4e2d\u7684 \u201csecond\u201d \u7684\u6765\u6e90\u3002\u5c06\u5b83\u7f6e 0 \u540e\u4e0b\u4e00\u5faa\u73af\u518d\u78b0\u5230\u5b83\u7684\u65f6\u5019\uff0c\u5c31\u4e0d\u4f1a\u518d\u88ab\u201c\u8c41\u514d\u201d\u4e86\u3002

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u8be5\u7b97\u6cd5\u53ef\u80fd\u4f1a\u9000\u5316\u4e3a FIFO\uff0c\u751a\u81f3\u66f4\u5dee\uff0c\u627e\u5230 victim page \u4e4b\u524d\uff0c\u8be5\u7b97\u6cd5\u6700\u591a\u53ef\u80fd\u4f1a\u904d\u5386\u4e24\u904d frames\u3002\u800c\u8be5\u7b97\u6cd5\u4e5f\u53ef\u4ee5\u770b\u4f5c Additional-Reference-Bits Algorithm \u7684\u7b80\u5316\u7248\uff0c\u5982\u679c\u8bf4 Additional-Reference-Bits Algorithm \u662f\u901a\u8fc7\u6bd4\u8f83\u82e5\u5e72\u8f6e\u91c7\u6837\u7684\u5386\u53f2\u91c7\u6837\u8bb0\u5f55\u6765\u5bf9 frames \u505a\u6392\u5e8f\uff0c\u4ee5\u51b3\u5b9a\u54ea\u4e00\u4e2a\u662f \u201cLRU\u201d\uff1b\u90a3\u4e48 Second-Chance Algorithm \u5c31\u662f\u5728\u4e00\u4e2a\u91c7\u6837\u5468\u671f\u91cc\uff0c\u5c06 frames \u505a\u4e8c\u503c\u5206\u7c7b\uff0c\u5728\u201c\u8fdc\u8fd1\u201d\u8fd9\u4ef6\u4e8b\u7684\u5efa\u6a21\u4e0a\uff0c\u66f4\u52a0\u6fc0\u8fdb\u548c\u7c97\u7c92\u5ea6\u3002

    Enhanced Second-Chance Algorithm / NRU

    \u4e66\u4e2d\u6709\u4e00\u53e5\u8bdd\u4ee4\u4eba\u8d39\u89e3\uff0c\u6211\u53d1\u73b0\u5df2\u7ecf\u6709\u4eba\u5728 StackOverflow \u4e0a\u95ee\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b\u8fd9\u4e2a\u95ee\u9898\u3002

    \u65e2\u7136 Second-Chance Algorithm \u7684\u5efa\u6a21\u6709\u70b9\u592a\u6fc0\u8fdb\u548c\u7c97\u7c92\u5ea6\uff0c\u90a3\u6211\u4eec\u8003\u8651\u628a\u7c92\u5ea6\u518d\u5f04\u7ec6\u4e00\u70b9\u3002

    \u4e4b\u524d\u6211\u4eec\u90fd\u53ea\u770b reference bit\uff0c\u73b0\u5728\u6211\u4eec\u628a dirty bit \u4e5f\u7eb3\u5165\u8003\u8651\u3002\u8003\u8651\u4e8c\u5143\u7ec4 \\((reference, dirty)\\)\uff0c\u4e24\u4e2a bit \u6709\u56db\u79cd\u7ec4\u5408\uff1a

    1. \\((0, 0)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4e5f\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b
    2. \\((0, 1)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4f46\u88ab\u4fee\u6539\u8fc7\uff1b
    3. \\((1, 0)\\)\uff1a\u88ab\u7528\u8fc7\uff0c\u4f46\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b
    4. \\((1, 1)\\)\uff1a\u88ab\u7528\u8fc7\uff0c\u4e5f\u88ab\u4fee\u6539\u8fc7\uff1b

    \u7531\u4e8e\u88ab\u4fee\u6539\u8fc7\u7684 frame \u5728\u88ab\u7f6e\u6362\u7684\u65f6\u5019\u9700\u8981\u6267\u884c\u5199\u56de\uff0c\u6240\u4ee5\u6211\u4eec\u5e0c\u671b\u5c3d\u91cf\u665a\u4e00\u70b9\u4f7f\u7528\u8fd9\u7c7b frame\u3002\u5728\u8fd9\u79cd\u5206\u7c7b\u4e0b\uff0c\u524d\u4e24\u79cd\u5408\u5e76\uff0c\u540e\u4e24\u79cd\u5408\u5e76\uff0c\u5c31\u662f\u5148\u524d\u7684 Second-Chance Algorithm \u4e86\u3002

    \u5728 Enhanced Second-Chance Algorithm \u4e2d\uff0c\u6211\u4eec\u627e\u5230\u7b2c\u4e00\u4e2a 1. \u60c5\u51b5\u7684 frame \u4f5c\u4e3a victim\uff1b\u5982\u679c\u6ca1\u6709\uff0c\u5c31\u53bb\u627e\u7b2c\u4e00\u4e2a 2. \u60c5\u51b5\u7684 frame \u4f5c\u4e3a victim\u2026\u2026\u4ee5\u6b64\u7c7b\u63a8\u30022

    \u56e0\u6b64\uff0cEnhanced Second-Chance Algorithm \u53ef\u80fd\u6700\u591a\u4f1a\u904d\u5386 4 \u6b21 frames\u3002\u5728\u5df2\u7ecf\u4ecb\u7ecd\u7684\u4e09\u4e2a\u7b97\u6cd5\u91cc\uff0c\u5b83\u662f\u552f\u4e00\u4e00\u4e2a\u8003\u8651\u4e86 dirty bit \u7684\u3002\u4e8b\u5b9e\u4e0a\uff0c\u7531\u4e8e dirty bit \u4e5f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u53cd\u6620\u4e86\u9875\u201c\u88ab\u4f7f\u7528\u201d\u7684\u7a0b\u5ea6\uff0c\u867d\u7136\u627e\u7684\u4e0d\u662f\u6700\u4e45\u6ca1\u88ab\u7528\u8fc7\u7684 frame\uff0c\u4f46\u80fd\u591f\u5c3d\u53ef\u80fd\u5730\u6392\u9664\u8fd1\u671f\u4f7f\u7528\u8fc7\u7684 frame\uff0c\u56e0\u6b64\uff0c\u8be5\u7b97\u6cd5\u4e5f\u53eb\u505a NRU(Not Recently Used)\uff0c\u662f\u5b9e\u8df5\u4e2d\u6bd4\u8f83\u5e38\u89c1\u7684\u4e00\u79cd\u5bf9 LRU \u7684\u8fd1\u4f3c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u57fa\u4e8e\u8ba1\u6570\u7684\u7f6e\u6362","title":"\u57fa\u4e8e\u8ba1\u6570\u7684\u7f6e\u6362","text":"

    \u6211\u4eec\u8003\u8651\u7528 counter \u6765\u8bb0\u5f55\u6b63\u5728\u4f7f\u7528\u7684 frame \u4e2d\u6bcf\u4e2a frame \u88ab\u4f7f\u7528\u7684\u6b21\u6570\uff0c\u7528 counter \u7684\u503c\u6765\u5efa\u6a21\u201c\u4f7f\u7528\u9891\u7387\u201d\u3002\u6309\u7167\u540e\u7eed\u64cd\u4f5c\u4e0d\u540c\u5206\u4e3a\u8fd9\u4e24\u79cd\uff1a

    \u7f3a\u9677

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u8fd9\u4e24\u4e2a\u8bbe\u8ba1\u5bf9 optimal \u7684\u62df\u5408\u90fd\u4e0d\u662f\u5f88\u597d\uff0c\u5f00\u9500\u4e5f\u90fd\u5f88\u5927\u3002

    \u9644\u52a0\u9605\u8bfb

    \u5efa\u8bae\u53bb\u6d4f\u89c8\u4e00\u4e0b Wiki \u7684\u5bf9\u5e94\u6761\u76ee\uff0c\u4e86\u89e3\u4e00\u4e0b\u5e38\u89c1\u7684 replacement algorithm \u6709\u54ea\u4e9b\u3002\u4e0a\u8ff0\u5206\u7c7b\u548c\u8109\u7edc\u548c Wiki \u6709\u4e00\u4e9b\u4e0d\u540c\uff0c\u5b9e\u5728\u662f\u6ca1\u65f6\u95f4\u8003\u7a76\u8fd9\u4e48\u591a\u7c98\u7a20\u7684\u8109\u7edc\u4e86\uff08\u6211\u751a\u81f3\u8fd8\u6ca1\u641e\u6e05\u695a NRU \u548c Enhanced Second Chance \u5230\u5e95\u662f\u4e0d\u662f\u540c\u4e00\u4e2a\u4e1c\u897f\uff0c\u53cd\u6b63\u5c31\u7b97\u4e0d\u4e00\u6837\u5927\u6982\u601d\u8def\u4e5f\u5dee\u4e0d\u591a\uff09\uff0c\u6240\u4ee5\u8bf7\u8bfb\u8005\u81ea\u884c\u4e86\u89e3\u66f4\u591a\u5185\u5bb9\u3002\u8fd9\u4e9b\u7b97\u6cd5\u5185\u5bb9\u90fd\u4e0d\u7b97\u5f88\u591a\uff0c\u4e86\u89e3\u4e00\u4e0b\u66f4\u597d\u3002

    \u7f6e\u6362\u8303\u56f4

    \u5728\u5206\u914d\u7684\u65f6\u5019\uff0c\u6211\u4eec\u4e3a\u8fdb\u7a0b\u5206\u914d\u4e86\u4e00\u4e9b\u5e27\u4ee5\u7528\u4e8e\u5fc5\u8981\u7684\u8fd0\u7b97\u6d3b\u52a8\u3002\u4f46\u6211\u4eec\u77e5\u9053\uff0c\u7f6e\u6362\u64cd\u4f5c\u4f1a\u52a8\u6001\u5730\u66f4\u65b0 frame \u7684\u4f7f\u7528\u60c5\u51b5\u3002\u4e0d\u77e5\u9053\u4f60\u662f\u5426\u7591\u60d1\u8fc7\uff1a\u7f6e\u6362\u7684\u65f6\u5019\uff0c\u6211\u4eec\u80fd\u5426\u7f6e\u6362\u5176\u5b83\u8fdb\u7a0b\u7684 frame\uff1f\u4ee5\u53ca\u6211\u4eec\u8981\u5982\u4f55\u5b9e\u73b0\u548c\u7ef4\u62a4\u8fd9\u4e9b\u7b56\u7565\u5462\uff1f

    \u5b9e\u9645\u4e0a\uff0creplacement \u5206\u4e3a local \u548c global \u4e24\u79cd\uff1a

    1. \u4f7f\u7528 local replacement \u65f6\uff0creplacement \u53ea\u53d1\u751f\u5728\u5c5e\u4e8e\u5f53\u524d\u8fdb\u7a0b\u7684\u5e27\u4e2d\uff0c\u56e0\u800c\u4e5f\u5c31\u4e0d\u4f1a\u5f71\u54cd\u5176\u5b83\u8fdb\u7a0b\u7684\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\uff1b
    2. \u800c\u5bf9\u5e94\u7684\uff0cglobal replacement \u7684 scope \u662f\u6240\u6709\u5e27\uff0c\u751a\u81f3\u53ef\u80fd\u4e00\u90e8\u5206\u539f\u6765\u5c5e\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u5e27\uff0c\u56e0\u800c\u5b83\u80fd\u5b9e\u73b0\u4e00\u4e9b\u7c7b\u4f3c\u201c\u62a2\u5360\u201d\u7684\u6548\u679c\uff1b
      • Free-frame buffer pool \u5c31\u662f\u4e00\u79cd\u5929\u7136\u7684 global replacement \u7684\u5b9e\u73b0\u65b9\u5f0f\uff1b
    3. \u5982\u679c\u6211\u4eec\u7a0d\u5fae\u505a\u4e00\u4e9b\u8bbe\u8ba1\uff0c\u6bd4\u5982\u53ea\u5141\u8bb8\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u80fd\u591f\u7f6e\u6362\u4f4e\u4f18\u5148\u7ea7\u7684 frame\uff0c\u5373 priority replacement\uff0c\u5219\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u4f7f\u7528\u7684 frame \u53ef\u80fd\u8d8a\u6765\u8d8a\u591a\uff0c\u8fdb\u800c\u4e0d\u65ad\u4f18\u5316\u9ad8\u4f18\u5148\u7ea7\u8fdb\u7a0b\u7684\u6548\u7387\uff1b

    \u5f53\u7136\uff0c\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u6bcf\u4e2a\u8fdb\u7a0b\u6240\u62e5\u6709\u7684 frame \u6570\u91cf\u88ab minimum frame number \u7ed9 bound \u9650\u4f4f\u3002

    \u5bf9\u6bd4 local replacement \u548c global replacement\uff0c\u4e3b\u8981\u5c31\u662f\u4e00\u4e2a\u5c01\u95ed\u6027\u548c\u7075\u6d3b\u6027\u7684 trade-off\uff0c\u5f88\u76f4\u89c2\uff1aglobal replacement \u5206\u914d\u66f4\u7075\u6d3b\uff0c\u5185\u5b58\u7684\u5229\u7528\u7387\u66f4\u9ad8\uff0c\u4f46\u5bf9\u4e8e frame \u88ab\u201c\u62a2\u201d\u7684\u8fdb\u7a0b\u6765\u8bf4\uff0c\u6574\u4f53\u8fd0\u884c\u7684\u6548\u7387\u5c31\u4e0d\u7a33\u5b9a\u4e86\uff1b\u53cd\u89c2 local replacement\uff0c\u867d\u7136\u7531\u4e8e\u80fd\u591f\u5229\u7528\u7684\u5185\u5b58\u6709\u9650\uff0c\u53ef\u80fd\u51fa\u73b0\u522b\u7684\u8fdb\u7a0b\u7701\u4e86\u4e0d\u5c11\u4f46\u662f\u81ea\u5df1\u5f88\u5403\u7d27\u7684\u60c5\u51b5\uff0c\u51fa\u73b0\u5185\u5b58\u5229\u7528\u7387\u8f83\u4f4e\u7684\u60c5\u51b5\uff0c\u4f46\u6574\u4f53\u6765\u8bf4\u8f83\u4e3a\u7a33\u5b9a\uff0c\u8fdb\u7a0b\u4e4b\u95f4\u76f8\u5bf9\u6765\u8bf4\u4e0d\u4f1a\u4e92\u76f8\u5e72\u6270\u3002

    \u4e0a\u9762\u662f\u4e66\u4e0a\u7684\u610f\u601d\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u4e2a\u8bc4\u4ef7\u8fd8\u662f\u4e0d\u516c\u5e73\u7684\uff0c\u56e0\u4e3a\u6240\u8c13\u7684\u3001\u5c5e\u4e8e\u8fdb\u7a0b\u7684 frames \u7684\u6570\u91cf\u662f\u4f1a\u53d8\u7684\uff0c\u5728\u65b0\u7684\u8fdb\u7a0b\u88ab allocation \u540e\uff0c\u8fdb\u7a0b\u603b\u6570\u4f1a\u589e\u52a0\uff0c\u800c\u8fd9\u4e2a\u65b0\u8fdb\u7a0b\u53ea\u80fd\u4ece\u522b\u7684\u5730\u65b9\u522e\u4e00\u4e9b\u5185\u5b58\u6765\u7528\uff0c\u6240\u4ee5\u5c31\u7b97\u7528\u7684\u662f local replacement\uff0c\u4e5f\u8bf4\u4e0d\u4e0a\u7279\u522b\u7a33\u5b9a\u3002

    \u800c\u5982\u4eca\u7684\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u7684\u4e3b\u8981\u90fd\u662f global replacement\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u6296\u52a8","title":"\u6296\u52a8","text":"

    \u5018\u82e5\u7cfb\u7edf\u7684\u591a\u9053\u7a0b\u5ea6\u8fc7\u9ad8\uff0c\u90a3\u4e48\u53ef\u80fd\u5206\u914d\u7ed9\u6bcf\u4e00\u4e2a process \u7684 frames \u6570\u91cf\u5c31\u4f1a\u6bd4\u8f83\u5c11\uff0cprocess \u6240\u4f7f\u7528\u7684 frames \u4e2d\u88ab\u9891\u7e41\u4f7f\u7528\u7684 page \u5360\u6bd4\u66f4\u5927\u3002\u8fd9\u65f6\u5019\u53ef\u80fd\u5c31\u4f1a\u4ea7\u751f\u8f83\u4e3a\u9891\u7e41\u7684 paging \u6d3b\u52a8\u2014\u2014\u51e0\u4e4e\u6240\u6709 frames \u90fd\u6b63\u5728\u88ab\u4f7f\u7528\uff0c\u76f8\u5f53\u4e8e\u6bcf\u6b21\u7f6e\u6362\u90fd\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u65b0\u7684 page fault\u2014\u2014\u8fdb\u800c\u5bfc\u81f4 CPU \u7684\u5229\u7528\u7387\u4e0b\u964d\uff0c\u8fd9\u79cd\u73b0\u8c61\u88ab\u79f0\u4e3a\u6296\u52a8(thrashing)\u3002

    \u4f8b\u5982\uff0cprocess A \u53ef\u80fd\u62a2\u8d70\u4e86 process B \u7684\u6b63\u8981\u88ab\u4f7f\u7528\u7684 frame\uff0c\u4e8e\u662f\u5bfc\u81f4 process B \u4e4b\u540e\u4f1a\u4ea7\u751f\u4e00\u6b21 page fault\uff1b\u800c\u5728\u5904\u7406\u8fd9\u4e2a page fault \u7684\u65f6\u5019\uff0c\u53ef\u80fd\u53c8\u628a process C \u7684\u6b63\u8981\u4f7f\u7528\u7684 frame \u7ed9\u62a2\u8d70\u4e86\u2026\u2026

    early paging systems

    \u65e9\u671f\u7684\u8bbe\u8ba1\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u76d1\u63a7 CPU \u5229\u7528\u7387\uff0c\u5982\u679c\u53d1\u73b0 CPU \u5229\u7528\u7387\u4e0d\u591f\u9ad8\uff0c\u5c31\u4f1a\u8ba4\u4e3a CPU \u592a\u95f2\u4e86\uff0c\u4e8e\u662f\u5c1d\u8bd5\u589e\u52a0 degree of multiprogramming\u3002

    \u4f46\u5982\u679c CPU \u5229\u7528\u7387\u4e0b\u964d\u662f\u7531\u4e8e\u53d1\u751f thrashing\uff0c\u4ea7\u751f\u5927\u91cf I/O \u5bfc\u81f4\u7684\uff0c\u90a3 degree of multiprogramming \u7684\u589e\u52a0\u53cd\u800c\u4f1a\u52a0\u5267 thrashing\uff0c\u8fdb\u800c\u5bfc\u81f4 CPU \u5229\u7528\u7387\u4e0b\u964d\uff0c\u5f62\u6210\u6076\u6027\u5faa\u73af\u3002

    \u5728\u9047\u5230 thrashing \u95ee\u9898\u7684\u65f6\u5019\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u5e94\u5f53\u964d\u4f4e degree of multiprogramming \u624d\u5bf9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u4f7f\u7528-priority","title":"\u4f7f\u7528 Priority","text":"

    \u53ef\u4ee5\u60f3\u8c61\u5230\uff0c\u8fd9\u91cc\u51fa\u73b0\u4e86\u4e00\u79cd\u7c7b\u4f3c\u4e8e\u4e92\u76f8\u62a2 frame \u7684\u60c5\u51b5\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8ba9\u4e00\u65b9\u201c\u8ba9\u6b65\u201d\u6765\u89e3\u51b3\uff0c\u4f8b\u5982\u4f7f\u7528 priority replacement algorithm \u6765\u89e3\u51b3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#working-set","title":"Working Set","text":"

    \u8fd8\u6709\u4e00\u79cd\u57fa\u4e8e\u5c40\u90e8\u6027\u5047\u8bbe\u7684\u505a\u6cd5\uff0c\u53eb working set model\u3002\u5b83\u7684\u5927\u81f4\u601d\u8def\u662f\u5c06\u300c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4e00\u4e2a \\(\\Delta\\) \u65f6\u95f4\u7a97\u53e3\u5185\u7528\u5230\u8fc7\u7684 frame\u300d\u5efa\u6a21\u4e3a\u4e00\u4e2a\u8fdb\u7a0b\u7684 working set \\(WS_i\\)\uff0c\u5982\u679c \\(\\sum_i |WS_i| > m\\)\uff0c\u5373\u6240\u6709\u8fdb\u7a0b\u7684 working set \u7684\u5927\u5c0f\u4e4b\u548c\u5927\u4e8e\u53ef\u7528 frame \u7684\u6570\u91cf\uff0c\u90a3\u4e48\u5c31\u53ef\u80fd\u4f1a\u51fa\u73b0 thrashing\u3002\u6b64\u65f6\u64cd\u4f5c\u7cfb\u7edf\u53ef\u80fd\u5c31\u4f1a\u9009\u62e9\u6302\u8d77\u67d0\u4e2a process\uff0c\u4ee5\u964d\u4f4e degree of multiprogramming\u3002\u8fd9\u4e2a\u505a\u6cd5\u7684\u4e00\u4e2a\u95ee\u9898\u548c LRU \u662f\u7c7b\u4f3c\u7684\uff0c\u8981\u53bb\u7ef4\u62a4 \\(WS_i\\) \u662f\u6bd4\u8f83\u5403\u529b\u7684\uff0c\u800c\u89e3\u51b3\u529e\u6cd5\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd1\u4f3c\u5730\u53bb\u7ef4\u62a4 \\(WS_i\\)\u3002

    \u8be6\u7ec6\u5185\u5bb9\u4e0d\u518d\u5c55\u5f00\uff0c\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003 Wiki \u505a\u66f4\u591a\u4e86\u89e3\u3002\u6b64\u5916\uff0cworking set \u7684\u601d\u8def\u53ef\u4ee5\u7528\u4e8e\u5b9e\u73b0 pre-paging\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#pff","title":"PFF","text":"

    \u6216\u8005\u4e5f\u80fd\u5229\u7528\u7f3a\u9875\u9891\u7387(Page-Fault Frequency, PFF)\u6765\u505a\u52a8\u6001\u8c03\u8282\uff0c\u7531\u4e8e PFF \u4e0e\u8fdb\u7a0b\u53ef\u7528\u7684 frames \u6570\u91cf\u5927\u81f4\u6210\u8d1f\u76f8\u5173\uff0c\u6211\u4eec\u53ef\u4ee5\u8bbe\u5b9a\u4e0a\u4e0b\u754c\u5e76\u8fdb\u884c\u8d1f\u53cd\u9988\u63a7\u5236\uff1aprocess \u7684 PFF \u8fc7\u9ad8\u65f6\u589e\u52a0\u5b83\u53ef\u7528\u7684 frames \u6570\u91cf\uff0c\u5f53 process \u7684 PFF \u8f83\u4f4e\u65f6\u53ef\u4ee5\u51cf\u5c11\u5b83\u53ef\u7528\u7684 frames \u6570\u91cf\u3002

    \u4e0d\u8fc7\uff0c\u5bf9\u4e8e\u8be5\u95ee\u9898\uff0c\u5148\u884c\u7684\u6700\u4f73\u89e3\u51b3\u65b9\u6848\u5176\u5b9e\u662f\u589e\u52a0\u7269\u7406\u5185\u5b58\uff0c\u4ece\u786c\u4ef6\u4e0a\u89e3\u51b3\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u5185\u5b58\u538b\u7f29","title":"\u5185\u5b58\u538b\u7f29","text":"

    \u5185\u5b58\u538b\u7f29(memory compression)\u7684\u601d\u8def\u533a\u522b\u4e8e swap\uff0c\u628a frame \u6362\u5230 backing store \u91cc\uff0c\u800c\u4e14\u5c1d\u8bd5\u53bb merge \u4e00\u4e9b frame\uff0c\u5373\u5229\u7528\u5185\u90e8\u788e\u7247\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u5185\u6838\u5185\u5b58","title":"\u5185\u6838\u5185\u5b58","text":"

    \u6211\u4eec\u4e4b\u524d\u8ba8\u8bba\u7684\u5185\u5b58\u7ba1\u7406\u673a\u5236\uff0c\u5c24\u5176\u662f\u5185\u5b58\u7684\u5206\u914d\u548c\u7f6e\u6362\u673a\u5236\uff0c\u90fd\u662f\u9488\u5bf9 user process \u7684\u3002\u800c\u5185\u6838\u7684\u8fd0\u884c\u540c\u6837\u9700\u8981 memory\uff0c\u4f46\u5b83\u4e0d\u80fd\u4f7f\u7528\u548c user process \u76f8\u540c\u7684\u5185\u5b58\u8bbe\u8ba1\u3002\u7531\u4e8e kernel \u7a0b\u5e8f\u662f\u4e00\u76f4\u8fd0\u884c\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u66f4\u4fdd\u5b88\u5730\u4f7f\u7528\u5185\u5b58\uff0c\u8bf8\u5185\u90e8\u788e\u7247\u7684\u95ee\u9898\u5e94\u5f53\u5c3d\u53ef\u80fd\u907f\u514d\uff0c\u4e8b\u5b9e\u4e0a\uff0c\u8bb8\u591a\u64cd\u4f5c\u7cfb\u7edf\u90fd\u5bf9 kernel \u4f7f\u7528 paging \u8bbe\u8ba1\u3002\u518d\u52a0\u4e0a\u7531\u4e8e kernel \u9700\u8981\u548c\u4e00\u4e9b\u786c\u4ef6\u505a\u4ea4\u4e92\uff0c\u800c\u8bb8\u591a\u786c\u4ef6\u8bbe\u5907\u90fd\u53ea\u76f4\u63a5\u4e0e\u7269\u7406\u5185\u5b58\u505a\u4ea4\u4e92\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u5bf9 kernel \u5185\u5b58\u5728\u7269\u7406\u5185\u5b58\u4e0a\u7684\u8fde\u7eed\u6027\u6709\u4e00\u5b9a\u4fdd\u8bc1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#buddy-\u7cfb\u7edf","title":"Buddy \u7cfb\u7edf","text":"

    Buddy systemWiki \u53ef\u4ee5\u7528\u6765\u5206\u914d\u7269\u7406\u8fde\u7eed\u7684\u5185\u5b58\uff0c\u5b83\u7531 power-of-2 allocator \u5b9e\u73b0\u3002

    \u5f53 kernel \u9700\u8981 \\(n\\) KB \u7684\u5185\u5b58\u65f6\u5019\uff0cBuddy system \u4f1a\u5206\u914d\u4e00\u5757 \\(2^k\\) KB \u7684\u7a7a\u95f4\uff0c\u5176\u4e2d \\(k = \\lceil \\log_2{n} \\rceil\\)\u3002

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u8fd9\u6837\u8fd8\u662f\u5bb9\u6613\u51fa\u73b0\u5185\u90e8\u788e\u7247\uff0cBuddy system \u65e0\u6cd5\u89e3\u51b3\u8fd9\u79cd\u5185\u90e8\u788e\u7247\uff0c\u4f46\u662f\u7a0d\u5019\u63a5\u53d7\u7684 Slab allocation \u53ef\u4ee5\u3002

    \u5177\u4f53\u6765\u8bf4\uff0cBuddy system \u901a\u8fc7\u4e0d\u65ad\u4e8c\u5206\u7684\u65b9\u5f0f\u6765\u5bfb\u627e\u4e00\u5757\u5408\u9002\u7684\u5185\u5b58\uff0c\u5982\u4e0b\u56fe\uff1a

    \u4f8b\u5982 kernel \u7533\u8bf7\u4e00\u5757 21KB \u7684\u5185\u5b58\uff0c\u90a3\u4e48 \\(C_L\\) \u5c31\u662f\u6211\u4eec\u6700\u7ec8\u5206\u914d\u7684\u5185\u5b58\u3002

    Buddy system \u8fd8\u6709\u4e00\u4e2a\u7279\u70b9\u662f\uff0c\u5b83\u901a\u8fc7 coalesce \u76f8\u90bb\u7684\u7a7a\u95f2\u5757\u6765\u5f62\u6210\u66f4\u5927\u7684\u5185\u5b58\u5757\uff0c\u4f8b\u5982\u4e0a\u56fe\u53ef\u4ee5\u6309\u7167\u5206\u88c2\u7684\u65b9\u5f0f\u5408\u5e76\u56de 256 KB \u7684\u5927\u5185\u5b58\u5757\uff08\u5408\u5e76\u5927\u5185\u5b58\uff09\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#slab-\u5206\u914d","title":"Slab \u5206\u914d","text":"

    Slab \u5206\u914d\u7684\u5927\u6982\u601d\u8def\u662f\u9884\u5148\u4e86\u89e3\u5230 kernel \u5185\u7684\u5e38\u89c1\u6570\u636e\u7ed3\u6784\uff08\u88ab\u79f0\u4e3a\u5404\u79cd object\uff09\u7684\u5927\u5c0f\uff0c\u5e76\u9884\u5148\u51c6\u5907\u597d\u5bf9\u5e94\u7c92\u5ea6\u7684\u5c0f\u5185\u5b58\u5757\uff0c\u6ce8\u518c\u5230\u6bcf\u7c7b object \u7684 cache \u91cc\u3002\u5f53\u4e00\u4e2a object \u9700\u8981\u4f7f\u7528\u5185\u5b58\u65f6\uff0c\u5c31\u67e5\u8be2\u5bf9\u5e94\u7684 cache \u91cc\u662f\u5426\u6709\u7a7a\u95f2\u7684\u5185\u5b58\u5757\uff0c\u5982\u679c\u6709\u5c31\u5206\u914d\u7ed9\u5b83\uff0c\u5982\u679c\u6ca1\u6709\u5c31\u5411 Buddy system \u7533\u8bf7\u3002

    \u76f8\u5f53\u4e8e\u9884\u5148\u628a\u5185\u5b58\u5206\u6210\u4e86\u82f9\u679c\u5c0f\u76d2\u3001\u51b0\u7bb1\u5927\u7bb1\u3001\u8d85\u5927\u8f66\u5e93\uff0c\u7136\u540e\u6839\u636e\u8981\u653e\u7684\u4e1c\u897f\u7684\u5927\u5c0f\u9009\u62e9\u5408\u9002\u7684\u7a7a\u95f4\u6765\u653e\u3002

    1. Linux OOM (Out-of-memory) Killer | Medium \u21a9

    2. Enhanced Second-Chance Algorithm \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/","title":"Unit 4: \u8f93\u5165/\u8f93\u51fa | I/O","text":"

    \u7ea6 1284 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u8bf4\u660e

    \u8fd9\u90e8\u5206\u5185\u5bb9\uff08\u5176\u5b9e\u4e5f\u5305\u62ec\u4e4b\u540e\u7684\u5185\u5bb9\uff09\u5199\u7684\u6bd4\u8f83\u7b80\u7565\uff0c\u56e0\u4e3a\u8bf4\u662f\u4e0d\u592a\u96be\uff0c\u4e3b\u8981\u662f\u671f\u672b\u4e86\u6211\u4e5f\u6ca1\u5fc3\u601d\u5199\u592a\u7ec6\u4e86\uff0c\u5982\u679c\u6709\u597d\u4eba\u53ef\u4ee5\u5e2e\u6211\u5b8c\u5584\u4e00\u4e0b\u3002

    \u5bfc\u8bfb

    I/O \u662f\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\u7684\u91cd\u8981\u7ec4\u6210\u90e8\u5206\uff0c\u5b83\u662f\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e0e\u5916\u90e8\u4e16\u754c\u4ea4\u6362\u4fe1\u606f\u7684\u901a\u9053\u3002I/O \u8bbe\u5907\u7684\u79cd\u7c7b\u5f88\u591a\uff0c\u5982\u78c1\u76d8\u3001\u6253\u5370\u673a\u3001\u952e\u76d8\u3001\u9f20\u6807\u3001\u663e\u793a\u5668\u3001\u7f51\u5361\u7b49\uff0c\u627f\u62c5\u4e86\u5b58\u50a8\u3001\u901a\u4fe1\u3001\u4eba\u673a\u4ea4\u4e92\u7b49\u82e5\u5e72\u529f\u80fd\u3002\u800c\u6211\u4eec\u77e5\u9053 I/O \u53c8\u662f CPU \u7684\u91cd\u8981\u74f6\u9888\uff0c\u6240\u4ee5 I/O \u7cfb\u7edf\u7684\u8bbe\u8ba1\u662f\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u95ee\u9898\u3002\uff08\u4f46\u4e0d\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u8003\u70b9\uff1f\uff09

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/#io-\u6982\u8ff0","title":"I/O \u6982\u8ff0","text":"

    concepts

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/#io-\u8bbf\u95ee\u65b9\u5f0f","title":"I/O \u8bbf\u95ee\u65b9\u5f0f","text":"

    \u5f53\u8ba1\u7b97\u673a\u9700\u8981\u8bbe\u5907\u505a\u67d0\u4e9b\u4e8b\u7684\u65f6\u5019\uff0c\u53d1\u51fa\u8bf7\u6c42\uff0c\u6b64\u65f6\u8ba1\u7b97\u673a\u9700\u8981\u7b49\u5f85\u8bbe\u5907\u7684\u54cd\u5e94\uff0c\u6309\u7167\u7b49\u5f85\u65b9\u5f0f\u7684\u4e0d\u540c\uff0c\u5206\u4e3a\u8f6e\u8be2(polling)\u3001\u4e2d\u65ad(interrupt)\u4e24\u79cd\u3002

    polling

    \u8f6e\u8be2\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e0e I/O \u8bbe\u5907\u4ea4\u4e92\u7684\u6700\u7b80\u5355\u65b9\u5f0f\u3002\u901a\u5e38\u8bbe\u5907\u4f1a\u7528\u67d0\u79cd\u65b9\u5f0f\u6765\u6807\u8bc6\u8bbe\u5907\u662f\u5426\u53ef\u7528\u6216\u7a7a\u95f2\uff0c\u8f6e\u8be2\u6307\u7684\u662f CPU \u4e0d\u65ad\u5411\u8bbe\u5907\u63a7\u5236\u5668\u67e5\u8be2\u8bbe\u5907\u72b6\u6001\uff0c\u76f4\u5230\u8bbe\u5907\u5c31\u7eea\uff0c\u7136\u540e\u8fdb\u884c\u6570\u636e\u4f20\u8f93\u3002\u8fd9\u79cd\u65b9\u5f0f\u7684\u7f3a\u70b9\u662f\u9700\u8981\u8fdb\u884c busy wait\uff0c\u5728\u8bbe\u5907\u6bd4\u8f83\u7f13\u6162\u7684\u60c5\u51b5\u4e0b\u4f1a\u964d\u4f4e CPU \u7684\u5229\u7528\u7387\u3002

    interrupt

    \u6211\u4eec\u5df2\u7ecf\u5728 Overview \u8bb2\u8fc7\u4e2d\u65ad\u4e86\uff0c\u6240\u4ee5\u6709\u5173\u4e2d\u65ad\u7684\u5177\u4f53\u6280\u672f\u7ec6\u8282\u5c31\u4e0d\u518d\u5c55\u5f00\u3002

    \u73b0\u4ee3\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\uff0c\u4e2d\u65ad\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e0e I/O \u8bbe\u5907\u4ea4\u4e92\u7684\u4e3b\u8981\u65b9\u5f0f\uff0c\u8ba1\u7b97\u673a\u5411\u8bbe\u5907\u53d1\u51fa\u8bf7\u6c42\u4ee5\u540e\uff0c\u53ef\u4ee5\u5c06\u5f53\u524d\u8fdb\u7a0b\u8c03\u5ea6\u8d70\uff0c\u7b49\u5230\u8bbe\u5907\u5904\u7406\u5b8c\u6210\u540e\u4f1a\u5411 CPU \u53d1\u9001\u4e2d\u65ad\uff0c\u6b64\u65f6\u8ba1\u7b97\u673a\u518d\u5bf9\u7ed3\u679c\u505a\u5904\u7406\u3002\u4e2d\u65ad\u7684\u4f18\u70b9\u662f CPU \u4e0d\u9700\u8981\u8fdb\u884c busy wait\uff0c\u5728\u8bbe\u5907\u5904\u7406\u65f6\u95f4\u8fdc\u5927\u4e8e\u4e0a\u4e0b\u6587\u4ea4\u6362\u7684\u60c5\u51b5\u4e0b\u53ef\u4ee5\u63d0\u9ad8 CPU \u7684\u5229\u7528\u7387\u3002

    Interrupt-driven I/O cycle.

    \u5b9e\u9645\u4e0a\u4f7f\u7528\u54ea\u79cd\u65b9\u6848\uff0c\u5176\u5b9e\u4e0e \u201cbusy wait\u201d \u7684\u4f18\u52a3\u8fd9\u4e2a\u95ee\u9898\u662f\u7b49\u4ef7\u7684\uff0c\u6211\u4eec\u5df2\u7ecf\u5728\u540c\u6b65\u4e2d\u6709\u6240\u6d89\u53ca\u3002

    DMA

    \u4e0a\u9762\u63d0\u5230\u7684\u4e24\u79cd\u65b9\u6cd5\u90fd\u662f\u57fa\u4e8e CPU \u5168\u6743\u8d1f\u8d23 I/O \u4e0e\u5185\u5b58\u4ea4\u4e92\u7684\u5047\u8bbe\u3002\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e9b\u4e8b\u60c5\u53ef\u80fd\u5e76\u4e0d\u9700\u8981\u5fc5\u987b\u7531 CPU \u6765\u8d1f\u8d23\u3002DMA(direct memory access)\u5141\u8bb8\u5185\u5b58\u548c I/O \u8bbe\u5907\u4e4b\u95f4\u76f4\u63a5\u4ea4\u4e92\uff0c\u4e0d\u7ecf\u8fc7 CPU\uff0c\u8fd9\u6837\u53ef\u4ee5\u51cf\u5c11 CPU \u7684\u8d1f\u62c5\uff0c\u63d0\u9ad8 I/O \u6027\u80fd\u3002DMA \u901a\u5e38\u7531\u72ec\u7acb\u7684\u786c\u4ef6\u8bbe\u5907 DMA controller \u6765\u5b9e\u73b0\u3002

    \u5bb9\u6613\u60f3\u8c61\uff0cDMA \u6709\u4e00\u5b9a\u9650\u5236\uff0c\u901a\u5e38 DMA \u53ea\u8d1f\u8d23\u505a\u5927\u91cf\u7684\u3001\u4ee5 blocks \u4e3a\u5355\u4f4d\u7684\u6570\u636e\u4f20\u8f93\uff0c\u800c\u4e0d\u662f\u5355\u4e2a\u5b57\u8282\u7684\u4f20\u8f93\u3002CPU \u9700\u8981\u5411 DMA controller \u53d1\u51fa\u5bf9\u5e94\u7684\u547d\u4ee4\uff0c\u4e4b\u540e\u7684\u4e8b\u60c5\u5c31\u4ea4\u7ed9 DMA \u6765\u5b8c\u6210\u3002\u547d\u4ee4\u901a\u5e38\u5305\u62ec\u64cd\u4f5c\u7c7b\u578b\u3001\u8d77\u59cb\u5730\u5740\u3001\u6570\u636e\u957f\u5ea6\u7b49\uff0c\u4f20\u8f93\u65b9\u5f0f\u4e00\u822c\u662f\u628a\u8981\u6267\u884c\u7684\u6307\u4ee4\u7684\u5730\u5740\u5b58\u5230 DMA controller \u7684\u5bc4\u5b58\u5668\u4e2d\uff0c\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u59d4\u6258 DMA controller \u8fdb\u884c\u4f5c\u4e1a\uff0c\u6709\u70b9\u50cf\u56de\u8c03\u51fd\u6570\u3002

    \u5f53\u64cd\u4f5c\u5b8c\u6210\u540e\uff0cDMA controller \u4f1a\u5411 CPU \u53d1\u9001\u4e2d\u65ad\u4fe1\u53f7\uff0c\u8868\u793a\u4efb\u52a1\u5b8c\u6210\u3002

    The life cycle of an I/O request.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/#\u5e94\u7528\u7a0b\u5e8f-io-\u63a5\u53e3","title":"\u5e94\u7528\u7a0b\u5e8f I/O \u63a5\u53e3","text":"

    \u968f\u7740\u6280\u672f\u53d1\u5c55\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u6807\u51c6\u5316\u3001\u901a\u7528\u5316\u7684 I/O \u65b9\u5f0f\u7684\u9700\u6c42\u4e0e\u5e02\u573a\u591a\u5143\u5316\u3001\u5dee\u5f02\u5316\u7684 I/O \u8bbe\u5907\u4e4b\u95f4\u7684\u77db\u76fe\u65e5\u76ca\u7a81\u51fa\u3002\u56e0\u6b64\uff0c\u4e00\u5957\u901a\u7528\u7684\u3001\u6807\u51c6\u5316\u7684 I/O \u63a5\u53e3\u662f\u5341\u5206\u5fc5\u8981\u7684\u3002\u4e8e\u662f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u80fd\u591f\u4f7f\u7528\u7cfb\u7edf\u8c03\u7528\u5c01\u88c5 I/O \u64cd\u4f5c\uff0c\u5c06\u4e0d\u540c\u64cd\u4f5c\u7684\u5dee\u5f02\u6027\u900f\u660e\u5316\uff0c\u5728 UNIX \u4e2d\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u8c03\u7528\u662f ioctlWiki\u3002

    A kernel I/O structure.

    \u5177\u4f53\u6765\u8bf4\uff0c\u4e0d\u540c\u8bbe\u5907\u53ef\u80fd\u5728\u8fd9\u4e9b\u65b9\u9762\u6709\u533a\u522b\uff1a

    dimensions

    \u4fee\u6539\u81ea xyx \u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0\u3002

    1. Bus (computing) | Wikipedia \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/","title":"Unit 5: \u5b58\u50a8 | Storage","text":"

    \u7ea6 2955 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f

    \u8bf4\u660e

    \u8fd9\u90e8\u5206\u5185\u5bb9\uff08\u5176\u5b9e\u4e5f\u5305\u62ec\u4e4b\u540e\u7684\u5185\u5bb9\uff09\u5199\u7684\u6bd4\u8f83\u7b80\u7565\uff0c\u56e0\u4e3a\u8bf4\u662f\u4e0d\u592a\u96be\uff0c\u4e3b\u8981\u662f\u671f\u672b\u4e86\u6211\u4e5f\u6ca1\u5fc3\u601d\u5199\u592a\u7ec6\u4e86\uff0c\u5982\u679c\u6709\u597d\u4eba\u53ef\u4ee5\u5e2e\u6211\u5b8c\u5584\u4e00\u4e0b\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u786c\u76d8","title":"\u786c\u76d8","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u7ed3\u6784","title":"\u7ed3\u6784","text":"

    \u786c\u76d8(hard disk, HD)\u662f\u5e38\u89c1\u7684\u4e8c\u7ea7\u5b58\u50a8\uff0c\u5176\u7ed3\u6784\u6309\u7167\u4ece\u5c0f\u5230\u5927\u5206\u4e3a\uff1a\u6247\u533a(sectors)\u3001\u78c1\u9053(tracks)\u3001\u67f1\u9762(cylinders)\uff0c\u4fa7\u9762\u7684\u78c1\u81c2(disk arm)\u4f1a\u4ee5\u6574\u4f53\u79fb\u52a8\u4e0a\u9762\u7684\u6240\u6709\u8bfb\u5199\u78c1\u5934(r/w heads)\u3002

    HDD moving-head disk mechanism.

    \u4ece\u786c\u76d8\u4e0a\u8bfb\u5199\u5185\u5bb9\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a

    steps

    1. \u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u67f1\u9762\uff1b
    2. \u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u78c1\u9053\uff1b
    3. \u78c1\u76d8\u65cb\u8f6c\u5230\u6247\u533a\u4f4d\u4e8e\u78c1\u5934\u4e0b\u65b9\uff1b
    4. \u8bfb\u5199\u6247\u533a\u5185\u5bb9\uff1b

    \u6309\u7167\u5176\u673a\u68b0\u8fc7\u7a0b\uff0cdisk I/O \u64cd\u4f5c\u7684\u4e3b\u8981\u65f6\u95f4\u6784\u6210\u4e3a\uff1a

    components

    \u56e0\u6b64\uff0cdisk \u7684\u5e73\u5747 I/O \u64cd\u4f5c\u65f6\u95f4\u4e3a\uff1a

    \\[ \\begin{aligned} \\text{Average I/O time} &= \\underbrace{\\text{average seek time} + \\text{rotational latency}}_\\text{average access time} \\\\ &+ \\underbrace{\\frac{\\text{data to transfer}}{\\text{transfer rate}}}_{\\text{transfer time}} \\\\ &+ \\text{controller overhead} \\end{aligned} \\] \ud83c\udf30

    \u7ed9\u51fa\u4e00\u4e2a\u5305\u542b\u5177\u4f53\u53c2\u6570\u7684\u4f8b\u5b50\u6765\u611f\u53d7 I/O \u64cd\u4f5c\u6162\u5728\u54ea\u91cc

    \u4e00\u4e2a 7200 rpm \u7684\u786c\u76d8\uff08\u6240\u4ee5\u65cb\u8f6c\u65f6\u5ef6\u4e3a 4.17 ms\uff09\uff0c\u5176\u5e73\u5747\u5bfb\u9053\u65f6\u95f4\u4e3a 5 ms\uff0c\u4f20\u8f93\u901f\u7387\u4e3a 1 Gb/sec\uff0c\u63a7\u5236\u5668\u5f00\u9500\u4e3a 0.1 ms\uff0c\u90a3\u4e48\u8bfb\u53d6 4 KB \u7684\u6570\u636e\u5bf9\u5e94\u7684\u5e73\u5747 I/O \u64cd\u4f5c\u65f6\u95f4\u4e3a\uff1a

    \\[ 5 \\text{ms} + 4.17 \\text{ms} + \\frac{4 \\times 1000 \\times 8}{1 \\times 1000 \\times 1000 \\times 1000} \\text{sec} + 0.1 \\text{ms} = 9.302 \\text{ms} \\]

    \u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\u6211\u4eec\u4e0d\u96be\u5f97\u5230\u5982\u4e0b\u7ed3\u8bba\uff1a

    conclusion

    1. \u5f00\u9500\u7684\u5927\u5934\u662f access time\uff1b
    2. \u8bf7\u6c42\u6d89\u53ca\u7684\u5185\u5b58\u8ddd\u79bb\u8d8a\u8fdc\uff0c\u5177\u4f53\u7684 access time \u8d8a\u5927\uff1b
    3. \u6211\u4eec\u5728\u4e0d\u8003\u8651\u66f4\u65b0\u786c\u4ef6\u80fd\u529b\u7684\u60c5\u51b5\u4e0b\uff0c\u8981\u60f3\u964d\u4f4e I/O \u65f6\u95f4\uff0c\u5c31\u9700\u8981\u8ba9 I/O \u64cd\u4f5c\u7684\u5bf9\u8c61\u5c3d\u53ef\u80fd\u201c\u987a\u5e8f\u201d\uff1b

    \u56e0\u6b64\uff0c\u6211\u4eec\u63d0\u51fa disk scheduling\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u8c03\u5ea6","title":"\u8c03\u5ea6","text":"

    \u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u5f15\u5165\u4e00\u4e2a\u5ea6\u91cf\u91cf\uff1adisk bandwidth = \u4f20\u8f93\u6570\u636e\u91cf / \u8bf7\u6c42\u5f00\u59cb\u5230\u4f20\u8f93\u5b8c\u6210\u7684\u65f6\u95f4\u95f4\u9694\u3002\u6211\u4eec\u60f3\u63d0\u9ad8 I/O \u6027\u80fd\uff0c\u5b9e\u9645\u4e0a\u662f\u60f3\u63d0\u5347 disk bandwidth\u3002

    \u5728 I/O \u8bf7\u6c42\u5341\u5206\u7a00\u758f\u7684\u65f6\u5019\uff0cI/O \u64cd\u4f5c\u603b\u662f\u7a7a\u95f2\uff0c\u6bcf\u5f53\u51fa\u73b0\u4e00\u4e2a I/O \u8bf7\u6c42\u6211\u4eec\u5c31\u76f4\u63a5\u5904\u7406\uff0c\u5904\u7406\u8fc7\u7a0b\u4e2d\u4e5f\u6ca1\u6709\u5176\u5b83 I/O \u8bf7\u6c42\u51fa\u73b0\uff0c\u6b64\u65f6\u6211\u4eec\u6ca1\u6709\u529e\u6cd5\u6765\u52a0\u901f\u8fd9\u4e2a\u8fc7\u7a0b\u3002\u4f46\u5f53 I/O \u8bf7\u6c42\u6bd4\u8f83\u5bc6\u96c6\uff0c\u6211\u4eec\u9700\u8981\u7528\u4e00\u4e2a queue \u6765\u7ef4\u62a4\u7b49\u5f85\u4e2d\u7684\u8bf7\u6c42\uff0c\u6b64\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 disk scheduling \u6765\u8c03\u6574\u8fd9\u4e9b\u8bf7\u6c42\u88ab\u5904\u7406\u7684\u987a\u5e8f\uff0c\u6765\u63d0\u9ad8 disk bandwidth\u3002\u800c disk scheduling \u5728\u8fd9\u4e2a queue \u5b58\u5728\u7684\u60c5\u51b5\u4e0b\u624d\u6709\u610f\u4e49\u3002

    \u6bcf\u4e00\u4e2a I/O \u8bf7\u6c42\u53ef\u80fd\u5305\u62ec\u8fd9\u4e9b\u4fe1\u606f\uff1a\u24f5 \u8f93\u5165\u8fd8\u662f\u8f93\u51fa\uff1b\u24f6 \u6307\u4ee3\u76ee\u6807\u6587\u4ef6\u7684\u6587\u4ef6\u53e5\u67c4\uff1b\u24f7 \u4f20\u8f93\u6d89\u53ca\u7684\u5185\u5b58\u5730\u5740\uff1b\u24f8 \u4f20\u8f93\u7684\u6570\u636e\u91cf\u2026\u2026

    \u5982\u4eca\u7684 disk driver \u4e0d\u5728\u5bf9\u64cd\u4f5c\u7cfb\u7edf\u66b4\u9732\u64cd\u4f5c\u7684 tracks\u3001sectors \u7b49\uff0c\u800c\u662f\u63d0\u4f9b\u4e0e\u7269\u7406\u5730\u5740\u76f8\u5173\u7684 logical block address(LBA)\uff0c\u800c logical block \u662f\u6570\u636e\u4f20\u8f93\u7684\u6700\u5c0f\u5355\u5143\u3002\u867d\u7136\u4e0d\u5b8c\u5168\u7b49\u4ef7\uff0c\u4f46\u662f\u6211\u4eec\u5728\u8ba8\u8bba disk scheduling \u7684\u65f6\u5019\u53ef\u4ee5\u8ba4\u4e3a LBA \u7684\u5c40\u90e8\u6027\u548c\u987a\u5e8f\u6027\u4e0e\u7269\u7406\u5730\u5740\u7684\u5c40\u90e8\u6027\u548c\u987a\u5e8f\u6027\u662f\u4e00\u81f4\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#fcfs","title":"FCFS","text":"

    \u53c8\u89c1 FCFS\uff0c\u4ecd\u7136\u4e00\u6837\uff0c\u5148\u8fdb queue \u7684\u5148\u5904\u7406\uff0c\u662f\u6700\u57fa\u672c\u7684 disk scheduling \u7b97\u6cd5\u3002\u7531\u4e8e\u6ca1\u6709\u5bf9\u6570\u636e\u505a\u4efb\u4f55\u8c03\u6574\uff0c\u6240\u4ee5\u4e5f\u5e76\u6ca1\u6709\u4efb\u4f55\u4f18\u5316\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#sstf","title":"SSTF","text":"

    SSTF \u5373 shortest seek time first\uff0c\u7531\u4e8e seek time \u57fa\u672c\u548c\u7269\u7406\u5730\u5740\u8ddd\u79bb\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u5c31\u662f\u603b\u662f\u9009\u62e9\u8ddd\u79bb\u5f53\u524d\u78c1\u5934\u6700\u8fd1\u7684\u90a3\u4e2a\u8bf7\u6c42\u53bb\u5904\u7406\u3002

    \u4e0d\u540c\u4e8e\u4e4b\u524d\u63d0\u5230\u8fc7\u7684 short xxx first \u7b97\u6cd5\uff0cSSTF \u5e76\u4e0d\u662f\u7406\u8bba\u6700\u4f18\u65b9\u6848\uff01

    Advantages

    Disadvantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#scan--lock","title":"SCAN & LOCK","text":"

    SCAN \u7b97\u6cd5\u4e0b\u78c1\u5934\u5728\u78b0\u5230 LBA \u8fb9\u754c\u524d\u53ea\u4f1a\u5355\u5411\u79fb\u52a8\uff0c\u800c\u5728\u79fb\u52a8\u8fc7\u7a0b\u4e2d\u5904\u7406\u80fd\u591f\u5904\u7406\u7684\u8bf7\u6c42\u3002\u8fd9\u6837\u4fdd\u8bc1\u4e86\u5904\u7406\u8bf7\u6c42\u7684\u8fc7\u7a0b\u4e2d\u603b\u662f\u987a\u5e8f\u7684\u3002

    SCAN disk scheduling.

    Advantages

    Disadvantages

    \u5982\u679c\u6211\u4eec\u4e0d\u8d70\u5230\u5e95\uff0c\u800c\u662f\u8d70\u5230\u6700\u9760\u8fd1\u8fb9\u754c\u7684\u8bf7\u6c42\u5bf9\u5e94\u7684 LBA \u5c31\u63d0\u524d\u6389\u5934\uff0c\u90a3\u4e48\u5c31\u662f LOCK \u7b97\u6cd5\u3002\u663e\u800c\u6613\u89c1\u7684\uff0cLOCK \u7b97\u6cd5\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 SCAN\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#c-scan--c-lock","title":"C-SCAN & C-LOCK","text":"

    C-SCAN \u5373 Circular SCAN\uff0cC-SCAN \u4e0e SCAN \u7684\u552f\u4e00\u533a\u522b\u662f\uff0cC-SCAN \u7684\u78c1\u5934\u79fb\u52a8\u662f\u59cb\u7ec8\u5355\u5411\u7684\uff0c\u5f53\u78c1\u5934\u8fbe\u5230 LBA \u7684\u8fb9\u754c\u65f6\uff0c\u5f84\u76f4\u8fd4\u56de\u5230\u53e6\u4e00\u7aef\uff0c\u56de\u7a0b\u4e2d\u4e0d\u54cd\u5e94\u4efb\u4f55\u8bf7\u6c42\uff0c\u7c7b\u4f3c\u4e8e\u201c\u9996\u5c3e\u76f8\u649e\u201d\u4e86\uff0c\u6240\u4ee5\u624d\u53eb \u201ccircular\u201d\u3002

    C-SCAN disk scheduling.

    Advantages

    \u7c7b\u4f3c\u7684\uff0c\u5982\u679c\u6211\u4eec\u4e0d\u8d70\u5230\u5e95\uff0c\u5728\u5904\u7406\u5b8c\u6700\u9760\u8fd1\u8fb9\u754c\u7684\u8bf7\u6c42\u540e\u5c31\u76f4\u63a5\u8fd4\u56de\uff1b\u5bf9\u5e94\u7684\uff0c\u5728\u8fd4\u7a0b\u7684\u65f6\u5019\u4e0d\u662f\u8fd4\u56de\u5230\u6700\u4f4e LBA\uff0c\u800c\u662f\u4ece\u6700\u9760\u8fd1\u8fb9\u754c\u7684\u8bf7\u6c42\u5f00\u59cb\uff0c\u90a3\u4e48\u5c31\u662f C-LOCK \u7b97\u6cd5\u3002\u540c\u6837\uff0cC-LOCK \u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 C-SCAN\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u8c03\u5ea6\u7b97\u6cd5\u7684\u9009\u62e9","title":"\u8c03\u5ea6\u7b97\u6cd5\u7684\u9009\u62e9","text":"

    Disk scheduling \u5e94\u5f53\u88ab\u8bbe\u8ba1\u4e3a\u4e00\u4e2a\u53ef\u66ff\u6362\u7684\u6a21\u5757\uff0c\u8fd9\u6837\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u4e0d\u540c\u7684\u5e94\u7528\u573a\u666f\u9009\u62e9\u4e0d\u540c\u7684\u7b97\u6cd5\u3002\u901a\u5e38\uff0cSSTF \u662f\u6bd4\u8f83\u5e38\u89c1\u7684\u9ed8\u8ba4\u9009\u62e9\uff1b\u800c\u5f53 I/O \u8f83\u4e3a\u9891\u7e41\u7684\u65f6\u5019\uff0c\u4e00\u822c\u4f7f\u7528 LOCK \u6216\u8005 C-LOCK\u3002

    \u8868\u73b0\u672c\u8eab\u4f9d\u8d56\u4e8e\u8bf7\u6c42\u7684\u6a21\u5f0f\uff0c\u800c\u8bf7\u6c42\u672c\u8eab\u53c8\u4f9d\u8d56\u4e8e\u6587\u4ef6\u5206\u914d\u7b56\u7565\u3002\u6587\u4ef6\u7cfb\u7edf\u5982\u679c\u6ce8\u91cd\u7a7a\u95f4\u5c40\u90e8\u6027\uff0c\u80fd\u591f\u63d0\u4f9b\u5f88\u597d\u7684\u8868\u73b0\u63d0\u5347\u3002\u2014\u2014xyx \u7684\u7b14\u8bb0

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u975e\u6613\u5931\u6027\u5185\u5b58","title":"\u975e\u6613\u5931\u6027\u5185\u5b58","text":"

    \u867d\u7136\u5b58\u5728\u5176\u5b83\u8bbe\u8ba1\uff0c\u4f46\u662f\u5e76\u4e0d\u5e38\u89c1\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u8ba8\u8bba\u57fa\u4e8e flash NAND die semiconductor \u7684 NVM\u3002\u5982\u679c\u662f disk-like \u7684 NVM \u8bbe\u5907\uff0c\u901a\u5e38\u88ab\u79f0\u4f5c\u56fa\u6001\u786c\u76d8(solid-state disk, SSD)\uff1b\u53c8\u6216\u8005\u662f\u4ee5 USB drive \u7684\u5f62\u5f0f\u88ab\u4f7f\u7528\u3002

    \u7531\u4e8e NVM \u7684\u5de5\u4f5c\u673a\u5236\u662f\u7535\u5b50\u7684\u800c\u975e\u673a\u68b0\u7684\uff0c\u53ef\u4ee5\u60f3\u8c61\uff0cNVM \u5e76\u6ca1\u6709 seek time \u548c rotational latency\uff0c\u6240\u4ee5\u76f8\u6bd4 HDDs \u66f4\u52a0\u53ef\u9760\uff0c\u66f4\u52a0\u5feb\u901f\uff0c\u66f4\u52a0\u5c0f\u5de7\uff0c\u529f\u8017\u4e5f\u66f4\u4f4e\u3002\u4e0d\u8fc7\u5bf9\u5e94\u7684\uff0cNVM \u4e5f\u66f4\u52a0\u6602\u8d35\uff0c\u4e0d\u8fc7\u968f\u7740\u6280\u672f\u7684\u53d1\u5c55\uff0c\u8fd9\u4e00\u52a3\u52bf\u4e5f\u5728\u9010\u6e10\u88ab\u586b\u8865\u3002\u7531\u4e8e\u8fd9\u4e9b\u6027\u8d28\uff0cNVM \u4e5f\u901a\u5e38\u4ee5 cache tier \u7684\u5f62\u5f0f\u88ab\u4f7f\u7528\u3002

    \u540c\u65f6\uff0c\u7531\u4e8e NVM \u672c\u8eab\u7684\u8bfb\u5199\u6548\u7387\u8f83\u9ad8\uff0c\u6240\u4ee5\u541e\u5410\u91cf\u7684\u74f6\u9888\u53ef\u80fd\u53cd\u800c\u5728\u6807\u51c6\u603b\u7ebf\u63a5\u53e3(standard bus interface)\u7684\u4f20\u8f93\u901f\u7387\u4e0a\u3002\u6240\u4ee5\uff0cNVM \u901a\u5e38\u4f1a\u76f4\u63a5\u8fde\u5230\u7cfb\u7edf\u603b\u7ebf(system bus)\uff0c\u4f8b\u5982 PCIeWiki\u3002

    \u56e0\u4e3a NAND semiconductor \u7684\u6027\u8d28\uff0cNVM \u7684\u548c HDDs \u5728\u4f7f\u7528\u903b\u8f91\u4e0a\u6709\u6240\u4e0d\u540c\uff1a

    1. \u867d\u7136 NVM \u652f\u6301\u4ee5 page \u7684\u7c92\u5ea6\uff08\u6bd4 block \u66f4\u5c0f\uff09\u8fdb\u884c\u8bfb\u5199\uff0c\u4f46\u5e76\u4e0d\u652f\u6301\u201c\u6570\u636e\u8986\u76d6\u201d\uff0c\u5373\u5fc5\u987b\u5148\u64e6\u9664\u6570\u636e\u624d\u80fd\u5199\u5165\u6570\u636e\uff0c\u800c\u64e6\u9664\u7684\u5f00\u9500\u76f8\u6bd4\u8bfb\u5199\u53c8\u8981\u5927\u4e00\u4e9b\u3002
    2. \u4e0d\u8fc7\uff0c\u7531\u4e8e NVM \u7531\u82e5\u5e72\u4e2a die \u7ec4\u6210\uff0c\u6240\u4ee5\u53ef\u4ee5\u5e76\u884c\u5730\u8fdb\u884c\u8bfb\u5199\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u63d0\u9ad8\u541e\u5410\u91cf\u3002
    3. \u6b64\u5916\uff0cNAND semiconductor \u5728\u8fdb\u884c\u4e00\u5b9a\u91cf\u7684\u64e6\u9664\u64cd\u4f5c\u4e4b\u540e\u5c31\u4e0d\u518d\u80fd\u5b58\u50a8\u6570\u636e\uff0c\u56e0\u6b64\u5b58\u5728\u4f7f\u7528\u5bff\u547d\u3002

    \u6240\u4ee5\uff0cNVM \u7684\u8bfb\u5199\u63a7\u5236\u7b97\u6cd5\u5e94\u5f53\u4e0e HDDs \u6709\u6240\u4e0d\u540c\uff0c\u4e0d\u8fc7\u8fd9\u901a\u5e38\u7531 NVM controller \u8d1f\u8d23\uff0c\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u65e0\u5173\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u505a\u8ba8\u8bba\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u5b58\u50a8\u4ecb\u8d28\u7ba1\u7406","title":"\u5b58\u50a8\u4ecb\u8d28\u7ba1\u7406","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u683c\u5f0f\u5316--\u5206\u533a--\u5206\u5377","title":"\u683c\u5f0f\u5316 & \u5206\u533a & \u5206\u5377","text":"

    \u5d2d\u65b0\u7684\u5b58\u50a8\u8bbe\u5907\u5728\u88ab\u4f7f\u7528\u4e4b\u524d\u9700\u8981\u7ecf\u8fc7\u4f4e\u7ea7\u683c\u5f0f\u5316(low-level formatting or physical formatting)\uff0c\u4ee5\u5c06\u5176\u5206\u4e3a\u63a7\u5236\u5668\u53ef\u4ee5\u8bfb\u5199\u7684\u6247\u533a\uff0c\u521b\u5efa\u903b\u8f91\u5757\u7684\u6620\u5c04\uff0c\u4ee5\u53ca\u521b\u5efa\u95ea\u5b58\u8f6c\u6362\u5c42(flash translation layer, FTL)Wiki\u3002\u5177\u4f53\u6765\u8bf4\uff0c\u4f4e\u7ea7\u683c\u5f0f\u5316\u7684\u65f6\u5019\u4f1a\u4e3a sectors \u6216 pages \u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u7ed3\u6784\u4fe1\u606f\uff0c\u5c06\u6570\u636e\u5305\u88c5\u4e3a header + data + tail \u7684\u5f62\u5f0f\u3002\u901a\u5e38 header \u548c tail \u4e2d\u4f1a\u5b58\u50a8\u4e00\u4e9b\u5143\u4fe1\u606f\uff0c\u4f8b\u5982\u6247/\u9875\u53f7\u548c\u6821\u9a8c/\u7ea0\u9519\u7801\u3002\u4e00\u4e2a\u6247\u533a\u7684\u5927\u5c0f\u6709\u82e5\u5e72\u53ef\u9009\u7684\u503c\uff0c\u901a\u5e38\u662f 512 B \u6216 4 KB\uff0c\u7531\u4e8e\u6247\u533a\u6570\u91cf\u4e0e header & tail \u5360\u7528\u7684\u7a7a\u95f4\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u6247\u533a\u8d8a\u5927\u4e00\u822c\u610f\u5473\u7740\u7528\u6237\u53ef\u7528\u7a7a\u95f4\u8d8a\u5927\u3002

    \u5728\u5b8c\u6210\u4f4e\u7ea7\u683c\u5f0f\u5316\u540e\uff0c\u8bbe\u5907\u5b9e\u73b0\u4e86\u81ea\u8eab\u7684\u7ed3\u6784\u5316\u7ba1\u7406\uff0c\u4f46\u4e3a\u4e86\u80fd\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\uff0c\u8fd8\u9700\u8981\u5728\u8bbe\u5907\u4e0a\u8bb0\u5f55\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u6240\u9700\u8981\u7684\u6570\u636e\u7ed3\u6784\uff08\u67d3\u4e0a\u64cd\u4f5c\u7cfb\u7edf\u7684\u989c\u8272\uff09\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u5927\u81f4\u5206\u4e3a\u4e09\u6b65\uff1a

    steps

    1. \u5206\u533a(partitioning)\uff1a\u5c06\u8bbe\u5907\u7684\u5b58\u50a8\u7a7a\u95f4\u505a\u5212\u5206\uff0c\u6bcf\u4e00\u4e2a\u90fd\u88ab\u89c6\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684\u5b58\u50a8\u7a7a\u95f4\uff08\u5373\u4e00\u4e2a logical disk\uff09\u3002\u5206\u533a\u4fe1\u606f\u4f1a\u4ee5\u56fa\u5b9a\u7684\u683c\u5f0f\u88ab\u5199\u5165\u5b58\u50a8\u8bbe\u5907\u7684\u56fa\u5b9a\u4f4d\u7f6e\u3002
    2. \u5377\u521b\u5efa\u4e0e\u5377\u7ba1\u7406(volume creating & management)\uff1a\u5377(volume)\u662f\u5305\u542b\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf(file system)\u7684\u5b58\u50a8\u7a7a\u95f41\uff0c\u8fd9\u4e00\u6b65\u4e3b\u8981\u662f\u5bf9\u4e0b\u4e00\u6b65\u505a\u51c6\u5907\uff0c\u5212\u5b9a\u6587\u4ef6\u7cfb\u7edf\u6240\u8986\u76d6\u7684\u8303\u56f4\u3002\u5982\u679c\u76f4\u63a5\u5728\u4e00\u4e2a\u5206\u533a\u91cc\u5b89\u88c5\u6587\u4ef6\u7cfb\u7edf\uff0c\u90a3\u5176\u5b9e\u8fd9\u4e00\u6b65\u5df2\u7ecf\u88ab\u9690\u5f0f\u5730\u5b8c\u6210\uff1b\u4f46\u5982\u679c\u4f7f\u7528\u6bd4\u5982 RAID \u6280\u672f\uff0c\u5c31\u9700\u8981\u663e\u793a\u5730\u505a\u8fd9\u4e00\u6b65\u3002
    3. \u903b\u8f91\u683c\u5f0f\u5316(logical formatting)\uff1a\u5728\u5377\u4e0a\u521b\u5efa\u548c\u521d\u59cb\u5316\u6587\u4ef6\u7cfb\u7edf\u3002

    \u540c\u65f6\uff0c\u5982\u679c\u5f53\u524d\u5206\u533a\u5305\u542b OS \u955c\u50cf\uff0c\u5219\u9700\u8981\u5bf9\u5e94\u521d\u59cb\u5316\u5f15\u5bfc\u5757(boot sector)\u3002

    raw disK

    \u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u5141\u8bb8\u90e8\u5206\u7279\u6b8a\u7a0b\u5e8f\u7ed5\u8fc7\u6587\u4ef6\u7cfb\u7edf\uff0c\u76f4\u63a5\u4f7f\u7528\u4e00\u5927\u5757\u8fde\u7eed\u7684\u903b\u8f91\u5757\uff0c\u8fd9\u79cd\u4e0d\u5305\u542b\u6587\u4ef6\u7cfb\u7edf\u6570\u636e\u7ed3\u6784\u7684\u5b58\u50a8\u7a7a\u95f4\u88ab\u79f0\u4e3a raw disk\uff0c\u5bf9\u8fd9\u79cd\u5b58\u50a8\u7a7a\u95f4\u7684\u8bbf\u95ee\u88ab\u79f0\u4e3a raw I/O\uff0c\u5bf9 raw disk \u7684\u64cd\u4f5c\u4e00\u822c\u66f4\u9ad8\u6548\u4e5f\u66f4\u7cbe\u786e\uff0c\u5b83\u53ef\u4ee5\u88ab\u7528\u6765\u5b9e\u73b0 swap \u7a7a\u95f4\uff0c\u6216\u8005\u662f\u7528\u6765\u5b58\u50a8\u6570\u636e\u5e93\u7684\u6570\u636e\u6587\u4ef6\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u574f\u5757","title":"\u574f\u5757","text":"

    \u524d\u9762\u5df2\u7ecf\u63d0\u5230 NVM \u6709\u4f7f\u7528\u5bff\u547d\uff1b\u4ee5\u53ca\u867d\u7136\u6211\u4eec\u6ca1\u8bf4\uff0c\u4f46\u662f HDDs \u7684\u673a\u68b0\u7ed3\u6784\u4e5f\u5fc5\u7136\u5e26\u6765\u4e0d\u5c0f\u7684\u786c\u4ef6\u635f\u8017\u3002\u6240\u4ee5\uff0c\u5b9e\u9645\u7684\u5b58\u50a8\u8bbe\u5907\u4e2d\u4e0d\u53ef\u907f\u514d\u7684\u4f1a\u51fa\u73b0\u7531\u4e8e\u786c\u4ef6\u635f\u574f\u5bfc\u81f4\u7684\u65e0\u6cd5\u4f7f\u7528\u7684\u5b58\u50a8\u7a7a\u95f4\u3002\u8fd9\u79cd\u65e0\u6cd5\u4f7f\u7528\u7684\u5b58\u50a8\u7a7a\u95f4\u88ab\u79f0\u4e3a\u574f\u5757(bad block)\u3002

    \u521a\u51fa\u5382\u7684\u786c\u76d8\u5c31\u5f88\u53ef\u80fd\u5df2\u7ecf\u5e26\u6709\u4e00\u4e9b bad block\uff0c\u4f46\u901a\u5e38\u4f1a\u5728\u505a low-level formatting \u7684\u65f6\u5019\u505a\u4e00\u4e9b\u5904\u7406\uff0clow-level formatting \u9636\u6bb5\uff0c\u4f1a\u7ef4\u62a4\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u4e0d\u53ef\u89c1\u7684\u5907\u7528\u6247\u533a\uff0c\u4e13\u95e8\u7528\u4e8e\u5c06 bad block \u6620\u5c04\u5230\u8fd9\u4e9b\u53ef\u7528\u5206\u533a\u4e2d\u6765\u4fdd\u8bc1\u903b\u8f91\u7a7a\u95f4\u4e0a\u7684\u8fde\u7eed\u6027\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#raid","title":"RAID","text":"

    \u867d\u7136\u5355\u72ec\u7684\u786c\u76d8\u4fbf\u5b9c\uff0c\u4f46\u662f\u5b83\u4e0d\u53ef\u9760\u800c\u4e14\u901f\u5ea6\u6162\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u4f7f\u7528\u5197\u4f59(redundancy)\u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

    \u72ec\u7acb\u78c1\u76d8\u5197\u4f59\u9635\u5217(redundant array of independent disk, RAID)\u6280\u672f\u5728\u590d\u6570\u78c1\u76d8\u4e0a\u521b\u5efa\u82e5\u5e72\u6570\u636e\u7684\u955c\u50cf\uff0c\u540c\u65f6\u5141\u8bb8\u5728\u591a\u4e2a\u78c1\u76d8\u4e0a\u540c\u65f6\u8fdb\u884c\u6570\u636e\u7684\u8bfb\u53d6\uff08\u5e76\u884c\u5730\u8bfb\u53d6\u6570\u636e\u7684\u4e0d\u540c\u90e8\u5206\uff09\uff0c\u5e76\u91c7\u7528\u7279\u5b9a\u7684\u9519\u8bef\u6821\u9a8c\u7801\u6765\u4fdd\u8bc1\u6570\u636e\u7684\u53ef\u9760\u6027\u3002

    \u6309\u7167\u7ec4\u5408\u7b56\u7565\uff0cRAID \u6280\u672f\u88ab\u5206\u4e3a\u4e0d\u540c\u7684 level\uff0c\u8bfb\u8005\u53ef\u4ee5\u5728\u6b64\u548c\u505a\u8be6\u7ec6\u4e86\u89e3\u3002\u9ad8 level \u7684 RAID \u5bf9\u4f4e level \u7684 RAID \u5e76\u4e0d\u662f\u4e0a\u4f4d\u66ff\u4ee3\u7684\uff0c\u5b83\u4eec\u4e4b\u95f4\u5404\u6709\u4f18\u52a3\uff0c\u9700\u8981\u6309\u9700\u4f7f\u7528\u3002\u8bfb\u8005\u53ef\u4ee5\u5728\u6b64\u6587\u6587\u672b\u505a\u4e86\u89e3\u3002

    1. Volume (computing) | Wikipedia \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/","title":"Unit 6: \u6587\u4ef6\u7cfb\u7edf | File System [\u672a\u5b8c\u6210]","text":"

    \u7ea6 2914 \u4e2a\u5b57 12 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f

    \u5bfc\u8bfb

    \u5728\u5b58\u50a8\u4e00\u7ae0\uff0c\u6211\u4eec\u63d0\u5230\u8fc7\uff0c\u5377(volume)\u505a\u521d\u59cb\u5316\u65f6\uff0c\u9700\u8981\u5efa\u7acb\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u3002\u6587\u4ef6\u7cfb\u7edf\u63d0\u4f9b\u4e86\u6570\u636e\u5b58\u50a8\u5f62\u5f0f\u7684\u903b\u8f91\u89c6\u56fe\uff0c\u5c06\u6570\u636e\u4ee5\u6587\u4ef6(file)\u7684\u5f62\u5f0f\u4ece\u786c\u4ef6\u5b58\u50a8\u4e2d\u62bd\u8c61\u51fa\u6765\uff0c\u5e76\u4f7f\u7528\u76ee\u5f55(directory)\u5bf9\u6587\u4ef6\u8fdb\u884c\u8fdb\u884c\u7ed3\u6784\u5316\u7684\u7ec4\u7ec7\u548c\u7ba1\u7406\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6","title":"\u6587\u4ef6","text":"

    \u4e00\u4e2a\u6587\u4ef6\u662f\u5b58\u50a8\u5728\u4e8c\u7ea7\u4ecb\u8d28\u4e0a\u7684\uff0c\u5177\u540d\u7684\u4e00\u7cfb\u5217\u76f8\u5173\u4fe1\u606f\u96c6\u5408\uff0c\u65e0\u8bba\u662f\u7528\u6237\u8fd8\u662f\u7a0b\u5e8f\uff0c\u90fd\u9700\u8981\u901a\u8fc7\u6587\u4ef6\u6765\u4e0e\u4e8c\u7ea7\u4ecb\u8d28\u8fdb\u884c\u4fe1\u606f\u4ea4\u6362\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u5c5e\u6027","title":"\u6587\u4ef6\u5c5e\u6027","text":"

    \u4e0d\u540c\u7684\u6587\u4ef6\u7cfb\u7edf\u4e0b\uff0c\u6587\u4ef6\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u5c5e\u6027\uff0c\u4f46\u901a\u5e38\u6709\u4ee5\u4e0b\u51e0\u4e2a\uff08\u5f53\u7136\u8fd8\u6709\u5176\u5b83\u7684\uff09\uff1a

    \u8fd9\u4e9b\u4fe1\u606f\u4e5f\u88ab\u79f0\u4e3a\u6587\u4ef6\u7684\u5143\u6570\u636e(meta data)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u64cd\u4f5c","title":"\u6587\u4ef6\u64cd\u4f5c","text":"

    \u64cd\u4f5c\u7cfb\u7edf\u53ef\u4ee5\u63d0\u4f9b\u76f8\u5173\u7684\u7cfb\u7edf\u8c03\u7528\u6765\u5b8c\u6210\u4e00\u4e9b\u57fa\u672c\u7684\u6587\u4ef6\u64cd\u4f5c\uff0c\u4f8b\u5982\uff1a

    \u5728 C \u7684\u6587\u4ef6\u64cd\u4f5c\u51fd\u6570\u4e2d\uff0c\u4f60\u90fd\u80fd\u770b\u5230\u7c7b\u4f3c\u7684\u64cd\u4f5c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6743\u9650\u4fdd\u62a4","title":"\u6743\u9650\u4fdd\u62a4","text":"

    \u4e0d\u540c\u7684\u6587\u4ef6\u64cd\u4f5c\u5bf9\u5e94\u7740\u4e0d\u540c\u7684\u6743\u9650\u3002

    \u7406\u8bba\u4e0a\uff0c\u6587\u4ef6\u7684\u6240\u5c5e\u8005\u5e94\u5f53\u80fd\u591f\u51b3\u5b9a\u80fd\u5bf9\u6587\u4ef6\u505a\u4ec0\u4e48\u64cd\u4f5c\uff0c\u4ee5\u53ca\u8c01\u5177\u6709\u8fd9\u4e9b\u6743\u9650\uff0c\u8fd9\u4e2a\u6743\u9650\u901a\u8fc7\u8bbf\u95ee\u63a7\u5236\u5217\u8868(access control list, ACL)\u6765\u7ef4\u62a4\u7528\u6237\u4eec\u5bf9\u6587\u4ef6\u6240\u5177\u6709\u7684\u6743\u9650\u3002\u4f46\u662f\u8fd9\u4e48\u505a\u7684\u574f\u5904\u662f\uff0c\u6784\u5efa ACL \u6027\u4ef7\u6bd4\u4f4e\uff0c\u800c\u4e14\u539f\u5148\u56fa\u5b9a\u957f\u7684\u8868\u9879\u53ef\u80fd\u4e0d\u5b9a\u957f\u4e86\u3002

    \u56e0\u6b64\uff0c\u53ef\u4ee5\u7cbe\u7b80\u5316\u8fd9\u4e2a\u5217\u8868\u3002\u4f8b\u5982\uff0cUnix \u548c Linux \u7cfb\u7edf\u91c7\u7528\u4e86\u8bbf\u95ee\u6743\u9650\u4f4d(access permission bits)\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u6743\u9650\u63a7\u5236\uff1a

    \ud83c\udf30

    \u5728 Linux \u4e2d\uff0c\u6211\u4eec\u4f7f\u7528 ls -l \u5c31\u53ef\u4ee5\u770b\u5230\u5f53\u524d\u76ee\u5f55\u4e0b\u6587\u4ef6\u7684\u6743\u9650\u3002

    $ ls -l\ntotal 72\n-rw-r--r--   1 isshikih  staff  18658 Oct 18 23:51 LICENSE\n-rw-r--r--   1 isshikih  staff   1778 Dec 18 10:27 README.md\nlrwxr-xr-x   1 isshikih  staff     18 Nov 21  2022 _deploy.sh@ -> scripts/_deploy.sh\nlrwxr-xr-x   1 isshikih  staff     16 Nov 21  2022 _sync.sh@ -> scripts/_sync.sh\ndrwxr-xr-x  14 isshikih  staff    448 Oct 29 22:53 docs/\ndrwxr-xr-x  33 isshikih  staff   1056 Nov  3  2022 mkdocs-material/\n-rw-r--r--@  1 isshikih  staff  10937 Dec 21 10:01 mkdocs.yaml\ndrwxr-xr-x   3 isshikih  staff     96 Nov  2  2022 overrides/\ndrwxr-xr-x   5 isshikih  staff    160 Oct 10 15:39 scripts/\ndrwxr-xr-x  19 isshikih  staff    608 Dec 20 21:39 site/\n

    \u7b2c\u4e00\u5217\u4e2d\u6709 10 \u4e2a\u5b57\u7b26\uff0c\u5176\u542b\u4e49\u5982\u4e0b\uff1a

    A \"d\" indicates a directory. The second set of three characters represent the read, write, and execution rights of the file's owner. The next three represent the rights of the file's group, and the final three represent the rights granted to everybody else. We'll discuss this in more detail in a later lesson.3

    \u540e 9 \u4e2a\u5b57\u7b26\u5c06\u6743\u9650\u88ab\u5206\u4e3a\u4e09\u7ec4\uff0c\u5206\u522b\u4ee3\u8868\u6587\u4ef6\u6240\u6709\u8005(owner)\u3001\u6587\u4ef6\u6240\u5c5e\u7ec4(group)\u3001\u5176\u4ed6\u4eba(other)\u7684\u8bfb(r)\u3001\u5199(w)\u3001\u6267\u884c(x)\u6743\u9650\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7c7b\u578b","title":"\u6587\u4ef6\u7c7b\u578b","text":"

    \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u6765\u6240\uff0c\u6587\u4ef6\u4e3b\u8981\u5206\u4e3a\u6570\u636e(data)\u548c\u7a0b\u5e8f(program)\u4e24\u5927\u7c7b\u3002\u800c\u5bf9\u7528\u6237\u6765\u8bf4\uff0c\u6211\u4eec\u901a\u5e38\u4f1a\u8ba4\u4e3a\u540e\u7f00\u6269\u5c55(extension)\u6807\u8bc6\u4e86\u4e00\u4e2a\u6587\u4ef6\u7684\u7c7b\u578b\u3002\u4f8b\u5982\u6211\u4eec\u4f1a\u8ba4\u4e3a sketch.psd \u662f Photoshop \u7684\u5de5\u7a0b\u6587\u4ef6\uff0cimg.png \u662f\u4e00\u4e2a\u56fe\u7247\u6587\u4ef6\uff0cmain.exe \u662f\u4e00\u4e2a\u53ef\u6267\u884c\u6587\u4ef6\u3002\u4f46\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u540e\u7f00\u6269\u5c55\u66f4\u591a\u7684\u53ea\u662f\u4e00\u79cd\u201c\u63d0\u793a\u201d\uff0c\u53ea\u662f\u7528\u6765\u5e2e\u52a9\u7cfb\u7edf\u9009\u62e9\u5408\u9002\u7684\u65b9\u5f0f\u6765\u6253\u5f00\u6587\u4ef6\uff0c\u800c\u4e0d\u662f\u51b3\u5b9a\u6587\u4ef6\u7684\u7c7b\u578b\uff0c\u662f\u5426\u8981\u53c2\u8003\u540e\u7f00\u540d\uff0c\u5e94\u5f53\u7531\u5f00\u53d1\u8005\u6765\u51b3\u5b9a\u3002

    UNIX \u7cfb\u7edf\u4f1a\u5728\u6587\u4ef6\u5f00\u5934\uff0c\u4f7f\u7528\u4e00\u4e32 magic number \u6765\u6807\u8bc6\u6587\u4ef6\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\u56fe\u7247\u6587\u4ef6\u7684\u5f00\u5934\u901a\u5e38\u662f 0xFFD81\uff0c\u811a\u672c\u6587\u672c\u6587\u4ef6\u5f00\u5934\u4f1a\u4ee5\u7c7b\u4f3c #!bash \u7684\u5f62\u5f0f\u6765\u6307\u5b9a\u7531\u8c01\u6765\u6267\u884c\uff08\u4f8b\u5982\u8fd9\u4e2a\u662f\u7528 bash \u6267\u884c\uff09\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u5e76\u975e\u6240\u6709\u6587\u4ef6\u90fd\u652f\u6301 magic number\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4ec5\u4ec5\u7528 magic number \u6765\u5b9e\u73b0\u6587\u4ef6\u7c7b\u578b\u7684\u5224\u65ad\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7ed3\u6784","title":"\u6587\u4ef6\u7ed3\u6784","text":"

    \u6587\u4ef6\u7ed3\u6784\u6307\u7684\u662f\u6587\u4ef6\u6570\u636e\u5b58\u50a8\u7684\u5f62\u5f0f\uff0c\u7531\u64cd\u4f5c\u7cfb\u7edf\u6216\u7528\u6237\u7a0b\u5e8f\u51b3\u5b9a\u3002\u5e38\u89c1\u7684\u6587\u4ef6\u7ed3\u6784\u6709\uff1a

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u8bbf\u95ee\u65b9\u5f0f","title":"\u8bbf\u95ee\u65b9\u5f0f","text":"

    \u8bbf\u95ee\u65b9\u5f0f\u5373\u6570\u636e\u7684\u5b58\u53d6\u65b9\u5f0f\uff0c\u6700\u7b80\u5355\u4e5f\u6700\u5e38\u89c1\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f\u987a\u5e8f\u8bbf\u95ee(sequential access)\uff0c\u5373\u50cf\u78c1\u5e26\u90a3\u6837\uff0c\u9010 byte \u6216\u8005\u9010 record \u5730\u8bbf\u95ee\u3002

    \u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u76f4\u63a5\u8bbf\u95ee(direct access)\u6216\u76f8\u5bf9\u8bbf\u95ee(relative access)/\u968f\u673a\u8bbf\u95ee(random access)\uff0c\u5373\u652f\u6301\u4ee5\u51e0\u4e4e\u76f8\u540c\u7684\u65f6\u95f4\u8bbf\u95ee\u4efb\u610f\u4f4d\u7f6e\u3002

    \u5728\u76f4\u63a5\u8bbf\u95ee\u7684\u65b9\u6cd5\u4e4b\u4e0a\uff0c\u8fd8\u6709\u53ef\u80fd\u63d0\u4f9b\u7d22\u5f15\uff0c\u5373\u5148\u901a\u8fc7\u7d22\u5f15\u8868\u5f97\u77e5\u6240\u9700\u8bbf\u95ee\u7684\u5185\u5bb9\u5728\u54ea\u91cc\uff0c\u7136\u540e\u53bb\u8bbf\u95ee\u3002\u5728\u6b64\u4e4b\u4e0a\u8fd8\u6709\u4e00\u79cd\u7d22\u5f15\u987a\u5e8f\u8bbf\u95ee(indexed sequential-access)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u76ee\u5f55\u7ed3\u6784","title":"\u76ee\u5f55\u7ed3\u6784","text":"

    \u76ee\u5f55\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u7279\u6b8a\u7684\u6587\u4ef6\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u76ee\u5f55\u4e0b\u6587\u4ef6\u7684\u5143\u4fe1\u606f\u662f\u88ab\u5b58\u50a8\u5728\u76ee\u5f55\u4e2d\u7684\u3002\u76ee\u5f55\u7684\u7ed3\u6784\u8868\u793a\u7684\u662f\u76ee\u5f55\u4e0b\u6587\u4ef6\u7684\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u76ee\u5f55\u7ed3\u6784\u7684\u8bbe\u8ba1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5355\u7ea7\u76ee\u5f55","title":"\u5355\u7ea7\u76ee\u5f55","text":"

    \u6700\u539f\u59cb\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4e0d\u5b58\u5728\u5206\u7ec4\u7b56\u7565\uff0c\u6240\u6709\u7684\u6587\u4ef6\u90fd\u88ab\u94fa\u5728\u6839\u76ee\u5f55\u4e0b\u3002

    Single-level directory.

    disadvantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u4e8c\u7ea7\u76ee\u5f55","title":"\u4e8c\u7ea7\u76ee\u5f55","text":"

    \u7279\u6307\u4ee5\u7528\u6237\u4e3a\u4f9d\u636e\uff0c\u5c06\u6587\u4ef6\u5206\u7ec4\u3002\u5373\u4e3b\u6587\u4ef6\u76ee\u5f55(master file directory, MFD)\u4e0b\u4e3a\u6bcf\u4e2a\u7528\u6237\u5206\u914d\u4e00\u4e2a\u7528\u6237\u6587\u4ef6\u76ee\u5f55(user file directory, UFD)\uff0c\u6bcf\u4e2a\u7528\u6237\u7684\u76ee\u5f55\u4e0b\u518d\u5b58\u653e\u8be5\u7528\u6237\u7684\u6587\u4ef6\u3002

    Two-level directory structure.

    \u7531\u4e8e\u51fa\u73b0\u4e86\u5206\u5c42\u7ed3\u6784\uff0c\u6240\u4ee5\u5bf9\u6587\u4ef6\u7684\u7d22\u5f15\u4ece\u4f9d\u8d56\u6587\u4ef6\u540d\u8f6c\u4e3a\u4f9d\u8d56\u6587\u4ef6\u8def\u5f84(path)\u3002

    advantages

    disadvantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6811\u5f62\u76ee\u5f55","title":"\u6811\u5f62\u76ee\u5f55","text":"

    \u6811\u5f62\u76ee\u5f55(tree-structured directories)\u5c06\u76ee\u5f55\u89c6\u4e3a\u4e00\u79cd\u7279\u6b8a\u6587\u4ef6\uff0c\u5373\u5c06\u201c\u76ee\u5f55\u201d\u7684\u6982\u5ff5\u901a\u7528\u5316\uff0c\u4e8e\u662f\u5141\u8bb8\u7528\u6237\u5728\u76ee\u5f55\u4e0b\u81ea\u7531\u5730\u521b\u5efa\u76ee\u5f55\u8fdb\u884c\u5206\u7ec4\uff0c\u4e8e\u662f\u603b\u4f53\u6587\u4ef6\u7ed3\u6784\u6210\u4e3a\u4e00\u79cd\u6811\u5f62\u7ed3\u6784\u3002

    Tree-structured directory structure.

    \u6587\u4ef6\u90fd\u76f8\u5f53\u4e8e\u6811\u4e0a\u7684\u4e00\u4e2a\u8282\u70b9\uff0c\u975e\u76ee\u5f55\u8282\u70b9\u90fd\u662f\u53f6\u5b50\u8282\u70b9\uff0c\u76ee\u5f55\u8282\u70b9\u90fd\u662f\u975e\u53f6\u5b50\u8282\u70b9\uff08\u4e0d\u8003\u8651\u7a7a\u76ee\u5f55\uff09\u3002\u4e3a\u4e86\u5728\u8fd9\u79cd\u7ed3\u6784\u4e0b\u627e\u5230\u552f\u4e00\u786e\u5b9a\u7684\u90a3\u4e2a\u6587\u4ef6\uff0c\u6211\u4eec\u9700\u8981\u63d0\u4f9b\u6587\u4ef6\u7684\u8def\u5f84(path)\uff0c\u5206\u4e3a\u7edd\u5bf9\u8def\u5f84(absolute path)\u548c\u76f8\u5bf9\u8def\u5f84(relative path)\u4e24\u79cd\u3002

    \u8fd9\u4e1c\u897f\u592a\u7b80\u5355\u4e86\uff0c\u53ea\u8981\u6709 Linux \u5b9e\u8df5\u7ecf\u5386\u5c31\u80af\u5b9a\u641e\u5f97\u660e\u767d\uff0c\u6240\u4ee5\u6211\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002\u6ca1\u6709 Linux \u5b9e\u8df5\u7ecf\u5386\u5efa\u8bae\u5148\u6709 Linux \u5b9e\u8df5\u7ecf\u5386\u3002

    advantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u65e0\u73af\u56fe\u76ee\u5f55","title":"\u65e0\u73af\u56fe\u76ee\u5f55","text":"

    \u65e0\u73af\u56fe\u76ee\u5f55(acyclic-graph directories)\u662f\u5728\u6811\u5f62\u76ee\u5f55\u7684\u57fa\u7840\u4e0a\uff0c\u5141\u8bb8\u76ee\u5f55\u4e4b\u95f4\u5b58\u5728\u94fe\u63a5\u5173\u7cfb\uff0c\u94fe\u63a5\u5206\u4e3a\u8f6f\u94fe\u63a5(soft link)\u548c\u786c\u94fe\u63a5(hard link)\u4e24\u79cd\u3002

    Acyclic-graph directory structure.

    soft link

    \u8f6f\u94fe\u63a5\u53c8\u79f0\u7b26\u53f7\u94fe\u63a5(symbolic link)\uff0c\u662f\u4e00\u4e2a\u6307\u5411\u6587\u4ef6\u7684\u6307\u9488\uff0c\u7c7b\u4f3c\u4e8e Windows \u4e0b\u7684\u5feb\u6377\u65b9\u5f0f\u3002

    \u5220\u9664\u88ab\u8f6f\u94fe\u63a5\u6307\u5411\u7684\u90a3\u4e2a\u6587\u4ef6\u5e76\u4e0d\u4f1a\u8fde\u5e26\u5730\u5904\u7406\u8f6f\u94fe\u63a5\uff0c\u4f46\u662f\u539f\u5148\u7684\u8fd9\u4e2a\u8f6f\u94fe\u63a5\u5df2\u7ecf\u5931\u6548\u4e86\u3002

    \u4ece\u672c\u8d28\u4e0a\u6765\u770b\uff0c\u8f6f\u94fe\u63a5\u662f\u7279\u6b8a\u7684\u6587\u4ef6\u3002

    hard link

    \u786c\u94fe\u63a5\u662f\u590d\u5236\u94fe\u63a5\u6587\u4ef6\u76ee\u5f55\u9879\u7684\u6240\u6709\u5143\u4fe1\u606f\uff0c\u5b58\u5230\u76ee\u6807\u76ee\u5f55\u4e2d\uff0c\u6b64\u65f6\u6587\u4ef6\u5e73\u7b49\u5730\u5c5e\u4e8e\u4e24\u4e2a\u76ee\u5f55\u3002

    \u7531\u4e8e\u6b64\u65f6\u6587\u4ef6\u7b49\u4ef7\u5730\u5c5e\u4e8e\u590d\u6570\u4e2a\u76ee\u5f55\uff0c\u6240\u4ee5\u5728\u6587\u4ef6\u5143\u4fe1\u606f\u88ab\u66f4\u65b0\u65f6\uff0c\u9700\u8981\u4fdd\u8bc1\u5728\u82e5\u5e72\u76ee\u5f55\u4e0b\u8be5\u6587\u4ef6\u7684\u4fe1\u606f\u662f\u4e00\u81f4\u7684\u3002

    \u5220\u9664\u88ab\u786c\u94fe\u63a5\u7684\u6587\u4ef6\u5e76\u4e0d\u4f1a\u76f4\u63a5\u5bfc\u81f4\u6587\u4ef6\u88ab\u5220\u9664\uff0c\u53ea\u6709\u5f53\u7528\u6765\u8bb0\u5f55\u300c\u88ab\u786c\u94fe\u63a5\u6570\u91cf\u300d\u7684 reference counter \u88ab\u51cf\u81f3 0\uff0c\u5373\u4e0d\u518d\u6709\u5176\u4ed6\u786c\u94fe\u63a5\u6307\u5411\u8be5\u6587\u4ef6\u65f6\uff0c\u6587\u4ef6\u624d\u4f1a\u88ab\u5220\u9664\uff1b\u5176\u4ed6\u60c5\u51b5\u4e0b\u90fd\u53ea\u9700\u8981\u5728\u5f53\u524d\u76ee\u5f55\u4e2d\u5220\u9664\u8be5\u8868\u9879\uff0c\u5e76\u5c06 reference counter \u51cf 1\uff0c\u66f4\u65b0\u76f8\u5173\u5143\u4fe1\u606f\u5373\u53ef\u3002

    \u4ece\u672c\u8d28\u4e0a\u6765\u770b\uff0c\u786c\u94fe\u63a5\u662f\u76ee\u5f55\u8868\u9879\u3002

    \u5728\u65e0\u73af\u56fe\u76ee\u5f55(acyclic-graph directories)\u4e2d\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u65e0\u73af\uff0c\u6211\u4eec\u53ea\u5141\u8bb8\u521b\u5efa\u5173\u4e8e\u6587\u4ef6\u8fd9\u79cd\u53f6\u5b50\u8282\u70b9\u7684\u786c\u94fe\u63a52\u3002\u4e0d\u8fc7\u8fd9\u4e2a\u8bf4\u6cd5\u5b58\u5728\u4e00\u4e2a\u4f8b\u5916\uff0c\u6211\u4eec\u90fd\u77e5\u9053\u901a\u5e38\u5728\u4efb\u610f\u8def\u5f84\u90fd\u4f1a\u6709 . \u548c .. \u8fd9\u4e24\u4e2a\u7279\u6b8a\u76ee\u5f55\uff0c\u5b83\u4eec\u901a\u8fc7\u786c\u94fe\u63a5\u5206\u522b\u6307\u5411\u5f53\u524d\u76ee\u5f55\u548c\u7236\u76ee\u5f55\uff08\u6839\u76ee\u5f55\u7684\u7236\u76ee\u5f55\u4e5f\u662f\u6839\u76ee\u5f55\uff09\u3002

    \u6b64\u5916\uff0c\u7531\u4e8e\u786c\u94fe\u63a5\u672c\u8d28\u4e0a\u662f\u8868\u9879\uff0c\u800c\u8868\u9879\u4e0e\u6587\u4ef6\u7cfb\u7edf\u76f8\u5173\uff0c\u6240\u4ee5\u786c\u94fe\u63a5\u53ea\u80fd\u5728\u540c\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u4e0b\u521b\u5efa\uff0c\u65e0\u6cd5\u8de8\u8d8a file-system boundary\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u901a\u7528\u56fe\u76ee\u5f55","title":"\u901a\u7528\u56fe\u76ee\u5f55","text":"

    \u65e0\u73af\u56fe\u76ee\u5f55\u901a\u8fc7\u4fdd\u8bc1\u4e0d\u5b58\u5728\u73af\u6765\u4fdd\u8bc1\u6587\u4ef6\u7cfb\u7edf\u7684\u7b80\u4ecb\u6027\uff0c\u907f\u514d\u904d\u5386\u76ee\u5f55\u65f6\u5019\u51fa\u73b0\u6b7b\u5faa\u73af\u6216\u8005\u5220\u9664\u6587\u4ef6\u65f6\u51fa\u73b0\u7684\u5faa\u73af\u4f9d\u8d56\u7b49\u95ee\u9898\u3002

    \u800c\u901a\u7528\u56fe\u76ee\u5f55(general-graph directories)\u5219\u5141\u8bb8\u76ee\u5f55\u4e4b\u95f4\u5b58\u5728\u73af\uff0c\u4f46\u662f\u5728\u5404\u79cd\u64cd\u4f5c\u65f6\uff0c\u901a\u8fc7\u7b97\u6cd5\u6765\u907f\u514d\u51fa\u73b0\u95ee\u9898\uff0c\u4f8b\u5982\u90e8\u5206\u80fd\u5904\u7406\u73af\u7684\u56fe\u904d\u5386\u7b97\u6cd5\u3001\u5783\u573e\u56de\u6536\u673a\u5236\u7b49\u3002

    General graph directory.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d","title":"\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d","text":"

    \u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d(mount)\u662f\u6307\u5c06\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u7684\u6839\u76ee\u5f55\u6302\u8f7d\u5230\u53e6\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u7684\u67d0\u4e2a\u76ee\u5f55\uff08\u88ab\u79f0\u4e3a mount point\uff09\uff0c\u4f7f\u5f97\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u53ef\u4ee5\u8bbf\u95ee\u5230\u88ab\u6302\u8f7d\u7684\u6587\u4ef6\u7cfb\u7edf\u4e2d\u7684\u6587\u4ef6\u3002\u53ea\u6709\u88ab\u6302\u8f7d\u4e86\uff0c\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u624d\u80fd\u88ab\u8bbf\u95ee\u3002

    Volume mounted at /users.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u7ed3\u6784","title":"\u6587\u4ef6\u7cfb\u7edf\u7ed3\u6784","text":"
    1. ISO/IEC 10918-1: 1993(E) p.36\uff0c\u5176\u4e2d SOI (Start Of Image) \u7684\u503c\u4e3a 0xFFD8\u3002\u00a0\u21a9

    2. Why are hard links not allowed for directories? \u21a9

    3. File Permissions \u21a9

    "},{"location":"others/","title":"\u6249\u9875","text":"

    \u7ea6 21 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u6211\u4e0d\u80fd\u4e00\u76f4\u5728\u4f60\u8eab\u8fb9\u5e2e\u52a9\u4f60\u3002 \u2014\u2014\u67e5\u7406\u00b7\u5e03\u6717

    "},{"location":"others/tools/","title":"\u5de5\u5177\u6536\u96c6","text":"

    \u7ea6 46 \u4e2a\u5b57

    "},{"location":"others/reveal-md2Slides/","title":"\u4f7f\u7528 reveal-md \u6765\u5199 Slides","text":"

    \u7ea6 4169 \u4e2a\u5b57 151 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \u5206\u949f

    \u524d\u8a00

    "},{"location":"others/reveal-md2Slides/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

    reveal-md \u662f reveal.js \u7684\u4e00\u4e2a\u6269\u5c55\u5de5\u5177\uff0c\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9884\u7f16\u8bd1\u5de5\u5177\u3002\u5229\u7528 reveal-md\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u4e00\u4e2a Markdown \u6587\u4ef6\u6765\u5feb\u901f\u7b80\u4fbf\u5730\u751f\u6210\u4e00\u4e2a\u57fa\u4e8e\u7f51\u9875\u7684 Slides\uff0c\u4f60\u4e5f\u53ef\u4ee5\u5c06\u5b83\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u5e76\u90e8\u7f72\u5728\u7c7b\u4f3c github pages \u7b49\u5e73\u53f0\u6765\u5206\u4eab\u9759\u6001\u9875\u9762\u3002

    "},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528-ppt-\u548c\u8bed\u96c0\u6587\u6863\u6f14\u793a\u6a21\u5f0f","title":"\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528 PPT \u548c\u8bed\u96c0\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d","text":"

    \u5728\u8fd9\u7bc7\u6587\u7ae0\u548c\u8bed\u5883\u4e2d\uff0c\u6211\u60f3\u5927\u6982\u5c06\u300c\u6f14\u793a\u300d\u6240\u4f7f\u7528\u7684\u5f62\u5f0f\u5206\u4e3a\u4e09\u79cd\uff1a

    \u6070\u597d\uff0c\u8bed\u96c0\u63a8\u51fa\u6f14\u793a\u6587\u7a3f\u7684\u65f6\u5019\u6709\u8bf4\u660e\u4e3a\u4ec0\u4e48\u4ed6\u4eec\u8981\u5f00\u53d1\u8fd9\u6837\u4e00\u4e2a\u4e1c\u897f\u3002

    \u518d\u89c1PPT\uff0c\u4f60\u597d\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d

    \u6211\u975e\u5e38\u8d5e\u540c\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u5bf9\u4e8e PPT \u7684\u53d9\u8ff0\uff0c\u6211\u4e5f\u5f88\u8ba8\u538c PPT \uff0c\u5b83\u786e\u5b9e\u53ef\u4ee5\u505a\u5f88\u591a\u4e8b\uff0c\u4f46\u662f\u5bf9\u6211\u6765\u8bf4\u6ca1\u5fc5\u8981\uff0c\u6211\u4e5f\u7528\u4e0d\u5230\u3002\u800c\u4e14\u8eab\u4e3a\u7834\u5199\u4ee3\u7801\u7684\uff0c\u6211\u5bf9\u90a3\u79cd\u6240\u8c13\u7684\u9ad8\u7ea7\u611f\u5e76\u6ca1\u6709\u4ec0\u4e48\u611f\u89c9\u3002\u800c\u4e14 PPT \u6709\u4e00\u4e2a\u81f4\u547d\u7684\u7f3a\u70b9\u5c31\u662f\u5b83\u7684\u5206\u4eab\u975e\u5e38\u4e0d\u65b9\u4fbf\uff0c\u4f60\u5fc5\u987b\u8981\u901a\u8fc7\u300c\u6587\u4ef6\u300d\u6765\u4f20\u9012\u4f60\u7684\u6750\u6599\uff0c\u800c\u4e14\u8fd8\u6536\u5230\u5c55\u793a\u8bbe\u5907\u7684\u73af\u5883\u9650\u5236\uff0c\u800c\u5176\u4ed6\u4e24\u79cd\u65b9\u6cd5\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u56de\u5230\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bda\u7136\uff0c\u5728\u67d0\u4e9b\u7279\u5b9a\u7684\u65f6\u95f4\uff0c\u6587\u6863\u6f14\u793a\u786e\u5b9e\u80fd\u4fbf\u6377\u7684\u89e3\u51b3\u8bb8\u591a\u95ee\u9898\uff0c\u4f46\u662f\u6211\u4e0d\u89c9\u5f97\u76ee\u524d\u7684\u6587\u7a3f\u6f14\u793a\u80fd\u6210\u4e3a Slides \u7684\u66ff\u4ee3\u54c1\u3002\u5b83\u786e\u5b9e\u4fbf\u6377\u4e14\u9ad8\u6548\uff0c\u4f46\u662f\u5e76\u4e0d\u597d\u770b\uff0c\u4e5f\u5e76\u4e0d\u6e05\u6670\u2014\u2014\u800c\u4e14\u8bf4\u56de\u6765\uff0c\u5176\u5b9e\u4e5f\u4e0d\u65b9\u4fbf\uff08\u4e3a\u4ec0\u4e48\u6211\u4e4b\u540e\u4f1a\u8bb2\uff09\u3002 \u7b80\u5355\u8bb2\u4e86\u4e00\u4e0b\u6211\u5bf9\u5176\u4ed6\u4e24\u79cd\u9014\u5f84\u7684\u770b\u6cd5\uff0c\u5173\u4e8e\u901a\u8fc7\u4ee3\u7801\u9014\u5f84\u7f16\u5199\u300c\u6f14\u793a\u300d\u6587\u6863\u6211\u5f53\u7136\u4e5f\u6709\u8bdd\u8bf4\uff0c\u4f46\u662f\u6211\u60f3\u628a\u4ed6\u4eec\u653e\u5728\u540e\u9762\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u60f3\u4ece\u300c\u4f7f\u7528\u4f53\u9a8c\u300d\u7684\u89d2\u5ea6\u6765\u8bc4\u4ef7\u4e00\u4e0b\u4e0a\u9762\u5df2\u7ecf\u63d0\u8fc7\u7684\u4e24\u4e2a\u9014\u5f84\u3002

    \u5728\u6211\u770b\u6765\uff0cPPT \u4e4b\u6240\u4ee5\u7d2f\u8d58\u4e14\u4f4e\u6548\uff0c\u662f\u56e0\u4e3a\u5927\u90e8\u5206\u4eba\u6d6a\u8d39\u65f6\u95f4\u5728\u4e8e\u4e0e\u6838\u5fc3\u5185\u5bb9\u5e76\u4e0d\u76f4\u63a5\u76f8\u5173\u7684\u7f8e\u5de5\u4e0a\u3002\u800c\u4ece\u5de5\u4f5c\u6d41\u7a0b\u4e0a\u6765\u8bb2\uff0c\u9664\u975e\u6211\u7cbe\u901a PPT \u4e14\u6709\u65f6\u95f4\uff0c\u5426\u5219\u6211\u4e0d\u4f1a\u4eb2\u81ea\u53bb\u505a PPT\uff0c\u800c\u662f\u548c\u7f8e\u5de5\u5bf9\u63a5\uff0c\u8ba9\u4ed6\u4eec\u6765\u505a\u3002\u53ef\u8fd9\u6837\u4e00\u6765\u95ee\u9898\u5c31\u51fa\u73b0\u4e86\uff0c\u201c\u5bf9\u63a5\u201d\u8fd9\u4ef6\u4e8b\u672a\u5fc5\u6bd4\u505a PPT \u8f7b\u677e\u3002\u53c8\u6216\u8005\u6211\u8fd9\u4e2a PPT \u662f\u6211\u81ea\u5df1\u9700\u8981\u7684\uff0c\u90a3\u6211\u5c31\u5f97\u786c\u7740\u5934\u76ae\u82b1\u8d39\u65f6\u95f4\u53bb\u94bb\u7814\u5982\u4f55\u505a\u4e00\u4e2a\u597d\u770b\u7684 PPT\uff0c\u7ed3\u679c\u6d6a\u8d39\u5927\u628a\u65f6\u95f4\u505a\u51fa\u6765\u7684\u53ef\u80fd\u8fd8\u662f\u4e2a\u8fde\u6cb9\u817b\u90fd\u8bf4\u4e0d\u4e0a\u7684\u4e1c\u897f\u3002

    \u800c\u56de\u5230\u8bed\u96c0\u7684\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bf4\u6765\u53ef\u7b11\uff0c\u6211\u5199\u8fd9\u4e00\u884c\u7684\u65f6\u5019\u5c31\u53c8\u51fa\u4e86 bug\u3002\u8bda\u7136\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\u662f\u4e00\u4e2a\u5f88\u597d\u7684 Idea\uff0c\u4f46\u662f\u8bed\u96c0\u81ea\u8eab\u5927\u5927\u5c0f\u5c0f\u7684\u95ee\u9898\u5230\u5904\u90fd\u662f\uff0c\u672c\u6765\u4f5c\u4e3a\u4e00\u4e2a\u6548\u7387\u5de5\u5177\u5374\u603b\u662f\u5728\u610f\u6599\u4e4b\u5916\u7684\u5730\u65b9\u9047\u5230\u5f88\u7cdf\u5fc3\u7684 Bug \uff0c\u8fd9\u7740\u5b9e\u5f88\u5f71\u54cd\u6548\u7387\uff08\u5173\u4e8e\u8fd9\u65b9\u9762\u7684\u5410\u69fd\u6211\u5c31\u4e0d\u653e\u5728\u8fd9\u91cc\u8bf4\u4e86\uff0c\u4ee5\u9632\u504f\u9898\uff09\u3002

    \u5728\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\u4e0b\uff0c\u51fa\u73b0\u4e86\u95ee\u9898\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\uff0c\u6216\u8005\u8bf4\u5feb\u901f\u6392\u67e5\uff0c\u6216\u8005\u8bf4\u662f\u9000\u800c\u6c42\u5176\u6b21\u5bfb\u627e\u522b\u7684\u5b9e\u73b0\u529e\u6cd5\uff0c\u90fd\u662f\u4e0d\u65b9\u4fbf\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u8fd9\u4e2a\u529f\u80fd\u81ea\u8eab\u7684\u7a33\u5b9a\u6027\u5c31\u4e0d\u80fd\u4fdd\u8bc1\uff0c\u800c\u5176\u5b9e\u73b0\u5bf9\u4f7f\u7528\u8005\u6765\u8bf4\u4e5f\u5e76\u4e0d\u8db3\u591f\u7b80\u5355\u900f\u660e\uff0c\u5bfc\u81f4\u4f7f\u7528\u8d77\u6765\u4f1a\u9700\u8981\u627f\u62c5\u5f88\u591a\u4e0d\u786e\u5b9a\u7684\u98ce\u9669\u3002\uff08\u987a\u4fbf\u5410\u69fd\u4e00\u53e5\uff0c\u4f7f\u7528\u8bed\u96c0\u7684\u8fd9\u4e00\u5e74\u6211\u4f53\u611f\u4e0a\u5f71\u54cd\u4f53\u9a8c\u7684 Bug \u662f\u8d8a\u6765\u8d8a\u591a\u4e86\u2026\u2026\uff09

    "},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u7528-reveal","title":"\u4e3a\u4ec0\u4e48\u6211\u7528 reveal*","text":"

    \u90a3\u4e48\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5236\u4f5c\u300c\u6f14\u793a\u300d\u6750\u6599\u53c8\u600e\u4e48\u6837\u5462\uff1f\u9996\u5148\u662f Beamer\uff0c\u5927\u6982\u4e5f\u662f\u6700\u6709\u540d\u7684\uff0c\u5176\u57fa\u4e8e \\(\\LaTeX\\) \u5b9e\u73b0\uff0c\u5176\u5728\u6392\u7248\u4e0a\u7684\u53ef\u63a7\u6027\u4e0d\u8a00\u800c\u55bb\uff0c\u4f46\u662f\u5199\u8fc7\u7684\u4eba\u90fd\u77e5\u9053 \\(\\LaTeX\\) \u5199\u8d77\u6765\u591a\u8d39\u5fc3\uff1b\u800creveal.js \u4ee5\u53ca nodeppt \u662f\u6211\u627e\u5230\u8fc7\u7684\u4e24\u4e2a\u6bd4\u8f83\u6ee1\u610f\u7684\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5199 Slides \u7684\u5de5\u5177\u3002\u6211\u5e76\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u628a\u4ed6\u4eec\u4e24\u4e2a\u90fd\u8be6\u7ec6\u7684\u4ecb\u7ecd\u4e00\u904d\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u7b80\u5355\u8868\u8fbe\u4e00\u4e0b\u6211\u5bf9\u8fd9\u4e24\u4e2a\u4e1c\u897f\u7684\u770b\u6cd5\u3002

    \u9996\u5148\uff0c\u5728\u6211\u7684\u7406\u89e3\u4e2d\uff0cnodeppt \u5bf9\u7f8e\u5316\u662f\u6bd4 reveal.js \u8981\u597d\u4e00\u4e9b\u7684\uff0c\u5373\uff0c\u629b\u5f00\u82b1\u8d39\u5728\u91cc\u9762\u7684\u65f6\u95f4\u4e0d\u8bf4\uff0c\u5c31\u7ed3\u679c\u800c\u8a00\uff0c\u4f7f\u7528 nodeppt \u4f1a\u6bd4 reveal.js \u597d\u770b\u4e00\u4e9b\uff0c\u6392\u7248\u66f4\u81ea\u7531\u4e00\u4e9b\u3002\u4f46\u662f\u4ece\u300c\u6548\u7387\u300d\u6765\u8bf4\uff0c\u6211\u503e\u5411\u4e8e reveal.js\u3002 \u7406\u7531\u5f88\u7b80\u5355\uff0creveal.js \u7684\u5206\u9875\u903b\u8f91\u6df1\u5f97\u6211\u5fc3\uff1a

    \u6211\u81ea\u5df1\u5199\u7684\u67d0\u4e2a Slides \u7684\u7ed3\u6784\u901f\u89c8

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u9875\u9762\u6709\u7eb5\u5411\u548c\u6a2a\u5411\u4e24\u4e2a\u6269\u5c55\u65b9\u5411\uff0c\u8fd9\u975e\u5e38\u7b26\u5408\u5c42\u6b21\u5316\u7684\u601d\u7ef4\u903b\u8f91\uff0c\u4e5f\u5f88\u7b26\u5408\u6587\u6863\u7684\u7f16\u5199\u903b\u8f91\uff0c\u5e76\u4e14\u603b\u4f53\u800c\u8a00 \u6ca1\u6709\u4ec0\u4e48\u82b1\u91cc\u80e1\u54e8\u4f46\u662f\u6ca1\u5565\u7528\u7684\u4e1c\u897f\uff0c\u5177\u6709\u4e00\u79cd\u5965\u5361\u59c6\u5243\u5200\u7684\u7f8e\u611f\u3002\u7136\u800c\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u5b83\u7684\u7f8e\u5de5\u4e0a\u9650\u5f88\u4f4e\uff0c\u6070\u6070\u76f8\u53cd\uff0c\u4e0d\u4ec5 reveal.js \u7684\u5185\u7f6e\u52a8\u753b\u548c\u98ce\u683c\u5c31\u5f88\u8212\u9002\uff0c\u800c\u4e14\u65e0\u8bba\u662f reveal.js \u8fd8\u662f nodeppt\uff0c\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u9759\u6001\u7f51\u9875\uff0c\u4f60\u5927\u53ef\u4ee5\u7528\u4f60\u7684\u524d\u7aef\u6280\u80fd\u6765\u7f8e\u5316\u5b83\u2014\u2014\u5f53\u7136\uff0c \u5bf9\u6211\u6765\u8bf4\u8fd9\u4e9b\u4e1c\u897f\u5c31\u6ca1\u5565\u5fc5\u8981\u4e86\u3002 \u4ee5\u4e0a\u90fd\u662f\u5173\u4e8e\u6548\u679c\u7684\u53d9\u8ff0\uff0c\u90a3\u5b83\u662f\u5426\u771f\u7684\u5199\u8d77\u6765\u5f88\u65b9\u4fbf\u5462\uff1f\u5176\u5b9e\u6211\u611f\u89c9\u539f\u751f\u7684 reveal.js \u5199\u8d77\u6765\u5e76\u4e0d\u65b9\u4fbf\uff0c\u6211\u4e00\u5f00\u59cb\u751a\u81f3\u4e0d\u77e5\u9053\u8981\u5982\u4f55\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6587\u6863\u3002\u4f46\u662f\u6211\u540e\u6765\u53d1\u73b0\u4e86[reveal-md](https://github.com/webpro/reveal-md)\u8fd9\u4e2a\u5de5\u5177\u3002\u5229\u7528reveal-md\uff0c\u4f60\u53ef\u4ee5\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5b9e\u73b0\u4f7f\u7528markdown\u8bed\u6cd5\u6765\u5199\u4e00\u4e2a Slides\u3002

    "},{"location":"others/reveal-md2Slides/#\u5b89\u88c5\u4e0e\u6f14\u793a","title":"\u5b89\u88c5\u4e0e\u6f14\u793a","text":"

    \u786e\u4fdd\u60a8\u7684[npm](https://www.npmjs.com/)\u80fd\u591f\u6b63\u5e38\u4f7f\u7528\uff0c\u63a5\u4e0b\u6765\u5b89\u88c5reveal-md\u4f60\u53ea\u9700\u8981\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u5373\u53ef\u3002

    npm install -g reveal-md\n

    \u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u4f60\u5c31\u53ef\u4ee5\u5c06 reveal-md \u5f53\u4f5c\u4e00\u4e2a console app \u6765\u4f7f\u7528\uff0c\u8f93\u5165 reveal-md --help \u6765\u67e5\u770b\u547d\u4ee4\u8be6\u7ec6\u7684\u4f7f\u7528\u65b9\u6cd5\u3002

    help list
    Puppeteer unavailable, unable to create featured slide image for OpenGraph metadata.\nPuppeteer unavailable, unable to generate PDF file.\nUsage: cli <slides.md> [options]\n\nSee https://github.com/webpro/reveal-md for more details.\n\nOptions:\n  -V, --version                               output the version number\n      --title <title>                         Title of the presentation\n  -s, --separator <separator>                 Slide separator [default: 3 dashes (---) surrounded by two blank lines]\n-S, --vertical-separator <separator>        Vertical slide separator [default: 4 dashes (----) surrounded by two blank lines]\n-t, --theme <theme>                         Theme [default: black]\n--highlight-theme <theme>               Highlight theme [default: zenburn]\n--css <files>                           CSS files to inject into the page\n      --scripts <files>                       Scripts to inject into the page\n      --assets-dir <dirname>                  Defines assets directory name [default: _assets]\n--preprocessor <script>                 Markdown preprocessor script\n      --template <filename>                   Template file for reveal.js\n      --listing-template <filename>           Template file for listing\n      --glob <pattern>                        Glob pattern to select markdown files for listing and conversion [default: **/*.md]\n--print [filename]                      Print to PDF file\n      --static [dir]                          Export static html to directory [_static]. Incompatible with --print.\n      --static-dirs <dirs>                    Extra directories to copy into static directory. Only used in conjunction with --static.\n  -w, --watch                                 Watch for changes in markdown file and livereload presentation\n      --disable-auto-open                     Disable auto-opening your web browser\n      --host <host>                           Host [default: localhost]\n--port <port>                           Port [default: 1948]\n--featured-slide <num>                  Capture snapshot from this slide (numbering starts from 1) and use it as og:image for static build. Defaults to first slide. Only used with --static.\n      --absolute-url <url>                    Define url used for hosting static build. This is included in OpenGraph metadata. Only used with --static.\n      --print-size                            Paper size to use in exported PDF files\n      --puppeteer-launch-args <args>          Customize how Puppeteer launches Chromium. The arguments are specified as a space separated list (for example --puppeteer-launch-args=\"--no-sandbox --disable-dev-shm-usage\"). Needed for some CI setups.\n      --puppeteer-chromium-executable <path>  Customize which Chromium executable puppeteer will launch. Allows to use a globally installed version of Chromium.\n  -h, --help                                  output usage information\n

    \u5728\u6211\u81ea\u5df1\u7684\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ba4\u4e3a\u6bd4\u8f83\u6838\u5fc3\u7684\u4e24\u6761\u547d\u4ee4\u5982\u4e0b\uff1a

    ## \u6700\u57fa\u7840\u7684\u547d\u4ee4\uff0c\u6839\u636e Markdown \u6587\u4ef6\u5728\u672c\u5730 1948 \u7aef\u53e3\u751f\u6210 Slides \u670d\u52a1\u3002\n$ reveal-md your-md-file.md\n\n## \u4e3a\u4e86\u5b9e\u73b0\u5728\u7ebf\u90e8\u7f72\uff0c\u9700\u8981\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u3002\n$ reveal-md your-md-file.md --static your-static-dir\n

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u4f60\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2amd\u6587\u4ef6\uff0c\u5e76\u4f7f\u7528\u8fd9\u4e9b\u6307\u4ee4\u5c31\u80fd\u751f\u6210 reveal.js Slides\u3002 \u63a5\u4e0b\u6765\u4ee5\u5b98\u65b9 demo \u4e3a\u4f8b\u4ecb\u7ecd\u4e00\u4e0b\u4f7f\u7528\u3002\u8fd0\u884c\u6307\u4ee4\u4ee5\u540e\u4f1a\u5728 1948 \u7aef\u53e3\u542f\u52a8\u670d\u52a1\uff0c\u4e00\u822c\u4f1a\u76f4\u63a5\u901a\u8fc7\u6d4f\u89c8\u5668\u6253\u5f00\u3002 \u5728 PC \u7aef\u53e3\uff1a

    \u6309 f \u4e4b\u524d\u3002 \u5168\u5c4f\u663e\u793a\u3002

    \u800c\u5728\u79fb\u52a8\u7aef\uff08\u6bd4\u5982\u8bbf\u95ee\u67d0\u4e2a\u5b9e\u4f8b\u7684\u5728\u7ebf\u90e8\u7f72\u65f6\uff09\uff0c\u57fa\u672c\u7684\u70b9\u51fb\u64cd\u4f5c\u662f\u4e00\u6837\u7684\uff0c\u6b64\u5916\uff0c\u5e26\u6709\u65b9\u5411\u7684\u6ed1\u52a8\u53ef\u4ee5\u5bf9\u5e94\u65b9\u5411\u952e\u529f\u80fd\u3002

    "},{"location":"others/reveal-md2Slides/#\u6587\u6863\u7f16\u5199","title":"\u6587\u6863\u7f16\u5199","text":"

    \u5728\u8fd9\u90e8\u5206\uff0c\u6211\u5e76\u4e0d\u6253\u7b97\u6309\u7167\u6a21\u5757\u5316\u3001\u7cfb\u7edf\u5316\u7684\u6d41\u7a0b\u6765\u7f16\u5199\u6559\u7a0b\uff0c\u8fd9\u4e9b\u4f60\u5728\u5b98\u65b9\u6587\u6863\u4e2d\u90fd\u80fd\u627e\u5230\u2014\u2014\u6211\u5e76\u4e0d\u89c9\u5f97\u201c\u5b57\u5178\u201d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u5b66\u4e60\u9014\u5f84\uff0c\u5c31\u50cf\u6211\u4eec\u4e00\u822c\u4e0d\u5efa\u8bae\u7528\u300aC++ Primer\u300b\u5165\u95e8 C++\uff0c\u66f4\u4e0d\u4f1a\u5efa\u8bae\u5916\u56fd\u53cb\u4eba\u901a\u8fc7\u300a\u65b0\u534e\u5b57\u5178\u300b\u6765\u5b66\u4e60\u6c49\u8bed\u3002 \u6211\u5c06\u6309\u7167\u6211\u5bf9\u8fd9\u4e2a\u5de5\u5177\u7684\u7406\u89e3\uff0c\u6309\u7167\u7531\u6d45\u5165\u6df1\uff0c\u6309\u7167\u5fc5\u8981\u7a0b\u5ea6\u6765\u4ecb\u7ecd\u5185\u5bb9\u3002\u5b83\u53ef\u80fd\u770b\u8d77\u6765\u4f1a\u53c8\u4e9b\u6df7\u4e71\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5b83\u662f\u7b26\u5408\u5b9e\u8df5\u987a\u5e8f\u7684\uff0c\u5982\u679c\u8ba9\u4f60\u89c9\u5f97\u770b\u8d77\u6765\u5f88\u8d39\u52b2\uff0c\u53ef\u4ee5\u642d\u914d\u5b98\u65b9\u6587\u6863\u6765\u4f7f\u7528\uff0c\u6216\u8005\u76f4\u63a5\u544a\u8bc9\u6211\u3002 \u6b64\u5916\uff0c\u5176\u4e2d\u53ef\u80fd\u4e0d\u4f1a\u6d89\u53ca\u4e00\u90e8\u5206\u6211\u4e2a\u4eba\u4e0d\u592a\u559c\u6b22\u7684\u4e1c\u897f\uff0c\u6bd4\u5982\u540c\u6837\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u548c\u547d\u4ee4\u53c2\u6570\u7684\u884c\u4e3a\uff0c\u6211\u4f1a\u9009\u62e9\u53ea\u4ecb\u7ecd\u914d\u7f6e\u6587\u4ef6\u7684\u65b9\u6848\u3002\u5982\u679c\u4f60\u5bf9\u53e6\u5916\u4e00\u79cd\u65b9\u6848\u611f\u5174\u8da3\uff0c\u53ef\u4ee5\u8be6\u7ec6\u9605\u8bfb\u6587\u6863\u6216\u8005\u5e2e\u52a9\u83dc\u5355\u3002\u6b64\u5916\uff0c\u672c\u6587\u7ae0\u4e5f\u4e0d\u4f1a\u6d89\u53ca reveal-md \u7684\u6240\u6709\u5185\u5bb9\uff0c\u800c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u629b\u7816\u5f15\u7389\u6216\u8005\u8bf4\u57fa\u7840\u4f7f\u7528\u7684\u6559\u7a0b\u3002\u90e8\u5206\u9700\u6c42\u53ef\u80fd\u662f\u9762\u5411\u7279\u6b8a\u7528\u6237\u7fa4\u4f53\u7684\uff0c\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u67e5\u770b\u5b98\u65b9\u6587\u6863\u3002

    "},{"location":"others/reveal-md2Slides/#\u5206\u9875","title":"\u5206\u9875","text":"

    \u9996\u5148\uff0c\u5982\u679c\u4f60\u7528\u4e00\u4e2a\u518d\u666e\u901a\u4e0d\u8fc7\u7684 Markdown \u6587\u4ef6\u6765\u521b\u5efa Slides\uff0c\u6bd4\u5982\uff1a

    ## Part 1\n\n### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n### Part 1.2\n\n{code block here}\n\n### Part 1.3\n\n> Everthings seems ok!\n

    \u90a3\u4e48\u8fd0\u884c\u4ee5\u540e\u6211\u4eec\u4f1a\u5f97\u5230\u8fd9\u6837\u4e00\u4e2a\u9875\u9762\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u5e76\u4e0d\u50cf\u6211\u4eec\u60f3\u7684\u90a3\u6837\uff0c\u5411\u6a2a\u5411\u548c\u7eb5\u5411\u6269\u5c55\u3002\u4f46\u662f\u8fd9\u6070\u597d\u8bf4\u660e\u6240\u6709\u4e1c\u897f\u90fd\u662f\u53ef\u63a7\u7684\uff0c\u800c\u4e0d\u662f\u83ab\u540d\u5176\u5999\u7684\u6839\u636e\u67d0\u4e2a\u6807\u9898\u5c31\u81ea\u52a8\u6362\u6389\uff0c\u8fdb\u800c\u5bfc\u81f4\u4e00\u7cfb\u5217\u8be1\u5f02\u7684\u95ee\u9898\u3002

    \u5728 reveal-md \u4e2d\uff0c\u6709\u4e24\u79cd separator \u548c vertical separator \u4e24\u79cd\uff0c\u987e\u540d\u601d\u4e49\uff0c\u5206\u522b\u5bf9\u5e94\u7740\u5de6\u53f3\u5206\u9875\u548c\u4e0a\u4e0b\u5206\u9875\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cseparator \u662f \\n---\\n\uff0c\u800c vertical separator \u662f \\n----\\n\u3002\u6240\u4ee5\u7a0d\u5fae\u5bf9\u4e0a\u9762\u7684\u6587\u6863\u8fdb\u884c\u4e00\u4e9b\u4fee\u6539\uff1a

    ### Part 1\n\n---\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n----\n\n#### Part 1.2\n\n{code block here}\n\n----\n\n#### Part 1.3\n\n> Everthings seems ok!\n

    \u518d\u6b21\u8fd0\u884c\u5c31\u80fd\u53d1\u73b0\u6211\u4eec\u7684 Slides \u5df2\u7ecf\u6709\u4e86\u4e8c\u7ef4\u7684\u5c42\u7ea7\u7ed3\u6784\uff1a

    \u867d\u7136\u8fd9\u91cc\u7684\u9884\u89c8\u56fe\u91cc\u770b\u8d77\u6765\u6392\u7248\u5f88\u4e11\uff0c\u4f46\u662f\u5b9e\u9645\u5c55\u793a\u7684\u65f6\u5019\u90fd\u662f\u9ed8\u8ba4\u5c45\u4e2d\uff0c\u4e0d\u559c\u6b22\u7684\u8bdd\u53ef\u4ee5\u6539\u76f8\u5173\u8bbe\u7f6e\u6216\u8005\u7528 html \u6807\u7b7e\u4fee\u6539\u3002

    \u90a3\u4e48\u5176\u5b9e\u5230\u6b64\u4e3a\u6b62\uff0c\u4f60\u5df2\u7ecf\u80fd\u591f\u901a\u8fc7reveal-md\u6765\u5b9e\u73b0\u975e\u5e38\u5feb\u901f\u7684 Slides \u7f16\u5199\u4e86\u3002\u4f46\u662f\u4e3a\u4e86\u5b9a\u5236\u4e3b\u9898\uff0c\u6216\u8005\u662f\u4f7f\u7528\u4e00\u4e9b\u66f4\u9ad8\u7ea7\u7684\u4e1c\u897f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4ecb\u7ecd\u4e00\u4e9b\u522b\u7684\u4e1c\u897f\uff0c\u5305\u62ec\u5bf9\u67d0\u4e9b\u4e1c\u897f\u7684\u81ea\u5b9a\u4e49\u3001\u67d0\u4e9b\u6a21\u5757\u7684\u6269\u5c55\u529f\u80fd\u3001\u4e0e\u539f\u751freveal.js\u8bed\u6cd5\u7684\u6df7\u7528\u3002 \u5728\u6b63\u5f0f\u8fdb\u5165\u4e0b\u4e00\u4e2a\u90e8\u5206\u4e4b\u524d\uff0c\u6211\u60f3\u8865\u5145\u4ecb\u7ecd\u4e00\u4e0b\u5982\u4f55\u4fee\u6539\u9ed8\u8ba4\u7684 separator\uff1a \u6709\u4e24\u79cd\u65b9\u6848\u80fd\u5b9e\u73b0 seperator \u7684\u81ea\u5b9a\u4e49\uff0c\u4e00\u79cd\u662f\u901a\u8fc7\u5728\u547d\u4ee4\u884c\u4e2d\u7684\u9644\u52a0\u53c2\u6570\u5b9e\u73b0\uff0c\u53e6\u4e00\u79cd\u5219\u662f\u5728md\u6587\u4ef6\u5f00\u5934\u5199\u597d\u914d\u7f6e\u6587\u4ef6\u5b9e\u73b0\u3002

    ---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n

    \u8fd9\u91cc\u6211\u624d\u7528\u7b2c\u4e8c\u79cd\u65b9\u6848\u6765\u6539\u88c5\u6211\u4eec\u7684 md \u6587\u4ef6\u73b0\u5728\u5f97\u5230\uff1a

    ---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n{code block here}\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n

    \u800c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u9664\u4e86\u5f00\u5934\u914d\u7f6e\u6587\u4ef6\u7684\u90e8\u5206\uff0c\u5176\u4ed6\u7684 --- \u5219\u4f1a\u88ab\u8ba4\u4e3a\u662f md \u7684\u8bed\u6cd5\uff0c\u6e32\u67d3\u4e3a\u6b63\u5e38\u7684\u5206\u5272\u7ebf\u3002

    "},{"location":"others/reveal-md2Slides/#\u4ee3\u7801\u6846","title":"\u4ee3\u7801\u6846","text":"

    \u9996\u5148\uff0c\u5728 reveal-md \u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u548c\u5728 markdown \u4e2d\u4f7f\u7528\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7 reveal.js \u5bf9\u4ee3\u7801\u6846\u6709\u66f4\u591a\u7684\u652f\u6301\uff0c\u800c reveal-md \u5c06\u8fd9\u79cd\u652f\u6301\u878d\u5408\u8fdb\u4e86 markdown \u7684\u8bed\u6cd5\u3002\u6211\u5728\u8fd9\u91cc\u4e3b\u8981\u60f3\u4ecb\u7ecd\u7684\u662f\u4ee3\u7801\u6846\u9ad8\u4eae\u884c\u52a8\u753b\u3002

    \u4e0d\u77e5\u9053\u4f60\u6709\u6ca1\u6709\u9047\u5230\u8fc7\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u9700\u8981\u8d34\u51fa\u4e00\u6bb5\u4ee3\u7801\uff0c\u4f46\u662f\u6709\u4e9b\u90e8\u5206\u5e76\u4e0d\u662f\u91cd\u70b9\uff0c\u4f46\u662f\u4e0d\u653e\u4e0a\u53bb\u53c8\u89c9\u5f97\u602a\u602a\u7684\uff1b\u53c8\u6216\u8005\u4f60\u7684\u4ee3\u7801\u91cc\u6709\u591a\u4e2a\u91cd\u70b9\uff0c\u4f60\u9700\u8981\u5728\u5c55\u793a\u65f6\u624b\u52a8\u544a\u8bc9\u5927\u5bb6\u54ea\u91cc\u662f\u91cd\u70b9\uff1freveal* \u53ef\u4ee5\u505a\u5230\u6309\u884c\u9ad8\u4eae\u4ee3\u7801\uff0c\u5e76\u4e14\u80fd\u591f\u5b9e\u73b0\u52a8\u753b\u3002\u8fd9\u4e48\u8bf4\u6709\u70b9\u62bd\u8c61\uff0c\u53ef\u4ee5\u4f53\u9a8c\u4e00\u4e0b\u8fd9\u4e00\u9875 Slide\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u4ec5\u9ad8\u4eae\u4e86\uff0c\u800c\u4e14\u8fd8\u6709\u81ea\u52a8\u6eda\u52a8\u5230\u4e2d\u5fc3\u3002

    \u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u77e5\u9053\uff0c\u5728Markdown\u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u7684\u8bed\u6cd5\u5982\u4e0b\uff1a

    - \u524d\u9762\u7684\u6570\u5b57\u662f\u4e3a\u4e86\u6807\u8bb0\u5b83\u4eec\u5c5e\u4e8e\u4ee3\u7801\u6846\u7684\u7b2c\u51e0\u884c\u800c\u5199\u7684\uff0c\u5b9e\u9645\u4e0d\u9700\u8981\u5199\u8fd9\u4e9b\u6570\u5b57\uff08\u5e9f\u8bdd\uff09\n- \u53cd\u659c\u6760\u662f\u4e3a\u4e86\u9632\u6b62md\u6e32\u67d3\u9519\u8bef\uff0c\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u52a0\n\n\\```cpp\n1       #include <iostream>\n2       int main(){\n3           std::cout << \"Hello World!\\n\";\n4       return 0;\n5       }\n\\```\n

    \u90a3\u4e48\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9ad8\u4eae\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u8bed\u8a00\u540e\u9762\u52a0\u4e0a\u4e00\u4e2a\u65b9\u62ec\u53f7 [...] \u6765\u6807\u8bb0\u9ad8\u4eae\u884c\u5373\u53ef\uff0c\u6bd4\u5982 [2-5] \u5c31\u662f\u6807\u8bb0 2\uff5e5 \u884c\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a main() \u51fd\u6570\u3002\u6b64\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u7528|\u6765\u5206\u9694\u591a\u4e2a\u9ad8\u4eae\u5757\uff0c\u6765\u5b9e\u73b0\u52a8\u753b\u7684\u6548\u679c\uff0c\u4f8b\u5982 [1|2-5] \u5c31\u662f\u5148\u9ad8\u4eae\u9884\u7f16\u8bd1\uff0c\u518d\u9ad8\u4eae main() \u51fd\u6570\u3002

    ---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n\\```cpp[1|2-5]\n#include <iostream>\nint main(){\n    std::cout << \"Hello World!\\n\";\n    return 0;\n}\n\\```\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n
    "},{"location":"others/reveal-md2Slides/#\u683c\u5f0f\u652f\u6301","title":"\u683c\u5f0f\u652f\u6301","text":"

    \u5728\u6587\u672c\u683c\u5f0f\u6392\u7248\u65b9\u9762\uff0cMarkdown \u7684\u539f\u751f\u8bed\u6cd5\u90fd\u662f\u652f\u6301\u7684\uff0c\u6b64\u5916\u4f60\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528 html \u6807\u7b7e\u6765\u7f16\u8f91\u4f60\u7684\u6587\u5b57\uff0c\u4f8b\u5982\u4fee\u6539\u989c\u8272\u3001\u8bbe\u7f6e\u5c45\u4e2d/\u9760\u5de6/\u9760\u53f3\u3001\u4fee\u6539\u5927\u5c0f\u2026\u2026 \u4f8b\u5982\uff0c\u4e0a\u9762\u5c55\u793a\u7684\u90a3\u5f20\u5c55\u793a\u4ee3\u7801\u9ad8\u4eae\u7684 Slide \u7684\u521d\u59cb\u4ee3\u7801\u5982\u4e0b\uff1a

    ### \u8f93\u51fa\u6d41\n\n\\```c[1-19|13-16]\n#ifndef __C_NEWBIE_HELPER__\n#define __C_NEWBIE_HELPER__\n/****************************************************\n * C Newbie Helper 1.0                              *\n * ------------------------------------------------ *\n * Github Repository Address:                       *\n * - https://github.com/IsshikiHugh/C-Newbie-Helper *\n ****************************************************/\n/*** Config Part ************************************/\n// MODE 0 : Logs will be write to 'CNH_log.txt' file.\n// MODE 1 : Logs will be print to console (colorful for normal terminal).\n// MODE 2 : Logs will be print to console (colorless but fine for CMD).\n#define CNH_MODE 2\n...\n\\```\n\n<font size=\"6\">\n\n- \u5982\u679c\u4f60\u5bf9\u547d\u4ee4\u884c<font color=\"orange\">\u6beb\u65e0\u4e86\u89e3</font>\uff0c\u90a3\u4e48\u8bf7\u68c0\u67e5 <font color=\"cyan\">CNH_MODE</font> \u88ab\u8bbe\u7f6e\u4e3a <font color=\"cyan\">2</font> \uff1b\n- \u5982\u679c\u4f60\u7684\u65e5\u5fd7\u5c06\u4f1a\u88ab\u6253\u5370\u5728\u5e38\u89c4\u7684 <font color=\"orange\">Terminal</font> \u4e0a\uff0c\u90a3\u4e48\u6211\u4eec\u63a8\u8350\u4f60\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">1</font> \uff1b\n- \u5982\u679c\u4f60\u5e0c\u671b\u4f60\u7684\u65e5\u5fd7\u5185\u5bb9\u4e0d\u88ab\u6253\u5370\uff0c\u800c\u662f\u8f93\u51fa\u5230<font color=\"orange\">\u6587\u4ef6</font>\u4e2d\uff0c\u5219\u53ef\u4ee5\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">0</font> \uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0cCNH \u65e0\u6cd5\u6e05\u7a7a\u8f93\u51fa\u6587\u4ef6\uff0c\u8bf7\u5728\u6bcf\u6b21\u8f93\u51fa\u7684\u65f6\u5019\u624b\u52a8\u6e05\u7406 <font color=\"yellow\">CNH_log.txt</font> \uff1b\n\n</font>\n

    \u6839\u636e\u6211\u7684\u89c2\u5bdf\uff0c\u5982\u679c\u9700\u8981\u5728html\u6807\u7b7e\u91cc\u4f7f\u7528Markdown\u8bed\u6cd5\uff0c\u6700\u597d\u5728\u6807\u7b7e\u548c\u8bed\u6cd5\u4e4b\u95f4\u52a0\u7a7a\u884c\u3002

    "},{"location":"others/reveal-md2Slides/#\u5b9a\u5236\u4e0e\u7f8e\u5316","title":"\u5b9a\u5236\u4e0e\u7f8e\u5316","text":"

    \u8fd9\u91cc\u6211\u63d0\u4f9b\u4e00\u4e2a\u6211\u81ea\u5df1\u7684\u6e90md\u6587\u4ef6\u5f00\u5934\u914d\u7f6e\u7684\u6a21\u677f\uff1a

    ---\ntitle: Title\nseparator: <!--s-->\nverticalSeparator: <!--v-->\ntheme: league\nhighlightTheme: tomorrow-night-bright\nrevealOptions:\n  width: 1520\nheight: 950\nmargin: 0.04\n  transition: 'convex'\nslideNumber: true\n---\n

    \u6211\u8fd9\u91cc\u586b\u5199\u7684\u662f\u6211\u81ea\u5df1\u8ba4\u4e3a\u6bd4\u8f83\u8212\u670d\u800c\u4e14\u597d\u770b\u7684\u3002\u5f53\u7136\uff0c\u5982\u679c\u672c\u5730\u5bf9\u5e94\u8d44\u6e90\u6587\u4ef6\u91cc\u6709\u60a8\u81ea\u5df1\u7f16\u5199\u7684\u8d44\u6e90\u4e5f\u662f\u53ef\u4ee5\u7528\u7684\u3002\u4f46\u662f\u8fd9\u4e00\u5757\u6211\u7684\u94bb\u7814\u4e5f\u4e0d\u662f\u7279\u522b\u6df1\uff0c\u6211\u672c\u8eab\u4e5f\u4e0d\u662f\u524d\u7aef\u4eba\uff0c\u6240\u4ee5\u53ea\u80fd\u4ecb\u7ecd\u5230\u8fd9\u91cc\u4e86\u3002

    "},{"location":"others/reveal-md2Slides/#\u901a\u8fc7-github-pages-\u5b9e\u73b0\u9759\u6001\u90e8\u7f72","title":"\u901a\u8fc7 GitHub Pages \u5b9e\u73b0\u9759\u6001\u90e8\u7f72","text":"

    \u5728\u8fd9\u4e2a\u7ae0\u8282\u4e2d\uff0c\u6211\u5c06\u4ecb\u7ecd\u5982\u4f55\u5229\u7528 GitHub Pages \u5b9e\u73b0 Slides \u7684\u90e8\u7f72\uff0c\u5728\u8bf8\u5982 Gitee Pages \u7684\u5e73\u53f0\u5b9e\u73b0\u8fd9\u4e9b\u529f\u80fd\u7684\u6d41\u7a0b\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002 \u9996\u5148\u4f60\u9700\u8981\u521b\u5efa\u4e00\u4e2a Repo \u6765\u5b58\u653e\u4f60\u7684\u9759\u6001\u8d44\u6e90\uff0c\u4f8b\u5982\u3002\u6211\u4e2a\u4eba\u7684\u505a\u6cd5\u662f\u76f4\u63a5\u628a\u521d\u59cb\u7684 md \u6587\u672c\u548c\u9759\u6001\u8d44\u6e90\u6587\u672c\u90fd\u653e\u5728\u4e00\u4e2a\u5730\u65b9\u4e86\u3002 \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5bfc\u51fa\u9759\u6001\u8d44\u6e90\uff0c\u4f7f\u7528\u7684\u662f\u8fd9\u6761\u6307\u4ee4\uff1a

    reveal-md your-md-file.md --static your-static-dir\n

    \u63a5\u4e0b\u6765\uff0c\u4f60\u4f1a\u5f97\u5230\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5305\u542b\u8fd9\u4e2a Slides \u6240\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\u3002\u4f60\u53ea\u9700\u8981\u5c06\u5b83\u4f20\u5230\u4f60\u7684 Repo \u91cc\u5373\u53ef\u3002 \u4f8b\u5982\u6211\u7684\u4ed3\u5e93\u4e2d\uff1a

    \u8fdb\u5165repo/.../static-dir\uff0c\u4e5f\u5c31\u662f\u4e0a\u56fe\u7684slides\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u4e00\u4e9b\u6587\u4ef6\uff1a

    \u5176\u4e2d\u7684 index.html \u548c slides.html \u90fd\u662f Slides \u7684 html \u6587\u4ef6\u3002\u533a\u522b\u8c8c\u4f3c\u662f index.html\u4f1a \u6709\u4e00\u4e2a\u5f39\u7a97\u544a\u8bc9\u4f60\u4f7f\u7528\u7684\u662f reveal.js\u3002

    \u63a5\u4e0b\u6765\uff0c\u8bbe\u7f6e pages \u670d\u52a1\u4ee5\u540e\u901a\u8fc7 https://<github_id>.github.io/<repo_name>/.../slides.html \u5373\u53ef\u8bbf\u95ee\u5230\u9875\u9762\u5566\uff01 \u4f8b\u5982\u4e0a\u65b9\u8fd9\u4e2a\u4ed3\u5e93\u5bf9\u5e94\u7684 URL \u662f https://isshikihugh.github.io/myReveal-md/projectsTutorial_CNewbieHelper/slides/slides.html\u3002

    \u5229\u7528 Pages \u670d\u52a1\uff0c\u5c31\u53ef\u4ee5\u5feb\u901f\u4fbf\u6377\u5730\u5206\u4eab\u4f60\u7684 Slides\uff0c\u5bf9\u4e8e\u4e0d\u61c2\u6280\u672f\u7684\u4eba\u6765\u8bf4\u4e0d\u4ec5\u8868\u73b0\u6548\u679c\u4e0d\u5dee\uff0c\u800c\u4e14\u8fd8\u6709\u4e00\u4e1d\u903c\u683c\u3002\u4e0d\u8fc7\u5728\u56fd\u5185\u6216\u8bb8\u8bbf\u95ee\u4e0d\u592a\u7a33\u5b9a\uff0c\u6240\u4ee5\u53ef\u4ee5\u8003\u8651\u4f7f\u7528 Gitee Pages \u6765\u5b9e\u73b0\u3002\u4e0d\u8fc7 Gitee Pages \u670d\u52a1\u6bcf\u4e00\u6b21\u90fd\u9700\u8981\u4f60\u81ea\u5df1\u53bb\u66f4\u65b0\u4e00\u4e0b\uff0c\u8fd8\u6709\u4e00\u4e9b\u5ba1\u6838\u673a\u5236\u3002

    "},{"location":"others/reveal-md2Slides/#\u4e00\u4e9b\u5751","title":"\u4e00\u4e9b\u5751","text":"

    reveal-md \u5df2\u7ecf\u6709\u5927\u6982\u4e00\u5e74\u7684\u65f6\u95f4\u6ca1\u6709\u7ef4\u62a4\u4e86\uff0c\u5176\u4e2d\u4e5f\u9047\u5230\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u9047\u5230\u4e86\u4e00\u4e9b\u5c31\u8bb0\u4e0b\u6765\u3002

    "},{"location":"pape_read/","title":"\u6249\u9875","text":"

    \u7ea6 31 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u4f60\u4eec\u8981\u52aa\u529b\u8fdb\u7a84\u95e8\uff0c\u56e0\u4e3a\u5bbd\u95e8\u548c\u9614\u8def\u5f15\u5411\u6c89\u6ca6\u3002 \u2014\u2014\u5b89\u5fb7\u70c8\u00b7\u7eaa\u5fb7\u300a\u7a84\u95e8\u300b

    "},{"location":"pape_read/ACTOR/","title":"[ACTOR] Action-Conditioned 3D Human Motion Synthesis with Transformer VAE","text":"

    \u7ea6 235 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    3DV Human-Motion Action-Control

    \u6587\u7ae0\u4fe1\u606f

    \u76f8\u5173\u5185\u5bb9

    "},{"location":"pape_read/ACTOR/#introduction","title":"Introduction","text":"

    In this work, our goal is to take a semantic action label like \u201cThrow\u201d and generate an infinite number of realistic 3D human motion sequences, of varying length, that look like realistic throwing (Figure 1).

    \u5e76\u4e14\u53d7\u4f7f\u7528\u573a\u666f\u9650\u5236\uff0c\u5b83\u9700\u8981\u6709\u5f3a\u7ea6\u675f\u4ee5\u53ca\u76f8\u5bf9\u7684\u9ad8\u6548\u6027\u3002

    \u6d89\u53ca\u4eba\u4f53\u76ae\u80a4\u8868\u9762\u4e0e\u4e3b\u5ba2\u4f53\u7684\u4ea4\u4e92\uff0c\u6240\u4ee5\u4f7f\u7528 SMPL \u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u9009\u62e9\u3002

    noisy 3D body poses

    \u540c\u6837\u91c7\u7528 Positional Encoding\uff0c\u8fd9\u4e0e NeRF \u8054\u7cfb\u8d77\u6765\u3002

    "},{"location":"pape_read/ACTOR/#related-work","title":"Related Work","text":" \u7591\u60d1

    his allows the generation of variable length sequences without the problem of the motions regressing to the mean pose. \u8fd9\u53e5\u8bdd\u662f\u4ec0\u4e48\u610f\u601d\uff1f

    Translate

    \u7ffb\u8bd1\u5185\u5bb9

    "},{"location":"pape_read/ACTOR/trans/","title":"Translate","text":"

    \u7ea6 4848 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 24 \u5206\u949f

    "},{"location":"pape_read/ACTOR/trans/#abstract","title":"Abstract","text":"

    \u6211\u4eec\u89e3\u51b3\u4e86\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u751f\u6210\u903c\u771f\u591a\u6837\u7684\u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\u7684\u95ee\u9898\u3002 \u4e0e\u5b8c\u6210\u6216\u6269\u5c55\u8fd0\u52a8\u5e8f\u5217\u7684\u65b9\u6cd5\u76f8\u6bd4\uff0c\u6b64\u4efb\u52a1\u4e0d\u9700\u8981\u521d\u59cb\u59ff\u52bf\u6216\u5e8f\u5217\u3002 \u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u901a\u8fc7\u8bad\u7ec3\u751f\u6210\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668 (VAE) \u6765\u5b66\u4e60\u4eba\u4f53\u52a8\u4f5c\u7684\u52a8\u4f5c\u611f\u77e5\u6f5c\u5728\u8868\u793a\u3002 \u901a\u8fc7\u4ece\u8fd9\u4e2a\u6f5c\u5728\u7a7a\u95f4\u4e2d\u91c7\u6837\u5e76\u901a\u8fc7\u4e00\u7cfb\u5217\u4f4d\u7f6e\u7f16\u7801\u67e5\u8be2\u67d0\u4e2a\u6301\u7eed\u65f6\u95f4\uff0c\u6211\u4eec\u5408\u6210\u4e86\u4ee5\u5206\u7c7b\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u53ef\u53d8\u957f\u5ea6\u8fd0\u52a8\u5e8f\u5217\u3002 \u5177\u4f53\u6765\u8bf4\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u67b6\u6784 ACTOR\uff0c\u7528\u4e8e\u7f16\u7801\u548c\u89e3\u7801\u4ece\u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6\u4f30\u8ba1\u7684\u4e00\u7cfb\u5217\u53c2\u6570\u5316 SMPL \u4eba\u4f53\u6a21\u578b\u3002 \u6211\u4eec\u5728 NTU RGB+D\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bc4\u4f30\u4e86\u6211\u4eec\u7684\u65b9\u6cd5\uff0c\u5e76\u5c55\u793a\u4e86\u5bf9\u73b0\u6709\u6280\u672f\u7684\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c55\u793a\u4e86\u4e24\u4e2a\u7528\u4f8b\uff1a\u901a\u8fc7\u5c06\u6211\u4eec\u7684\u5408\u6210\u6570\u636e\u6dfb\u52a0\u5230\u8bad\u7ec3\u4e2d\u6765\u6539\u8fdb\u52a8\u4f5c\u8bc6\u522b\uff0c\u4ee5\u53ca\u8fd0\u52a8\u53bb\u566a\u3002 \u4ee3\u7801\u548c\u6a21\u578b\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

    "},{"location":"pape_read/ACTOR/trans/#introduction","title":"Introduction","text":"

    \u5c3d\u7ba1\u5bf9\u4eba\u4f53\u8fd0\u52a8\u5efa\u6a21\u8fdb\u884c\u4e86\u6570\u5341\u5e74\u7684\u7814\u7a76 [4\u30015]\uff0c\u4f46\u5408\u6210\u903c\u771f\u4e14\u53ef\u63a7\u7684\u5e8f\u5217\u4ecd\u7136\u6781\u5177\u6311\u6218\u6027\u3002 \u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u91c7\u7528\u50cf\u201c\u6295\u63b7\u201d\u8fd9\u6837\u7684\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff0c\u5e76\u751f\u6210\u65e0\u9650\u6570\u91cf\u7684\u903c\u771f 3D \u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\uff0c\u957f\u5ea6\u5404\u4e0d\u76f8\u540c\uff0c\u770b\u8d77\u6765\u50cf\u771f\u5b9e\u7684\u6295\u63b7\uff08\u56fe 1\uff09\u3002\u5927\u91cf\u5148\u524d\u7684\u5de5\u4f5c\u90fd\u96c6\u4e2d\u5728\u91c7\u53d6\u4e00\u4e2a\u59ff\u52bf\u6216\u4e00\u7cfb\u5217\u59ff\u52bf\uff0c\u7136\u540e\u9884\u6d4b\u672a\u6765\u7684\u8fd0\u52a8 [3\u30016\u300122\u300171\u300174]\u3002 \u8fd9\u662f\u4e00\u4e2a\u8fc7\u4e8e\u53d7\u9650\u7684\u573a\u666f\uff0c\u56e0\u4e3a\u5b83\u5047\u8bbe\u5df2\u7ecf\u6709\u4e00\u4e2a\u8fd0\u52a8\u5e8f\u5217\u5e76\u4e14\u53ea\u9700\u8981\u66f4\u591a\u3002 \u53e6\u4e00\u65b9\u9762\uff0c\u8bb8\u591a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u865a\u62df\u73b0\u5b9e\u548c\u89d2\u8272\u63a7\u5236 [28\u300161] \u9700\u8981\u751f\u6210\u5177\u6709\u6307\u5b9a\u6301\u7eed\u65f6\u95f4\u7684\u7ed9\u5b9a\u7c7b\u578b\uff08\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff09\u7684\u52a8\u4f5c\u3002

    \u56fe1\uff1a\u76ee\u6807\uff1a\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684 Transformer VAE\uff08ACTOR\uff09\u5b66\u4e60\u5408\u6210\u4ee5\u5206\u7c7b\u52a8\u4f5c\u548c\u6301\u7eed\u65f6\u95f4T\u4e3a\u6761\u4ef6\u7684\u4eba\u7c7b\u8fd0\u52a8\u5e8f\u5217\u3002\u5e8f\u5217\u662f\u901a\u8fc7\u4ece\u5355\u4e00\u7684\u8fd0\u52a8\u8868\u5f81\u6f5c\u4f0f\u5411\u91cfz\u4e2d\u53d6\u6837\u4ea7\u751f\u7684\uff0c\u800c\u4e0d\u662f\u5148\u524d\u5de5\u4f5c\u4e2d\u7684\u6846\u67b6\u7ea7\u5d4c\u5165\u7a7a\u95f4\u3002

    \u6211\u4eec\u901a\u8fc7\u4f7f\u7528\u5177\u6709\u76f8\u5e94\u52a8\u4f5c\u6807\u7b7e\u7684 3D \u4eba\u4f53\u8fd0\u52a8\u6570\u636e\u8bad\u7ec3\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u7279\u522b\u662f\uff0c\u6211\u4eec\u6784\u5efa\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u7f16\u7801\u5668-\u89e3\u7801\u5668\u67b6\u6784\uff0c\u5e76\u4f7f\u7528 VAE \u76ee\u6807\u5bf9\u5176\u8fdb\u884c\u8bad\u7ec3\u3002 \u6211\u4eec\u4f7f\u7528 SMPL [46] \u5bf9\u4eba\u4f53\u8fdb\u884c\u53c2\u6570\u5316\uff0c\u56e0\u4e3a\u5b83\u53ef\u4ee5\u8f93\u51fa\u5173\u8282\u4f4d\u7f6e\u6216\u8eab\u4f53\u8868\u9762\u3002 \u8fd9\u4e3a\u66f4\u597d\u5730\u6a21\u62df\u4e0e\u73af\u5883\u7684\u76f8\u4e92\u4f5c\u7528\u94fa\u5e73\u4e86\u9053\u8def\uff0c\u56e0\u4e3a\u8868\u9762\u662f\u6a21\u62df\u63a5\u89e6\u6240\u5fc5\u9700\u7684\u3002 \u6b64\u5916\uff0c\u8fd9\u79cd\u8868\u793a\u5141\u8bb8\u4f7f\u7528\u591a\u79cd\u91cd\u5efa\u635f\u5931\uff1a\u7ea6\u675f\u8fd0\u52a8\u6811\u4e2d\u7684\u96f6\u4ef6\u65cb\u8f6c\u3001\u5173\u8282\u4f4d\u7f6e\u6216\u8868\u9762\u70b9\u3002\u6587\u732e [40] \u548c\u6211\u4eec\u7684\u7ed3\u679c\u8868\u660e\uff0c\u635f\u5931\u7684\u7ec4\u5408\u7ed9\u51fa\u4e86\u6700\u771f\u5b9e\u7684\u751f\u6210\u8fd0\u52a8\u3002

    \u8fd0\u52a8\u5408\u6210\u7684\u5173\u952e\u6311\u6218\u662f\u751f\u6210\u5728\u611f\u77e5\u4e0a\u903c\u771f\u7684\u540c\u65f6\u5177\u6709\u591a\u6837\u6027\u7684\u5e8f\u5217\u3002\u8bb8\u591a\u8fd0\u52a8\u751f\u6210\u65b9\u6cd5\u90fd\u91c7\u7528\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u4f8b\u5982 LSTM [16] \u548c GRU [49]\u3002\u7136\u800c\uff0c\u8fd9\u4e9b\u65b9\u6cd5\u901a\u5e38\u4f1a\u5728\u4e00\u6bb5\u65f6\u95f4\u540e\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf [49] \u5e76\u4e14\u5bb9\u6613\u6f02\u79fb\u3002 \u6211\u4eec\u7684 Transformer \u6a21\u578b\u7684\u5173\u952e\u521b\u65b0\u662f\u4e3a\u89e3\u7801\u5668\u63d0\u4f9b\u4f4d\u7f6e\u7f16\u7801\u5e76\u7acb\u5373\u8f93\u51fa\u5b8c\u6574\u5e8f\u5217\u3002 \u6700\u8fd1\u5173\u4e8e\u795e\u7ecf\u8f90\u5c04\u573a\u7684\u5de5\u4f5c\u5df2\u7ecf\u666e\u53ca\u4e86\u4f4d\u7f6e\u7f16\u7801 [50]\uff1b \u6211\u4eec\u8fd8\u6ca1\u6709\u770b\u5230\u5b83\u50cf\u6211\u4eec\u4e00\u6837\u7528\u4e8e\u8fd0\u52a8\u751f\u6210\u3002 \u8fd9\u5141\u8bb8\u751f\u6210\u53ef\u53d8\u957f\u5ea6\u5e8f\u5217\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u8fd0\u52a8\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf\u7684\u95ee\u9898\u3002 \u6b64\u5916\uff0c\u636e\u6211\u4eec\u6240\u77e5\uff0c\u6211\u4eec\u7684\u65b9\u6cd5\u662f\u7b2c\u4e00\u4e2a\u521b\u5efa\u52a8\u4f5c\u6761\u4ef6\u5e8f\u5217\u7ea7\u5d4c\u5165\u7684\u65b9\u6cd5\u3002 \u6700\u63a5\u8fd1\u7684\u5de5\u4f5c\u662f Action2Motion [21]\uff0c\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5b83\u63d0\u51fa\u4e86\u4e00\u79cd\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u5176\u4e2d\u6f5c\u5728\u8868\u793a\u5904\u4e8e\u5e27\u7ea7\u522b\u3002 \u83b7\u5f97\u5e8f\u5217\u7ea7\u5d4c\u5165\u9700\u8981\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\uff1a\u6211\u4eec\u4e3a\u6b64\u76ee\u7684\u5f15\u5165\u4e86\u4e00\u79cd\u7ed3\u5408 Transformers \u548c VAE \u7684\u65b0\u65b9\u6cd5\uff0c\u8fd9\u4e5f\u663e\u7740\u63d0\u9ad8\u4e86\u57fa\u7ebf\u7684\u6027\u80fd\u3002

    \u6211\u4eec\u7684\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u95ee\u9898\u7684\u4e00\u4e2a\u7279\u5b9a\u6311\u6218\u662f\u5b58\u5728\u4e0e\u4e0d\u540c\u52a8\u4f5c\u6807\u7b7e\u914d\u5bf9\u7684\u6709\u9650\u52a8\u4f5c\u6355\u6349 (MoCap) \u6570\u636e\uff0c\u901a\u5e38\u5728 10 \u4e2a\u7c7b\u522b\u4e2d [31\u300163]\u3002 \u76f8\u53cd\uff0c\u6211\u4eec\u4f9d\u9760\u5355\u76ee\u8fd0\u52a8\u4f30\u8ba1\u65b9\u6cd5 [38] \u6765\u83b7\u5f97 3D \u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u5728 UESTC \u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6 [32] \u7684 40 \u4e2a\u7ec6\u7c92\u5ea6\u7c7b\u522b\u4e0a\u5448\u73b0\u6709\u5e0c\u671b\u7684\u7ed3\u679c\u3002 \u4e0e[21]\u76f8\u53cd\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u591a\u89c6\u89d2\u76f8\u673a\u6765\u8fdb\u884c\u5355\u76ee\u8f68\u8ff9\u4f30\u8ba1\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u7684\u6a21\u578b\u53ef\u80fd\u9002\u7528\u4e8e\u66f4\u5927\u7684\u5c3a\u5ea6\u3002 \u5c3d\u7ba1\u6709\u566a\u97f3\uff0c\u5355\u773c\u4f30\u8ba1\u88ab\u8bc1\u660e\u8db3\u4ee5\u7528\u4e8e\u8bad\u7ec3\uff0c\u5e76\u4e14\u4f5c\u4e3a\u6211\u4eec\u6a21\u578b\u7684\u989d\u5916\u597d\u5904\uff0c\u6211\u4eec\u80fd\u591f\u901a\u8fc7\u6211\u4eec\u5b66\u4e60\u7684\u8fd0\u52a8\u8868\u793a\u6765\u7f16\u7801\u89e3\u7801\u53bb\u566a\u4f30\u8ba1\u5e8f\u5217\u3002

    \u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u53ef\u4ee5\u589e\u5f3a\u73b0\u6709\u7684 MoCap \u6570\u636e\u96c6\uff0c\u8fd9\u4e9b\u6570\u636e\u96c6\u6602\u8d35\u4e14\u5927\u5c0f\u6709\u9650 [48,63]\u3002 \u6700\u8fd1\u7684\u7814\u7a76\u63d0\u4f9b\u4e86\u7528\u4e8e\u8bad\u7ec3\u52a8\u4f5c\u8bc6\u522b\u6a21\u578b\u7684\u5408\u6210\u4eba\u7c7b\u52a8\u4f5c\u89c6\u9891 [65]\uff0c\u663e\u793a\u4e86\u52a8\u4f5c\u591a\u6837\u6027\u548c\u6bcf\u4e2a\u52a8\u4f5c\u7684\u5927\u91cf\u6570\u636e\u7684\u91cd\u8981\u6027\u3002 \u8fd9\u79cd\u65b9\u6cd5\u53ef\u4ee5\u53d7\u76ca\u4e8e\u65e0\u9650\u6e90\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u5408\u6210\u3002 \u6211\u4eec\u901a\u8fc7\u52a8\u4f5c\u8bc6\u522b\u5b9e\u9a8c\u6765\u63a2\u8ba8\u8fd9\u4e2a\u95ee\u9898\u3002 \u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u5c3d\u7ba1\u5b58\u5728 domain gap\uff0c\u4f46\u751f\u6210\u7684\u8fd0\u52a8\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\uff0c\u5c24\u5176\u662f\u5728\u4f4e\u6570\u636e\u8bbe\u7f6e\u4e2d\u3002 \u6700\u540e\uff0c\u7d27\u51d1\u7684\u52a8\u4f5c\u611f\u77e5\u4eba\u4f53\u8fd0\u52a8\u6f5c\u5728\u7a7a\u95f4\u53ef\u4ee5\u7528\u4f5c\u5176\u4ed6\u4efb\u52a1\u7684\u5148\u51b3\u6761\u4ef6\uff0c\u4f8b\u5982\u89c6\u9891\u4e2d\u7684\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002

    \u6211\u4eec\u7684\u8d21\u732e\u6709\u56db\u65b9\u9762\uff1a(i) \u6211\u4eec\u4ecb\u7ecd\u4e86 ACTOR\uff0c\u8fd9\u662f\u4e00\u79cd\u65b0\u578b\u7684\u57fa\u4e8e Transformer \u7684\u6761\u4ef6 VAE\uff0c\u5e76\u8bad\u7ec3\u5b83\u901a\u8fc7\u4ece\u5e8f\u5217\u7ea7\u6f5c\u5728\u5411\u91cf\u4e2d\u91c7\u6837\u6765\u751f\u6210\u52a8\u4f5c\u6761\u4ef6\u4eba\u4f53\u8fd0\u52a8\u3002 (ii) \u6211\u4eec\u8bc1\u660e\u53ef\u4ee5\u4f7f\u7528\u4ece\u5355\u773c\u89c6\u9891\u4f30\u8ba1\u7684\u5608\u6742 3D \u4eba\u4f53\u59ff\u52bf\u6765\u5b66\u4e60\u751f\u6210\u903c\u771f\u7684 3D \u4eba\u4f53\u8fd0\u52a8\uff1b (iii) \u6211\u4eec\u5bf9\u67b6\u6784\u548c\u635f\u5931\u7ec4\u4ef6\u8fdb\u884c\u5168\u9762\u7684\u6d88\u878d\u7814\u7a76\uff0c\u5728\u591a\u4e2a\u6570\u636e\u96c6\u4e0a\u83b7\u5f97\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff1b (iv) \u6211\u4eec\u4e3a\u52a8\u4f5c\u8bc6\u522b\u548c MoCap \u53bb\u566a\u6a21\u578b\u8bf4\u660e\u4e86\u4e24\u4e2a\u7528\u4f8b\u3002 \u8be5\u4ee3\u7801\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

    "},{"location":"pape_read/ACTOR/trans/#related-work","title":"Related Work","text":"

    \u6211\u4eec\u7b80\u8981\u56de\u987e\u4e86\u6709\u5173\u8fd0\u52a8\u9884\u6d4b\u3001\u8fd0\u52a8\u5408\u6210\u3001\u5355\u773c\u8fd0\u52a8\u4f30\u8ba1\u4ee5\u53ca VAE \u80cc\u666f\u4e0b\u7684 Transformers \u7684\u76f8\u5173\u6587\u732e\u3002

    \u672a\u6765\u4eba\u4f53\u8fd0\u52a8\u9884\u6d4b\u3002\u4eba\u4f53\u8fd0\u52a8\u5206\u6790\u7684\u7814\u7a76\u5386\u53f2\u60a0\u4e45\uff0c\u53ef\u4ee5\u8ffd\u6eaf\u5230 20 \u4e16\u7eaa 80 \u5e74\u4ee3 [5,17,19,52]\u3002 \u7ed9\u5b9a\u8fc7\u53bb\u7684\u8fd0\u52a8\u6216\u521d\u59cb\u59ff\u52bf\uff0c\u9884\u6d4b\u672a\u6765\u7684\u5e27\u88ab\u79f0\u4e3a\u8fd0\u52a8\u9884\u6d4b\u3002 \u65e9\u671f\u7814\u7a76\u4e2d\u5df2\u7ecf\u91c7\u7528\u4e86\u7edf\u8ba1\u6a21\u578b [7, 18]\u3002 \u6700\u8fd1\uff0c\u968f\u7740 GANs [20] \u6216 VAEs [37] \u7b49\u795e\u7ecf\u7f51\u7edc\u751f\u6210\u6a21\u578b\u7684\u8fdb\u5c55\uff0c\u4e00\u4e9b\u5de5\u4f5c\u663e\u793a\u51fa\u53ef\u559c\u7684\u7ed3\u679c\u3002 \u793a\u4f8b\u5305\u62ec\u7528\u4e8e\u672a\u6765\u8fd0\u52a8\u9884\u6d4b\u7684 HP-GAN [6] \u548c\u5faa\u73af VAE [22]\u3002 \u5927\u591a\u6570\u5de5\u4f5c\u5c06\u8eab\u4f53\u89c6\u4e3a\u9aa8\u67b6\uff0c\u5c3d\u7ba1\u6700\u8fd1\u7684\u5de5\u4f5c\u5229\u7528\u4e86\u5b8c\u6574\u7684 3D \u8eab\u4f53\u5f62\u72b6\u6a21\u578b [3, 74]\u3002 \u4e0e [74] \u7c7b\u4f3c\uff0c\u6211\u4eec\u4e5f\u8d85\u8d8a\u4e86\u7a00\u758f\u5173\u8282\u5e76\u5c06\u9876\u70b9\u5408\u5e76\u5230\u8eab\u4f53\u8868\u9762\u3002 DLow [71] \u4fa7\u91cd\u4e8e\u4ece\u9884\u8bad\u7ec3\u6a21\u578b\u4e2d\u591a\u6837\u5316\u672a\u6765\u8fd0\u52a8\u7684\u91c7\u6837\u3002 [11] \u4f7f\u7528\u5173\u4e8e\u5bf9\u8c61\u4ea4\u4e92\u7684\u4e0a\u4e0b\u6587\u7ebf\u7d22\u6267\u884c\u6709\u6761\u4ef6\u7684\u672a\u6765\u9884\u6d4b\u3002 \u6700\u8fd1\uff0c[42] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e Transformer \u7684\u821e\u8e48\u751f\u6210\u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u4ee5\u97f3\u4e50\u548c\u8fc7\u53bb\u7684\u52a8\u4f5c\u4e3a\u6761\u4ef6\u3002 \u6bb5\u7b49\u3002 [14] \u4f7f\u7528\u53d8\u5f62\u91d1\u521a\u5b8c\u6210\u8fd0\u52a8\u3002 \u6709\u4e00\u4e2a\u5173\u4e8e\u8fd0\u52a8\u201c\u4e2d\u95f4\u201d\u7684\u76f8\u5173\u5de5\u4f5c\uff0c\u5b83\u91c7\u7528\u8fc7\u53bb\u548c\u672a\u6765\u7684\u59ff\u52bf\uff0c\u5e76\u201c\u4fee\u590d\u201d\u5b83\u4eec\u4e4b\u95f4\u7684\u5408\u7406\u8fd0\u52a8\uff1b \u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 [23]\u3002 \u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5728\u6ca1\u6709\u4efb\u4f55\u8fc7\u53bb\u89c2\u5bdf\u7684\u60c5\u51b5\u4e0b\u5408\u6210\u8fd0\u52a8\u3002 \u4eba\u4f53\u8fd0\u52a8\u5408\u6210\u3002 \u867d\u7136\u6709\u5927\u91cf\u5173\u4e8e\u672a\u6765\u9884\u6d4b\u7684\u6587\u732e\uff0c\u4f46\u4ece\u5934\u5f00\u59cb\u7efc\u5408\u53d7\u5230\u7684\u5173\u6ce8\u76f8\u5bf9\u8f83\u5c11\u3002 \u975e\u5e38\u65e9\u671f\u7684\u5de5\u4f5c\u4f7f\u7528 PCA [51] \u548c GPLVM [64] \u6765\u5b66\u4e60\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u5faa\u73af\u8fd0\u52a8\u7684\u7edf\u8ba1\u6a21\u578b\u3002 \u5bf9\u591a\u79cd\u591a\u6837\u7684\u52a8\u4f5c\u8fdb\u884c\u6761\u4ef6\u7efc\u5408\u8981\u56f0\u96be\u5f97\u591a\u3002 DVGAN [43] \u8bad\u7ec3\u4e00\u4e2a\u751f\u6210\u6a21\u578b\uff0c\u8be5\u6a21\u578b\u4ee5\u8868\u793a MoCap \u6570\u636e\u96c6\u4e2d\u52a8\u4f5c\u7684\u77ed\u6587\u672c\u4e3a\u6761\u4ef6\uff0c\u4f8b\u5982 Human3.6M [30\u300131] \u548c CMU [63]\u3002 Text2Action [1] \u548c Language2Pose [2] \u540c\u6837\u63a2\u7d22\u4e86\u6839\u636e\u6587\u672c\u63cf\u8ff0\u8c03\u8282\u52a8\u4f5c\u751f\u6210\u3002 Music-to-Dance [39] \u548c [41] \u7814\u7a76\u97f3\u4e50\u6761\u4ef6\u751f\u6210\u3002 QuaterNet [56] \u4fa7\u91cd\u4e8e\u5728\u7ed9\u5b9a\u5730\u9762\u8f68\u8ff9\u548c\u5e73\u5747\u901f\u5ea6\u7684\u60c5\u51b5\u4e0b\u751f\u6210\u884c\u8d70\u548c\u8dd1\u6b65\u7b49\u8fd0\u52a8\u52a8\u4f5c\u3002 [69] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e\u5377\u79ef\u7684\u751f\u6210\u6a21\u578b\uff0c\u7528\u4e8e\u5728\u4e0d\u6307\u5b9a\u52a8\u4f5c\u7684\u60c5\u51b5\u4e0b\u5b9e\u73b0\u903c\u771f\u7684\u4f46\u4e0d\u53d7\u7ea6\u675f\u7684\u8fd0\u52a8\u3002 \u7c7b\u4f3c\u5730\uff0c[73] \u5408\u6210\u4efb\u610f\u5e8f\u5217\uff0c\u5173\u6ce8\u65f6\u95f4\u4e0a\u7684\u65e0\u754c\u8fd0\u52a8\u3002

    \u65e0\u7ea6\u675f\u8fd0\u52a8\u5408\u6210\u7684\u8bb8\u591a\u65b9\u6cd5\u5f80\u5f80\u4ee5\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u52a8\u4f5c\u4e3a\u4e3b\u5bfc\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u6211\u4eec\u7684\u6a21\u578b\u80fd\u591f\u4ece\u66f4\u4e00\u822c\u7684\uff0c\u65e0\u5468\u671f\u7684\uff0c\u9884\u5b9a\u4e49\u7684\u884c\u52a8\u7c7b\u522b\uff0c\u4e0e\u884c\u52a8\u8bc6\u522b\u6570\u636e\u96c6\u517c\u5bb9\u7684\u6837\u672c\u3002\u5728\u8fd9\u65b9\u9762\uff0c[75]\u5f15\u5165\u4e86\u8d1d\u53f6\u65af\u65b9\u6cd5\uff0c\u5176\u4e2d\u9690\u85cf\u534a\u9a6c\u5c14\u53ef\u592b\u6a21\u578b\u7528\u4e8e\u8054\u5408\u8bad\u7ec3\u751f\u6210\u6a21\u578b\u548c\u5224\u522b\u6a21\u578b\u3002\u4e0e\u6211\u4eec\u7c7b\u4f3c\uff0c[75]\u8868\u660e\uff0c\u4ed6\u4eec\u751f\u6210\u7684\u52a8\u4f5c\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\u7684\u884c\u52a8\u8bc6\u522b\u3002\u7136\u800c\uff0c\u6839\u636e\u5224\u522b\u5668\u5206\u7c7b\u7ed3\u679c\uff0c\u5b83\u4eec\u751f\u6210\u7684\u5e8f\u5217\u662f\u4f2a\u6807\u8bb0\u7684\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u6211\u4eec\u7684\u6761\u4ef6\u6a21\u578b\u80fd\u591f\u4ee5\u4e00\u79cd\u53d7\u63a7\u7684\u65b9\u5f0f\u5408\u6210\u8fd0\u52a8\uff0c\u4f8b\u5982\u5e73\u8861\u8bad\u7ec3\u96c6\u3002\u4e0e\u6211\u4eec\u7684\u5de5\u4f5c\u6700\u76f8\u4f3c\u7684\u662f Action2Motion [21] \uff0c\u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e GRU \u67b6\u6784\u7684\u6bcf\u5e27\u64cd\u4f5c VAE\u3002\u6211\u4eec\u7684\u5e8f\u5217\u7ea7 VAE \u6f5c\u5728\u7a7a\u95f4\uff0c\u7ed3\u5408\u57fa\u4e8e\u53d8\u538b\u5668\u7684\u8bbe\u8ba1\u63d0\u4f9b\u4e86\u663e\u8457\u7684\u4f18\u52bf\uff0c\u5982\u6211\u4eec\u7684\u5b9e\u9a8c\u6240\u793a\u3002

    \u5176\u4ed6\u6700\u8fd1\u7684\u5de5\u4f5c[25,72]\u4f7f\u7528\u89c4\u8303\u5316\u6d41\u6765\u89e3\u51b3\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u548c\u751f\u6210\u95ee\u9898\u3002\u51e0\u4e2a\u4f5c\u54c1[29,36,67]\u5b66\u4e60\u4e00\u4e2a\u8fd0\u52a8\u6d41\u5f62\uff0c\u5e76\u4f7f\u7528\u5b83\u7684\u8fd0\u52a8\u53bb\u566a\uff0c\u8fd9\u662f\u6211\u4eec\u7684\u7528\u4f8b\u4e4b\u4e00\u3002\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u56fe\u5f62\u6587\u732e\u7684\u4e3b\u9898\uff0c\u8fd9\u5f80\u5f80\u96c6\u4e2d\u5728\u52a8\u753b\u5e08\u63a7\u5236\u3002\u770b\uff0c\u4f8b\u5982\uff0c[27]\u5b66\u4e60\u52a8\u4f5c\u5339\u914d\u548c[40]\u89d2\u8272\u52a8\u753b\u3002\u8fd9\u91cc\u6700\u76f8\u5173\u7684\u662f\u76f8\u51fd\u6570\u795e\u7ecf\u7f51\u7edc[28]\u548c\u795e\u7ecf\u72b6\u6001\u673a[61]\u3002\u4e24\u8005\u90fd\u5229\u7528\u4e86\u7531\u6b63\u5f26\u51fd\u6570\u76f8\u4f4d\u9a71\u52a8\u7684\u52a8\u4f5c\u7684\u6982\u5ff5\u3002\u8fd9\u4e0e\u4f4d\u7f6e\u7f16\u7801\u7684\u601d\u60f3\u6709\u5173\uff0c\u4f46\u4e0e\u6211\u4eec\u7684\u65b9\u6cd5\u4e0d\u540c\uff0c\u5b83\u4eec\u7684\u65b9\u6cd5\u9700\u8981\u4eba\u5de5\u5206\u5272\u64cd\u4f5c\u5e76\u6784\u5efa\u8fd9\u4e9b\u76f8\u51fd\u6570\u3002

    \u5355\u76ee\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002\u6765\u81ea\u89c6\u9891\u7684\u8fd0\u52a8\u4f30\u8ba1[35,38,47]\u6700\u8fd1\u53d6\u5f97\u4e86\u91cd\u5927\u8fdb\u5c55\uff0c\u4f46\u8d85\u51fa\u4e86\u6211\u4eec\u7684\u8303\u56f4\u3002\u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u91c7\u7528 VIBE [38]\u4ece\u52a8\u4f5c\u6807\u8bb0\u7684\u89c6\u9891\u6570\u636e\u96c6\u4e2d\u83b7\u5f97\u8bad\u7ec3\u8fd0\u52a8\u5e8f\u5217\u3002

    Transformer VAE\u3002Transformer \u6700\u8fd1\u5728\u8bed\u8a00\u4efb\u52a1\u65b9\u9762\u53d6\u5f97\u7684\u6210\u529f\u589e\u52a0\u4e86\u4eba\u4eec\u5bf9\u57fa\u4e8e\u6ce8\u610f\u529b\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7684\u5174\u8da3\u3002\u4e00\u4e9b\u5de5\u7a0b\u4f7f\u7528\u53d8\u538b\u5668\u7ed3\u5408\u751f\u6210 VAE \u57f9\u8bad\u3002\u5177\u4f53\u7684\u4f8b\u5b50\u5305\u62ec\u6545\u4e8b\u751f\u6210[15] \uff0c\u60c5\u611f\u5206\u6790[10] \uff0c\u53cd\u5e94\u751f\u6210[44]\u548c\u97f3\u4e50\u751f\u6210[33]\u3002[33]\u7684\u5de5\u4f5c\u5b66\u4e60\u6bcf\u4e2a\u65f6\u95f4\u6846\u67b6\u7684\u6f5c\u5728\u5d4c\u5165\uff0c\u800c[10]\u5e73\u5747\u7684\u9690\u85cf\u72b6\u6001\uff0c\u4ee5\u83b7\u5f97\u4e00\u4e2a\u5355\u4e00\u7684\u6f5c\u5728\u4ee3\u7801\u3002\u53e6\u4e00\u65b9\u9762\uff0c[15]\u6267\u884c\u6ce8\u610f\u529b\u5e73\u5747\u6c60\u968f\u7740\u65f6\u95f4\u7684\u63a8\u79fb\u3002\u4e0e\u8fd9\u4e9b\u5de5\u4f5c\u76f8\u53cd\uff0c\u6211\u4eec\u91c7\u7528\u53ef\u5b66\u4e60\u7684\u6807\u8bb0\uff0c\u5982[12,13]\u4e2d\u6240\u793a\uff0c\u5c06\u8f93\u5165\u603b\u7ed3\u4e3a\u5e8f\u5217\u7ea7\u5d4c\u5165\u3002

    \u56fe2\uff1a\u65b9\u6cd5\u6982\u8ff0\u3002\u6211\u4eec\u8bf4\u660e\u4e86\u6211\u4eec\u57fa\u4e8eTransformer\u7684VAE\u6a21\u578b\u7684\u7f16\u7801\u5668\uff08\u5de6\uff09\u548c\u89e3\u7801\u5668\uff08\u53f3\uff09\uff0c\u8be5\u6a21\u578b\u751f\u6210\u4e86\u52a8\u4f5c\u6761\u4ef6\u7684\u8fd0\u52a8\u3002\u7ed9\u5b9a\u4e00\u4e32\u8eab\u4f53\u59ff\u52bfP1, ... , PT\u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7ea\uff0c\u7f16\u7801\u5668\u8f93\u51fa\u5206\u5e03\u53c2\u6570\uff0c\u6211\u4eec\u5728\u6b64\u57fa\u7840\u4e0a\u5b9a\u4e49KL\u635f\u5931\uff08LKL\uff09\u3002\u6211\u4eec\u4f7f\u7528\u6bcf\u4e2a\u52a8\u4f5c\u7684\u989d\u5916\u53ef\u5b66\u4e60\u6807\u8bb0\uff08\u00b5 token a \u548c \u03a3 token a \uff09\u4f5c\u4e3a\u4eceTransformer\u7f16\u7801\u5668\u83b7\u5f97\u00b5\u548c\u03a3\u7684\u65b9\u6cd5\u3002\u4f7f\u7528\u00b5\u548c\u03a3\uff0c\u6211\u4eec\u5bf9\u8fd0\u52a8\u7684\u6f5c\u5728\u8868\u5f81z\u2208M\u8fdb\u884c\u91c7\u6837\u3002\u89e3\u7801\u5668\u5c06\u6f5c\u4f0f\u5411\u91cfz\u3001\u52a8\u4f5c\u6807\u7b7ea\u548c\u6301\u7eed\u65f6\u95f4T\u4f5c\u4e3a\u8f93\u5165\u3002\u884c\u52a8\u51b3\u5b9a\u4e86\u53ef\u5b66\u4e60\u7684b\u6807\u8bb0a\u52a0\u6cd5\u6807\u8bb0\uff0c\u6301\u7eed\u65f6\u95f4\u51b3\u5b9a\u4e86\u8f93\u5165\u5230\u89e3\u7801\u5668\u7684\u4f4d\u7f6e\u7f16\u7801\uff08PE\uff09\u7684\u6570\u91cf\u3002\u89e3\u7801\u5668\u8f93\u51fa\u6574\u4e2a\u5e8f\u5217Pb1, . . . , PbT\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8ba1\u7b97\u91cd\u5efa\u635f\u5931LP\u3002\u6b64\u5916\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u53ef\u5fae\u5206\u7684SMPL\u5c42\u8ba1\u7b97\u9876\u70b9\uff0c\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u9876\u70b9\u635f\u5931\uff08LV \uff09\u3002\u5bf9\u4e8e\u8bad\u7ec3\u6765\u8bf4\uff0cz\u662f\u4f5c\u4e3a\u7f16\u7801\u5668\u7684\u8f93\u51fa\u5f97\u5230\u7684\uff1b\u5bf9\u4e8e\u751f\u6210\u6765\u8bf4\uff0c\u5b83\u662f\u4ece\u9ad8\u65af\u5206\u5e03\u4e2d\u968f\u673a\u62bd\u53d6\u7684\u3002

    "},{"location":"pape_read/ACTOR/trans/#action-conditioned-motion-generation","title":"Action-Conditioned Motion Generation","text":"

    \u95ee\u9898\u5b9a\u4e49\u3002\u8eab\u4f53\u8fd0\u52a8\u6240\u5b9a\u4e49\u7684\u52a8\u4f5c\u53ef\u4ee5\u662f\u8eab\u4f53\u90e8\u4f4d\u7684\u65cb\u8f6c\u62e5\u6709\u5c5e\u6027\uff0c\u4e0e\u8eab\u4efd\u7279\u5b9a\u7684\u8eab\u4f53\u5f62\u72b6\u65e0\u5173\u3002\u4e3a\u4e86\u80fd\u591f\u4ea7\u751f\u4e0e\u4e0d\u540c\u5f62\u6001\u7684\u884c\u4e3a\u8005\u7684\u8fd0\u52a8\uff0c\u8fd9\u662f\u7406\u60f3\u7684\u5206\u79bb\u59ff\u52bf\u548c\u5f62\u72b6\u3002\u56e0\u6b64\uff0c\u4e0d\u5931\u4e00\u822c\u6027\uff0c\u6211\u4eec\u91c7\u7528\u4e86 SMPL \u8eab\u4f53\u6a21\u578b[46] \uff0c\u8fd9\u662f\u4e00\u4e2a\u5206\u79bb\u7684\u8eab\u4f53\u8868\u793a(\u7c7b\u4f3c\u4e8e\u6700\u8fd1\u7684\u6a21\u578b[53,55,58,68])\u3002\u5ffd\u7565\u5f62\u72b6\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u751f\u6210\u4e00\u7cfb\u5217\u7684\u59ff\u6001\u53c2\u6570\u3002\u66f4\u6b63\u5f0f\u5730\u8bf4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a (\u6765\u81ea\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u52a8\u4f5c\u8303\u7574 a \u2208 A)\u548c\u4e00\u4e2a\u6301\u7eed\u65f6\u95f4 T\uff0c\u6211\u4eec\u751f\u6210\u4e00\u4e2a\u4f53\u6784\u6210\u7684\u5e8f\u5217 R1\uff0c... \uff0cRT \u548c\u4e00\u4e2a\u6839\u5173\u8282\u7684\u5e73\u79fb\u5e8f\u5217\u8868\u793a\u4e3a\u4f4d\u79fb\uff0cD1\uff0c... \uff0cDT (\u4e0e DT \u2208 R3\uff0csomething t \u2208{1\uff0c... \uff0cT })

    \u52a8\u4f5c\u8868\u73b0\u6cd5\u3002\u6bcf\u5e27 SMPL \u59ff\u6001\u53c2\u6570\u8868\u793a\u8fd0\u52a8\u5b66\u6811\u4e2d\u768423\u4e2a\u5173\u8282\u65cb\u8f6c\u548c\u4e00\u4e2a\u5168\u5c40\u65cb\u8f6c\u3002\u91c7\u7528\u8fde\u7eed6D \u65cb\u8f6c\u8868\u793a\u6cd5\u8fdb\u884c\u8bad\u7ec3[76] \uff0c\u4f7f Rt \u2208 R24 \u00d7 6\u3002\u8bbe Pt \u662f Rt \u548c Dt \u7684\u7ec4\u5408\uff0c\u8868\u793a\u5355\u5e27\u4e2d\u8eab\u4f53\u7684\u59ff\u52bf\u548c\u4f4d\u7f6e t\u3002\u5b8c\u6574\u7684\u52a8\u4f5c\u662f P1\uff0c. . \uff0cPT\u3002\u7ed9\u5b9a\u4e00\u4e2a\u751f\u6210\u5668\u8f93\u51fa\u4f4d\u59ff Pt \u548c\u4efb\u610f\u5f62\u72b6\u53c2\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u7528[46]\u53ef\u5fae\u5730\u5f97\u5230\u4f53\u7f51\u683c\u9876\u70b9(Vt)\u548c\u4f53\u5173\u8282\u5750\u6807(Jt)\u3002

    "},{"location":"pape_read/ACTOR/trans/#conditional-transformer-vae-for-motions","title":"Conditional Transformer VAE for Motions","text":"

    \u6211\u4eec\u91c7\u7528\u6761\u4ef6\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668(CVAE)\u6a21\u578b[60] \uff0c\u5e76\u5c06\u52a8\u4f5c\u7c7b\u522b\u4fe1\u606f\u8f93\u5165\u5230\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u3002\u66f4\u5177\u4f53\u5730\u8bf4\uff0c\u6211\u4eec\u7684\u6a21\u578b\u662f\u4e00\u4e2a\u52a8\u4f5c\u6761\u4ef6\u53d8\u538b\u5668 VAE (ACTOR) \uff0c\u5176\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u7531\u53d8\u538b\u5668\u5c42\u7ec4\u6210(\u53c2\u89c1\u56fe2\u4ee5\u83b7\u5f97\u6982\u8ff0)\u3002

    \u7f16\u7801\u5668\u3002\u8be5\u7f16\u7801\u5668\u91c7\u7528\u4efb\u610f\u957f\u5ea6\u7684\u59ff\u6001\u5e8f\u5217\uff0c\u4ee5\u52a8\u4f5c\u6807\u7b7e a \u4e3a\u8f93\u5165\uff0c\u8f93\u51fa\u8fd0\u52a8\u6f5c\u4f0f\u7a7a\u95f4\u7684\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3\u3002\u5229\u7528\u91cd\u53c2\u6570\u5316\u6280\u5de7[37] \uff0c\u6211\u4eec\u4ece\u8fd9\u4e2a\u5206\u5e03\u4e2d\u62bd\u6837\u51fa\u4e00\u4e2a\u6f5c\u5411\u91cf z \u2208 M\uff0c\u5176\u4e2d MdRd\u3002\u9996\u5148\u5c06\u6240\u6709\u8f93\u5165\u59ff\u6001\u53c2\u6570(R)\u548c\u5e73\u79fb(D)\u7ebf\u6027\u5d4c\u5165\u5230 Rd \u7a7a\u95f4\u4e2d\u3002\u5f53\u6211\u4eec\u5c06\u4efb\u610f\u957f\u5ea6\u7684\u5e8f\u5217\u5d4c\u5165\u5230\u4e00\u4e2a\u6f5c\u5728\u7a7a\u95f4(\u5e8f\u5217\u7ea7\u5d4c\u5165)\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5408\u5e76\u65f6\u95f4\u7ef4\u6570\u3002\u5728\u5176\u4ed6\u9886\u57df\u4e2d\uff0c\u5df2\u7ecf\u5f15\u5165\u4e86[\u7c7b]\u4ee4\u724c\u7528\u4e8e\u6c60\u7684\u76ee\u7684\uff0c\u4f8b\u5982\uff0c\u5728\u5e26\u6709 BERT [12]\u7684 NLP \u4e2d\uff0c\u4ee5\u53ca\u6700\u8fd1\u5728\u5e26\u6709 ViT [13]\u7684\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u3002\u53d7\u6b64\u65b9\u6cd5\u7684\u542f\u53d1\uff0c\u6211\u4eec\u7c7b\u4f3c\u5730\u5728\u8f93\u5165\u524d\u9762\u52a0\u4e0a\u53ef\u5b66\u4e60\u7684\u4ee4\u724c\uff0c\u5e76\u4e14\u53ea\u4f7f\u7528\u76f8\u5e94\u7684\u7f16\u7801\u5668\u8f93\u51fa\u4f5c\u4e3a\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\u7684\u65b9\u6cd5\u3002\u4e3a\u6b64\uff0c\u6211\u4eec\u5728\u6bcf\u4e2a\u64cd\u4f5c\u4e2d\u5305\u62ec\u4e24\u4e2a\u989d\u5916\u7684\u53ef\u5b66\u4e60\u53c2\u6570: \u03bc \u6807\u8bb0 a \u548c \u03a3 \u6807\u8bb0 a\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u201c\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u201d\u3002\u6211\u4eec\u5c06\u5d4c\u5165\u7684\u59ff\u52bf\u5e8f\u5217\u9644\u52a0\u5230\u8fd9\u4e9b\u6807\u8bb0\u3002\u4ea7\u751f\u7684\u53d8\u538b\u5668\u7f16\u7801\u5668\u8f93\u5165\u662f\u4f4d\u7f6e\u7f16\u7801\u7684\u6b63\u5f26\u51fd\u6570\u5f62\u5f0f\u7684\u603b\u548c\u3002\u6211\u4eec\u901a\u8fc7\u53d6\u7f16\u7801\u5668\u7684\u524d\u4e24\u4e2a\u8f93\u51fa\u5bf9\u5e94\u4e8e\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u6765\u83b7\u5f97\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3 (\u5373\u53bb\u6389\u5176\u4f59\u7684\u6807\u8bb0)\u3002\u89e3\u7801\u5668\u3002\u7ed9\u5b9a\u4e00\u4e2a\u6f5c\u5728\u5411\u91cf z \u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a\uff0c\u89e3\u7801\u5668\u5728\u4e00\u6b21\u62cd\u6444\u4e2d\u5728\u7ed9\u5b9a\u7684\u6301\u7eed\u65f6\u95f4\u5185\u751f\u6210\u4e00\u4e2a\u771f\u5b9e\u7684\u4eba\u4f53\u8fd0\u52a8(\u5373\uff0c\u4e0d\u662f\u81ea\u56de\u5f52)\u3002\u6211\u4eec\u4f7f\u7528\u53d8\u538b\u5668\u89e3\u7801\u5668\u6a21\u578b\uff0c\u5176\u4e2d\u6211\u4eec\u63d0\u4f9b\u7684\u65f6\u95f4\u4fe1\u606f\u4f5c\u4e3a\u4e00\u4e2a\u67e5\u8be2(\u5728 T \u6b63\u5f26\u4f4d\u7f6e\u7f16\u7801\u7684\u5f62\u5f0f) \uff0c\u548c\u6f5c\u5728\u7684\u5411\u91cf\u7ed3\u5408\u7684\u884c\u52a8\u4fe1\u606f\uff0c\u4f5c\u4e3a\u5173\u952e\u548c\u503c\u3002\u4e3a\u4e86\u5408\u5e76\u52a8\u4f5c\u4fe1\u606f\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6dfb\u52a0\u4e00\u4e2a\u53ef\u5b66\u4e60\u7684\u504f\u89c1 b \u6807\u8bb0 a \u6765\u5c06\u6f5c\u5728\u8868\u5f81\u8f6c\u79fb\u5230\u4e00\u4e2a\u52a8\u4f5c\u4f9d\u8d56\u7684\u7a7a\u95f4\u3002\u53d8\u538b\u5668\u89e3\u7801\u5668\u8f93\u51fa\u4e00\u7cfb\u5217\u7684 T \u77e2\u91cf\uff0c\u4ece\u4e2d\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7684 Pb1\uff0c. . \uff0cPbT \u7684\u7ebf\u6027\u6295\u5f71\u3002\u5229\u7528\u53ef\u5fae SMPL \u5c42\u83b7\u5f97\u7ed9\u5b9a\u7684\u4f4d\u59ff\u53c2\u6570\u4f5c\u4e3a\u89e3\u7801\u5668\u8f93\u51fa\u7684\u9876\u70b9\u548c\u5173\u8282\u3002

    "},{"location":"pape_read/ACTOR/trans/#training","title":"Training","text":"

    \u6211\u4eec\u5b9a\u4e49\u4e86\u51e0\u4e2a\u635f\u5931\u9879\u6765\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b\uff0c\u5e76\u5728\u7b2c 4.2 \u8282\u4e2d\u8fdb\u884c\u4e86\u6d88\u878d\u7814\u7a76\u3002 \u59ff\u52bf\u53c2\u6570 (LP) \u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5728\u5730\u9762\u5b9e\u51b5\u59ff\u52bf P1,... \u4e4b\u95f4\u4f7f\u7528 L2 \u635f\u5931\u3002 . . , PT \u548c\u6211\u4eec\u7684\u9884\u6d4b Pb1, . . . , PbT \u4f5c\u4e3a LP = PT t=1\u2225Pt \u2212 Pbt\u2225 2 2 \u3002 \u8bf7\u6ce8\u610f\uff0c\u6b64\u635f\u5931\u5305\u542b SMPL \u65cb\u8f6c\u548c\u6839\u5e73\u79fb\u3002 \u5f53\u6211\u4eec\u901a\u8fc7\u4e22\u5f03\u5e73\u79fb\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u5c06\u8fd9\u4e2a\u672f\u8bed\u5206\u6210\u4e24\u90e8\u5206\uff1aLR \u548c LD\uff0c\u5206\u522b\u7528\u4e8e\u65cb\u8f6c\u548c\u5e73\u79fb\u3002

    \u9876\u70b9\u5750\u6807 (LV) \u4e0a\u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5c06 SMPL \u59ff\u52bf Pt \u548c Pbt \u9988\u9001\u5230\u5177\u6709\u5e73\u5747\u5f62\u72b6\uff08\u5373 \u03b2 = \u20d70\uff09\u7684\u53ef\u5fae\u5206 SMPL \u5c42\uff08\u6ca1\u6709\u53ef\u5b66\u4e60\u53c2\u6570\uff09\u4ee5\u83b7\u5f97\u7f51\u683c Vt \u548c Vbt \u7684\u6839\u4e2d\u5fc3\u9876\u70b9\u3002 \u6211\u4eec\u901a\u8fc7\u4e0e\u5730\u9762\u5b9e\u51b5\u9876\u70b9 Vt \u6bd4\u8f83\u6765\u5b9a\u4e49 L2 \u635f\u5931\uff0c\u5373 LV = PT t=1\u2225Vt \u2212 Vbt\u2225 2 2 \u3002 \u6211\u4eec\u8fdb\u4e00\u6b65\u5728\u4e00\u7ec4\u66f4\u7a00\u758f\u7684\u70b9\u4e0a\u4f7f\u7528\u635f\u5931 LJ \u8fdb\u884c\u5b9e\u9a8c\uff0c\u4f8b\u5982\u901a\u8fc7 SMPL \u8054\u5408\u56de\u5f52\u5668\u83b7\u5f97\u7684\u8054\u5408\u4f4d\u7f6e Jbt\u3002 \u7136\u800c\uff0c\u6b63\u5982\u7b2c 4.2 \u8282\u6240\u793a\uff0c\u6211\u4eec\u6ca1\u6709\u5728\u6700\u7ec8\u6a21\u578b\u4e2d\u5305\u542b\u8be5\u672f\u8bed\u3002 KL\u635f\u5931\uff08LKL\uff09\u3002 \u4e0e\u6807\u51c6 VAE \u4e00\u6837\uff0c\u6211\u4eec\u901a\u8fc7\u9f13\u52b1\u6f5c\u5728\u7a7a\u95f4\u7c7b\u4f3c\u4e8e\u9ad8\u65af\u5206\u5e03\u6765\u89c4\u8303\u5316\u6f5c\u5728\u7a7a\u95f4\uff0c\u5176\u4e2d \u00b5 \u662f\u7a7a\u5411\u91cf\uff0c\u03a3 \u662f\u8eab\u4efd\u77e9\u9635\u3002 \u6211\u4eec\u6700\u5c0f\u5316\u7f16\u7801\u5668\u5206\u5e03\u548c\u8be5\u76ee\u6807\u5206\u5e03\u4e4b\u95f4\u7684 Kullback\u2013Leibler (KL) \u6563\u5ea6\u3002 \u7531\u6b64\u4ea7\u751f\u7684\u603b\u635f\u5931\u88ab\u5b9a\u4e49\u4e3a\u4e0d\u540c\u9879\u7684\u603b\u548c\uff1aL = LP + LV + \u03bbKLLKL\u3002 \u6211\u4eec\u51ed\u7ecf\u9a8c\u8bc1\u660e\u4e86\u5728\u6211\u4eec\u7684\u5b9e\u9a8c\u4e2d\u4f7f\u7528 \u03bbKL\uff08\u76f8\u5f53\u4e8e \u03b2-VAE [26] \u4e2d\u7684 \u03b2 \u9879\uff09\u8fdb\u884c\u52a0\u6743\u4ee5\u83b7\u5f97\u591a\u6837\u6027\u548c\u73b0\u5b9e\u4e3b\u4e49\u4e4b\u95f4\u7684\u826f\u597d\u6743\u8861\u7684\u91cd\u8981\u6027\uff08\u53c2\u89c1\u9644\u5f55 A.1 \u8282\uff09 ). \u5269\u4f59\u7684\u635f\u5931\u9879\u53ea\u662f\u7b80\u5355\u5730\u540c\u7b49\u52a0\u6743\uff0c\u901a\u8fc7\u8c03\u6574\u53ef\u80fd\u4f1a\u8fdb\u4e00\u6b65\u6539\u8fdb\u3002 \u6211\u4eec\u4f7f\u7528\u56fa\u5b9a\u5b66\u4e60\u7387\u4e3a 0.0001 \u7684 AdamW \u4f18\u5316\u5668\u3002 \u5c0f\u6279\u91cf\u5927\u5c0f\u8bbe\u7f6e\u4e3a 20\uff0c\u6211\u4eec\u53d1\u73b0\u6027\u80fd\u5bf9\u8fd9\u4e2a\u8d85\u53c2\u6570\u5f88\u654f\u611f\uff08\u53c2\u89c1\u9644\u5f55 A.2 \u8282\uff09\u3002 \u6211\u4eec\u5206\u522b\u5728 NTU-13\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b 2000\u30015000 \u548c 1000 \u4e2a\u65f6\u671f\u3002 \u603b\u7684\u6765\u8bf4\uff0c\u66f4\u591a\u7684\u65f6\u671f\u4f1a\u4ea7\u751f\u66f4\u597d\u7684\u6027\u80fd\uff0c\u4f46\u6211\u4eec\u505c\u6b62\u8bad\u7ec3\u4ee5\u4fdd\u6301\u8f83\u4f4e\u7684\u8ba1\u7b97\u6210\u672c\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e3a\u4e86\u5141\u8bb8\u66f4\u5feb\u7684\u8fed\u4ee3\u3001\u635f\u5931\u548c\u67b6\u6784\u7684\u6d88\u878d\uff0c\u6211\u4eec\u5728 NTU-13 \u4e0a\u8bad\u7ec3\u4e86 1000 \u4e2a epoch\uff0c\u5728 UESTC \u4e0a\u8bad\u7ec3\u4e86 500 \u4e2a epoch\u3002 \u5176\u4f59\u7684\u5b9e\u65bd\u7ec6\u8282\u53ef\u4ee5\u5728\u9644\u5f55\u7684 C \u8282\u4e2d\u627e\u5230\u3002

    "},{"location":"pape_read/ACTOR/trans/#experiments","title":"Experiments","text":"

    \u6682\u7565

    "},{"location":"pape_read/ACTOR/trans/#conclusions","title":"Conclusions","text":"

    \u6211\u4eec\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u57fa\u4e8e Transformer \u7684 VAE \u6a21\u578b\u6765\u5408\u6210\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u4eba\u4f53\u8fd0\u52a8\u3002\u6211\u4eec\u63d0\u4f9b\u4e86\u8be6\u7ec6\u7684\u5206\u6790\u6765\u8bc4\u4f30\u6211\u4eec\u63d0\u8bae\u7684\u65b9\u6cd5\u7684\u4e0d\u540c\u7ec4\u6210\u90e8\u5206\u3002 \u6211\u4eec\u5728\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u751f\u6210\u65b9\u9762\u83b7\u5f97\u4e86\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff0c\u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\u6709\u4e86\u663e\u7740\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u63a2\u7d22\u4e86\u8fd0\u52a8\u53bb\u566a\u548c\u52a8\u4f5c\u8bc6\u522b\u4e2d\u7684\u5404\u79cd\u7528\u4f8b\u3002 \u6211\u4eec\u65b9\u6cd5\u7684\u4e00\u4e2a\u7279\u522b\u5438\u5f15\u4eba\u7684\u7279\u6027\u662f\u5b83\u5728\u5e8f\u5217\u7ea7\u6f5c\u5728\u7a7a\u95f4\u4e0a\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u672a\u6765\u7684\u5de5\u4f5c\u53ef\u4ee5\u5229\u7528\u6211\u4eec\u7684\u6a21\u578b\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u6216\u52a8\u4f5c\u8bc6\u522b\u95ee\u9898\u65bd\u52a0\u5148\u9a8c\u3002

    "},{"location":"pape_read/EG3D/","title":"[EG3D] Efficient Geometry-aware 3D Generative Adversarial Networks","text":"

    \u7ea6 479 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    3DV Generation

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/EG3D/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/EG3D/#tri-plane-hybrid-3d-representation","title":"Tri-plane hybrid 3D representation","text":"

    \u8ba8\u8bba\u4e00\u4e0b NeRF \u548c Tri-plane hybrid 3D representation \u7684\u5173\u7cfb\u3002

    NeRF \u6309 ray \u4f53\u79ef\u6e32\u67d3\u8fc7\u7a0b\u4e2d\u91c7\u6837\u7684\u70b9\u4ece\u8bad\u7ec3\u597d\u7684 MLP \u91cc\u62ff\uff1b\u800c EG3D \u5219\u662f\u5f97\u5230\u4e09\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\uff0c\u6bcf\u4e00\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\u90fd\u662f\u6cbf\u7740\u6d88\u5931\u7684\u90a3\u4e2a\u7ef4\u5ea6\u805a\u5408\u5f97\u5230\u7684\uff0c\u53ef\u4ee5\u770b\u4f5c\u662f\u62ff\u5230\u4e86\u7a7a\u95f4\u4e2d\u4e09\u6761\u6b63\u4ea4\u7684\u7ebf\u7684\u7279\u5f81\uff0c\u800c\u4e4b\u540e\u7528\u4e00\u4e2a\u8f7b\u91cf MLP \u53bb\u4ece\u8fd9\u4e09\u4e2a\u7279\u5f81\u5411\u91cf\u91cc\u628a\u8fd9\u4e2a\u70b9\u7684\u989c\u8272\u5bc6\u5ea6\u62ff\u51fa\u6765\uff0c\u7c7b\u4f3c\u4e8e\u6c42\u4e09\u6761\u7ebf\u7684\u4ea4\u70b9\u3002

    \u76f8\u6bd4\u4e8e NeRF \u5c06\u6570\u636e\u53c2\u6570\u5316\uff0c\u6bcf\u6b21\u67e5\u8be2\u90fd\u9700\u8981\u8d70\u4e00\u8fb9 MLP\uff0cEG3D Sec3 \u5219\u663e\u793a\u7684\u5c06\u7279\u5f81\u5b58\u5728\u4e09\u4e2a\u4e8c\u7ef4\u8868\u91cc\uff0c\u6bcf\u6b21\u67e5\u8be2\u53ea\u9700\u8981 O(1) \u7684\u5f00\u9500\uff0c\u56e0\u6b64\u6548\u7387\u4e3b\u8981\u53d6\u51b3\u4e8e\u540e\u9762\u90a3\u4e2a\u8f7b\u91cf MLP\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6548\u7387\u4e0a\u7684\u63d0\u9ad8\u3002

    \u800c\u5b9e\u73b0\u6548\u679c\u4e0a\uff0c\u6211\u80e1\u731c EG3D \u7684\u65b9\u6cd5\u597d\u7684\u539f\u56e0\uff1a

    1. \u7531\u4e8e\u4f7f\u7528\u4e86\u5ea7\u6807\u6295\u5f71\uff0c\u6240\u4ee5\u76f8\u5bf9\u4e8e NeRF \u7684\u53c2\u6570\u8868\u8fbe\uff0cEG3D \u5bf9\u4e8e\u67d0\u4e2a\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e\u5177\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\uff0c\u56e0\u800c\u53ef\u80fd\u5bf9\u7ec6\u8282\u7684\u628a\u63a7\u7ea6\u675f\u66f4\u76f4\u63a5\uff0c\u6216\u8005\u8bf4\u76f4\u89c9\u4e0a\u6211\u611f\u89c9 EG3D \u8fd9\u79cd\u8868\u8fbe\u5bf9\u201c\u7279\u5f81-\u5ea7\u6807\u201d\u7684\u5173\u7cfb\u66f4\u5177\u4f53\uff1b
    2. \u4e09\u4e2a\u6b63\u4ea4\u65b9\u5411\u585e\u8fdb\u5c0f MLP \u91cc\u5b66\uff0c\u53ef\u80fd\u4f1a\u66f4\u5bb9\u6613\u8ba9 MLP \u77e5\u9053\u53bb\u627e\u4ea4\u70b9\u9644\u8fd1\u7684\u90a3\u4e9b\u70b9\u53bb\u5b66\u4e60\uff0c\u611f\u89c9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5728\u4e00\u4e2a\u957f\u5f97\u50cf\u66fc\u54c8\u987f\u8ddd\u79bb\u90a3\u79cd\u7acb\u65b9\u4f53\u4e00\u6837\u7684\u7a7a\u95f4\u91cc\u53bb\u5b66\u4e60\u5468\u56f4\u7684\u4fe1\u606f\uff1b

    \u53c2\u8003\u8d44\u6599

    "},{"location":"pape_read/MAS/","title":"[MAS] Multi-view Ancestral Sampling for 3D Motion Generation Using 2D Diffusion","text":"

    \u7ea6 211 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    3DV Motion Diffusion

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/MAS/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":"

    \u5229\u7528\u4e00\u4e2a\u5728 2D \u5355\u76ee\u6570\u636e\u96c6\u4e0a train \u51fa\u6765\u7684 diffusion model \u505a 3D Motion \u7684\u751f\u6210\u3002

    "},{"location":"pape_read/NSM/","title":"[NSM] Neural State Machine for Character-Scene Interactions","text":"

    \u7ea6 1434 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    3DV Human-Motion Scene-Aware

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/NSM/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NSM/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    NSM \u63d0\u51fa\u4e00\u79cd\u65b0\u7684\u76ee\u6807\u5bfc\u5411\u81ea\u56de\u5f52\u6a21\u578b\u6765\u89e3\u51b3\u4eba\u4f53\u52a8\u4f5c\u751f\u6210\u95ee\u9898\uff0c\u80fd\u5b9e\u73b0\u8868\u73b0\u826f\u597d\u7684\u5750\u3001\u6301\u7269\u3001\u907f\u969c\u7684\u884c\u4e3a\u3002\u8be5\u95ee\u9898\u4e3b\u8981\u96be\u70b9\u5728\u4e8e\uff0c\u5b8c\u6210\u4e00\u9879\u4efb\u52a1\u6240\u9700\u8981\u751f\u6210\u7684\u52a8\u4f5c\u5e8f\u5217\u4e2d\u5305\u542b\u5468\u671f\u6027\u548c\u975e\u5468\u671f\u6027\u7684\u90e8\u5206\uff0c\u5e76\u4e14\u9700\u8981\u5bf9\u5468\u56f4\u73af\u5883\u8fdb\u884c\u611f\u77e5\u3002\u901a\u8fc7\u4f7f\u7528\u4e8c\u7ef4\u76f8\u4f4d\u8868\u793a\u7684 Kronecker \u4e58\u79ef\u3001\u4e00\u79cd\u53cc\u5411\u63a7\u5236\uff08\u76ee\u6807\u4e2d\u5fc3\u548c\u81ea\u6211\u4e2d\u5fc3\uff09\u89c4\u5219\u3001\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\u548c\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7b49\u6280\u672f\u6765\u589e\u5f3a\u6548\u679c\uff0c\u66f4\u5b8f\u89c2\u7684\u8bf4\uff0cNSM \u4f7f\u7528\u4e86\u4e00\u79cd\u76ee\u6807\u9a71\u52a8\u7684\u6a21\u578b\u6765\u5b9e\u73b0\u6548\u679c\u826f\u597d\u7684\u52a8\u4f5c\u751f\u6210\u3002

    "},{"location":"pape_read/NSM/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u6574\u4e2a\u4efb\u52a1\u53ef\u4ee5\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u7b2c\u4e00\u90e8\u5206\u662f\u5bfb\u8def\u81f3\u76ee\u6807\uff0c\u8981\u6c42\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u89c4\u907f\u969c\u788d\u5e76\u627e\u5230\u76ee\u6807\u5e76\u4e14\u6700\u7ec8\u9762\u671d\u76ee\u6807\uff0c\u8fd9\u4e00\u90e8\u5206\u4e3b\u8981\u7684\u96be\u70b9\u5c31\u662f\u9700\u8981\u80fd\u591f\u5bf9\u73af\u5883\u8fdb\u884c\u611f\u77e5\uff0c\u4e3a\u6b64 NSM \u56e2\u961f\u9009\u62e9\u4e86\u4f53\u7d20\u8868\u8fbe\uff0c\u5e76\u8bbe\u8ba1\u4e86\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u2014\u2014\u5176\u8303\u56f4\u8986\u76d6\u4ee5\u4ee3\u7406\u4eba\u4e3a\u4e2d\u5fc3\u7684\u4e00\u4e2a\u5706\u67f1\u5f62\u533a\u57df\uff0c\u533a\u57df\u5185\u7684\u6240\u6709\u5177\u6709\u4f53\u7d20\u7684\u7269\u4f53\u90fd\u4f1a\u88ab\u7403\u5f62\u91c7\u6837\u4e3a\u4e00\u4e2a 0~1 \u548c\u4e4b\u95f4\u7684\u503c\uff0c\u5982\u8bba\u6587\u4e2d Fig5\u3002\u800c\u8fd9\u4e9b\u503c\u88ab\u79f0\u4e3a\u73af\u5883\u8f93\u5165\uff0c\u5728\u6a21\u578b\u7684 pipeline \u4e2d\u4f5c\u4e3a\u8f93\u5165\u3002\u73af\u5883\u8f93\u5165\u6709\u6548\u589e\u52a0\u4ee3\u7406\u4eba\u5bf9\u73af\u5883\u7684\u7406\u89e3\u80fd\u529b\uff0c\u6539\u5584\u4e86\u8bf8\u5982\u4e0e\u76ee\u6807\u4ea4\u4e92\u65f6\u4ece\u80cc\u540e\u7a7f\u900f\u6905\u5b50\u5750\u4e0b\u7684\u8fd9\u79cd\u95ee\u9898\uff0c\u5982 Fig14\u3002\u6b64\u5916\uff0cNSM \u56e2\u961f\u5b66\u4e60\u4e86 PFNN\uff0c\u4f7f\u7528 phase \u6765\u5b9e\u73b0\u72b6\u6001\u673a\uff0c\u4f46\u521b\u65b0\u6027\u7684\u4f7f\u7528\u4e86\u6807\u6ce8\u79bb\u6563\u7279\u5b9a\u76f8\u4f4d\uff08\u5982\u884c\u8d70\u65f6\u5de6\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\(2k\\pi\\)\uff0c\u53f3\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\((2k+1)\\pi\\)\uff0c\u800c\u4e2d\u95f4\u8fc7\u7a0b\u901a\u8fc7\u63d2\u503c\u8ba1\u7b97\uff09\uff0c\u901a\u8fc7\u7f51\u7edc\u5b66\u4e60\u63d2\u503c\u76f8\u4f4d\u7684\u5f62\u5f0f\uff0c\u89e3\u51b3\u4e86 PFNN \u4e2d\u5148\u9a8c\u76f8\u4f4d\u5e26\u6765\u7684\uff0c\u4ee3\u7406\u4eba\u8d8b\u5411\u4e8e\u4e0d\u884c\u52a8\u7684\u7f3a\u70b9\u3002\u800c\u5728\u5bfb\u627e\u76ee\u6807\u65f6\uff0c\u4f20\u7edf\u7684\u5355\u5411\u8868\u8fbe\u5bb9\u6613\u4ea7\u751f\u8bef\u5dee\u7d2f\u8ba1\uff0c\u5bfc\u81f4\u6700\u7ec8\u76ee\u6807\u5b9a\u4f4d\u504f\u79fb\uff0cNSM \u56e2\u961f\u4f7f\u7528\u76ee\u6807\u4e2d\u5fc3\u3001\u81ea\u6211\u4e2d\u5fc3\u53cc\u5411\u8868\u8fbe\uff0c\u663e\u8457\u6539\u5584\u4e86\u8be5\u95ee\u9898\uff0c\u5b9e\u9a8c\u6548\u679c\u5982 Fig11 \u4e0a\u56fe\u3002

    \u7b2c\u4e8c\u90e8\u5206\u9700\u8981\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u7684\u548c\u76ee\u6807\u8fdb\u884c\u4ea4\u4e92\uff0c\u5982\u5728\u6905\u5b50\u4e0a\u5750\u4e0b\u3001\u6253\u5f00\u95e8\u3001\u7a7f\u8fc7\u5899\u4e0a\u7684\u6d1e\u3002\u8fd9\u9700\u8981\u4ee3\u7406\u4eba\u5bf9\u4ea4\u4e92\u76ee\u6807\u5177\u6709\u7cbe\u786e\u7684\u611f\u77e5\uff0c\u4e0e\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7c7b\u4f3c\uff0cNSM \u4e5f\u63d0\u51fa\u4e86\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\uff0c\u4e3a\u4e86\u63d0\u9ad8\u7cbe\u5ea6\uff0c\u4f53\u7d20\u4f20\u611f\u5668\u4ee5 8x8x8 \u7684\u4f53\u7d20\u4e3a\u5355\u4f4d\uff0c\u540c\u6837\u91c7\u6837\u4e3a 0~1 \u4e4b\u95f4\u7684\u503c\uff0c\u88ab\u4f5c\u4e3a\u6a21\u578b\u7684\u4e00\u90e8\u5206\u8f93\u5165\u3002

    \u6574\u4f53\u6a21\u578b\u4f7f\u7528\u4e86 MoE \u6280\u672f\uff0c\u5373\u591a\u4e13\u5bb6\u6a21\u578b\uff0c\u901a\u8fc7 Gating Networks \u6765\u8ba1\u7b97\u5176\u6df7\u5408\u6743\u91cd\uff0c\u5176\u8f93\u5165\u4e3b\u8981\u4e3a\u5f53\u524d\u7684\u52a8\u4f5c\u6807\u7b7e\u548c\u4e8c\u7ef4\u76f8\u4f4d\uff08\u4ee5\u89e3\u51b3\u4e00\u7ef4\u76f8\u4f4d\u5e26\u6765\u7684\u4e0d\u53ef\u5fae\u7684\u95ee\u9898\uff09\u3002\u6a21\u578b\u9884\u6d4b\u7f51\u7edc\u5206\u4e3a\u7f16\u7801\u6a21\u5757\u548c\u9884\u6d4b\u6a21\u5757\u4e24\u90e8\u5206\uff0c\u6a21\u578b\u8f93\u5165\u5305\u542b\u56db\u4e2a\u90e8\u5206\uff1a\u5173\u4e8e\u4ee3\u7406\u4eba\u7684\u5f53\u524d\u5e27\uff08\u548c\u7a97\u53e3\u5185\u9644\u8fd1\u5e27\uff09\u7684\u4fe1\u606f\u3001\u76ee\u6807\u4fe1\u606f\uff08\u4f4d\u7f6e\u3001\u671d\u5411\u3001\u4ea4\u4e92\u52a8\u4f5c\u6807\u7b7e\uff09\u4ee5\u53ca\u5148\u524d\u63d0\u5230\u7684\u73af\u5883\u8f93\u5165\u548c\u4ea4\u4e92\u8f93\u5165\u3002\u5c06\u8f93\u51fa\u9884\u6d4b\u540e\u7684\u4ee3\u7406\u4eba\u52a8\u4f5c\u4fe1\u606f\u3001\u884c\u52a8\u8f68\u8ff9\u4fe1\u606f\u3001\u76f8\u4f4d\u4fe1\u606f\u3001\u4ea4\u4e92\u63a5\u89e6\u70b9\u4fe1\u606f\u7b49\u3002\u800c\u8fd9\u6837\u7684\u8bbe\u8ba1\u7ed9\u4e86\u6a21\u578b\u826f\u597d\u7684\u5728\u4e24\u79cd\u7528\u6237\u64cd\u4f5c\u6a21\u5f0f\uff08\u624b\u52a8\u63a7\u5236\u79fb\u52a8\u65b9\u5411\u548c\u53ea\u6307\u5b9a\u4ea4\u4e92\u76ee\u6807\uff09\u4e4b\u95f4\u5207\u6362\u7684\u80fd\u529b\uff0c\u53ea\u9700\u8981\u6539\u53d8\u76ee\u6807\u8f93\u5165\u7684\u5b9a\u4e49\u5373\u53ef\u65e0\u7f1d\u8854\u63a5\u3002

    "},{"location":"pape_read/NSM/#\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","title":"\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","text":"

    \u8fd9\u79cd\u8bbe\u8ba1\u901a\u8fc7\u4e86\u5b9e\u9a8c\u9a8c\u8bc1\uff0c\u5728 NSM \u56e2\u961f\u8bbe\u8ba1\u7684\u4e00\u79cd\u7279\u6b8a\u60c5\u51b5\u4e0b\u8868\u73b0\u826f\u597d\u2014\u2014\u5750\u4e0a\u4e00\u5f20\u534a\u63d2\u8fdb\u684c\u5b50\u7684\u6905\u5b50\u3002\u5e76\u4e14\u5728\u4e0e\u5176\u4ed6\u6a21\u578b\u7684\u5bf9\u6bd4\u4e2d\uff0c\u5728\u54cd\u5e94\u65f6\u95f4\u3001\u6ed1\u6b65\uff08\u4e0d\u81ea\u7136\u7684\u8d70\u52a8\uff09\u8868\u73b0\u3001\u4f4d\u7f6e\u7cbe\u5ea6\u3001\u65cb\u8f6c\u7cbe\u5ea6\u7b49\u65b9\u9762\u603b\u4f53\u8868\u73b0\u826f\u597d\uff0c\u51e0\u4e4e\u5b8c\u5168\u8d85\u8fc7\u4e86\u4ee5\u5f80\u7684\u540c\u7c7b\u5de5\u4f5c\uff0c\u6587\u7ae0\u4e5f\u5bf9\u8868\u73b0\u826f\u597d\u7684\u539f\u56e0\u8fdb\u884c\u4e86\u4e00\u4e9b\u5206\u6790\u3002

    LSTM \u6a21\u578b\u901a\u8fc7\u751f\u6210\u5927\u91cf\u77ed\u7247\u6bb5\u7684\u52a8\u4f5c\u6765\u589e\u5f3a\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e5f\u662f\u901a\u8fc7\u5c06\u8fc7\u7a0b\u4ece\u8fd9\u4e9b\u7247\u6bb5\u4e2d\u5b66\u4e60\u7684\u5185\u5bb9\u8fdb\u884c\u7ec4\u5408\u5b9e\u73b0\uff0c\u56e0\u6b64\u6269\u5c55\u6027\u8f83\u5dee\uff0c\u4e0d\u9002\u5408\u8fd0\u52a8\u6570\u636e\u4e0d\u591f\u5145\u5206\u7684\u60c5\u51b5\u3002

    \u800c\u4e0e PFNN \u76f8\u6bd4\uff0cNSM \u9650\u5236\u66f4\u5c11\uff0c\u56e0\u4e3a PFNN \u7684\u5148\u9a8c\u7684\u5916\u90e8 phase \u63a7\u5236\u673a\u5236\u8ba9\u5b83\u65e0\u6cd5\u5f88\u597d\u7684\u89e3\u51b3\u5bf9\u975e\u5468\u671f\u6027\u52a8\u4f5c\u751f\u6210\u3002

    \u800c MANN \u867d\u7136\u76f8\u5e94\u901f\u5ea6\u5feb\uff0c\u4f46\u5b58\u5728\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\uff0c\u5e76\u4e14\u5728\u63a7\u5236\u6a21\u5f0f\u53d8\u5316\u7684\u65f6\u5019\u52a8\u4f5c\u5341\u5206\u50f5\u786c\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u52a8\u4f5c\u50f5\u786c\u800c\u4ee3\u7406\u4eba\u7684\u6839\u90e8\u79fb\u52a8\u4ecd\u7136\u5b58\u5728\uff0c\u624d\u51fa\u73b0\u4e86\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\u3002

    "},{"location":"pape_read/NSM/#\u6570\u636e\u589e\u5f3a","title":"\u6570\u636e\u589e\u5f3a","text":"

    \u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u5f3a\u6a21\u578b\u7684\u53ef\u6269\u5c55\u6027\u548c\u9002\u5e94\u6027\uff0cNSM \u56e2\u961f\u4e5f\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u6570\u636e\u589e\u5f3a\u65b9\u6848\u3002\u6784\u5efa\u573a\u666f\u540e\u91c7\u96c6\u4e00\u7cfb\u5217\u573a\u666f\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u901a\u8fc7\u955c\u50cf\u6765\u589e\u52a0\u6570\u636e\u4f53\u91cf\uff0c\u4eba\u5de5\u6807\u8bb0\u52a8\u4f5c\u6807\u7b7e\u548c\u76f8\u4f4d\u6807\u7b7e\u3002\u63a5\u4e0b\u6765\u901a\u8fc7\u6570\u636e\u589e\u5f3a\u7cfb\u7edf\u6765\u589e\u5f3a\u6570\u636e\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5c31\u662f\u4f7f\u7528 ShapeNet \u6570\u636e\u96c6\u4e2d\u7b26\u5408\u6a21\u578b\u7684\u7269\u4f53\u4e0d\u65ad\u66ff\u6362\u8bad\u7ec3\u7269\u4f53\uff0c\u5e76\u8fdb\u884c\u53d8\u6362\uff0c\u540c\u65f6\u8981\u6ce8\u610f\u66f4\u65b0\u63a5\u89e6\u70b9\u548c\u4ea4\u4e92\u65b9\u5411\u7b49\u3002\u4ee5\u6b64\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u63d0\u9ad8\u6a21\u578b\u8303\u7528\u6027\u3002

    "},{"location":"pape_read/NeRF/","title":"[NeRF] Representing Scenes as Neural Radiance Fields for View Synthesis","text":"

    \u7ea6 1701 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    3DV Reconstruction

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/NeRF/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NeRF/#\u8d21\u732e","title":"\u8d21\u732e","text":"
    1. \u5c06\u590d\u6742\u96c6\u5408\u5f62\u72b6\u548c\u6750\u8d28\u7684\u8fde\u7eed\u573a\u666f\u8868\u8fbe\u4e3a 5D \u795e\u7ecf\u8f90\u5c04\u573a\u7684\u65b9\u6cd5\uff0c\u5c06\u5176\u53c2\u6570\u5316\u4e3a\u57fa\u672c\u7684 MLP \u7f51\u7edc\uff1b
    2. \u57fa\u4e8e\u7ecf\u5178\u4f53\u79ef\u6e32\u67d3\u6280\u672f\u7684\u53ef\u5fae\u5206\u6e32\u67d3\u7a0b\u5e8f\uff0c\u6211\u4eec\u7528\u5b83\u4ece\u6807\u51c6 RGB \u56fe\u50cf\u4e2d\u4f18\u5316\u8fd9\u4e9b\u8868\u793a\u3002\u8fd9\u5305\u62ec\u4e00\u79cd\u5206\u5c42\u91c7\u6837\u7b56\u7565\uff0c\u5c06 MLP \u7684\u5bb9\u91cf\u5206\u914d\u7ed9\u5177\u6709\u53ef\u89c1\u573a\u666f\u5185\u5bb9\u7684\u7a7a\u95f4\uff1b
    3. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\uff0c\u5c06 5D \u5ea7\u6807\u6620\u5c04\u5230\u66f4\u9ad8\u7ef4\u7684\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u9891\u7387\u7684\u573a\u666f\u5185\u5bb9\u7684\u8868\u793a\uff1b

    \u63d0\u51fa\u7684\u8868\u793a\u65b9\u6cd5\u6709\u5982\u4e0b\u597d\u5904\uff1a

    "},{"location":"pape_read/NeRF/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u4f7f\u7528\u5982\u4e0b\u4e00\u4e2a\u201c\u51fd\u6570\u201d\u6765\u8868\u793a\u4e00\u4e2a\u9759\u6001\u573a\u666f\uff1a

    \\[ \\begin{aligned} & F_{\\Theta}:(\\mathrm{x}, \\mathrm{d}) \\rightarrow (\\mathrm{c}, \\sigma) \\\\ & \\text{where } \\mathrm{x} = (x,y,z), \\; \\mathrm{d} \\text{ is a 3D Cartesian unit vector}, \\; \\mathrm{c} = (r,g,b), \\; \\sigma \\text{ is the density}. \\end{aligned} \\]

    \u4e3a\u4e86\u4fdd\u8bc1\u591a\u89c6\u89d2\u4e0b\u89c2\u5bdf\u5230\u7684\u5185\u5bb9\u5177\u6709\u4e00\u81f4\u6027\uff0c\u505a\u5982\u4e0b\u7ea6\u675f\uff1a

    \u5229\u7528\u5982\u4e0a\u201c\u51fd\u6570\u201d\uff0c\u5177\u4f53\u6765\u8bf4\u64cd\u4f5c\u5982\u4e0b\uff1a

    \u4e3a\u4e86\u80fd\u591f\u8ba9 MLP \u8868\u793a\u66f4\u9ad8\u9891\u7387\u7684\u51fd\u6570\uff0c\u5f15\u5165\u4e86\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u3002

    \u6b64\u5916\uff0c\u5173\u4e8e\u6e32\u67d3\uff0c\u4f7f\u7528\u7684\u662f\u4f20\u7edf\u7684\u4f53\u79ef\u6e32\u67d3\u65b9\u6cd5\uff0c\u7d2f\u79ef\u4e00\u6761\u5149\u7ebf\u4e0a\u7684\u989c\u8272\u548c\u5bc6\u5ea6\uff0c\u5f97\u5230\u6700\u7ec8\u7684\u989c\u8272\uff0c\u6240\u4f7f\u7528\u7684\u516c\u5f0f\u5982\u4e0b\uff1a

    \\[ \\begin{aligned} & \\mathrm{C}(\\mathrm{r})= \\int_{t_n}^{t_f} T(t) \\cdot \\sigma\\left( \\mathrm{r}(t) \\right) \\cdot \\mathrm{c} \\left( \\mathrm{r}(t), \\mathrm{d} \\right) \\cdot \\mathrm{d}t \\end{aligned},\\;\\; \\text{where } T(t) = \\exp\\left( -\\int_{t_n}^t \\sigma\\left(\\mathrm{r}(s)\\right) \\; \\mathrm{d}s \\right) \\]

    \u5bf9\u8fd9\u4e2a\u5f0f\u5b50\u7a0d\u4f5c\u89e3\u91ca\uff0c\\(t_n\\) \u548c \\(t_f\\) \u5206\u522b\u8868\u793a near \u548c far \u7684\u5149\u7ebf\u8fb9\u754c(bound)\uff0c\u5149\u7ebf\u7ed3\u679c \\(C(\\mathrm{r})\\) \u901a\u8fc7\u7d2f\u79ef\u8fd9\u4e24\u4e2a\u7aef\u70b9\u4e4b\u95f4\u7684\u6309\u6743\u7d2f\u79ef\u5f97\u5230\uff0c\u5176\u6743\u91cd\u4e3a \\(T(t)\\)\uff0c\u89c2\u5bdf\u5176\u5b9a\u4e49\u5f0f\u53ef\u53d1\u73b0\uff0c\u968f\u7740 \\(t\\) \u7684\u589e\u5927\uff0c\\(T(t) \\rightarrow 0\\)\uff0c\u5373\u7ea6\u5f80\u540e\u7684\u70b9\u7ea6\u4e0d\u5bb9\u6613\u88ab\u770b\u5230\uff0c\u8fd9\u4e5f\u662f\u7b26\u5408\u5e38\u8bc6\u7684\u3002\u800c\u7d2f\u79ef\u7684\u5bf9\u8c61\u4e3a \\(\\sigma(\\mathrm{r}(t)) \\cdot \\mathrm{c}(\\mathrm{r}(t), \\mathrm{d})\\)\uff0c\u5373\u5bc6\u5ea6\u548c\u989c\u8272\u7684\u4e58\u79ef\uff0c\u6ce8\u610f\u4e24\u4e2a\u53c2\u6570\u2014\u2014\u5bc6\u5ea6\u8868\u5f81\u5f62\u72b6\u7279\u5f81\uff0c\u4ec5\u4e0e\u7a7a\u95f4\u4f4d\u7f6e\u6709\u5173\uff1b\u800c\u989c\u8272\u540c\u65f6\u4e0e\u89c2\u5bdf\u89d2\u5ea6\u6709\u5173\uff0c\u8fd9\u6697\u542b\u7740\u5149\u5f71\u4fe1\u606f\u3002

    \u7136\u800c\uff0c\u7531\u4e8e\u79ef\u5206\u7684\u64cd\u4f5c\u6027\u5dee\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u79cd\u79bb\u6563\u7684\u62bd\u6837\u7d2f\u79ef\u6765\u5b9e\u73b0\u8fd9\u4ef6\u4e8b\uff0c\u5c06\u5149\u7ebf\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\uff0c\u6309\u5747\u5300\u5206\u5e03\u5728\u6bcf\u4e2a\u70b9\u91c7\u6837\u4e00\u4e2a\u70b9\uff0c\u8fdb\u884c\u7d2f\u79ef\uff0c\u5373\u5bf9\u4e8e\u533a\u95f4 \\(t_i\\)\uff1a

    \\[ t_i \\sim U \\left[ t_n + \\frac{i-1}{N} \\left( t_f - t_n \\right), t_n + \\frac{i}{N} \\left( t_f - t_n \\right) \\right] \\]

    \u5bf9\u5e94\u7684\u989c\u8272\u8ba1\u7b97\u516c\u5f0f\u6539\u5199\u4e3a\uff1a

    \\[ \\begin{aligned} \\hat{C}(\\mathrm{r}) = \\sum_{i=1}^{N} T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\cdot \\mathrm{c}_i, \\;\\; \\text{where } T_i = \\exp\\left( -\\sum_{j=1}^{i-1} \\sigma_j \\delta_j \\right) \\text{ and } \\delta_i = t_{i+1} - t_i \\end{aligned} \\]

    \u5176\u4e2d\uff0c\\(\\sigma(\\mathrm{r}(t))\\) \u522b\u66ff\u6362\u4e3a \\((1-\\exp(-\\sigma_i\\delta_i))\\)\uff0c\u5728\u7ed3\u5408\u4e86\u533a\u95f4\u957f\u5ea6\u7684\u60c5\u51b5\u4e0b\u53c8\u91cd\u65b0\u5c06\u5bc6\u5ea6\u6620\u5c04\u56de\u4e86 \\([0,1]\\)\u3002

    \u5728\u4e4b\u540e\u7684\u7b56\u7565\u4e2d\uff0c\u8fd8\u4f1a\u5bf9\u91c7\u6837\u89c4\u5219\u505a\u8fdb\u4e00\u6b65\u4f18\u5316\u3002

    \u81f3\u6b64\u4e3a\u6b62\u662f NeRF \u4e3b\u8981\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u8fd9\u4e9b\u65b9\u6cd5\u4ecd\u7136\u4e0d\u8db3\u4ee5\u8ba9\u5b83\u8fbe\u5230\u6700\u5148\u8fdb\u7684\u6548\u679c\uff0c\u56e0\u6b64\u8fd9\u91cc\u5f15\u5165\u4e24\u4e2a\u6539\u8fdb\u63aa\u65bd\u3002

    1. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u6765\u4f7f MLP \u80fd\u591f\u652f\u6301\u66f4\u9ad8\u9891\u7684\u56fe\u50cf\u4fe1\u606f\uff1b
    2. \u4f7f\u7528\u7ed3\u6784\u5316\u7684\u91c7\u6837(hierarchical sampling)\u4f7f\u80fd\u591f\u66f4\u6709\u6548\u5730\u5bf9\u8fd9\u79cd\u9ad8\u9891\u8868\u793a\u8fdb\u884c\u91c7\u6837\uff1b

    \u4f4d\u7f6e\u7f16\u7801\u4e3a\u4e00\u4e2a \\(\\gamma : \\R \\rightarrow \\R^{2L}\\)\uff1a

    \\[ \\gamma(p) = \\left( \\sin(2^0 \\pi p), \\cos(2^0 \\pi p), \\cdots, \\sin(2^{L-1} \\pi p), \\cos(2^{L-1} \\pi p) \\right) \\]

    \u5c06 \\(\\gamma(\\cdot)\\) \u5e94\u7528\u4e8e \\(\\mathrm{x}\\) \u7684\u4e09\u4e2a\u5206\u91cf\uff08\u88ab\u6807\u51c6\u5316\u5230 \\([-1,1]\\) \u4e0a\uff09\u548c \\(\\mathrm{d}\\) \u7684\u4e24\u4e2a\u5206\u91cf\u4e0a\uff0c\u5b9e\u73b0\u7ef4\u5ea6\u63d0\u5347\uff0c\u4ee5\u6b64\u4f18\u5316\u5728\u9ad8\u9891\u5185\u5bb9\u4e0a\u7684\u8868\u73b0\u3002\u5728\u6587\u7ae0\u4e2d\u63d0\u5230\uff0c\\(L_\\mathrm{x} = 10, L_\\mathrm{d} = 4\\)\u3002

    \u800c\u5206\u5c42\u91c7\u6837\uff0c\u9488\u5bf9\u7684\u662f\u4e4b\u524d\u7684\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\u8fdb\u884c\u5747\u5300\u91c7\u6837\u3002\u663e\u7136\uff0c\u67d0\u4e9b\u201c\u7a7a\u6c14\u201d\u533a\u57df\u548c\u88ab\u906e\u6321\u7684\u533a\u57df\u5bf9\u6e32\u67d3\u7ed3\u679c\u5e76\u4e0d\u4f1a\u6709\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u5728\u7a7a\u95f4\u4e0a\u8fd9\u4e9b\u5185\u5bb9\u53ef\u80fd\u5360\u4e86\u7edd\u5927\u90e8\u5206\uff08\u5c24\u5176\u662f\u6ca1\u6709\u534a\u900f\u660e\u7269\u4f53\u7684\u60c5\u51b5\u4e0b\uff09\uff0c\u5747\u5300\u91c7\u6837\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5c31\u663e\u5f97\u975e\u5e38\u4f4e\u6548\u3002

    \u5206\u5c42\u91c7\u6837\u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u9996\u5148\u4f7f\u7528\u4e00\u4e2a\u7c97\u7565(coarse)\u7684\u7f51\u7edc\uff0c\u5229\u7528 \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u7684\u5747\u5300\u91c7\u6837\u70b9\uff0c\u901a\u8fc7\u8ba1\u7b97 \\(\\hat{w}_i = normalize\\left( T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\right)\\) \u5f97\u5230\u6bcf\u4e2a\u70b9\u7684\u6743\u91cd\uff0c\u800c\u8fd9\u4e2a\u6743\u91cd\u5219\u53cd\u5e94\u4e86\u6bcf\u4e00\u4e2a\u91c7\u6837\u70b9\u9644\u8fd1\u6709\u6548\u70b9\u7684\u5206\u5e03\u60c5\u51b5\uff0c\u53ef\u4ee5\u770b\u4f5c\u4e00\u4e2a\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(PDF)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u8fd9\u4e2a\u5206\u5e03\u7684\u57fa\u7840\u4e0a\u518d\u91c7\u6837\u5f97\u5230 \\(N_f\\) \u4e2a\u7cbe\u7ec6(fine)\u91c7\u6837\u70b9\uff0c\u4e0e \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u70b9\u4e00\u8d77\u653e\u5230\u7cbe\u7ec6(fine)\u7f51\u7edc\u4e2d\u8fdb\u884c\u8bad\u7ec3\u3002

    \u4f7f\u7528\u7684 loss \u5982\u4e0b\uff1a

    \\[ \\mathcal{L} = \\sum_\\mathrm{r\\in \\text{Rays}} \\left[ \\left\\| \\hat{C}_c(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 + \\left\\| \\hat{C}_f(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 \\right] \\] \u53c2\u8003\u8d44\u6599

    \u793e\u533a Pytorch \u590d\u73b0\u4ee3\u7801\u7684\u6ce8\u91ca\uff1ahttps://github.com/IsshikiHugh/nerf-pytorch

    "},{"location":"pape_read/SA-MHR/","title":"[SA-HMR] Learning Human Mesh Recovery in 3D Scenes","text":"

    \u7ea6 1927 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

    3DV HMR Scene-Aware

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/SA-MHR/#\u7b14\u8bb0","title":"\u7b14\u8bb0","text":""},{"location":"pape_read/SA-MHR/#\u4efb\u52a1\u5b9a\u4e49","title":"\u4efb\u52a1\u5b9a\u4e49","text":""},{"location":"pape_read/SA-MHR/#\u4f18\u52bf\u4e0e\u8d21\u732e","title":"\u4f18\u52bf\u4e0e\u8d21\u732e","text":"

    \u6982\u62ec\u8d21\u732e\uff1a

    1. \u975e\u4f18\u5316\u505a\u6cd5\u7684\uff0c\u573a\u666f\u611f\u77e5\u7684\u3001\u5355\u7167\u7247\u3001\u9884\u7ed9\u573a\u666f\u7684\u4eba\u4f53\u7f51\u683c\u6062\u590d\u6846\u67b6\uff1b
    2. \u9884\u8bad\u7ec3\u7684 HMR \u7f51\u7edc\u4e0e\u5e73\u884c\u7f51\u7edc\u7684\u673a\u9047 cross-attention \u7684\u5904\u7406\u8bbe\u8ba1\uff0c\u662f\u897f\u5b89\u4e86\u5bf9\u4eba\u4f53\u59ff\u52bf\u548c\u573a\u666f\u51e0\u4f55\u7279\u5f81\u7684\u8054\u5408\u5b66\u4e60\uff1b
    3. \u5728\u51c6\u786e\u5ea6\u548c\u901f\u5ea6\u4e0a\u90fd\u8584\u7eb1\u4f18\u5316\u505a\u6cd5\u7684\u57fa\u7ebf\uff1b
    "},{"location":"pape_read/SA-MHR/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":""},{"location":"pape_read/SA-MHR/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":""},{"location":"pape_read/SA-MHR/#\u6548\u679c\u5ea6\u91cfmetrics","title":"\u6548\u679c\u5ea6\u91cf(metrics)","text":""},{"location":"pape_read/SAMP/","title":"[SAMP] Stochastic Scene-Aware Motion Prediction","text":"

    \u7ea6 1427 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    3DV Human-Motion Scene-Aware

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/SAMP/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/SAMP/#\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","title":"\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","text":"

    \u52a8\u4f5c\u751f\u6210\u7684\u5b9e\u73b0\u5212\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a

    1. \u5bfc\u822a\u81f3\u4ea4\u4e92\u76ee\u6807\uff1b
    2. \u5bfb\u627e\u4ea4\u4e92\u63a5\u89e6\u70b9(contact point)\uff1b
    3. \u751f\u6210\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u4e14\u9700\u8981\u4fdd\u8bc1\u751f\u6210\u7ed3\u679c\u4f1a\u81ea\u7136\u53d8\u5316\uff08\u4ee5\u7b26\u5408\u73b0\u5b9e\u611f\u89c9\uff09\uff1b

    \u7531\u4e8e\u8fd9\u4e9b\u52a8\u4f5c\u4e2d\u6709\u4e00\u90e8\u5206\u662f\u201c\u5faa\u73af\u7684(cyclic)\u201d\uff0c\u4e00\u90e8\u5206\u662f\u201c\u4e0d\u5faa\u73af\u7684(acyclic)\u201d\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e2a\u63a8\u7406\u7cfb\u7edf\u6765\u534f\u8c03\u4e24\u8005 -> \u63d0\u51fa SAMP\uff0c\u573a\u666f\u53ef\u611f\u77e5\u7684\u52a8\u4f5c\u9884\u6d4b\u7cfb\u7edf(Scene-Aware Motion Prediction)\uff1a

    "},{"location":"pape_read/SAMP/#\u8d21\u732e","title":"\u8d21\u732e","text":"
    1. \u65b0\u9896\u7684\u968f\u673a\u6a21\u578b\u4ee5\u751f\u6210\u5b9e\u65f6\u7684\u3001\u591a\u6837\u7684\u3001goal driven \u7684\u4eba\u7269\u5bf9\u573a\u666f\u7684\u4ea4\u4e92\uff1b
    2. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u7ed9\u5b9a\u76ee\u6807\u51e0\u4f55\u4f53\u540e\u751f\u6210\u53ef\u4fe1\u7684\u3001\u52a8\u4f5c\u76f8\u5173\u7684\u4ea4\u4e92\u4f4d\u7f6e\u548c\u65b9\u5411\u7684\u65b0\u5efa\u6a21\u65b9\u6cd5\uff1b
    3. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u5c06\u5177\u4f53\u8def\u5f84\u89c4\u5212\u7eb3\u5165\u53d8\u5206\u8fd0\u52a8\u5408\u6210\u7f51\u7edc\uff0c\u5b9e\u73b0\u5728\u590d\u6742\u573a\u666f\u4e2d\u7684\u5bfc\u822a\uff1b
    4. \u5305\u542b\u591a\u6837\u4eba\u4f53\u573a\u666f\u4ea4\u4e92\u6570\u636e\u7684\u65b0\u7684 MoCap \u6570\u636e\u96c6\uff1b
    "},{"location":"pape_read/SAMP/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u8fd9\u4e9b\u72ec\u7acb\u7ec4\u4ef6\u4f7f SAMP \u79f0\u4e3a\u7b2c\u4e00\u4e2a\u89e3\u51b3\u751f\u6210\u591a\u6837\u52a8\u6001\u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u4e14\u80fd\u771f\u5b9e\u5e94\u7528\u4e8e\u590d\u6742\u573a\u666f\u4e2d\u7684\u3002 - [x] \u95ee\u9898\uff1a\u8fd9\u91cc\u6700\u5173\u952e\u7684\u662f\u54ea\u4e00\u4e2a\u90e8\u5206\uff1f\u4e0e NSM \u76f8\u6bd4\u72ec\u521b\u6027\u7684\u5730\u65b9\u5177\u4f53\u5728\u54ea\u91cc\uff1f\u5230\u5e95\u5982\u4f55\u5b9a\u4e49\u201cdiverse human-scene interactions\u201d\uff0c\u548c Motion VAE \u90a3\u79cd\u751f\u6210\u5206\u5e03\u6a21\u578b\u7684\u6709\u4ec0\u4e48\u533a\u522b\uff1f\uff08Motion VAE \u662f\u5229\u7528\u5206\u5e03\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u5f97\u5230\u7ed3\u679c\u7684\uff0cMoGlow \u8c8c\u4f3c\u548c\u573a\u666f\u6ca1\u5173\u7cfb\uff09

    \u56e0\u6b64\uff0c\u8bad\u7ec3 SAMP \u6240\u9700\u7684\u6570\u636e\u96c6\u9700\u8981\u4e30\u5bcc\u4e14\u4e0d\u540c\u7684\u573a\u666f\u4ea4\u4e92\uff0c\u73b0\u6709\u6570\u636e\u96c6\u7f3a\u5c11\u4ea4\u4e92\u884c\u4e3a -> \u81ea\u5df1\u505a\u4e86\u4e00\u4e2a\u3002

    \u5982\u4f55\u8861\u91cf\u4eba\u4f53\u52a8\u4f5c\u7684\u968f\u673a\u6027(stochasticity)\u662f\u4e00\u4e2a\u6709\u5f85\u63a2\u7d22\u7684\u9886\u57df\u3002

    "},{"location":"pape_read/SAMP/#\u8bad\u7ec3\u7b56\u7565","title":"\u8bad\u7ec3\u7b56\u7565","text":"

    \u4f7f\u7528\u6b63\u5e38\u7684\u76d1\u7763\u8bad\u7ec3\u4f1a\u5bfc\u81f4\u9519\u8bef\u7d2f\u79ef(accumulation of error)\uff0c\u56e0\u4e3a\u4e00\u6b21\u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a\u8f93\u5165\u8fdb\u5165\u5230\u4e0b\u4e00\u4e2a\u7f51\u7edc\u3002\u6240\u4ee5 SAMP \u91c7\u7528\u9884\u8ba2\u91c7\u6837(scheduled sampling)\uff0c\u5b83\u80fd\u591f\u7a33\u5b9a\u751f\u6210\u957f\u65f6\u95f4\u7684\u52a8\u4f5c\u9884\u4f30\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u4e0a\u4e00\u6b21\u7684\u9884\u6d4b\u7ed3\u679c\u4ee5 \\(1-P\\) \u7684\u6982\u7387\u4f5c\u4e3a\u4e0b\u4e00\u6b21\u9884\u6d4b\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(P\\) \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

    "},{"location":"pape_read/SAMP/#\u5b9e\u9a8c\u548c\u8bc4\u4f30","title":"\u5b9e\u9a8c\u548c\u8bc4\u4f30","text":"

    \u5728\u540c\u521d\u59cb\u6761\u4ef6\u4e0b\u591a\u6b21\u6267\u884c\u540c\u4e00\u4efb\u52a1\uff0c\u4f7f\u7528 APD(Average Pairwise Distance) \u6765\u8861\u91cf\u5176\u8fd0\u52a8\u5e45\u5ea6\uff1a

    "},{"location":"pape_read/SAMP/#\u4ee3\u7801\u9605\u8bfb","title":"\u4ee3\u7801\u9605\u8bfb","text":""},{"location":"pape_read/SAMP/#motionnet","title":"MotionNet","text":"

    \u516c\u5f0f\u63a8\u5bfc\uff1a

    \u6b63\u6001\u5206\u5e03\u7684\u71b5\u516c\u5f0f

    \u5047\u8bbe \\(x\\sim N(\\mu, \\sigma^2)\\)\uff0c\u4e8e\u662f\u6709\uff1a

    \u5e76\u4e14\u6709\u7ed3\u8bba\uff1a

    \\[ \\int_{-\\infty}^{\\infty} e^{-x^2} \\mathrm{d}x = \\sqrt{\\pi} \\]

    \u90a3\u4e48\u6709\u5176\u71b5\u516c\u5f0f\uff1a

    \\[ \\begin{aligned} -\\int_{-\\infty}^{\\infty} p(x)\\ln p(x) \\mathrm{d}x &= -\\int_{-\\infty}^{\\infty}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp\\left( -\\frac{(x-\\mu)^2}{\\sqrt{2\\sigma^2}} \\right) \\ln\\left[ \\frac{1}{\\sqrt{2\\pi\\sigma^2}} \\exp\\left( -\\frac{(x-\\mu)^2}{2\\sigma^2} \\right) \\right] \\mathrm{d}x \\\\ &= \\frac{1}{2}\\left( \\ln\\left( 2\\pi\\sigma^2 \\right) + 1 \\right) \\end{aligned} \\]"},{"location":"pape_read/TRACE/","title":"[TRACE] 5D Temporal Regression of Avatars with Dynamic Cameras in 3D Environments","text":"

    \u7ea6 1352 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    3DV HMR Global-Coordinates Track

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/TRACE/#\u4efb\u52a1--\u6311\u6218","title":"\u4efb\u52a1 & \u6311\u6218","text":""},{"location":"pape_read/TRACE/#\u80cc\u666f","title":"\u80cc\u666f","text":"

    \u867d\u7136\u76ee\u524d\u5bf9\u4e8e HPS(Human Pose & Shape) \u7684\u4f30\u8ba1\u5df2\u7ecf\u6709\u5f88\u591a\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u4f46\u662f\u90fd\u662f\u5f97\u5230\u76f8\u673a\u5ea7\u6807\u4e0b\u7684\u7ed3\u679c\uff0c\u65e0\u6cd5\u5f88\u597d\u7684\u5f97\u5230\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u7684\u7ed3\u679c\u3002\u5c24\u5176\u662f\u5728\u76f8\u673a\u79fb\u52a8\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4efb\u52a1\u5c24\u5176\u56f0\u96be\u3002\u800c\u5f97\u5230\u6062\u590d\u51fa\u6765\u7684 Human \u7684\u5168\u5c40\u5ea7\u6807\u5177\u6709\u91cd\u5927\u610f\u4e49\u3002

    "},{"location":"pape_read/TRACE/#\u6311\u6218","title":"\u6311\u6218","text":"
    1. \u9700\u8981\u89e3\u5076 human \u7684\u8fd0\u52a8\u548c camera \u7684\u8fd0\u52a8\uff0c\u8fd9\u6837\u624d\u80fd\u5728\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u6062\u590d human \u7684\u8f68\u8ff9\uff1b
      1. \u4e00\u79cd\u65b9\u6cd5\uff1a\u4f7f\u7528 SfM \u6062\u590d\u51fa\u76f8\u673a\u5173\u4e8e rigid scene \u7684\u76f8\u5bf9\u8fd0\u52a8\uff0c\u4f46\u662f\u5728\u7279\u6b8a\u73af\u5883\uff08\u753b\u9762\u7684\u5927\u90e8\u5206\u90fd\u4e0d\u600e\u4e48 rigid\uff0c\u6bd4\u5982\u5927\u91cf\u4eba\u6d41\uff09\u4e0b\u975e\u5e38\u4e0d\u53ef\u9760\uff1b
      2. \u53e6\u5916\u4e00\u79cd\u6765\u81ea GLAMR \u7684\u65b9\u6cd5\uff1a\u901a\u8fc7\u5df2\u6709\u7684\u5c40\u90e8\u59ff\u6001\u6765\u63a8\u65ad\u5168\u5c40\u4f4d\u7f6e\uff0c\u5c31\u7c7b\u4f3c\u4e8e\u770b\u4f60\u8d70\u4e86\u51e0\u6b65\u7136\u540e\u4f30\u8ba1\u4f60\u52a8\u4e86\u51e0\u7c73\uff1b
      3. TRACE \u9009\u62e9\u4e86\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u7684\u53d8\u79cd\uff0c\u901a\u8fc7\u4f7f\u7528\u6574\u4e2a\u753b\u9762\u6765\u9884\u6d4b\u79fb\u52a8\u8ddd\u79bb\uff0c\u6539\u5584\u4e86 GLAMR \u539f\u672c\u4e0d\u600e\u4e48\u597d\u7684\u6548\u679c\u3002\u4e0d\u4ec5\u5982\u6b64\uff0cGLAMR \u662f\u591a\u9636\u6bb5\u7684\uff0c\u9c81\u68d2\u6027\u4e0d\u654c TRACE\uff1b
    2. \u5c24\u5176\u9488\u5bf9\u4e8e\u8ffd\u8e2a\u529f\u80fd\uff0c\u5728\u5bc6\u96c6\u4eba\u7fa4\u573a\u666f\uff0c\u5b58\u5728\u5f88\u4e25\u91cd\u7684\u906e\u6321\u95ee\u9898\uff1b
      1. \u6700\u5e38\u89c1\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4f7f\u7528\u65f6\u5e8f\u5148\u9a8c\u5047\u8bbe\uff0c\u5982 Kalman filter\uff0c\u4f46\u662f\u5728\u590d\u6742\u573a\u666f\u4e0b\u4e5f\u5f88\u5bb9\u6613\u5931\u6548\uff1b
      2. \u95ee\u9898\uff1aKalman filter \u597d\u50cf\u548c\u6ee4\u6ce2\u6709\u5173\uff1f\u4e3a\u4ec0\u4e48\u8bf4\u662f temporal priors\uff1f \u4f7f\u5e73\u6ed1\u3002
      3. PHALP \u662f\u4e3a\u6570\u4e0d\u591a\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u7684\u65b9\u6cd5\u4e4b\u4e00\uff0c\u4f46\u662f\u5b83\u5e76\u975e one-stage\uff0c\u800c\u4e14\u5e76\u4e0d\u5bf9\u5e8f\u5217\u8fdb\u884c\u5168\u9762\u7684\u63a8\u7406\uff1b
      4. \u95ee\u9898\uff1a\u9700\u8981\u4e86\u89e3\u8fd9\u4e2a\u5417\uff1f \u8df3\u8fc7\u3002
    "},{"location":"pape_read/TRACE/#\u4efb\u52a1\u4e0e\u6210\u679c","title":"\u4efb\u52a1\u4e0e\u6210\u679c","text":"

    \u672c\u5de5\u4f5c\u5b9e\u73b0\u4e86\u52a8\u6001\u76f8\u673a\u89c6\u9891\uff08DC-videos\uff09\u4e0b\u5728\uff08\u865a\u62df\u7684\uff09\u7a7a\u95f4\u4e2d\u7684\u65f6\u5e8f\u7684\u5bf9\u4e8e K \u76ee\u6807\u7684\u5b9a\u4f4d\u68c0\u6d4b\u3001\u59ff\u6001\u4f30\u8ba1\u3001\u8ffd\u8e2a\u548c\u51b2\u7a81\u9002\u914d\uff0c\u5e76\u4e14\u80fd\u591f\u5f97\u5230\u5168\u5c40\u7684\u5ea7\u6807\u3002 - \u65f6\u5e8f & \u5168\u5c40\u5ea7\u6807 & \u8ffd\u8e2a\uff1b

    \u5bf9 K \u4e2a\u6709\u9650\u76ee\u6807\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5373\u4f7f\u4e2d\u9014\u77ed\u6682\u7684\u5931\u914d\uff0c\u4e5f\u80fd\u5728\u4e4b\u540e\u88ab\u91cd\u65b0\u8bc6\u522b\uff08\u4e00\u5f00\u59cb\u51b3\u5b9a\u4e86\u54ea K \u4e2a\u5c31\u4e00\u76f4\u662f\u54ea K \u4e2a\u4eba\uff09\u3002

    "},{"location":"pape_read/TRACE/#\u521b\u65b0\u70b9--\u8d21\u732e","title":"\u521b\u65b0\u70b9 & \u8d21\u732e","text":""},{"location":"pape_read/TRACE/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u53c2\u8003\u6d41\u7a0b\u56fe\u505a\u89e3\u91ca\u3002

    "},{"location":"pape_read/TRACE/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":"

    \u7565\u3002

    "},{"location":"pape_read/TRACE/#loss","title":"Loss","text":"

    \u7565\u3002

    "},{"location":"tech_accu/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/ai/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/ai/hydra/","title":"Hydra","text":"

    \u7ea6 1136 \u4e2a\u5b57 42 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u76f8\u5173\u94fe\u63a5

    \u7b80\u4ecb

    Hydra \u4ea6\u53ef\u7528\u4e8e\u5176\u5b83 Python APP\uff0c\u4f46\u672c\u6587\u53ea\u4ee5 Research \u7684\u89c6\u89d2\u6765\u8c08\u8fd9\u4e2a\u5de5\u5177\u3002

    \u5728\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u53ef\u80fd\u4f1a\u5e0c\u671b\u4e00\u4e2a\u9879\u76ee\u80fd\u652f\u6301\u5207\u6362\u5176\u4e2d\u7684\u82e5\u5e72\u90e8\u4ef6\uff0c\u5c31\u597d\u50cf\u7ed9\u673a\u5668\u4eba\u66f4\u6362\u4e0d\u540c\u7684\u90e8\u4ef6\uff0c\u6765\u6d4b\u8bd5\u5176\u6027\u80fd\u3002\u800c\u6bcf\u4e00\u4e2a\u90e8\u4ef6\u90fd\u6709\u53ef\u80fd\u6709\u81ea\u5df1\u7684\u8d85\u53c2\u6570\u9700\u8981\u8bbe\u7f6e\u3002

    \u786c\u7f16\u7801\u8bbe\u7f6e\u5f53\u7136\u4e0d\u53ef\u53d6\uff0c\u8fd9\u592a\u4e0d\u4f18\u96c5\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u901a\u5e38\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u5373 args \u6765\u5b9e\u73b0\u8d85\u53c2\u6570\u7684\u4f20\u5165\u3002\u4f46\u968f\u7740\u6a21\u578b\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u9700\u8981\u7684\u8d85\u53c2\u6570\u8d8a\u6765\u8d8a\u591a\uff0c\u547d\u4ee4\u884c\u5c31\u4f1a\u8d8a\u6765\u8d8a\u957f\uff1b\u800c\u4e14\u4e0d\u540c\u7684\u201c\u90e8\u4ef6\u201d\u53ef\u80fd\u9700\u8981\u4e0d\u540c\u7684\u8d85\u53c2\u6570\uff0c\u56e0\u6b64\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\u7075\u6d3b\u6027\u5c31\u5927\u5927\u4e0b\u964d\u4e86\u3002

    \u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u628a\u8fd9\u4e9b\u4e1c\u897f\u653e\u5728\u6587\u4ef6\u91cc\uff0c\u9700\u8981\u4fee\u6539\u65f6\u5c31\u76f4\u63a5\u4fee\u6539\u6587\u4ef6\uff0c\u8fd9\u6837\u4fee\u6539\u53c2\u6570\u76f8\u5bf9\u5c31\u7075\u6d3b\u4e00\u4e9b\u3002\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5c06\u4e0d\u540c\u7684\u7ec4\u5408\u5206\u522b\u4fdd\u5b58\u4e3a\u4e00\u4e2a\u6587\u4ef6\uff0c\u7528\u6307\u5b9a\u7279\u5b9a\u6587\u4ef6\u7684\u65b9\u5f0f\u6765\u9009\u62e9\u4e00\u4e2a\u5df2\u7ecf\u8bbe\u7f6e\u597d\u7684 pipeline\u3002

    \u4f46\u662f\u8fd9\u6837\u8fd8\u6709\u4e24\u4e2a\u95ee\u9898\uff0c\u9996\u5148\uff0c\u8fd9\u6837\u5199\u7684\u8bdd\uff0c\u914d\u7f6e\u6587\u4ef6\u7684\u590d\u7528\u7387\u662f\u6bd4\u8f83\u4f4e\u7684\uff0c\u56e0\u4e3a\u5404\u4e2a\u914d\u7f6e\u4e4b\u95f4\u5dee\u522b\u53ef\u80fd\u4e0d\u5927\uff0c\u53ef\u80fd\u4e92\u76f8\u53ea\u6709\u4e00\u5c0f\u90e8\u5206\u7684\u4e0d\u540c\uff0c\u800c\u590d\u7528\u7387\u4f4e\u7684\u574f\u5904\u5c31\u4e0d\u5fc5\u591a\u8bf4\u4e86\uff1b\u5176\u6b21\uff0c\u5c31\u7b97\u6211\u4eec\u7528\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\u6765\u89e3\u51b3\u590d\u7528\u7684\u95ee\u9898\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u4ee3\u7801\u91cc\u4e5f\u9700\u8981\u4f7f\u7528\u7e41\u590d\u7684\u5206\u652f\u8bed\u53e5\u624d\u80fd\u5f88\u597d\u5730\u63a7\u5236\u914d\u7f6e\u7684\u9009\u62e9\u3002

    \u4e8e\u662f\uff0cHydra \u5e94\u8fd0\u800c\u751f\u3002Hydra \u4f1a\u4ee5\u7279\u5b9a\u7684\u65b9\u5f0f\u5904\u7406\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5b83\u7684\u884c\u4e3a\u5f88\u50cf Cpp \u7684 #include\uff0c\u4f1a\u628a\u9009\u4e2d\u7684\u540e\u4ee3 Group \u91cc\u7684\u914d\u7f6e\u6587\u4ef6\u5d4c\u5165\u5230\u5f53\u524d\u914d\u7f6e\u6587\u4ef6\u91cc\u3002

    \u66f4\u5177\u4f53\u7684\u5173\u4e8e Hydra \u7684\u89c4\u8303\uff0c\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff0c\u672c\u6587\u4e3b\u8981\u5bf9\u5b98\u65b9\u6587\u6863\u505a\u4e00\u4e9b\u8865\u5145\uff0c\u901a\u8fc7\u5b9e\u9a8c\u63a2\u7d22\u4e00\u4e9b Hydra \u6587\u6863\u4e2d\u6ca1\u6709\u63d0\u5230\u7684\u6027\u8d28\u3002

    "},{"location":"tech_accu/ai/hydra/#\u5173\u4e8e-ab-\u8bed\u6cd5","title":"\u5173\u4e8e +A=B \u8bed\u6cd5","text":"

    \u5728\u6587\u6863\u4e2d\uff0c\u6709\u4e24\u4e2a\u5730\u65b9\u63d0\u5230\u4e86 +A=B \u7684\u8bed\u6cd5\u3002\u7b2c\u4e00\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

    You can add config values via the command line. The + indicates that the field is new.

    $ python my_app.py +db.driver=mysql +db.user=omry +db.password=secret\ndb:\n  driver: mysql\n  user: omry\n  password: secret\n
    files my_app.py
    from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

    \u7b2c\u4e8c\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

    Select an item from a config group with +GROUP=OPTION, e.g:

    $ python my_app.py +db=postgresql\ndb:\n  driver: postgresql\n  pass: drowssap\n  timeout: 10\n  user: postgres_user\n
    files Directory layout
        \u251c\u2500 conf\n    \u2502  \u2514\u2500 db\n    \u2502      \u251c\u2500 mysql.yaml\n    \u2502      \u2514\u2500 postgresql.yaml\n    \u2514\u2500\u2500 my_app.py\n
    db/mysql.yaml
    driver: mysql\nuser: omry\npassword: secret\n
    db/postgresql.yaml
    driver: postgresql\nuser: postgres_user\npassword: drowssap\ntimeout: 10\n
    my_app.py
    from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

    \u524d\u8005\u8868\u793a\u589e\u52a0\u4e00\u4e2a field\uff0c\u540e\u8005\u8868\u793a\u6307\u5b9a\u4e00\u4e2a group\uff0c\u5176\u542b\u4e49\u662f\u4e0d\u540c\u7684\uff0c\u800c\u770b\u8d77\u6765\u662f\u6709\u6b67\u4e49\u7684\u3002

    \u6839\u636e\u6211\u7684\u6d4b\u8bd5\uff0c+A=B \u5177\u4f53\u662f\u54ea\u4e00\u79cd\uff0c\u53d6\u51b3\u4e8e\u662f\u5426\u5b58\u5728\u540d\u4e3a A \u7684 folder\u3002\u5373\uff1a

    \u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u53ea\u8981\u5f53\u524d\u76ee\u5f55\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u90a3\u4e48\u5728\u5f53\u524d yaml \u6587\u4ef6\u4e2d\u5c31\u65e0\u6cd5\u5c06 A \u4f5c\u4e3a\u4e00\u4e2a field \u7684 key\u3002

    \u4e4b\u6240\u4ee5\u5f3a\u8c03\u5f53\u524d\uff0c\u662f\u56e0\u4e3a\u5b83\u53ef\u4ee5\u88ab\u7236\u6bcd\u7684 yaml \u6587\u4ef6\u4e2d\u7684\uff0c\u4ee5 A \u4e3a key \u7684 k-v \u5bf9\u8986\u76d6\u3002

    \u4f8b\u5982\uff0c\u867d\u7136\u6dfb\u52a0 A=1 \u66ff\u6362\u4f5c\u4e3a group \u7684 A \u4f1a\u62a5\u9519\uff0c\u4f46\u662f\u6dfb\u52a0 A.B=1 \u5374\u53ef\u4ee5\u8986\u76d6 A \u4e0b\u7684\u4f5c\u4e3a group \u7684 B\uff1b\u4ea6\u6216\u5728\u6700\u7684 config.yaml \u91cc\u6dfb\u52a0\u8fd9\u6837\u4e00\u6bb5\u4e5f\u53ef\u4ee5\u8d77\u5230\u540c\u6837\u7684\u6548\u679c\uff1a

    A:\nB: 1\n

    \u5373\uff0c\u5bf9\u4e8e\u201c\u65e0\u6cd5\u5c06 group \u8986\u76d6\u4e3a field\u201d\u8fd9\u4ef6\u4e8b\u7684\u4fdd\u62a4\uff0c\u53ea\u6709\u76ee\u5f55\u4e00\u5c42\u5185\u6709\u6548\u3002

    "},{"location":"tech_accu/ai/hydra/#\u8986\u76d6\u5173\u7cfb","title":"\u8986\u76d6\u5173\u7cfb","text":"

    \u9996\u5148\uff0c\u9664\u4e86\u5728\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u5173\u4e8e field \u548c group \u7684\u8986\u76d6\u5173\u7cfb\uff0c\u66f4\u91cd\u8981\u7684\u662f\u5728\u4e0d\u540c\u5c42\u7684 yaml \u4e4b\u95f4\uff0c\u76f8\u540c\u952e\u7684\u503c\u7684\u8986\u76d6\u5173\u7cfb\u3002

    \u9996\u5148\uff0c\u5355\u770b defaults\uff0c\u5b98\u65b9\u5728\u6587\u6863\u4e2d\u6709\u63d0\u5230\u89c4\u5219\uff1a

    The defaults are ordered:

    \u6b64\u5916\uff0c\u5982\u679c\u5df2\u7ecf\u5728\u5185\u5c42 defaults \u8bbe\u7f6e\u4e86\u952e\u7684\u9ed8\u8ba4\u503c\uff0c\u5c31\u4e0d\u80fd\u5728\u5916\u5c42\u4e3a\u8fd9\u4e2a\u952e\u8bbe\u7f6e\u9ed8\u8ba4\u503c\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

    \ud83c\udf30

    \u4f8b\u5982\u4e0b\u9762\u8fd9\u4e24\u4e2a\u6587\u4ef6\u4e2d\uff0c- group1/group2: option1_1 \u548c - group2: option1_1 \u8fd9\u4e24\u884c\u662f\u51b2\u7a81\u7684\uff0c\u53ea\u80fd\u9009\u5176\u4e00\u7684\u3002

    config.yaml
    defaults:\n- group1: option1\n- group1/group2: option1_1\n
    group1/option1.yaml
    defaults:\n- group2: option1_1\n

    \u56e0\u6b64\uff0c\u4e00\u822c\u6765\u8bf4\u5c3d\u91cf\u907f\u514d\u8ba9\u914d\u7f6e\u5c42\u6570\u8d85\u8fc7\u4e24\u5c42\u3002

    \u800c\u5173\u4e8e defaults \u4ee5\u5916\u7684\u90e8\u5206\uff0c\u89c4\u5219\u5982\u4e0b\uff1a

    1. \u5f53\u6700\u5916\u5c42\u7684 config.yaml \u548c\u5728 defaults: \u91cc\u6307\u5b9a\u7684 yaml \u914d\u7f6e\u6587\u4ef6\u5b58\u5728\u51b2\u7a81\u7684\u952e\u65f6\uff0c\u4ee5 config.yaml \u91cc\u7684\u4e3a\u51c6\uff0c\uff08\u65e0\u8bba\u662f\u5426\u6709 GROUP=OPTION \u9009\u9879\uff09\uff1b
    2. \u5f53\u952e\u4e0d\u5b58\u5728\u4e8e defaults: \u4e2d\uff0c\u800c\u53ea\u5728\u547d\u4ee4\u884c\u4e2d\u901a\u8fc7 +GROUP=OPTION \u9009\u4e2d\u65f6\uff0c\u4ee5 OPTION.yaml \u91cc\u7684\u4e3a\u51c6\uff1b
    "},{"location":"tech_accu/ai/pytorch/","title":"PyTorch","text":"

    \u7ea6 565 \u4e2a\u5b57 48 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f

    \u5f03\u5751\u4e86\uff0c\u611f\u89c9\u6ca1\u5565\u5199\u7684\u5fc5\u8981

    \u53c2\u8003\u8d44\u6599 "},{"location":"tech_accu/ai/pytorch/#\u5b89\u88c5","title":"\u5b89\u88c5","text":"

    \u6839\u636e \u8fd9\u91cc \u63d0\u4f9b\u7684\u65b9\u6cd5\u83b7\u53d6\u5b89\u88c5\u9014\u5f84\uff0c\u6ce8\u610f\u9009\u62e9\u4e0e\u60a8\u7684\u73af\u5883\u76f8\u7b26\u7684\u6761\u4ef6\u3002

    \u4f9d\u8d56\u4e4b\u7c7b\u7684\u90fd\u5df2\u7ecf\u5728\u8be5\u9875\u9762\u5199\u7684\u5f88\u6e05\u695a\u4e86\u3002

    \u5b8c\u6210\u5b89\u88c5\u540e\uff0c\u6211\u4eec\u901a\u8fc7\u5982\u4e0b\u65b9\u6cd5\u6765\u68c0\u6d4b\u662f\u5426\u5b89\u88c5\u6210\u529f\uff1a

    $ python\n>>> import torch\n>>> x = torch.rand(5, 3)\n>>> print(x)\ntensor([[0.8577, 0.6416, 0.2632],\n        [0.3853, 0.8534, 0.4877],\n        [0.0628, 0.2360, 0.8810],\n        [0.1766, 0.8024, 0.5447],\n        [0.3938, 0.9232, 0.4407]])\n
    "},{"location":"tech_accu/ai/pytorch/#\u5f20\u91cf--tensors","title":"\u5f20\u91cf | Tensors","text":"

    Tensors \u662f NumPy \u4e2d ndarrys \u7684\u4e00\u79cd\u65e0\u75db\u66ff\u4ee3\uff0c\u53ea\u4e0d\u8fc7 tensors \u80fd\u591f\u6709\u6548\u5229\u7528 GPU \u8fdb\u884c\u52a0\u901f\u3002

    "},{"location":"tech_accu/ai/pytorch/#\u521d\u59cb\u5316","title":"\u521d\u59cb\u5316","text":"

    \u663e\u7136\uff0c\u521d\u59cb\u5316\u6709\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u63d0\u4f9b\u51e0\u79cd\u3002

    \u901a\u8fc7\u6570\u636e\u751f\u6210\u901a\u8fc7 NumPy array \u751f\u6210\u901a\u8fc7\u53e6\u5916\u4e00\u4e2a tensor \u751f\u6210\u4f7f\u7528\u5e38\u6570\u6216\u968f\u673a\u521d\u59cb\u5316

    data = [[1, 2], [3, 4]]\nx_data = torch.tensor(data)\nprint(x_data)\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    tensor([[1, 2],\n        [3, 4]])\n

    np_array = np.array(data)\nx_np = torch.from_numpy(np_array)\nprint(x_np)\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    tensor([[1, 2],\n        [3, 4]])\n

    x_ones = torch.ones_like(x_data) # retains the properties of x_data\nprint(f\"Ones Tensor: \\n {x_ones} \\n\")\n\nx_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data\nprint(f\"Random Tensor: \\n {x_rand} \\n\")\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    Ones Tensor:\ntensor([[1, 1],\n        [1, 1]])\n\nRandom Tensor:\ntensor([[0.4557, 0.7406],\n        [0.5935, 0.1859]])\n

        shape = (2, 3)\n    rand_tensor = torch.rand(shape)\n    ones_tensor = torch.ones(shape)\n    zeros_tensor = torch.zeros(shape)\n\n    print(f\"Random Tensor: \\n {rand_tensor} \\n\")\n    print(f\"Ones Tensor: \\n {ones_tensor} \\n\")\n    print(f\"Zeros Tensor: \\n {zeros_tensor}\")\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    Random Tensor:\n tensor([[0.4434, 0.1717, 0.7331],\n        [0.4211, 0.8945, 0.2239]])\n\nOnes Tensor:\n tensor([[1., 1., 1.],\n        [1., 1., 1.]])\n\nZeros Tensor:\n tensor([[0., 0., 0.],\n        [0., 0., 0.]])\n
    "},{"location":"tech_accu/ai/pytorch/#\u5c5e\u6027","title":"\u5c5e\u6027","text":"

    \u8fd9\u91cc\u4e3b\u8981\u6d89\u53ca\u7684\u5f20\u91cf\u7684\u5c5e\u6027\u4e3a \u5f62\u72b6(shape)\u3001\u6570\u636e\u7c7b\u578b(dtype) \u548c \u6570\u636e\u6240\u5b58\u50a8\u5728\u7684\u786c\u4ef6\u8bbe\u5907(device)\u3002

    tensor = torch.rand(3, 4)\n\nprint(f\"Shape of tensor: {tensor.shape}\")\nprint(f\"Datatype of tensor: {tensor.dtype}\")\nprint(f\"Device tensor is stored on: {tensor.device}\")\n

    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    Shape of tensor: torch.Size([3, 4])\nDatatype of tensor: torch.float32\nDevice tensor is stored on: cpu\n
    "},{"location":"tech_accu/ai/pytorch/#\u65b9\u6cd5\u4e0e\u64cd\u4f5c","title":"\u65b9\u6cd5\u4e0e\u64cd\u4f5c","text":"

    \u5bf9\u5f20\u91cf\u7684\u64cd\u4f5c\u65b9\u6cd5\u975e\u5e38\u4e4b\u591a\uff0c\u5f88\u96be\u5728\u672c\u6587\u4e2d\u5168\u90e8\u6d89\u53ca\uff0c\u56e0\u800c\u4e5f\u53ea\u662f\u653e\u4e2a \u6587\u6863 \u5728\u8fd9\u8fb9\uff0c\u5728\u6b64\u53ea\u4ecb\u7ecd\u6bd4\u8f83\u57fa\u7840\u7684\u51e0\u4e2a\u3002

    "},{"location":"tech_accu/ai/pytorch/#\u4f7f\u7528-gpu-\u52a0\u901f","title":"\u4f7f\u7528 GPU \u52a0\u901f","text":"

    \u4ee4\u4eba\u5e78\u559c\u7684\u662f\uff0c\u5bf9\u5f20\u91cf\u7684\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u53ef\u4ee5\u4f7f\u7528 GPU \u6765\u8fdb\u884c\u52a0\u901f\uff0c\u5f53\u7136\u5728\u6b64\u4e4b\u524d\u6211\u4eec\u9700\u8981\u5c06\u5b83\u8f6c\u79fb\u5230 GPU \u4e0a\u2014\u2014\u5982\u679c\u53ef\u4ee5\u7684\u8bdd\u3002

    # We move our tensor to the GPU if available\nif torch.cuda.is_available():\n    tensor = tensor.to('cuda')\n    print(f\"Device tensor is stored on: {tensor.device}\")\n

    Output

    Device tensor is stored on: cuda:0\n
    "},{"location":"tech_accu/ai/pytorch/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":"

    \u6ce8\u610f

    \u5982\u679c\u4e00\u4e2a tensor \u7684\u65b9\u6cd5\u4ee5 _ \u7ed3\u5c3e\uff0c\u90a3\u4e48\u8bf4\u660e\u8fd9\u4e2a\u8fd0\u7b97\u4f1a\u4fee\u6539\u8fd9\u4e2a tensor \u81ea\u8eab\u3002

    \u5373\uff0cx.method_(...) \u5c06\u4f1a\u4fee\u6539 x \u672c\u8eab\u3002

    PyTorch \u5bf9\u56db\u5219\u8fd0\u7b97\u7b26\u8fdb\u884c\u4e86\u4e00\u4e9b\u91cd\u8f7d\uff0c\u5176\u4e0e\u6b63\u5e38\u65b9\u6cd5\u7684\u6620\u5c04\u5173\u7cfb\u5982\u4e0b\uff1a

    \u8fd0\u7b97\u7b26 \u7b49\u4ef7\u65b9\u6cd5 + torch.add() - torch.sub() * torch.mul() / torch.div()"},{"location":"tech_accu/ai/pytorch/#\u7d22\u5f15\u4e0e\u5207\u7247","title":"\u7d22\u5f15\u4e0e\u5207\u7247","text":"

    tensor = torch.ones(4, 4)\ntensor[:,1] = 0\nprint(tensor)\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    tensor([[1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.]])\n
    "},{"location":"tech_accu/language/cpp/","title":"Cpp about OOP","text":"

    \u7ea6 53 \u4e2a\u5b57

    \u76f8\u5173\u4fe1\u606f

    \u8fd9\u4e2a\u6761\u76ee\u653e\u7684\u4e3b\u8981\u662f Cpp \u5173\u4e8e OOP \u7684\u4e00\u4e9b\u8bed\u6cd5\u3002

    \u4e3b\u8981\u8fc1\u79fb\u81ea\u5927\u4e00\u7684 yuque \u6587\u6863\uff0c\u518d\u4e4b\u540e\u4e5f\u4f1a\u6709\u4e00\u4e9b\u4fee\u6539\u3002

    \u8fc1\u79fb\u524d\u7684\u6587\u4ef6

    "},{"location":"tech_accu/language/cpp/Part0/","title":"[pre] \u524d\u7f6e\u4e0e\u6742\u9879","text":"

    \u7ea6 1746 \u4e2a\u5b57 74 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

    "},{"location":"tech_accu/language/cpp/Part0/#1x-\u5f15\u7528reference","title":"[1.x] \u5f15\u7528reference","text":"

    1.\u521b\u5efabinding\u5173\u7cfb

    \u9700\u8981\u7406\u89e3\u7684\u662f\uff0c\u5f15\u7528\u672c\u8d28\u5c31\u662f\u6307\u9488\u3002\u5b83\u662f\u6307\u9488\u7684\u7cd6\u3002

    typename & refname = name; \u521b\u5efa\u4e86 (typename)name \u7684\u5f15\u7528 (reference)refname

    \u5728bingding\u5173\u7cfb\u5efa\u7acb\u540e\uff0c\u5728 name \u548c refname \u7684\u4f5c\u7528\u57df\u5185 refname \u548c name \u57fa\u672c\u7b49\u6548\uff08\u662f\u53d8\u91cf\u7684\u7ed1\u5b9a\u5173\u7cfb\uff0c\u800c\u975e\u50cf #define \u90a3\u6837\u7684\u5b57\u7b26\u66ff\u6362\u5173\u7cfb

    int x = 1, y = 10, *p = &x, &ref = *p;\n// \u6b64\u65f6 x = 1, y = 10, *p = 1, ref = 1\n\n*p = 2;\n// \u6b64\u65f6 x = 2, y = 10, *p = 2, ref = 2\n\np = &y;\n// \u6b64\u65f6 x = 2, y = 10, *p = 10, ref = 2\n

    2.\u5229\u7528reference\u4f20\u53c2

    \u5229\u7528reference\u53ef\u4ee5\u7c7b\u4f3c\u4f20\u6307\u9488\u4e00\u6837\uff0c\u5728\u53d8\u91cf\u539f\u672c\u7684\u4f5c\u7528\u57df\u5916\u5bf9\u53d8\u91cf\u8fdb\u884c\u4fee\u6539

    void f(int &x){\nx = 1;\n}\n\nint main(){\nint p = 0;\n// \u6b64\u65f6 p = 0\nf(p);\n// \u6b64\u65f6 p = 1\n}\n

    \u4f46\u6b64\u65f6\uff0c\u4f20\u5165 f(p) \u7684\u5b9e\u53c2 p \u5fc5\u987b\u4e3a\u4e00\u4e2a\u53d8\u91cf\uff0c\u4e0d\u53ef\u4ee5\u662f\u5e38\u91cf\u3001\u8868\u8fbe\u5f0f\u7b49\u3002

    3.reference \u4e0e const

    \u8fdb\u884c const int &refA = A; \u64cd\u4f5c\u540e\uff0c\u6211\u4eec\u53d1\u73b0 refA \u4e0d\u53ef\u4fee\u6539\uff0c\u4f46 A \u53ef\u4ee5\u4fee\u6539

    \u5982\u679c A \u5982\u6b64\u5b9a\u4e49\uff1aconst int A = 1;\uff0c\u90a3\u4e48\uff1a

    "},{"location":"tech_accu/language/cpp/Part0/#2x-\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","title":"[2.x] \u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","text":"
    #include<iostream>\nusing namespace std;\n\nclass S{\npublic:\nvoid f();\nprivate:\nint a;\n};\n\nint a;\n\nvoid f(){\ncout << \"qwq\\n\";\n}\n\nvoid S::f(){ // \u8fd9\u91cc\u6b63\u5728\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u4e8e\u7c7bS\u7684\u7684\u51fd\u6570\n++a;     // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u7c7bS\u7684\u6210\u5458\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\n::f();   // \u8fd9\u91cc\u8c03\u7528\u4e86\u4e00\u4e2a\u5168\u5c40\u4e0b\u7684\u81ea\u7531\u51fd\u6570\n++::a;   // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u5168\u5c40\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\ncout << a << \" \" << ::a << \"\\n\";\n}\n\nint main(){\nS k;\nk.f(); }\n
    "},{"location":"tech_accu/language/cpp/Part0/#3x-\u51fd\u6570\u7684\u91cd\u8f7doverload","title":"[3.x] \u51fd\u6570\u7684\u91cd\u8f7dOverload","text":"

    \u53ef\u4ee5\u5b58\u5728\u51fd\u6570\u540d\u76f8\u540c\u4f46\u662f\u53c2\u6570\u8868\u4e0d\u540c\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5373\u51fd\u6570\u7684\u91cd\u8f7d\u3002

    \u7c7b\u4f3cGolang\u7684interface\uff0c\u53c2\u6570\u8868\u5b8c\u5168\u7b26\u5408\u54ea\u4e2a\u5c31\u6267\u884c\u54ea\u4e2a(\u51fa\u73b0\u6b67\u4e49\u65f6\u4f1a\u629b\u51fa\u9519\u8bef)

    int k(int x){ return x; }\n\nchar k(long x){ return 'a'; }\n\nint main(){\ncout << k(1L);   // \u8f93\u51fa\uff1aa\ncout << k(1);    // \u8f93\u51fa\uff1a1\n}\n
    "},{"location":"tech_accu/language/cpp/Part0/#4x-\u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570default-argument","title":"[4.x] \u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570Default Argument","text":"

    \u5f62\u5f0f\uff1avoid fun(int a = 0);

    // \u5408\u6cd5\nvoid fun(int x,int y);\n\nvoid fun(int x = 1,int y = 2){\n// ...\n}\n
    // \u975e\u6cd5\uff0c\u56e0\u4e3ax\u4e0d\u80fd\u5728y\u524d\nvoid fun(int x = 1,int y); void fun(int x,int y = 2){\n// ...\n}\n
    // \u5408\u6cd5\nvoid fun(int x = 1,int y = 2);\n\nvoid fun(int x,int y){\n// ...\n}\n
    "},{"location":"tech_accu/language/cpp/Part0/#5x-\u5185\u8054\u51fd\u6570inline","title":"[5.x] \u5185\u8054\u51fd\u6570inline","text":"

    \u4e3b\u8981\u4f5c\u7528\u662f\u5728\u51fd\u6570\u4f18\u5316\u4e0a\uff0c\u6548\u679c\u662f\u727a\u7272\u7a7a\u95f4\u6362\u6548\u7387\uff0c\u9002\u7528\u4e8e\u77ed\u5c0f\u4e14\u9891\u7e41\u4f7f\u7528\u7684\u51fd\u6570\u4ee3\u7801

    \u5b9e\u73b0\u5c31\u662f\u7f16\u8bd1\u5668\u628a\u51fd\u6570\u5185\u5bb9\u8d34\u5230\u8c03\u7528\u51fd\u6570\u7684\u5730\u65b9\u6765\u51cf\u5c11\u6808\u6d88\u8017

    "},{"location":"tech_accu/language/cpp/Part0/#6x-const","title":"[6.x] const","text":"

    const\u5bf9\u6570\u636e\u7684\u4fdd\u62a4\u51fa\u73b0\u5728\u7f16\u8bd1\u65f6\u523b\uff0c\u5982\u679c\u5f3a\u884c\u901a\u8fc7\u67d0\u79cd\u624b\u6bb5\u83b7\u53d6\u5176\u5730\u5740\uff0c\u4ecd\u7136\u53ef\u4ee5\u4fee\u6539\uff0c\u7f16\u8bd1\u5668\u4ec5\u4ec5\u4fdd\u8bc1const\u4fee\u9970\u8fc7\u7684\u53d8\u91cf\u9664\u4e86\u5b9a\u4e49\u65f6\uff0c\u4e0d\u80fd\u4f5c\u4e3a\u5de6\u503c

    "},{"location":"tech_accu/language/cpp/Part0/#7x-static","title":"[7.x] static","text":"

    \u867d\u7136\u5728\u5355\u4e2a\u6587\u4ef6\u5185\uff0c\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u58f0\u660e\u987a\u5e8f\u53ef\u4ee5\u786e\u8ba4\uff0c\u4f46\u6587\u4ef6\u95f4\u7684\u987a\u5e8f\u65e0\u6cd5\u786e\u8ba4\uff0c\u8fd9\u53ef\u80fd\u9020\u6210\u4f9d\u8d56\u95ee\u9898\uff0c\u6240\u4ee5\u5c3d\u53ef\u80fd\u907f\u514d\u591a\u6587\u4ef6\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f9d\u8d56\u5173\u7cfb

    "},{"location":"tech_accu/language/cpp/Part0/#8x-\u547d\u540d\u7a7a\u95f4namespace--using\u5173\u952e\u5b57","title":"[8.x] \u547d\u540d\u7a7a\u95f4namespace & using\u5173\u952e\u5b57","text":"

    \u53ef\u4ee5\u7528namespace\u6765\u5c01\u88c5\u4ee3\u7801

    namespace <Space Name>{\n// \u5185\u5bb9\n} 

    \u5728\u4e4b\u540e\u4f7f\u7528\u91cc\u9762\u7684\u53d8\u91cf/\u51fd\u6570\u9700\u8981\u4f7f\u7528\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26::\uff0c\u5373<Space Name>::<Function Name>();

    "},{"location":"tech_accu/language/cpp/Part0/#9x-\u5de6\u503c\u4e0e\u53f3\u503c\u53f3\u503c\u5f15\u7528","title":"[9.x] \u5de6\u503c\u4e0e\u53f3\u503c&\u53f3\u503c\u5f15\u7528","text":""},{"location":"tech_accu/standard/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/standard/BVH_format/","title":"BVH \u683c\u5f0f\u8be6\u89e3","text":"

    \u7ea6 1312 \u4e2a\u5b57 116 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f

    "},{"location":"tech_accu/standard/BVH_format/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

    BVH \u8868\u793a Biovision Hierarchy Data\uff0c\u662f Biovision \u52a8\u6355\u8bbe\u5907\u7684\u6570\u636e\u8f93\u51fa\u683c\u5f0f\uff0c\u662f BVA \u683c\u5f0f\u7684\u6539\u8fdb\uff0c\u5e7f\u6cdb\u5e94\u7528\u4e8e\u52a8\u753b\u5236\u4f5c\u8f6f\u4ef6\u3002\u800c\u8be5\u683c\u5f0f\u4ee5\u6587\u672c\u5f62\u5f0f\u50a8\u5b58\uff0c\u6240\u4ee5\u4fbf\u4e8e\u5f00\u53d1\u3002 \u4ece\u9700\u6c42\u7684\u89d2\u5ea6\u6765\u8bb2\uff0c\u4e3a\u4e86\u4f18\u96c5\u5730\u89e3\u51b3\u52a8\u753b\u5236\u4f5c\u95ee\u9898\uff0c\u5b83\u88ab\u5206\u4e3a\u4e86\u201c\u8499\u76ae\u201d\u548c\u201c\u9aa8\u9abc\u201d\u4e24\u4e2a\u90e8\u5206\u3002\u800c BVH \u5c31\u8d1f\u8d23\u5b58\u50a8 \u9aa8\u9abc\u67b6\u7ed3\u6784 \u548c \u52a8\u4f5c\u4fe1\u606f\u3002 BVH \u683c\u5f0f\u603b\u4f53\u6765\u8bf4\u6bd4\u8f83\u4f18\u79c0\uff0c\u4f46\u662f\u7f3a\u4e4f\u5bf9\u8fd0\u52a8\u65f6\u7684\u9aa8\u67b6\u59ff\u52bf\u7684\u5b8c\u6574\u89e3\u91ca\u3002\u56e0\u4e3a BVH \u662f\u901a\u8fc7 \u504f\u79fb(Offset) \u6765\u63cf\u8ff0\u8fd0\u52a8\u7684\uff0c\u5373\u4fdd\u5b58\u7684\u662f\u6bcf\u4e00\u5e27\u5173\u952e\u8282\u70b9\u5bf9\u4e8e\u7236\u8282\u70b9\u7684\u76f8\u5bf9\u4f4d\u79fb\u3002

    "},{"location":"tech_accu/standard/BVH_format/#\u6587\u4ef6\u89e3\u6790","title":"\u6587\u4ef6\u89e3\u6790","text":"

    A BVH file has two parts, a header section which describes the hierarchy and initial pose of the skeleton; and a data section which contains the motion data.

    BVH \u6587\u4ef6\u6570\u636e\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

    \u5e76\u4e14\u4ee5\u9012\u5f52\u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002 \u4e0b\u9762\u7ed9\u51fa\u4e00\u4e2a\u793a\u4f8b\u6587\u4ef6\uff0c\u7136\u540e\u505a\u8fdb\u4e00\u6b65\u5206\u6790\u3002

    Summary
    HIERARCHY\nROOT Hips\n{\nOFFSET  0.00    0.00    0.00\nCHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation\nJOINT Chest\n{\nOFFSET   0.00    5.21    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Neck\n{\nOFFSET   0.00    18.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Head\n{\nOFFSET   0.00    5.45    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00    3.87    0.00\n}\n}\n}\nJOINT LeftCollar\n{\nOFFSET   1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftUpArm\n{\nOFFSET   5.54    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowArm\n{\nOFFSET   0.00   -11.96   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftHand\n{\nOFFSET   0.00   -9.93    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\nJOINT RightCollar\n{\nOFFSET  -1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightUpArm\n{\nOFFSET  -6.07    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowArm\n{\nOFFSET   0.00   -11.82   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightHand\n{\nOFFSET   0.00   -10.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\n}\nJOINT LeftUpLeg\n{\nOFFSET   3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowLeg\n{\nOFFSET   0.00   -18.34   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftFoot\n{\nOFFSET   0.00   -17.37   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.46    0.00\n}\n}\n}\n}\nJOINT RightUpLeg\n{\nOFFSET  -3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowLeg\n{\nOFFSET   0.00   -17.63   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightFoot\n{\nOFFSET   0.00   -17.14   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.75    0.00\n}\n}\n}\n}\n}\nMOTION\nFrames:    2\nFrame Time: 0.033333\n8.03     35.01   88.36  -3.41    14.78  -164.35  13.09   40.30  -24.60   7.88    43.80   0.00   -3.61   -41.45   5.82    10.08   0.00    10.21   97.95  -23.53  -2.14   -101.86 -80.77  -98.91   0.69    0.03    0.00   -14.04   0.00   -10.50  -85.52  -13.72  -102.93  61.91  -61.18   65.18  -1.57    0.69    0.02    15.00   22.78  -5.92    14.93   49.99   6.60    0.00   -1.14    0.00   -16.58  -10.51  -3.11    15.38   52.66  -21.80   0.00   -23.95   0.00   7.81     35.10   86.47  -3.78    12.94  -166.97  12.64   42.57  -22.34   7.67    43.61   0.00   -4.23   -41.41   4.89    19.10   0.00    4.16    93.12  -9.69   -9.43    132.67 -81.86   136.80  0.70    0.37    0.00   -8.62    0.00   -21.82  -87.31  -27.57  -100.09  56.17  -61.56   58.72  -1.63    0.95    0.03    13.16   15.44  -3.56    7.97    59.29   4.97    0.00    1.64    0.00   -17.18  -10.02  -3.08    13.56   53.38  -18.07   0.00   -25.93   0.00   

    \u8be5\u6837\u4f8b\u7ed9\u51fa\u4e86\u8fd9\u6837\u4e00\u4e2a\u9aa8\u67b6\uff1a

    \\[ vR = vYXZ\\\\ vM= vM_{child}M_{parent}M_{grandparent}... \\]"},{"location":"tech_accu/standard/BVH_format/#header-section","title":"header section","text":"

    HIERARCHY\u5173\u952e\u5b57\u6807\u8bc6header section\u7684\u5f00\u59cb\uff0c\u968f\u540e\u5728\u4e0b\u4e00\u884c\u5b9a\u4e49\u4e86\u6839\u8282\u70b9ROOT\uff0c\u800cHips\u5219\u662f\u8be5\u8282\u70b9\u7684\u540d\u79f0\u3002\u89c2\u5bdf\u4e0a\u65b9\u7ed9\u51fa\u7684\u9aa8\u67b6\u793a\u610f\u56fe\uff0cHips\u8282\u70b9\u4f5c\u4e3a\u6574\u4e2a\u9aa8\u67b6\u7684\u6839\u8282\u70b9\uff0c\u4fdd\u8bc1\u4e86\u6574\u4e2a\u6811\u5f62\u56fe\u7684\u6700\u5927\u6df1\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff0c\u51cf\u5c0f\u8bef\u5dee\u3002

    \u5176\u540e\u7ed9\u51fa\u4e86OFFSET\u548cCHANNELS\u4e24\u4e2a\u5c5e\u6027\u3002

    \u800c\u5728\u5176\u540e\uff0c\u4ee5JOINT\u4e3a\u5173\u952e\u5b57\u53c8\u8868\u793a\u4e86\u5176\u5b50\u8282\u70b9\u7684\u5b9a\u4e49\uff0c\u5373\u4ee5 \u9012\u5f52 \u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002

    \u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a

    \u800c\u5728\u9012\u5f52\u5b9a\u4e49\u7684\u672b\u7aef\uff0c\u4f60\u4f1a\u53d1\u73b0\u4e00\u4e2aEnd Site\uff0c\u5b83\u53ea\u6709OFFSET\u5c5e\u6027\u800c\u6ca1\u6709CHANNELS\u5c5e\u6027\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    One last note about the BVH hierarchy, the world space is defined as a right handed coordinate system with the Y axis as the world up vector. Thus you will typically find that BVH skeletal segments are aligned along the Y or negative Y axis (since the characters are often have a zero pose where the character stands straight up with the arms straight down to the side).

    \u5373\u4e16\u754c\u5750\u6807\u7cfb\u4e00\u822c\u662f\u4e00\u4e2a\\(y\\)\u8f74\u671d\u4e0a\u7684\u53f3\u624b\u7cfb\uff0c\u5e76\u4e14\u9aa8\u67b6\u7684\u521d\u59cb\u59ff\u52bf\u603b\u662f T-Pose \uff0c\u5373\u4eba\u6253\u5f00\u53cc\u624b\uff0c\u50cf\u5b57\u6bcdT\u4e00\u6837\u7ad9\u5728\u5730\u4e0a\u3002

    "},{"location":"tech_accu/standard/BVH_format/#data-section","title":"data section","text":"

    MOTION\u5173\u952e\u5b57\u6807\u8bc6data section\u7684\u5f00\u59cb\uff0c\u4e4b\u540e\u4e24\u884c\u5206\u522b\u662fFrames\u548cFrame Time\uff0c\u8868\u793a \u5e27\u6570 \u548c \u5e27\u6570\u957f\u5ea6\uff08\u5373\u5e27\u7387\u5012\u6570\uff0c0.033333\u5c31\u662f30\u5e27\uff09\u3002 \u800c\u518d\u4e4b\u540e\uff0c\u5219\u662f\u771f\u6b63\u7684\u52a8\u753b\u6570\u636e\uff0c\u6839\u636eheader section\u7ed9\u51fa\u7684\u901a\u9053\u5b9a\u4e49\u4f9d\u6b21\u6765\u7ed9\u51fa\u6bcf\u4e00\u5e27\u7684\u76f8\u5bf9\u53d8\u5316\u6570\u636e\u3002

    "},{"location":"tech_accu/standard/BVH_format/#\u7406\u89e3","title":"\u7406\u89e3","text":"

    \u6839\u636e\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0cheader section\u7c7b\u4f3c\u4e8e\u5c06\u4e00\u6839\u6839\u68d2\u710a\u63a5\u5728\u80fd\u591f\u81ea\u7531\u65cb\u8f6c\u7684\u8282\u70b9\u4e0a\uff0c\u5e76\u89c4\u5b9a\u6570\u636e\u7684\u7ec4\u7ec7\u987a\u5e8f\uff0c\u5373\u89e3\u51b3\u4e86\u9aa8\u67b6\u201c\u957f\u4ec0\u4e48\u6837\u201d\u7684\u95ee\u9898\uff0c\u5e76\u6307\u5bfc\u5982\u4f55\u63cf\u8ff0\u9aa8\u67b6\u201c\u600e\u4e48\u52a8\u201d\uff1b \u800cdata section\u5219\u7c7b\u4f3c\u4e8e\u6309\u7167header section\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0c\u5177\u4f53\u8be5\u5982\u4f55\u6539\u53d8\u5404\u4e2a\u8282\u70b9\u7684\u72b6\u6001\u3002 \u9664\u4e86\u53d1\u9001\u7ed9ROOT\u7684\u4f4d\u7f6e\u5750\u6807\u6765\u8868\u793a\u9aa8\u67b6\u7684\u4f4d\u79fb\uff08\u5e73\u79fb\u77e9\u9635\uff09\uff0c\u4e4b\u540e\u7684\u4e00\u7cfb\u5217\u6570\u636e\u90fd\u8868\u793a\u8be5\u8282\u70b9\u8be5\u5982\u4f55\u65cb\u8f6c\uff08\u65cb\u8f6c\u77e9\u9635\uff09\uff0c\u90a3\u4e48\u7406\u6240\u5f53\u7136\u7684\uff0c\u8fd9\u4e2a\u8282\u70b9\u7684\u6240\u6709\u5b50\u8282\u70b9\u90fd\u4f1a\u4ee5\u8fd9\u4e2a\u8282\u70b9\u4e3a\u4e2d\u5fc3\u8fdb\u884c\u76f8\u5e94\u7684\u65cb\u8f6c\uff1b\u6bcf\u6b21\u9012\u5f52\u90fd\u91cd\u590d\u8fd9\u6837\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u6307\u6325\u6574\u4e2a\u9aa8\u67b6\u7684\u53d8\u6362\u3002 \u90a3\u4e48\uff0c\u5b9e\u9645\u4e0a\uff0c\u6bcf\u4e00\u4e2a\u8282\u70b9\u76f8\u5bf9\u4e8e\u6839\u8282\u70b9\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e9b\u53d8\u6362\u77e9\u9635\u6309\u7167\u987a\u5e8f\u7d2f\u4e58\u5f97\u5230\u3002

    "},{"location":"tech_accu/standard/BVH_format/#\u53c2\u8003\u8d44\u6599","title":"\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/tool/Colab/","title":"Google Colaboratory","text":"

    \u7ea6 477 \u4e2a\u5b57 6 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u7b80\u4ecb

    Google Colab \u662f\u4e00\u4e2a\u5141\u8bb8\u7f16\u5199\u548c\u6267\u884c\u4ee3\u7801\u7684\u4ea4\u4e92\u5f0f\u73af\u5883\uff0c\u4ee5\u4e0b\u662f\u5206\u522b\u4e3a Colab \u7684\u7f51\u5740\u4ee5\u53ca\u5b98\u65b9 Q&A\u3002

    \u5bf9\u6211\u6765\u8bf4\uff0cGolab \u4e3a\u6211\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6bd4\u8f83\u65b9\u4fbf\u4e14\u6709\u4e00\u5b9a\u7b97\u529b\u7684\u5728\u7ebf\u5e73\u53f0\uff0c\u800c\u4e14\u6211\u89c9\u5f97\u4f5c\u4e3a\u7b14\u8bb0\u672c\u8c8c\u4f3c\u4e5f\u633a\u597d\u7528\u7684\u3002

    \u7b80\u5355\u6765\u8bf4\uff0cColab \u4e2d\u5b58\u5728 \u6587\u672c\u5355\u5143 \u548c \u4ee3\u7801\u5355\u5143 \u8fd9\u4e24\u79cd\u6a21\u5757\u3002

    \u4ece\u7528\u9014\u4e0a\u6765\u8bb2\uff0cColab \u5728\u6570\u636e\u79d1\u5b66\u548c\u673a\u5668\u5b66\u4e60\u8fd9\u4e24\u65b9\u9762\u6709\u8f83\u5927\u7528\u5904\u3002

    "},{"location":"tech_accu/tool/Colab/#\u6587\u4ef6\u4e92\u52a8","title":"\u6587\u4ef6\u4e92\u52a8","text":"

    Colab \u81ea\u5e26\u6587\u4ef6\u6d4f\u89c8\u754c\u9762

    \u901a\u8fc7\u8fd9\u4e09\u4e2a\u6309\u94ae\u53ef\u4ee5\u5b9e\u73b0 \u4e0a\u4f20\u6587\u4ef6\u3001\u5237\u65b0\u3001\u88c5\u8f7d Google \u4e91\u76d8\uff1a

    "},{"location":"tech_accu/tool/Colab/#\u786c\u4ef6\u52a0\u901f","title":"\u786c\u4ef6\u52a0\u901f","text":"

    \u5173\u4e8eGPU\u52a0\u901f\u7684\u5177\u4f53\u4fe1\u606f\uff0c\u8bf7\u67e5\u770b\u8fd9\u91cc \ud83d\udd17\u3002

    "},{"location":"tech_accu/tool/Colab/#\u8d44\u6e90\u9650\u5236","title":"\u8d44\u6e90\u9650\u5236","text":""},{"location":"tech_accu/tool/Colab/#\u5947\u6280\u6deb\u5de7","title":"\u5947\u6280\u6deb\u5de7","text":""},{"location":"tech_accu/tool/Colab/#\u5360\u7528\u663e\u5b58","title":"\u5360\u7528\u663e\u5b58","text":"

    \u5f53\u4f60\u7684\u6574\u4e2a\u9879\u76ee\u9700\u8981GPU\u4f46\u662f\u73b0\u5728\u4e0d\u592a\u9700\u8981\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u8fd9\u6837\u4e00\u6bb5\u4ee3\u7801\u6765\u5148\u5360\u7528\u4e00\u90e8\u5206\u663e\u5b58\u3002

    import torch\n## about 1.1 GB\na = torch.Tensor([1000, 1000, 1000]).cuda()\n
    "},{"location":"tech_accu/tool/Colab/#\u67e5\u770b\u663e\u5361\u4fe1\u606f","title":"\u67e5\u770b\u663e\u5361\u4fe1\u606f","text":"
    !nvidia-smi\n
    "},{"location":"tech_accu/tool/Colab/#\u6302\u8f7d-google-drive","title":"\u6302\u8f7d Google Drive","text":"
    from google.colab import drive\ndrive.mount('/content/drive/')\n
    "},{"location":"tech_accu/tool/Colab/#\u53ef\u53c2\u8003\u8d44\u6599","title":"\u53ef\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/Colab/#\u5176\u4ed6\u8d44\u6599","title":"\u5176\u4ed6\u8d44\u6599","text":""},{"location":"tech_accu/tool/Git/","title":"Git","text":"

    \u7ea6 67 \u4e2a\u5b57

    Git \u662f\u4ee3\u7801\u534f\u4f5c\u7684\u91cd\u8981\u5de5\u5177\uff0c\u540c\u65f6\u4e5f\u5bf9\u4e2a\u4eba\u4ee3\u7801\u7684\u7248\u672c\u7ba1\u7406\u6709\u91cd\u8981\u4f5c\u7528\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bf4 Git \u662f\u7834\u5199\u4ee3\u7801\u7684\u4eba\u7684\u5fc5\u5907\u6280\u80fd\u4e4b\u4e00\u3002

    List

    "},{"location":"tech_accu/tool/Git/Commands/","title":"Git Commands","text":"

    \u7ea6 1464 \u4e2a\u5b57 110 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    \u7b80\u4ecb

    \u672c\u6587\u5185\u5bb9\u57fa\u4e8e\u6211\u81ea\u5df1\u7684\u7406\u89e3\u548c\u4e00\u4e9b\u6587\u7ae0\uff0c\u662f\u5b66\u4e60\u7b14\u8bb0\uff0c\u4f46\u540c\u65f6\u6211\u4e5f\u5e0c\u671b\u5b83\u80fd\u88ab\u4f5c\u4e3a\u4e00\u4e2a\u5b66\u4e60\u53c2\u8003\u8d44\u6599\u3002

    \u6240\u4ee5\u5982\u679c\u6709\u9519\u8bef\u8bf7\u53ca\u65f6\u8bc4\u8bba\u6216\u8005\u8054\u7cfb\u6211\uff0c\u5e0c\u671b\u80fd\u4e3a\u5927\u5bb6\u63d0\u4f9b\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u5b66\u4e60\u53c2\u8003\uff01

    \u56e0\u4e3a\u6211\u81ea\u5df1\u7684\u5f00\u53d1\u7ecf\u5386\u6709\u9650\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u81ea\u5df1\u7684\u7406\u89e3\u662f\u5408\u9002\u4e14\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u5e0c\u671b\u5927\u5bb6\u72e0\u72e0\u5730 educate \u6211\uff01

    \u672c\u6761\u76ee\u5c06\u628a\u76ee\u5149\u653e\u5728\u5177\u4f53\u7684git \u547d\u4ee4 \u7684\u4ecb\u7ecd\u4e0e\u4f7f\u7528\uff0c\u65e8\u5728\u6307\u5bfc\u8fdb\u884c\u5177\u4f53\u7684\u5de5\u4f5c\u3002

    Git \u6709\u8bb8\u591a\u547d\u4ee4\uff0c\u4f46\u662f\u5176\u5b9e\u5e38\u7528\u7684\u5c31\u56fe\u4e2d\u7684\u8fd9\u4e48\u51e0\u4e2a\uff0c\u751a\u81f3\u5728 \u521a\u5f00\u59cb \u5b66\u4e60\u4f7f\u7528\u7684\u65f6\u5019\u53ea\u9700\u8981\u8bb0\u4f4f\u5176\u4e2d\u7684\u4e00\u4e24\u4e2a\uff0c\u4f46\u662f

    \u8fd9\u5e76\u4e0d\u662f\u8bf4\u5176\u4ed6\u547d\u4ee4\u5c31\u662f\u6ca1\u7528\u7684\uff0c\u6211\u4f1a\u5728\u8fd9\u91cc\u6309\u7167\u4f7f\u7528\u573a\u666f\u5206\u7c7b\uff0c\u5c3d\u53ef\u80fd\u5730\u4ecb\u7ecd Git \u547d\u4ee4\u3002

    \u5e38\u7528\u547d\u4ee4

    \u7531\u4e8e\u4e00\u822c\u6765\u8bf4\u8fd0\u884c\u547d\u4ee4\u90fd\u662f\u4ee5\u672c\u5730\u89c6\u89d2\uff0c\u6240\u4ee5\u8fd9\u91cc\u7684\u300c\u4f7f\u7528\u573a\u666f\u300d\u7684\u5212\u5206\u4e5f\u662f\u4ee5\u672c\u5730\u89c6\u89d2\u5c55\u5f00\u7684\u3002 \u5e76\u4e14\u5728\u67d0\u4e9b\u9700\u8981\u6d89\u53ca\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5730\u65b9\u4e3b\u8981\u4ee5 Github \u7684\u4f7f\u7528\u4e3a\u53c2\u8003\u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u7b80\u6d01\u7248\u672c","title":"\u7b80\u6d01\u7248\u672c","text":"

    \u8be5\u6761\u76ee\u4e3b\u8981\u9002\u7528\u4e8e\u521d\u5b66\u4e0e\u7b80\u5355\u4f7f\u7528 Git \uff0c\u5e76\u4e0d\u9002\u5408\u957f\u671f\u7ef4\u62a4\u7684\u5927\u578b\u9879\u76ee\u3002

    \u5feb\u9910
    # \u5728 Github \u521b\u5efa\u4ed3\u5e93\n# \u83b7\u53d6\u4ed3\u5e93\u7684 http / SSH clone \u547d\u4ee4\n\n# \u4ece\u8fdc\u7a0b\u5c06\u4ed3\u5e93\u514b\u9686\u5230\u672c\u5730\ngit clone <repo-url>\n\n# \u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u540e\u5c06\u4fee\u6539\u6dfb\u52a0\u5230\u6682\u5b58\u533a\ngit add -A # \u6dfb\u52a0\u6240\u6709\u4fee\u6539\ngit add .  # \u6dfb\u52a0\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u4fee\u6539\n\n# \u63d0\u4ea4\u4fee\u6539\ngit commit -m \"Write commit message here.\"\n\n# push \u5230\u8fdc\u7a0b\u4ed3\u5e93\ngit push origin\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u914d\u7f6e","title":"\u914d\u7f6e","text":"

    Git \u7684\u914d\u7f6e\u6587\u4ef6\u540d\u53eb .gitconfig\uff0c\u7528\u6765\u5b58\u653e\u4e00\u4e9b\u914d\u7f6e\u4fe1\u606f\uff0c\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u7684\u4e3a\u5168\u5c40\u914d\u7f6e\u4fe1\u606f\uff0c\u800c\u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u7684\u5219\u4e3a\u9879\u76ee\u914d\u7f6e\u4fe1\u606f\u3002

    # \u663e\u793a\u914d\u7f6e\ngit config --list\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u751f\u6210\u672c\u5730\u4ed3\u5e93","title":"\u751f\u6210\u672c\u5730\u4ed3\u5e93","text":"

    \u672c\u5730\u751f\u6210\u4ed3\u5e93\u4e3b\u8981\u6709\u4e24\u79cd\u9014\u5f84\uff0c\u4e00\u662f\u5728\u672c\u5730\u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\uff0c\u800c\u662f\u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\u3002

    # \u5728\u5f53\u524d\u76ee\u5f55 . \u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\ngit init\n\n# \u521b\u5efa\u4e00\u4e2a\u540d\u4e3a <dir-name> \u7684\u76ee\u5f55\uff0c\u5c06\u5176\u521d\u59cb\u5316\u4e3a\u4e00\u4e2a Git \u4ed3\u5e93\ngit init <dir-name>\n\n# \u4ece <repo-url> \u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\uff08\u5305\u62ec\u6240\u6709\u7684 git \u4fe1\u606f\uff09\ngit clone <repo-url>\n

    \u4ece\u6587\u4ef6\u89d2\u5ea6\u6765\u8bb2\uff0c\u5b9e\u9645\u4e0a\u5b83\u662f\u751f\u6210\u4e86\u4e00\u4e2a\u6709.git\u6587\u4ef6\u5939\u7684\u6587\u4ef6\u5939\uff0c\u800c.git\u6587\u4ef6\u5939\u5b58\u50a8\u4e86 Git \u6240\u9700\u8981\u7684\u5927\u90e8\u5206\u4fe1\u606f\u3002 \u4f7f\u7528\u5e38\u89c1\u7684 shell \u8fdb\u5165\u4ed3\u5e93\u6587\u4ef6\u5939\u540e\uff0c\u4e00\u822c\u4f1a\u6709\u4e00\u4e2a label \u8868\u793a\u4f60\u5df2\u7ecf\u8fdb\u5165\u4e86\u4e00\u4e2a\u4ed3\u5e93\u7684\u67d0\u4e2a\u5206\u652f\u4e86\u3002\u6bd4\u5982\u8fdb\u5165\u4e00\u4e2a\u65b0\u7684\u4ed3\u5e93\u65f6\uff0c\u4f1a\u6709\u4e00\u4e2amaster\u7684 label \uff0c\u5177\u4f53\u8868\u73b0\u5f62\u5f0f\u4e3b\u8981\u770b\u4f60\u7684 shell \u548c\u4e3b\u9898\u4e86\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u672c\u5730\u76f4\u63a5\u521b\u5efa\u7684\u4ed3\u5e93\u4ec5\u4ec5\u53ea\u662f\u4e00\u4e2a\u672c\u5730\u4ed3\u5e93\uff0c\u4e0d\u5177\u5907\u8fdc\u7a0b\u534f\u4f5c\u529f\u80fd\uff0c\u9700\u8981\u8fdb\u884c\u5bf9\u5e94\u7684\u914d\u7f6e\uff0c\u53c2\u8003 \"Git Workflow\" \u6761\u76ee\uff1b\u800c\u4e00\u822c\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u514b\u9686\u4e0b\u6765\u7684\u4ed3\u5e93\u90fd\u5df2\u7ecf\u7ecf\u8fc7\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u8fdc\u7a0b\u534f\u4f5c\u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u7248\u672c\u7ba1\u7406","title":"\u7248\u672c\u7ba1\u7406","text":"

    Git \u57fa\u4e8e\u7248\u672c\u4e4b\u95f4\u7684\u5dee\u5f02\u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\uff0c\u4f7f\u7528 Git \u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\u4e3b\u8981\u6307\u5728\u505a\u5b8c\u7279\u5b9a\u4fee\u6539\u4ee5\u540e\u5c06\u5176\u6dfb\u52a0\u5230\u5bf9\u5e94\u5206\u652f\u4e2d\u3002 \u5728\u8003\u8651 Git \u64cd\u4f5c\u4e4b\u524d\uff0c\u4f60\u53ef\u4ee5\u653e\u5fc3\u5730\u8fdb\u884c\u4f60\u7684\u4ee3\u7801\u7f16\u8f91\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8bb0\u5f97\u5728\u5408\u9002\u7684\u65f6\u673a\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","title":"\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","text":"

    \u901a\u8fc7\u5982\u4e0b\u6307\u4ee4\u53ef\u4ee5 \u67e5\u770b\u5dee\u5f02\u6587\u4ef6\uff1a

    # \u663e\u793a\u68c0\u6d4b\u5230\u5dee\u5f02\u7684\u6587\u4ef6\uff0c\u5b83\u4eec\u6b63\u5728\u7b49\u5f85\u88ab\u63d0\u4ea4\ngit status\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u6dfb\u52a0\u5230\u6682\u5b58\u533a","title":"\u6dfb\u52a0\u5230\u6682\u5b58\u533a","text":"

    \u5728\u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u5de5\u4f5c\u540e\u9700\u8981\u5c06\u4ee3\u7801 \u6dfb\u52a0 \u5230\u6682\u5b58\u533a\uff1a

    # \u5c06 <target> \u4e2d\u7684\u4fee\u6539\u6dfb\u52a0\u7684\u6682\u5b58\u533a\uff0c\u6587\u4ef6\u5939\u548c\u6587\u4ef6\u540c\u7406\uff0c'.' \u540c\u7406 \ngit add <target>\n\n# \u5bf9\u4e8e\u6240\u6709\u7684\u4fee\u6539\u4f9d\u6b21\u8fdb\u884c\u6dfb\u52a0\u786e\u8ba4\uff08\u5305\u62ec\u5355\u4e00\u6587\u4ef6\u7684\u591a\u5904\u4fee\u6539\uff09\ngit add -p\n\n# \u7528\u4ea4\u4e92\u5f0f\u7684\u65b9\u6cd5\u8fdb\u884c\u6dfb\u52a0\ngit add -i\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u63d0\u4ea4\u5230\u4ed3\u5e93","title":"\u63d0\u4ea4\u5230\u4ed3\u5e93","text":"

    \u6dfb\u52a0\u5b8c\u540e\u9700\u8981\u8fdb\u884c \u63d0\u4ea4\uff0c\u5728\u4ed3\u5e93\u4e2d\u5f62\u6210\u4e00\u4e2a\u8282\u70b9\uff1a

    # \u63d0\u4ea4\u5230\u4ed3\u5e93\ngit commit -m \"Write commit message here.\"\n\n# \u4fee\u6b63\u4e0a\u4e00\u6b21\u63d0\u4ea4\uff0c\u610f\u601d\u662f\u8bf4\u4f1a\u6269\u5145\u5e76\u66ff\u4ee3\u4e0a\u4e00\u6b21\u63d0\u4ea4\n# \u5e94\u7528\u573a\u666f\u5982\uff1a\u4e0a\u4e00\u6b21\u63d0\u4ea4\u6709\u9057\u6f0f\u3001\u4e0a\u4e00\u6b21\u63d0\u4ea4\u7684\u63d0\u4ea4\u4fe1\u606f\u6709\u95ee\u9898\u7b49\ngit commit --amend -m \"Write commit message here.\"\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","title":"\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","text":"

    \u5b8c\u6210\u63d0\u4ea4\u540e\u8fd9\u4e00\u6b21\u4fee\u6539\u5c31\u4f1a\u88ab\u5199\u5165\u5386\u53f2\u8bb0\u5f55\u4e2d\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7log\u6765 \u67e5\u770b\uff1a

    git log\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u56de\u6eaf--\u62b5\u6d88\u8bb0\u5f55","title":"\u56de\u6eaf / \u62b5\u6d88\u8bb0\u5f55","text":"

    \u5728log\u4e2d\u53ef\u4ee5\u67e5\u8be2\u5f97\u5230\u6bcf\u4e00\u6b21commit\u7684\u54c8\u5e0c\uff0c\u5f97\u5230\u8fd9\u4e9b\u54c8\u5e0c(\u4e5f\u53ef\u4ee5\u4f7f\u7528\u6807\u7b7e)\u4ee5\u540e\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8fdb\u884c \u56de\u6eaf \u548c \u62b5\u6d88 \u64cd\u4f5c\uff1a

    # \u56de\u6eaf\u5230\u7279\u5b9a commit \uff0c\u6bd4\u8f83\u5371\u9669\ngit reset HEAD                  # \u56de\u6eaf\u5230\u4e0a\u4e00\u4e2a commit \uff0c\u6548\u679c\u4e0a\u6e05\u7a7a\u4e86\u6682\u5b58\u533a\uff0c\u4e0d\u5f71\u54cd\u5de5\u4f5c\u533a\ngit reset --hard <commit-id>    # \u629b\u5f03\u5f53\u524d\u7684\u5de5\u4f5c\u533a\u5e76\u56de\u6eaf\u5230\u67d0\u4e2a\u7248\u672c\n\n# \u62b5\u6d88\u4e00\u6b21 commit \uff0c\u4ea7\u751f\u4e00\u4e2a\u4e0e\u76ee\u6807 commit \u4e92\u9006\u7684 commit\ngit revert HEAD                     # \u62b5\u6d88\u4e0a\u4e00\u6b21 commit\ngit revert <commit-id>              # \u62b5\u6d88\u7279\u5b9a commit\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5220\u9664--\u79fb\u52a8\u91cd\u547d\u540d","title":"\u5220\u9664 / \u79fb\u52a8(\u91cd\u547d\u540d)","text":"

    \u5220\u9664 \u6587\u4ef6\u548c \u79fb\u52a8(\u91cd\u547d\u540d) \u6587\u4ef6\u53ef\u4ee5\u4f7f\u7528rm\u548cmv\uff0c\u5173\u4e8erm(mv)\u548cgit rm(git mv)\u7684\u533a\u522b\u53ef\u4ee5\u770b\u8fd9\u91cc\u3002 \u7b80\u5355\u6765\u8bf4\u5c31\u662f\uff0cgit rm <file>\u7b49\u4ef7\u4e8erm <file> ; git add <file>\uff1bmv\u540c\u7406\uff0c\u4f46\u662f\u4f60\u65e0\u6cd5\u628a\u4e00\u4e2a\u6587\u4ef6\u901a\u8fc7git mv\u79fb\u52a8\u5230 repo dir \u4e4b\u5916\u3002

    # \u5220\u9664\u67d0\u4e2a\u6587\u4ef6\ngit rm <file>\n# \u79fb\u52a8(\u91cd\u547d\u540d)\u67d0\u4e2a\u6587\u4ef6\ngit mv <from> <to>\n\n# \u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u8fd8\u53ef\u4ee5\u505c\u6b62\u5bf9\u67d0\u4e2a\u6587\u4ef6\u7684\u8ffd\u8e2a\uff0c\u6700\u5e38\u7528\u7684\u60c5\u51b5\u4e00\u822c\u548c`.gitignore`\u6709\u5173\ngit rm --cache <file>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u6807\u7b7e\u64cd\u4f5c","title":"\u6807\u7b7e\u64cd\u4f5c","text":"

    \u4e0a\u9762\u8bb8\u591a\u6d89\u53ca\u5b9a\u4f4d\u7279\u5b9a commit \u7684\u64cd\u4f5c\u90fd\u9700\u8981\u83b7\u53d6 commit \u7684\u54c8\u5e0c\u3002\u4e0d\u8fc7\u5982\u679c\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7248\u672c\u8fdb\u884c\u4e00\u4e9b\u6807\u7b7e\u7ba1\u7406\uff0c\u90a3\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee\u6807\u7b7e\u6765\u7d22\u5f15\u7279\u5b9a commit \uff0c\u56e0\u800c\uff0ctag \u5b9e\u9645\u4e0a\u662f\u4e0d\u53ef\u91cd\u590d\u7684\u3002

    # \u4e3a\u7279\u5b9a commit \u6dfb\u52a0 tag\ngit tag <tag name> <commit id>\n\n# \u5220\u9664\u7279\u5b9a tag\ngit tag -d <tag name>\n

    \u53e6\u5916\uff0c\u9700\u8981\u63d0\u9192\u7684\u662f\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0bgit push\u4e0d\u4f1a\u5c06 tag \u4e0a\u4f20\u5230\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u9700\u8981\u5728\u547d\u4ee4\u540e\u52a0\u5165--tags\u6765\u4e00\u6b21\u6027 push \u6240\u6709\u7684 tag \u6216\u8005\u6dfb\u52a0<tag name>\u6765\u4e0a\u4f20 tag \u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u534f\u4f5c","title":"\u8fdc\u7a0b\u534f\u4f5c","text":"

    \u8fdc\u7a0b\u7ba1\u7406\u4e3b\u8981\u6307\u591a\u4eba\u9879\u76ee\u65f6\u9700\u8981\u901a\u8fc7\u8fdc\u7a0b\u4ed3\u5e93\u6765\u5b8c\u6210\u534f\u4f5c\u3002\u8fd9\u91cc\u4ee5 GitHub \u4e3a\u4f8b\u3002 \u5f53\u4f60\u5728 Github \u521b\u5efa\u4e00\u4e2a\u7a7a repo \u4ee5\u540e\uff0c\u4f1a\u6709\u8fd9\u6837\u4e00\u4e2a\u9ed8\u8ba4\u9875\u9762\uff1a

    IsshikiHugh \u662f\u6211\u7684 User ID\uff0cnothing \u662f\u6211\u7684 Repo Name

    \u6211\u4eec\u91cd\u70b9\u5173\u6ce8\u4e2d\u95f4\u4e24\u4e2a\u4ee3\u7801\u6846\uff0c\u5199\u7684\u5df2\u7ecf\u975e\u5e38\u6e05\u695a\u4e86\u3002

    create a new repository on the command line\u6307\u5bfc\u4f60\u5728\u672c\u5730\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7a7a\u4ed3\u5e93\uff0c\u5e76\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\u94fe\u63a5\uff1b

    push an existing repository from the command line\u6307\u5bfc\u4f60\u5982\u4f55\u5c06\u8fdc\u7a0b\u4ed3\u5e93\u548c\u672c\u5730\u4ed3\u5e93\u94fe\u63a5\u8d77\u6765\uff0c\u5e76 push \u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","title":"\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","text":"

    \u6765\u81ea GitHub \u7684\u6307\u5bfc\u6587\u4ef6\u4e2d\u6700\u6838\u5fc3\u7684\u4e00\u6761\u6307\u4ee4\u662f\u5982\u4f55\u94fe\u63a5\u672c\u5730\u4ed3\u5e93\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\uff1a

    # \u5728\u672c\u5730\u6dfb\u52a0\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u547d\u540d\u4e3a <remote name> \uff0c\u6ce8\u610f\u8fd9\u91cc\u7684 <url> \u5e76\u4e0d\u662f\u6d4f\u89c8\u5668\u4e0a\u9762\n# \u90a3\u4e2a\uff0c\u800c\u662f\u4ece github \u590d\u5236\u8fc7\u6765\u7684 http \u6216\u8005 ssh \u63a8\u9001\ngit remote add <remote name> <url>\n# \u5e38\u7528\u7684 <remote name> \u662f origin\n
    \u9664\u6b64\u4e4b\u5916\uff0c\u5173\u4e8e\u8fdc\u7a0b\u4ed3\u5e93\u7684\u76f8\u5173\u547d\u4ee4\u8fd8\u6709\u5982\u4e0b\uff1a
    git remote -v                  # \u663e\u793a\u8fdc\u7a0b\u4ed3\u5e93(\u8be6\u7ec6\u4fe1\u606f)\ngit remote rm <remote name>    # \u89e3\u9664\u4e0e\u5bf9\u5e94\u8fdc\u7a0b\u4ed3\u5e93\u7684\u7ed1\u5b9a\u5173\u7cfb\ngit remote rename <from> <to>  # \u91cd\u547d\u540d\u7279\u5b9a\u8fdc\u7a0b\u4ed3\u5e93\n

    "},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","title":"\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","text":"

    \u4e3b\u8981\u6709\u4e24\u79cd\u65b9\u5f0f\uff0c\u5373pull\u548cfetch\uff0c\u533a\u522b\u5728\u4e8efetch\u5e76\u4e0d\u4f1a\u5408\u5e76\u5185\u5bb9\uff0c\u800c\u4ec5\u4ec5\u662f\u4e0b\u8f7d\u8fdc\u7a0b\u4ed3\u5e93\u4e2d\u7684\u53d8\u52a8\u4fe1\u606f\u3002\u7b80\u5355\u6765\u8bf4\u5c31\u662fpull\u7b49\u6548\u4e8efetch\u5e76merge\u3002

    # \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u4e0b\u8f7d\u53d8\u52a8\u5185\u5bb9\ngit fetch <remote name>\n\n# \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u53d8\u52a8\u5185\u5bb9\u5e76\u4e14\u5408\u5e76\u5230\u6307\u5b9a\u5206\u652f\ngit pull <remote name> <branch>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","title":"\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","text":"

    \u5728\u672c\u5730\u5b8c\u6210 commit \u64cd\u4f5c\u540e\uff0c\u5c31\u53ef\u4ee5 push \u5230\u8fdc\u7a0b\u4ed3\u5e93\uff1a

    # \u63a8\u9001 <branch> \u7684\u5185\u5bb9\u5230 <remote> \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\uff0c\u8fd9\u610f\u5473\u7740\u5728\u8fd9\u4e2a\u5206\u652f\u91cc\uff0c\n# \u4e0b\u4e00\u6b21 push \u53ea\u9700\u8981\u8f93\u5165 git push \u5373\u53ef\ngit push -u <remote> <branch>\n# eg: \u63a8\u9001 master \u5206\u652f\u7684\u5185\u5bb9\u5230 origin \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\ngit push -u origin master\n\ngit push --force    # \u5f3a\u5236\u63a8\u9001\u5f53\u524d\u5206\u652f\uff0c\u5373\u4f7f\u6709\u51b2\u7a81\u5b58\u5728\n--all      # \u63a8\u9001\u6240\u6709\u5206\u652f\u7684\u5185\u5bb9\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u7ba1\u7406","title":"\u5206\u652f\u7ba1\u7406","text":""},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5206\u652f","title":"\u67e5\u770b\u5206\u652f","text":"
    git branch        # \u663e\u793a\u672c\u5730\u6240\u6709\u5206\u652f\n-r     # \u663e\u793a\u8fdc\u7a0b\u6240\u6709\u5206\u652f\n-a     # \u663e\u793a\u6240\u6709\u5206\u652f\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u65b0\u5efa\u5206\u652f--\u5207\u6362\u5206\u652f--\u8bbe\u7f6e\u4e0a\u6e38","title":"\u65b0\u5efa\u5206\u652f / \u5207\u6362\u5206\u652f / \u8bbe\u7f6e\u4e0a\u6e38","text":"
    # \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\uff0c\u4f46\u4e0d\u5207\u6362\ngit branch <branch name>\n# \u901a\u8fc7 checkout \u6765\u5207\u6362\u5206\u652f\uff0c\u6bd4\u5982\u8fdb\u5165\u5230\u521a\u521a\u521b\u5efa\u7684\u5206\u652f\u6c47\u603b\ngit checkout <branch>         # \u8be5\u547d\u4ee4\u4f1a\u66f4\u65b0\u5de5\u4f5c\u533a\n# \u521b\u5efa\u5b8c\u5206\u652f\u540e\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u8bbe\u7f6e\u4e0a\u6e38\ngit branch --set-upstream <local branch> <remote branch>\n\n# \u5c06\u4e0a\u9762\u7684\u547d\u4ee4\u8fdb\u884c\u96c6\u6210\uff0c\u6709\uff1a\n\n# \u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\u5e76\u5207\u6362\ngit checkout -b <branch name>\n# \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <local branch> \u7684\u65b0\u5206\u652f\uff0c\u5e76\u8bbe <remote branch> \u4e3a\u4e0a\u6e38\ngit branch --track <local branch> <remote branch>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5408\u5e76","title":"\u5206\u652f\u5408\u5e76","text":"
    # \u5c06\u6307\u5b9a\u5206\u652f\u5408\u5e76\u5230\u5f53\u524d\u5206\u652f\uff0c\u9700\u8981\u5904\u7406\u51b2\u7a81\u90e8\u5206\uff08\u6c9f\u901a\u534f\u5546\u3001\u624b\u52a8\u89e3\u51b3\uff09\ngit merge <branch>\n\n# \u5c06\u7279\u5b9a commit \u5408\u5e76\u8fdb\u5f53\u524d\u5206\u652f\ngit cherry-pick <commit id>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5220\u9664","title":"\u5206\u652f\u5220\u9664","text":"
    # \u5220\u9664\u672c\u5730\u5206\u652f\ngit branch -d <branch>\n\n# \u5220\u9664\u8fdc\u7a0b\u5206\u652f\ngit push <remote> --delete <branch>\ngit branch -dr <remote>/<branch>\n# eg:\ngit branch -dr origin/testbrach\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684--\u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","title":"\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684 / \u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","text":""},{"location":"tech_accu/tool/Git/Commands/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Git/Workflow/","title":"Git Workflow","text":"

    \u7ea6 1267 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u7b80\u4ecb

    \u672c\u6587\u5185\u5bb9\u57fa\u4e8e\u6211\u81ea\u5df1\u7684\u7406\u89e3\u548c\u4e00\u4e9b\u6587\u7ae0\uff0c\u662f\u5b66\u4e60\u7b14\u8bb0\uff0c\u4f46\u540c\u65f6\u6211\u4e5f\u5e0c\u671b\u5b83\u80fd\u88ab\u4f5c\u4e3a\u4e00\u4e2a\u5b66\u4e60\u53c2\u8003\u8d44\u6599\u3002

    \u6240\u4ee5\u5982\u679c\u6709\u9519\u8bef\u8bf7\u53ca\u65f6\u8bc4\u8bba\u6216\u8005\u8054\u7cfb\u6211\uff0c\u5e0c\u671b\u80fd\u4e3a\u5927\u5bb6\u63d0\u4f9b\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u5b66\u4e60\u53c2\u8003\uff01

    \u56e0\u4e3a\u6211\u81ea\u5df1\u7684\u5f00\u53d1\u7ecf\u5386\u6709\u9650\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u81ea\u5df1\u7684\u7406\u89e3\u662f\u5408\u9002\u4e14\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u5e0c\u671b\u5927\u5bb6\u72e0\u72e0\u5730 educate \u6211\uff01

    \u672c\u6761\u76ee\u4e3b\u8981\u4ecb\u7ecd\u6709\u5173 Git Workflow \u7684\u6982\u5ff5\u6027\u8d28\u548c\u6307\u5bfc\u6027\u8d28\u7684\u4e00\u4e9b\u5185\u5bb9\uff0c\u5b83\u4eec\u5e76\u4e0d\u5177\u4f53\uff0c\u4f46\u662f\u4f1a\u6307\u5bfc\u60a8\u7684\u4f7f\u7528\u3002

    \u7531\u4e8e mkdocs \u5e76\u6ca1\u6709\u6807\u7b7e\u529f\u80fd\uff0c\u6240\u4ee5\u5176\u5b9e\u8fd8\u662f\u8bed\u96c0\u4e0a\u7684\u6587\u7ae0\u66f4\u597d\u770b\uff0c\u4f46\u662f\u6211\u5e76\u4e0d\u6253\u7b97\u66f4\u65b0\u8bed\u96c0\u4e86\uff0c\u6545\u8fd9\u91cc\u53ea\u653e\u4e00\u4e2a\u4ee5\u524d\u7684\u6307\u8def\u94fe\u63a5\uff1a\ud83d\udd17\u3002

    Git branch \u53ef\u89c6\u5316\u7ec3\u4e60\u7f51\u7ad9\uff1ahttps://note.isshikih.top/tech_accu/tool/Git/Workflow/

    "},{"location":"tech_accu/tool/Git/Workflow/#\u4f55\u4e3a-git-workflow","title":"\u4f55\u4e3a 'Git Workflow'","text":"

    Git Workflow \u662f\u4e00\u79cd\u89c4\u8303\u7684\u5de5\u4f5c\u6d41\u7a0b\uff0c\u800c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5177\u4f53\u7684\u5de5\u5177\u6216\u8005\u6280\u672f\uff0c\u5f53\u7136\u8c8c\u4f3c\u6709\u4e00\u4e2a\u53eb\u505a Gitflow \u7684\u5de5\u5177\uff0c\u4f46\u5728\u672c\u6587\u4e2d\u6682\u65f6\u4e0d\u4ecb\u7ecd\u3002 \u73b0\u5728\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684 Workflow \u4e3b\u8981\u6709\u4e09\u79cd\uff1a

    \u4ed6\u4eec\u7684\u5173\u7cfb\u662f\uff0c\u4f9d\u6b21\u5438\u6536\u4e0e\u6539\u8fdb\uff0c\u5404\u6709\u7279\u70b9\uff0c\u4e14\u4e0e\u5bf9\u5e94\u7684\u4f7f\u7528\u5e73\u53f0\u76f8\u9002\u5e94\uff0c\u4e0b\u9762\u5c06\u5206\u6761\u6982\u8ff0\u3002 \u5728\u4e0d\u540c\u7684 Workflow \u4e2d\uff0c\u6700\u4e3b\u8981\u7684\u533a\u522b\u5c31\u662f\u4e0d\u540c\u5206\u652f\u95f4\u7684\u5408\u4f5c\u5f62\u5f0f\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u5982\u679c\u4f60\u5bf9 Git \u7684\u5206\u652f\u8fd8\u4e0d\u662f\u5f88\u719f\u6089\uff0c\u8bf7\u5148\u53c2\u8003 Git Commands \u7684\u90e8\u5206\u5185\u5bb9\uff0c\u7b80\u5355\u4e86\u89e3\u4e00\u4e0b\u57fa\u7840\u6307\u4ee4\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#git-workflow_1","title":"Git Workflow","text":"

    [Source] https://gitbook.tw/chapters/gitflow/why-need-git-flow

    Tips: \u5728\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u4e00\u4e9b\u8bf4\u660e\u65f6\uff0c\u53ef\u4ee5\u8054\u7cfb\u4e0a\u65b9\u8fd9\u5f20\u56fe\u8fdb\u884c\u7406\u89e3\u3002

    \u5728 Git Workflow \u4e2d\uff0c\u4e3b\u8981\u6709 5 \u7c7b\u5206\u652f\uff0c\u4ed6\u4eec\u5206\u522b\u662f master hotfix release develop feature\uff0c\u5b83\u4eec\u6709\u7740\u4e0d\u540c\u7684\u4f5c\u7528\u548c\u4f7f\u7528\u89c4\u8303\u3002\u5176\u4e2dmasterdevelop\u662f\u957f\u671f\u5206\u652f\uff0c\u4ed6\u4eec\u4f1a\u968f\u7740\u9879\u76ee\u7684\u7ef4\u62a4\u4e00\u76f4\u5b58\u5728\uff0c\u800chotfixreleasefeature\u8fd9\u4e9b\u77ed\u671f\u5206\u652f\u5219\u4f1a\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u88ab\u5408\u5e76\u6216\u8005\u5220\u9664\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#master-\u5206\u652f\u4e3b\u5206\u652f","title":"Master \u5206\u652f\uff08\u4e3b\u5206\u652f\uff09","text":"

    \u76f4\u63a5\u9762\u5411\u4f7f\u7528\u65b9\u7684\u5206\u652f\uff0c\u5728master\u4e2d\u5b58\u653e\u7684\u5e94\u5f53\u662f\u53ef\u4ee5\u4f7f\u7528\u7684\u7a33\u5b9a\u7248\u672c\uff0c\u56e0\u800c\u901a\u5e38\u4e5f\u4f1a\u5728\u5176\u4e2d\u6dfb\u52a0\u7248\u672c\u7f16\u53f7\u3002 \u6211\u4eec\u5e0c\u671b master \u4e2d\u7684\u4ee3\u7801\u603b\u662f\u4ece\u522b\u7684\u5206\u652f\u4e2d\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u800c\u5e76\u4e0d\u5e0c\u671b\u4efb\u4f55\u4eba\u76f4\u63a5 commit \u5230 master \u4e2d\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#develop-\u5206\u652f\u5f00\u53d1\u5206\u652f","title":"Develop \u5206\u652f\uff08\u5f00\u53d1\u5206\u652f\uff09","text":"

    \u6240\u6709\u5f00\u53d1\u5de5\u4f5c\u90fd\u57fa\u4e8e\u8be5\u5206\u652f\u8fdb\u884c\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u9879\u76ee\u4ee3\u7801\u7684\u6c47\u6d41\u5904\uff0c\u800c master \u5219\u662f develop \u4e2d\u7279\u5b9a\u8282\u70b9\u53ef\u7528\u53d1\u884c\u3002 \u5f53\u9700\u8981\u6dfb\u52a0\u65b0\u7684\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u9700\u8981\u65b0\u5efa\u4e00\u4e2a feature (\u5982\u56fe)\uff0c\u7136\u540e\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u5408\u5e76\u56de develop\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#hotfix-\u5206\u652f\u8865\u4e01\u5206\u652f","title":"Hotfix \u5206\u652f\uff08\u8865\u4e01\u5206\u652f\uff09","text":"

    \u5f53 master \u4e2d\u51fa\u73b0\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u51fa\u95ee\u9898\u7684\u8282\u70b9\u4e3a\u57fa\u7840\u521b\u5efa\u4e00\u4e2a hotfix\uff0c\u7136\u540e\u5728\u8fd9\u4e2a hotfix \u4e2d\u8fdb\u884c bug \u7684\u4fee\u590d\u5de5\u4f5c\u3002 \u5728\u5b8c\u6210\u4fee\u590d\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a\u8fd9\u4e2a hotfix \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop(\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8be5 bug\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#release-\u5206\u652f\u9884\u53d1\u5206\u652f","title":"Release \u5206\u652f\uff08\u9884\u53d1\u5206\u652f\uff09","text":"

    \u5f53 develop \u8db3\u591f\u6210\u719f\u65f6\uff0c\u6211\u4eec\u4f1a\u5e0c\u671b\u5b83\u88ab\u5408\u5e76\u5230 master \u4e2d\u4f5c\u4e3a\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53d1\u5e03\uff0c\u4f46\u5728\u8fd9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5728 release \u4e2d\u8fdb\u884c\u6700\u540e\u7684\u6d4b\u8bd5\u548c\u4fee\u6b63\u3002 \u5728\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a release \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop (\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8fd9\u4e9b\u95ee\u9898\u3002

    hotfix\u548crelease\u662f\u7c7b\u4f3c\u7684\uff0c\u4ed6\u4eec\u4e00\u4e2a\u662f\u57fa\u4e8emaster\u5bf9\u4e24\u4e2a\u957f\u671f\u5206\u652f\u8fdb\u884c\u7ef4\u62a4\uff0c\u4e00\u4e2a\u662f\u57fa\u4e8edevelop\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#feature-\u5206\u652f\u529f\u80fd\u5206\u652f","title":"Feature \u5206\u652f\uff08\u529f\u80fd\u5206\u652f\uff09","text":"

    \u5f53\u6211\u4eec\u9700\u8981\u5f00\u53d1\u65b0\u7684\u529f\u80fd\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u5927\u90e8\u5206\u5f00\u53d1\u5de5\u4f5c\uff0c\u5728\u5408\u7406\u7684\u6a21\u5757\u5212\u5206\u540e\uff0c\u5c31\u9700\u8981\u521b\u5efa\u5408\u9002\u7684 feature \u5206\u652f\u6765\u8fdb\u884c\u5bf9\u5e94\u7684\u5f00\u53d1\u5de5\u4f5c\u3002\u56e0\u4e3a feature \u5f80\u5f80\u6bd4\u8f83\u591a\uff0c\u6240\u4ee5\u8981\u6c42\u5404\u4e2afeature\u4e4b\u95f4\u8026\u5408\u7a0b\u5ea6\u4e0d\u5b9c\u8fc7\u9ad8\uff0c\u4ee5\u51cf\u5c11\u51b2\u7a81\uff0c\u8fd9\u5c31\u9700\u8981\u8fdb\u884c\u5408\u7406\u7684\u5212\u5206\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#github-workflow","title":"Github Workflow","text":"

    Github Workflow \u5bf9 Git Workflow \u8fdb\u884c\u4e86\u7b80\u5316\uff0c\u5728 Github Workflow \u4e0b\u4ec5\u4ec5\u533a\u5206 master \u548c branch\uff0c\u800c\u5177\u4f53\u529f\u80fd\u7531\u5404\u4e2a branch \u7684\u547d\u540d\u6765\u4f53\u73b0\uff0c\u5373\u8981\u6c42 branch \u7684\u547d\u540d\u5177\u6709\u53d9\u4e8b\u6027\u3002

    \u6700\u91cd\u8981\u7684\u662f\uff0c\u6ca1\u6709\u4e86 develop \u5206\u652f\u4ee5\u540e\uff0c\u957f\u671f\u7ef4\u62a4\u7684\u5c31\u53ea\u6709 master \u4e86\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u53d1\u5e03\u7684\u4ee3\u7801\u4e00\u822c\u90fd\u662f\u8fdb\u5ea6\u6700\u65b0\u7684\u4ee3\u7801\u3002\u800c\u8fd9\u4ef6\u4e8b\u662f\u6709\u597d\u6709\u574f\u7684\u3002 \u57fa\u4e8e Github Workflow \u7684\u5de5\u4f5c\u6d41\u7a0b\u4e3b\u8981\u5982\u4e0b\uff1a

    1. \u521b\u5efa\u5206\u652f (create a branch or fork)\uff1b
    2. \u5728\u5206\u652f\u4e2d\u8fdb\u884c\u5f00\u53d1\u5e76\u5b8c\u6210\u63d0\u4ea4 (add commits)\uff1b
    3. \u53d1\u9001 Pull Request (open a pull request)\uff1b
    4. \u4eba\u5de5\u5ba1\u6838\u4ee3\u7801\u3001\u6c9f\u901a\u4ea4\u6d41\uff0c\u4ee5\u53ca\u5fc5\u8981\u7684\u6d4b\u8bd5 (discuss and review)\uff1b
    5. \u5408\u5e76\u8fdb master (merge)

    \u56e0\u800c\uff0c\u5728\u8fd9\u6837\u4e00\u4e2a\u5de5\u4f5c\u6d41\u7a0b\u4e0b\uff0c\u5408\u4f5c\u8005\u4e4b\u95f4\u7684\u4ea4\u6d41\u5c31\u66f4\u52a0\u91cd\u8981\u4e86\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#gitlab-workflow","title":"Gitlab Workflow","text":""},{"location":"tech_accu/tool/Git/Workflow/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Shell/","title":"Shell","text":"

    \u7ea6 4930 \u4e2a\u5b57 462 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 30 \u5206\u949f

    \u6587\u7ae0\u76ee\u6807

    \u5728\u5b8c\u6210\u672c\u6587\u5b66\u4e60\u540e\uff0c\u6211\u4eec\u671f\u5f85\u60a8\u5bf9 Shell \u80fd\u6709\u66f4\u5177\u4f53\u7684\u8ba4\u8bc6\uff0c\u5e76\u80fd\u505a\u5230\u901a\u8fc7 Command Line \u5b9e\u73b0\u57fa\u7840\u4ea4\u4e92\u5e76\u4e86\u89e3\u5982\u4f55\u5b66\u4e60 Shell\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u64b0\u5199 Shell \u811a\u672c\u6765\u5b9e\u73b0\u4e00\u4e9b\u81ea\u52a8\u5316\u3002

    \u6b64\u5916\uff0c\u4ece Shell \u5165\u95e8\u5230\u547d\u4ee4\u884c\u5927\u5e08\uff0c\u5176\u4e2d\u80af\u5b9a\u6709\u5f88\u957f\u7684\u8def\u8981\u8d70\uff0c\u6211\u4eec\u6ca1\u6cd5\u6d89\u53ca Shell \u7684\u5168\u90e8\u77e5\u8bc6\u70b9\uff0c\u5149\u547d\u4ee4\u5c31\u80fd\u8bb2\u4e0a\u5f88\u4e45\uff0c\u6240\u4ee5\u4e00\u5b9a\u8981\u5b66\u4f1a\u5982\u4f55\u5229\u7528\u624b\u518c\u548c\u6587\u6863\u7b49\u67e5\u8be2\u547d\u4ee4\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u672c\u6587\u5e0c\u671b\u505a\u5230\u7684\u662f\u6388\u4eba\u4ee5\u6e14\u800c\u975e\u6388\u4eba\u4ee5\u9c7c\u3002

    \u6b64\u5916\uff0c\u6211\u4f1a\u5728\u6587\u4e2d\u591a\u6b21\u5c06 Shell \u4e0e C \u8bed\u8a00\u7684\u4e00\u4e9b\u5185\u5bb9\u76f8\u8054\u7cfb\uff0c\u5982\u679c\u60a8\u6709 C \u7684\u57fa\u7840\uff0c\u90a3\u5c06\u518d\u597d\u4e0d\u8fc7\u3002

    "},{"location":"tech_accu/tool/Shell/#\u6982\u8ff0","title":"\u6982\u8ff0","text":""},{"location":"tech_accu/tool/Shell/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

    Shell \u7684\u4e2d\u6587\u540d\u79f0\u4e3a\u201c\u58f3\u5c42\u201d\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u201c\u6700\u5916\u5c42\u201d\u3002Wiki \u5bf9\u5176\u63cf\u8ff0\u4e3a\uff1a

    It is named a shell because it is the outermost layer around the operating system.

    \u7b80\u5355\u6765\u8bf4\uff0cShell \u5c06\u8bfb\u5165\u6765\u81ea Keyboard \u7684\u5185\u5bb9\uff0c\u5e76\u5c06\u6307\u4ee4\u53d1\u9001\u7ed9 OS \u4ee5\u8c03\u7528\u7cfb\u7edf\u670d\u52a1\u3002

    \u5728\u5e38\u89c1\u7684\u65e5\u7528\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5982 Windows \u4e0e MacOS\uff0c\u4f60\u53ef\u80fd\u5c1d\u8bd5\u8fc7\u4f7f\u7528 GUI(Graphical User Interface)\uff0c\u5373\u56fe\u5f62\u7528\u6237\u754c\u9762\u6765\u4e0e\u4f60\u7684\u7cfb\u7edf\u6109\u5feb\u73a9\u800d\uff1b\u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0cShell \u5219\u662f\u4e00\u79cd CLI(Command Line Interface)\uff0c\u4e0d\u540c\u4e8e GUIs \u901a\u8fc7\u70b9\u51fb\u6309\u94ae\u7b49\u64cd\u4f5c\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u7b49\u65b9\u5f0f\uff0cCLI \u8981\u6c42\u7528\u6237\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u3002\u800c\u4f5c\u4e3a\u4e00\u4e2a\u5408\u683c\u7684\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u63a5\u89e6\u5230\u7684\u5927\u591a\u6570\u751f\u4ea7\u573a\u666f\u4e2d\uff0c\u4f7f\u7528 CLI \u662f\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\u7684\u9009\u62e9\uff0c\u4e8b\u5b9e\u4e0a\u4f60\u4e5f\u5f88\u96be\u907f\u514d\u5b83\u2014\u2014\u56e0\u800c\uff0c\u6211\u4eec\u9700\u8981\u638c\u63e1 Shell \u7684\u57fa\u672c\u4f7f\u7528\u3002

    \u5982\u4eca\uff0c\u5df2\u7ecf\u6709\u975e\u5e38\u591a\u7684 Shell \u53ef\u4ee5\u4f7f\u7528\uff0c\u800c\u4ed6\u4eec\u57fa\u672c\u4e0a\u90fd\u4ee5 sh \u7ed3\u5c3e\uff0c\u4f8b\u5982\u5e38\u89c1\u7684 bash \u548c zsh ,\u518d\u6bd4\u5982\u8bb8\u591a\u57fa\u4e8e Alpine \u7684 Docker Image\uff0c\u5185\u7f6e\u7684 Shell \u90fd\u662f sh\u3002\u5176\u4ed6\u7684\u8fd8\u6709 dash csh ksh \u7b49\u7b49\u3002

    "},{"location":"tech_accu/tool/Shell/#shell-vs-terminal","title":"Shell vs Terminal","text":"

    \u5728\u6b63\u5f0f\u5f00\u59cb\u4ecb\u7ecd Shell \u4e4b\u524d\uff0c\u6211\u8ba4\u4e3a\u6709\u5fc5\u8981\u505a\u4e00\u4e9b\u8fa8\u6790\u3002

    \u5728\u73b0\u4ee3\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\uff0c\u60f3\u8981\u4f7f\u7528 Shell\uff0c\u4f60\u9700\u8981\u501f\u52a9 Terminal\uff0c\u5373\u7ec8\u7aef\uff08\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u662f terminal emulator\uff0c\u4e0d\u8fc7\u5728\u672c\u6587\u4e2d\u6211\u4eec\u5e76\u4e0d\u4f1a\u5c31\u6b64\u5c55\u5f00\uff09\u3002Terminal \u4e4b\u4e8e Shell\uff0c\u5c31\u597d\u50cf\u7535\u8bdd\u4e4b\u4e8e\u901a\u8baf\u670d\u52a1\u3002

    \u4f8b\u5982\uff0c\u56fe\u4e2d\u6253\u5f00\u7684\u8fd9\u4e2a\u201c\u7a97\u53e3\u201d\u5c31\u662f\u4e00\u4e2a\u53eb\u505a iTerm2 \u7684 terminal emulator\uff0c\u800c\u6211\u4f7f\u7528\u7684 fish \u5219\u662f\u4e00\u79cd Shell\u3002

    \u80fd\u4e0e\u8fd9\u4e24\u4e2a\u4e1c\u897f\u8fdb\u884c\u6bd4\u8f83\u548c\u8fa8\u6790\u7684\u4e1c\u897f\u5176\u5b9e\u8fd8\u6709\u5f88\u591a\uff0c\u4f46\u5e76\u975e\u672c\u6587\u4e3b\u9898\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"tech_accu/tool/Shell/#\u4ee5-bash-\u4e3a\u4f8b","title":"\u4ee5 Bash \u4e3a\u4f8b","text":"

    bash \u5168\u79f0 Bourne Again Shell\uff0c\u662f\u5982\u4eca\u6700\u5e38\u7528\u7684 Shell \u4e4b\u4e00\uff0c\u4e14\u5927\u90e8\u5206 Linux \u90fd\u4f1a\u5185\u7f6e bash\uff0c\u8fd9\u4e5f\u907f\u514d\u4e86\u66f4\u591a\u7684\u73af\u5883\u914d\u7f6e\u8d1f\u62c5\uff0c\u6240\u4ee5\u5728\u672c\u7ae0\u79cd\uff0c\u6211\u4eec\u5c06\u4ee5 bash \u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u4e00\u4e9b Shell \u5e38\u7528\u6307\u4ee4\u548c\u6280\u5de7\u3002

    \u6b64\u5916\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u63d0\u4f9b\u7684\u5927\u591a\u6570\u8bba\u65ad\u4e3b\u8981\u57fa\u4e8e Linux \u7cfb\u7edf\u3002\u90e8\u5206\u7ed3\u8bba\u5728 Windows \u7b49\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5e76\u4e0d\u6210\u7acb\u3002\u5982\u679c\u60a8\u6709\u5174\u8da3\uff0c\u53ef\u4ee5\u81ea\u884c\u67e5\u8be2\u8d44\u6599\u3002

    "},{"location":"tech_accu/tool/Shell/#\u51c6\u5907\u5de5\u4f5c","title":"\u51c6\u5907\u5de5\u4f5c","text":"

    \u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u5e0c\u671b\u60a8\u786e\u4fdd\u60a8\u672c\u5730\u5df2\u6709\u53ef\u7528\u7684 bash \u73af\u5883\uff0c\u4ee5\u4fbf\u4e8e\u60a8\u80fd\u8ddf\u7740\u6559\u7a0b\u8fb9\u5b9e\u8df5\u8fb9\u5b66\u4e60\u3002

    \u5728\u8fd9\u91cc\uff0c\u6211\u5c06\u63d0\u4f9b\u4e00\u79cd\u7b80\u5355\u7684\u914d\u7f6e bash \u73af\u5883\u7684\u65b9\u6848\uff1a

    \u5f53\u7136\uff0c\u6211\u4eec\u6700\u63a8\u8350\u7684\u8fd8\u662f\u60a8\u53ef\u4ee5\u914d\u7f6e\u4e00\u4e2a Linux \u73af\u5883\u4ee5\u8fdb\u884c\u5b9e\u8df5\u548c\u5b66\u4e60\u3002

    \u5f53\u60a8\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u60a8\u53ef\u80fd\u770b\u5230\u7c7b\u4f3c\u4e8e\u5982\u4e0b\u5217\u4e3e\u7684\u5185\u5bb9\u7684\u60c5\u51b5\uff1a

    # \u4e5f\u8bb8\u662f\u8fd9\u6837\nxxx:~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u6216\u8005\u8fd9\u6837\n[xxx@yyy]~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u53c8\u6216\u8005\u8fd9\u6837\nxxxx yyyy ~\n$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# ...\n

    \u5b9e\u9645\u60c5\u51b5\u8fd8\u6709\u5f88\u591a\u79cd\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u201c\u5f62\u5f0f\u201d\u90fd\u662f\u53ef\u4ee5\u88ab\u8bbe\u7f6e\u7684\u3002\u6bd4\u5982\u8fd9\u91cc\u7684 $ \u88ab\u79f0\u4e3a prompt\uff0c\u5728\u672c\u6587\u7b2c\u4e00\u5f20\u56fe\u7247\u4e2d\u6211\u5c31\u5c06\u5b83\u8bbe\u7f6e\u4e3a\u4e86\u4e00\u4e2a Emoji \u56fe\u6807\u3002\u800c\u6211\u4eec\u53d1\u73b0\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e2a ~ \uff0c\u5b83\u8868\u793a\u7684\u662f\u60a8\u7684\u201c\u5bb6\u76ee\u5f55\u201d\u3002\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u5b83\u7684\u542b\u4e49\u662f\u60a8\u5f53\u524d\u6240\u5728\u7684\u4f4d\u7f6e\u662f\u60a8\u7684\u5bb6\u76ee\u5f55\u3002\u5173\u4e8e\u8fd9\u4e00\u70b9\u6211\u4eec\u5c06\u5728\u63a5\u4e0b\u6765\u5c55\u5f00\u3002

    \u6b64\u5916\uff0c\u5982\u679c\u60a8\u5bf9 Linux \u7cfb\u7edf\u6709\u4e00\u5b9a\u8ba4\u8bc6\uff0c\u90a3\u65e0\u7591\u4f1a\u5e2e\u52a9\u60a8\u7406\u89e3\u672c\u6587\u3002

    \u90a3\u4e48\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u5f00\u59cb\u5427\uff01

    "},{"location":"tech_accu/tool/Shell/#\u5e2e\u52a9\u624b\u518c","title":"\u5e2e\u52a9\u624b\u518c","text":"

    \u5de6\u601d\u53f3\u60f3\uff0c\u6700\u540e\u6211\u8fd8\u662f\u628a\u8fd9\u6761\u6307\u4ee4\u653e\u5230\u4e86\u6700\u524d\u6765\u8bb2\u3002\u6211\u4eec\u4e0d\u53ef\u80fd\u4ec5\u4ec5\u901a\u8fc7\u4e00\u7bc7\u6587\u7ae0\u5c31\u4e86\u89e3\u547d\u4ee4\u884c\u7684\u5168\u90e8\u77e5\u8bc6\uff0c\u6240\u4ee5\u6211\u89c9\u5f97\u628a man \u653e\u5230\u6700\u524d\u9762\u6765\u8bb2\u662f\u5f88\u6709\u610f\u4e49\u7684\u3002

    man \u7684\u4f5c\u7528\u662f\u6253\u5f00\u4e00\u4e2a user manual\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6211\u4eec\u5728\u7ec8\u7aef\u4e2d\u8f93\u5165 man man\uff0c\u5c31\u4f1a\u5f97\u5230\u5982\u4e0b\u7ed3\u679c\uff0c\u5373\u4f7f\u7528 man \u6253\u5f00\u4e86 man \u7684\u624b\u518c\uff1a

    man(1)                                     General Commands Manual                                    man(1)\n\nNAME\n       man - format and display the on-line manual pages\n\nSYNOPSIS\n       man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B\n       browser] [-H htmlpager] [-S section_list] [section] name ...\n\nDESCRIPTION\n       man formats and displays the on-line manual pages.  If you specify section, man only looks in that\n       section of the manual.  name is normally the name of the manual page, which is typically the name of\n       a command, function, or file.  However, if name contains a slash (/) then man interprets it as a file\n       specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz.\n\n       See below for a description of where man looks for the manual page files.\n\n......\n

    \u4e3a\u4e86\u5b9e\u73b0\u629b\u7816\u5f15\u7389\u7684\u76ee\u7684\uff0c\u73b0\u5728\u6211\u4eec\u4ec5\u4ec5\u4ecb\u7ecd man \u7684\u8fd9\u4e9b\u90e8\u5206\uff0c\u5b9e\u9645\u4e0a\u5149\u770b manual \u7684\u6587\u672c\u91cf\u5c31\u80fd\u611f\u53d7\u5230\uff0c man \u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u4f46\u672c\u6587\u5e76\u4e0d\u6253\u7b97\u5c31\u6b64\u6df1\u5165\u3002\u800c\u5728\u8fd9\u91cc\u4ecb\u7ecd man \u7684\u76ee\u7684\uff0c\u4e00\u65b9\u9762\u662f\u5e0c\u671b\u5927\u5bb6\u5728\u5b66\u4e60\u4e4b\u540e\u7684\u547d\u4ee4\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003 user manual\uff0c\u4e8b\u5b9e\u4e0a\u672c\u6587\u6d89\u53ca\u7684\u547d\u4ee4\u4e5f\u5e76\u4e0d\u4f1a\u4ecb\u7ecd\u5176\u5168\u90e8\u7528\u6cd5\uff1b\u53e6\u4e00\u65b9\u9762\u662f\u9f13\u52b1\u5927\u5bb6\u5728\u9047\u5230\u4e3a\u6b62\u7684\u6307\u4ee4\u65f6\uff0c\u901a\u8fc7\u624b\u518c\u7b49\u9014\u5f84\u5148\u67e5\u8be2\u5176\u884c\u4e3a\u3001\u7528\u6cd5\uff0c\u518d\u4f7f\u7528\u5b83\u3002

    "},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u5b57\u7b26\u4e32--echo","title":"\u6253\u5370\u5b57\u7b26\u4e32 | echo","text":"

    echo \u5373\u56de\u54cd\uff0c\u8fd9\u4e2a\u5355\u8bcd\u975e\u5e38\u5f62\u8c61\u5730\u63cf\u8ff0\u4e86\u8fd9\u4e2a\u547d\u4ee4\u7684\u4f5c\u7528\uff0c\u5c06\u5176\u63a5\u53d7\u5230\u7684\u5185\u5bb9\u201c\u56de\u54cd\u201d\u51fa\u6765\u3002

    # echo \u4f1a\u5c06\u5b83\u62ff\u5230\u7684\u53c2\u6570\u5168\u90fd\u5f53\u4f5c\u5b57\u7b26\u4e32\u6253\u5370\u51fa\u6765\uff0c\u4f46\u6210\u5bf9\u5f15\u53f7\u5e76\u4e0d\u4f1a\n$ echo <something>\n$ echo \"something 1 2 3\"\nsomething 1 2 3\n$ echo something 1 2 3\nsomething 1 2 3\n\n# \u5982\u679c\u4f60\u53ea\u8f93\u5165\u4e86\u4e00\u4e2a\u5f15\u53f7\uff0c\u5b83\u4f1a\u7b49\u4f60\u628a\u4ed6\u8865\u5b8c\u518d\u8f93\u51fa\n# \u5982\u679c\u60f3\u8f93\u51fa\u5f15\u53f7\uff0c\u9700\u8981\u4f7f\u7528 \\\" \u8f6c\u4e49\n$ echo \"\nFine, \\\"I\\\" will finish the string.\n\"\nFine, \"I\" will finish the string.\n\n# echo \u652f\u6301\u8f93\u51fa\u53c2\u6570\uff0c\u4ee5 $ \u5f00\u5934\uff0c\u5728\u547d\u4ee4\u884c\u73af\u5883\u4e0b\u4ed6\u4eec\u6307\u73af\u5883\u53d8\u91cf\uff0c\u5728\u811a\u672c\u73af\u5883\u4e0b\u8fd8\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u53c2\u6570\u4f20\u9012\n# \u4e0b\u9762\u7684\u547d\u4ee4\u8f93\u51fa\u4e86\u5f53\u524d\u7528\u6237\uff0cUSER \u662f\u4e00\u4e2a\u503c\u4e3a\u5f53\u524d\u7528\u6237\u7684\u7528\u6237\u540d\u7684\u73af\u5883\u53d8\u91cf\u3002\necho $USER\nisshikih\n
    "},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u5f53\u524d\u8def\u5f84--pwd","title":"\u67e5\u770b\u5f53\u524d\u8def\u5f84 | pwd","text":"

    \u5728\u8fd9\u91cc\u6211\u4eec\u60f3\u4ecb\u7ecd\u7684\u7b2c\u4e8c\u4e2a\u6307\u4ee4\u662f pwd\uff0c\u5b83\u7684\u6548\u679c\u662f\u8f93\u51fa\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u3002

    $ pwd\n# \u6bd4\u5982\u6211\u7684\u73af\u5883\u4e0b\uff0c\u5728 ~ \u4e0b\u8f93\u51fa\u5982\u4e0b\n/Users/isshikih\n# \u8868\u793a\u6211\u5f53\u524d\u7684\u4f4d\u7f6e\u662f /Users/isshikih\n

    \u4e00\u5207\u7686\u6587\u4ef6 \u662f Linux \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u800c Shell \u7684\u4f7f\u7528\u6709\u76f8\u5f53\u4e00\u90e8\u5206\u662f\u57fa\u4e8e\u6587\u4ef6\u4f53\u7cfb\u7684\u3002\u800c\u5982\u4f55 \u7d22\u5f15 \u4e00\u4e2a\u6587\u4ef6\u5462\uff1f\u6211\u4eec\u9700\u8981\u63d0\u4f9b\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u548c\u6587\u4ef6\u540d\uff01\u4f8b\u5982\uff0c\u60a8\u9700\u8981\u53bb\u4e00\u53f0 Windows \u7535\u8111\u4e2d\u627e\u5230\u60a8\u4e0a\u5b66\u671f\u7684\u8bfe\u7a0b\u4f5c\u4e1a\uff0c\u5b83\u7684\u6587\u4ef6\u540d\u4e3a myHomework.pdf \uff0c\u4e5f\u8bb8\u4f60\u9700\u8981\u6253\u5f00D\u76d8\u4e2d\u7684 Homework \u6587\u4ef6\u5939\u3002\u90a3\u4e48\u62bd\u8c61\u5730\u6765\u8bf4\uff0c\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u4e3a D:\\Homework\\myHomework.pdf \uff08\u8fd9\u662f\u5728 Windows \u4e0a\u7684\u5199\u6cd5\uff09\u3002\u8fd9\u79cd\u5f62\u5f0f\u7684\u201c\u4f4d\u7f6e\u201d\u88ab\u79f0\u4e3a \u7edd\u5bf9\u8def\u5f84\uff0c\u5373\u6211\u4eec\u9700\u8981\u586b\u5199\u6587\u4ef6\u7684\u5b8c\u6574\u8def\u5f84\u624d\u80fd\u627e\u5230\u8fd9\u4e2a\u6587\u4ef6\u3002\u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u63d0\u5230\u7684<filename><dirname>\u7b49\u90fd\u5305\u62ec\u4e86\u6587\u4ef6\u7684\u8def\u5f84\u3002

    \ud83d\udc49\u00a0\u4e8b\u5b9e\u4e0a\uff0c\u6709\u76f8\u5f53\u4e00\u90e8\u5206 Shell \u8bed\u6cd5\u662f\u56f4\u7ed5\u7740\u6587\u4ef6\u5c55\u5f00\u7684\u3002

    "},{"location":"tech_accu/tool/Shell/#\u5207\u6362\u76ee\u5f55--cd","title":"\u5207\u6362\u76ee\u5f55 | cd","text":"

    cd \u662f change directory \u7684\u7f29\u5199\uff0c\u5b83\u7684\u6548\u679c\u662f\u5c06\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u8f6c\u79fb\u5230\u76ee\u6807\u76ee\u5f55\u4e2d\u3002\u5b83\u7684\u5199\u6cd5\u5982\u4e0b\uff1a

    cd {target directory}\n\n# eg 1: =========================================\n$ pwd\n/home/username\n\n$ cd /home/username/aaa\n$ pwd\n/home/username/aaa\n\n# eg 2: =========================================\n$ pwd\n/home/username\n\n$ cd ./aaa/bbb\n$ pwd\n/home/username/aaa/bbb\n\n# eg 3: =========================================\n$ pwd\n/home/username\n\n$ cd ./../aaa\n$ pwd\n/home/aaa\n

    \u63a5\u4e0b\u6765\u5bf9\u4e0a\u9762 eg \u7684\u90e8\u5206\u7b26\u53f7\u505a\u4e00\u4e0b\u89e3\u91ca\uff1a

    \u6b64\u5916\uff0c\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e9b\u5feb\u6377\u65b9\u5f0f\uff1a

    "},{"location":"tech_accu/tool/Shell/#\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9--ls","title":"\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9 | ls","text":"

    ls \u6307\u4ee4\u7528\u6765\u67e5\u770b\u76ee\u6807\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u3002\u5e38\u7528\u7684\u53c2\u6570\u4e3b\u8981\u6709 -l \uff08\u957f\u683c\u5f0f\uff09\u548c -a \uff08\u663e\u793a\u5168\u90e8\uff09\u3002

    \u5177\u4f53\u5199\u6cd5\u5982\u4e0b\uff1a

    # \u5047\u8bbe\u6211\u4eec\u5f53\u524d\u5728\u6587\u4ef6\u5939 my_ \u4e0b\uff0c\u6587\u4ef6\u5939\u5185\u6709\u4e24\u4e2a\u6587\u4ef6\u548c\u4e00\u4e2a\u6587\u4ef6\u5939\n# \u6587\u4ef6 .hidden \u548c\u6587\u4ef6 file1.md\n# \u6587\u4ef6\u5939 dir1\uff0c\u91cc\u9762\u6709\u4e2a\u6587\u4ef6 file2.md\n\n$ ls\ndir1        file1.md\n\n$ ls -a\n.               ..      .hiden1     dir1        file1.md\n\n$ ls -l\ndrwxr-xr-x  2 isshikih  staff  64 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff   7 10 12 12:16 file1.md\n\n$ ls -la\ndrwxr-xr-x  5 isshikih  staff  160 10 12 12:15 .\ndrwxr-xr-x  6 isshikih  staff  192 10 12 12:14 ..\n-rw-r--r--  1 isshikih  staff    0 10 12 12:15 .hiden1\ndrwxr-xr-x  2 isshikih  staff   96 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff    7 10 12 12:16 file1.md\n\n# \u5982\u679c\u540e\u9762\u8ddf\u7740\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5219\u663e\u793a\u76ee\u6807\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\uff0c\u5426\u5219\u663e\u793a\u5f53\u524d\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\u3002\n$ ls dir1\nfile2.md\n
    -rw-------   1 me       me            576 Apr 17  2019 weather.txt\ndrwxr-xr-x   6 me       me           1024 Oct  9  2019 web_page\n-rw-rw-r--   1 me       me         276480 Feb 11 20:41 web_site.tar\n-rw-------   1 me       me           5743 Dec 16  2018 xmas_file.txt\n\n----------  -------  -------     -------- ------------ -------------\n|          |        |            |         |             |\n|          |        |            |         |\n|          |        |            |         |           \u6587\u4ef6\u540d\n|          |        |            |         |\n|          |        |            |         +---       \u4fee\u6539\u65f6\u95f4\n|          |        |            |\n|          |        |            +-------------   \u6587\u4ef6\u5927\u5c0f(in bytes)\n|          |        |\n|          |        +--------------------------       \u6240\u5c5e\u7528\u6237\u7ec4\n|          |\n|          +-----------------------------------       \u6240\u5c5e\u7528\u6237\n|\n+----------------------------------------------       \u6587\u4ef6\u6743\u9650\n# Edited from https://linuxcommand.org/lc3_lts0030.php\n
    "},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u5185\u5bb9--cat","title":"\u6253\u5370\u6587\u4ef6\u5185\u5bb9 | cat","text":"

    cat \u6307\u4ee4\u4f1a\u8fde\u63a5\u6587\u4ef6\u5e76\u5c06\u5185\u5bb9\u6253\u5370\u5230\u6807\u51c6\u8f93\u51fa\u6d41\u3002

    # <filename> \u662f\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\u3002\n$ cat <filename>\n
    "},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9--head--tail","title":"\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9 | head & tail","text":"

    head \u548c tail \u8bed\u6cd5\u7c7b\u4f3c\uff0c\u529f\u80fd\u7c7b\u4f3c\uff0c\u5206\u522b\u4e3a\u67e5\u770b\u76ee\u6807\u6587\u4ef6\u7684\u5f00\u5934\u90e8\u5206\u7684\u5185\u5bb9\u548c\u7ed3\u5c3e\u90e8\u5206\u7684\u5185\u5bb9\u3002\u4e0d\u8fc7\u7531\u4e8e\u6211\u4eec\u5bf9\u6587\u672c\u6587\u4ef6\u9664\u4e86\u8bfb\u5199\uff0c\u8fd8\u6709\u4e00\u4e2a\u53eb\u505a\u201c\u8ffd\u52a0\u201d\u7684\u64cd\u4f5c\uff08\u7c7b\u6bd4 C \u8bed\u8a00\u4e2d fopen() \u7684 \u2018a\u2019 \u6a21\u5f0f\uff09 tail \u4f1a\u6301\u7eed\u6253\u5370\u65b0\u8ffd\u52a0\u8fdb\u6587\u4ef6\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u82b1\u6837\u7a0d\u5fae\u6bd4 head \u591a\u4e00\u70b9\u3002

    # `head` \u548c `tail` \u90fd\u6709\u9ed8\u8ba4\u53c2\u6570 `-n 10`\n# \u4e5f\u5c31\u662f\uff0c\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u524d 10 \u884c\n$ head <filename>\n$ head -n 10 <filename>\n# \u4e0b\u9762\u8fd9\u4e24\u6761\u6307\u4ee4\u4e5f\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u672b 10 \u884c\n$ tail <filename>\n$ tail -n 10 <filename>\n\n# \u5c06 10 \u6539\u6210\u5176\u4ed6\u6570\u5b57\u5c31\u53ef\u4ee5\u4fee\u6539\u663e\u793a\u7684\u884c\u6570\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 4 \u884c\n$ head -n 4 <filename>\n$ tail -n 4 <filename>\n\n# \u9664\u4e86\u884c\u6570\uff0c\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u6253\u5370\u7684\u5b57\u8282\u6570\uff0c\u5982\u4e0b\u9762\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 20 \u4e2a\u5b57\u8282\n$ head -c 20 <filename>\n$ tail -c 20 <filename>\n

    # `tail` \u6bd4 `head` \u8fd8\u8981\u591a\u4e00\u4e9b\u53c2\u6570\uff0c\u6bd4\u5982 `-f`\n# `-f` \u5728\u6253\u5370\u5b8c\u5df2\u6709\u7684\u6587\u4ef6\u5185\u5bb9\u540e\u4f1a\u963b\u585e\uff0c\u7b49\u5f85\u76ee\u6807\u6587\u4ef6\u7684\u66f4\u65b0\n# \u4e00\u65e6\u6709\u5185\u5bb9\u8ffd\u52a0\u8fdb\u76ee\u6807\u6587\u4ef6\uff0c`tail` \u5c31\u4f1a\u5c06\u5b83\u6253\u5370\u51fa\u6765\n$ tail -f <filename>\n

    \u6ce8\u610f\uff0c\u8fd9\u91cc\u7684 echo \u5f00\u5934\u7684\u8bed\u53e5\u662f\u5728\u505a\u8ffd\u52a0\u64cd\u4f5c\uff0c\u4e4b\u540e\u4f1a\u8bb2\u5230\u3002

    \u800c\u81f3\u4e8e\u5177\u4f53\u7684\u5f15\u7528\u573a\u666f\uff0c\u6bd4\u5982\u6709\u4e9b\u5de5\u5177\u7684\u65e5\u5fd7\u4f1a\u4e0d\u65ad\u8ffd\u52a0\u5230\u67d0\u4e2a\u65e5\u5fd7\u6587\u4ef6\u4e2d\uff0c\u8fd9\u65f6\u5019\u5c31\u53ef\u4ee5\u7528 tail -f \u6765\u5b9e\u65f6\u8ddf\u8e2a\u65e5\u5fd7\u4fe1\u606f\u3002

    "},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9--less","title":"\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9 | less","text":"

    less \u5219\u662f\u771f\u6b63\u7528\u6765\u663e\u793a\u6587\u4ef6\u5185\u5bb9\u7684\u6307\u4ee4\uff0c\u5b83\u4f1a\u4ee5\u6587\u672c\u6587\u4ef6\u7684\u5f62\u5f0f\u5c55\u793a\u6587\u4ef6\u5185\u5bb9\u2014\u2014\u8fd9\u610f\u5473\u7740\u4f60\u5982\u679c\u5f3a\u884c\u4f7f\u7528 less \u6765\u67e5\u770b\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5219\u4f1a\u5f97\u5230\u4e00\u5806\u4e71\u7801\u3002

    # <textFilename> \u4e3a\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\n$ less <textFilename>\n

    \u4f7f\u7528 less \u67e5\u770b\u6587\u4ef6\u65f6\uff0c\u4f60\u4f1a\u53d1\u73b0\u4f60\u6253\u5f00\u4e86\u4e00\u4e2a\u5f88\u50cf man \u7684\u754c\u9762\uff08\u76f8\u4fe1\u4f60\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\u8fd9\u4e2a\u8bf4\u6cd5\u6709\u70b9\u672c\u672b\u98a0\u5012\uff09\uff0c\u90a3\u5b9e\u9645\u4e0a\u6d4f\u89c8\u7684\u65b9\u5f0f\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u518d\u591a\u4ecb\u7ecd\u4e00\u4e9b\u5728\u6d4f\u89c8\u6587\u4ef6\u7684\u65f6\u5019\u53ef\u80fd\u7528\u5230\u7684\u6280\u5de7\uff1a

    "},{"location":"tech_accu/tool/Shell/#\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027\u521b\u5efa\u6587\u4ef6--touch","title":"\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027(\u521b\u5efa\u6587\u4ef6) | touch","text":"

    touch\u5b9e\u9645\u4e0a\u662f\u7528\u6765\u4fee\u6539\u6587\u4ef6\u548c\u76ee\u5f55\u7684\u65f6\u95f4\u5c5e\u6027\u7684\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u5177\u6709\u201c\u5982\u679c\u6587\u4ef6\u4e0d\u5b58\u5728\u5219\u521b\u5efa\u4e00\u4e2a\u201d\u7684\u7279\u6027\uff0c\u6240\u4ee5\u4e5f\u5e38\u5e38\u7528\u6765\u521b\u5efa\u4e00\u4e2a\u65b0\u6863\u6848\u3002

    $ ls -l\ntotal 0\n\n# \u5982\u679c\u5f53\u524d\u76ee\u5f55\u4e0b\u6ca1\u6709\u53eb\u505a <filename> \u7684\u6587\u4ef6\uff0c\u5219\u521b\u5efa\u4e00\u4e2a <filename>\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:07 file\n# \u5176\u4e2d\u6587\u4ef6\u7684\u65f6\u95f4\u4e3a\u7cfb\u7edf\u7684\u5f53\u524d\u65f6\u95f4\n\n# \u5982\u679c\u6b64\u65f6\u518d\u6b21 touch <filename>\uff0c\u5219\u4f1a\u66f4\u65b0\u5176\u65f6\u95f4\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:10 file\n
    "},{"location":"tech_accu/tool/Shell/#\u521b\u5efa\u6587\u4ef6\u5939--mkdir","title":"\u521b\u5efa\u6587\u4ef6\u5939 | mkdir","text":"

    mkdir\u662f make directory \u7684\u7f29\u5199\uff0c\u4e5f\u5c31\u662f\u521b\u5efa\u4e00\u4e2a\u201c\u6587\u4ef6\u5939\u201d\u3002

    # <dirname> \u53ef\u4ee5\u662f\u4e00\u4e2a\u590d\u6742\u8def\u5f84\u4e0b\u7684\u76ee\u5f55\uff0c\u4f46\u662f\u4e00\u5b9a\u8981\u6c42\u5176\u524d\u7f6e\u76ee\u5f55\u90fd\u5b58\u5728\n$ mkdir <dirname>\n$ ls -l\ntotal 0\n$ mkdir dir1/dir2\nmkdir: dir1: No such file or directory\n# \u8bf4\u660e\u76ee\u6807\u76ee\u5f55 dir2 \u7684\u524d\u7f6e\u8def\u5f84 ./dir1 \u7f3a\u5931\n\n# \u6211\u4eec\u53ef\u4ee5\u4f9d\u6b21\u521b\u5efa\u8fd9\u4e9b\u76ee\u5f55\n$ mkdir dir1 dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n\n# \u6216\u8005\u4f7f\u7528 -p \u53c2\u6570\uff0c\u5b83\u5141\u8bb8\u521b\u5efa\u5d4c\u5957\u76ee\u5f55\uff0c\u5373\u5982\u679c\u524d\u7f6e\u76ee\u5f55\u4e0d\u5b58\u5728\u5b83\u4f1a\u521b\u5efa\u4e00\u4e2a\n$ mkdir -p dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
    "},{"location":"tech_accu/tool/Shell/#\u79fb\u52a8\u91cd\u547d\u540d--mv","title":"\u79fb\u52a8(\u91cd\u547d\u540d) | mv","text":"

    mv\u5373 move\uff0c\u542b\u4e49\u5f88\u660e\u663e\uff0c\u5373\u6539\u53d8\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u4f4d\u7f6e\u3002\u4e0d\u8fc7\u7531\u4e8e\u201c\u4f4d\u7f6e\u201d\u8fd9\u4ef6\u4e8b\uff0c\u5b9e\u9645\u4e0a\u4e5f\u53ef\u4ee5\u5305\u542b\u6587\u4ef6\u672c\u8eab\u7684\u540d\u5b57\uff0c\u6240\u4ee5\u4e5f\u53ef\u4ee5\u7528\u6765\u505a\u91cd\u547d\u540d\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4fee\u6539\u76ee\u6807\u4f4d\u7f6e\u5230\u540c\u4e00\u4e2a\u8def\u5f84\u4e0b\u7684\u53e6\u5916\u4e00\u4e2a\u540d\u5b57\u3002

    # \u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u4e00\u8282\u4e34\u65f6\u628a <path> \u4ece <filename> \u548c <dirname> \u4e2d\u62c6\u51fa\u6765\n# \u8be5\u6307\u4ee4\u4f1a\u5c06 <target1> \u79fb\u52a8\u5230 <path2> \u5e76\u6539\u540d\u4e3a <target2>\uff0c\u5f53\u7136\u5141\u8bb8\u540c\u540d\n$ mv <path1>/<target1> <path2>/<target2>\n\n# \u7701\u7565 <target2>\uff0c\u5219\u4f1a\u79fb\u52a8\u6587\u4ef6\u4f4d\u7f6e\u4f46\u4e0d\u4fee\u6539\u6587\u4ef6\u540d\uff0c\u5373\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u7b49\u4ef7\n$ mv <path1>/<target1> <path2>\n$ mv <path1>/<target1> <path2>/<target1>\n\n# \u79fb\u52a8\u5230\u540c\u4e00\u76ee\u5f55\uff0c\u5373\u5b9e\u73b0\u91cd\u547d\u540d\uff0c\u5f53\u7136 <path1>/ \u53ef\u4ee5\u7701\u7565\uff0c\u5373\u6b64\u65f6 <path1> \u4e3a .\n$ mv <path1>/<target1> <path1>/<target2>\n
    "},{"location":"tech_accu/tool/Shell/#\u590d\u5236--cp","title":"\u590d\u5236 | cp","text":"

    cp\u5373 copy\uff0c\u7528\u6765\u590d\u5236\u6587\u4ef6\u6216\u76ee\u5f55\uff0c\u57fa\u672c\u8bed\u6cd5\u548cmv\u7c7b\u4f3c\uff0c\u6211\u4eec\u518d\u591a\u4ecb\u7ecd\u4e00\u4e2a-r\u53c2\u6570\u3002

    # \u8be5\u6307\u4ee4\u4f1a\u590d\u5236\u4e00\u4e2a\u6587\u4ef6 <filename> \u5230 <path> \u4e0b\n$ cp <filename> <path>\n\n# cp \u65e0\u6cd5\u590d\u5236\u6587\u4ef6\u5939\n$ cp <dir> <path>\ncp: <dir> is a directory (not copied).\n# \u4f46\u662f\u4f7f\u7528 -r \u53c2\u6570\u53ef\u4ee5\u590d\u5236 <path1> \u4e0b\u6240\u6709\u5185\u5bb9\u5230 <path2> \u4e0b\n$ cp -r <path1> <path2>\n$ cp -r dir1 newDir\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
    "},{"location":"tech_accu/tool/Shell/#\u5220\u9664--rm","title":"\u5220\u9664 | rm","text":"

    \u628arm\u653e\u5728\u6700\u540e\u8bb2\u662f\u6709\u539f\u56e0\u7684\uff0c\u6216\u8bb8\u4f60\u542c\u8bf4\u8fc7 rm / -rf \u8fd9\u6761\u6307\u4ee4\uff0c\u5374\u4e0d\u77e5\u9053\u5b83\u7684\u542b\u4e49\uff0c\u90a3\u4e48\u770b\u5b8c\u8fd9\u4e00\u5c0f\u8282\u4f60\u5c31\u77e5\u9053\u8fd9\u4e2a\u6307\u4ee4\u6709\u591a\u6050\u6016\u4e86\uff08\u5343\u4e07\u4e0d\u8981\u8dd1\u8fd9\u6761\u6307\u4ee4\uff09\u3002

    \u9996\u5148\u6211\u4eec\u9700\u8981\u77e5\u9053\uff0cLinux \u4e0brm\u6307\u4ee4\u5e76\u4e0d\u5b58\u5728\u201c\u5783\u573e\u7bb1\u201d\u8fd9\u4e2a\u673a\u5236\uff0c\u5373\u7528rm\u5220\u6389\u7684\u4e1c\u897f\u662f\u6ca1\u6cd5\u901a\u8fc7\u6b63\u5e38\u624b\u6bb5\u590d\u539f\u7684\uff0c\u800c\u4e0a\u9762\u90a3\u6761\u6307\u4ee4\u7684\u610f\u601d\u5c31\u662f\u5f3a\u5236\u9012\u5f52\u5220\u9664\u7cfb\u7edf\u6839\u76ee\u5f55\u4e0b\u6240\u6709\u5185\u5bb9\uff0c\u4e5f\u5c31\u662f \u5565\u90fd\u5220\u5149\u4e86\u3002

    \u6240\u4ee5\uff0c\u4e00\u822c\u6211\u4eec\u90fd\u4f1a\u5efa\u8bae\u4f7f\u7528alias\u4fdd\u62a4rm\u6307\u4ee4\uff08\u6211\u5199\u8fc7fish\u7684rmalias\u4fdd\u62a4\u6d41\u7a0b\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff09\u3002

    rm\u5373 remove\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u7528\u6765\u5220\u9664\u4e1c\u897f\u7684\uff0c\u8fd9\u662f\u4e2a\u975e\u5e38\u5371\u9669\u7684\u6307\u4ee4\u3002\u5e38\u7528\u7684\u53c2\u6570\u6709-r\u548c-f\uff0c\u5206\u522b\u8868\u793a\u9012\u5f52\u5220\u9664\u548c\u5f3a\u5236\u5220\u9664\uff1b\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c06\u4ecb\u7ecd\u4e00\u4e2a-i\u53c2\u6570\u3002

    # \u5220\u9664\u4e00\u4e2a\u6587\u4ef6\n$ rm <filename>\n\n# \u5220\u9664 <dirname> \u4e0b\u6240\u6709\u7684\u4e00\u7ea7\u6587\u4ef6\n$ rm <dirname>/*\n\n$ tree\n.\n\u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file3\n\u251c\u2500\u2500 file1\n\u2514\u2500\u2500 file2\n\n1 directory, 3 files\n$ rm ./*\nrm: ./dir2: is a directory\n$ tree\n.\n\u2514\u2500\u2500 dir2\n    \u2514\u2500\u2500 file3\n\n1 directory, 1 file\n# \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e2d\u9014\u62a5\u9519\u8bf4 dir2 \u662f\u4e2a\u76ee\u5f55\u5e76\u4e14\u6ca1\u6709\u5220\u6389\uff0c\u5b9e\u9645\u4e0a\uff0c\u5982\u679c dir2 \u662f\u4e2a\u7a7a\u76ee\u5f55\uff0c\u90a3\u5b83\u662f\u4f1a\u88ab\u5220\u6389\u7684\n# \u800c\u5982\u679c\u8981\u771f\u6b63\u5220\u9664\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u6240\u6709\u7684\u5185\u5bb9\uff0c\u5c31\u9700\u8981\u6211\u4eec\u201c\u9012\u5f52\u201d\u5220\u9664\uff0c\u5373\u4f7f\u7528 -r\n\n# \u9012\u5f52\u5220\u9664 <dirname> \u4e0b\u6240\u6709\u5185\u5bb9\n$ rm -r <dirname>/*\n\n# \u9012\u5f52\u5220\u9664 <dirname>\n$ rm -r <dirname>\n\n# \u5371\u9669\uff1a\u5f3a\u5236\u9012\u5f52\u5220\u9664 <dirname>\n$ rm -rf <dirname>\n\n# \u63a8\u8350\uff1a\u9012\u5f52\u5220\u9664\u65f6\u9010\u4e00\u786e\u8ba4\n$ rm -ri dir2\nexamine files in directory dir2/? y     # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2//file3? y                                   # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2/? y                                             # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\n
    "},{"location":"tech_accu/tool/Shell/#\u91cd\u5b9a\u5411\u76f8\u5173-","title":"\u91cd\u5b9a\u5411\u76f8\u5173 \ud83d\udca1","text":"

    \u53ef\u4ee5\u8bf4\u8fd9\u662f Shell \u4e2d\u6700\u6709\u610f\u601d\u7684\u77e5\u8bc6\u70b9\u4e4b\u4e00\u4e86\u3002\u91cd\u5b9a\u5411\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u91cd\u65b0\u5b9a\u5411\uff0c\u66f4\u51c6\u786e\u7684\u6765\u8bf4\u662f\u7ed9\u6570\u636e\u6d41\u91cd\u65b0\u5b9a\u5411\u3002\u9996\u5148\uff0c\u6211\u4eec\u6765\u770b\u770b\u8fd9\u5f20\u56fe\uff0c\u5b83\u63cf\u8ff0\u4e86\u547d\u4ee4\u8fd0\u884c\u65f6\u7684\u6570\u636e\u4ea4\u4e92\u3002

    flowchart TD;\ninput[\"file, keyboard, etc\"] \ncommand\noutput[\"file, screen, etc\"]\nerror[\"file, screen, etc\"]\n\ninput -->|\"Standard Input (stdin)\"| command\ncommand -->|\"Standard Output (stdout)\"| output\ncommand -->|\"Standard Error (stderr)\"| error

    \u7b80\u5355\u7684\u63cf\u8ff0\u4e00\u4e0b\uff0c\u547d\u4ee4\u4ece\u6807\u51c6\u8f93\u5165\u6d41 stdin \u4e2d\u8bfb\u53d6\u8f93\u5165\u6570\u636e\uff0c\u5904\u7406\u8fc7\u7a0b\u4e2d\u6216\u8005\u662f\u5904\u7406\u7ed3\u675f\u540e\uff0c\u4f1a\u5411\u6807\u51c6\u8f93\u51fa\u6d41 stdout \u548c\u6807\u51c6\u9519\u8bef\u6d41 stderr \u4e2d\u5199\u5165\u6570\u636e\uff0c\u4e00\u822c\u6765\u8bf4 stdout \u627f\u8f7d\u7684\u662f\u6b63\u5e38\u7684\u8f93\u51fa\u6570\u636e\uff0c\u800c stderr \u627f\u8f7d\u7684\u662f\u62a5\u9519\u7b49\u4fe1\u606f\u3002

    \u800c\u6240\u8c13\u7684\u91cd\u5b9a\u5411\uff0c\u6b63\u662f\u6307\u91cd\u5b9a\u5411\u8fd9\u4e09\u4e2a\u6d41\uff0c\u800c\u4e14\u66f4\u591a\u7684\u6307\u7684\u662f\u91cd\u5b9a\u5411 stdin \u548c stdout\u3002

    \u800c\u5728 Shell \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ed6\u4eec\u7684\u4ee3\u7801\u6765\u6307\u4ee3\u4ed6\u4eec\uff0c\u5177\u4f53\u5185\u5bb9\u672c\u6587\u4e0d\u4f1a\u8fc7\u591a\u6d89\u53ca\uff0c\u5982\u679c\u60f3\u8981\u6df1\u5165\u4e86\u89e3\u53ef\u4ee5\u4ed4\u7ec6\u770b\u770b\u201c\u5408\u5e76\u201d\u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u3002

    Stream: stdin stdout stderr Code: 0 1 2"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411---","title":"\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411 | > >>","text":"

    \u57fa\u672c\u4e0a\u6240\u6709\u8bed\u8a00\u7684\u6559\u7a0b\u4e2d\u90fd\u4f1a\u5148\u4ecb\u7ecd\u5982\u4f55\u8f93\u51fa \u201dHello World!\u201c\uff08\u5f53\u7136\u4ed6\u4eec\u4e5f\u53ef\u80fd\u66f4\u60f3\u548c\u522b\u4eba\u6253\u62db\u547c\uff09\u3002\u603b\u800c\u8a00\u4e4b\uff0c\u8f93\u51fa\u5bf9\u4e00\u4e2a\u547d\u4ee4\u3001\u4e00\u4e2a\u7a0b\u5e8f\u662f\u81f3\u5173\u91cd\u8981\u7684\u3002\u4f46\u662f\u4f60\u4f1a\u53d1\u73b0\uff0c\u8fd9\u4e9b\u6307\u4ee4\u90fd\u53ea\u662f\u5c06\u5185\u5bb9\u6253\u5370\u5230\u4f60\u7684\u7ec8\u7aef\u91cc\uff0c\u5373 stdout \u91cc\uff0c\u53ea\u4e0d\u8fc7\u4e00\u822c\u88ab\u9001\u8fdb stdout \u7684\u4e1c\u897f\u4f1a\u88ab\u6253\u5370\u5728 screen \u4e0a\u3002

    \u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u8981\u5b83\u88ab\u5199\u5165\u5230\u4e00\u4e2a\u53eb chat.txt \u7684\u6587\u4ef6\u91cc\uff0c\u4f60\u5f53\u7136\u53ef\u4ee5\u4f7f\u7528 fopen() \u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u5b9e\u73b0\uff0c\u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u7528 Shell \u6765\u5b9e\u73b0\u8fd9\u4e2a\u6548\u679c\u3002

    \u6211\u4eec\u518d\u6b21\u56de\u5fc6\u6574\u4e2a\u8fc7\u7a0b\u4e2d\u6570\u636e\u7684\u6d41\u52a8\uff1a\u7a0b\u5e8f\u4e2d\u7684\u6570\u636e \u2192 stdout \u2192 screen\uff0c\u800c\u91cd\u5b9a\u5411\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u6539\u53d8 stdout \u2192 screen \u8fd9\u4e2a\u6b65\u9aa4\u3002

    # \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command > file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u5199\u5165\u4e86 chat.txt\n$ echo \"Hello World!\" > chat.txt\n$ cat chat.txt\nHello World!\n\n# \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u8ffd\u52a0\u8fdb chat.txt\n$ echo \"Hello Human!\" >> chat.txt\n$ cat chat.txt\nHello World!\nHello Human!\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5b9e\u73b0\u4e86\u5c06\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\u5199\u5165 \"index.txt\"\n$ ls -al > index.txt\n

    \u8bf6\u7b49\u7b49\uff0c\u4e0a\u9762\u600e\u4e48\u7a81\u7136\u51fa\u73b0\u4e86\u201c\u8ffd\u52a0\u201d\u8fd9\u4e2a\u8bcd\uff1f\u522b\u6025\u3002\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b fopen() \u3002\u5982\u679c\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u53ef\u5199\u6587\u4ef6\uff0cfopen() \u7684\u6a21\u5f0f\u53c2\u6570\u4e00\u822c\u662f w \uff0c\u6216\u8005\u662f a\u3002\u4ed6\u4eec\u5206\u522b\u4ee3\u8868 write \u548c append\uff0c\u5373\u8986\u5199\u548c\u8ffd\u52a0\u3002\u524d\u8005\u5c06\u76ee\u6807\u6587\u4ef6\u7684\u5185\u5bb9\u5168\u90e8\u8986\u76d6\uff0c\u5199\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5373\u76f8\u5f53\u4e8e\u6e05\u7a7a\u76ee\u6807\u6587\u4ef6\u7136\u540e\u5199\u5165\u5185\u5bb9\uff1b\u540e\u8005\u662f\u5728\u76ee\u6807\u6587\u4ef6\u7684\u5c3e\u90e8\u5f00\u59cb\u5199\u5165\u65b0\u5185\u5bb9\uff0c\u65e7\u7684\u5185\u5bb9\u4ecd\u7136\u4fdd\u7559\u3002\u6240\u4ee5\u4e0a\u9762\u7684\u4ee3\u7801\u4f1a\u51fa\u73b0 \u201cHello Human!\u201d \u88ab\u8ffd\u52a0\u5728 \u201cHello World!\u201d \u540e\u9762\u7684\u60c5\u51b5\u3002

    \u73b0\u5728\uff0c\u5982\u679c\u4f60\u60f3\u8ba9\u4f60\u7684 a.exe \u8f93\u51fa\u7684\u4e1c\u897f\u88ab\u5199\u5165 out.txt \u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u8fd9\u6837\u8fd0\u884c\u5b83\uff1a

    $ a.exe > out.txt\n
    "},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411--","title":"\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411 | <","text":"

    \u4e0e\u8f93\u51fa\u76f8\u5bf9\u5e94\uff0c\u5982\u679c\u6211\u4eec\u60f3\u4ece\u6587\u4ef6\u4e2d\u8bfb\u53d6\u6570\u636e\u800c\u975e\u4ece Keyboard \u5199\u5165\u7684\u7f13\u51b2\u533a\u8bfb\u53d6\u5185\u5bb9\uff0c\u800c\u662f\u4ece\u67d0\u4e2a\u6587\u4ef6\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528 < \u6765\u91cd\u5b9a\u5411\u8f93\u5165\u3002

    // \u5047\u8bbe a.exe \u7684\u6e90\u7801\u662f\u8fd9\u6837\u7684\n#include <stdio.h>\nint main(){\nchar str[1024];\nscanf(\"%s\", str);\nprintf(\"Hello %s!\", str);\n}\n
    // \u5047\u8bbe in.txt \u4e2d\u7684\u5185\u5bb9\u4e3a\u5982\u4e0b\nisshikih\n
    # \"file\" \u4f1a\u88ab\u5f53\u4f5c \"command\" \u7684\u8f93\u5165\u53c2\u6570\n$ command < file\n\n# \"a.exe\" \u4f1a\u8bfb\u5165 \"chat.txt\" \u7684\u5185\u5bb9\u4f5c\u4e3a\u8f93\u5165\n$ a.exe < in.txt\nHello isshikh!\n\n# \u7efc\u5408\u8d77\u6765\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u8fd9\u6837\n$ a.exe < in.txt > out.txt\n$ cat out.txt\nHello isshikih! 
    "},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411--2-2","title":"\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411 | 2> 2>>","text":"

    stderr \u7684\u91cd\u5b9a\u5411\u57fa\u672c\u4e0a\u548c stdout \u662f\u4e00\u6837\u7684\u3002

    # \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command 2> file\n\n# \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n

    \u4f46\u5bf9\u4e8e stderr \uff0c\u6211\u4eec\u4f7f\u7528\u91cd\u5b9a\u5411\u7684\u76ee\u7684\u4e5f\u53ef\u80fd\u662f\u4e3a\u4e86\u8ba9\u4ed6\u4e0d\u8981\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u51fa\u6765\uff0c\u5373\u5c06\u5b83\u91cd\u5b9a\u5411\u5230\u522b\u7684\u5730\u65b9\u53bb\u3002

    \u8fd9\u91cc\u9700\u8981\u4ecb\u7ecd\u4e00\u4e2a\u7279\u6b8a\u7684\u201c\u6587\u4ef6\u201d\uff0c /dev/null \u2014\u2014\u4efb\u4f55\u5199\u5165\u5230\u5b83\u7684\u5185\u5bb9\u90fd\u4f1a\u88ab\u4e22\u5f03\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u5c06 stderr \u91cd\u5b9a\u5411\u5230 /dev/null \uff0c\u5c31\u80fd\u5b9e\u73b0\u7c7b\u4f3c\u4e8e\u201c\u5ffd\u7565\u9519\u8bef\u6d41\u201d\u7684\u6548\u679c\u3002

    # \"command\" \u7684\u9519\u8bef\u4fe1\u606f\u90fd\u4f1a\u88ab\u4e22\u5f03\n$ command 2> /dev/null\n
    "},{"location":"tech_accu/tool/Shell/#\u5408\u5e76--","title":"\u5408\u5e76 | <& >&","text":"

    \u6b64\u5916\uff0c\u8fd8\u6709 <& \u548c >& \u8fd9\u4e24\u4e2a\u7b26\u53f7\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u6211\u4e0d\u6253\u7b97\u5c55\u5f00\u8bb2\u8fd9\u4ef6\u4e8b\u3002\u8fd9\u91cc\u5f15\u7528\u8fd9\u4e00\u6279\u56de\u7b54\uff1a

    n>&p\u00a0and\u00a0n<&p\u00a0are the same operator and are for duplicating the file descriptor (fd)\u00a0p\u00a0onto the file descriptor\u00a0n. Or said otherwise, they redirect the file descriptor\u00a0n\u00a0to whatever resource fd\u00a0p\u00a0is redirected to.

    The\u00a0<\u00a0and\u00a0>\u00a0are not used to determine what direction (reading or writing) the redirected file descriptor will be used.\u00a0n\u00a0will get the same direction as\u00a0p. That is, if\u00a0p\u00a0was open for writing, so will be\u00a0n\u00a0even if the\u00a0n<&p\u00a0operator is used.

    The only difference between the two operators is when\u00a0n\u00a0is not specified.\u00a0>&p\u00a0redirects stdout (is like\u00a01>&p\u00a0or\u00a01<&p) and\u00a0<&p\u00a0redirects stdin (is like\u00a00<&p\u00a0or\u00a00>&p).

    So\u00a0<&0\u00a0is like\u00a00<&0, so redirects stdin to whatever resource stdin was redirected to, so does nothing useful, it's usually a no-op and doesn't make much sense.

    But not always a no-op, not in every shell. When job control is disabled, POSIX requires stdin of command in the background to be redirected to\u00a0/dev/null\u00a0or an equivalent file. In Bash (tested in 4.4.12)\u00a0<&0\u00a0overrides this. Compare\u00a0(ls -l /proc/self/fd/0 &)\u00a0and\u00a0(<&0 ls -l /proc/self/fd/0 &). In some cases this is useful.

    >&0\u00a0duplicates the fd 0 onto the fd 1. Because the fd 1 (stdout), is by convention only used for writing, that\u00a0>&0\u00a0only makes sense if fd 0 was open in read+write mode.

    That would be the case in cases where fd 0 points to the terminal device, because terminal emulators or\u00a0getty\u00a0would generally open the terminal device in read+write mode and assign fds 0, 1 and 2 to it.

    So maybe whoever wrote that wanted to redirect stdout to the terminal assuming that stdin was pointing to it.

    One place where\u00a0n>&n\u00a0makes sense is with zsh and its\u00a0mult_IOs\u00a0feature. In\u00a0zsh:

    some-cmd >&1 > some-file\n# that is: some-cmd 1>&1 1> some-file\n

    Redirects the standard output of\u00a0some-cmd\u00a0to both whatever stdout was before (&1) and\u00a0some-file, as if you had written:

    some-cmd | tee some-file\n

    While

    some-cmd <&0 < some-file\n# that is: some-cmd 0<&0 0< some-file\n

    would feed first the original stdin and then\u00a0some-file\u00a0as input to\u00a0some-cmd\u00a0as if you had written:

    cat - some-file | some-cmd\n

    But in\u00a0cmd <&0 >&0, fd 0 is redirected only once, so that does not apply.

    n>&n\u00a0can also have an interesting side effect in some shells (ksh,\u00a0zsh, not\u00a0dash,\u00a0bash\u00a0nor\u00a0yash) in that it triggers an error and gives up running the command if the file descriptor\u00a0n\u00a0is not open. So, in those shells,

    cmd 0<&0\n

    would avoid running\u00a0cmd\u00a0in the pathological condition where\u00a0stdin\u00a0is closed:

    $ ksh -c 'cat file - <&0' <&-\nksh: 0: cannot open [Bad file descriptor]\n$ mksh -c 'cat file - <&0' <&-\nmksh: <&0 : bad file descriptor\n$ zsh -c 'cat file - <&0' <&-\nzsh:1: 0: bad file descriptor\n\n$ bash -c 'cat file - <&0' <&-\ncontents of file\ncat: -: Bad file descriptor\ncat: closing standard input: Bad file descriptor\n
    "},{"location":"tech_accu/tool/Shell/#\u7ba1\u9053\u7b26--","title":"\u7ba1\u9053\u7b26 | |","text":"

    \u524d\u9762\u8bb2\u4e86\u5982\u4f55\u5c06\u8f93\u5165\u8f93\u51fa\u91cd\u5b9a\u5411\u81f3 \u6587\u4ef6\uff0c\u5373\u6570\u636e\u7684\u6d41\u52a8\u662f \u4ece\u547d\u4ee4\u5230\u6587\u4ef6 \u6216\u662f \u4ece\u6587\u4ef6\u5230\u547d\u4ee4\u3002\u800c\u7ba1\u9053\u7b26 | \u5219\u5b9e\u73b0\u4e86\u5c06\u6570\u636e\u7684\u6d41\u52a8\u5b9a\u5411\u4e3a \u4ece\u547d\u4ee4\u5230\u547d\u4ee4\u3002

    # \"command_1\" \u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a \"command_2\" \u7684\u8f93\u5165\n$ command_1 | command_2\n\n# \u4f7f\u7528 less \u6765\u67e5\u770b\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\n$ ls -al | less\n\n# \u4e00\u4e2a\u5e38\u7528\u7684\u7528\u6cd5\u662f\u642d grep \u5728\u65e5\u5fd7\u4e2d\u627e\u5230\u4f60\u60f3\u8981\u7684\u4e00\u884c\n# \u6bd4\u5982\u4e0b\u9762\u7684\u547d\u4ee4\u4f1a\u5728 xxx.log \u6587\u4ef6\u4e2d\u627e\u5230\u5e26\u6709\u5173\u952e\u8bcd \"lean_shell\" \u7684\u82e5\u5e72\u884c\n$ cat xxx.log | grep \"lean_shell\"\nLet us learn_shell together!\nLearn_shell means learn_shell and learn_shell!\n$ cat xxx.log\nCommand line is powerful!\nLet us learn_shell together!\nHave you ever see this?\nLearn_shell means learn_shell and learn_shell!\n\n# \u53c8\u6216\u8005\u8ba1\u7b97\u5f53\u524d\u76ee\u5f55\u4e0b\u6709\u591a\u5c11\u6587\u4ef6\u5939\u548c\u6587\u4ef6\n$ ls -a | wc -w\n5\n$ ls -a\n.   ..  x   xx  xxx.log\n\n# \u518d\u6bd4\u5982\uff0c\u7edf\u8ba1\u5f53\u524d\u76ee\u5f55\u4e0b\u5404\u4e2a\u6587\u4ef6\u5939\u7684\u5927\u5c0f\uff0c\u5e76\u8f93\u51fa\u4ece\u5927\u5230\u5c0f\u7684 10 \u9879\n$ du | sort -nr | head\n# \u627e\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\uff08\u9012\u5f52\uff09\u6240\u6709\u53eb\u505a \"xxx\" \u7684\u6587\u4ef6\u5e76\u5220\u9664\n$ find . -name \"xxx\"  | xargs rm -f\n
    "},{"location":"tech_accu/tool/Shell/#\u7b5b\u9009\u5668","title":"\u7b5b\u9009\u5668","text":"

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u91cd\u5b9a\u5411\u7684\u529f\u80fd\u975e\u5e38\u5f3a\u5927\u3002\u540c\u65f6\uff0c\u8fd9\u91cc\u4e5f\u6709\u5f88\u591a\u7b5b\u9009\u5668\u4f9b\u4f60\u9009\u62e9\uff0c\u4ed6\u4eec\u7ecf\u5e38\u642d\u914d\u7ba1\u9053\u7b26\u4f7f\u7528\uff0c\u4ee5\u8f85\u52a9\u7ba1\u9053\u7b26\u8fdb\u884c\u4e00\u4e9b\u66f4\u590d\u6742\u7684\u5de5\u4f5c\u3002

    Source: https://linuxcommand.org/lc3_lts0070.php

    "},{"location":"tech_accu/tool/Shell/#\u811a\u672c-shell","title":"\u811a\u672c Shell","text":"

    \u7b80\u5355\u6765\u8bf4\uff0cShell \u811a\u672c\u53ef\u4ee5\u770b\u4f5c\u4e00\u6761\u6761 Shell \u6307\u4ee4\u7684\u96c6\u5408\uff0c\u6211\u4eec\u5728\u8fd0\u884c Shell \u811a\u672c\u65f6\uff0cShell \u811a\u672c\u4e2d\u7684\u6307\u4ee4\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u4e00\u884c\u4e00\u884c\u7684\u88ab\u6267\u884c\u4e0b\u6765\u3002

    Shell \u811a\u672c\u4e00\u822c\u662f\u4ee5 .sh \u4e3a\u540e\u7f00\u7684\u7eaf\u6587\u672c\u6587\u4ef6\uff0c\u800c\u6267\u884c Shell \u811a\u672c\u7684\u65b9\u6cd5\u5927\u81f4\u6709\u4e09\u79cd\uff1a

    \u4ed6\u4eec\u7684\u533a\u522b\u4e3b\u8981\u5982\u4e0b\uff1a

    "},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u6761\u4ef6\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u6761\u4ef6\u8bed\u53e5","text":"
    # \u6761\u4ef6\u5206\u652f\u8bed\u53e5\nif condition1\nthen\ncommands\nelif condition2\nthen\ncommands else\ncommands\nfi\n
    # \u5f53 $var \u4e3a \"A\" \u65f6\u6267\u884c\u7b2c\u4e00\u5757\uff0c\u5f53 $var \u4e3a \"B\" \u65f6\u6267\u884c\u7b2c\u4e8c\u5757\uff0c*) \u5373\u5176\u4ed6\u60c5\u51b5\ncase $var in \"A\")\ncommands\n    ;;\n\"B\")\ncommands\n    ;; *)\ncommands\n    ;;\nesac\n
    "},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u5faa\u73af\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u5faa\u73af\u8bed\u53e5","text":"
    # \u4f9d\u6b21\u679a\u4e3e\u82e5\u5e72 item\uff0cvar \u8868\u793a\u6b63\u5728\u679a\u4e3e\u7684\u5185\u5bb9\nfor var in item1 item2 ... itemN\ndo\ncommands\ndone\n
    # \u8fd0\u884c\u5230 condition \u4e3a\u5047\u65f6\u7ed3\u675f\nwhile condition\ndo\ncommands\ndone\n
    # \u8fd0\u884c\u5230 condition \u4e3a\u771f\u65f6\u7ed3\u675f\nuntil condition\ndo\ncommands\ndone\n
    "},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u51fd\u6570","title":"\u6d41\u7a0b\u63a7\u5236 - \u51fd\u6570","text":"
    # \u5b9a\u4e49\u4e86\u4e00\u4e2a\u53eb\u505a foo \u7684\u51fd\u6570\uff0cfunction \u53ef\u4ee5\u4e0d\u5199\nfunction foo(){\ncommands\n}\n
    "},{"location":"tech_accu/tool/Shell/#\u53c2\u6570\u4f20\u9012","title":"\u53c2\u6570\u4f20\u9012","text":"

    \u5bf9\u4e8e\u51fd\u6570\u6216\u547d\u4ee4\u53ef\u4ee5\u7528 $n \u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002\u4f46\u5f53 n \u4e0d\u6b62\u4e00\u4f4d\u6570\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 ${n} \u7684\u65b9\u5f0f\u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002

    #! /bin/bash\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n
    $ ./foo.sh a b c d e f g h i j\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
    #! /bin/bash\nfunction foo(){\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n}\n\nfoo a b c d e f g h i j\n
    $ ./script.sh\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
    "},{"location":"tech_accu/tool/Shell/#\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","title":"\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","text":"

    \u56de\u5fc6\u5faa\u73af\u8bed\u53e5\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u9700\u8981\u5199\u51fa\u679a\u4e3e\u7684\u6bcf\u4e00\u4e2a\u9879\u76ee\u3002\u663e\u7136\uff0c\u5728\u5927\u91cf\u679a\u4e3e\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\uff0c\u624b\u5199\u51fa\u5168\u90e8\u7684\u679a\u4e3e\u53ef\u80fd\u4e0d\u592a\u73b0\u5b9e\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u4f1a\u60f3\u8981\u4f7f\u7528\u6587\u4ef6\u503c\u6216\u662f\u547d\u4ee4\u7684\u8f93\u51fa\u6765\u5b9e\u73b0\u3002\u8fd9\u4e2a\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 ``` \u628a\u628a\u547d\u4ee4\u7ed9\u62ec\u8d77\u6765\u3002

    A\nB\nC\n
    for var in `cat file`\ndo\necho - var done\n
    - A\n- B\n- C\n
    "},{"location":"tech_accu/tool/Shell/#\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684-shell","title":"\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684 Shell","text":"

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u524d\u9762\u7ed9\u51fa\u7684\u82e5\u5e72\u811a\u672c\u6837\u4f8b\u4e2d\uff0c\u6211\u4eec\u7684\u7b2c\u4e00\u884c\u90fd\u6709\u4e00\u884c\u5947\u602a\u7684\u6ce8\u91ca\uff1a

    #! /bin/bash\n

    \u8fd9\u53e5\u8bdd\u7684\u610f\u601d\u662f\uff0c\u6307\u5b9a\u8be5\u811a\u672c\u9ed8\u8ba4\u4f7f\u7528 /bin/bash \u6765\u6267\u884c\u3002\u8fd9\u91cc\u9700\u8981\u4f7f\u7528\u7edd\u5bf9\u8def\u5f84\u6765\u7d22\u5f15 Shell \u7684\u53ef\u6267\u884c\u6587\u4ef6\u3002

    "},{"location":"tech_accu/tool/Shell/#\u4e00\u4e2a\u6a21\u677f","title":"\u4e00\u4e2a\u6a21\u677f","text":"

    \u8fd9\u91cc\u518d\u8d34\u4e00\u4e2a\u6211\u81ea\u5df1\u5199 Shell \u811a\u672c\u7684\u65f6\u5019\u4f1a\u91c7\u7528\u7684\u6a21\u677f\u3002

    #! /bin/bash\n\n# get current direction\ncurDir=`pwd`\n# get shell direction\nworkDir=$(cd \"$(dirname \"$0\")\";pwd)\n\ncd $workDir\n\n# Write your script here.\n\ncd $curDir\n
    "},{"location":"tech_accu/tool/Shell/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"

    \u547d\u4ee4\u884c\u5e38\u89c1\u5feb\u6377\u952e\uff0cSource: https://lym.readthedocs.io/en/latest/startingcommands.html?highlight=mkdir#moving-around-in-the-command-line

    "},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u8d44\u6599","title":"\u76f8\u5173\u8d44\u6599","text":""},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u77e5\u8bc6\u70b9","title":"\u76f8\u5173\u77e5\u8bc6\u70b9","text":""}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-\\.]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"\u6b22\u8fce\uff01","text":"

    \u7ea6 108 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u6211\u4eec\u767b\u4e0a\u9ad8\u5854\uff0c\u770b\u5230\u7684\u5374\u53ea\u6709\u9ed1\u591c\u3002 \u2014\u2014\u5b89\u5fb7\u70c8\u00b7\u7eaa\u5fb7\u300a\u5730\u7cae\u300b

    \ud83e\udd7a \u5982\u679c\u975e\u8981\u652f\u6301\u4e00\u4e0b\u7684\u8bdd\u2026\u2026\u8fd9\u4e2a\u4e8c\u7ef4\u7801\u4e5f\u4e0d\u662f\u4e0d\u53ef\u4ee5\u626b\uff01

    \u63a8\u8350\u9605\u8bfb

    \u7ad9\u70b9\u7edf\u8ba1

    \u672c\u7ad9\u76ee\u524d\u5171 96 \u9875\uff0c\u7d2f\u8ba1 220165 \u5b57\uff01

    "},{"location":"coming/","title":"\u5185\u5bb9\u6b63\u5728\u7f16\u8f91\u4e2d\u2026\u2026","text":"

    \u7ea6 47 \u4e2a\u5b57

    Missing

    \u672c\u90e8\u5206\u7684\u5185\u5bb9\u6b63\u5728\u7f16\u8f91\u4e2d\uff0c\u5c1a\u672a\u4e0a\u4f20\uff01

    \u81ea\u5b9a\u4e49 admonition

    definition

    proof

    property

    extra

    section

    key-point

    advice

    not-advice

    eg

    "},{"location":"link/","title":"\u4f60\u597d\uff01","text":"

    \u7ea6 192 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \ud83d\udcdc \u4ecb\u7ecd

    \u4f60\u597d\uff01\u6211\u60f3\u4e3a\u8fd9\u4e2a\u5c0f\u7f51\u7ad9\u8d4b\u4e88\u4e00\u4e9b\u793e\u4ea4\u4ef7\u503c\uff0c\u60f3\u8ba4\u8bc6\u66f4\u591a\u5389\u5bb3\u7684\u4eba\uff01\u6b22\u8fce\u5927\u5bb6\u5728\u8fd9\u91cc\u804a\u5929\uff0c\u6216\u662f\u7559\u4e0b\u53cb\u94fe\u4ea4\u6362\uff01

    \ud83d\udd17 \u53cb\u94fe

    \u9889\u65f6\u4eba\u5f71 \u8fd9\u662f\u6211\u7684\u535a\u5ba2\uff01\u65f6\u4e0d\u65f6\u66f4\u65b0\u4e00\u4e9b\u548c\u6280\u672f\u6ca1\u5173\u7cfb\u7684\u6587\u7ae0\u3002

    \u54b8\u9c7c\u6684 \u7684 \u4ee3\u7801\u7a7a\u95f4 \u81ed\u5149\u5934\uff0c\u66b4\u63cdxyx\uff01

    \u9e64\u7fd4\u4e07\u91cc \u7684 \u7b14\u8bb0\u672c \ud83e\udd24 xg \u6559\u6b7b\u6211\uff01

    Zicx \u7684 \u7b14\u8bb0\u672c \ud83e\udd24 \u662f\u8d85\u5f3a\u65ed\u5b9d\uff01

    sakuratsuyu \u7684 \u7b14\u8bb0\u672c \ud83e\udd24 \u65e0\u654c\u9ea6\u54e5\u5e26\u5e26\u6211\uff01

    Bowling \u7684 \u7b14\u8bb0\u672c \u88ab\u795e\u4ed9\u5b66\u5f1f\u8584\u7eb1 orz

    MinJoker \u7684 \u7b14\u8bb0\u672c \u88ab\u795e\u4ed9\u5b66\u5f1f\u8584\u7eb1 orz

    Zizheng's Blog \u4f6c\uff01

    \u66ae\u77bb Blog \u4ee5\u6211\u89c2\u7269\uff0c\u6545\u7269\u7686\u7740\u6211\u4e4b\u8272\u5f69\u3002

    \ud83d\udd17 \u6709\u610f\u601d\u7684\u94fe\u63a5

    \u5728\u8fd9\u91cc\u6536\u96c6\u4e00\u4e9b\u6709\u610f\u601d\u7684\u94fe\u63a5\uff01

    "},{"location":"cour_note/","title":"\u6249\u9875","text":"

    \u7ea6 20 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u4e00\u5207\u5b89\u4e50\uff0c\u65e0\u4e0d\u6765\u81ea\u56f0\u82e6\u3002 \u2014\u2014\u590f\u76ee\u6f31\u77f3\u300a\u5fc3\u300b

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/","title":"\ud83d\udd2e \u6982\u7387\u8bba\u4e0e\u6570\u7406\u7edf\u8ba1","text":"

    \u7ea6 164 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    Notes

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/","title":"[1.x] \u6982\u7387\u8bba\u7684\u57fa\u672c\u6982\u5ff5","text":"

    \u7ea6 1144 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u6837\u672c\u7a7a\u95f4\u4e0e\u968f\u673a\u4e8b\u4ef6","title":"\u6837\u672c\u7a7a\u95f4\u4e0e\u968f\u673a\u4e8b\u4ef6","text":"

    \u968f\u673a\u8bd5\u9a8c(random experiment)\u7684\u7279\u70b9\uff1a

    1. \u53ef\u4ee5\u590d\u73b0\uff1b
    2. \u6bcf\u6b21\u8bd5\u9a8c\u7684\u7ed3\u679c\u4e0d\u5b9a\uff0c\u4f46\u4e8b\u5148\u53ef\u4ee5\u77e5\u9053\u8bd5\u9a8c\u7684\u6240\u6709\u53ef\u80fd\u7ed3\u679c\uff1b

    \u800c\u968f\u673a\u8bd5\u9a8c\u7684\u6240\u6709\u53ef\u80fd\u7ed3\u679c\u6784\u6210\u7684\u96c6\u5408\u4e3a\u6837\u672c\u7a7a\u95f4(sample space)\uff0c\u8bb0\u4e3a \\(S\\)\uff0c\u5176\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20\u4e3a\u6837\u672c\u70b9(sample point)\u3002\u800c\u6837\u672c\u7a7a\u95f4\u7684\u4efb\u4e00\u5b50\u96c6\u6210\u4e3a\u968f\u673a\u4e8b\u4ef6(random event)\uff0c\u7b80\u79f0\u4e8b\u4ef6\u3002

    \u4e8b\u4ef6\u7684\u76f8\u4e92\u5173\u7cfb

    \u4ece\u5de6\u5230\u53f3\u5206\u522b\uff1a\u5305\u542b | \u548c\u4e8b\u4ef6 | \u79ef\u4e8b\u4ef6 | \u9006\u4e8b\u4ef6 | \u5dee\u4e8b\u4ef6

    \u5176\u4e2d\uff0c\u548c\u3001\u4ea4\u3001\u9006\u4e8b\u4ef6\u6709\u5982\u4e0b\u8fd0\u7b97\u89c4\u5f8b\uff1a

    \u4e32\u8054\u7cfb\u7edf\u4e0e\u5e76\u8054\u7cfb\u7edf\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u9891\u7387\u4e0e\u6982\u7387","title":"\u9891\u7387\u4e0e\u6982\u7387","text":"

    \u9891\u7387 = \u9891\u6570 / \u8bd5\u9a8c\u603b\u6b21\u6570

    \u82e5\u6837\u672c\u7a7a\u95f4 \\(S\\) \u4e2d\u7684\u4efb\u4e00\u4e8b\u4ef6 \\(A\\)\uff0c\u5b9a\u4e49\u6982\u7387 \\(P(A)\\) \u6ee1\u8db3\u4ee5\u4e0b\u4e09\u6761\u516c\u7406\uff1a

    1. \u975e\u8d1f\u6027 \\(P(A)\\geq0\\)\uff1b
    2. \u89c4\u8303\u6027 / \u6b63\u5219\u6027 \\(P(S)=1\\)\uff1b
    3. \u53ef\u5217\u53ef\u52a0\u6027\uff1a\u5bf9\u4e8e \\(S\\) \u4e2d\u4e0d\u76f8\u5bb9\u7684\u4e8b\u4ef6 \\(A_i\\)\uff0c\u6709 \\(P(\\bigcup\\limits^{+\\infty}_{j=1}A_j)=\\sum\\limits_{j=1}^{+\\infty}P(A_j)\\)\uff1b

    \u7531\u6b64\u5f97\u5230\u5982\u4e0b\u51e0\u6761\u6982\u7387\u7684\u6027\u8d28\uff1a

    1. \u5bf9\u4e8e\u6709\u9650\u4e2a\u4e24\u4e24\u4e0d\u76f8\u5bb9\u7684\u4e8b\u4ef6\u7684\u548c\u4e8b\u4ef6\uff0c\u6709 \\(P(\\bigcup\\limits^n_{j=1}A_j)=\\sum\\limits_{j=1}^nP(A_j)\\)\uff1b
    2. \\(P(A)=1-P(\\overline A)\\)\uff1b\u7279\u522b\u7684\uff0c\u53ef\u4ee5\u5f97\u5230 \\(P(\\varnothing)=0\\)\uff1b
    3. \u5f53 \\(A\\supset B\\) \u65f6\uff0c\\(P(A-B) = P(A)-P(B)\\) \u4e14 \\(P(A)\\geq P(B)\\)\uff1b
    4. \u6982\u7387\u7684\u52a0\u6cd5\u516c\u5f0f\uff1a\\(P(A\\cup B)=P(A)+P(B)-P(AB)\\)\uff1b\u63a8\u5e7f\u5373\u5bb9\u65a5\u539f\u7406\uff1b
    5. \u52a0\u6cd5\u516c\u5f0f\u7684\u63a8\u8bba\uff1a\\(P(A\\cup B)\\leq P(A)+P(B)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u7b49\u53ef\u80fd\u6982\u578b","title":"\u7b49\u53ef\u80fd\u6982\u578b","text":"

    \u5982\u679c\u968f\u673a\u4e8b\u4ef6\u6ee1\u8db3\uff1a

    1. \\(S\\) \u4e2d\u6837\u672c\u70b9\u6570\u6709\u9650\uff1b
    2. \\(\\forall i,j \\in\\{1,2,...,n\\},\\;P(e_i) = P(e_j)\\)\uff0c\u5373\u7b49\u53ef\u80fd\uff1b

    \u5219\u8be5\u8bd5\u9a8c\u95ee\u9898\u4e3a\u7b49\u53ef\u80fd\u6982\u578b\uff08\u53e4\u5178\u6982\u578b\uff09\u6709\u5982\u4e0b\u6027\u8d28\uff1a\u82e5\u603b\u4e8b\u4ef6\u4e2a\u6570\u4e3a \\(N\\)\uff0c\\(A\\) \u4e3a \\(n\\) \u4e2a\u57fa\u672c\u4e8b\u4ef6\u7684\u548c\u4e8b\u4ef6\uff0c\u5219 \\(P(A)=\\frac{n}{N}\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u6761\u4ef6\u6982\u7387","title":"\u6761\u4ef6\u6982\u7387","text":"

    \u5982\u679c \\(P(B)>0\\)\uff0c\u90a3\u4e48\u5b9a\u4e49\u5728 \\(B\\) \u53d1\u751f\u7684\u6761\u4ef6\u4e0b \\(A\\) \u53d1\u751f\u7684\u6761\u4ef6\u6982\u7387(contidional probability)\u4e3a\uff1a\\(P(A|B)=\\frac{P(AB)}{P(B)}\\)

    \u6761\u4ef6\u6982\u7387\u662f\u5728\u65b0\u7684\u6837\u672c\u7a7a\u95f4\u4e0b\u7684\u6982\u7387\u5ea6\u91cf\uff0c\u5b83\u6ee1\u8db3\u6982\u7387\u7684\u5b9a\u4e49\u548c\u6027\u8d28\u3002

    \u5b9a\u4e49\u5b8c\u5907\u4e8b\u4ef6\u7ec4\u4e3a \\(S\\) \u7684\u4e00\u4e2a\u5212\u5206 \\(B_1,B_2,...,B_n\\)\uff0c\u5b83\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

    1. \\(B_iB_j=\\varnothing,i,j,...,n,i\\not=j\\)\uff1b
    2. \\(\\bigcup\\limits^n_{i=1}B_i=S\\)\uff1b

    \u8bbe \\(S\\) \u4e3a\u4e00\u6837\u672c\u7a7a\u95f4\uff0c\\(A\\) \u4e3a\u8be5\u8bd5\u9a8c\u7684\u4e8b\u4ef6\uff0c\\(\\{B_i\\}\\) \u4e3a \\(S\\) \u7684\u4e00\u4e2a\u5212\u5206\uff0c\u5219\u6709\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap01/#\u4e8b\u4ef6\u72ec\u7acb\u6027\u4e0e\u72ec\u7acb\u8bd5\u9a8c","title":"\u4e8b\u4ef6\u72ec\u7acb\u6027\u4e0e\u72ec\u7acb\u8bd5\u9a8c","text":"

    \u8bbe \\(A,B\\) \u4e3a\u4e24\u4e2a\u968f\u673a\u4e8b\u4ef6\uff0c\u82e5\u6709 \\(P(AB)=P(A)*P(B)\\)\uff0c\u5219 \\(A,B\\) \u76f8\u4e92\u72ec\u7acb(independent)\u5176\u5b9e\u9645\u610f\u4e49\u662f\uff0c\u4e8b\u4ef6 \\(A\\) \u7684\u53d1\u751f\u4e0e\u4e8b\u4ef6 \\(B\\) \u7684\u53d1\u751f\u4e92\u4e0d\u5f71\u54cd\u3002\u90a3\u4e48\u5c31\u6709\u7ed3\u8bba\uff1a\\(while\\;\\;P(AB)=P(A)*P(B)\\;\\;,\\;\\;P(A|B)=P(A)\\)\uff1b

    \u5f53\u51fa\u73b0\u4e24\u4e2a\u4ee5\u4e0a\u7684\u968f\u673a\u4e8b\u4ef6\u65f6\uff0c\u5982\u4e09\u4e2a\u968f\u673a\u4e8b\u4ef6 \\(A,B,C\\)\uff0c\u5f53\uff1a\\(P(AB)=P(A)*P(B)\\;,\\;P(AC)=P(A)*P(C)\\;,\\;P(BC)=P(B)*P(C)\\) \u90fd\u6210\u7acb\uff0c\u5219\u79f0\u4e8b\u4ef6 \\(A,B,C\\) \u4e24\u4e24\u72ec\u7acb\uff1b\u5982\u679c\u540c\u65f6\u8fd8\u6ee1\u8db3\uff1a\\(P(ABC)=P(A)P(B)P(C)\\) \u5219\u79f0\u4e8b\u4ef6 \\(A,B,C\\) \u76f8\u4e92\u72ec\u7acb\u3002

    \u66f4\u666e\u904d\u7684\uff1a\u5b9a\u4e49 \\(\\{A_i\\}\\) \u76f8\u4e92\u72ec\u7acb\u5f53\u4e14\u4ec5\u5f53 \\(\\forall{i_j},\\;P(\\prod_{j=1}^k A_{i_j})=\\prod_{j=1}^kP(A_{i_j})\\)

    \u72ec\u7acb\u8bd5\u9a8c\u4e0e\u91cd\u590d\u8bd5\u9a8c\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/","title":"[2.x] \u968f\u673a\u53d8\u91cf\u53ca\u5176\u6982\u7387\u5206\u5e03","text":"

    \u7ea6 1166 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u968f\u673a\u53d8\u91cf\u662f\u5b9a\u4e49\u5728\u6837\u672c\u7a7a\u95f4 \\(S\\) \u4e0a\u7684\u5b9e\u503c\u5355\u503c\u51fd\u6570\u3002\u5e38\u7528\u5927\u5199\u5b57\u6bcd \\(X,Y,Z\\) \u6765\u8868\u793a\u968f\u673a\u53d8\u91cf\uff0c\u7528\u5c0f\u5199\u5b57\u6bcd \\(x,y,z\\) \u8868\u793a\u5176\u53d6\u503c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","title":"\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","text":"

    \u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf(discrete random variable)\u5982\u679c\u968f\u673a\u53d8\u91cf\u53d6\u6709\u9650\u4e2a\u6216\u53ef\u5217\u4e2a\u503c\uff0c\u5219\u6b64\u968f\u673a\u53d8\u91cf\u4e3a\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf\uff0c\u800c\u82e5\u5176\u53ef\u80fd\u53d6\u503c\u4e3a \\(\\{x_i\\}\\)\uff0c\u5219\u79f0 \\(P\\{X=x_k\\}=p_k\\;,\\;k=1,2,...\\) \u4e3a \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b(probability mass function)\uff0c\u4e5f\u53ef\u4ee5\u7528\u5217\u8868\u7684\u65b9\u5f0f\u8868\u8fbe\u3002\u56e0\u4e3a\u6837\u672c\u7a7a\u95f4 \\(S=\\{X=x_1,X=x_2,\\,...\\,,X=x_n\\,...\\,\\}\\) \u4e2d\u5404\u6837\u672c\u70b9\u4e24\u4e24\u4e0d\u76f8\u5bb9\uff0c\u6240\u4ee5\uff1a\\(1=P(S)=\\sum\\limits_{i=1}^{+\\infty}P(X=x_i)=\\sum\\limits_{i=1}^{+\\infty}{p_i}\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u4e24\u70b9\u5206\u5e03","title":"\u4e24\u70b9\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    x 0 1 P 1-p p

    \\[ P\\{X=k\\}=p^k(1-p)^{1-k}\\;,\\;\\;\\;k=0\\;or\\;1 \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u53c2\u6570\u4e3a \\(p\\) \u7684 \\(0-1\\) \u5206\u5e03\uff0c\u4e5f\u79f0\u4e3a\u4e24\u70b9\u5206\u5e03\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim B(1,p)\\) \u6216\u8005 \\(X\\sim 0-1(p)\\)

    \u5b9a\u4e49\u4f2f\u52aa\u5229(Bernoulli)\u8bd5\u9a8c\u4e3a\uff1a\u5728 \\(n\\) \u6b21\u72ec\u7acb\u91cd\u590d\u8bd5\u9a8c\u4e2d\uff0c\u6bcf\u6b21\u53ea\u6709 \\(A\\) \u548c \\(\\overline A\\) \u4e24\u79cd\u7ed3\u679c\uff0c\u4e14\u6982\u7387\u4e0d\u53d8\uff0c\u5219\u8fd9\u4e00\u7cfb\u5217\u8bd5\u9a8c\u4e3a\u4f2f\u52aa\u5229\u8bd5\u9a8c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u4e8c\u9879\u5206\u5e03","title":"\u4e8c\u9879\u5206\u5e03","text":"

    \u82e5\u968f\u673a\u53d8\u91cf \\(X\\) \u8868\u793a \\(n\\) \u91cd\u8d1d\u52aa\u529b\u5b9e\u9a8c\u4e2d\u4e8b\u4ef6A\u53d1\u751f\u7684\u6b21\u6570\uff0c\u5176\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P\\{X=k\\}={\\rm C}_n^kp^k(1-p)^{n-k}\\;,\\;\\;k=0,1,2,...,n \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u53c2\u6570\u4e3a \\((n,p)\\) \u7684\u4e8c\u9879\u5206\u5e03(binomial distribution)\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim B(n,p)\\)

    \u6839\u636e\u4e8c\u9879\u5f0f\u5b9a\u7406\uff0c\u4e8c\u9879\u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    \\[ \\sum\\limits_{k=0}^n{\\rm C}_n^kp^k(1-p)^{n-k}=1 \\] "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u6cca\u677e\u5206\u5e03","title":"\u6cca\u677e\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P(X=k)=\\frac{e^{-\\lambda}\\lambda^k}{k!}\\;,\\;\\;\\;k=0,1,2,... \\]

    \u5176\u4e2d \\(\\lambda > 0\\)\uff0c\u5219\u79f0 \\(X\\) \u670d\u4ece\u53c2\u6570\u4e3a \\(\\lambda\\) \u7684\u6cca\u677e\u5206\u5e03(Poisson distribution)\uff0c\u8bb0\u505a \\(X \\sim P(\\lambda)\\)

    \u5f53 \\(n\\) \u8db3\u591f\u5927\uff0c\\(p\\) \u5145\u5206\u5c0f(\u4e00\u822c\u8981\u6c42 \\(p<0.1\\))\uff0c\u4e14 \\(np\\) \u4fdd\u6301\u9002\u5f53\u5927\u5c0f\u65f6\uff0c\u53c2\u6570\u4e3a \\((n,p)\\) \u7684\u4e8c\u9879\u5206\u5e03\u53ef\u4ee5\u7528\u6cca\u677e\u5206\u5e03\u8fd1\u4f3c\u63cf\u8ff0\uff0c\u5176\u4e2d \\(\\lambda = np\\)\uff0c\u5373\uff1a

    \\[ {\\rm C}_n^kp^k(1-p)^{n-k} \\sim \\frac{e^{-\\lambda}\\lambda^k}{k!}\\;\\;\\;\\;\\;(n\\rightarrow\\infty,p<\\varepsilon,\\lambda=np) \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u8d85\u51e0\u4f55\u5206\u5e03","title":"\u8d85\u51e0\u4f55\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P\\{X=k\\}=\\frac{{\\rm C}_a^k{\\rm C}_b^{n-k}}{{\\rm C}_{a+b}^n}\\;,\\;\\;\\;k=l_1,l_1+1,...,l_2 \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u8d85\u51e0\u4f55\u5206\u5e03(hypergeometric distribution)\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim H(n,a,p)\\)

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a\uff1a

    \\[ P\\{X=k\\}=p(1-p)^{k-1}\\;,\\;\\;\\;k=1,2,... \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u670d\u4ece\u53c2\u6570\u4e3a \\(p\\) \u7684\u51e0\u4f55\u5206\u5e03(geometric distribution)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","title":"\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","text":"

    \u5b9a\u4e49\uff1a\u8bbe \\(X\\) \u4e3a\u968f\u673a\u53d8\u91cf\uff0c\\(x\\) \u4e3a\u4efb\u610f\u5b9e\u6570\uff0c\u51fd\u6570 \\(F(x)=P\\{X\\leq x\\}\\) \u4e3a\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u51fd\u6570\uff0c\u7b80\u79f0\u4e3a\u5206\u5e03\u51fd\u6570(distribution function)\u3002\uff08\u79bb\u6563\u968f\u673a\u53d8\u91cf\u540c\u6837\u53ef\u4ee5\u6709\u5206\u5e03\u51fd\u6570\uff09

    \u5219\u6709\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    \\[ P\\{x_1<X\\leq x_2\\}=P\\{X\\leq x_2\\}-P\\{X\\leq x_1\\}=F(x_2)-F(x_1) \\]

    \u5f53 \\(X\\) \u4e3a\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf\u65f6\uff0c\u8bbe \\(X\\) \u7684\u6982\u7387\u5206\u5e03\u5f8b\u4e3a \\(P\\{X=x_i\\}=p_i\\;,\\;\\;i=1,2,...\\)\uff0c\u5219 \\(X\\) \u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x) = P\\{X\\leq x\\}=\\sum\\limits_{x_i\\leq x}P\\{X=x_i\\} \\]

    \u5173\u4e8e \\(F(x)\\) \u6709\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    1. \\(F(x)\\) \u5355\u8c03\u4e0d\u51cf\uff1b
    2. \\(0\\leq F(x) \\leq 1\\) \u4e14 \\(F(-\\infty)=0\\)\uff0c\\(F(+\\infty)=1\\)\uff1b
    3. \\(F(x)\\) \u53f3\u8fde\u7eed\uff0c\u5373 \\(F(x+0)=F(x)\\)\uff1b
    4. \\(P(a<X\\leq b)=F(b)-F(a)\\)\uff1b

    \u5982\u679c\u5bf9\u4e8e\u968f\u673a\u53d8\u91cf \\(X\\)\uff0c\u5176\u5206\u5e03\u51fd\u6570\u4e3a \\(F(x)\\)\uff0c\u82e5\u5b58\u5728\u4e00\u4e2a\u975e\u8d1f\u7684\u5b9e\u51fd\u6570 \\(f(x)\\)\uff0c\u4f7f\u5bf9\u4e8e\u4efb\u610f\u5b9e\u6570 \\(x\\)\uff0c\u6709\uff1a

    \\[ F(x) = \\int_{-\\infty}^{x}f(t)dt \\]

    \u5219\u79f0 \\(X\\) \u4e3a\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff0c\u5e76\u4e14\u79f0 \\(f(x)\\) \u4e3a \\(X\\) \u7684\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(probability density function)\uff0c\u7b80\u79f0\u4e3a\u5bc6\u5ea6\u51fd\u6570\u3002

    \u5173\u4e8e \\(f(x)\\) \u6709\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    1. \\(f(x) \\geq 0\\)\uff1b
    2. \\(\\int_{-\\infty}^{\\infty}f(x)dx=1\\)\uff1b
    3. \\(\\forall x_1,x_2\\in \\mathbf{R}\\;\\;(x_1<x_2)\\;,\\;\\;P\\{x_1<X\\leq x_2\\}=F(x_2)-F(x_1)=\\int^{x_2}_{x_1}f(t)dt\\)\uff1b
    4. \u5728\\(f(x)\\) \u7684\u8fde\u7eed\u70b9 \\(x\\) \u5904\uff0c\\(F'(x)=f(x)\\)
    5. \\(P\\{X=a\\} = 0\\)\uff0c\u5373\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\u4efb\u53d6\u4e00\u4e2a\u5b9a\u503c\u7684\u6982\u7387\u4e3a\u96f6\uff0c\u56e0\u6b64\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\u843d\u5728\u5f00\u533a\u95f4\u4e0e\u76f8\u5e94\u95ed\u533a\u95f4\u4e0a\u7684\u6982\u7387\u76f8\u7b49\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u5747\u5300\u5206\u5e03","title":"\u5747\u5300\u5206\u5e03","text":"

    \u8bbe\u968f\u673a\u53d8\u91cf \\(X\\) \u5c31\u6709\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x)=\\begin{cases} \\frac{1}{b-a}, & x\\in(a,b) \\\\[1ex] 0, & \\text{else} \\end{cases} \\]

    \u5219\u79f0 \\(X\\) \u670d\u4ece\u533a\u95f4 \\((a,b)\\) \u4e0a\u7684\u5747\u5300\u5206\u5e03\uff0c\u5e76\u8bb0\u4e3a \\(X\\sim U(a,b)\\)

    \u800c\u5f97\u5230\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x)=\\begin{cases} 0, & x<a \\\\[1ex] \\frac{x-a}{b-a}, & a\\leq x<b \\\\[1ex] 1, & x\\geq b \\end{cases} \\]

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u6307\u6570\u5206\u5e03","title":"\u6307\u6570\u5206\u5e03","text":"

    \u82e5\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x)=\\begin{cases} \\lambda e^{-\\lambda x}, & x>0 \\\\[1ex] 0\uff0c& x\\leq0 \\end{cases} \\]

    \u4e5f\u6709\u5730\u65b9\u5199\u6210\u8fd9\u6837\uff1a

    \\[ f(x)=\\begin{cases} \\frac{1}{\\theta} e^{-\\frac{1}{\\theta} x}, & x>0 \\\\[1ex] 0\uff0c& x\\leq0 \\end{cases} \\]

    \u5176\u4e2d \\(\\lambda > 0\\)\uff0c\u5219\u79f0 \\(X\\) \u670d\u4ece\u53c2\u6570\u4e3a \\(\\lambda\\) \u7684\u6307\u6570\u5206\u5e03(exponential distribution)\uff0c\u8bb0\u4e3a \\(X\\sim E(\\lambda)\\)

    \u6307\u6570\u5206\u5e03\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x)=\\int_{-\\infty}^{x}f(t)\\mathrm{d}t= \\begin{cases} 1-e^{-\\lambda x}, & x>0 \\\\[1ex] 0\uff0c& x\\leq0 \\end{cases} \\]

    \u6307\u6570\u5206\u5e03\u5177\u6709\u65e0\u8bb0\u5fc6\u6027\uff0c\u5373 \\(P(X>s | X>t_0)=P(X>s-t_0)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u6b63\u6001\u5206\u5e03","title":"\u6b63\u6001\u5206\u5e03","text":"

    \u5982\u679c\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x)=\\frac{1}{\\sqrt{2\\pi}\\sigma}e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}}\\;, \\;\\;\\; |x|<+\\infty \\]

    \u5176\u4e2d \\(\\sigma>0\\;,\\;|\\mu|<+\\infty\\) \u4e3a\u5e38\u6570\uff0c\u5219\u79f0 \\(X\\) \u670d\u4ece\u53c2\u6570\u4e3a \\((\\mu,\\sigma)\\) \u7684\u6b63\u6001\u5206\u5e03(normal distribution / Gauss distribution)\uff0c\u6216\u8005\u79f0 \\(X\\) \u4e3a\u6b63\u6001\u53d8\u91cf\uff0c\u8bb0\u4e3a \\(X\\sim N(\\mu,\\sigma^2)\\)\u3002

    \u5176\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ F(x)=\\int_{-\\infty}^{x}\\frac{1}{\\sqrt{2\\pi}\\sigma}e^{-\\frac{(t-\\mu)^2}{2\\sigma^2}}dt \\]

    \u5728\u4e0a\u9762\u51fa\u73b0\u7684\u5f0f\u5b50\u4e2d\uff0c\\(\\mu\\) \u4e3a\u4f4d\u7f6e\u53c2\u6570\uff0c\u51b3\u5b9a\u4e86\u5206\u5e03\u56fe\u50cf\u7684\u5bf9\u79f0\u8f74\u4f4d\u7f6e\uff1b\\(\\sigma\\) \u4e3a\u5c3a\u5ea6\u53c2\u6570\uff0c\u51b3\u5b9a\u4e86\u5f62\u72b6\uff0c\\(\\sigma\\) \u8d8a\u5c0f\uff0c\u56fe\u50cf\u8d8a\u96c6\u4e2d\u3002

    \u7279\u522b\u7684\uff0c\u5f53 \\(\\mu=0\\;,\\;\\sigma=1\\) \u65f6\uff0c\u5982\u679c\u8bb0\u8fd9\u65f6\u7684\u6b63\u592a\u53d8\u91cf\u4e3a \\(Z\\)\uff0c\u5373 \\(Z\\sim N(0,1)\\) \u5219\u5b83\u670d\u4ece\u6807\u51c6\u6b63\u6001\u5206\u5e03(standard normal distribution)\u3002\u5219\u5176\u5bc6\u5ea6\u51fd\u6570\u4e3a\uff1a

    \\[ \\varphi(x)=\\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{x^2}{2}}\\;, \\;\\;\\;|x|<+\\infty \\]

    \u5219\u5bf9\u5e94\u7684\u5206\u5e03\u51fd\u6570\u4e3a\uff1a

    \\[ \\Phi(x) = \\int_{-\\infty}^{x}\\frac{1}{\\sqrt{2\\pi}}e^{-\\frac{t^2}{2}}dt \\]

    \u800c\u5bf9\u4e8e\u4e0d\u662f\u6807\u51c6\u6b63\u6001\u5206\u5e03\u7684\u6b63\u6001\u5206\u5e03\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u7ebf\u6027\u53d8\u6362\uff08\u6807\u51c6\u5316\uff09\u6765\u8f6c\u6362\u4e3a\u6807\u51c6\u6b63\u6001\u5206\u5e03\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap02/#\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u5206\u5e03","title":"\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u5206\u5e03","text":"

    \u5982\u679c\uff1a

    \u5219\u8bb0 \\(y=g(x)\\) \u7684\u53cd\u51fd\u6570\u4e3a \\(x=h(y)\\)\uff0c\u5f97\u5230 \\(Y\\) \u7684\u5bc6\u5ea6\u51fd\u6570\u4e3a\uff1a

    \\[ f_Y(y)=\\begin{cases} f_X(h(y))\u00b7|h'(y)|\\;, & y\\in D,\\\\[1ex] 0, & y\\not\\in D \\end{cases} \\]

    \u6709\u5173\u6b63\u6001\u5206\u5e03\u7684\u91cd\u8981\u7ed3\u8bba\uff1a

    \u82e5 \\(X\\sim N(\\mu,\\sigma^2)\\)\uff0c\u5219 \\(Y=aX+b \\sim N(a\\mu+b,a^2\\sigma^2)\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/","title":"[3.x] \u591a\u5143\u968f\u673a\u53d8\u91cf\u53ca\u5176\u5206\u5e03","text":"

    \u7ea6 406 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","title":"\u4e8c\u7ef4\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8054\u5408\u5206\u5e03\u5f8b","title":"\u8054\u5408\u5206\u5e03\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5206\u5e03\u5f8b","title":"\u8fb9\u9645\u5206\u5e03\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5206\u5e03\u5f8b","title":"\u6761\u4ef6\u5206\u5e03\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u968f\u673a\u53d8\u91cf\u7684\u5206\u5e03\u51fd\u6570","title":"\u4e8c\u7ef4\u968f\u673a\u53d8\u91cf\u7684\u5206\u5e03\u51fd\u6570","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8054\u5408\u5206\u5e03\u51fd\u6570","title":"\u8054\u5408\u5206\u5e03\u51fd\u6570","text":"

    \\(F(x,y)=P\\{X\\leq x,Y\\leq y\\}\\) \u4e3a \\((X,Y)\\) \u7684\u8054\u5408\u6982\u7387\u5206\u5e03\u51fd\u6570\uff0c\u7b80\u79f0\u8054\u5408\u5206\u5e03\u51fd\u6570\uff08Joint Distribution Function\uff09\uff0c\u5176\u5177\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    1. \u56fa\u5b9a\u5176\u4e2d\u4e00\u4e2a\u53d8\u91cf\uff0c\u5219\u8be5\u4e8c\u5143\u51fd\u6570\u5173\u4e8e\u53e6\u5916\u4e00\u4e2a\u53d8\u91cf\u5355\u8c03\u4e0d\u51cf\uff1b
    2. \\(0\\leq F(x,y)\\leq 1\\)\uff0c\u4e14 \\(F(x,-\\infty)=F(-\\infty,y)=F(-\\infty,-\\infty)=0\\;,\\;F(+\\infty,+\\infty)=1\\)\uff1b
    3. \\(F(x,y)\\) \u5173\u4e8e \\(x\\) \u548c \\(y\\) \u5206\u522b\u53f3\u8fde\u7eed\uff08\u79bb\u6563\uff09\uff1b
    4. \\(x_1<x_2\\;,\\;y_1<y_2\\) \u65f6\uff0c\u6709\uff1a \\(P\\{x_1<X\\leq x_2\\;,\\;y_1<Y\\leq y_2\\}=F(x_2,y_2)-F(x_1,y_2)-F(x_2,y_1)+F(x_1,y_1)\\geq 0\\)
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5206\u5e03\u51fd\u6570","title":"\u8fb9\u9645\u5206\u5e03\u51fd\u6570","text":"

    \\(F_X(x)=P\\{X\\leq x\\}=P\\{X\\leq x ,Y<+\\infty\\}=F(x,+\\infty)=\\int_{-\\infty}^{+\\infty}f(x,y)dy\\) \u4e3a \\(X\\) \u5173\u4e8e\u8054\u5408\u5206\u5e03\u51fd\u6570 \\(F(x,y)\\) \u7684\u8fb9\u9645\u5206\u5e03\u51fd\u6570\uff08Marginal Distribution Function\uff09\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5206\u5e03\u51fd\u6570","title":"\u6761\u4ef6\u5206\u5e03\u51fd\u6570","text":"

    \\(F_{Y|X}(y|x)=P\\{Y\\leq y | X = x\\}=\\frac{P\\{Y\\leq y,X=x\\}}{P\\{X=x\\}}\\) \u4e3a \\(\\{ X=x \\}\\) \u6761\u4ef6\u4e0b \\(Y\\) \u7684\u6761\u4ef6\u5206\u5e03\u51fd\u6570\uff08Conditional Distribution Function\uff09\u3002

    \u8fdb\u4e00\u6b65\u63a8\u5e7f\uff0c\u82e5 \\(P(X=x)=0\\)\uff0c\u4f46\u5bf9\u4efb\u610f\u7ed9\u5b9a\u7684 \\(\\epsilon\\)\uff0c\\(P(x<X\\leq x+\\epsilon)>0\\)\uff0c\u5219\u5728 \\(\\{ X=x \\}\\) \u6761\u4ef6\u4e0b\uff0c\\(Y\\) \u7684\u6761\u4ef6\u5206\u5e03\u51fd\u6570\u4e3a \\(F_{Y|X}(y|x)=\\lim_{\\epsilon \\rarr 0^+}P\\{Y\\leq y|x<X\\leq x+\\epsilon \\}\\)\uff0c\u4ecd\u8bb0\u4e3a \\(P\\{Y\\leq y | X = x\\}\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","title":"\u4e8c\u7ef4\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8054\u5408\u5bc6\u5ea6\u51fd\u6570","title":"\u8054\u5408\u5bc6\u5ea6\u51fd\u6570","text":"

    \u8bbe\u4e8c\u5143\u968f\u673a\u53d8\u91cf \\((X,Y)\\) \u7684\u8054\u5408\u5206\u5e03\u51fd\u6570\u4e3a \\(F(x,y)\\)\uff0c\u82e5\u5b58\u5728\u4e8c\u5143\u51fd\u6570 \\(f(x,y)\\geq 0\\)\uff0c\u5219\u5bf9\u4e8e\u4efb\u610f\u7684\u5b9e\u6570 \\(x\\)\uff0c\\(y\\) \u6709 \\(F(x,y)=\\int_{-\\infty}^x\\int_{-\\infty}^yf(u,v)\\mathrm{d}u\\mathrm{d}v\\)\uff0c\u5219\u79f0 \\((X,Y)\\) \u4e3a\u4e8c\u7ef4\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff08Bivariate Continuous Random Variable\uff09\uff0c\u79f0 \\(f(x,y)\\) \u4e3a \\((X,Y)\\) \u7684\u8054\u5408\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08Joint Probability Density Function\uff09\uff0c\u7b80\u79f0\u4e3a\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\u3002 \u5176\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

    1. \\(f(x,y)\\geq 0\\)\uff1b
    2. \\(F(+\\infty,+\\infty)=\\int_{-\\infty}^{+\\infty}\\int_{-\\infty}^{+\\infty}f(u,v)\\mathrm{d}u\\mathrm{d}v=1\\)\uff1b
    3. \u5728 \\(f(x,y)\\) \u7684\u8fde\u7eed\u70b9 \\((x,y)\\) \u4e0a\u6709 \\(\\frac{\\partial^2F(x,y)}{\\partial x\\partial y}=f(x,y)\\)\uff1b
    4. \\((X,Y)\\) \u843d\u5165 \\(xOy\\) \u5e73\u9762\u4efb\u610f\u533a\u57df \\(D\\) \u7684\u6982\u7387\u4e3a\uff1a\\(P\\{(X,Y)\\in D\\}=\\iint \\limits_{D} f(x,y)\\mathrm{d}x\\mathrm{d}y\\)\uff1b
    5. \u7531\u4e8e\u5176\u51e0\u4f55\u610f\u4e49\u4e3a\u843d\u5728\u4ee5 \\(D\\) \u4e3a\u5e95\uff0c\u4ee5\u66f2\u9762 \\(z=f(x,y)\\) \u4e3a\u9876\u9762\u7684\u67f1\u4f53\u4f53\u79ef\uff0c\u6240\u4ee5\u5f53 \\(D\\) \u9762\u79ef\u4e3a \\(0\\) \u65f6\u6982\u7387\u4e3a \\(0\\)\uff1b
    6. eg\uff1a\\(P(X=1,Y=1)=0\\)\uff0c\\(P(X+Y=1)=0\\)\uff0c\\(P(X^2+Y^2=1)\\not =0\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u8fb9\u9645\u5bc6\u5ea6\u51fd\u6570","title":"\u8fb9\u9645\u5bc6\u5ea6\u51fd\u6570","text":"

    \\(f_X(x)=\\int_{-\\infty}^{+\\infty}f(x,y)dy\\) \u4e3a\u8fb9\u9645\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08Marginal Probability Density Function\uff09\uff0c\u7b80\u79f0\u8fb9\u9645\u5bc6\u5ea6\u51fd\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u6761\u4ef6\u5bc6\u5ea6\u51fd\u6570","title":"\u6761\u4ef6\u5bc6\u5ea6\u51fd\u6570","text":"

    \u5728\u7ed9\u5b9a \\(\\{X=x\\}\\) \u7684\u6761\u4ef6\u4e0b\uff0c\\(Y\\) \u7684\u6761\u4ef6\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\uff08Conditional Prob-ability Density Function\uff09\u4e3a \\(f_{Y|X}(y|x)=\\frac{\\int^y_{-\\infty}f(x,v)\\mathrm{d}v}{f_X(x)}=\\frac{f(x,y)}{f_X(x)}\\;,\\;\\;f_X(x)\\not= 0\\)\uff0c\u7b80\u79f0\u6761\u4ef6\u5bc6\u5ea6\u51fd\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u4e8c\u7ef4\u5747\u5300\u5206\u5e03\u4e0e\u4e8c\u7ef4\u6b63\u6001\u5206\u5e03","title":"\u4e8c\u7ef4\u5747\u5300\u5206\u5e03\u4e0e\u4e8c\u7ef4\u6b63\u6001\u5206\u5e03","text":"

    \u5747\u5300\u5206\u5e03

    \u5982\u679c\u4e8c\u5143\u968f\u673a\u53d8\u91cf \\((X,Y)\\) \u5728\u4e8c\u7ef4\u6709\u754c\u533a\u95f4 \\(D\\) \u4e0a\u53d6\u503c\uff0c\u4e14\u5177\u6709\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x,y)= \\begin{cases} \\frac{1}{\\text{Area of } D},&(x,y)\\in D\\\\[1ex] 0,&\\text{else} \\end{cases} \\]

    \u5219\u79f0 \\((X,Y)\\) \u670d\u4ece \\(D\\) \u4e0a\u7684\u5747\u5300\u5206\u5e03\u3002\u5f97\u5230\uff1a

    \\[ P\\{(X,Y)\\in D\\}=\\frac{\\text{Area of }D_1}{\\text{Area of }D}\\;,\\;\\;\\text{while }D_1\\subset D \\]

    \u6b63\u6001\u5206\u5e03

    \u5982\u679c\u4e8c\u5143\u968f\u673a\u53d8\u91cf \\((X,Y)\\) \u5177\u6709\u8054\u5408\u5bc6\u5ea6\u51fd\u6570\uff1a

    \\[ f(x,y)= \\frac{1}{ 2 \\pi \\sigma_1 \\sigma_2 \\sqrt{1-\\rho^2} } \\exp \\{ \\frac{-1}{ 2(1-\\rho^2) } [ \\frac{ (x-\\mu)^2 }{ \\sigma_1^2 } - 2\\rho\\frac{ (x-\\mu_1)(y-\\mu_2) }{ \\sigma_1\\sigma_2 } + \\frac{ (y-\\mu_2)^2 }{ \\sigma_2^2 } ] \\} \\]

    \u4e14\u6709 \\(|\\mu_1|<+\\infty\\)\uff0c\\(|\\mu_2|<+\\infty\\)\uff0c\\(\\sigma_1>0\\)\uff0c\\(\\sigma_2>0\\)\uff0c\\(|\\rho|<1\\)

    \u5219\u79f0 \\((X,Y)\\) \u670d\u4ece\u53c2\u6570\u4e3a \\((\\mu_1,\\mu_2,\\sigma_1^2,\\sigma_2^2,\\rho)\\) \u7684\u4e8c\u5143\u6b63\u6001\u5206\u5e03\uff08Bivariate Normal Distribution\uff09\uff0c\u8bb0\u505a \\((X,Y)\\sim N(\\mu_1,\\mu_2,\\sigma_1^2,\\sigma_2^2,\\rho)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u968f\u673a\u53d8\u91cf\u7684\u72ec\u7acb\u6027","title":"\u968f\u673a\u53d8\u91cf\u7684\u72ec\u7acb\u6027","text":"

    \u5982\u679c\u5bf9\u4e8e\u4efb\u610f\u7684\u4e24\u4e2a\u5b9e\u6570\u96c6\u5408 \\(D_1\\)\uff0c\\(D_2\\)\uff0c\u6709 \\(P\\{X\\in D_1,Y\\in D_2\\}=P\\{X\\in D_1\\}\u00b7P\\{Y\\in D_2\\}\\)\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf \\(X,Y\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5373 \\(X\\)\uff0c\\(Y\\) \u72ec\u7acb\u3002\u5373\u540c\u65f6\u6709 \\(P\\{X\\leq x,Y\\leq y\\}=P\\{X\\leq x\\}\u00b7P\\{Y\\leq y\\}\\)\uff0c\u5373 \\(F(x,y)=F_X(x)\u00b7F_Y(y)\\) \u65f6\uff0c\\(X\\)\uff0c\\(Y\\) \u72ec\u7acb\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap03/#\u5377\u79ef\u516c\u5f0f","title":"\u5377\u79ef\u516c\u5f0f","text":"

    \u5f53 \\(X\\) \u548c \\(Y\\) \u76f8\u4e92\u72ec\u7acb\u65f6\uff0c\\(Z=X+Y\\) \u7684\u6761\u4ef6\u4e0b\uff1a

    1. \\(F_Z(z) = \\iint \\limits_{x+y\\leq z}f(x,y)\\mathrm{d}x\\mathrm{d}y=\\int_{-\\infty}^{+\\infty}[\\int_{-\\infty}^{z-x}f(x,u-x)\\mathrm{d}y]\\mathrm{d}x = \\int_{-\\infty}^{+\\infty}[\\int_{-\\infty}^{z}f(x,u-x)\\mathrm{d}u]\\mathrm{d}x=\\int_{-\\infty}^{z}[\\int_{-\\infty}^{+\\infty}f(x,u-x)\\mathrm{d}x]\\mathrm{d}u =\\int_{-\\infty}^{z}f_Z(u)\\mathrm{d}y\\)\uff1b

    2. \u5176\u5bc6\u5ea6\u51fd\u6570\u516c\u5f0f\u79f0\u4e3a\u5377\u79ef\u516c\u5f0f\uff1a\\(f_X*f_Y=\\int_{-\\infty}^{+\\infty}f_X(x)f_Y(z-x)\\mathrm{d}x=\\int_{-\\infty}^{+\\infty}f_X(z-y)f_Y(y)\\mathrm{d}y\\)\uff1b

    \\(M=max(X,Y)\\;\\;and\\;\\;N=min(X,Y)\\) \u7684\u5206\u5e03\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/","title":"[4.x] \u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81","text":"

    \u7ea6 1774 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u6570\u5b66\u671f\u671b","title":"\u6570\u5b66\u671f\u671b","text":"

    \u8bbe\u79bb\u6563\u968f\u673a\u53d8\u91cf\\(X\\)\u7684\u6982\u7387\u5206\u5e03\u7387\u4e3a \\(P\\{X=x_i\\}=p_i,\\;\\;i=1,2,...\\)\uff0c\u82e5\u7ea7\u6570 \\(\\sum_{i=1}^{+\\infty}|x_i|p_i<+\\infty\\)\uff08\u7edd\u5bf9\u6536\u655b\uff09\uff0c\u5219\u79f0\u7ea7\u6570 \\(\\sum_{i=1}^{+\\infty}x_ip_i\\) \u4e3a \\(X\\) \u7684\u6570\u5b66\u671f\u671b(Mathematical Expectation)\u6216\u5747\u503c(Mean)\uff0c\u7b80\u79f0\u4e3a\u671f\u671b\uff0c\u8bb0 \\(E(X)=\\sum_{i=1}^{+\\infty}x_ip_i\\)\u3002 \u5982\u679c \\(\\sum_{i=1}^{+\\infty}=|x_i|p_i=+\\infty\\) \u5219\u79f0\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6570\u5b66\u671f\u671b\u4e0d\u5b58\u5728\u3002

    \u8bbe\u8fde\u7eed\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u5bc6\u5ea6\u51fd\u6570\u4e3a \\(f(x)\\)\uff0c\u82e5 \\(\\int^{+\\infty}_{-\\infty}|x|f(x)\\mathrm{d} x<+\\infty\\)\uff08\u7edd\u5bf9\u6536\u655b\uff09\uff0c\u5219\u79f0\u79ef\u5206 \\(\\int^{+\\infty}_{-\\infty}xf(x)\\mathrm{d} x\\) \u4e3a \\(X\\) \u7684\u6570\u5b66\u671f\u671b\u6216\u5747\u503c\uff0c\u7b80\u79f0\u4e3a\u671f\u671b\uff0c\u8bb0 \\(E(X)=\\int^{+\\infty}_{-\\infty}xf(x)\\mathrm{d} x\\)\u3002 \u5982\u679c \\(\\int^{+\\infty}_{-\\infty}|x|f(x)\\mathrm{d} x=+\\infty\\) \u5219\u79f0\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6570\u5b66\u671f\u671b\u4e0d\u5b58\u5728\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u5e38\u89c1\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b","title":"\u5e38\u89c1\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b","text":"

    \u6cca\u677e\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b \u8bbe\u968f\u673a\u53d8\u91cf \\(X\\) \u670d\u4ece\u6cca\u677e\u5206\u5e03 \\(P(\\lambda)\\;(\\lambda>0)\\)\uff0c\u5219\uff1a \\(E(X)=\\sum_{k=0}^{+\\infty}k\u30fb P\\{X=k\\}=\\sum_{k=0}^{+\\infty}k\u30fb\\frac{\\lambda^{k}}{k!}e^{-\\lambda}=\\lambda\\sum_{k=1}^{+\\infty}\\frac{\\lambda^{k-1}}{(k-1)!}e^{-\\lambda}=\\lambda\\) \u7531\u6b64\u5f0f\u53ef\u77e5\uff0c\u5df2\u77e5\u6cca\u677e\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u53ef\u4ee5\u786e\u5b9a\u6cca\u677e\u5206\u5e03\u3002

    \u6307\u6570\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b \u8bbe\u968f\u673a\u53d8\u91cf\\(X\\)\u670d\u4ece\u6307\u6570\u5206\u5e03 \\(E(\\lambda)\\;(\\lambda>0)\\)\uff0c\u5219\uff1a \\(E(X)=\\int_{-\\infty}^{+\\infty}xf(x)\\mathrm{d}x=\\int_{0}^{+\\infty}x\\lambda e^{-\\lambda x}\\mathrm{d}x=-\\int_{0}^{+\\infty}x\\mathrm{d}e^{-\\lambda x}\\\\=-(xe^{-\\lambda x})\\big|_{0}^{+\\infty}+\\int_{0}^{+\\infty}e^{-\\lambda x}\\mathrm{d}x=\\frac{1}{\\lambda}\\) \u7531\u6b64\u5f0f\u53ef\u77e5\uff0c\u5df2\u77e5\u6307\u6570\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b\u53ef\u4ee5\u786e\u5b9a\u6307\u6570\u5206\u5e03\u3002

    \u6807\u51c6\u6b63\u6001\u5206\u5e03\u7684\u6570\u5b66\u671f\u671b \u8bbe\u968f\u673a\u53d8\u91cf\\(X\\)\u670d\u4ece\u6807\u51c6\u6b63\u6001\u5206\u5e03 \\(N(0,1)\\)\uff0c\u6ce8\u610f\u5230\u5176\u7684\u5bc6\u5ea6\u51fd\u6570\uff1a\\(\\varphi(x)=\\frac{1}{\\sqrt{2\\pi}}e^{-x^2/2},\\;x\\in \\R\\) \u4e3a\u5076\u51fd\u6570\uff0c\u90a3\u4e48 \\(x\\varphi(x)\\) \u662f\u5947\u51fd\u6570\uff0c\u6240\u4ee5 \\(E(x)=0\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u6570\u5b66\u671f\u671b","title":"\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u6570\u5b66\u671f\u671b","text":"

    \u8bbe \\(Y\\) \u662f\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u51fd\u6570\uff1a\\(Y=g(X)\\)\uff08\\(g\\) \u662f\u8fde\u7eed\u51fd\u6570\uff09\u3002

    \\(X\\) \u662f\u79bb\u6563\u578b\u968f\u673a\u53d8\u91cf\uff0c\u5b83\u7684\u5206\u5e03\u5f8b\u4e3a \\(P(X=x_k)=p_k,\\;\\;k=1,2,...\\)\uff0c\u82e5 \\(\\sum_{k=1}^{+\\infty}g(x_k)p_k\\) \u7edd\u5bf9\u6536\u655b\uff0c\u5219\u6709\uff1a \\(E(Y)=E(g(X))=\\sum_{k=1}^{+\\infty}g(x_k)p_k\\)\u3002

    \\(X\\) \u662f\u8fde\u7eed\u578b\u968f\u673a\u53d8\u91cf\uff0c\u5b83\u7684\u6982\u7387\u5bc6\u5ea6\u4e3a \\(f(x)\\)\uff0c\u82e5 \\(\\int_{-\\infty}^{+\\infty}g(x)f(x)\\mathrm{d}x\\) \u7edd\u5bf9\u6536\u655b\uff0c\u5219\u6709\uff1a \\(E(Y)=E(g(X))=\\int_{-\\infty}^{+\\infty}g(x)f(x)\\mathrm{d}x\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u6570\u5b66\u671f\u671b\u7684\u6027\u8d28","title":"\u6570\u5b66\u671f\u671b\u7684\u6027\u8d28","text":"
    1. \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C) = C\\)\uff1b
    2. \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(E(C\u30fbX)=C\u30fbE(X)\\)\uff1b
    3. \u8bbe \\(X,Y\\) \u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219 \\(E(X+Y)=E(X)+E(Y)\\)\uff1b
      • \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u968f\u673a\u53d8\u91cf\u7ebf\u6027\u7ec4\u5408\u7684\u60c5\u51b5\uff1a\\(E(c_0+\\sum^n_i{c_iX_i})=c_0+\\sum^n_i c_iE(X_i)\\)\uff1b
    4. \u8bbe \\(X,Y\\) \u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff0c\u5219 \\(E(X\u30fbY)=E(X)\u30fbE(Y)\\)\uff0c\u4f46\u9006\u547d\u9898\u4e0d\u6210\u7acb\uff1b
      • \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff1a\\(E(\\prod_i^nX_i)=\\prod_i^nE(X_i)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u65b9\u5dee\u4e0e\u53d8\u5f02\u7cfb\u6570","title":"\u65b9\u5dee\u4e0e\u53d8\u5f02\u7cfb\u6570","text":"

    \u8bbe \\(X\\) \u4e3a\u968f\u673a\u53d8\u91cf\uff0c\u82e5 \\(E\\{[X-E(X)]^2\\}\\) \u5b58\u5728\uff0c\u5219\u79f0\u5176\u4e3a \\(X\\) \u7684\u65b9\u5dee\uff0c\u8bb0\u4f5c \\(Var(X)\\) \u6216 \\(D(X)\\)\uff0c\u5373 \\(Var(X)=D(X)=E\\{[X-E(X)]^2\\}\\)\u3002 \u8bb0 \\(\\sigma(X)=\\sqrt{(Var(X))}\\) \u4e3a \\(X\\) \u7684\u6807\u51c6\u5dee\u6216\u5747\u65b9\u5dee\u3002

    \u6570\u5b66\u671f\u671b\u5b58\u5728\u662f\u65b9\u5dee\u5b58\u5728\u7684\u5fc5\u8981\u4f46\u4e0d\u5145\u5206\u6761\u4ef6\u3002

    \u65b9\u5dee\u523b\u753b\u4e86 \\(X\\) \u53d6\u503c\u7684\u5206\u6563\u7a0b\u5ea6\uff1a

    \u800c\u5176\u8ba1\u7b97\u65b9\u6cd5\u53ef\u4ee5\u5229\u7528\u968f\u673a\u53d8\u91cf\u51fd\u6570\u7684\u6570\u5b66\u671f\u671b\uff0c\u8bb0 \\(g(X)=(X-E(X))^2\\)\uff0c\u7136\u540e\u8ba1\u7b97 \\(E(g(X))\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u5e38\u89c1\u5206\u5e03\u7684\u65b9\u5dee","title":"\u5e38\u89c1\u5206\u5e03\u7684\u65b9\u5dee","text":"

    \u6cca\u677e\u5206\u5e03\u7684\u65b9\u5dee \\(\\because E(X^2)=E(X(X-1)+X)=E(X(X-1))+E(X)=\\sum_{k=0}^{\\infty}k(k-1)\\frac{\\lambda^ke^{-\\lambda}}{k!}+\\lambda=\\lambda^2+\\lambda\\\\ \\therefore Var(X)=E(X^2)+E^2(X)=\\lambda\\)

    \u6307\u6570\u5206\u5e03\u7684\u65b9\u5dee \\(\\because E(X^2)=\\int_{-\\infty}^{+\\infty}x^2f(x)\\mathrm dx=\\int_0^{+\\infty}x^2\\lambda e^{-\\lambda x}\\mathrm d x=-x^2e^{-\\lambda x}\\big|^{+\\infty}_0+\\int^{+\\infty}_{0}2xe^{-\\lambda x}\\mathrm dx=\\frac{2}{\\lambda^2}\\\\ \\therefore Var(X)=E(X^2)-E^2(X)=\\frac{1}{\\lambda^2}\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u65b9\u5dee\u7684\u6027\u8d28","title":"\u65b9\u5dee\u7684\u6027\u8d28","text":"
    1. \u82e5 \\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C) = 0\\)\uff1b
    2. \u8bbe \\(X\\) \u662f\u968f\u673a\u53d8\u91cf\uff0c\\(C\\) \u662f\u5e38\u6570\uff0c\u5219 \\(Var(C\u30fbX)=C^2\u30fbVar(X)\\)\uff1b
    3. \u8bbe \\(X,Y\\) \u662f\u4e24\u4e2a\u968f\u673a\u53d8\u91cf\uff0c\u5219 \\(Var(X\\pm Y)=Var(X)+Var(Y)\\pm2E\\{[X-E(X)][Y-E(Y)]\\}=Var(X)+Var(Y)\\pm 2Cov(X,Y)\\)\uff1b
      • \u8fd9\u4e00\u6027\u8d28\u53ef\u4ee5\u63a8\u5e7f\u5230\u4efb\u610f\u6709\u9650\u4e2a\u968f\u673a\u53d8\u91cf\u4e4b\u548c\u7684\u60c5\u51b5\uff1a\\(Var(\\sum_{i=1}^{n}X_i)=\\sum_{i=1}^{n}Var(X_i)+2\\sum_{1\\leq i<j\\leq n}Cov(X_i,X_j)\\)\uff1b
      • \u7279\u522b\u5730\uff0c\u5982\u679c \\(X,Y\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5219 \\(Var(X\\pm Y)=Var(X)+Var(Y)\\)\uff1b
      • \u8fdb\u4e00\u6b65\u5730\uff0c\u5982\u679c \\(X_i\\;(i=1,2,...,n)\\) \u5f7c\u6b64\u72ec\u7acb\uff0c\u5219 \\(Var(c_0+\\sum_{i=1}^{n}c_iX_i)=\\sum_{i=1}^{n}c_i^2Var(X_i)\\)
    4. \\(Var(X)\\leq E[(X-c)^2]\\)\uff0c\u5e76\u4e14\u5f53\u4e14\u4ec5\u5f53 \\(E(X)=c\\) \u65f6\u7b49\u53f7\u6210\u7acb\uff1b
    5. \\(Var(X)=0\\;\\;\\Leftrightarrow\\;\\;P(X=c)=1\\;\\;and\\;\\;c=E(X)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u53d8\u5f02\u7cfb\u6570","title":"\u53d8\u5f02\u7cfb\u6570","text":"

    \u53d8\u5f02\u7cfb\u6570(Coefficient of Variation)\u53c8\u53eb\u201c\u6807\u51c6\u5dee\u7387\u201d\uff0c\u662f\u8861\u91cf\u8d44\u6599\u4e2d\u5404\u89c2\u6d4b\u503c\u53d8\u5f02\u7a0b\u5ea6\u7684\u4e00\u4e2a\u6570\u5b57\u7279\u5f81\u3002\u5b83\u53ef\u4ee5\u6d88\u9664\u5355\u4f4d\u6216\u5e73\u5747\u6570\u4e0d\u540c\u5bf9\u4e24\u4e2a\u6216\u591a\u4e2a\u8d44\u6599\u53d8\u5f02\u7a0b\u5ea6\u6bd4\u8f83\u7684\u5f71\u54cd\u3002

    \u8bbe\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u6570\u5b66\u671f\u671b \\(E(X)=\\mu\\)\uff0c\u65b9\u5dee \\(Var(X)={\\sigma}^2 \\neq 0\\)\uff0c\u5219\u79f0 \\(C_v = \\frac{\\sigma}{\\mu}\\) \u4e3a \\(X\\) \u7684\u53d8\u5f02\u7cfb\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u534f\u65b9\u5dee\u4e0e\u76f8\u5173\u7cfb\u6570","title":"\u534f\u65b9\u5dee\u4e0e\u76f8\u5173\u7cfb\u6570","text":"

    \u968f\u673a\u53d8\u91cf \\(X,Y\\) \u7684\u534f\u65b9\u5dee \\(Cov(X,Y)=E\\{[X-E(X)][Y-E(Y)]\\}=E(XY)-E(X)E(Y)\\)

    \u968f\u673a\u53d8\u91cf \\(X,Y\\) \u7684\u76f8\u5173\u7cfb\u6570 \\(\\rho _{_{XY}}=\\frac{Cov(X,Y)}{\\sqrt{Var(X)Var(Y)}}=Cov(X^*,Y^*)\\)

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u534f\u65b9\u5dee\u7684\u6027\u8d28","title":"\u534f\u65b9\u5dee\u7684\u6027\u8d28","text":"
    1. \\(Cov(X,Y)=Cov(Y,X)\\)\uff1b
    2. \\(Cov(X,Y)=E(XY)-E(X)E(Y)\\)\uff1b
    3. \\(Cov(aX,bY)=abCov(X,Y)\\;,\\;\\;a,b\\in\\R\\)\uff1b
    4. \\(Cov(X+Y,Z)=Cov(X,Z)+Cov(Y,Z)\\)\uff1b
    5. \\(Cov(X,X)=Var(X)\\)\uff1b
    6. \\(Cov(c,Y)=E(cY)-E(c)E(Y)=0\\;,\\;\\;c\\in\\R\\)\uff1b
    7. \\(Cov(X+Y,X-Y)=Cov(X,X)-Cov(Y,Y)=Var(X)-Var(Y)\\)\uff1b
    8. \\(Cov(X^*,Y^*)=Cov(\\frac{X-E(X)}{\\sqrt{Var(X)}},\\frac{Y-E(Y)}{\\sqrt{Var(Y)}})=\\frac{Cov(X,Y)}{\\sqrt{Var(X)}\\sqrt{Var(Y)}}=\\rho_{_{XY}}\\)\uff1b
    9. \\(Cov(aX+bY,cX+dY)=acVar(X)+bdVar(Y)+(ad+bc)Cov(X,Y)\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u76f8\u5173\u7cfb\u6570\u7684\u6027\u8d28","title":"\u76f8\u5173\u7cfb\u6570\u7684\u6027\u8d28","text":"
    1. \\(|\\rho_{_{XY}}|\\leq 1\\)\uff1b
    2. \\(|\\rho_{_{XY}}|=1 \\;\\; \\Leftrightarrow \\;\\; \\exists a,b\\in \\R,\\;s.t.\\;P(Y=a+bX)=1\\)\uff1b
      • \\(\\rho_{_{XY}}=+1\\)\u65f6\uff0c\\(b>0\\)\uff1b
      • \\(\\rho_{_{XY}}=-1\\)\u65f6\uff0c\\(b<0\\)\uff1b
    3. \u4e0a\u8ff0\u4e24\u6761\u6027\u8d28\u53ef\u4ee5\u5408\u5e76\u5199\u6210\uff1a \u5f53 \\(Var(X)Var(Y)\\neq 0\\) \u65f6\uff0c\u6709 \\(Cov^2(X,Y)\\leq Var(X)Var(Y)\\)\uff0c\u5176\u4e2d\u7b49\u53f7\u5f53\u4e14\u4ec5\u5f53 \\(X\\) \u4e0e \\(Y\\) \u4e4b\u95f4\u6709\u4e25\u683c\u7684\u7ebf\u6027\u5173\u7cfb\uff0c\u5373\u5b58\u5728\u5e38\u6570 \\(a,b\\)\uff0c\u4f7f \\(P(Y=a+bX)=1\\)\uff1b

    \u76f8\u5173\u7cfb\u6570 \\(\\rho_{_{XY}}\\) \u662f\u7528\u6765\u8868\u5f81 \\(X,Y\\) \u4e4b\u95f4\u7ebf\u6027\u5173\u7cfb\u7d27\u5bc6\u7a0b\u5ea6\u7684\u91cf\u3002\u6b64\u5916\uff0c\u8003\u8651\u4ee5 \\(X\\) \u7684\u7ebf\u6027\u51fd\u6570 \\(a+bX\\) \u6765\u8fd1\u4f3c\u8868\u793a \\(Y\\)\uff0c\u5747\u65b9\u8bef\u5dee \\(e(a,b)=E\\{ [Y-(a+bX)]^2 \\}\\) \u4e5f\u53ef\u4ee5\u7528\u6765\u8861\u91cf \\(X,Y\\) \u4e4b\u95f4\u7ebf\u6027\u5173\u7cfb\u7d27\u5bc6\u7a0b\u5ea6\u3002

    \u6ce8\u610f\u533a\u5206\u72ec\u7acb\u6027\u548c\u76f8\u5173\u6027\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#\u591a\u5143\u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81","title":"\u591a\u5143\u968f\u673a\u53d8\u91cf\u7684\u6570\u5b57\u7279\u5f81","text":"

    \u8bbe \\(n\\) \u5143\u968f\u673a\u53d8\u91cf \\(X=(X_1,X_2,...,X_n)^T\\)\uff0c\u82e5\u6bcf\u4e00\u4e2a\u5206\u91cf\u7684\u6570\u5b66\u671f\u671b\u90fd\u5b58\u5728\uff0c\u5219\u79f0 \\(E(X)=(E(X_1),E(X_2),...,E(X_n))^T\\) \u4e3a \\(n\\) \u5143\u968f\u673a\u53d8\u91cf \\(X\\) \u7684\u6570\u5b66\u671f\u671b\uff08\u5411\u91cf\uff09\u3002

    \u8bbe \\(n\\) \u7ef4\u968f\u673a\u53d8\u91cf \\(\\vec{X}=(X_1,X_2,...,X_n)^T\\)\uff0c\\(Cov(X_i,X_j)\\;\\;(i,j=1,2,...,n)\\) \u90fd\u5b58\u5728\uff0c\u5219\uff1a

    \\[ \\begin{bmatrix} Var(X_1) & Cov(X_1,X_2) & ... & Cov(X_1,X_n)\\\\ Cov(X_2,X_1) & Var(X_2) & ... & Cov(X_2,X_n)\\\\ ... & ... & ... & ... \\\\ Cov(X_n,X_1) & Cov(X_n,X_2) & ... & Var(X_n) \\end{bmatrix} \\]

    \u79f0\u4e4b\u4e3a \\(\\vec{X}\\) \u7684\u534f\u65b9\u5dee\u77e9\u9635\uff0c\u5b83\u662f\u4e00\u4e2a\u5bf9\u79f0\u7684\u975e\u8d1f\u5b9a\u77e9\u9635\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap04/#n\u7ef4\u6b63\u6001\u53d8\u91cf\u91cd\u8981\u6027\u8d28","title":"n\u2009\u7ef4\u6b63\u6001\u53d8\u91cf\u91cd\u8981\u6027\u8d28","text":"
    1. \\(n\\) \u7ef4\u6b63\u6001\u53d8\u91cf \\((X_1,X_2,...,X_n)^T\\) \u4e2d\u7684\u4efb\u610f\u5b50\u5411\u91cf \\((X_{i_1},X_{i_2},...,X_{i_k})^T\\)\uff0c\\(1\\leq k\\leq n\\) \u4e5f\u670d\u4ece \\(k\\) \u5143\u6b63\u6001\u5206\u5e03\uff1b
      • \u7279\u522b\u5730\uff0c\u6bcf\u4e00\u4e2a\u5206\u91cf \\(X_i,i=1,2,...,n\\) \u90fd\u662f\u6b63\u6001\u53d8\u91cf\uff1b
      • \u53cd\u4e4b\uff0c\u82e5\u6bcf\u4e2a \\(X_i\\) \u90fd\u662f\u6b63\u6001\u53d8\u91cf\uff0c\u4e14\u76f8\u4e92\u72ec\u7acb\uff0c\u5219 \\((X_1,X_2,...,X_n)\\) \u662f \\(n\\) \u7ef4\u6b63\u6001\u53d8\u91cf\uff1b
    2. \\(n\\) \u7ef4\u968f\u673a\u53d8\u91cf \\((X_1,X_2,...,X_n)\\) \u670d\u4ece \\(n\\) \u7ef4\u6b63\u6001\u5206\u5e03\u7684\u5145\u8981\u6761\u4ef6\u662f \\(X_1,X_2,...,X_n\\) \u7684\u4efb\u610f\u7ebf\u6027\u7ec4\u5408 \\(\\sum_{i}^{n} l_iX_i\\) \u670d\u4ece\u4e00\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u5176\u4e2d \\(l_1,l_2,...,l_n\\) \u4e0d\u5168\u4e3a \\(0\\)\uff1b
    3. \u82e5 \\((X_1,X_2,...,X_n)\\) \u670d\u4ece \\(n\\) \u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u8bbe \\(Y_1,Y_2,...,Y_k\\) \u662f \\(X_i\\) \u7684\u7ebf\u578b\u51fd\u6570\uff0c\u5219 \\((Y_1,Y_2,...,Y_k)\\) \u4e5f\u670d\u4ece\u591a\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u8fd9\u4e00\u6027\u8d28\u88ab\u79f0\u4e3a\u6b63\u6001\u53d8\u91cf\u7684\u7ebf\u6027\u53d8\u6362\u4e0d\u53d8\u6027\uff1b
    4. \u82e5 \\((X_1,X_2,...,X_n)\\) \u670d\u4ece \\(n\\)\u7ef4\u6b63\u6001\u5206\u5e03\uff0c\u5219 \\(X_1,X_2,...,X_n\\) \u4e92\u76f8\u72ec\u7acb\u7684\u5145\u8981\u6761\u4ef6\u662f \\(X_i\\) \u4e24\u4e24\u4e0d\u76f8\u5173\uff0c\u4e5f\u7b49\u4ef7\u4e8e\u534f\u65b9\u5dee\u77e9\u9635\u4e3a\u5bf9\u89d2\u77e9\u9635\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/","title":"[5.x] \u5927\u6570\u5b9a\u5f8b\u53ca\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","text":"

    \u7ea6 1182 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u5927\u6570\u5b9a\u5f8b","title":"\u5927\u6570\u5b9a\u5f8b","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4f9d\u6982\u7387\u6536\u655b","title":"\u4f9d\u6982\u7387\u6536\u655b","text":"

    \u8bbe \\(\\{Y_n,n\\geq1\\}\\) \u4e3a\u4e00\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u82e5\u5bf9\u4e8e \\(\\forall\\varepsilon>0\\)\uff0c\u5747\u6709 \\(\\lim_{n\\to+\\infty}P\\{|Y_n-Y|\\geq\\varepsilon\\}=0\\)\uff08\u6216\u8005 \\(\\lim_{n\\to+\\infty}P\\{|Y_n-c|<\\varepsilon\\}=1\\)\uff09\uff0c\u5219\u79f0 \\(\\{Y_n,n\\geq1\\}\\) \u4f9d\u6982\u7387\u6536\u655b(Convergence in Probability)\u4e8e \\(Y\\)\uff0c\u8bb0\u505a \\(Y_n\\xrightarrow{P} Y\\;,\\;\\;n\\to+\\infty\\)\u3002

    \u7279\u522b\u5730\uff0c\u5f53 \\(Y=c\\) \u4e3a\u4e00\u5e38\u6570\u65f6\uff0c\u79f0 \\(\\{Y_n,n\\geq1\\}\\) \u4f9d\u6982\u7387\u6536\u655b\u4e8e\u5e38\u6570 \\(c\\)\u3002

    \u4f9d\u6982\u7387\u6536\u655b\u6709\u5982\u4e0b\u91cd\u8981\u6027\u8d28\uff1a

    \u82e5 \\(X_n \\xrightarrow{P} a\\)\uff0c\\(Y_n \\xrightarrow{P} b\\)\uff0c\u5f53 \\(n\\to+\\infty\\) \u65f6\uff0c\u51fd\u6570 \\(g(x,y)\\) \u5728\u70b9 \\((a,b)\\) \u8fde\u7eed\uff0c\u5219\uff1a

    \\[ g(X_n,Y_n) \\xrightarrow{P} g(a,b) \\;,\\;\\; n\\to+\\infty \\]

    \u7279\u522b\u5730\uff0c\u82e5 \\(X_n \\xrightarrow{P} a\\)\uff0c\\(f(x)\\) \u5728\u70b9 \\(a\\) \u8fde\u7eed\uff0c\u5219\uff1a

    \\[ f(X_n) \\xrightarrow{P} f(a) \\;,\\;\\; n\\to+\\infty \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4e24\u4e2a\u91cd\u8981\u4e0d\u7b49\u5f0f","title":"\u4e24\u4e2a\u91cd\u8981\u4e0d\u7b49\u5f0f","text":"

    \u9a6c\u5c14\u53ef\u592b(Markov)\u4e0d\u7b49\u5f0f

    \u82e5\u968f\u673a\u53d8\u91cf \\(Y\\) \u7684 \\(k\\) \u9636\uff08\u539f\u70b9\uff09\u77e9\u5b58\u5728\uff08\\(k\\geq1\\)\uff09\uff0c\u5373 \\(E(Y^k)\\) \u5b58\u5728\uff0c\u5219\u5bf9\u4e8e \\(\\forall \\varepsilon > 0\\)\uff0c\u5747\u6709\uff1a

    \\[ P \\{ |Y| \\geq \\varepsilon \\}\\leq \\frac{E(|Y|^k)}{\\varepsilon^k} \\;\\; \\text{or} \\;\\; P\\{Y\\geq \\varepsilon\\} \\leq \\frac{E(Y^k)}{\\varepsilon^k} \\]

    \u7279\u522b\u5730\uff0c\u5f53 \\(Y\\) \u53d6\u975e\u8d1f\u503c\u7684\u968f\u673a\u53d8\u91cf\u4e14\u5b83\u7684 \\(k\\) \u9636\u77e9\u5b58\u5728\u65f6\uff0c\u6709\uff1a

    \\[ P\\{Y\\geq \\varepsilon\\} \\leq \\frac{E(Y^k)}{\\varepsilon^k} \\]

    \u5207\u6bd4\u96ea\u592b(Chebyshev)\u4e0d\u7b49\u5f0f

    \u82e5\u968f\u673a\u53d8\u91cf \\(X\\) \u5177\u6709\u6570\u5b66\u671f\u671b \\(E(X)=\\mu\\)\uff0c\u65b9\u5dee \\(Var(X) = \\sigma^2\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall \\varepsilon > 0\\)\uff0c\u5747\u6709\uff1a

    \\[ P\\{ |X-\\mu|\\geq \\varepsilon \\} \\leq \\frac{\\sigma^2}{\\varepsilon^2} \\;\\; \\text{or} \\;\\; P\\{ |X-\\mu|< \\varepsilon \\} \\geq1- \\frac{\\sigma^2}{\\varepsilon^2} \\] "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u5e38\u89c1\u7684\u51e0\u79cd\u5927\u6570\u5b9a\u5f8b","title":"\u5e38\u89c1\u7684\u51e0\u79cd\u5927\u6570\u5b9a\u5f8b","text":"

    \u5927\u6570\u5b9a\u5f8b\uff08\u4e00\u822c\u5f62\u5f0f\uff09

    \u8bbe \\(\\{Y_i,i\\geq1\\}\\) \u4e3a\u4e00\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u82e5\u5b58\u5728\u5e38\u6570\u5e8f\u5217 \\(\\{c_n,n\\geq 1\\}\\)\uff0c\u4f7f\u5f97 \\(\\forall \\varepsilon > 0\\)\uff0c\u5747\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|\\geq \\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n|< \\varepsilon\\}=1 \\]

    \u6210\u7acb\uff0c\u5373\u6709 \\((\\frac{1}{n}\\sum_{i=1}^{n}Y_i-c_n)\\xrightarrow{P}0\\;\\;,\\;\\;n\\to+\\infty\\)\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf\u5e8f\u5217 \\(\\{Y_i,i\\geq1\\}\\) \u670d\u4ece\u5f31\u5927\u6570\u5b9a\u7406(Weak Law of Large Numbers)\uff0c\u7b80\u79f0\u670d\u4ece\u5927\u6570\u5b9a\u5f8b\u3002

    \u7279\u522b\u5730\uff0c\u82e5 \\(c_n\\) \u4e0e \\(n\\) \u65e0\u5173\uff0c\u5219\u53ef\u4ee5\u5199\u4e3a\uff1a

    \\[ \\frac{1}{n}\\sum_{i=1}^{n}Y_i \\xrightarrow{P} c \\;\\;,\\;\\; n\\to+\\infty \\]

    \u5173\u4e8e\u670d\u4ece\u5927\u6570\u5b9a\u5f8b\uff0c\u6a59\u4e66\u7ed9\u51fa\u7684\u5b9a\u4e49\u5f0f\u662f\uff1a

    \\[ \\lim_{n\\to \\infty}P\\big(\\big|\\frac{1}{n}\\sum_{i=1}^{n}X_i-\\frac{1}{n}\\sum_{i=1}^{n}E(X_i) \\big|<\\varepsilon\\big)=1 \\]

    \u63a5\u4e0b\u6765\u7ed9\u51fa\u51e0\u79cd\u5e38\u89c1\u7684\u5927\u6570\u5b9a\u5f8b\uff0c\u5b83\u4eec\u7684\u533a\u522b\u4f53\u73b0\u5728\u6761\u4ef6\u4e0a\uff1a\u6709\u4e9b\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\uff0c\u6709\u4e9b\u662f\u76f8\u4f9d\u7684\u968f\u673a\u53d8\u91cf\uff1b\u6709\u4e9b\u662f\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\uff0c\u6709\u4e9b\u662f\u4e0d\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u3002

    \u4f2f\u52aa\u5229(Bernoulli)\u5927\u6570\u5b9a\u5f8b

    \u8bbe \\(n_A\\) \u8868\u793a \\(n\\) \u91cd\u4f2f\u52aa\u5229\u8bd5\u9a8c\u4e2d\u4e8b\u4ef6 \\(A\\) \u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0\u4e8b\u4ef6 \\(A\\) \u5728\u6bcf\u6b21\u8bd5\u9a8c\u4e2d\u53d1\u751f\u7684\u6982\u7387\u4e3a \\(p\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall \\varepsilon > 0\\)\uff0c\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{n_A}{n}-p|\\geq \\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\frac{n_A}{n} \\xrightarrow{P} p \\;\\;,\\;\\; n\\to+\\infty \\]

    \u8f9b\u94a6(Khinchin)\u5927\u6570\u5b9a\u5f8b

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14\u6570\u5b66\u671f\u671b\u4e3a \\(\\mu\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall\\varepsilon>0\\)\uff0c\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum_{i=1}^{n}X_i-\\mu|\\geq \\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\frac{1}{n}\\sum_{i=1}^{n}X_i\\xrightarrow{P}\\mu\\;\\;,\\;\\;n\\to+\\infty \\]

    \u6ce8\u610f\uff0c\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u7684\u6761\u4ef6\u4e2d\uff0c\u53ea\u8981\u6c42\u671f\u671b\u5b58\u5728\uff0c\u4e0d\u8981\u6c42\u65b9\u5dee\u5b58\u5728\u3002 \u6b64\u5916\uff0c\u8f9b\u94a6\u5927\u6570\u5b9a\u5f8b\u6709\u5982\u4e0b\u63a8\u8bba\uff1a

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u82e5 \\(h(x)\\) \u4e3a\u8fde\u7eed\u51fd\u6570\uff0c\u4e14 \\(E(|h(X_1)|)<+\\infty\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall\\varepsilon>0\\)\uff0c\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{|\\frac{1}{n}\\sum^{n}_{i=1}h(X_i)-a|\\geq\\varepsilon\\}=0 \\;\\; \\text{or} \\;\\; \\frac{1}{n}\\sum_{i=1}^{n}h(X_i)\\xrightarrow{P}a\\;\\;,\\;\\;n\\to+\\infty \\]

    \u5176\u4e2d \\(a=E(|h(X_1)|)\\)\uff0c\u5373\u968f\u673a\u53d8\u91cf \\(\\{ h(X_i) , i \\geq 1 \\}\\) \u4e5f\u670d\u4ece\u5927\u6570\u5b9a\u5f8b\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","title":"\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u72ec\u7acb\u540c\u5206\u5e03\u65f6","title":"\u72ec\u7acb\u540c\u5206\u5e03\u65f6","text":"

    \u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14 \\(E(X_i)=\\mu\\;\\;,\\;\\;Var(X_i)=\\sigma^2\\;\\;(\\sigma>0)\\)\uff0c\u5219 \\(\\forall x\\in \\mathbf{R}\\)\uff0c\u6709\uff1a

    \\[ \\begin{aligned} \\lim_{n\\to+\\infty}P\\left\\{ \\frac{ \\begin{aligned} \\sum_{i=1}^{n}X_i-E(\\sum_{i=1}^{n}X_i) \\end{aligned} }{\\begin{aligned} \\sqrt{\\mathrm{Var}(\\sum_{i=1}^{n}X_i)} \\end{aligned}}\\leq x\\right\\}&= \\lim_{n\\to+\\infty}P\\left\\{ \\frac{ \\begin{aligned} \\sum_{i=1}^{n}X_i-n\\mu \\end{aligned} }{\\begin{aligned} \\sigma\\sqrt{n} \\end{aligned}}\\leq x\\right\\} \\\\ &=\\frac{1}{\\sqrt{2\\pi}}\\int_{-\\infty}^{x}e^{-\\frac{t^2}{2}}\\mathrm{d}t \\\\ &=\\Phi(x) \\end{aligned} \\]

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\\(E(X_i)=\\mu\\;\\;,\\;\\;Var(X_i)=\\sigma^2\\;\\;(\\sigma>0)\\) \u7684\u72ec\u7acb\u540c\u5206\u5e03\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\u7684\u90e8\u5206\u548c \\(\\sum_{i=1}^{n}X_i\\) \u7684\u6807\u51c6\u5316\u91cf\u8fd1\u4f3c\u4e8e\u4e00\u4e2a\u6b63\u6001\u53d8\u91cf\uff1a

    \\[ \\frac{ \\begin{aligned} \\sum_{i=1}^{n}X_i-n\\mu \\end{aligned} }{\\begin{aligned} \\sigma\\sqrt{n} \\end{aligned}} \\overset{\\text{approximately}}{\\sim} N(0,1)\\;\\;,\\;\\;\\text{where }n\\text{ is big enough} \\]

    \u7b49\u4ef7\u5730\uff0c\u4e5f\u53ef\u4ee5\u5199\u6210\u5982\u4e0b\u5f62\u5f0f\uff1a

    \\[ \\frac{ \\begin{aligned} \\frac{1}{n}\\sum_{i=1}^{n}X_i-\\mu \\end{aligned} }{\\begin{aligned} \\frac{\\sigma}{\\sqrt{n}} \\end{aligned}} \\overset{\\text{approximately}}{\\sim} N(0,1)\\;\\;,\\;\\;\\text{where }n\\text{ is big enough} \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u4e8c\u9879\u5206\u5e03\u7684\u6b63\u6001\u8fd1\u4f3c","title":"\u4e8c\u9879\u5206\u5e03\u7684\u6b63\u6001\u8fd1\u4f3c","text":"

    \u68e3\u83ab\u5f17-\u62c9\u666e\u62c9\u65af\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u662f\u6797\u5fb7\u4f2f\u683c-\u83b1\u7ef4\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u7684\u63a8\u8bba\uff1a

    \u8bbe \\(n_A\\) \u8868\u793a \\(n\\) \u91cd\u4f2f\u52aa\u5229\u8bd5\u9a8c\u4e2d\u4e8b\u4ef6 \\(A\\) \u53d1\u751f\u7684\u6b21\u6570\uff0c\u5e76\u8bb0 \\(P(A)=p\\)\uff0c\u5219\u5bf9\u4e8e \\(\\forall x\\in\\mathbf{R}\\)\uff0c\u5747\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{\\frac{n_A-np}{\\sqrt{np(1-p)}}\\leq x\\}=\\frac{1}{\\sqrt{2\\pi}}\\int_{-\\infty}^{x}e^{-\\frac{t^2}{2}}\\mathrm{d}t=\\Phi(x) \\]

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u5f53 \\(n\\) \u5f88\u5927\u65f6\uff0c\u4e8c\u9879\u5206\u5e03\u53ef\u4ee5\u7528\u6b63\u6001\u5206\u5e03\u53bb\u8fd1\u4f3c\uff08\u671f\u671b\u4e0e\u65b9\u5dee\u4e0d\u53d8\uff09\uff1a

    \\[ n_A \\overset{\\text{approximately}}{\\sim} N(np,np(1-p)) \\;\\;,\\;\\;\\text{where }n\\text{ is big enough} \\]

    \u5176\u4e2d \\(n_A = \\sum_{i=1}^{n} X_i\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap05/#\u72ec\u7acb\u4e0d\u540c\u5206\u5e03\u65f6\u4e0d\u8981\u6c42","title":"\u72ec\u7acb\u4e0d\u540c\u5206\u5e03\u65f6(\u4e0d\u8981\u6c42)","text":"

    \u674e\u96c5\u666e\u8bfa\u592b\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406

    \u8bbe \\(\\{X_i,i\\geq 1\\}\\) \u4e3a\u76f8\u4e92\u72ec\u7acb\u7684\u968f\u673a\u53d8\u91cf\u5e8f\u5217\uff0c\u4e14 \\(E(X_i)=\\mu_i\\;\\;,\\;\\;Var(X_i)=\\sigma_i^2\\;\\;(\\sigma>0)\\)\uff0c\u82e5 \\(\\exists\\varepsilon>0\\) \u4f7f\u5f97\uff1a

    \\[ \\lim_{n\\to+\\infty}\\frac{1}{B_n^{2+\\varepsilon}}\\sum_{i=1}^{n}E|X_i-\\mu_i|^{2+\\varepsilon}=0\\;\\;\\;\\text{where}\\;\\;\\;B_n^{2}=\\sum_{i=1}^{n}\\sigma_i^2 \\]

    \u5219\u6709\uff1a

    \\[ \\lim_{n\\to+\\infty}P\\{ \\frac{1}{B_n} \\sum_{i=1}^n(X_i-\\mu_i)\\leq x \\} = \\frac{1}{\\sqrt{2\\pi}}\\int_{-\\infty}^{x}e^{-\\frac{t^2}{2}}\\mathrm{d}t=\\Phi(x) \\]"},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/","title":"[6.x] \u7edf\u8ba1\u91cf\u4e0e\u62bd\u6837\u5206\u5e03","text":"

    \u7ea6 1730 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u57fa\u672c\u6982\u5ff5","title":"\u57fa\u672c\u6982\u5ff5","text":"

    \u540e\u9762\u63d0\u5230\u7684\u6240\u6709\u6837\u672c\uff0c\u6307\u7684\u90fd\u662f\u7b80\u5355\u968f\u673a\u6837\u672c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u7edf\u8ba1\u91cf","title":"\u7edf\u8ba1\u91cf","text":"

    \u8bbe \\((X_1,X_2,...,X_n)\\) \u662f\u6765\u81ea\u603b\u4f53 \\(X\\) \u7684\u4e00\u4e2a\u6837\u672c\uff0c\\(g(X_1,X_2,...,X_n)\\) \u662f \\(X_1,X_2,...,X_n\\) \u7684\u51fd\u6570\uff0c\u82e5 \\(g\\) \u4e2d\u4e0d\u542b\u4efb\u4f55\u672a\u77e5\u53c2\u6570\uff0c\u5219\u79f0 \\(g(X_1,X_2,...,X_n)\\) \u4e3a\u4e00\u7edf\u8ba1\u91cf\u3002\u6362\u8a00\u4e4b\uff0c\u7edf\u8ba1\u91cf\u662f\u6837\u672c\u7684\u4e0d\u542b\u4efb\u4f55\u672a\u77e5\u53c2\u6570\u7684\u51fd\u6570\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6837\u672c\u5747\u503c","title":"\u6837\u672c\u5747\u503c","text":"\\[ \\overline{X}=\\frac{1}{n}\\sum_{i=1}^{n}X_i \\]

    \u6837\u672c\u5747\u503c\u53cd\u6620\u4e86\u603b\u4f53\u7684\u671f\u671b\uff08\u5747\u503c\uff09\u3002

    \u6837\u672c\u5747\u503c\u7684\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6837\u672c\u65b9\u5dee","title":"\u6837\u672c\u65b9\u5dee","text":"\\[ S^2=\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2 \\]

    \u6837\u672c\u65b9\u5dee\u53cd\u6620\u4e86\u603b\u4f53\u7684\u65b9\u5dee\uff0c\u5e38\u4f5c\u4e3a\u603b\u4f53\u65b9\u5dee \\(\\sigma^2\\) \u7684\u65e0\u504f\u4f30\u8ba1\u3002

    \u6837\u672c\u65b9\u5dee\u7684\u6027\u8d28\uff1a

    \u6b64\u5916\uff0c\\(S=\\sqrt{S^2}=\\sqrt{\\frac{1}{n-1}\\sum_{i=1}^{n}(X_i-\\overline{X})^2}\\) \u79f0\u4e3a\u6837\u672c\u6807\u51c6\u5dee\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6837\u672c-k-\u9636\u77e9","title":"\u6837\u672c k \u9636\u77e9","text":"

    \u6837\u672c \\(k\\) \u9636\uff08\u539f\u70b9\uff09\u77e9\uff0c\u5e38\u4f5c\u4e3a\u603b\u4f53 \\(j=k\\) \u9636\u539f\u70b9\u77e9 \\(\\mu_k\\) \u7684\u4f30\u8ba1\uff1a

    \\[ A_k=\\frac{1}{n}\\sum_{i=1}^{n}X_i^k,\\;\\;k=1,2,... \\]

    \u6837\u672c \\(k\\) \u9636\u4e2d\u5fc3\u8ddd\uff0c\u5e38\u4f5c\u4e3a\u603b\u4f53 \\(j=k\\) \u9636\u4e2d\u5fc3\u77e9 \\(\\nu_k\\) \u7684\u4f30\u8ba1\uff0c\\(B_2\\) \u53ef\u4f5c\u4e3a\u603b\u4f53\u65b9\u5dee \\(\\sigma^2\\) \u7684\u6709\u504f\u4f30\u8ba1\uff1a

    \\[ B_k=\\frac{1}{n}\\sum_{i=1}^{n}(X_i-\\overline{X})^k,\\;\\;k=2,3,... \\]

    \u6837\u672c \\(k\\) \u9636\u77e9\u7684\u6027\u8d28\uff1a

    \u6837\u672c\u4e0e\u603b\u4f53\u7684\u5404\u9636\u77e9\u5bf9\u6bd4\u8868\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u4e09\u5927\u62bd\u6837\u5206\u5e03","title":"\u4e09\u5927\u62bd\u6837\u5206\u5e03","text":"

    \u7edf\u8ba1\u91cf\u7684\u5206\u5e03\u79f0\u4e3a\u62bd\u6837\u5206\u5e03(Sampling Distribution)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u00b2-\u5206\u5e03--\u5361\u65b9\u5206\u5e03","title":"\u03c7\u00b2 \u5206\u5e03 / \u5361\u65b9\u5206\u5e03","text":"

    \u8bbe \\(X_1,X_2,...,X_n\\) \u4e3a\u72ec\u7acb\u540c\u5206\u5e03\uff0c\u670d\u4ece \\(N(0,1)\\)\u3002\u5219\u79f0 \\(\\chi_{n}^{2}=\\sum_{i=1}^{n}X_i^2\\) \u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\(n\\) \u7684 \\(\\chi^2\\) \u5206\u5e03\uff0c\u8bb0 \\(\\chi_{n}^{2}\\sim \\chi^2(n)\\)\u3002

    \\(\\chi^2\\) \u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\uff08\u4e0d\u8981\u6c42\uff09\uff1a

    \\[ f_{\\chi^2}(x)= \\left\\{ \\begin{aligned} &\\frac{1}{2^\\frac{n}{2}\\Gamma(\\frac{n}{2})}x^{\\frac{n}{2}-1}e^{-\\frac{x}{2}},&x>0, \\\\ &0,&\\text{else}, \\end{aligned} \\right. \\]

    \\(\\chi^2\\) \u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#t-\u5206\u5e03--\u5b66\u751f\u6c0f\u5206\u5e03","title":"t \u5206\u5e03 / \u5b66\u751f\u6c0f\u5206\u5e03","text":"

    \u8bbe \\(X\\sim N(0,1)\\)\uff0c\\(Y\\sim \\chi^2(n)\\)\uff0c\u4e14 \\(X,Y\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf \\(T=\\frac{X}{\\sqrt{Y/n}}\\) \u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\(n\\) \u7684 \\(t\\) \u5206\u5e03\uff0c\u8bb0\u505a \\(T\\sim t(n)\\)\u3002

    \\(t\\) \u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\uff08\u4e0d\u8981\u6c42\uff09\uff1a

    \\[ f_t(x)=\\frac{\\Gamma[(n+1)/2]}{\\sqrt{\\pi n}\\Gamma(\\frac{n}{2})}(1+\\frac{x^2}{n})^{-\\frac{n+1}{2}},\\;\\;-\\infty<x<+\\infty \\]

    \u5176\u4e2d \\(\\Gamma(\\alpha)=\\int_0^{+\\infty}t^{\\alpha-1}e^{-t}\\mathrm{d}t\\)\uff0c\\(\\Gamma(\\alpha+1)=\\alpha\\Gamma(\\alpha)=\\alpha!(if\\;\\alpha\\in\\Z)\\)\uff0c\\(\\Gamma(0.5)=\\sqrt{\\pi}\\)\u3002

    \\(t\\) \u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#f-\u5206\u5e03","title":"F \u5206\u5e03","text":"

    \u8bbe \\(U\\sim\\chi^2(n_1)\\)\uff0c\\(V\\sim \\chi^2(n_2)\\)\uff0c\u4e14 \\(U,V\\) \u76f8\u4e92\u72ec\u7acb\uff0c\u5219\u79f0\u968f\u673a\u53d8\u91cf \\(F=\\frac{U/n_1}{V/n_2}\\) \u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\((n_1,n_2)\\) \u7684 \\(F\\) \u5206\u5e03\uff0c\u8bb0 \\(F\\sim F(n_1,n_2)\\)\u3002

    \\(F\\) \u5206\u5e03\u7684\u5bc6\u5ea6\u51fd\u6570\uff08\u4e0d\u8981\u6c42\uff09\uff1a

    \\[ f_F(x)=\\frac{ \\Gamma(\\frac{n_1+n_2}{2})(\\frac{n_1}{n_2})^{n_1/2}x^{(n_1/2)-1} }{ \\Gamma(\\frac{n_1}{2})\\Gamma(\\frac{n_2}{2})[1+(n_1x/2)]^{(n_1+n_2)/2} },\\;\\;x>0 \\]

    \\(F\\) \u5206\u5e03\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap06/#\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u62bd\u6837\u5206\u5e03","title":"\u6b63\u6001\u603b\u4f53\u4e0b\u7684\u62bd\u6837\u5206\u5e03","text":"

    \u8bbe \\(X_1,X_2,...,X_n\\) \u662f\u6765\u81ea\u6b63\u6001\u603b\u4f53 \\(N(\\mu,\\sigma^2)\\) \u7684\u6837\u672c\uff0c\\(\\overline{X}\\) \u662f\u6837\u672c\u5747\u503c\uff0c\\(S^2\\) \u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a

    1. \\(\\overline{X}\\sim N(\\mu,\\frac{\\sigma^2}{n})\\)\uff1b
    2. \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff1b
    3. \\(\\overline{X}\\) \u4e0e \\(S^2\\) \u76f8\u4e92\u72ec\u7acb\uff1b
    4. \\(\\frac{\\overline{X} - \\mu}{S/\\sqrt{n}}\\sim t(n-1)\\)\uff1b
    5. \u8fd9\u91cc\u6ce8\u610f\u533a\u522b\u4e00\u4e0b\uff1a\\(\\frac{\\overline{X} - \\mu}{\\sigma/\\sqrt{n}}\\sim N(0,1)\\)\uff1b

    \u8bbe \\(X_1,X_2,...,X_n\\) \u548c \\(Y_1,Y_2,...,Y_n\\) \u662f\u5206\u522b\u6765\u81ea\u6b63\u6001\u603b\u4f53 \\(N(\\mu_1,\\sigma_1^2)\\) \u548c \\(N(\\mu_2,\\sigma_2^2)\\)\uff0c\u5e76\u4e14\u5b83\u4eec\u76f8\u4e92\u72ec\u7acb\uff0c\\(\\overline{X},\\overline{Y}\\) \u662f\u6837\u672c\u5747\u503c\uff0c\\(S_1^2,S_2^2\\) \u662f\u6837\u672c\u65b9\u5dee\uff0c\u5219\u6709\uff1a

    1. \\(\\frac{S_1^2/\\sigma_1^2}{S_2^2/\\sigma^2_2}\\sim F(n_1-1,n_2-1)\\)\uff1b
    2. \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{\\sigma_{1}^{2}}{n_1}+\\frac{\\sigma_{2}^{2}}{n_2}}} \\sim N(0,1)\\)\uff1b
    3. \u5f53 \\(\\sigma_1^2=\\sigma_2^2=\\sigma^2\\) \u65f6\uff1a \\(\\frac{(\\overline X - \\overline Y) - (\\mu_1-\\mu_2)}{S_\\omega\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}}\\sim t(n_1+n_2-2)\\)\uff0c\u5176\u4e2d \\(S^2_\\omega=\\frac{(n_1-1)S_1^2+(n_2-1)S^2_2}{n_1+n_2-2}\\)\uff1b
    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/","title":"[7.x] \u53c2\u6570\u4f30\u8ba1","text":"

    \u7ea6 2182 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 11 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u70b9\u4f30\u8ba1","title":"\u70b9\u4f30\u8ba1","text":"

    \u8bbe\u603b\u4f53 \\(X\\) \u7684\u5206\u5e03\u51fd\u6570\u4e3a \\(F(x;\\theta)\\)\uff0c\\(\\theta=(\\theta_{1},\\theta_{2},...,\\theta_{k})\\) \u662f\u672a\u77e5\u7684\u5f85\u4f30\u53c2\u6570\uff0c\\(X_1,X_2,...,X_n\\) \u662f \\(X\\) \u7684\u4e00\u4e2a\u6837\u672c\u3002\u70b9\u4f30\u8ba1\u5c31\u662f\u8981\u5bf9\u6bcf\u4e00\u4e2a\u672a\u77e5\u53c2\u6570 \\(\\theta_{i}\\) \u6784\u9020\u4e00\u4e2a\u9002\u5f53\u7684\u7edf\u8ba1\u91cf \\(\\hat{\\theta_{i}}=\\theta_{i}(X_1,X_2,...,X_n)\\)\uff0c\u7528\u4f5c\u5bf9\u672a\u77e5\u53c2\u6570 \\(\\theta_{i}\\) \u7684\u4f30\u8ba1\uff0c\u79f0\u4e3a \\(\\theta_{i}\\) \u7684\u4f30\u8ba1\u91cf\u3002

    \u82e5\u5df2\u77e5\u6837\u672c\u7684\u89c2\u5bdf\u503c\u4e3a \\(x_1,x_2,...,x_n\\)\uff0c\u5219\u79f0 \\(\\hat{\\theta_{i}}=\\theta_{i}(X_1,X_2,...,X_n)\\) \u4e3a \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u503c\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u77e9\u6cd5","title":"\u77e9\u6cd5","text":"

    \u601d\u60f3\uff1a\u7528\u6837\u672c\u77e9\u53bb\u4f30\u8ba1\u76f8\u5e94\u7684\u603b\u4f53\u77e9\uff0c\u6362\u8a00\u4e4b\uff0c\u7528\u539f\u70b9\u77e9 \\(A_k\\) \u53bb\u4f30\u8ba1 \\(\\mu_{k}\\)\uff0c\u7528\u4e2d\u5fc3\u8ddd \\(B_k\\) \u53bb\u4f30\u8ba1 \\(\\nu_{k}\\)\u3002

    \u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff08\u5047\u8bbe\u6709 \\(k\\) \u4e2a\u5f85\u6c42\u672a\u77e5\u53c2\u6570\uff09\uff1a

    1. \u5217\u51fa\u603b\u4f53\u7684\u524d \\(k\\) \u9636\u77e9 \\(\\mu_{i}=E(X^i)=h_i(\\theta_{1},\\theta_{2},...,\\theta_{k})\\;\\;,\\;\\;i=1,2,...,k\\)\uff1b
    2. \u4ece\u65b9\u7a0b\u7ec4\u4e2d\u89e3\u51fa\u8fd9 \\(k\\) \u4e2a\u53c2\u6570 \\(\\theta_{i}=g_i(\\mu_{1},\\mu_{2},...,\\mu_{k})\\;\\;,\\;\\;i=1,2,...,k\\)\uff1b
    3. \u5c06\u4e0a\u4e00\u6b65\u89e3\u51fa\u7684\u53c2\u6570\u7684\u8868\u8fbe\u5f0f\u4e2d\u51fa\u73b0\u7684\u603b\u4f53\u77e9\u7528\u76f8\u5e94\u7684\u6837\u672c\u77e9\u66ff\u6362 \\(\\hat{\\theta_{i}}=g_i(A_{1},A_{2},...,A_{k})\\;\\;,\\;\\;i=1,2,...,k\\)\uff1b

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u6781\u5927\u4f3c\u7136\u6cd5","title":"\u6781\u5927\u4f3c\u7136\u6cd5","text":"

    \u601d\u60f3\uff1a\u7528\u201c\u6700\u50cf\u201d \\(\\theta\\) \u771f\u503c\u7684\u503c\u53bb\u4f30\u8ba1 \\(\\theta\\)\uff0c\u6362\u8a00\u4e4b\uff0c\u5728\u53c2\u6570\u7a7a\u95f4\u4e2d\u627e\u4e00\u4e2a \\(\\theta\\)\uff0c\u4f7f\u5f97 \\(L(\\theta)\\) \u8fbe\u5230\u6700\u5927\u3002

    \u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff08\u82e5\u5f85\u4f30\u53c2\u6570\u4e0d\u6b62\u4e00\u4e2a\uff0c\u5219\u5bf9\u6bcf\u4e2a\u5f85\u4f30\u53c2\u6570 \\(\\theta_{i}\\) \u5747\u6267\u884c\u5982\u4e0b\u64cd\u4f5c\uff09\uff1a

    1. \u6784\u9020\u4f3c\u7136\u51fd\u6570 \\(L(\\theta)=L(\\theta;x_1,x_2,...,x_n)=\\prod_{i=1}^{n}f(x_i;\\theta)\\)\uff1b
    2. \u6c42\u89e3 \\(\\theta\\)\uff0c\u4f7f\u5f97 \\(L(\\theta)\\) \u8fbe\u5230\u6700\u5927\u503c\uff0c\u79f0\u8fd9\u4e2a \\(\\theta\\) \u4e3a\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u91cf\uff0c\u8bb0\u4f5c \\(\\hat{\\theta}\\)\uff1b

    \u6c42\u89e3\u4f3c\u7136\u51fd\u6570\u6700\u5927\u503c\u70b9\u7684\u5e38\u7528\u65b9\u6cd5\uff1a

    \u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u6cd5\u7684\u6027\u8d28\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u4f30\u8ba1\u91cf\u7684\u8bc4\u4ef7\u51c6\u5219","title":"\u4f30\u8ba1\u91cf\u7684\u8bc4\u4ef7\u51c6\u5219","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u65e0\u504f\u6027\u51c6\u5219","title":"\u65e0\u504f\u6027\u51c6\u5219","text":"

    \u82e5\u53c2\u6570 \\(\\theta\\) \u4f30\u8ba1\u91cf \\(\\hat{\\theta}=\\theta(X_1,X_2,...,X_n)\\) \u7684\u6570\u5b66\u671f\u671b\u5b58\u5728\uff0c\u4e14\u6ee1\u8db3 \\(E(\\hat{\\theta})=\\theta\\)\uff0c\u5219\u79f0 \\(\\hat{\\theta}\\) \u662f \\(\\theta\\) \u7684\u4e00\u4e2a\u65e0\u504f\u4f30\u8ba1\u91cf\u6216\u65e0\u504f\u4f30\u8ba1(Unbiased Estimation)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u6709\u6548\u6027\u51c6\u5219","title":"\u6709\u6548\u6027\u51c6\u5219","text":"

    \u8bbe \\(\\theta_1\\) \u548c \\(\\theta_2\\) \u662f\u53c2\u6570 \\(\\theta\\) \u7684\u4e24\u4e2a\u65e0\u504f\u4f30\u8ba1\uff0c\u5982\u679c\u5bf9\u4e8e \\(\\forall \\theta\\in\\Theta\\)\uff0c\\(Var(\\theta_1)\\leq Var(\\theta_2)\\)\uff0c\u4e14\u4e0d\u6052\u53d6\u7b49\uff0c\u5219\u79f0 \\(\\theta_1\\) \u6bd4 \\(\\theta_2\\) \u6709\u6548\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u5747\u65b9\u8bef\u5dee\u51c6\u5219","title":"\u5747\u65b9\u8bef\u5dee\u51c6\u5219","text":"

    \\(E[(\\hat\\theta-\\theta)^2]\\) \u662f\u4f30\u8ba1\u91cf \\(\\hat\\theta\\) \u7684\u5747\u65b9\u8bef\u5dee(Mean Square Error)\uff0c\u8bb0\u4e3a \\(Mse(\\hat\\theta)\\)\u3002

    \u5728\u5747\u65b9\u8bef\u5dee\u51c6\u5219\u4e0b\uff0c\u4f30\u8ba1\u91cf\u7684\u5747\u65b9\u8bef\u5dee\u8d8a\u5c0f\u8d8a\u597d\u3002\u82e5 \\(Mse(\\hat\\theta_1)\\leq Mse(\\hat\\theta_2)\\) \u4e14\u4e0d\u6052\u53d6\u7b49\uff0c\u5219\u79f0 \\(\\hat\\theta_1\\) \u4f18\u4e8e \\(\\hat\\theta_2\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u76f8\u5408\u6027\u51c6\u5219","title":"\u76f8\u5408\u6027\u51c6\u5219","text":"

    \u82e5\u5bf9\u4e8e \\(\\forall \\varepsilon >0\\)\uff0c\u6709 \\(\\lim_{n\\to+\\infty}P\\{|\\hat\\theta_n-\\theta|<\\varepsilon\\}=1\\)\uff0c\u5373 \\(\\hat\\theta _n \\xrightarrow{P}\\theta\\)\uff0c\u5219\u79f0 \\(\\hat\\theta_n\\) \u662f \\(\\theta\\) \u7684\u76f8\u5408\u4f30\u8ba1\u91cf(Consistent Estimation)\u6216\u4e00\u81f4\u4f30\u8ba1\u91cf\u3002

    \u6709\u5982\u4e0b\u5b9a\u7406\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u533a\u95f4\u4f30\u8ba1","title":"\u533a\u95f4\u4f30\u8ba1","text":"

    \u70b9\u4f30\u8ba1\u662f\u7531\u6837\u672c\u6c42\u51fa\u672a\u77e5\u53c2\u6570 \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u503c \\(\\hat{\\theta}\\)\uff0c\u800c\u533a\u95f4\u4f30\u8ba1\u5219\u8981\u7531\u6837\u672c\u7ed9\u51fa\u53c2\u6570 \\(\\theta\\) \u7684\u4e00\u4e2a\u4f30\u8ba1\u8303\u56f4\uff0c\u5e76\u6307\u51fa\u8be5\u533a\u95f4\u5305\u542b \\(\\theta\\) \u7684\u53ef\u9760\u7a0b\u5ea6\u3002

    \u4e0b\u9762\u7ed9\u51fa\u533a\u95f4\u4f30\u8ba1\u7684\u4e00\u4e9b\u57fa\u672c\u6982\u5ff5\uff1a

    \u53cc\u4fa7\u7f6e\u4fe1\u533a\u95f4\u548c\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\u7684\u5173\u7cfb\uff1a

    \u8bbe \\(\\theta_{L}=\\theta_{L}(X_1,X_2,...,X_n)\\)\uff0c\\(\\theta_{U}=\\theta_{U}(X_1,X_2,...,X_n)\\) \u5206\u522b\u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha_{1}\\) \u548c \\(1-\\alpha_{2}\\) \u7684\u5355\u4fa7\u7f6e\u4fe1\u4e0b\u9650\u53ca\u4e0a\u9650\uff0c\u4e14\u5bf9\u4e8e\u4efb\u4f55\u6837\u672c\u90fd\u6ee1\u8db3 \\(\\theta_{L}<\\theta_{U}\\)\uff0c\u5219 \\((\\theta_{L},\\theta_{U})\\) \u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha_{1}-\\alpha_{2}\\) \u7684\u53cc\u4fa7\u7f6e\u4fe1\u533a\u95f4\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u8bc4\u4ef7\u533a\u95f4\u4f30\u8ba1\u7684\u539f\u5219","title":"\u8bc4\u4ef7\u533a\u95f4\u4f30\u8ba1\u7684\u539f\u5219","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u67a2\u8f74\u91cf\u6cd5","title":"\u67a2\u8f74\u91cf\u6cd5","text":"

    \u67a2\u8f74\u91cf\u6cd5\u662f\u5bfb\u6c42\u533a\u95f4\u4f30\u8ba1\u7684\u5e38\u7528\u65b9\u6cd5\u3002

    \u67a2\u8f74\u91cf\u662f\u6837\u672c \\(X=(X_1,X_2,...,X_n)\\) \u548c\u5f85\u4f30\u53c2\u6570 \\(\\theta\\) \u7684\u51fd\u6570\uff0c\u5373 \\(G=G(X_1,X_2,...,X_n;\\theta)\\)\uff0c\u5e76\u4e14\u8981\u6c42 \\(G\\) \u7684\u5206\u5e03\u5df2\u77e5\u4e14\u4e0d\u4f9d\u8d56\u4e8e\u4efb\u4f55\u672a\u77e5\u53c2\u6570\u3002

    \u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff1a

    1. \u6784\u9020\u67a2\u8f74\u91cf \\(G(X;\\theta)\\)\uff1b
    2. \u5bf9\u4e8e\u7ed9\u5b9a\u7684\u7f6e\u4fe1\u5ea6 \\(1-\\alpha\\)\uff0c\u786e\u5b9a\u4e24\u4e2a\u5e38\u6570 \\(a,b\\)\uff0c\u4f7f\u5f97\uff1a \\(P\\{ a<G(X;\\theta)<b \\}\\geq 1-\\alpha\\)\uff1b
    3. \u82e5\u80fd\u4ece \\(a<G(X;\\theta)<b\\) \u53cd\u89e3\u51fa\u4e0d\u7b49\u5f0f\uff1a \\(\\theta_{L}(X)<\\theta<\\theta_{U}(X)\\)\uff0c \u90a3\u4e48 \\([\\theta_{L},\\theta_{U}]\\) \u5c31\u662f \\(\\theta\\) \u7684\u7f6e\u4fe1\u6c34\u5e73\u4e3a \\(1-\\alpha\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff0c\u4e5f\u79f0\u540c\u7b49\u7f6e\u4fe1\u533a\u95f4\uff1b

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff1a

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","title":"\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","text":""},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u5355\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","title":"\u5355\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","text":"

    \u8bbe \\(X_1,X_2,...,X_n\\) \u6765\u81ea\u603b\u4f53 \\(N(\\mu,\\sigma_{2})\\)\uff0c\\(\\overline{X}\\) \u548c \\(S^2\\) \u5206\u522b\u4e3a\u6837\u672c\u5747\u503c\u548c\u6837\u672c\u65b9\u5dee\uff0c\u7f6e\u4fe1\u5ea6\u4e3a \\(1-\\alpha\\)\uff1a

    1.\u00a0\\(\\sigma^2\\) \u5df2\u77e5\u65f6 \\(\\mu\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{\\overline X-\\mu}{\\sigma/\\sqrt{n}}\\sim N(0,1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X-\\frac{\\sigma}{\\sqrt{n}}z_{\\alpha/2},\\overline X + \\frac{\\sigma}{\\sqrt{n}}z_{\\alpha/2}\\right)\\)\u3002

    \u82e5\u53ea\u8003\u8651\u5355\u4fa7\u7f6e\u4fe1\u9650\uff0c\u4ee5\u5355\u4fa7\u7f6e\u4fe1\u4e0b\u9650\u4e3a\u4f8b\uff0c\u5355\u4fa7\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X-\\frac{\\sigma}{\\sqrt{n}}z_{\\alpha},+\\infty\\right)\\)\u3002

    2.\u00a0\\(\\sigma^2\\) \u672a\u77e5\u65f6 \\(\\mu\\) \u7684\u7f6e\u4fe1\u533a\u95f4:

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{\\overline X-\\mu}{S/\\sqrt{n}}\\sim t(n-1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\frac{S}{\\sqrt{n}}t_{\\alpha/2}(n-1),\\overline X + \\frac{S}{\\sqrt{n}}t_{\\alpha/2}(n-1)\\right)\\)\u3002

    3.\u00a0\\(\\sigma^2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff08\u5f53\u4f5c \\(\\mu\\) \u672a\u77e5\uff09\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{(n-1)S^2}{\\sigma^2}\\sim \\chi^2(n-1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\frac{(n-1)S^2}{\\chi^2_{\\alpha/2}(n-1)},\\frac{(n-1)S^2}{\\chi^2_{1-\\alpha/2}(n-1)}\\right)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","title":"\u4e24\u4e2a\u6b63\u6001\u603b\u4f53\u7684\u60c5\u5f62","text":"

    \u8bbe \\(X_1,X_2,...,X_{n_1}\\) \u6765\u81ea \\(N(\\mu_{1},\\sigma_{1}^{2})\\)\uff0c\\(Y_1,Y_2,...,Y_{n_2}\\) \u6765\u81ea \\(N(\\mu_{2},\\sigma_{2}^{2})\\)\uff0c\u8fd9\u4e24\u4e2a\u6837\u672c\u76f8\u4e92\u72ec\u7acb\uff0c\\(\\overline{X}=\\frac{1}{n_1}\\sum_{i=1}^{n_1}X_i\\)\uff0c\\(\\overline{Y}=\\frac{1}{n_2}\\sum_{i=1}^{n_2}Y_i\\)\uff0c\\(S_1^2\\) \u548c \\(S_2^2\\) \u5206\u522b\u4e3a\u5b83\u4eec\u7684\u6837\u672c\u5747\u503c\u548c\u6837\u672c\u65b9\u5dee\uff0c\u7f6e\u4fe1\u5ea6\u4e3a \\(1-\\alpha\\)\uff1a

    1.\u00a0\\(\\sigma_1^2,\\sigma_2^2\\) \u5df2\u77e5\u65f6 \\(\\mu_1-\\mu_2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{\\sigma_{1}^{2}}{n_1}+\\frac{\\sigma_{2}^{2}}{n_2}}} \\sim N(0,1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm z_{\\alpha/2}\\sqrt{\\frac{\\sigma_1^2}{n_1}+\\frac{\\sigma_2^2}{n_2}}\\right)\\)\u3002

    2.\u00a0\\(\\sigma_1^2=\\sigma_2^2=\\sigma^2\\) \u672a\u77e5\u65f6 \\(\\mu_1-\\mu_2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline X - \\overline Y) - (\\mu_1-\\mu_2)}{S_\\omega\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}}\\sim t(n_1+n_2-2)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm t_{\\alpha/2}(n_1+n_2-2)S_w\\sqrt{\\frac{1}{n_1}+\\frac{1}{n_2}}\\right)\\)\u3002

    3.\u00a0\\(\\sigma_1^2\\not =\\sigma_2^2\\) \u4e14\u672a\u77e5\u65f6 \\(\\mu_1-\\mu_2\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff1a

    \u5f53\u6837\u672c\u5bb9\u91cf \\(n_1\\) \u548c \\(n_2\\) \u90fd\u5145\u5206\u5927\u65f6\uff08\u4e00\u822c\u8981\u5927\u4e8e \\(50\\)\uff09\uff0c\u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{S_{1}^{2}}{n_1}+\\frac{S_{2}^{2}}{n_2}}} \\sim N(0,1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm z_{\\alpha/2}\\sqrt{\\frac{S_1^2}{n_1}+\\frac{S_2^2}{n_2}}\\right)\\)\u3002

    \u5bf9\u4e8e\u6709\u9650\u5c0f\u6837\u672c\uff0c\u4ecd\u53d6\u67a2\u8f74\u91cf \\(\\frac{(\\overline{X}-\\overline{Y})-(\\mu_{1}-\\mu_{2})}{\\sqrt{\\frac{S_{1}^{2}}{n_1}+\\frac{S_{2}^{2}}{n_2}}}\\)\uff0c\u53ef\u4ee5\u8bc1\u660e\u5176\u8fd1\u4f3c\u670d\u4ece\u81ea\u7531\u5ea6\u4e3a \\(k\\) \u7684 \\(t\\) \u5206\u5e03\uff0c\u5176\u4e2d \\(k=\\frac{(\\frac{S_1^2}{n_1}+\\frac{S_2^2}{n_2})^2}{\\frac{(S_1^2)^2}{n_1^2(n_1-1)}+\\frac{(S_2^2)^2}{n_2^2(n_2-1)}}\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\overline X - \\overline Y\\pm t_{\\alpha/2}(k)\\sqrt{\\frac{S_1^2}{n_1}+\\frac{S_2^2}{n_2}}\\right)\\)\u3002

    \u5b9e\u9645\u4f7f\u7528\u4e2d\uff0c\u4e5f\u5e38\u7528 \\(min(n_1-1,n_2-1)\\) \u8fd1\u4f3c\u4ee3\u66ff\u4e0a\u8ff0\u81ea\u7531\u5ea6 \\(k\\)\u3002

    4.\u00a0\\(\\frac{\\sigma_1^2}{\\sigma_2^2}\\) \u7684\u7f6e\u4fe1\u533a\u95f4\uff08\u5f53\u4f5c \\(\\mu_1,\\mu_2\\) \u672a\u77e5\uff09\uff1a

    \u53d6\u67a2\u8f74\u91cf \\(\\frac{S_1^2/S_2^2}{\\sigma_1^2/\\sigma_2^2}\\sim F(n_1-1,n_2-1)\\)\uff0c\u7f6e\u4fe1\u533a\u95f4\u4e3a \\(\\left(\\frac{S_1^2/S_2^2}{F_{\\alpha/2}(n_1-1,n_2-1)},\\frac{S_1^2/S_2^2}{F_{1-\\alpha/2}(n_1-1,n_2-1)}\\right)\\)\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap07/#\u975e\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","title":"\u975e\u6b63\u6001\u603b\u4f53\u53c2\u6570\u7684\u533a\u95f4\u4f30\u8ba1","text":"

    \u901a\u5e38\u628a\u8fd9\u4e2a\u975e\u6b63\u6001\u5206\u5e03\u6839\u636e\u4e2d\u5fc3\u6781\u9650\u5b9a\u7406\u8fd1\u4f3c\u6210\u4e00\u4e2a\u6b63\u6001\u5206\u5e03\uff0c\u4ece\u800c\u5229\u7528\u4e0a\u6587\u7684\u65b9\u6cd5\u6784\u9020\u67a2\u8f74\u91cf\uff0c\u5e76\u6c42\u89e3\u7f6e\u4fe1\u533a\u95f4\u3002

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap08/","title":"[8.x] \u5047\u8bbe\u68c0\u9a8c","text":"

    \u7ea6 133 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    "},{"location":"cour_note/D1CX_ProbabilityAndStatistics/Chap08/#\u5904\u7406\u5047\u8bbe\u68c0\u9a8c\u95ee\u9898\u7684\u57fa\u672c\u6b65\u9aa4","title":"\u5904\u7406\u5047\u8bbe\u68c0\u9a8c\u95ee\u9898\u7684\u57fa\u672c\u6b65\u9aa4","text":"
    1. \u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b
    2. \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b
    3. \u9009\u62e9\u663e\u8457\u6027\u6c34\u5e73\uff0c\u6c42\u62d2\u7edd\u57df\u4e2d\u7684\u4e34\u754c\u503c\uff08\u7ed9\u51fa\u62d2\u7edd\u57df\uff09\uff1b
    4. \u6839\u636e\u5b9e\u9645\u6837\u672c\u4f5c\u51fa\u5224\u65ad\uff1b

    \u6216\u8005

    1. \u63d0\u51fa\u539f\u5047\u8bbe\u548c\u5907\u62e9\u5047\u8bbe\uff1b
    2. \u9009\u62e9\u68c0\u9a8c\u540c\u8ba1\u91cf\uff0c\u7ed9\u51fa\u62d2\u7edd\u57df\u5f62\u5f0f\uff1b
    3. \u8ba1\u7b97\u68c0\u9a8c\u7edf\u8ba1\u91cf\u7684\u89c2\u5bdf\u503c\u548c\\(P\\_\\)\u503c\uff1b
    4. \u6839\u636e\u7ed9\u5b9a\u7684\u663e\u8457\u6c34\u5e73\\(\\alpha\\)\u4f5c\u51fa\u5224\u65ad\uff1b

    "},{"location":"cour_note/D1QD_CXiaoCheng/","title":"\ud83d\udd2e C\u5c0f\u7a0b \u7410\u788e\u77e5\u8bc6\u70b9\u6574\u7406","text":"

    \u7ea6 4827 \u4e2a\u5b57 53 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 25 \u5206\u949f

    \u7528\u6765\u6574\u7406C\u5c0f\u7a0b\u7684\u4e00\u4e9b\u7ec6\u788e\u77e5\u8bc6\u70b9\u3002 \u6392\u7248\u6ca1\u6709\u903b\u8f91\uff0c\u5185\u5bb9\u4e5f\u4e0d\u5b8c\u6574\u3002 \u8be5\u6587\u6863\u9488\u5bf9\u6211\u4e2a\u4eba\u3002 \u6709\u4e00\u4e9b\u4e0d\u5728\u8003\u8bd5\u8303\u56f4\u5185\u7684\u4e1c\u897f\uff0c\u6211\u89c9\u5f97\u6709\u610f\u601d\u4e5f\u4e22\u4e0a\u53bb\u4e86\u3002

    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u60f3\u4e0d\u51fa\u6807\u9898\u7684\u90fd\u653e\u8fd9","title":"\u60f3\u4e0d\u51fa\u6807\u9898\u7684\u90fd\u653e\u8fd9","text":" \u9898\u9762\u7b54\u6848
    #include <stdio.h>\n\ndouble myFunction(int x){\nreturn x;\n}\n\nint main(){\nprintf(\"%lf\",myFunction(3.14));\n}\n

    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u6570\u636e\u7c7b\u578b\u4e0e\u5b57\u8282\u5206\u914d","title":"\u6570\u636e\u7c7b\u578b\u4e0e\u5b57\u8282\u5206\u914d","text":"\u6570\u636e\u7c7b\u578b \u5b57\u8282\u6570 \u8bf4\u660e char 1 int 4 short 2 long 4 long long 8 unsigned 8 float 4 \u6709\u6548\u4f4d\u6570\u4e00\u822c\u57287~8\u4f4d double 8 \u6709\u6548\u4f4d\u7f6e\u4e00\u822c\u572815~16\u4f4d \u6240\u6709\u6307\u9488(64x/32x) 8/4 struct\u3001\u6570\u7ec4 - \u5185\u5b58\u4e3a\u6240\u6709\u6210\u5458\u53d8\u91cf\u7684\u5185\u5b58\u548c\uff08\u4f46\u662f\u9700\u8981\u8003\u8651\u5bf9\u9f50\uff09 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u7f16\u8bd1\u7f16\u8bd1\u9884\u5904\u7406","title":"\u7f16\u8bd1\u3001\u7f16\u8bd1\u9884\u5904\u7406","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u8f93\u5165\u8f93\u51fa\u4e2d\u7684\u683c\u5f0f\u63a7\u5236\u7b26","title":"\u8f93\u5165\u8f93\u51fa\u4e2d\u7684\u683c\u5f0f\u63a7\u5236\u7b26","text":"\u63a7\u5236\u7b26 \u8bf4\u660e %d \u5341\u8fdb\u5236\u6574\u578b %ld \u5341\u8fdb\u5236\u957f\u6574\u578b %md \uff08\\(m \\in \\text{R}\\)\uff0c\u5982 %2d \uff09 m \u4e3a\u6307\u5b9a\u7684\u8f93\u51fa\u5b57\u6bb5\u7684\u5bbd\u5ea6\u3002\u5982\u679c\u6570\u636e\u7684\u4f4d\u6570\u5c0f\u4e8e m\uff0c\u5219\u5de6\u7aef\u8865\u4ee5\u7a7a\u683c\uff0c\u82e5\u5927\u4e8e m\uff0c\u5219\u6309\u5b9e\u9645\u4f4d\u6570\u8f93\u51fa\u3002\u5982\u679c\u52a0-\u8868\u793a\u5de6\u5bf9\u9f50\uff1b\u5982\u679c\u52a0+\u6216\u4e0d\u52a0\u8868\u793a\u53f3\u5bf9\u9f50\u3002 \u5982%-2d\uff0c%+3d %u \u5341\u8fdb\u5236\u65e0\u7b26\u53f7\u6574\u578b %lu \u5341\u8fdb\u5236\u65e0\u7b26\u53f7\u957f\u6574\u578b %c \u5b57\u7b26 %f %e \u5bf9\u4e8e scanf \u4ec5\u8868\u793a\u5355\u7cbe\u5ea6\u6d6e\u70b9\u6570\u5bf9\u4e8e printf \u4e0e %lf \u7b49\u4ef7\u3002\u4e0d\u6307\u5b9a\u5b57\u6bb5\u5bbd\u5ea6\uff0c\u7531\u7cfb\u7edf\u81ea\u52a8\u6307\u5b9a\uff0c\u6574\u6570\u90e8\u5206\u5168\u90e8\u8f93\u51fa\uff0c\u5c0f\u6570\u90e8\u5206\u8f93\u51fa 6 \u4f4d\uff0c\u8d85\u8fc7 6 \u4f4d\u7684\u56db\u820d\u4e94\u5165 %.mf\uff08\uff0c\u5982%.6f\uff09 \u8f93\u51fa\u5b9e\u6570\u65f6\u5c0f\u6570\u70b9\u540e\u4fdd\u7559 m \u4f4d %lf %le \u5bf9\u4e8e scanf \u4ec5\u8868\u793a\u53cc\u7cbe\u5ea6\u6d6e\u70b9\u6570\u5bf9\u4e8e printf \u4e0e %f \u7b49\u4ef7\u3002\u4e0d\u6307\u5b9a\u5b57\u6bb5\u5bbd\u5ea6\uff0c\u7531\u7cfb\u7edf\u81ea\u52a8\u6307\u5b9a\uff0c\u6574\u6570\u90e8\u5206\u5168\u90e8\u8f93\u51fa\uff0c\u5c0f\u6570\u90e8\u5206\u8f93\u51fa 6 \u4f4d\uff0c\u8d85\u8fc7 6 \u4f4d\u7684\u56db\u820d\u4e94\u5165 %.mlf\uff08\uff0c\u5982 %.6lf\uff09 \u8f93\u51fa\u5b9e\u6570\u65f6\u5c0f\u6570\u70b9\u540e\u4fdd\u7559 m \u4f4d %p \u5730\u5740 %s \u5b57\u7b26\u4e32 %o \u516b\u8fdb\u5236\u6574\u578b %lo \u516b\u8fdb\u5236\u957f\u6574\u578b %x %X %#x %#X \u5341\u516d\u8fdb\u5236\u6574\u578b %lx %lX \u5341\u516d\u8fdb\u5236\u957f\u6574\u578b"},{"location":"cour_note/D1QD_CXiaoCheng/#\u5e38\u89c1\u8f6c\u4e49\u5b57\u7b26","title":"\u5e38\u89c1\u8f6c\u4e49\u5b57\u7b26","text":"\u8f6c\u4e49\u5b57\u7b26 \u610f\u4e49 ASCII\uff08Dec\uff09 ASCII\uff08Hex\uff09 \\b \u9000\u683c(BS) \uff0c\u5c06\u5f53\u524d\u4f4d\u7f6e\u79fb\u5230\u524d\u4e00\u5217 008 0x08 \\n \u6362\u884c(LF) \uff0c\u5c06\u5f53\u524d\u4f4d\u7f6e\u79fb\u5230\u4e0b\u4e00\u884c\u5f00\u5934 010 0x10 \\r \u56de\u8f66(CR) \uff0c\u5c06\u5f53\u524d\u4f4d\u7f6e\u79fb\u5230\u672c\u884c\u5f00\u5934 013 0x13 \\t \u6c34\u5e73\u5236\u8868(HT) 009 0x09 \\' \u5355\u5f15\u53f7 039 0x27 \\\" \u53cc\u5f15\u53f7 034 0x22 \\\\ \u53cd\u659c\u6760 092 0x5C \\ddd 1~3\u4f4d\u7684\u516b\u8fdb\u5236\u6574\u6570\u6240\u4ee3\u8868\u7684ASCII\u7b26\u6bd4\u5982 \\041 \u6216\u8005 \\41 \u8868\u793a ! - - \\xhh 1~2\u4f4d\u7684\u5341\u516d\u8fdb\u5236\u6574\u6570\u6240\u8868\u793a\u7684ASCII\u7b26\u6bd4\u5982 \\x21 \u8868\u793a ! - -"},{"location":"cour_note/D1QD_CXiaoCheng/#\u5e38\u7528\u6570\u5b66\u51fd\u6570","title":"\u5e38\u7528\u6570\u5b66\u51fd\u6570","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u5faa\u73af\u8bed\u53e5","title":"\u5faa\u73af\u8bed\u53e5","text":"

    \u5982\u4e0b\u7684\u5faa\u73af\u8bed\u53e5\uff1a

    for(\u8868\u8fbe\u5f0f1;\u8868\u8fbe\u5f0f2;\u8868\u8fbe\u5f0f3){\n\u8bed\u53e5\n}\n
    \u5176\u6d41\u7a0b\u5e94\u5f53\u5982\u4e0b\uff1a

    graph LR\n    A[\u8868\u8fbe\u5f0f1] --> B{\u8868\u8fbe\u5f0f2};\n    B -->|Yes| C[\u8bed\u53e5];\n    C --> D[\u8868\u8fbe\u5f0f3];\n    D --> B;\n    B ---->|No| E[\u7ed3\u675f\u5faa\u73af];
    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u5206\u652f\u8bed\u53e5","title":"\u5206\u652f\u8bed\u53e5","text":" \u9898\u9762\u7b54\u6848
    if(x < 60){\n//\u8bed\u53e5\n}\n
    \u9898\u9762\u7b54\u6848
    int x = 0 , y = 0;\nif((++x) || (++y)){\n//\u8bed\u53e5\n}\n
    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u4f5c\u7528\u57df","title":"\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f&\u4f5c\u7528\u57df","text":"\u9759\u6001\u53d8\u91cf \u81ea\u52a8\u53d8\u91cf \u8fd9\u4e00\u7ec4\u5173\u7cfb\u7684\u7740\u91cd\u70b9\u5728\u5185\u5b58\u5b58\u50a8\u4f4d\u7f6e\u548c\u751f\u547d\u5468\u671f\u7684\u95ee\u9898 \u5168\u5c40\u53d8\u91cf \u5c40\u90e8\u53d8\u91cf \u8fd9\u4e00\u7ec4\u5173\u7cfb\u7684\u7740\u91cd\u70b9\u5728\u4f5c\u7528\u57df

    -\u5c40\u90e8\u53d8\u91cf\u7684\u6709\u6548\u4f7f\u7528\u8303\u56f4\u6700\u5927\u7a0b\u5ea6\u4fdd\u8bc1\u4e86\u5404\u90e8\u5206\u4e4b\u95f4\u7684\u72ec\u7acb\u6027\uff0c\u964d\u4f4e\u4e86\u5404\u4e2a\u6a21\u5757\u4e4b\u95f4\u7684\u8026\u5408\u5ea6 -\u5168\u5c40\u53d8\u91cf\u7684\u4f5c\u7528\u57df\u662f\u4ece\u5b9a\u4e49\u5f00\u59cb\u5230\u6587\u4ef6\u7ed3\u675f

    \u7cfb\u7edf\u5b58\u50a8\u533a \u7528\u6237\u5b58\u50a8\u533a \u7a0b\u5e8f\u533a\uff08\u4ee3\u7801\u5185\u5bb9\uff09 \u6570\u636e\u533a \u9759\u6001\u5b58\u50a8\u533a \u5168\u5c40\u53d8\u91cf \u9759\u6001\u5c40\u90e8\u53d8\u91cf \u52a8\u6001\u5b58\u50a8\u533a \u5404\u4e2a\u6a21\u5757\u4e0b\u7684\u52a8\u6001\u5c40\u90e8\u53d8\u91cf \u5404\u4e2a\u6a21\u5757\u4e0b\u7684\u52a8\u6001\u5c40\u90e8\u53d8\u91cf ... "},{"location":"cour_note/D1QD_CXiaoCheng/#\u8865\u7801","title":"\u8865\u7801","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u8fd0\u7b97\u7b26\u4f18\u5148\u7ea7\u540c\u7ea7\u9075\u5faa\u7ed3\u5408\u65b9\u5411\u89c4\u5f8b","title":"\u8fd0\u7b97\u7b26\u4f18\u5148\u7ea7(\u540c\u7ea7\u9075\u5faa\u7ed3\u5408\u65b9\u5411\u89c4\u5f8b)","text":"

    \u5982\u6709\u51b2\u7a81\uff0c\u8bf7\u4f18\u5148\u53c2\u8003 \u8fd9\u91cc\u3002

    \u4f18\u5148\u7ea7 \u8fd0\u7b97\u7b26 \u540d\u79f0\u6216\u542b\u4e49 \u4f7f\u7528\u5f62\u5f0f \u7ed3\u5408\u65b9\u5411 1 [] \u6570\u7ec4\u4e0b\u6807 \u6570\u7ec4\u540d[\u5e38\u91cf\u8868\u8fbe\u5f0f] \u5de6\u5230\u53f3 () \u5706\u62ec\u53f7 \uff08\u8868\u8fbe\u5f0f\uff09/\u51fd\u6570\u540d(\u5f62\u53c2\u8868) . \u6210\u5458\u9009\u62e9\uff08\u5bf9\u8c61\uff09 \u5bf9\u8c61.\u6210\u5458\u540d -> \u6210\u5458\u9009\u62e9\uff08\u6307\u9488\uff09 \u5bf9\u8c61\u6307\u9488->\u6210\u5458\u540d ++ \u540e\u7f6e\u81ea\u589e\u8fd0\u7b97\u7b26 \u53d8\u91cf\u540d++ -- \u540e\u7f6e\u81ea\u51cf\u8fd0\u7b97\u7b26 \u53d8\u91cf\u540d-- 2 - \u8d1f\u53f7\u8fd0\u7b97\u7b26 -\u8868\u8fbe\u5f0f \u53f3\u5230\u5de6 (\u7c7b\u578b) \u5f3a\u5236\u7c7b\u578b\u8f6c\u6362 (\u6570\u636e\u7c7b\u578b)\u8868\u8fbe\u5f0f ++ \u524d\u7f6e\u81ea\u589e\u8fd0\u7b97\u7b26 ++\u53d8\u91cf\u540d -- \u524d\u7f6e\u81ea\u51cf\u8fd0\u7b97\u7b26 --\u53d8\u91cf\u540d * \u53d6\u503c\u8fd0\u7b97\u7b26 *\u6307\u9488\u53d8\u91cf & \u53d6\u5730\u5740\u8fd0\u7b97\u7b26 &\u53d8\u91cf\u540d ! \u903b\u8f91\u975e\u8fd0\u7b97\u7b26 !\u8868\u8fbe\u5f0f ~ \u6309\u4f4d\u53d6\u53cd\u8fd0\u7b97\u7b26 ~\u8868\u8fbe\u5f0f sizeof() \u957f\u5ea6\u8fd0\u7b97\u7b26 sizeof(\u8868\u8fbe\u5f0f) 3 / \u9664 \u8868\u8fbe\u5f0f/\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 * \u4e58 \u8868\u8fbe\u5f0f*\u8868\u8fbe\u5f0f % \u4f59\u6570\uff08\u53d6\u6a21\uff09 \u6574\u578b\u8868\u8fbe\u5f0f/\u6574\u578b\u8868\u8fbe\u5f0f 4 + \u52a0 \u8868\u8fbe\u5f0f+\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 - \u51cf \u8868\u8fbe\u5f0f-\u8868\u8fbe\u5f0f 5 << \u5de6\u79fb \u53d8\u91cf<<\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 >> \u53f3\u79fb \u53d8\u91cf>>\u8868\u8fbe\u5f0f 6 > \u5927\u4e8e \u8868\u8fbe\u5f0f>\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 >= \u5927\u4e8e\u7b49\u4e8e \u8868\u8fbe\u5f0f>=\u8868\u8fbe\u5f0f < \u5c0f\u4e8e \u8868\u8fbe\u5f0f<\u8868\u8fbe\u5f0f <= \u5c0f\u4e8e\u7b49\u4e8e \u8868\u8fbe\u5f0f<=\u8868\u8fbe\u5f0f 7 == \u7b49\u4e8e \u8868\u8fbe\u5f0f==\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 != \u4e0d\u7b49\u4e8e \u8868\u8fbe\u5f0f!= \u8868\u8fbe\u5f0f 8 & \u6309\u4f4d\u4e0e \u8868\u8fbe\u5f0f&\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 9 ^ \u6309\u4f4d\u5f02\u6216 \u8868\u8fbe\u5f0f^\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 10 | \u6309\u4f4d\u6216 \u8868\u8fbe\u5f0f|\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 11 && \u903b\u8f91\u4e0e \u8868\u8fbe\u5f0f&&\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 12 || \u903b\u8f91\u6216 \u8868\u8fbe\u5f0f||\u8868\u8fbe\u5f0f \u5de6\u5230\u53f3 13 ?: \u6761\u4ef6\u8fd0\u7b97\u7b26 \u8868\u8fbe\u5f0f1? \u8868\u8fbe\u5f0f2: \u8868\u8fbe\u5f0f3 \u53f3\u5230\u5de6 14 = \u8d4b\u503c\u8fd0\u7b97\u7b26 \u53d8\u91cf=\u8868\u8fbe\u5f0f \u53f3\u5230\u5de6 /= \u9664\u540e\u8d4b\u503c \u53d8\u91cf/=\u8868\u8fbe\u5f0f *= \u4e58\u540e\u8d4b\u503c \u53d8\u91cf*=\u8868\u8fbe\u5f0f %= \u53d6\u6a21\u540e\u8d4b\u503c \u53d8\u91cf%=\u8868\u8fbe\u5f0f += \u52a0\u540e\u8d4b\u503c \u53d8\u91cf+=\u8868\u8fbe\u5f0f -= \u51cf\u540e\u8d4b\u503c \u53d8\u91cf-=\u8868\u8fbe\u5f0f <<= \u5de6\u79fb\u540e\u8d4b\u503c \u53d8\u91cf<<=\u8868\u8fbe\u5f0f >>= \u53f3\u79fb\u540e\u8d4b\u503c \u53d8\u91cf>>=\u8868\u8fbe\u5f0f &= \u6309\u4f4d\u4e0e\u540e\u8d4b\u503c \u53d8\u91cf&=\u8868\u8fbe\u5f0f ^= \u6309\u4f4d\u5f02\u6216\u540e\u8d4b\u503c \u53d8\u91cf^=\u8868\u8fbe\u5f0f |= \u6309\u4f4d\u6216\u540e\u8d4b\u503c \u53d8\u91cf|=\u8868\u8fbe\u5f0f 15 , \u9017\u53f7\u8fd0\u7b97\u7b26 \u8868\u8fbe\u5f0f,\u8868\u8fbe\u5f0f,\u2026 \u5de6\u5230\u53f3"},{"location":"cour_note/D1QD_CXiaoCheng/#\u6307\u9488\u76f8\u5173","title":"\u6307\u9488\u76f8\u5173","text":"

    \u4e22\u4e00\u4e2axxjj\u7684\u6587\u7ae0\u5728\u8fd9\u91cc\u00a0\u00a0\u70b9\u51fb\u8df3\u8f6c

    "},{"location":"cour_note/D1QD_CXiaoCheng/#\u547d\u4ee4\u884c\u53c2\u6570","title":"\u547d\u4ee4\u884c\u53c2\u6570","text":""},{"location":"cour_note/D1QD_CXiaoCheng/#\u6587\u4ef6\u64cd\u4f5c","title":"\u6587\u4ef6\u64cd\u4f5c","text":" \u6587\u672c\u6587\u4ef6 \u4e8c\u8fdb\u5236\u6587\u4ef6 \u4f7f\u7528\u65b9\u5f0f \u542b\u4e49 \u4f7f\u7528\u65b9\u5f0f \u542b\u4e49 \"r\" \u6253\u5f00 & \u53ea\u8bfb \"rb\" \u6253\u5f00 & \u53ea\u8bfb \"w\" \u65b0\u5efa(\u6e05\u7a7a) & \u53ea\u5199 \"wb\" \u65b0\u5efa & \u53ea\u5199 \"a\" \u6253\u5f00 & \u8ffd\u52a0 \"ab\" \u6253\u5f00 & \u8ffd\u52a0 \"r+\" \u6253\u5f00 & \u8bfb\u5199 \"rb+\" \u6253\u5f00 & \u8bfb\u5199 \"w+\" \u65b0\u5efa(\u6e05\u7a7a) & \u8bfb\u5199 \"wb+\" \u65b0\u5efa & \u8bfb\u5199 \"a+\" \u6253\u5f00 & \u8bfb & \u8ffd\u52a0 \"ab+\" \u6253\u5f00 & \u8bfb & \u8ffd\u52a0 \u8bf4\u660e \u4f7f\u7528\"w\"/\"w+\"\u65f6\uff0c\u6587\u4ef6\u5185\u5bb9\u4f1a\u88ab\u8986\u76d6\uff08\u56e0\u4e3a\u6e05\u7a7a\u540e\u518d\u5199\u5165\uff09 \u4f7f\u7528\"a\"/\"a+\"\u65f6\uff0c\u8f93\u5165\u5185\u5bb9\u4f1a\u5199\u5728\u6587\u4ef6\u5185\u5bb9\u540e\u9762 "},{"location":"cour_note/D1QD_CXiaoCheng/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"

    \u8d34\u4e00\u4e9b\u5176\u4ed6\u5b66\u957f\u7684\u6587\u7ae0\uff1a

    "},{"location":"cour_note/D1SJ_Intro2CS/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7cfb\u7edf\u6982\u8bba | Introduction to Computing Systems","text":"

    \u7ea6 12 \u4e2a\u5b57

    "},{"location":"cour_note/D1SJ_StanfordCS231n/","title":"\ud83d\udd2e Deep Learning for Computer Vision | CS231N","text":"

    \u7ea6 3443 \u4e2a\u5b57 17 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f

    \u8bfe\u7a0b\u4ecb\u7ecd

    Course Website: \ud83d\udd17

    Course Video: \ud83d\udd17

    Course Description

    Assignments

    \u53c2\u8003\u8d44\u6599 "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-1-introduction-to-convolutional-neural-networks-for-visual-recognition","title":"Lecture 1: Introduction to Convolutional Neural Networks for Visual Recognition","text":"

    \u5176\u6838\u5fc3\u601d\u60f3\u662f\u5c06\u590d\u6742\u7684\u89c6\u89c9\u4fe1\u606f\u7b80\u5316\u4e3a\u7b80\u5355\u5bf9\u8c61\u7684\u7ec4\u5408\u3002

    \u4eba\u4eec\u610f\u8bc6\u5230\u76f4\u63a5\u8bc6\u522b\u7269\u4f53\u6bd4\u8f83\u56f0\u96be\uff0c\u4e8e\u662f\u60f3\u5230\u4e86 \u5206\u5272\u56fe\u5f62(image segmentation) \u2014\u2014\u5373\u5148\u505a\u5c06\u50cf\u7d20\u5206\u7ec4\uff1a

    \u6709\u7aef\u8054\u60f3 FDS \u7684 Voting Tree

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-2-image-classification-pipeline","title":"Lecture 2: Image Classification Pipeline","text":" "},{"location":"cour_note/D1SJ_StanfordCS231n/#data-driven-approach","title":"Data-Driven Approach","text":"
    1. Collect a dataset of images and labels;
    2. Use Machine Learning to train a classifier;
    3. Evaluate the classifier on new images;
    4. \u5f97\u5230\u7684\u6a21\u578b\u6709\u4e24\u4e2a\u6838\u5fc3 API\uff1a\u4e00\u4e2a\u7528\u4e8e \u8bad\u7ec3(train)\uff0c\u4e00\u4e2a\u7528\u4e8e \u9884\u6d4b(predict)\u3002
    5. \u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e0d\u4ecb\u610f\u8bad\u7ec3\u65f6\u95f4\u957f\uff0c\u4f46\u5e0c\u671b\u9884\u6d4b\u6548\u7387\u9ad8\u3002

    CIFAR-10 & CIFAR-100: \ud83d\udd17

    Distance Metric to compare images

    \u6211\u4eec\u5c06\u5206\u7c7b\u95ee\u9898\u770b\u4f5c\u5728\u201c\u7a7a\u95f4\u201d\u4e2d\u7684\u67d3\u8272\u95ee\u9898\uff0c\u70b9\u8868\u793a\u8bad\u7ec3\u6570\u636e\uff0c\u5176\u989c\u8272\u8868\u793a\u5176\u88ab\u6807\u8bb0\u7684\u5206\u7c7b\uff1b\u800c\u753b\u677f\u4e2d\u5176\u4ed6\u90e8\u5206\u7684\u989c\u8272\u5219\u8868\u793a\u5f53\u70b9\u843d\u5728\u8fd9\u4e2a\u4f4d\u7f6e\u65f6\u5019\u4f1a\u88ab\u5206\u7c7b\u4e3a\u54ea\u4e00\u79cd\u3002

    \u4e2d\u95f4\u201c\u9ec4\u8272\u90e8\u5206\u201d\u8fd9\u79cd\u5b64\u7acb\u7684\u5c0f\u5c9b\u5728\u5b9e\u9645\u5bf9\u6570\u636e\u8fdb\u884c\u9884\u6d4b\u5de5\u4f5c\u65f6\u53ef\u80fd\u4e0d\u662f\u5f88\u597d\u3002

    \u8fd9\u4e9b\u90e8\u5206\u53ef\u80fd\u6709\u566a\u58f0\u6216\u662f\u865a\u5047\u7684\u3002

    L1 (Manhattan) distance: (stupid in most cases)L2 (Euclidean ) distance: (better by comparison)

    K-Nearest Neighbors: \ud83d\udd17

    Interactive Demo: \ud83d\udd17

    Instead of copying label from nearest neighbor, take majority vote from K closest points.

    \u4f8b\u5982\uff0cK=1 \u65f6\u4e2d\u95f4\u7684\u9ec4\u8272\u533a\u57df\u7531\u4e8e\u9644\u8fd1\u90fd\u662f\u7eff\u70b9\uff0c\u6240\u4ee5\u5728 K \u589e\u957f\u7684\u65f6\u5019\u7eff\u8272\u5728\u8ba1\u7b97\u4e2d\u7684\u6743\u91cd\u53d8\u5927\uff0c\u6240\u4ee5\u6700\u540e\u88ab\u6807\u8bb0\u4e3a\u7eff\u8272\u3002s

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#hyperparameters","title":"Hyperparameters","text":"

    Setting Hyperparameters (\u8c03\u53c2)

    \u5373\uff0c\u6211\u4eec\u9700\u8981\u786e\u4fdd\u8db3\u591f\u7684\u8bad\u7ec3\u96c6\uff0c\u5e76\u901a\u8fc7\u9a8c\u8bc1\u96c6\u8fdb\u884c\u8c03\u53c2\uff0c\u5e76\u5728\u4e00\u5207\u90fd\u5b8c\u6210\u4ee5\u540e\u624d\u4f7f\u7528\u6d4b\u8bd5\u96c6\u6765\u9a8c\u8bc1\u6a21\u578b\u7684\u51c6\u786e\u5ea6\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#linear-classification","title":"Linear Classification","text":"

    Parametric Approach

    \\[ f(x,W)=Wx+b \\]

    \u8fd9\u91cc\u7684 10 numbers \u8868\u793a\u7684\u662f CIFAR-10 \u4e2d\u7684 10 \u4e2a\u7c7b\u522b\u5bf9\u5e94\u7684\u5f97\u5206\u3002

    \u5982\u679c\u5c06\u9ad8\u7ef4\u7a7a\u95f4\u7684\u60c5\u51b5\u6620\u5c04\u5230\u5e73\u9762\u7684\u51e0\u4f55\u89d2\u5ea6\u6765\u7406\u89e3\uff0c\u5c31\u597d\u50cf\u5728\u5212\u4e00\u9053\u9053\u76f4\u7ebf\u6765\u8fdb\u884c\u5212\u5206\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-3-loss-functions-and-optimization","title":"Lecture 3: Loss Functions and Optimization","text":" "},{"location":"cour_note/D1SJ_StanfordCS231n/#multi-class-svm-loss","title":"Multi-class SVM Loss","text":"

    \u5982\u4f55\u7406\u89e3\u90a3\u5f20\u56fe\uff1f(hinge loss?)

    Let \\(s = f(x_i,W)\\), then SVM loss is:

    \\[ L_i = \\sum_{j \\not = y_i } \\left\\{ \\begin{align*} &0 &\\text{if } s_{y_i} \\geq s_j + 1\\\\ &s_j-s_{y_i}+1 &\\text{otherwise} \\end{align*} \\right. = \\sum_{j \\not = y_i } \\text{max}(0,s_j-s_{y_i}+1) \\]

    def L_i_Vectorized(x, y, W):\n    scores = W.dot(x)\n    margins = np.maximum(0, scores - scores[y] + 1)\n    margins[y] = 0\n    loss_i = np.sum(margins)\n    return loss_i\n
    \\[ f(x,W) = Wx\\\\ L = \\frac{1}{N}\\sum_{i=1}^{n}\\sum_{j\\not = y_i}\\text{max}(0,f(x;W)_j-f(x_i;W)_{y_i}+1) \\]

    To solve it, we use regularization.

    The regularization term.

    Occam's Razor

    So your standard loss function usually has two terms, a data loss and a regularization loss, and there's a hyperparameter(mentioned already in L2) here, lambda, which trades off between the two.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#regularization","title":"Regularization","text":"

    There are many regularizations used in practice, and the most common one is probably L2 regularization or weight decay.

    In common use:

    The whole idea of regularization is just any thing that you do to your model, that sort of penalizes somehow the complexity of the model, rather than explicitly trying to fit the training data. Each regularization has its own feature, you should choose them depends on the problems.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#softmax-classifier-multinomial-logistic-regression","title":"Softmax Classifier (Multinomial Logistic Regression)","text":"

    eg for Softmax Classifier.

    Compare the two.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#optimization","title":"Optimization","text":"

    ## Vanilla Gradient Descent\n\nwhile True:\n    weights_grad = evaluate_gradient(loss_fun, data, weight)\n    weights += - step_size * weights_grad ## perform parameter update\n
    step_size is a hyperparameter here, it's also called a learning rate sometimes. Stochastic Gradient Descent (SGD) - The basic Gradient Descent will be messy when \\(N\\) is large! - So we need to start with approximate sum using a minibatch of examples. - 32 / 64 / 128 common

    ## Vanilla Gradient Descent\n\nwhile True:\n    data_batch = sample_training_data(data, 256) ## sample 256 examples\n    weights_grad = evaluate_gradient(loss_fun, data_batch, weight)\n    weights += - step_size * weights_grad ## perform parameter update\n
    "},{"location":"cour_note/D1SJ_StanfordCS231n/#aside-image-features","title":"Aside: Image Features","text":""},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-4-introduction-to-neural-networks","title":"Lecture 4: Introduction to Neural Networks","text":""},{"location":"cour_note/D1SJ_StanfordCS231n/#computational-graphs","title":"Computational graphs","text":"

    eg. for the linear classifier.

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#backpropagation","title":"Backpropagation","text":"

    \u901a\u8fc7\u5c06\u7b97\u5f0f\u5199\u6210\u8fd9\u79cd\u201c\u8282\u70b9\u56fe\u201d\u7684\u5f62\u5f0f\uff0c\u53ef\u4ee5\u8fdb\u4e00\u6b65\u8ba9\u6211\u4eec\u770b\u6e05\u8ba1\u7b97\u8fc7\u7a0b\u5e76\u65b9\u4fbf\u6211\u4eec\u8ba1\u7b97\u68af\u5ea6\u3002\u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982 \\(f(x,y,z)=(x+y)z\\)\uff0c\u5c06\u5176\u5199\u6210\u8282\u70b9\u56fe\u5982\u4e0b\uff0c\u5e76\u8ba1\u7b97\u6240\u9700\u8981\u7684\u53c2\u6570\u3002

    \u7136\u540e\u6211\u4eec\u4ece\u56fe\u7684\u672b\u7aef\u5f00\u59cb\u8ba1\u7b97\uff0c\u5f97\u5230\u8fd9\u4e9b\u8282\u70b9\u6570\u636e\uff1a

    \\(\\left\\{ \\begin{aligned} &\\frac{\\partial{f}}{\\partial{f}}=1,\\\\ &\\frac{\\partial{f}}{\\partial{z}}=q=3,\\\\ &\\frac{\\partial{f}}{\\partial{q}}=z=-4,\\\\ &\\frac{\\partial{f}}{\\partial{x}}=\\frac{\\partial{f}}{\\partial{q}}\\frac{\\partial{q}}{\\partial{x}}=-4,\\\\ &\\frac{\\partial{f}}{\\partial{y}}=\\frac{\\partial{f}}{\\partial{q}}\\frac{\\partial{q}}{\\partial{y}}=-4 \\end{aligned} \\right.\\)

    backprop (red lines)

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6211\u4eec\u5728\u8ba1\u7b97\u8fc7\u7a0b\u4e2d\u53ea\u9700\u8981\u5c06\u201c\u76f8\u90bb\u201d\u68af\u5ea6\u4e58\u4ee5\"local gradient\"\u5373\u53ef\u8ba1\u7b97\u51fa\u6240\u9700\u8981\u7684\u65b0\u7684\"local gradient\"\u3002\u800c\u53ea\u9700\u8981\u518d\u6cbf\u7740\u8def\u5f84\u518d\u5c06\u6240\u6709\u7684\"local gradient\"\u7d2f\u4e58\u8d77\u6765\uff0c\u5c31\u80fd\u5f97\u5230\u6bcf\u4e00\u4e2a\u53d8\u91cf\u5173\u4e8e\u8868\u8fbe\u5f0f\u7684\u68af\u5ea6\u3002

    \u7279\u522b\u7684\uff0c\u7531\u4e8e\u8282\u70b9\u662f\u6211\u4eec\u8ba4\u4e3a\u5b9a\u4e49\u7684\uff0c\u800c\u4e14\u8be5\u65b9\u6cd5\u6240\u4f9d\u8d56\u201c\u94fe\u5f0f\u6cd5\u5219\u201d\u4e5f\u5141\u8bb8\u51fd\u6570\u7684\u81ea\u7531\u7ec4\u5408\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4eba\u4e3a\u201c\u5408\u5e76/\u5206\u5272\u201d\u4e00\u4e9b\u8282\u70b9\uff0c\u4f8b\u5982\u5728\u4e0a\u9762\u90a3\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u6700\u540e\u56db\u4e2a\u8282\u70b9\u5408\u5e76\u4e3a\u4e00\u4e2a\"sigmoid function\"(i.e. \\(\\frac{1}{1+e^{-x}}\\))\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#patterns-in-backward-flow","title":"Patterns in backward flow","text":"

    \u53e6\u5916\u4e00\u79cd\u7406\u89e3\u7b97\u7b26\u5728\u8ba1\u7b97\u56fe\u4e2d\u7684\u4f5c\u7528\u7684\u601d\u8def\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0cmax() \u8fd0\u7b97\u5728\u68af\u5ea6\u4f20\u9012\u8fc7\u7a0b\u4e2d\u53ea\u8d77\u5230\u8def\u7531\u5668\u7684\u4f5c\u7528\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c06\u5176\u4f20\u9012\u5230\u8f83\u5927\u7684\u90a3\u4e2a\u53d8\u91cf\u90a3\u4e00\u4fa7\uff0c\u4f46\u4e0d\u6539\u53d8\u68af\u5ea6\u7684\u503c\uff1b\u800c\u5bf9\u4e8e\u8f83\u5c0f\u7684\u90a3\u4e2a\u53d8\u91cf\uff0c\u68af\u5ea6\u4f20\u9012\u88ab\u963b\u65ad\uff0c\u76ee\u6807\u53d8\u91cf\u7684\u68af\u5ea6\u4e3a \\(0\\)\u3002

    \u5c06\u8fd9\u4e2a\u6d41\u7a0b\u8fc1\u79fb\u5230\u795e\u7ecf\u7f51\u7edc\u4e0a\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5c06\u8fd9\u4e9b\u6570\u5b57\u53d8\u4e3a Jacobian matrix \u5373\u53ef\u3002

    \u5728\u5177\u4f53\u5b9e\u73b0\u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u4f1a\u5b9e\u73b0\u4e00\u4e2a forward() \u7528\u4e8e\u8ba1\u7b97\u51fd\u6570\u7684\u8f93\u51fa\uff0c\u4ee5\u53ca\u4e00\u4e2a backward() \u7528\u4e8e\u6309\u7167\u4e0a\u9762\u63d0\u5230\u7684\u65b9\u6cd5\u8ba1\u7b97\u68af\u5ea6\u3002

    Summary

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#neural-networks","title":"Neural Networks","text":"

    \u901a\u8fc7\u51fd\u6570\u53e0\u52a0\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u795e\u7ecf\u7f51\u7edc\u3002

    \u4e0e\u751f\u7269\u795e\u7ecf\u7684\u4e00\u4e2a\u7c7b\u6bd4

    Summary

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#lecture-5-convolutional-neural-networks","title":"Lecture 5: Convolutional Neural Networks","text":""},{"location":"cour_note/D1SJ_StanfordCS231n/#convolutional-neural-networks","title":"Convolutional Neural Networks","text":"

    \u4e4b\u524d\u63d0\u5230\u8fc7\u7684 Fully Connected Layer \u4f1a\u5c06\u591a\u7ef4\u7684\u6570\u636e\u62c9\u4f38\u4e3a\u5411\u91cf\u7684\u5f62\u5f0f\uff0c\u76f8\u6bd4\u4e4b\u4e0b\uff0c Convolution Layer \u5219\u4f1a\u4fdd\u7559\u8f93\u5165\u6570\u636e\u7684\u5f62\u72b6 \u7279\u5f81\uff0c\u4e00\u822c\u6765\u8bf4\uff0cfilter \u4f1a\u4e0e\u6570\u636e\u5177\u6709\u76f8\u540c\u7684\u6df1\u5ea6\uff08\u4f8b\u5982 input \u662f 32x32x3\uff0c\u90a3\u4e48 filter \u53ef\u4ee5\u4e3a 5x5x3\uff09\u3002\u901a\u8fc7\u5c06 filter \u4e0e input \u7684\u67d0\u4e00\u4e2a\u540c\u5f62\u72b6\u7684\u5b50\u533a\u57df\u505a\u70b9\u79ef\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u4e00\u4e2a\u6570\u5b57\u3002

    \u5728\u67d0\u4e2a\u4f4d\u7f6e\u83b7\u5f97\u70b9\u79ef\uff0c\u5373 filter \u5982\u4f55\u4f5c\u7528\u4e8e input

    \u91c7\u7528\u591a\u4e2a filters \u5e76\u5c06\u7ed3\u679c\u53e0\u52a0\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u591a\u4e2a\u6fc0\u6d3b\u56fe(activation maps)\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u5904\u7406\u540e\u7684\u6570\u636e\u3002 - ConvNet is a sequence of Convolution Layers, interspersed with activation functions.

    \u5173\u4e8e\u8f93\u51fa\u7684\u6fc0\u6d3b\u56fe\u7684\u5927\u5c0f\uff0c\u6709\u5982\u4e0a\u516c\u5f0f\u3002

    \u901a\u8fc7\u9009\u62e9\u6b65\u957f\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236\u6ed1\u52a8\u7684\u901f\u7387\u3002\u4ece\u67d0\u79cd\u610f\u4e49\u4e0a\u6765\u8bb2\u8fd9\u4e5f\u662f\u5728\u63a7\u5236\u6ed1\u52a8\u7ed3\u679c\u7684\u5206\u8fa8\u7387\uff0c\u4e5f\u662f\u6c60\u5316\u64cd\u4f5c\u80cc\u540e\u7684\u601d\u60f3\u4e4b\u4e00\u3002\u800c\u5177\u4f53\u9009\u62e9\u5927\u6b65\u957f\u8fd8\u662f\u5c0f\u6b65\u957f\u662f\u4f60\u9700\u8981\u5bf9\u5404\u79cd\u56e0\u7d20\u8fdb\u884c\u8003\u91cf\u51b3\u5b9a\u7684\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6b65\u957f\u4e3a 3 \u65f6\u65e0\u6cd5\u5339\u914d\u3002\u800c\u5728\u5b9e\u8df5\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e9b\u624b\u6bb5\u6765\u89e3\u51b3\u8fd9\u79cd\u65e0\u6cd5\u5339\u914d\u7684\u60c5\u51b5\uff0c\u5982\"zero pad to borders\"\u4ee5\u4f7f\u5927\u5c0f\u7b26\u5408\u6b65\u957f\u3002

    \u6ce8\u610f\uff0c\u91c7\u7528\u96f6\u6269\u5c55\u4ee5\u540e\u4e0a\u4e00\u5f20\u56fe\u7684\u516c\u5f0f\u5c31\u65e0\u6cd5\u4f7f\u7528\u4e86\u3002\u8fd9\u4e5f\u6b63\u662f\u96f6\u6269\u5c55\u7684\u4e00\u4e2a\u7279\u70b9\uff0c\u5b83\u53ef\u4ee5\u8ba9\u56fe\u50cf\u7684\u5f62\u72b6\u4e0d\u5fc5\u7f29\u5c0f\u3002

    \u4e00\u9053\u6d4b\u8bd5\u9898\uff1a

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97\u8fd9\u6837\u4e00\u5c42\u4e2d\u6709\u591a\u5c11\u53c2\u6570\u3002

    Ans

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#pooling-layer","title":"Pooling layer","text":"

    just downsample

    A common way to do this is max pooling:

    just take the max value

    \u5bf9\u4e8e\u6c60\u5316\u5c42\uff0c\u5728\u8fdb\u884c\u6ed1\u52a8\u7a97\u53e3\u65f6\u6211\u4eec\u66f4\u5e0c\u671b\u6b65\u957f\u7684\u8bbe\u7f6e\u80fd\u4f7f filter \u6ca1\u6709\u91cd\u53e0\uff0c\u4ee5\u6ee1\u8db3\u5c0f\u8282\u5f00\u5934\u63d0\u5230\u7684\"independently\"\u3002

    "},{"location":"cour_note/D1SJ_StanfordCS231n/#fully-connected-layer-fc-layer","title":"Fully Connected Layer (FC layer)","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/","title":"\ud83d\udc8e \u9ad8\u7ea7\u6570\u636e\u7ed3\u6784 | Advanced Data Structure","text":"

    \u7ea6 148 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    \u7ffb\u8f6c\u8bfe\u5802*

    \u5206\u6570\u6784\u6210\uff1a

    \u7b14\u8bb0\u76f8\u5173

    \u53c2\u8003\u7b14\u8bb0\uff1a

    List

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/","title":"Topic 1 | Amortized Analysis","text":"

    \u7ea6 1041 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

    \u8bf4\u660e

    \u8ba1\u5212\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u91cd\u5199\u8fd9\u4e00\u90e8\u5206\u7684\u5185\u5bb9\uff0c\u73b0\u5728\u7684\u5185\u5bb9\u662f\u4ece\u539f\u6765\u7684 Lec01 \u91cc\u76f4\u63a5\u8fc1\u79fb\u8fc7\u6765\u7684\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

    link

    Wikipedia: https://zh.wikipedia.org/wiki/%E5%B9%B3%E6%91%8A%E5%88%86%E6%9E%90

    \u4e0d\u597d\u610f\u601d

    \u6211\u5b9e\u5728\u4e0d\u77e5\u9053\u600e\u4e48\u6e05\u6670\u5730\u8bb2\u660e\u767d\u201c\u644a\u8fd8\u201d\u662f\u4ec0\u4e48\uff0c\u611f\u89c9\u8bb2\u4e0d\u592a\u6e05\u695a\uff0c\u6240\u4ee5\u5c31\u6bd4\u8f83\u7b80\u5355\u7684\u4ecb\u7ecd\u4e86\uff0c\u4f46\u662f\u6211\u4ecd\u7136\u4f1a\u6307\u51fa\u6211\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u8ba4\u4e3a\u5bf9\u6211\u542f\u53d1\u6027\u6bd4\u8f83\u5927\u7684\u5730\u65b9\u3002

    \u6240\u8c13\u7684\u644a\u8fd8\u5206\u6790\uff0c\u5206\u6790\u7684\u662f\u644a\u8fd8\u8fb9\u754c\uff0c\u6216\u8005\u8bf4\u644a\u8fd8\u65f6\u95f4\u590d\u6742\u5ea6\u3002\u5e73\u5e38\u6211\u4eec\u5206\u6790\u65f6\u95f4\u590d\u6742\u5ea6\u65f6\uff0c\u9488\u5bf9\u7684\u5f80\u5f80\u662f\u67d0\u4e2a\u5177\u4f53\u7684\u64cd\u4f5c\u3002\u800c\u644a\u8fd8\u5206\u6790\u7684\u5bf9\u8c61\u5219\u662f\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u7684\u4e00\u7cfb\u5217\u64cd\u4f5c\uff0c\u800c\u8fd9\u4e00\u7cfb\u5217\u64cd\u4f5c\u4e2d\u6709\u6210\u672c\u8f83\u4f4e\u7684\uff0c\u4e5f\u6709\u6210\u672c\u8f83\u9ad8\u7684\uff0c\u800c\u4e14\u64cd\u4f5c\u4e4b\u95f4\u4e5f\u53ef\u80fd\u6709\u4e92\u76f8\u5f71\u54cd\u3002

    \u800c\u644a\u8fd8\u5206\u6790\u5219\u662f\u4ee5\u4e00\u4e2a\u66f4\u5168\u5c40\u7684\u89d2\u5ea6\u6765\u8ba1\u7b97\u201c\u5e73\u5747\u201d\u7684\u64cd\u4f5c\u4ee3\u4ef7\uff0c\u5b83\u8ba1\u7b97\u7684\u662f\u4ece\u521d\u59cb\u72b6\u6001\u5f00\u59cb\uff0c\u8fde\u7eed\u7684 M \u6b21\u4efb\u610f\u64cd\u4f5c\u6700\u591a\u6709 \u7684\u4ee3\u4ef7\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5b83\u4e0d\u540c\u4e8e\u5e73\u5747\u65f6\u95f4\u5206\u6790\uff08\u6240\u6709\u53ef\u80fd\u7684\u64cd\u4f5c\u51fa\u73b0\u6982\u7387\u5e73\u5747\uff0c\u4e5f\u5c31\u662f\u76f4\u63a5\u6c42\u5e73\u5747\uff09\u548c\u6982\u7387\u7b97\u6cd5\u7684\u6982\u7387\u5206\u6790\uff08\u5e73\u5747\u8bdd\u6240\u6709\u53ef\u80fd\u7684\u968f\u673a\u9009\u62e9\uff0c\u4e5f\u5c31\u662f\u52a0\u6743\u6c42\u5e73\u5747\uff09\u4e0d\u540c\uff0c\u644a\u8fd8\u5206\u6790\u548c\u6982\u7387\u5b8c\u5168\u65e0\u5173\u3002

    \u5bb9\u6613\u5f97\u5230\u5982\u4e0b\u7b49\u5f0f\uff1a

    \\[ \\text{worst-case bound} \\geq \\text{amortized bound} \\geq \\text{average-case bound} \\]

    \u6211\u4eec\u77e5\u9053\uff0c\u7531\u4e8e amortized bound \u9650\u5236\u4e86\u6240\u6709\u7684 M \u6b21\u64cd\u4f5c\uff0c\u6240\u4ee5\u5176\u4e0a\u754c\u5c31\u7b49\u4e8e\u6700\u5dee\u7684\u60c5\u51b5\u53d1\u751f M \u6b21\uff08\u5f53\u7136\uff0c\u5f88\u591a\u60c5\u51b5\u4e0b\u4e0d\u4e00\u5b9a\u80fd\u53d6\u5230\u5168\u90fd\u662f\u6700\u5dee\u60c5\u51b5\uff09\uff1b\u540c\u6837\u7684\uff0c\u7531\u4e8e\u9700\u8981\u5bf9\u4efb\u610f\u7ec4\u5408\u90fd\u6210\u7acb\uff0c\u6240\u4ee5\u4e00\u5b9a\u4e0d\u4f1a\u5c0f\u4e8e\u7edf\u8ba1\u5b66\u610f\u4e49\u4e0a\u7684\u5e73\u5747\u60c5\u51b5\u3002

    \u521a\u5f00\u59cb\u5b66\u5230\u644a\u8fd8\u5206\u6790\u7684\u65f6\u5019\uff0c\u770b\u7740\u8fd9\u4e9b\u5185\u5bb9\u6709\u4e00\u79cd\u83ab\u540d\u5176\u5999\u7684\u611f\u89c9\uff0c\u4e0d\u77e5\u9053\u5b83\u5728\u5e72\u561b\uff0c\u540e\u6765\u6211\u624d\u53d1\u73b0\u6211\u8bef\u89e3\u4e86\u644a\u8fd8\u5206\u6790\u7684\u76ee\u7684\u3002\u6240\u4ee5\u6211\u611f\u89c9\u8fd8\u662f\u9700\u8981\u5c31\u6b64\u7ed9\u51fa\u6211\u81ea\u5df1\u7684\u7406\u89e3\u3002

    \u644a\u8fd8\u5206\u6790

    \u5728\u6211\u7406\u89e3\u4e2d\uff0c\u644a\u8fd8\u5206\u6790\u5b9e\u9645\u4e0a\u662f\u4e00\u7cfb\u5217\u8bc1\u660e\u65b9\u6cd5\uff0c\u66f4\u8fdb\u4e00\u6b65\u7684\u8bf4\uff0c\u5728\u6211\u4eec\u4e4b\u540e\u4f1a\u8bb2\u5230\u7684\u4e09\u4e2a\u5206\u6790\u65b9\u6cd5\u4e2d\uff0c\u6709\u4e00\u4e9b\u53ef\u80fd\u96be\u4ee5\u76f4\u63a5\u5f97\u5230\u644a\u8fd8\u590d\u6742\u5ea6\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u4ed6\u4eec\u7684\u8fc7\u7a0b\u66f4\u50cf\u662f\u5df2\u77e5\u4e00\u4e2a\u644a\u8fd8\u8fb9\u754c\uff0c\u5e76\u8bc1\u660e\u5b83\u786e\u5b9e\u662f\u8fb9\u754c\u3002

    \u5e38\u89c1\u7684\u644a\u8fd8\u5206\u6790\u6709\u4e09\u79cd\uff1a\u805a\u5408(aggregate)\u6cd5\u3001\u6838(accounting)\u6cd5\u3001\u52bf\u80fd(potential)\u6cd5\uff0c\u63a5\u4e0b\u6765\u4e00\u4e00\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u805a\u5408\u6cd5","title":"\u805a\u5408\u6cd5","text":"

    \u805a\u5408\u6cd5\u76f8\u5bf9\u7b80\u5355\uff0c\u5c31\u662f\u76f4\u63a5\u7d2f\u79ef\u8fde\u7eed M \u6b21\u64cd\u4f5c\u7684\u4ee3\u4ef7\uff0c\u518d\u9664\u4ee5 M\u3002

    \\[ T_{amortized} = \\frac{\\sum_i{T_i}}{n} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u6838\u6cd5","title":"\u6838\u6cd5","text":"

    link

    \u5173\u4e8e Accounting Analysis \u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1ahttps://www.baeldung.com/cs/amortized-analysis

    \u505a\u4e00\u4e2a\u6bd4\u55bb\u7684\u8bdd\uff0c\u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a

    \u4f60\u53bb\u5403\u5348\u996d\uff0c\u5403\u7d20\u83dc\u8981 \u00a51\uff08\u5bf9\u6807\u6d88\u8017\u8f83\u5c0f\u7684\u64cd\u4f5c\uff09\uff0c\u5403\u8364\u83dc\u8981 \u00a54\uff08\u5bf9\u6807\u6d88\u8017\u8f83\u5927\u7684\u64cd\u4f5c\uff09\uff0c\u73b0\u5728\u4f60\u77e5\u9053\u4f60\u6bcf\u5929\u5403\u5348\u996d\u7684\u644a\u8fd8\u5f00\u9500\u4e3a \u00a52\uff08\u4ece\u8bc1\u660e\u7684\u89d2\u5ea6\u6765\u7406\u89e3\uff09\uff0c\u5e76\u4e14\u6211\u65e0\u8111\u7684\u8ba4\u4e3a\u6bcf\u4e2a\u64cd\u4f5c\u7684\u644a\u8fd8\u4ee3\u4ef7\u90fd\u662f \u00a52\uff08\u5728\u6838\u6cd5\u4e2d\uff0c\u6574\u4f53\u7684\u644a\u8fd8\u5f00\u9500\u548c\u5355\u4e2a\u64cd\u4f5c\u7684\u644a\u8fd8\u5f00\u9500\u662f\u4e0d\u4e00\u6837\u7684\uff0c\u5355\u4e2a\u64cd\u4f5c\u7684\u644a\u8fd8\u5f00\u9500\u662f\u53ef\u80fd\u4e92\u4e0d\u4e00\u6837\u7684\uff0cM \u4e2a\u64cd\u4f5c\u6c42\u548c\u53d6\u5e73\u5747\u4ee5\u540e\u624d\u662f\u6574\u4f53\u7684\u644a\u8fd8\u4ee3\u4ef7\uff09\u3002\u90a3\u4e48\u4f60\u4eca\u5929\u5403\u7d20\u83dc\uff0c\u8d26\u6237\u5165\u8d26 \u00a51\uff082 - 1 = 1\uff09\uff1b\u660e\u5929\u4f60\u4e5f\u5403\u7d20\u83dc\uff0c\u8d26\u6237\u4e5f\u5165\u8d26 \u00a51\uff1b\u540e\u5929\u4f60\u5403\u8364\u83dc\u4e86\uff0c\u90a3\u4e48\u8d26\u6237\u5c31\u51fa\u8d26 \u00a52\uff082 - 4 = -2\uff09\u2026\u2026

    \u6838\u6cd5\u5927\u6982\u5c31\u662f\u6309\u7167\u8fd9\u4e48\u4e00\u4e2a\u601d\u8def\u6765\u8bc1\u660e\uff0c\u4e0d\u8fc7\u5177\u4f53\u7ec6\u8282\u548c\u4e0a\u9762\u8fd9\u4e2a\u6848\u4f8b\u8fd8\u662f\u6709\u533a\u522b\u7684\uff0c\u53ef\u4ee5\u8be6\u7ec6\u53c2\u8003\u4e0a\u9762\u90a3\u7247\u6587\u7ae0\uff0c\u6211\u89c9\u5f97\u914d\u56fe\u548c\u8bf4\u660e\u90fd\u5f88\u8be6\u7ec6\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Ex01/#\u52bf\u80fd\u6cd5","title":"\u52bf\u80fd\u6cd5","text":"

    link

    \u5173\u4e8e Potential Analysis \u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1ahttps://en.wikipedia.org/wiki/Potential_method \u4ee5\u53ca ltgg \u7684\u8fd9\u671f\u5468\u62a5\u8bb2\u7684\u4e5f\u5f88\u597d\uff1ahttps://www.yuque.com/xianyuxuan/saltfish_shop/weekly002_amortized_analysis#KmnY6

    \u52bf\u80fd\u6cd5\u5f3a\u63a8 ltgg \u7684\u8fd9\u7bc7\u6587\u7ae0\uff0c\u8bb2\u7684\u975e\u5e38\u597d\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/","title":"Lecture 1 | AVL Trees & Splay Trees","text":"

    \u7ea6 7119 \u4e2a\u5b57 385 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 40 \u5206\u949f

    \u8bf4\u660e

    \u539f\u5148\u5b89\u6392\u5728\u8fd9\u4e00\u7ae0\u8282\u7684\u644a\u8fd8\u5206\u6790\u73b0\u5728\u88ab\u8fc1\u79fb\u5230\u4e86\u8fd9\u4e2a\u5730\u65b9\uff1aTopic 1 | Amortized Analysis\u3002

    \u9605\u8bfb\u6280\u5de7

    \u56e0\u4e3a\u6ca1\u6cd5\u5728\u8fd9\u91cc\u7528\u4ee3\u7801\u5199\u52a8\u753b\uff0c\u6240\u4ee5\u6211\u7528 Tab \u6a21\u62df\u4e86\u4e00\u4e0b\u52a8\u753b\u5e27\uff0c\u53ef\u4ee5\u624b\u52a8\u5207\u6362\u8fd9\u4e9b\u6807\u7b7e\u6765\u52a8\u6001\u89c2\u5bdf\u3002\u4e00\u822c\u8fd9\u79cd\u5185\u5bb9\u7684 Tab \u6807\u9898\u90fd\u4f1a\u662f Frame {}\u3002

    Frame 1Frame 2Frame 3

    Like

    Like this

    Like this!

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#avl-\u6811","title":"AVL \u6811","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/avl/

    \u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u4e00\u68f5\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5176\u5bf9\u70b9\u7684\u64cd\u4f5c\u4ee3\u4ef7\u4e3a \\(O(\\log n)\\)\u3002\u7136\u800c\u5728\u6700\u574f\u60c5\u51b5\u4e0b\uff0c\u5b83\u4f1a\u9000\u5316\u6210 \\(O(n)\\)\uff0c\u4f8b\u5982\u8fd9\u662f\u4e00\u68f5\u53ea\u6709\u5de6\u5b69\u5b50\u6811\u7684\u94fe\u578b\u4e8c\u53c9\u6811\uff0c\u90a3\u4e48\u64cd\u4f5c\u8fd9\u91cc\u552f\u4e00\u7684\u53f6\u5b69\u5b50\u8282\u70b9\u5c31\u662f \\(O(n)\\)\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e00\u68f5\u4e8c\u53c9\u6811\u7684\u7ef4\u62a4\u6210\u672c\u57fa\u672c\u4e0a\u4e0e\u5176\u9ad8\u5ea6\u6b63\u76f8\u5173\u3002\u56e0\u800c\u4e00\u4e2a\u5f88\u81ea\u7136\u7684\u60f3\u6cd5\u662f\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8ba9\u4e00\u68f5\u4e8c\u53c9\u6811\u597d\u7ef4\u62a4\uff0c\u90a3\u4e48\u5c31\u5e0c\u671b\u5b83\u7684\u9ad8\u5ea6\u5c3d\u53ef\u80fd\u4f4e\uff0c\u800c\u5728\u70b9\u6570\u56fa\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u79cd\u6734\u7d20\u7684\u601d\u60f3\u662f\u8ba9\u8282\u70b9\u5c3d\u53ef\u80fd\u201c\u5747\u5300\u201d\u5730\u5206\u5e03\u5728\u6811\u4e0a\u3002

    height of a tree

    \u6811\u7684\u9ad8\u5ea6(Height of Tree)\u7b49\u4e8e\u5176\u6839\u8282\u70b9\u5230\u53f6\u5b69\u5b50\u8282\u70b9\u7684\u82e5\u5e72\u8def\u5f84\u4e2d\uff0c\u6700\u5927\u7684\u8ddd\u79bb\uff08\u5373\u8fb9\u7684\u6570\u91cf\uff09\uff0c\u4e5f\u5c31\u662f\u6df1\u5ea6\u6700\u6df1\u7684\u8282\u70b9\u5230\u6839\u8282\u70b9\u5230\u8ddd\u79bb\u3002

    \u7279\u522b\u7684\uff0c\u4e00\u68f5\u7a7a\u6811\u7684\u9ad8\u5ea6\u4e3a -1\u3002

    \u8bf4\u7684\u901a\u4fd7\u4e00\u4e9b\uff0c\u5c31\u662f\u6811\u7684\u5c42\u6570\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#avl-\u6811_1","title":"AVL \u6811","text":"

    \u800c AVL Tree \u662f\u4e00\u79cd\u5e73\u8861(balanced)\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u901a\u8fc7\u300c\u9ad8\u5ea6\u300d\u8fd9\u4e2a\u91cf\uff0c\u5b9a\u4e49\u4e86\u300c\u5e73\u8861\u300d\u8fd9\u4ef6\u4e8b\u3002

    AVL Tree

    1. \u4e00\u4e2a\u7a7a\u4e8c\u53c9\u6811\u662f\u4e00\u4e2a AVL \u6811\uff1b
    2. \u5982\u679c\u4e8c\u53c9\u6811 \\(T\\) \u662f\u4e00\u4e2a AVL \u6811\uff0c\u5219\u5176\u5de6\u53f3\u5b69\u5b50\u6811 \\(T_l\\) \u548c \\(T_r\\) \u4e5f\u90fd\u5e94\u8be5\u662f AVL \u6811\uff0c\u4e14\u6709 \\(|h(T_l) - h(T_r)| \\leq 1\\)\uff1b

    Balance Factor

    \u4e00\u4e2a\u8282\u70b9\u7684\u5e73\u8861\u56e0\u5b50(Balance Factor, BF)\u7528\u6765\u63cf\u8ff0\u4e00\u4e2a\u8282\u70b9\u7684\u5e73\u8861\u72b6\u6001\uff0c\u5bf9\u4e8e\u8282\u70b9 \\(T_p\\)\uff0c\u5b83\u7684\u5de6\u5b69\u5b50\u6811\u4e3a \\(T_l\\)\uff0c\u53f3\u5b69\u5b50\u6811\u4e3a \\(T_r\\)\uff0c\u5219\uff1a

    \\[ BF(T_p) = h(T_l) - h(T_r) \\]

    \u6240\u4ee5\u4e0a\u9762\u7684\u7b2c 2 \u6761\u53c8\u53ef\u4ee5\u5199\u6210\uff1a

    \u8bf4\u7684\u901a\u4fd7\u4e00\u4e9b\u5c31\u662f\uff0cAVL \u6811\u7684\u6bcf\u4e00\u4e2a\u70b9\u90fd\u5e73\u8861\uff0c\u800c\u5e73\u8861\u4e0e\u5426\u53d6\u51b3\u4e8e\u8282\u70b9\u7684\u4e24\u4e2a\u5b69\u5b50\u6811\u5c42\u6570\u4e4b\u5dee\u662f\u5426\u8d85\u8fc7 1\u3002

    \u5728\u8fd9\u79cd\u5b9a\u4e49\u4e0b\uff0cAVL \u6811\u7684\u9ad8\u5ea6\u53ef\u4ee5\u8bc1\u660e\u4e3a \\(O(\\log N)\\)\uff0c\u8bc1\u660e\u5982\u4e0b\uff1a

    Height of AVL Trees

    graph TD;\nA((\"Root\"))\nB[/\"Left Subtree\"\\]\nC[/\"Right Subtree\"\\]\nA === B\nA === C

    \u6211\u4eec\u8bb0 \\(n_h\\) \u662f\u9ad8\u5ea6\u4e3a \\(h\\) \u7684 AVL \u6811\u6240\u5305\u542b\u7684\u6700\u5c11\u8282\u70b9\u6570\uff0c\u5219\u6709\u5982\u4e0b\u9012\u63a8\u5173\u7cfb\uff1a

    \\[ n_h = \\left\\{ \\begin{array}{l} 1 & (h = 0) \\\\ 2 & (h = 1) \\\\ n_{h-1} + n_{h-2} + 1 & (h > 1) \\end{array} \\right. \\]

    \u53d1\u73b0 \\(n_h + 1\\) \u7b26\u5408 Fibonacci \u6570\u5217\u7684\u9012\u63a8\u516c\u5f0f\uff08\u4f46\u662f\u521d\u59cb\u6761\u4ef6\u4e0d\u4e00\u6837\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u7528 Fibonacci \u5bf9\u5176\u8fdb\u884c\u4e00\u4e2a\u4f30\u8ba1\u3002

    \u800c\u5bf9\u4e8e\u5982\u4e0b Fibonacci \u6570\u5217\uff1a

    \\[ F_i = \\left\\{ \\begin{array}{l} 1 & (i = 1) \\\\ 1 & (i = 2) \\\\ F_{i-1} + F_{i-2} & (i > 2) \\end{array} \\right. \\]

    \u5176\u901a\u9879\u4e3a\uff1a

    \\[ \\begin{aligned} F_n &= \\frac{1}{\\sqrt{5}} \\left( \\left( \\frac{1 + \\sqrt{5}}{2} \\right)^n - \\left( \\frac{1 - \\sqrt{5}}{2} \\right)^n \\right) \\\\ &\\approx \\frac{1}{\\sqrt{5}} \\left( \\frac{1 + \\sqrt{5}}{2} \\right)^n \\\\ \\log{(F_n)} &\\approx n \\end{aligned} \\]

    \u800c \\(n_h + 1 \\approx F_{h+2}\\)\uff0c\u6240\u4ee5 \\(h \\approx \\log{(n_h)}\\)\uff0c\u4e5f\u5c31\u662f\u8bf4 \\(h \\approx \\log{N}\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u89c6\u89d2","title":"\u89c6\u89d2","text":"

    \u800c\u6211\u4eec\u8c08\u8bba AVL \u6811\u65f6\uff0c\u6211\u4eec\u5e0c\u671b\u4ee5\u4e00\u4e2a\u52a8\u6001\u7684\u89c6\u89d2\u6765\u8c08\u8bba AVL \u6811\uff0c\u5373\u8ba8\u8bba\uff1a\u67d0\u4e00\u68f5\u6811\u662f\u5426\u662f AVL \u6811\uff1b\u5728\u67d0\u4e2a\u64cd\u4f5c\u540e\uff0c\u5b83\u662f\u5426\u4ecd\u7136\u662f AVL \u6811\uff1b\u82e5\u539f\u5148\u662f\uff0c\u800c\u7ecf\u8fc7\u64cd\u4f5c\u540e\u4e0d\u518d\u662f\uff0c\u90a3\u8981\u5982\u4f55\u5c06\u5b83\u91cd\u65b0\u53d8\u4e3a AVL \u6811\u3002

    \u4ee5\u4e0a\u4e09\u4e2a\u6b65\u9aa4\u662f\u7b80\u5316\u540e\u7684\u5efa\u6a21\uff0c\u5b83\u6210\u4e3a\u6211\u4eec\u89e3\u51b3\u5176\u4ed6\u95ee\u9898\u7684\u6700\u5c0f\u5355\u5143\u548c\u57fa\u7840\u3002

    \u6240\u4ee5\u5728\u8fd9\u79cd\u6a21\u578b\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e24\u4e2a\u4e1c\u897f\uff1a

    Trouble Maker & Trouble Finder

    \u4ee5 \ud83c\udf30 \u6765\u8bf4\u660e\u3002

    Frame 1Frame 2

    \u4e0b\u56fe\u4e3a\u4e00\u4e2a AVL \u6811\uff1a

    graph TD;\nA((\"8, BF=1\"))\nB((\"4, BF=0\"))\nC((\"9, BF=0\"))\nD((\"2, BF=0\"))\nE((\"6, BF=0\"))\nA === B\nA === C\nB === D\nB === E

    \u73b0\u5728\u6211\u4eec\u63d2\u5165 5\uff1a

    graph TD;\nA((\"8, BF=2\"))\nB((\"4, BF=-1\"))\nC((\"9, BF=0\"))\nD((\"2, BF=0\"))\nE((\"6, BF=1\"))\nF((\"5, BF=0\"))\nA === B\nA === C\nB === D\nB === E\nE === F\nE === NULL

    \u6211\u4eec\u53d1\u73b0\uff0c\u6b64\u65f6 8 \u7684\u300c\u5e73\u8861\u56e0\u5b50\u300d\u53d8\u6210\u4e862\uff0c\u4e0d\u518d\u7b26\u5408 AVL \u6811\u7684\u8981\u6c42\uff0c\u800c\u8fd9\u4e00\u5207\u90fd\u662f 5 \u7684\u63d2\u5165\u5bfc\u81f4\u7684\u2014\u2014\u4e8e\u662f\u6211\u4eec\u79f0\u50cf\u8fd9\u91cc\u7684 8 \u4e00\u6837\uff0c\u7531\u4e8e\u67d0\u4e2a\u70b9\u7684\u63d2\u5165\uff0c\u5176\u300c\u5e73\u8861\u56e0\u5b50\u300d\u4e0d\u518d\u7b26\u5408\u8981\u6c42\u7684\u70b9\uff0c\u4e3a Trouble Finder\uff1b\u800c\u50cf\u8fd9\u91cc\u7684 5 \u4e00\u6837\uff0c\u5bfc\u81f4 Trouble Finder \u51fa\u73b0\u7684\u70b9\uff0c\u88ab\u79f0\u4e4b\u4e3a Trouble Maker\u3002

    \u5f62\u8c61\u5730\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\u5c31\u662f\uff0c\u5728\u52a8\u6001\u63d2\u5165 5 \u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u51fa\u73b0\u4e86\u4e00\u4e2a \"Trouble\"\uff0c\u5bfc\u81f4\u8fd9\u4e2a\u6811\u4e0d\u518d\u662f AVL \u6811\uff0c\u800c 5 \u662f\u8fd9\u4e2a \"Trouble\" \u7684 \"Maker\"\uff0c8 \u662f \"Finder\"\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u672c\u5c0f\u8282\u6240\u9700\u8981\u8bb2\u7684\u5185\u5bb9\u5c31\u662f#\u89c6\u89d2\u4e2d\u63d0\u5230\u7684\u201c\u91cd\u65b0\u53d8\u4e3a AVL \u6811\u201d\u8fd9\u4e00\u89c6\u89d2\uff0c\u4e5f\u5c31\u662f AVL \u6811\u7684\u7ef4\u62a4\u3002

    \u9996\u5148\uff0c \u6211\u4eec\u9700\u8981\u5bf9 AVL \u6811\u7684\u7834\u574f\u60c5\u51b5\u8fdb\u884c\u5206\u7c7b\uff0c\u6839\u636e \"Trouble Finder\"\u3001\"Related Trouble Finder's Child\"\u3001\"Trouble Maker\"\u8fd9\u4e09\u4e2a\u70b9\u7684\u76f8\u5bf9\u5173\u7cfb\uff0c\u5206\u4e3a LL\u3001RR\u3001LR\u3001RL \u56db\u79cd\uff1a

    \u540c\u5fc3\u5706\u8868\u793a\u8fd9\u4e2a\u70b9\u662f\u9700\u8981\u6211\u4eec\u5728\u540e\u7eed\u64cd\u4f5c\u4e2d\u5173\u6ce8\u7684\u3002

    \u6b64\u5916\uff0c\u867d\u7136\u5b9e\u9645\u60c5\u51b5\u4e0b\u53ef\u80fd\u51fa\u73b0\u591a\u4e2a Trouble Finder\uff0c\u4f46\u662f\u6211\u4eec\u53ea\u5173\u6ce8\u4ee5\u300c\u8ddd\u79bb\u6848\u53d1\u73b0\u573a\u6700\u8fd1\u7684 Trouble Finder\u300d\u4e3a\u6839\u7684\u5b69\u5b50\u6811\uff08\u8fd9\u53e5\u8bdd\u975e\u5e38\u91cd\u8981\uff09\u3002

    LLRRLRRL
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B(((\"Left\\nChild\")))\n    C((\"Right\\nChild\"))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA === H\n    B === E === EA\n    C === F === FA\n    C === G === GA
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B((\"Left\\nChild\"))\n    C(((\"Right\\nChild\")))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA\n    C === F === FA\n    C === G === GA === H
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B(((\"Left\\nChild\")))\n    C((\"Right\\nChild\"))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E(((\"L Right\\nChild\")))\n    EA[/\"Left and Right Subtrees\"\\]\n    F((\"R Left\\nChild\"))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA === H\n    C === F === FA\n    C === G === GA
    flowchart TD\n    A(((\"Trouble\\nFinder\")))\n    B((\"Left\\nChild\"))\n    C(((\"Right\\nChild\")))\n    D((\"L Left\\nChild\"))\n    DA[/\"Left and Right Subtrees\"\\]\n    E((\"L Right\\nChild\"))\n    EA[/\"Left and Right Subtrees\"\\]\n    F(((\"R Left\\nChild\")))\n    FA[/\"Left and Right Subtrees\"\\]\n    G((\"R Right\\nChild\"))\n    GA[/\"Left and Right Subtrees\"\\]\n    H((\"Trouble\\nMaker\"))\n    A === B\n    A === C\n    B === D === DA\n    B === E === EA\n    C === F === FA === H\n    C === G === GA

    \u7a0d\u4f5c\u89e3\u91ca\uff0c\u4f8b\u5982 LR\uff0c\u8868\u793a\u7684\u662f Trouble Maker \u5728 Trouble Finder \u7684 L \u5b69\u5b50\u8282\u70b9\u7684 R \u5b69\u5b50\u6811\u4e2d\u3002

    \u53e6\u5916\uff0c\u5bf9\u4e8e\u6211\u53ea\u5728 LR \u548c RL \u4e2d\u7740\u91cd\u4e8c\u7ea7\u5b69\u5b50\u8282\u70b9\uff0c\u5e76\u4e0d\u662f\u7b14\u8bef\u3002\u4e4b\u540e\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#ll--rr","title":"LL & RR","text":"

    \u5e9f\u8bdd

    \u5927\u90e8\u5206\u6559\u6750\u90fd\u503e\u5411\u4e8e\u7ee7\u7eed\u7528\u201c\u65cb\u8f6c\u201d\u6765\u6982\u62ec\u8fd9\u4e9b\u65b9\u6cd5\uff0c\u786e\u5b9e\u5176\u5b9e\u4ece\u62bd\u8c61\u89d2\u5ea6\u6765\u8bb2\u81f3\u5c11 LL \u548c RR \u90e8\u5206\u4e5f\u8fd8\u662f\u50cf\u7684\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u8fd9\u5e76\u4e0d\u5229\u4e8e\u8bb0\u5fc6\u548c\u7406\u89e3\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u5c24\u5176\u662f\u5bf9\u4e8e LR \u548c RL \u7684\u90e8\u5206\u3002

    \u6240\u4ee5\u5728 LL \u548c RR \u90e8\u5206\uff0c\u6211\u8fd8\u662f\u4f1a\u5148\u4ecb\u7ecd\u4e00\u4e0b\u6bd4\u8f83\u4f20\u7edf\u7684\uff0c\u7528\u201c\u65cb\u8f6c\u201d\u7684\u65b9\u5f0f\u6765\u7406\u89e3\uff0c\u4e4b\u540e\u6211\u5c06\u5c1d\u8bd5\u7740\u7528\u6211\u81ea\u5df1\u7684\u601d\u8def\u6765\u8bb2\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u65cb\u8f6c\u89c6\u89d2","title":"\u201c\u65cb\u8f6c\u201d\u89c6\u89d2","text":"

    LL \u548c RR \u8fd9\u4e24\u79cd\u60c5\u51b5\u76f8\u5bf9\u76f4\u89c2\u3002\u7531\u4e8e\u5b83\u4eec\u7684\u64cd\u4f5c\u662f\u5bf9\u79f0\u7684\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u4ee5 LL \u4e3a\u4f8b\u3002

        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        subgraph SA[\"New Left Subtree\"]\n\n            subgraph SB[\"New L Left Subtree\"]\n                D[/\"L Left Subtree\"\\]\n                H((\"Trouble\\nMaker\"))\n            end\n\n            B(((\"Left\\nChild\")))\n            E[/\"L Right Subtree\"\\]\n        end\n\n        A === B\n        A === C\n        B === D === H\n        B === E

    \u6839\u636e\u76f8\u5173\u6027\u8d28\uff0c\u6211\u4eec\u5f97\u5230\u8fd9\u4e2a\u6a21\u578b\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    \u4e00\u4e9b\u6027\u8d28

    1. \\(BF(\\text{Trouble Finder}) = h(\\text{New Left Subtree}) - h(\\text{Right Subtree}) = 2\\)\uff1b
    2. \\(h(\\text{New L Left Subtree}) - h(\\text{L Right Subtree}) = 1\\)\uff1b
      • \u5982\u679c\u6b64\u5dee\u4e3a 0\uff0c\u5219\u4e0d\u5e94\u5f53\u6210\u4e3a Trouble Maker\uff0c\u82e5\u6b64\u5dee\u4e3a 2\uff0c\u5219 Left Child \u5e94\u5f53\u4e3a Trouble Finder\uff1b

    \u73b0\u5728\u6211\u4eec\u5e0c\u671b\u5728\u4fdd\u7559\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u4e0b\uff0c\u8981\u8ba9 \\(|BF(\\text{Trouble Finder})|\\) \u53d8\u5c0f\uff0c\u4e00\u4e2a\u5f88\u81ea\u7136\u7684\u60f3\u6cd5\u5c31\u662f\u8ba9 \\(h(\\text{New Left Subtree})\\) \u53bb -1\uff0c\u8ba9 \\(h(\\text{Right Subtree})\\) \u53bb +1\u3002

    \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u8fd9\u6837\u7684\u64cd\u4f5c\u521a\u597d\uff1a

    LL Single Rotation

    \u5728 Frame 2 \u548c Frame 3 \u4e4b\u95f4\u6dfb\u52a0\u7684\u7ec6\u7ebf\u662f\u4e3a\u4e86\u8868\u793a\u8fd9\u91cc L Right Subtree \u7684\u8f6c\u79fb\u65b9\u6cd5\uff0c\u8ba9 2 ~ 3 \u5e27\u7684\u201c\u65cb\u8f6c\u201d\u8fc7\u7a0b\u4e2d\u66f4\u52a0\u6e05\u6670\u3002

    \u6b64\u5916\uff0c\u8fd9\u91cc\u8981\u7d20\u7684\u547d\u540d\u90fd\u662f\u57fa\u4e8e Frame 1 \u7684\uff0c\u5bf9\u4e8e Frame 4 \u6765\u8bf4 L Right Subtree \u663e\u7136\u5df2\u7ecf\u4e0d\u662f L Right Subtree \u4e86\u3002

    Frame 1Frame 2Frame 3Frame 4
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        A === B\n        A --- E\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B --- E\n        B === A\n        A === E\n        A === C\n
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B === A\n        A === E\n        A === C\n

    \u4f60\u751a\u81f3\u80fd\u4ece\u6574\u4e2a\u6846\u5728 2 ~ 3 \u5e27\u7684\u53d8\u77ed\u611f\u53d7\u5230\u8fd9\u4e2a\u6811\u7684\u9ad8\u5ea6\u51cf\u5c11\u4e86x\uff08\u9003\uff09

    \u90a3\u4e48\u8fd8\u6709\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5982\u4f55\u8bc1\u660e\u8fd9\u6837\u53d8\u6362\u80fd\u591f\u4fdd\u6301 AVL \u7684\u6027\u8d28\u5462\uff1f

    \u6211\u4e2a\u4eba\u8ba4\u4e3a\u4e3b\u8981\u6709\u4e24\u4e2a\u7ef4\u5ea6\uff0c\u4e00\u662f\u4fdd\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u4e8c\u662f\u4fdd\u6301\u5e73\u8861\u7684\u6027\u8d28\uff0c\u6211\u7684\u8bc1\u660e\u5185\u5bb9\u6298\u53e0\u8d77\u6765\u4e86\uff0c\u5efa\u8bae\u8bfb\u8005\u53ef\u4ee5\u5148\u81ea\u5df1\u601d\u8003\u4e00\u4e0b\u518d\u5c55\u5f00\u770b\u770b\u6211\u7684\u60f3\u6cd5\u3002

    \u4e8c\u53c9\u641c\u7d22\u6811\u6027\u8d28\u7684\u4fdd\u6301

    \u4e0d\u77e5\u9053\u8bfb\u8005\u662f\u5426\u53d1\u73b0\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u6392\u5217\u5f97\u5f53\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5982\u679c\u6211\u4ece\u5de6\u5230\u53f3\uff0c\u4f7f\u7528\u4e00\u6761\u7ad6\u76f4\u7684\u626b\u63cf\u7ebf\u626b\u63cf\u6574\u4e2a\u6811\uff0c\u5c06\u4f1a\u5f97\u5230\u4e00\u4e2a\u5355\u8c03\u5e8f\u5217\uff0c\u8fd9\u4e5f\u6b63\u5bf9\u5e94\u7740\u8fd9\u4e2a\u4e8c\u53c9\u641c\u7d22\u6811\u6240\u7ef4\u62a4\u7684\u6709\u5e8f\u6570\u5217\u3002

    \u57fa\u4e8e\u8fd9\u79cd\u8bba\u8c03\uff0c\u518d\u56de\u5934\u770b\u4e0a\u9762\u90a3\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u751a\u81f3\u662f\u89c2\u5bdf\u6211\u5728 2 ~ 3 \u5e27\u753b\u51fa\u6765\u7684\u8fd9\u4e2a\u4e09\u89d2\u5f62\u7684\u65cb\u8f6c\uff0c\u5c31\u4f1a\u53d1\u73b0\u8fd9\u79cd\u65cb\u8f6c\u5b9e\u9645\u4e0a\u53ea\u662f\u5728\u5c06\u8282\u70b9\u4e0a\u4e0b\u79fb\u52a8\uff0c\u6240\u4ee5\u4e0d\u6539\u53d8\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u3002

    \u5e73\u8861\u7684\u4fdd\u6301

    \u8ba9\u6211\u4eec\u5148\u56de\u987e\u4e00\u4e0b\u5728\u4e0a\u9762\u7ed9\u51fa\u7684\u4e00\u4e9b\u6027\u8d28\u4e2d\u7684\u7b2c 2 \u6761\uff1a \\(h(\\text{New L Left Subtree}) - h(\\text{L Right Subtree}) = 1\\)\u3002

    \u5728\u4ed4\u7ec6\u601d\u8003\u6574\u4e2a\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\u6bcf\u4e00\u4e2a Subtree \u7684\u9ad8\u5ea6\u7684\u53d8\u5316\uff0c\u5373\u53ef\u5f97\u5230\u8bc1\u660e\u3002

    \u800c RR Single Rotation \u5b8c\u5168\u5bf9\u79f0\uff0c\u6240\u4ee5\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u6362\u6839\u89c6\u89d2","title":"\u201c\u6362\u6839\u201d\u89c6\u89d2","text":"

    \u73b0\u5728\u6211\u60f3\u5c1d\u8bd5\u7740\u7528\u6211\u81ea\u5df1\u7684\u65b9\u5f0f\u6765\u7406\u89e3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u9996\u5148\u8ba9\u6211\u4eec\u4eba\u529b\u52a8\u753b\u4e00\u4e0b\u8fd9\u4e2a\u8fc7\u7a0b\uff08\u5212\u6389\uff09\uff1a

    LL Single Rotation

    \u6b64\u5916\uff0c\u8fd9\u91cc\u8981\u7d20\u7684\u547d\u540d\u90fd\u662f\u57fa\u4e8e Frame 1 \u7684\uff0c\u5bf9\u4e8e Frame 4 \u6765\u8bf4 L Right Subtree \u663e\u7136\u5df2\u7ecf\u4e0d\u662f L Right Subtree \u4e86\u3002

    Frame 1Frame 2Frame 3Frame 4Frame 5
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E[/\"L Right Subtree\"\\]\n\n        A --- B\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        B(((\"Left\\nChild\")))\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === H\n        B === E
        flowchart TD\n        B(((\"Left\\nChild\")))\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === H\n        A === E
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D[/\"L Left Subtree\"\\]\n        E[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n\n        B === D === H\n        B === A\n        A === E\n        A === C\n

    \u9996\u5148\uff0c\u6211\u4eec\u9047\u5230\u7684\u95ee\u9898\u662f\u4ec0\u4e48\uff1f\u662f Trouble Maker \u8fdb\u6765\u4ee5\u540e\uff0cTrouble Finder \u53d1\u73b0 \\(h(T_l) - h(T_r) = 2\\)\u4e86\uff0c\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\u5c31\u662f\u5de6\u5b69\u5b50\u6811\u592a\u9ad8\u4e86\uff0c\u7136\u800c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5de6\u5b69\u5b50\u6811\u4f9d\u7136\u8fd8\u7ad9\u5728\u4e00\u4e2a\u53f0\u5b50\uff08Trouble Finder\uff09\u4e0a\u548c Trouble Finder \u6bd4\u8eab\u9ad8\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u5b83\u4ece\u53f0\u5b50\u4e0a\u8bf7\u4e0b\u6765\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u65e2\u7136\u5de6\u5b69\u5b50\u6811\u592a\u9ad8\u4e86\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4e0d\u5e0c\u671b\u8ba9\u5b83\u518d\u6210\u4e3a\u8c01\u7684\u5b69\u5b50\u6811\uff0c\u56e0\u4e3a\u6210\u4e3a\u8c01\u7684\u5b69\u5b50\u6811\u5fc5\u7136\u610f\u5473\u7740\u8fd9\u6761\u8def\u5f84\u4f1a\u66f4\u957f\u3002

    \u90a3\u4e48\u73b0\u5728\u6211\u4eec\u628a\u5b83\u4ece\u53f0\u5b50\u4e0a\u8bf7\u4e0b\u6765\uff0c\u4e5f\u5c31\u662f\u8bf4\u5272\u88c2\u5b83\u548c Trouble Finder \u7684\u4eb2\u5b50\u5173\u7cfb\uff08\u5bf9\u5e94 Frame 2\uff09\u8ba9\u5b83\u4eec\u540c\u53f0\u201c\u5bf9\u6297\u201d\uff08\u8fd9\u4e00\u6b65\u5728 LL \u548c RR \u53ef\u80fd\u663e\u5f97\u6bd4\u8f83\u591a\u4f59\uff0c\u4f46\u662f\u5728 LR \u548c RL \u5c31\u4f1a\u8ba9\u95ee\u9898\u6e05\u6670\u5f88\u591a\uff09\u3002

    \u7136\u800c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u8ba9\u8fd9\u4e2a\u68ee\u6797\u91cd\u65b0\u53d8\u56de\u4e00\u4e2a\u6811\uff0c\u6240\u4ee5\u5c31\u9700\u8981\u91cd\u65b0\u4ece\u91cc\u9762\u627e\u5230\u6839\u8282\u70b9\uff0c\u663e\u7136\uff0c\u53ea\u80fd\u9009\u62e9 Trouble Finder \u65c1\u8fb9 \u7684 Left Child\u3002\u4f46\u662f\u4e3a\u4e86\u7ee7\u7eed\u7ef4\u62a4\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06 L Right Subtree \u79fb\u690d\u5230 Trouble Finder \u5fc5\u5b9a\u7a7a\u7f3a\uff08\u56e0\u4e3a\u8fd9\u91cc\u539f\u5148\u662f Left Child\uff09\u7684\u5de6\u6307\u9488\u4e0a\u3002

    OK\uff0c\u4f60\u53ef\u80fd\u89c9\u5f97\u8fd9\u4e2a\u89e3\u91ca\u5bf9\u4e8e LL Single Rotation \u6765\u8bf4\u663e\u5f97\u5341\u5206\u591a\u6b64\u4e00\u4e3e\uff0c\u4f46\u662f\u8fd9\u90fd\u662f\u4e3a\u4e86\u7ed9\u540e\u9762\u505a\u7684\u94fa\u57ab\uff0c\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u770b\u8d77\u6765\u7e41\u7410\u5197\u4f59\uff0c\u4f46\u662f\u5df2\u7ecf\u8db3\u4ee5\u89e3\u91ca\u539f\u5148\u7684 Single Rotation \u65e0\u6cd5\u89e3\u91ca\u7684 LR & RL \u64cd\u4f5c\u65b9\u6cd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#lr--rl","title":"LR & RL","text":"

    \u9996\u5148\u6211\u4eec\u9700\u8981\u77e5\u9053\u4e3a\u4ec0\u4e48\u4e4b\u524d\u7684\u65b9\u6cd5\u4e0d\u884c\uff0c\u4e5f\u662f\u6211\u89c9\u5f97\u201c\u65cb\u8f6c\u201d\u8fd9\u4e2a\u505a\u6cd5\u5728\u8fd9\u4e2a\u63a8\u8fdb\u8fc7\u7a0b\u4e2d\u6bd4\u8f83\u5272\u88c2\u7684\u5730\u65b9\uff1a\uff08\u5bf9\u7167 #\u65cb\u8f6c\u89c6\u89d2 \u7684\u5185\u5bb9\u9605\u8bfb\uff09\u6211\u4eec\u53d1\u73b0\uff0c\u7531\u4e8e LL \u4e2d\u7684 Trouble Maker \u5728\u5de6\u4fa7\u5b69\u5b50\u6811\u4e0a\uff0c\u6240\u4ee5\u5728\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\uff0c\u76f8\u5f53\u4e8e\u628a\u5b83\u201c\u62fd\u201d\u4e0a\u6765\u4e86\u3002\u7136\u800c\u5bf9\u4e8e L Right Subtree\uff0c\u65e0\u8bba\u662f\u65cb\u8f6c\u524d\u8fd8\u662f\u65cb\u8f6c\u540e\uff0c\u4e3a\u4e86\u7ef4\u62a4\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\uff0c\u5b83\u90fd\u88ab\u63a5\u5728\u4e86\u6df1\u5ea6\u4e3a 1 \u7684\u8282\u70b9\u4e0a\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4 L Right Subtree \u8d21\u732e\u7684\u9ad8\u5ea6\u5e76\u6ca1\u6709\u6539\u53d8\u3002\u5bf9\u4e8e RL \u7684\u60c5\u51b5\u4e5f\u662f\u540c\u7406\u7684\u3002\u6240\u4ee5\u6211\u4eec\u5e76\u4e0d\u80fd\u4f7f\u7528 LL Single Rotation \u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u5173\u4e8e\u65cb\u8f6c\u89c6\u89d2

    \u5982\u679c\u4ece\u65cb\u8f6c\u89c6\u89d2\u6765\u8003\u8651\uff0c\u786e\u5b9e\u4e5f\u80fd\u8003\u8651\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u4f46\u4e00\u65b9\u9762\u8fc7\u4e8e\u590d\u6742\uff0c\u4e00\u65b9\u9762\u5b9e\u9645\u5b9e\u73b0\u8fc7\u7a0b\u4e2d\u4e5f\u5b8c\u5168\u53ef\u4ee5\u88ab\u4f18\u5316\uff0c\u6240\u4ee5\u6211\u5e0c\u671b\u4f7f\u7528\u6362\u6839\u7684\u89c6\u89d2\u6765\u7406\u89e3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u90a3\u4e48\u6211\u4eec\u6362\u4e00\u4e2a\u601d\u8def\uff0c\u7528\u201c\u6362\u6839\u201d\u89c6\u89d2\u6765\u770b\u5f85\u8fd9\u4e2a\u95ee\u9898\uff1a

    LR Rotation

    \u8fd9\u91cc\u4e24\u4e2a Subtree \u63a5\u5230\u540c\u4e00\u4e2a Trouble Maker \u7684\u610f\u601d\u662f Trouble Maker \u53ef\u4ee5\u51fa\u73b0\u5728\u4e24\u8005\u4efb\u4e00\u4e2d\u3002

    Frame 1Frame 2Frame 3Frame 4Frame 5
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === DA\n        B === E === EA --- H\n        E === EB --- H
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A --- B\n        A === C\n        B === D === DA\n        B --- E === EA --- H\n        E === EB --- H
        flowchart TD\n\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === DA\n        E === EA --- H\n        E === EB --- H
        flowchart TD\n\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        A === C\n        B === D === DA\n        E --- EA --- H\n        E --- EB --- H
        flowchart TD\n\n        D((\"L Left\\nChild\"))\n        B(((\"Left\\nChild\")))\n        DA[/\"L Left Subtree\"\\]\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        A(((\"Trouble\\nFinder\")))\n        C[/\"Right Subtree\"\\]\n\n        E === B\n        E === A\n        B === D === DA\n        B === EA --- H\n        A === EB --- H\n        A === C
    \u5173\u4e8e\u8bb0\u5fc6

    \u8bb0\u5fc6\u8fd9\u4e2a\u64cd\u4f5c\u5982\u4f55\u505a\u7684\u8bdd\uff0c\u6211\u7684\u8bb0\u5fc6\u65b9\u6cd5\u662f\u8fd9\u6837\u7684\uff1a

    Frame 1Frame 2Frame 3Frame 4
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A === B\n        A === C\n        B === D === DA\n        B === E === EA --- H\n        E === EB --- H
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        C[/\"Right Subtree\"\\]\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n\n        A --- B\n        A --- E\n        A === C\n        B === D === DA\n        B --- E === EA --- H\n        E === EB --- H
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        C[/\"Right Subtree\"\\]\n\n        A --- B\n        E --- B \n        E --- A\n        B === D === DA\n        B --- EA --- H\n        A --- EB --- H\n        A === C
        flowchart TD\n        A(((\"Trouble\\nFinder\")))\n        B(((\"Left\\nChild\")))\n        D((\"L Left\\nChild\"))\n        DA[/\"L Left Subtree\"\\]\n        H((\"Trouble\\nMaker\"))\n        E(((\"L Right\\nChild\")))\n        EA[/\"L Left Subtree\"\\]\n        EB[/\"L Right Subtree\"\\]\n        C[/\"Right Subtree\"\\]\n\n        E --- B \n        E --- A\n        B === D === DA\n        B --- EA --- H\n        A --- EB --- H\n        A === C

    \u7528\u8bed\u8a00\u6982\u62ec\u5c31\u662f\uff0c\u627e\u5230\u5173\u952e\u7684\u90a3\u4e09\u4e2a\u70b9\uff0c\u7136\u540e\u628a\u6700\u4e0b\u9762\u7684\u9876\u5230\u4e0a\u9762\u53bb\uff0c\u5269\u4e0b\u4e24\u4e2a\u4f5c\u4e3a\u5de6\u53f3\u5b69\u5b50\u6811\uff0c\u539f\u5148\u7684\u90a3\u4e2a\u70b9\u7684\u5de6\u53f3\u5b69\u5b50\u6811\u5219\u5bf9\u5e94\u5730\uff0c\u5de6\u5b69\u5b50\u6811\u63a5\u5230\u5de6\u8fb9\u7a7a\u7f3a\u7684\u53f3\u5b69\u5b50\u6811\u4e0a\uff0c\u53f3\u5b69\u5b50\u6811\u63a5\u5230\u53f3\u8fb9\u7a7a\u7f3a\u7684\u5de6\u5b69\u5b50\u6811\u4e0a\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u5176\u4ed6\u95ee\u9898","title":"\u5176\u4ed6\u95ee\u9898","text":"

    \u5982\u679c\u4e00\u4e2a Trouble \u4ea7\u751f\u540e\uff0c\u51fa\u73b0\u4e86\u591a\u4e2a Trouble Finder\uff0c\u8be5\u5982\u4f55\u5904\u7406\uff1f

    \u9996\u5148\uff0c\u8bf7\u56de\u987e\u4e00\u4e0b #\u64cd\u4f5c \u4e2d\u88ab\u52a0\u7c97\u7684\u8fd9\u4e00\u53e5\u8bdd\uff0c\u300c\u4ee5\u300e\u8ddd\u79bb\u6848\u53d1\u73b0\u573a\u6700\u8fd1\u7684 Trouble Finder\u300f\u4e3a\u6839\u7684\u5b69\u5b50\u6811\u300d\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u73b0\u5728\u5df2\u7ecf\u6709\u4e86\u89e3\u51b3\u6700\u8fd1\u7684 Trouble Finder \u7684\u65b9\u6848\u3002

    \u611f\u6027\u7684\u601d\u8003\uff0cAVL \u7684\u201c\u5e73\u8861\u201d\u53ef\u4ee5\u7531\u9012\u5f52\u5f62\u5f0f\u5b9a\u4e49\uff0c\u5177\u4f53\u6765\u8bf4\u8861\u91cf\u7684\u662f\u5de6\u53f3\u5b69\u5b50\u6811\u7684\u201c\u9ad8\u5ea6\u201d\u5dee\u3002\u5f53\u6211\u4eec\u89e3\u51b3\u4e86\u4e00\u4e2a Trouble Finder\uff0c\u610f\u5473\u7740\u6211\u4eec\u8ba9 Trouble Finder \u7684\u6700\u9ad8\u7684\u90a3\u4e2a\u5b69\u5b50\u6811\u9ad8\u5ea6 -1\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u4ee5 Trouble Finder \u4e3a\u6839\u7684\u90a3\u4e2a\u5b69\u5b50\u6811\u9ad8\u5ea6 -1\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u5176\u6240\u6709\u7236\u8282\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u90fd\u4f1a\u76f8\u5e94\u5730\u53d8\u5316\u3002

    \u4e00\u4e2a Trouble \u5f53\u4e14\u4ec5\u6709\u4e00\u4e2a Trouble Maker\uff0c\u800c\u4e14\u5b83\u5fc5\u5b9a\u662f Trouble Finder \u6240\u5173\u6ce8\u7684\u90a3\u4e2a\u201c\u6700\u957f\u8def\u5f84\u201d\u7684\u7aef\u70b9\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6240\u6709\u7684\u5b50 Trouble Finder \u90fd\u5728\u5bf9\u5e94\u7684\u7236 Trouble Finder \u7684\u201c\u6700\u957f\u8def\u5f84\u201d\u4e0a\u3002\u800c\u73b0\u5728\u6211\u4eec\u8ba9\u5b50 Trouble Finder \u552f\u4e00\uff08\u5982\u679c\u4e0d\u552f\u4e00\uff0c\u90a3\u5728\u8fd9\u4e2a Trouble Maker \u5230\u6765\u4e4b\u524d\u5c31\u5df2\u7ecf\u5b58\u5728 Trouble \u4e86\uff09\u7684\u6700\u957f\u8def\u5f84\u4e5f\u5e94\u5f53\u4f1a -1\u3002\u800c\u8fd9\u5fc5\u5c06\u5bfc\u81f4\u5176\u5e73\u8861\u56e0\u5b50\u7684\u7edd\u5bf9\u503c -1\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#splay-\u6811","title":"Splay \u6811","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/splay/

    Splay \u6811\uff0c\u5373\u4f38\u5c55\u6811\uff0c\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\u548c AVL \u6811\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7 Splay \u6811\u5e0c\u671b\u8fbe\u5230\u7684\u76ee\u6807\u662f\u5728\u644a\u8fd8(Amortized)\u590d\u6742\u5ea6\\(O(\\log N)\\)\u7684\u60c5\u51b5\u4e0b\u5b8c\u6210\u5927\u90e8\u5206\u5bf9\u70b9\u64cd\u4f5c\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u4e3a\u4f7f AVL \u4fdd\u6301\u5e73\u8861\uff0c\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4ece\u6839\u8282\u70b9\u5230 Trouble Maker \u8fd9\u6761\u8def\u5f84\u4e0a\u6240\u6709\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u3002\u800c Splay \u5219\u4e0d\u518d\u7ef4\u62a4\u8fd9\u4e9b\u4fe1\u606f\uff0c\u8fd9\u610f\u5473\u7740\u6211\u4eec\u65e0\u6cd5\u4fdd\u8bc1 Splay \u6811\u7684\u72b6\u6001\u90fd\u662f\u5e73\u8861\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u5b83\u5c3d\u53ef\u80fd\u5e73\u8861\u3002\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u5bf9\u4e8e \\(M\\) \u6b21\u4efb\u610f\u64cd\u4f5c\uff0c\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(M\\log N)\\)\uff0c\u5747\u644a\u4e0b\u6765\u8fd9 \\(M\\) \u4e2a\u64cd\u4f5c\u6bcf\u4e00\u4e2a\u90fd\u9700\u8981 \\(O(\\log N)\\)\u3002

    \u5bf9\u4e8e\u4e00\u4e2a\u6811\uff0c\u6211\u4eec\u5bf9\u5176\u8282\u70b9\u8fdb\u884c\u7684\u64cd\u4f5c\u53ef\u80fd\u662f\uff1a\u589e\u70b9\u3001\u5220\u70b9\u3001\u6539\u70b9\u3001\u67e5\u70b9\u7b49\u7b49\uff0c\u800c\u4e0d\u540c\u7c7b\u578b\u7684\u64cd\u4f5c\u5f00\u9500\u53ef\u80fd\u4e0d\u5c3d\u76f8\u540c\u3002\u7b80\u5355\u7684\u8ba1\u7b97\u5176\u5e73\u5747\u503c\u5219\u5ffd\u7565\u4e86\u8fd9\u4e9b\u64cd\u4f5c\u4e4b\u95f4\u4e92\u76f8\u7684\u5f71\u54cd\u6216\u8005\u662f\u64cd\u4f5c\u9891\u7387\u7684\u95ee\u9898\uff0c\u6240\u4ee5\u6211\u4eec\u8fd9\u91cc\u4f7f\u7528\u644a\u8fd8\u590d\u6742\u5ea6\u6765\u63cf\u8ff0\u5176\u6548\u7387\u3002

    \u5173\u4e8e\u644a\u8fd8\u7684\u95ee\u9898\u6211\u4eec\u8fd8\u4f1a\u5728\u4e4b\u540e\u8fdb\u4e00\u6b65\u6df1\u5165\u3002

    \u90a3\u4e48\u8bf4\u4e86\u8fd9\u4e48\u591a\uff0cSplay \u662f\u600e\u4e48\u5b9e\u73b0\u8fd9\u4e00\u76ee\u6807\u7684\u5462\uff1f

    Splay \u7684\u6838\u5fc3\u601d\u60f3\u5c31\u662f\uff0c\u6bcf\u5f53\u6211\u4eec\u8bbf\u95ee\u4e00\u4e2a\u8282\u70b9\uff08\u6bd4\u5982\u67e5\u8be2\u67d0\u4e2a\u70b9\u3001\u63d2\u5165\u67d0\u4e2a\u70b9\uff0c\u751a\u81f3\u662f\u5220\u9664\u67d0\u4e2a\u70b9\uff09\uff0c\u6211\u4eec\u5c31\u901a\u8fc7\u4e00\u7cfb\u5217\u64cd\u4f5c\u5c06\u76ee\u6807\u70b9\u8f6c\u79fb\u5230\u6839\u90e8\uff0c\u5f62\u8c61\u4e0a\u7406\u89e3\u5c31\u662f\u4e0d\u65ad\u65cb\u8f6c\u6574\u4e2a\u6811\u7684\u6784\u9020\uff0c\u77e5\u9053\u628a\u70b9\u8f6c\u5230\u6839\u90e8\u3002

    \u4f8b\u5982\u6211\u4eec\u67e5\u8be2\u70b9 \\(k_1\\)\uff0c\u5219\u4f1a\u901a\u8fc7\u65cb\u8f6c\u5c06\u5b83\u8f6c\u5230\u6839\u3002

    Frame 1Frame 2Frame 3

    \u53ef\u4ee5\u53d1\u73b0\uff0cFrame 1 ~ 2 \u5c31\u662f\u6211\u4eec\u524d\u9762\u63d0\u5230\u8fc7\u7684 LR Rotation\uff0c\u800c Frame 2 ~ 3 \u5c31\u662f\u7ecf\u8fc7\u4e86\u4e24\u6b21 LL Rotation\u3002\u5f53\u7136\uff0c\u5728 Splay \u91cc\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u6709\u4e86\u65b0\u7684\u540d\u5b57\u3002

    \u8fd9\u4e2a\u4f8b\u5b50\u53ea\u662f\u4e3a\u4e86\u7ed9\u8bfb\u8005\u4e00\u4e2a\u521d\u59cb\u5370\u8c61\uff0c\u4e4b\u540e\u6211\u4eec\u5c06\u66f4\u8be6\u7ec6\u3001\u51c6\u786e\u7684\u4ecb\u7ecd\u64cd\u4f5c\u3002

    \uff08\u6ca1\u73a9\u8fc7\u53ef\u80fd\u542c\u4e0d\u592a\u61c2\uff09\u4e0d\u77e5\u9053\u5927\u5bb6\u6709\u6ca1\u6709\u73a9\u8fc7\u90a3\u79cd\u7535\u5b50\u6e38\u620f\uff0c\u5c31\u662f\u6709\u597d\u591a\u8f6c\u76d8\uff0c\u76f8\u90bb\u8f6c\u76d8\u4e4b\u95f4\u6709\u4ea4\u754c\u5904\uff0c\u8fd9\u4e9b\u4ea4\u754c\u70b9\u4e0a\u90fd\u4f1a\u6709\u5706\u7403\uff0c\u5f53\u4e00\u4e2a\u8f6c\u76d8\u65cb\u8f6c\u7684\u65f6\u5019\uff0c\u5176\u5706\u5468\u4e0a\u7684\u7403\u4f53\u90fd\u4f1a\u8ddf\u7740\u8fd9\u4e2a\u5706\u5468\u8f6c\u52a8\u3002\u901a\u8fc7\u4e0d\u505c\u8f6c\u52a8\u76f8\u90bb\u7684\u5706\u76d8\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9e\u73b0\u628a\u67d0\u4e2a\u4f4d\u7f6e\u7684\u5706\u7403\u8f6c\u79fb\u5230\u53e6\u5916\u4e00\u4e2a\u4f4d\u7f6e\u3002\u800c Splay \u5dee\u4e0d\u591a\u662f\u8fd9\u4e48\u4e2a\u611f\u89c9\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"

    \u9996\u5148\u6211\u4eec\u505a\u4e00\u4e2a\u7ea6\u5b9a\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u8282\u70b9 X\uff0c\u6211\u4eec\u8bb0\u5176\u7236\u8282\u70b9\u4e3a P(Parent)\uff0c\u5176\u7236\u8282\u70b9\u7684\u7236\u8282\u70b9\u4e3a G(Grandparent)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u5177\u4f53\u64cd\u4f5c\u57fa\u672c\u5c31\u548c AVL \u6811\u7684\u76f8\u5173\u64cd\u4f5c\u6709\u5f88\u5927\u91cd\u5408\u3002

    \u6548\u679c

    Splaying not only moves the accessed node to the root, but also roughly halves the depth of most nodes on the path.

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u5bf9\u70b9\u64cd\u4f5c","title":"\u5bf9\u70b9\u64cd\u4f5c","text":"

    \u7531\u4e8e Splay Tree \u9664\u4e86\u5728\u5b8c\u6210\u6240\u6709\u64cd\u4f5c\u4ee5\u540e\u90fd\u9700\u8981\u8fdb\u884c\u4e00\u6b21 Splay \u64cd\u4f5c\uff0c\u5176\u4ed6\u90e8\u5206\u90fd\u548c BST \u4e00\u6837\uff0c\u6240\u4ee5\u8fd9\u91cc\u53ea\u7b80\u5355\u4ecb\u7ecd\u4e00\u4e0b Splay \u7684\u90e8\u5206\u3002

    Find X

    \u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230 \\(X\\)\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u5c06 \\(X\\) \u4e0d\u65ad\u65cb\u8f6c\u81f3\u6839\uff0c\u6700\u7ec8\u76f4\u63a5\u53d6\u51fa Root \u5373\u4e3a\u7ed3\u679c\u3002

    Remove X

    \u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230 \\(X\\)\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u5c06 \\(X\\) \u4e0d\u65ad\u65cb\u8f6c\u81f3\u6839\uff0c\u63a5\u4e0b\u6765\u5220\u9664 Root \u8282\u70b9\uff0c\u5e76\u5728\u7ef4\u62a4 BST \u6027\u8d28\u7684\u60c5\u51b5\u4e0b\u9012\u5f52\u5730\u5408\u5e76\u5de6\u53f3\u5b69\u5b50\u6811\u5373\u53ef\u3002

    Find Max

    \u6839\u636e BST \u7684\u6027\u8d28\uff0c\u53ef\u4ee5\u5728 \\(O(\\log N)\\) \u7684\u65f6\u95f4\u91cc\u627e\u5230\u6700\u5927\u503c\uff0c\u5c06\u5b83\u65cb\u8f6c\u5230\u6839\u90e8\u4ee5\u540e\uff0c\u53ef\u4ee5\u53d1\u73b0\u5b83\u6ca1\u6709\u53f3\u5b69\u5b50\u6811\uff0c\u76f4\u63a5\u5220\u6389\u5c31\u884c\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

    \u524d\u7f6e\u9605\u8bfb

    \u5173\u4e8e\u644a\u8fd8\u5206\u6790\u7684\u57fa\u672c\u77e5\u8bc6\uff0c\u8bf7\u67e5\u770b Topic 1 | Amortized Analysis\u3002

    \u6b64\u5904\uff0c\u6211\u4eec\u5c06\u4f7f\u7528\u52bf\u80fd\u6cd5\u6765\u5206\u6790 Splay \u7684\u644a\u8fd8\u590d\u6742\u5ea6\uff0c\u7531\u4e8e\u8bfe\u4ef6\u7701\u7565\u4e86\u5f88\u591a\u7ec6\u8282\u4e0a\u7684\u89e3\u91ca\uff0c\u6240\u4ee5\u6211\u8fd9\u91cc\u4f1a\u8865\u5145\u975e\u5e38\u591a\u5185\u5bb9\u3002

    reference

    http://www2.hawaii.edu/~nodari/teaching/f19/scribes/notes06.pdf

    \u5f00\u59cb\u5206\u6790\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u660e\u786e\u5206\u6790\u7684\u76ee\u6807\uff1a

    \u5bf9\u4e8e Splay\uff0c\u5b83\u4e0d\u50cf\u6211\u4eec\u5728 Topic 1 | Amortized Analysis \u63d0\u5230\u7684\u90a3\u4e9b\u6848\u4f8b\u4e00\u6837\uff0c\u5b58\u5728\u660e\u663e\u7684\u51cf\u52bf\u548c\u589e\u52bf\u884c\u4e3a\u3002\u5bf9\u4e8e Splay \u6765\u8bf4\uff0c\u6240\u6709\u6211\u4eec\u63d0\u5230\u7684\u64cd\u4f5c\u90fd\u4f9d\u8d56\u4e8e\u5c06\u76ee\u6807\u70b9\u65cb\u8f6c\u5230\u6839\u6765\u5b9e\u73b0\uff0c\u800c\u8fd9\u4e5f\u6210\u4e3a\u5176\u4e3b\u8981\u5f00\u9500\uff08\u90e8\u5206\u5e38\u6570\u64cd\u4f5c\u663e\u7136\u88ab\u8986\u76d6\uff0c\u63d2\u5165\u4e4b\u7c7b\u7684\u64cd\u4f5c\u4e4b\u6240\u4ee5\u80fd\u88ab\u5ffd\u7565\u7684\u539f\u56e0\uff0c\u53ef\u4ee5\u53c2\u8003 ltgg \u7684\u8fd9\u7bc7\u6587\u7ae0\uff09\u3002\u5176\u4e2d\u6211\u4eec\u4f1a\u7528\u5230\u82e5\u5e72\u6b21 zig\u3001zig-zag\u3001zig-zig \u7684\u64cd\u4f5c\u3002

    \u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\uff0c\u6211\u4eec\u8981\u5206\u6790\u7684\u76ee\u6807\u4e3a\uff1a

    \\[ T_{\\text{rotate }x\\text{ to root}} = T_{\\text{zig}} + \\sum{ {T_{\\text{zig-zag}}}_i } + \\sum{ {T_{\\text{zig-zig}}}_i } \\]

    \u4e0a\u9762\u4e09\u4e2a\u90e8\u5206\u6bcf\u4e00\u4e2a\u90fd\u6709\u53ef\u80fd\u662f \\(0\\)\uff0c\u800c zig \u6700\u591a\u53ea\u4f1a\u53d1\u751f\u4e00\u6b21\uff01

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u8bbe\u8ba1\u4e00\u4e2a\u52bf\u80fd\u51fd\u6570 \\(\\Phi(x)\\)\uff0c\u5e76\u4e14\u6839\u636e\u6211\u4eec\u63d0\u5230\u8fc7\u7684\u52bf\u80fd\u5206\u6790\u6cd5\u7684\u7279\u6027\uff0c\\(\\Phi(x)\\) \u5e94\u8be5\u5177\u6709\u8fd9\u4e48\u51e0\u4e2a\u7279\u5f81\uff1a

    \u4e8e\u662f\u8fd9\u91cc\u6211\u4eec\u8bbe\u8ba1\u7684\u52bf\u80fd\u51fd\u6570\u4e3a\uff1a

    \\[ \\Phi(T) = \\sum_{des \\in T} \\log Size(des) = \\sum_{des \\in T} Rank(des)\\\\ \\begin{aligned} &\\text{Where } des \\text{ means the descendant of } T \\text{,}\\\\ &\\text{and } Size(des) \\text{ means the number of the nodes of } des \\text{.} \\\\ &\\text{And we note } Rank(des) = \\log Size(des) \\approx Height(des) \\text{.} \\end{aligned} \\]

    \u7528\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u5c31\u662f\uff0c\u5bf9\u4e8e\u67d0\u4e2a\u5b69\u5b50\u6811 \\(T\\)\uff0c\u5176\u52bf\u80fd\u51fd\u6570 \\(\\Phi(T)\\) \u7b49\u4e8e\u4ee5\u6240\u6709\u5b83\u7684\u540e\u4ee3\u4e3a\u6839\u7684\u5b69\u5b50\u6811\u7684\u5927\u5c0f\u53d6\u5bf9\u6570\u4ee5\u540e\u6c42\u548c\u3002

    Rank v.s. Height

    \u8fd9\u91cc\u9700\u8981\u6ce8\u610f\u7684\u4e00\u4e2a\u70b9\u662f\uff0c\u867d\u7136 \\(Rank(des) \\approx Height(des)\\)\uff0c\u4f46\u662f\u6211\u4eec\u4e0d\u5e94\u8be5\u7528 \\(Height()\\) \u6765\u4ee3\u66ff \\(Rank()\\)\uff0c\u4e3b\u8981\u539f\u56e0\u662f\u5728\u65cb\u8f6c\u8fc7\u7a0b\u4e2d\uff0c\\(Rank()\\) \u4e0d\u4f1a\u53d8\u5316\uff08\u56e0\u4e3a \\(Size()\\) \u4e0d\u4f1a\u53d8\u5316\uff09\uff0c\u4f46\u662f \\(Height()\\) \u53ef\u80fd\u53d8\u5316\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u679c\u9009\u7528 \\(Height()\\) \u4f5c\u4e3a\u52bf\u80fd\u51fd\u6570\uff0c\u6211\u4eec\u5c31\u4e0d\u5f97\u5df2\u8003\u8651\u6574\u68f5\u6811\uff0c\u800c\u975e\u53ea\u9700\u8981\u8003\u8651\u5f53\u524d\u65cb\u8f6c\u6d89\u53ca\u7684\u5b69\u5b50\u6811\u3002

    \u5173\u4e8e\u6b63\u786e\u6027\u7684\u8bf4\u660e\uff0c\u6211\u4f1a\u653e\u5728\u4e4b\u540e\u7684\u8fc7\u7a0b\u4e2d\u4e00\u4e2a\u4e2a\u63d2\u5165\uff0c\u5b83\u4eec\u4f1a\u88ab\u5305\u88f9\u5728 key-point \u6587\u5b57\u6846\u4e2d\uff0c\u8bf7\u6ce8\u610f\u8fd9\u4e9b\u5185\u5bb9\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u53ef\u4ee5\u5f00\u59cb\u5206\u6790\u4e86\uff0c\u6839\u636e\u6211\u4eec\u7ed9\u5b9a\u7684\u76ee\u6807\uff1a

    \\[ T_{\\text{rotate }x\\text{ to root}} = T_{\\text{zig}} + \\sum{ {T_{\\text{zig-zag}}}_i } + \\sum{ {T_{\\text{zig-zig}}}_i } \\]

    \u6211\u4eec\u5229\u7528\u5747\u644a\u5206\u6790\uff0c\u9700\u8981\u5f97\u5230\u4e00\u4e2a\u5e73\u6ed1\u4e0a\u754c\uff1a

    \\[ \\hat{c}_{\\text{rotate }x\\text{ to root}} = \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\]

    \u800c\u6211\u4eec\u9700\u8981\u8bc1\u660e \\(\\hat{c}_{\\text{rotate }x\\text{ to root}} = O(\\log{N})\\)\uff0c\u73b0\u5728\u6211\u4eec\u9700\u8981\u5206\u522b\u5206\u6790 zig\u3001zig-zag\u3001zig-zig\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig","title":"zig","text":"

    Amortized Analysis for Zig

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= {c_{\\text{zig}}}_i + \\Phi_{i}(X) - \\Phi_{i-1}(P) \\\\ &= 1 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) \\end{aligned} \\]

    \u89c2\u5bdf\u914d\u56fe\uff0c\\(X\\) \u591a\u4e86 \\(P\\) \u548c \\(C\\) \u4f5c\u4e3a\u5b50\u55e3\uff0c\u800c \\(P\\) \u60b2\u60e8\u5730\u5931\u53bb\u4e86 \\(X\\) \u4e00\u65cf\uff0c\u751a\u81f3\u6210\u4e86 \\(X\\) \u7684\u540e\u4ee3\uff0c\u5373 \\(X\\) \u76db \\(P\\) \u8870\uff0c\u56e0\u6b64\u5c31\u6709\u4e0d\u7b49\u5f0f\uff1a

    \\[ \\left\\{ \\begin{aligned} & Rank_{i}(X) - Rank_{i-1}(X) \\geq 0\\\\ & Rank_{i}(P) - Rank_{i-1}(P) \\leq 0 \\end{aligned} \\right. \\]

    \u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u505a\u7b80\u5355\u7684\u7f29\u653e\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= 1 + \\underbrace{Rank_{i}(X) - Rank_{i-1}(X)}_{\\geq 0} + \\underbrace{Rank_{i}(P) - Rank_{i-1}(P)}_{\\leq 0} \\\\ &\\leq 1 + Rank_{i}(X) - Rank_{i-1}(X) \\end{aligned} \\]

    \u4e3a\u4ec0\u4e48\u4e0d\u662f\u53e6\u5916\u4e00\u79cd\u9009\u62e9 / \u4e3a\u4f55\u8fd9\u6837\u7f29\u653e\uff1f

    \u8fd9\u4e00\u90e8\u5206\u5728 cy \u7684 PPT \u91cc\u5e76\u6ca1\u6709\u8be6\u7ec6\u8bf4\u660e\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u8fd9\u662f\u8fd9\u4e2a\u5206\u6790\u65b9\u6cd5\u6210\u7acb\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u56e0\u7d20\uff01

    \u4e5f\u8bb8\u4f60\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u53c8\u6216\u8005\u4f60\u4e86\u89e3\u4e86\u4e4b\u540e\u4e24\u79cd\u5206\u6790\uff0c\u53c8\u56de\u8fc7\u5934\u6765\u601d\u8003\u53d1\u73b0\uff0c\u8fd9\u91cc\u5176\u5b9e\u5b58\u5728\u53e6\u5916\u4e00\u79cd\u66f4\u7d27\u51d1\u7684\u7f29\u653e\u65b9\u6cd5\uff08\u751a\u81f3\u4e0d\u80fd\u8bf4\u201c\u7f29\u653e\u201d\uff09\uff0c\u89c2\u5bdf\u5230 \\(Size_{i}(X) =Size_{i-1}(P)\\)\uff0c\u6240\u4ee5\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &= 1 + Rank_{i}(P) - Rank_{i-1}(X) + \\underbrace{Rank_{i}(X) - Rank_{i-1}(P)}_{= 0} \\\\ &= 1 + Rank_{i}(P) - Rank_{i-1}(X) \\end{aligned} \\]

    \u4f46\u662f\u8fd9\u4e0d\u4fbf\u4e8e\u6211\u4eec\u4e4b\u540e\u7684\u4f20\u9012\u3002\u8fd8\u8bb0\u5f97\u6211\u4eec\u8981\u6c42\u7684\u76ee\u6807\u5417\uff1f

    \\[ \\hat{c}_{\\text{rotate }x\\text{ to root}} = \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\]

    \u6211\u4eec\u4e4b\u540e\u9700\u8981\u5bf9\u5404\u79cd \\(\\hat{c}\\) \u8fdb\u884c\u6c42\u548c\uff0c\u800c\u6bcf\u4e00\u6b21\u7684 \\(X,\\;P,\\;G\\) \u90fd\u662f\u4e0d\u540c\u7684\uff0c\u4e3a\u4e86\u5728\u6c42\u548c\u7684\u65f6\u5019\u5b9e\u73b0\u9519\u4f4d\u76f8\u51cf\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u7f29\u653e\u5f97\u5230\u7684\u7ed3\u679c\u5177\u6709\u4e00\u5b9a\u7684\u4f20\u9012\u6027\u8d28\uff0c\u6216\u8005\u8bf4\u5728\u6c42\u548c\u8fc7\u7a0b\u4e2d\u80fd\u591f\u8fbe\u5230\u88c2\u9879\u76f8\u6d88\u7684\u6548\u679c\u3002

    \u800c\u5bf9\u4e8e Splay \u6765\u8bf4\uff0c\u6211\u4eec\u7684\u64cd\u4f5c\u4f20\u9012\uff0c\u6b63\u662f\u901a\u8fc7\u4e0d\u65ad\u5c06\u6211\u4eec\u5173\u6ce8\u7684 \\(X\\) \u70b9\u9012\u5f52\u5730\u5411\u4e0a\u65cb\u8f6c\u5b9e\u73b0\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\\(\\Phi_{i}(X)\\) \u4e2d\u7684 \\(X\\)\uff0c\u5c31\u662f \\(\\Phi_{i-1}(X)\\) \u4e2d\u7684 \\(X\\)\uff0c\u5982\u6b64\u6211\u4eec\u6700\u7ec8\u53ef\u4ee5\u5f97\u5230 \\(\\Phi_{n}(X) - \\Phi_{0}(X)\\)\uff0c\u800c\u5176\u4e2d\u4e00\u4e2a\u662f\u6839\uff0c\u4e00\u4e2a\u662f\u6211\u4eec\u4e00\u5f00\u59cb\u6253\u7b97\u64cd\u4f5c\u7684\u90a3\u4e2a\u70b9\u3002

    \u4e8e\u662f\u6211\u4eec\u7406\u60f3\u7684\u7f29\u653e\u76ee\u6807\u5c31\u662f \\(k(Rank_{i}(X) - Rank_{i-1}(X)) \\;\\; \\text{where } k \\text{ is fixed for all the terms}\\)\u3002

    \u4e0d\u8fc7\u4f60\u53ef\u80fd\u53c8\u8981\u63d0\u95ee\u4e86\uff0czig \u5206\u6790\u7684\u7ed3\u679c\u91cc\u4e0d\u662f\u6709\u4e2a \\({c_{\\text{zig}}}_i = 1\\) \u5417\uff1f

    \u8fd9\u662f\u56e0\u4e3a zig \u6700\u591a\u53ea\u53d1\u751f\u4e00\u6b21\uff0c\u6240\u4ee5\u8fd9\u4e2a\u5e38\u6570\u662f\u6ca1\u6709\u5f71\u54cd\u7684\u3002

    \u771f\u7684\u9700\u8981\u90fd\u7f29\u653e\u5230\u76f8\u540c\u7684 k \u5417

    \u968f\u4e4b\u800c\u6765\u7684\uff0c\u4e00\u4e2a\u9700\u8981\u8ba8\u8bba\u7684\u95ee\u9898\u662f\u300c\\(\\text{where } k \\text{ is fixed for all the terms}\\)\u300d\u771f\u7684\u91cd\u8981\u5417\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u4e09\u4e2a\u90e8\u5206\u7f29\u653e\u51fa\u6765\u90fd\u5177\u6709\u76f8\u540c\u7684 \\(k\\) \u5417\uff1f

    \u9996\u5148\uff0c\u91cd\u8981\u80af\u5b9a\u662f\u91cd\u8981\u7684\uff0c\u53ea\u4e0d\u8fc7\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u7531\u4e8e\u6211\u4eec\u65cb\u8f6c\u7684\u65b9\u5411\u90fd\u662f\u5411\u4e0a\uff0c\u6240\u4ee5 \\(Rank_{i}(X) \\geq Rank_{i-1}(X)\\)\uff0c\u56e0\u6b64\u6211\u4eec\u53ea\u9700\u8981\u6700\u540e\u5c06\u5b83\u4eec\u4e00\u8d77\u90fd\u7f29\u653e\u5230 \\(k_{overall} = \\max\\{k_\\text{zig}, k_\\text{zig-zag}, k_\\text{zig-zig} \\}\\) \u5c31\u53ef\u4ee5\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig-zag","title":"zig-zag","text":"

    Amortized Analysis for Zig-Zag

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zag}}}_i &= {c_{\\text{zig-zag}}}_i + \\Phi_{i}(X)- \\Phi_{i-1}(G) \\\\ &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\end{aligned} \\]

    \u89c2\u5bdf\u914d\u56fe\uff0c\\(X\\) \u53c8\u4e00\u6b21\u7edd\u5730\u53cd\u51fb\uff0c\u6210\u4e3a\u5b83\u5bb6\u957f\u548c\u5b83\u5bb6\u957f\u7684\u5bb6\u957f\u5171\u540c\u7684\u5bb6\u957f\uff1b\\(G\\) \u635f\u5931\u6700\u60e8\u91cd\uff0c\u4e22\u6389\u4e86 \\(A,\\;B\\) \u4e24\u65cf\u5b50\u55e3\u3002

    \u5728\u8fd9\u6b21\u7684\u7f29\u653e\u4e2d\uff0c\u6839\u636e\u6211\u4eec\u4e4b\u524d\u5728 key-point \u91cc\u63d0\u5230\u7684\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u7f29\u653e\u5230 \\(k(Rank_{i}(X) - Rank_{i-1}(X))\\) \u7684\u5f62\u5f0f\uff0c\u5e76\u4e14\u7531\u4e8e zig-zig \u4f1a\u591a\u6b21\u53d1\u751f\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u5f97\u60f3\u529e\u6cd5\u641e\u6389\u8fd9\u91cc\u7684 \\({c_{\\text{zig-zag}}}_i = 2\\)\uff0c\u5426\u5219\u6700\u540e\u5c31\u4f1a\u51fa\u73b0\u4e00\u4e2a \\(2p(n)\\) \u7684 term\uff0c\u800c\u6211\u4eec\u7684\u8bc1\u660e\u76ee\u6807\u662f \\(\\log{N}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u5c06\u8fd9\u4e2a \\(2\\) \u6d88\u6389\u3002\u800c\u4e3a\u4e86\u6d88\u9664\u8fd9\u4e2a \\(2\\)\uff0c\u6211\u4eec\u9700\u8981\u5148\u5f15\u5165\u4e00\u4e2a\u5f15\u7406\uff1a

    Lemma 1

    \u7531\u4e8e \\(y = \\log{x}\\) \u662f\u5355\u8c03\u7684\u51f8\u51fd\u6570\uff0c\u6240\u4ee5\u6709 \\(\\frac{\\log{x} + \\log{b}}{2} \\leq \\log {\\frac{a+b}{2}}\\)\u3002

    \u800c\u5728 Splay \u7684\u5747\u644a\u590d\u6742\u5ea6\u5206\u6790\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u7684 \\(\\log{x}\\) \u6307\u7684\u662f \\(\\log_2{x}\\)\uff0c\u56e0\u6b64\u6709\uff1a

    \\[ \\begin{aligned} \\log{a} + \\log{b} &= 2\\left( \\frac{\\log{a} + \\log{b}}{2} \\right) \\\\ &\\leq 2\\left( \\log{\\frac{a+b}{2}} \\right) \\\\ &= 2\\left( \\log{(a+b)} - \\log{2} \\right) \\\\ &= 2 \\log{(a+b)} - 2 \\\\ \\end{aligned} \\]

    \u770b\u5230\u8fd9\u91cc\u51fa\u73b0\u4e86\u4e00\u4e2a \\(-2\\) \u6211\u4eec\u5c31\u80fd\u957f\u8212\u4e00\u53e3\u6c14\u4e86\uff0c\u8fd9\u4e0b \\({c_{\\text{zig-zag}}}_i = 2\\) \u6b7b\u5230\u4e34\u5934\u54af\uff01\u5bf9\u7167\u914d\u56fe\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a

    \\[ \\begin{aligned} Rank_{i}(P) + Rank_{i}(G) &= \\log{Size_{i}(P)} + \\log{Size_{i}(G)} \\\\ &\\leq 2\\log{\\left(Size_{i}(P)+Size_{i}(G)\\right)} - 2 & \\text{(Lemma 1)}\\\\ &\\leq 2\\log{\\left(Size_{i}(P)+Size_{i}(G)+1\\right)} - 2 \\\\ &\\leq 2\\log{Size_{i}(X)} - 2 \\\\ &\\leq 2Rank_{i}(X) - 2 \\\\ \\end{aligned} \\]

    \u56e0\u6b64\uff0c\u6211\u4eec\u80fd\u591f\u5f97\u5230\u8fd9\u4e9b\u76f8\u7b49\u6216\u4e0d\u7b49\u5173\u7cfb\uff1a

    \\[ \\left\\{ \\begin{aligned} Rank_{i}(X) &= Rank_{i-1}(G) \\\\ Rank_{i}(P) + Rank_{i}(G) &\\leq 2Rank_{i}(X) - 2 \\\\ Rank_{i-1}(P) + Rank_{i-1}(X) &\\geq 2Rank_{i-1}(X) \\end{aligned} \\right. \\]

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u5b9e\u73b0\u7f29\u653e\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zag}}}_i &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\\\ &= 2 + \\left( Rank_{i}(X) - Rank_{i-1}(G)\\right ) + \\left( Rank_{i}(P) + Rank_{i}(G) \\right) - \\left( Rank_{i-1}(P) + Rank_{i-1}(X) \\right) \\\\ &\\leq 2 + 0 + 2Rank_{i}(X) - 2 + 2Rank_{i-1}(X) \\\\ &= 2\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\end{aligned} \\]

    \u7686\u5927\u6b22\u559c\uff01

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#zig-zig","title":"zig-zig","text":"

    Amortized Analysis for Zig-Zig

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zig}}}_i &= {c_{\\text{zig-zig}}}_i + \\Phi_{i}(X)- \\Phi_{i-1}(G) \\\\ &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\end{aligned} \\]

    \u4e3a\u4e86\u5b9e\u73b0 zig-zig \u7684\u7f29\u653e\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5bf9 Lemma 1 \u8fdb\u884c\u4e00\u4e2a\u6d3b\u7528\u3002\u5bf9\u7167\u914d\u56fe\uff0c\u5f97\u5230\uff1a

    \\[ \\begin{aligned} Rank_{i}(G) + Rank_{i-1}(X) &\\leq 2\\log{\\left( \\underbrace{Size_{i}(G)}_{\\mathbf{C}+\\mathbf{D}+G} + \\underbrace{Size_{i-1}(X)}_{\\mathbf{A}+\\mathbf{B}+X} \\right)} - 2 & \\text{(Lemma 1)} \\\\ &\\leq 2\\log{\\left( Size_{i}(G) + Size_{i-1}(X) + 1 \\right)} - 2 & \\\\ &= 2\\log{\\left( Size_{i}(X) \\right)} - 2 \\\\ &= 2Rank_{i}(X) - 2 \\\\ Rank_{i}(G) &\\leq 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\end{aligned} \\]

    \u8fd9\u4e00\u6b65\u5f88\u96be\u60f3\uff0c\u4f46\u662f\u4e5f\u975e\u5e38\u5173\u952e\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u6709\u5982\u4e0b\u8fd9\u4e9b\u4e0d\u7b49\u5f0f\uff1a

    \\[ \\left\\{ \\begin{aligned} Rank_{i}(X) &= Rank_{i-1}(G) \\\\ Rank_{i}(G) &\\leq 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\\\ Rank_{i}(P) &\\leq Rank_{i}(X) \\\\ Rank_{i-1}(P) &\\geq Rank_{i-1}(X) \\end{aligned} \\right. \\]

    \u4e8e\u662f\u6211\u4eec\u5c31\u53ef\u4ee5\u5bf9\u5176\u8fdb\u884c\u8be1\u5f02\u7684\u7f29\u653e\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig-zig}}}_i &= 2 + Rank_{i}(X) - Rank_{i-1}(X) + Rank_{i}(P) - Rank_{i-1}(P) + Rank_{i}(G) - Rank_{i-1}(G) \\\\ &= 2 + \\left( Rank_{i}(X) - Rank_{i-1}(G) \\right) + Rank_{i}(G) + Rank_{i}(P) - Rank_{i-1}(P) - Rank_{i-1}(X) \\\\ &\\leq 2 + 0 + \\left( 2Rank_{i}(X) - Rank_{i-1}(X) - 2 \\right) + Rank_{i}(X) - Rank_{i-1}(X) - Rank_{i-1}(X) \\\\ &= 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\end{aligned} \\]

    \ud83d\ude29 \u81f3\u6b64\uff0c\u6211\u4eec\u603b\u7b97\u662f\u628a\u725b\u9b3c\u86c7\u795e\u7684 zig-zig \u7684\u8bc1\u660e\u4e5f\u7ed9\u641e\u5b9a\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec01/#\u7ed3\u8bba","title":"\u7ed3\u8bba","text":"

    Amortized Analysis for Splay

    \u81f3\u6b64\uff0c\u5bf9\u4e8e\u4e09\u79cd\u64cd\u4f5c\uff0c\u6211\u4eec\u90fd\u5f97\u5230\u4e86\u5b83\u4eec\u7684\u5747\u644a\u4e0a\u754c\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &\\leq 1 + Rank_{i}(X) - Rank_{i-1}(X) \\\\ {\\hat{c}_{\\text{zig-zag}}}_i &\\leq 2\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\\\ {\\hat{c}_{\\text{zig-zig}}}_i &\\leq 3\\left(Rank_{i}(X) - Rank_{i-1}(X)\\right) \\end{aligned} \\]

    \u6839\u636e\u6211\u4eec\u5728 key-point \u6846\u300c\u771f\u7684\u9700\u8981\u90fd\u7f29\u653e\u5230\u76f8\u540c\u7684 k \u5417\u300d\u4e2d\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u53ef\u4ee5\u5c06\u5b83\u4eec\u7684 \\(k\\) \u90fd\u7f29\u653e\u4e3a \\(3\\)\uff1a

    \\[ \\begin{aligned} {\\hat{c}_{\\text{zig}}}_i &\\leq 1 + 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\\\ {\\hat{c}_{\\text{zig-zag}}}_i &\\leq 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\\\ {\\hat{c}_{\\text{zig-zig}}}_i &\\leq 3\\left( Rank_{i}(X) - Rank_{i-1}(X) \\right) \\end{aligned} \\]

    \u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7684\u5747\u644a\u4e0a\u754c\uff1a

    \\[ \\begin{aligned} \\hat{c}_{\\text{rotate }x\\text{ to root}} &= \\hat{c}_{\\text{zig}} + \\sum{ {\\hat{c}_{\\text{zig-zag}}}_i } + \\sum{ {\\hat{c}_{\\text{zig-zig}}}_i } \\\\ &= O(1) + 3\\left( Rank_{N}(X) - Rank_{0}(X) \\right) \\\\ &= O(\\log{N}) \\end{aligned} \\]

    \u53ef\u4ee5\u4ed4\u7ec6\u60f3\u60f3\u6c42\u548c\u5f0f\u662f\u5982\u4f55\u201c\u76f8\u6d88\u201d\u5f97\u5230\u6700\u540e\u7684\u5f0f\u5b50\u7684\uff0c\u8fd9\u91cc\u7684 \\(\\sum {\\hat{c}_\\text{...}}_i\\) \u7684 \\(i\\) \u5e76\u4e0d\u662f\u5728\u6c42\u548c\u5f0f\u4e2d\u5404\u81ea\u8fde\u7eed\u7684\uff0c\u4f46\u662f\u4e09\u4e2a term \u653e\u5728\u4e00\u8d77\uff0c\u5219\u53ef\u4ee5\u56ca\u62ec \\(i\\in\\{1,2,...,N\\}\\)

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/","title":"Lecture 2 | Red Black Tree & B+ Tree","text":"

    \u7ea6 4971 \u4e2a\u5b57 43 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 25 \u5206\u949f

    \u8bf4\u660e

    \u800c\u4e3a\u4e86\u63d0\u9ad8\u7b14\u8bb0\u6574\u7406\u6548\u7387\uff0c\u53ef\u80fd\u4f1a\u8003\u8651\u7528\u66f4\u591a\u7684\u5f15\u7528\u548c\u66f4\u7b80\u5355\u7684\u8bed\u8a00\u3002\u5982\u679c\u60a8\u89c9\u5f97\u6709\u54ea\u91cc\u8bf4\u7684\u4e0d\u591f\u6e05\u695a\uff0c\u8bf7\u76f4\u63a5\u5728\u8bc4\u8bba\u533a\u72e0\u72e0 blame \u6211\uff01

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u7ea2\u9ed1\u6811","title":"\u7ea2\u9ed1\u6811","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/rbtree/

    Wikipedia: https://en.wikipedia.org/wiki/Red%E2%80%93black_tree

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u987e\u540d\u601d\u4e49\uff0c\u7ea2\u9ed1\u6811(Red Black Tree)\u5c31\u662f\u4e00\u79cd\u8282\u70b9\u5206\u7c7b\u4e3a\u7ea2\u9ed1\u4e24\u8272\u7684\uff0c\u6bd4\u8f83\u5e73\u8861\u7684\u4e8c\u53c9\u641c\u7d22\u6811\u3002\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e8e AVL \u6811\uff0c\u7ea2\u9ed1\u6811\u7684\u201c\u5e73\u8861\u201d\u6027\u8d28\u662f\u901a\u8fc7\u9ed1\u9ad8(black height)\u6765\u5b9a\u4e49\u7684\u3002\u63a5\u4e0b\u6765\u4f9d\u6b21\u7ed9\u51fa\u7ea2\u9ed1\u6811\u7684\u5b9a\u4e49\u548c\u9ed1\u9ad8\u7684\u5b9a\u4e49\u3002

    Red Black Tree

    \u7ea2\u9ed1\u6811\u662f\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\u7684\u4e00\u79cd\u4e8c\u53c9\u641c\u7d22\u6811\uff1a

    Properties of RBTree

    @cy's PPT

    1. Every node is either red or black.
    2. The root is black.
    3. Every leaf (NIL) is black.
    4. if a node is red, then both its children are black.
    5. For each node, all simple paths from the node to descendant leaves contain the same number of black nodes.

    ch \u8001\u5e08\u8bf4\uff0c\u5e0c\u671b\u6211\u4eec\u80fd\u628a\u8fd9\u4e94\u6761\u6027\u8d28\u719f\u7ec3\u8bb0\u4f4f\uff0c\u600e\u4e48\u53ef\u80fd\uff08\u9003\uff09\u3002

    \u8bf4\u660e

    \u7531\u4e8e\u8fd9\u91cc\u7684\u201c\u53f6\u5b50\u7ed3\u70b9\u201d\u88ab\u91cd\u65b0\u5b9a\u4e49\u4e86\uff0c\u4e3a\u4e86\u63cf\u8ff0\u65b9\u4fbf\uff0c\u6211\u73b0\u5728\u79f0\u6240\u6709\u4e24\u4e2a\u5b50\u7ed3\u70b9\u90fd\u662f NIL \u7684\u7ed3\u70b9\u4e3a\u672b\u7aef\u7ed3\u70b9\uff08\u4e5f\u5c31\u662f\u901a\u4fd7\u610f\u4e49\u4e0a\u7684\u53f6\u5b50\u7ed3\u70b9\uff09\u3002\u800c\u8fd9\u4e2a\u5b9a\u4e49\u53ea\u662f\u6211\u81ea\u5df1\u8bf4\u8bf4\u7684\uff01

    @Wiki
    1. Every node is either red or black.
    2. All NIL nodes (figure above) are considered black.
    3. A red node does not have a red child.
    4. Every path from a given node to any of its descendant NIL nodes goes through the same number of black nodes.
    @OI Wiki
    1. \u6bcf\u4e00\u4e2a\u8282\u70b9\u8981\u4e48\u662f\u7ea2\u8272\uff0c\u8981\u4e48\u662f\u9ed1\u8272\uff1b
    2. NIL \u8282\u70b9\uff08\u7a7a\u53f6\u5b50\u8282\u70b9\uff09\u4e3a\u9ed1\u8272\uff1b
    3. \u7ea2\u8272\u8282\u70b9\u7684\u5b50\u8282\u70b9\u5fc5\u987b\u4e3a\u9ed1\u8272\uff1b
    4. \u4ece\u6839\u8282\u70b9\u5230 NIL \u8282\u70b9\u7684\u6bcf\u6761\u8def\u5f84\u4e0a\u7684\u9ed1\u8272\u8282\u70b9\u6570\u91cf\u76f8\u540c\uff1b

    black height, bh

    \u7279\u5b9a\u8282\u70b9\u7684\u9ed1\u9ad8\uff0c\u7b49\u4e8e\u8be5\u8282\u70b9\u5230\u53f6\u7ed3\u70b9\u5230\u7b80\u5355\u8def\u5f84\u4e2d\uff08\u4e0d\u5305\u62ec\u81ea\u8eab\uff09\uff0c\u9ed1\u8272\u8282\u70b9\u7684\u6570\u91cf\u3002

    \u63a5\u4e0b\u6765\u4e3a\u4e86\u52a0\u6df1\u7406\u89e3\uff0c\u6709\u4e00\u4e9b\u8fa8\u6790\u53ef\u4ee5\u505a\uff1a

    T1T2 \u9898\u9762\u7b54\u6848

    \u4e0b\u56fe\u7684\u7ea2\u9ed1\u6811\u662f\u5426\u5408\u6cd5\uff1f

    \u4e0d\u5408\u6cd5\u3002

    16 \u53f7\u8282\u70b9\u7684\u53f3\u513f\u5b50\u662f\u4e00\u4e2a\u9ed1\u53f6\u5b50\uff0c\u800c\u8fd9\u4e2a\u53f6\u5b50\u5230\u6839\u7684\u8def\u5f84\u4e0a\u53ea\u6709 3 \u4e2a\u9ed1\u8282\u70b9\uff0c\u800c\u5176\u4ed6\u53f6\u5b50\u5230\u6839\u90fd\u6709 4 \u4e2a\u9ed1\u8282\u70b9\u3002

    \u6240\u4ee5\u6211\u4eec\u9700\u8981\u8b66\u60d5\u53ea\u6709\u4e00\u4e2a\u975e\u53f6\u513f\u5b50\u7684\u7ea2\u8272\u8282\u70b9\u3002

    \u9898\u9762\u7b54\u6848

    \u4e0b\u56fe\u7684\u7ea2\u9ed1\u6811\u662f\u5426\u5408\u6cd5\uff1f

    \u5408\u6cd5\u3002

    \u6839\u636e T1 \u7684\u89e3\u6790\uff0c\u6211\u4eec\u5f97\u5230\u8fd9\u6837\u4e00\u4e2a\u7ed3\u8bba\uff1a

    \u5408\u6cd5\u7ea2\u9ed1\u6811\u4e0d\u5b58\u5728\u53ea\u6709\u4e00\u4e2a\u975e\u53f6\u5b50\u8282\u70b9\u7684\u7ea2\u8272\u8282\u70b9\uff01

    or

    \u5408\u6cd5\u7ea2\u9ed1\u6811\u7684\u7ea2\u8272\u8282\u70b9\u7684\u4e24\u4e2a\u5b50\u8282\u70b9\u4e00\u5b9a\u90fd\u662f\u53f6\u5b50\u6216\u90fd\u4e0d\u662f\u53f6\u5b50\uff01

    \u6b64\u5916\uff0c\u5173\u4e8e\u7ea2\u9ed1\u6811\u7684\u9ad8\uff0c\u6211\u4eec\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    property about height of RBTree

    \u4e00\u4e2a\u6709 \\(N\\) \u4e2a\u5185\u90e8\u8282\u70b9\uff08\u4e0d\u5305\u62ec\u53f6\u5b50\u7ed3\u70b9\uff09\u7684\u7ea2\u9ed1\u6811\uff0c\u5176\u9ad8\u5ea6\u6700\u5927\u4e3a \\(2\\log_2 (N+1)\\)\u3002

    the proof of the property

    \u5173\u4e8e\u9ed1\u9ad8\u548c\u70b9\u6570\u7684\u5173\u7cfb\u3002

    1. \u9996\u5148\u6211\u4eec\u6709 \\(N \\geq 2^{bh}-1\\)\uff0c\u4e5f\u5c31\u662f \\(bh \\leq \\log_2 (N+1)\\)\uff1b
    2. \u7136\u540e\u663e\u7136\u6709 \\(2 bh(Tree) >= h(Tree)\\)
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u63d0\u9192

    \u6211\u4eec\u8fd9\u91cc\u4ecb\u7ecd\u7684\u90fd\u662f bottom-up \u7684\u601d\u8def\uff0c\u4e0d\u540c\u4e8e AVL \u6811\uff0c\u7ea2\u9ed1\u6811\u662f\u5b58\u5728 top-down \u7684\u64cd\u4f5c\u65b9\u6cd5\u7684\uff0c\u800c\u8fd9\u4e5f\u662f\u7ea2\u9ed1\u6811\u4e00\u4e2a\u975e\u5e38\u5f3a\u5927\u7684\u4f18\u52bf\uff0c\u5b58\u5728 top-down \u7684\u5904\u7406\u65b9\u6cd5\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u8fdb\u884c\u66f4\u5feb\u7684\u5e76\u884c\u64cd\u4f5c\u3002\u4f46\u662f\u6211\u4eec\u4e0d\u5728\u8fd9\u91cc\u8be6\u7ec6\u5c55\u5f00\u3002

    \u540c AVL \u6811\u7684\u8c03\u6574\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u7ea2\u9ed1\u6811\u7684\u8c03\u6574\u64cd\u4f5c\u4e5f\u662f\u5de6\u53f3\u5bf9\u79f0\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4e5f\u4ecd\u7136\u53ea\u8ba8\u8bba\u4e00\u4fa7\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u63d2\u5165","title":"\u63d2\u5165","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u9ed1\u9ad8\u6709\u8d21\u732e\u7684\u53ea\u6709\u9ed1\u8272\u8282\u70b9\uff0c\u56e0\u6b64 NIL \u8282\u70b9\u88ab\u4e00\u4e2a\u7ea2\u8272\u8282\u70b9\u7f6e\u6362\u5e76\u4e0d\u4f1a\u6539\u53d8\u4e00\u9897\u7ea2\u9ed1\u6811\u7684\u9ed1\u9ad8\uff0c\u56e0\u4e3a\u7ea2\u8272\u8282\u70b9\u8fd8\u4f1a\u6709\u4e00\u5c42 NIL \u5b50\u8282\u70b9\uff1b\u7136\u800c\u5bf9\u4e8e\u7ea2\u8272\u8282\u70b9\uff0c\u5374\u6709\u7740\u7ea2\u8272\u7ed3\u70b9\u4e92\u4e0d\u76f8\u90bb\u7684\u9650\u5236\u3002

    \u56e0\u6b64\uff0c\u201c\u63d2\u5165\u201d\u64cd\u4f5c\u7684\u4e3b\u8981\u601d\u8def\u5c31\u662f\uff0c\u5148\u5c06\u6574\u4e2a\u7ea2\u9ed1\u6811\u5f53\u4f5c\u4e00\u4e2a\u666e\u901a\u7684\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5c06\u76ee\u6807\u6570\u636e\u63d2\u5165\u5230\u6811\u7684\u672b\u7aef\uff08\u4e5f\u5c31\u662f\u7f6e\u6362\u4e00\u4e2a NIL \u8282\u70b9\uff09\uff0c\u5e76\u5c06\u5b83\u67d3\u4e3a\u7ea2\u8272\uff0c\u518d\u8c03\u6574\u4f7f\u4e4b\u5728\u4fdd\u8bc1\u9ed1\u9ad8\u4e0d\u53d8\u7684\u60c5\u51b5\u4e0b\uff0c\u6ee1\u8db3\u7ea2\u8272\u8282\u70b9\u4e0d\u80fd\u76f8\u90bb\u7684\u8981\u6c42\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u8bb0\u8fd9\u4e2a\u88ab\u63d2\u5165\u7684\u8282\u70b9\u4e3a x\uff0c\u4efb\u610f\u4e00\u4e2a\u8282\u70b9 node \u7684\u5bb6\u957f\u8282\u70b9\u4e3a node.p\uff0c\u5219\uff1a

    1. \u5982\u679c x.p \u662f\u9ed1\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u4e0d\u9700\u8981\u505a\u4efb\u4f55\u8c03\u6574\uff1b
    2. \u5982\u679c x.p \u662f\u7ea2\u8272\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u8fdb\u884c\u8c03\u6574\uff1b
      • \u6b64\u65f6\u56e0\u4e3a\u539f\u6765\u7684\u6811\u7b26\u5408\u7ea2\u9ed1\u6027\u8d28\uff0cx.p.p \u5fc5\u5b9a\u5b58\u5728\uff08\u7ea2 x.p \u4e0d\u80fd\u662f\u6839\uff09\u4e14\u5fc5\u5b9a\u662f\u9ed1\u8272\u7684\uff1b

    \u6839\u636e\u8fd9\u4e9b\u8ba8\u8bba\uff0c\u6211\u4eec\u5c31\u80fd\u5217\u4e3e\u51fa\u6765\u4e00\u4e2a\u7ea2\u8272\u7684\u70b9\u88ab\u63d2\u5165\u540e\uff0c\u5728 2. \u7684\u60c5\u51b5\u4e0b\u6240\u6709\u7684\u521d\u59cb\u60c5\u51b5\uff0c\u5373\u4e0b\u9762\u7b2c\u4e00\u5f20\u56fe\u3002

    \u7531\u4e8e\u7ea2\u9ed1\u6811\u7684\u64cd\u4f5c\u4e2d\uff0c\u6709\u4e00\u90e8\u5206\u9700\u8981\u8fdb\u884c\u9012\u5f52\u8f6c\u79fb\uff0c\u800c\u5176\u4e2d\u4e2d\u95f4\u6b65\u9aa4\u51fa\u73b0\u4e86\u5f88\u591a\u540c\u6784\u7684\u7ed3\u6784\uff0c\u6240\u4ee5\u4e3a\u4e86\u7b80\u5316\u8bf4\u660e\uff0c\u6211\u4eec\u5bf9\u5176\u8fdb\u884c\u7edf\u4e00\uff0c\u6240\u6709\u60c5\u51b5\u90fd\u88ab\u5f52\u7eb3\u4e3a\u4e0a\u9762\u7b2c\u4e8c\u5f20\u56fe\u3002

    \u800c\u7b2c\u4e8c\u5f20\u56fe\u4e2d\u63d0\u5230\u7684\u6a59\u8272\u7ed3\u70b9\uff0c\u4e5f\u5c31\u662f\u6807\u4e3a\u201c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u201d\u7684\u7ed3\u70b9\uff0c\u5b9e\u9645\u8fc7\u7a0b\u4e2d\u5e76\u4e0d\u4e00\u5b9a\u6307\u7684\u662f\u88ab\u300c\u63d2\u5165\u300d\u7684\u90a3\u4e2a\u70b9\uff0c\u4e5f\u53ef\u80fd\u662f\u5728 case 1 \u5411\u4e0a\u9012\u5f52\u65f6\uff0c\u7b80\u5316\u7684\u539f\u6765\u90a3\u9897\u5b50\u6811\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u91cc\u7684\u201c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u53ca\u5176\u5b50\u6811\u201d\uff0c\u5b9e\u9645\u4e0a\u53ef\u80fd\u662f\u6307\u300c\u5bfc\u81f4\u7ea2\u9ed1\u6027\u8d28\u88ab\u7834\u574f\u7684\u7ea2\u6839\u5b50\u6811\u300d\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u6765\u8ba8\u8bba\u5404\u79cd\u60c5\u51b5\u8981\u600e\u4e48\u5904\u7406\u3002

    \u8bf4\u660e

    \u8fd9\u91cc case 1 ~ case 3 \u7684\u7f16\u53f7\u4e3b\u8981\u662f\u4e3a\u4e86\u548c\u8bfe\u7a0b ppt \u5bf9\u6807\uff0c\u4f46\u662f\u63a5\u4e0b\u6765\u4f60\u4f1a\u53d1\u73b0\u6211\u662f\u6309\u7167 case 3 -> case 1 \u6765\u4ecb\u7ecd\u64cd\u4f5c\u7684\uff0c\u8fd9\u662f\u56e0\u4e3a\u6211\u89c9\u5f97\u8fd9\u6837\u5b89\u6392\u66f4\u5408\u7406\uff0c\u800c\u975e\u6392\u7248\u6df7\u4e71\u3002

    Insertion / case 3

    \u5bf9\u4e8e case 3\uff0c \u6211\u4eec\u9ad8\u5174\u5730\u53d1\u73b0\uff0c\u8fd9\u6837\u7684\u4e00\u6b21\u67d3\u8272\u548c\u4e00\u6b21\u65cb\u8f6c\u521a\u597d\u80fd\u8ba9\u8fd9\u68f5\u5b50\u6811\u5b8c\u6210\u8c03\u6574\uff01

    Insertion / case 2

    \u5bf9\u4e8e case 2\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u4e00\u4e2a Rotation \u64cd\u4f5c\u5c06\u5b83\u8f6c\u5316\u4e3a case 3\u3002

    \u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u7ec6\u5fc3\u7684\u5c0f\u670b\u53cb\u5df2\u7ecf\u53d1\u73b0\u4e86\uff0c\u4ece case 2 -> case 3 -> done \u7684\u8fc7\u7a0b \u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a LR Rotation\uff01

    Insertion / case 1

    \u5bf9\u4e8e case 1\uff0c\u56fe\u4e2d\u7684\u4e24\u79cd\u60c5\u51b5\u662f\u7b49\u4ef7\u7684\u3002\u6240\u4ee5\u6211\u4eec\u53ea\u5c55\u793a\u5176\u4e2d\u4e00\u79cd\u3002

    \u6211\u4eec\u53ea\u9700\u8981\u5c06\u56fe\u4e2d\u7684\u6839\u8282\u70b9\u67d3\u7ea2\uff0c\u5c06\u6839\u7684\u4e24\u4e2a\u5b50\u8282\u70b9\u67d3\u9ed1\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u9ed1\u8282\u70b9\u201c\u4e0b\u653e\u201d\u3002

    \u901a\u8fc7\u7b2c\u4e00\u6b65\u64cd\u4f5c\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1\u8fd9\u6574\u4e2a\u5b50\u6811\u5fc5\u5b9a\u5e73\u8861\u3001\u4e0d\u5f71\u54cd\u5bb6\u957f\u8282\u70b9\u7684\u9ed1\u9ad8\uff08\u9664\u4e86\u5bb6\u957f\u662f\u6839\u7684\u60c5\u51b5\uff09\u4e14\u7ea2\u70b9\u4e0d\u90bb\u7684\u3002

    \u7136\u800c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u8fd9\u4e2a\u6839\u7684\u5bb6\u957f\u8282\u70b9\u662f\u5426\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u56e0\u6b64\u505a\u5206\u7c7b\u8ba8\u8bba\u3002\u5018\u82e5\u5176\u6839\u7684\u5bb6\u957f\u8282\u70b9\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u8fd8\u9700\u8981\u5411\u4e0a\u9012\u5f52\uff0c\u7ee7\u7eed\u8c03\u6574\uff0c\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u8f6c\u5316\u4e3a\u5176\u4ed6 case\uff1b\u82e5\u8fd9\u5b50\u6811\u7684\u6839\u6ca1\u6709\u5bb6\u957f\u8282\u70b9\uff0c\u5219\u76f4\u63a5\u67d3\u9ed1\u7ea2\u6839\u5373\u53ef\uff1b\u800c\u5018\u82e5\u5b50\u6811\u6839\u8282\u70b9\u7684\u5bb6\u957f\u8282\u70b9\u662f\u9ed1\u8282\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u8c03\u6574\u5b8c\u6bd5\u4e86\u3002

    \u5728\u8fd9\u4e09\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u53ea\u6709 case 1 \u7684\u8f6c\u5316\u4f1a\u5bfc\u81f4\u6211\u4eec\u9012\u5f52\u5411\u4e0a\uff0c\u800c case 2 \u5411 case 3 \u7684\u8f6c\u5316\u5e76\u4e0d\u4f1a\u5bfc\u81f4\u6211\u4eec\u6539\u53d8\u5173\u6ce8\u7684\u5b50\u6811\u7684\u8303\u56f4\u3002

    \u4e3a\u4e86\u66f4\u6e05\u6670\u5730\u770b\u51fa\u5404\u4e2a\u65b9\u6cd5\u4e4b\u95f4\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u753b\u4e00\u4e2a\u72b6\u6001\u673a\uff1a

    graph LR;\nA[\"case 1\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD([\"finish\"])\n\nA ===>|\"C\"| B --->|\"R\"| C\nA ===>|\"C\"| A --->|\"C\"| D\nA ===>|\"C\"| C --->|\"C&R\"| D

    \u6ce8\u610f\uff0c\u72b6\u6001\u673a\u4e2d\u7684\u7c97\u7ebf\u8868\u793a\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u201c\u5b50\u6811\u201d\u5411\u4e0a\u6500\u5347\u4e86\u4e00\u7ea7\uff1b\u800c\u7ec6\u7ebf\u8868\u793a\u6211\u4eec\u5173\u6ce8\u7684\u5b50\u6811\u4ecd\u7136\u662f\u8fd9\u4e00\u5c42\u7684\u90a3\u4e00\u68f5\u3002\u4ee5\u53ca\uff0cC \u8868\u793a\u67d3\u8272\u64cd\u4f5c\uff0cR \u8868\u793a\u65cb\u8f6c\u64cd\u4f5c\u3002

    \u5176\u4e2d\uff0c\u4efb\u4f55\u4e00\u4e2a\u60c5\u51b5\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u60c5\u51b5\u3002\u6240\u4ee5\u53ef\u4ee5\u6570\u51fa\uff0c\u5230\u8fbe finish \u7684\u8def\u5f84\u4e2d\uff0c\u6700\u591a\u51fa\u73b0 2 \u6b21 Rotation\uff08case 2 -> case 3 -> finish\uff09\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u5220\u9664","title":"\u5220\u9664","text":"

    \u5173\u4e8e\u5220\u9664\u64cd\u4f5c\uff0c\u4e0b\u9762\u8fd9\u4e2a\u89c6\u9891\u8bb2\u7684\u5f88\u6e05\u6670\uff01\u53ea\u4e0d\u8fc7 case 1 \u53ef\u80fd\u8fd8\u6709\u4e9b\u7ec6\u8282\u9700\u8981\u6ce8\u610f\u3002

    \ud83d\udc49 \u7ea2\u9ed1\u6811\u5feb\u901f\u5165\u95e8 - 04\u5220\u9664

    \u8981\u5220\u9664\u67d0\u4e2a\u8282\u70b9 x\uff0c\u6211\u4eec\u9996\u5148\u8981\u627e\u5230\u5b83\uff0c\u5728 BST \u4e2d\u627e\u5230\u67d0\u4e2a x \u7684\u5f00\u9500\u4e3a \\(O(\\log N)\\)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u8981\u5220\u9664\u8fd9\u4e2a\u4efb\u610f\u4f4d\u7f6e\u7684\u8282\u70b9\uff0c\u8fd9\u52bf\u5fc5\u8ba9\u7ea2\u9ed1\u6811\u7684\u7ed3\u6784\u53d1\u751f\u53d8\u5316\u3002\u6b64\u5916\uff0c\u7ea2\u9ed1\u6027\u8d28\u7684\u7ef4\u62a4\u4e5f\u662f\u4e00\u4e2a\u8ba9\u4eba\u5934\u75bc\u7684\u95ee\u9898\uff0c\u56e0\u6b64\uff0c\u6211\u4eec\u5bf9\u8fd9\u4e9b\u60c5\u51b5\u505a\u5206\u7c7b\u8ba8\u8bba\uff1a

    \u6ca1\u6709\u975eNIL\u5b50\u8282\u70b9 \u6709\u4e00\u4e2a\u975eNIL\u5b50\u8282\u70b9 \u6709\u4e24\u4e2a\u975eNIL\u5b50\u8282\u70b9 \u76f4\u63a5\u7528NIL\u66ff\u4ee3 \u76f4\u63a5\u5220\u9664\uff0c\u7528\u5b50\u8282\u70b9\u66ff\u4ee3\u5b83 \u5c06\u503c\u4e0e\u5de6\u5b50\u6811\u6700\u5927\u503c\u6216\u53f3\u5b50\u6811\u6700\u5c0f\u503c\u4ea4\u6362\uff0c\u989c\u8272\u4e0d\u6362\uff0c\u7136\u540e\u5220\u9664\u76ee\u6807\u70b9

    \u5176\u4e2d\uff0c\u6bcf\u4e00\u9879\u64cd\u4f5c\u90fd\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u70b9\u7684\u6d88\u5931\uff08\u6bd5\u7adf\u662f\u5220\u9664\uff09\uff0c\u800c\u5982\u679c\u6d88\u5931\u7684\u662f\u7ea2\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u5c06\u4e0d\u4f1a\u5f71\u54cd\u9ed1\u9ad8\uff1b\u800c\u5982\u679c\u6d88\u5931\u7684\u662f\u9ed1\u8272\u8282\u70b9\uff0c\u90a3\u4e48\u5c06\u4f1a\u5bfc\u81f4\u9ed1\u9ad8\u51cf\u5c11\u4e00\uff0c\u6b64\u65f6\u6211\u4eec\u9700\u8981\u505a\u8fdb\u4e00\u6b65\u64cd\u4f5c\u3002

    \u8bf4\u660e

    \u867d\u7136\u6211\u60f3\u5c3d\u53ef\u80fd\u62df\u5408 cy \u7684 ppt\uff0c\u4f46\u662f\u6211\u7b2c\u4e00\u904d\u5b9e\u5728\u6ca1\u770b\u61c2\uff0c\u6240\u4ee5 case \u7684\u7f16\u53f7\u6211\u5c31\u6309\u7167\u4e0a\u9762\u90a3\u4e2a\u89c6\u9891\u6765\u4e86\u3002

    \u8fd9\u662f case \u5e8f\u53f7\u7684\u5bf9\u5e94\u5173\u7cfb\uff1a

    my cy's my cy's case 1 case 2 case 2 case 4 case 3 case 3 case 4 case 1

    \u6211\u4eec\u6839\u636e\u60c5\u51b5\uff0c\u5c06\u60c5\u51b5\u5206\u4e3a\u56db\u79cd\uff1a

    \u9700\u8981\u505a\u4e00\u4e0b\u7b80\u5355\u8bf4\u660e\uff0c\u7c7b\u6bd4\u6211\u4eec\u5728#\u63d2\u5165\uff0c\u5728\u5220\u9664\u8fc7\u7a0b\u4e2d\u4e5f\u5b58\u5728\u9700\u8981\u5411\u4e0a\u9012\u5f52\u7684\u60c5\u51b5\u3002\u4e0e\u300c\u88ab\u63d2\u5165\u7684\u7ea2\u8272\u8282\u70b9\u300d\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u8fd9\u91cc\u7684\u300c\u9700\u8981\u88ab\u5220\u9664\u7684\u76ee\u6807\u70b9\u300d\uff0c\u4e5f\u5e94\u5f53\u88ab\u770b\u4f5c\u300c\u5bfc\u81f4\u8c03\u6574\u51fa\u73b0\u7684\u5b50\u6811\u300d\uff0c\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u53ef\u4ee5\u5b9a\u4e49\u6210\u300c\u7531\u4e8e\u5220\u9664\u4e86\u67d0\u4e2a\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\uff0c\u8bf7\u8bb0\u4f4f\u8fd9\u4e2a\u5b9a\u4e49\uff0c\u8fd9\u4f1a\u8ba9\u4e4b\u540e\u7684\u9012\u5f52\u64cd\u4f5c\u53d8\u5f97\u81ea\u7136\u3002

    \u4f55\u65f6\u5220\u9664\u90a3\u4e2a\u7ed3\u70b9\uff1f

    \u867d\u7136\u6211\u4eec\u5bf9\u300c\u9700\u8981\u88ab\u5220\u9664\u7684\u76ee\u6807\u70b9\u300d\u8fdb\u884c\u4e86\u9012\u5f52\u7684\u6269\u5c55\u5b9a\u4e49\uff0c\u4f46\u662f\u5728\u7b2c\u4e00\u5c42\u6211\u4eec\u5c31\u53ef\u4ee5\u76f4\u63a5\u5c06\u5b83\u5220\u6389\u4e86\u3002\u800c\u8fd9\u4e2a\u70b9\u88ab\u5220\u9664\u9020\u6210\u7684\u5f71\u54cd\uff0c\u5df2\u7ecf\u7531\u300c\u7531\u4e8e\u5220\u9664\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\u7ee7\u627f\u4e86\u3002

    \u5728\u4e4b\u540e\u7684\u914d\u56fe\u4e2d\uff0c\u6211\u4eec\u90fd\u4e0d\u4f1a\u5c55\u793a x \u662f\u5982\u4f55\u88ab\u5220\u6389\u7684\uff0c\u800c\u662f\u5728\u7ed3\u679c\u56fe\u4e2d\u4fdd\u7559 x\u3002\u5982\u679c\u8bf4 x \u5c31\u662f\u6211\u4eec\u4e00\u5f00\u59cb\u8981\u5220\u9664\u7684\u90a3\u4e2a\u70b9\uff0c\u90a3\u4e48\u6211\u4eec\u5e94\u5f53\u5220\u6389 x\uff0c\u76f4\u63a5\u6362\u6210 NIL\uff1b\u5982\u679c x \u662f\u5728\u4f20\u9012\u8fc7\u7a0b\u4e2d\uff0c\u8868\u793a\u300c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\u7684\u6839\uff0c\u90a3\u4e48\u4e0d\u7528\u505a\u989d\u5916\u5904\u7406\u3002

    \u7c7b\u4f3c\u4e8e\u6211\u4eec\u5728\u300cInsertion / case 3\u300d\u91cc\u63d0\u5230\u7684\u201c\u4e0b\u653e\u201d\u9ed1\u8282\u70b9\uff0c\u5220\u9664\u64cd\u4f5c\u7684\u601d\u8def\u57fa\u672c\u4e0a\u662f\u201c\u4e0a\u653e\u201d\u9ed1\u8282\u70b9\uff0c\u6216\u8005\u8bf4\u201c\u5438\u7eb3\u201d\u9ed1\u8282\u70b9\u3002\u8fd9\u4e2a\u201c\u5438\u7eb3\u201d\u7684\u884c\u4e3a\uff0c\u6307\u7684\u662f\u4e00\u4e2a\u9ed1\u70b9\uff0c\u539f\u6765\u53ea\u4e3a\u53f3\u5b50\u6811\u4e2d\u7684\u6240\u6709\u8def\u5f84\u63d0\u4f9b\u4e86\u9ed1\u9ad8\uff0c\u73b0\u5728\u7531\u4e8e\u5b83\u7684 sibling \u5b50\u6811\u4e2d\u5c11\u4e86\u4e00\u4e2a\u9ed1\u8272\u8282\u70b9\uff0c\u6211\u4eec\u5c06\u8fd9\u4e2a\u9ed1\u8272\u8282\u70b9\u8f6c\u79fb\u5230\u5b83\u4eec\u7684\u5bb6\u957f\u8282\u70b9\u8282\u70b9\uff0c\u4e8e\u662f\u8fd9\u4e2a\u8282\u70b9\u540c\u65f6\u4e3a\u5de6\u53f3\u5b50\u6811\u7684\u6240\u6709\u8def\u5f84\u90fd\u8d21\u732e\u4e86\u9ed1\u9ad8\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u9010\u4e2a\u5206\u6790\u53d8\u5316\uff1a

    Deletion / case 1

    \u867d\u7136\u5927\u90e8\u5206\u6559\u7a0b\u90fd\u628a case 1 \u5f53\u4f5c\u4e00\u4e2a case\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5b8c\u5168\u53ef\u4ee5\u628a\u5b83\u6309\u7167 a \u8282\u70b9\u7684\u7ea2\u9ed1\uff0c\u5206\u4e3a\u4e24\u79cd\u60c5\u51b5\u3002

    Deletion / case 1.1

    \u5f53 a \u4e3a\u7ea2\u6839\u65f6\uff0c\u7531\u4e8e x \u8d21\u732e\u4e86\uff08\u76f8\u5bf9\u4e8e\u539f\u7ea2\u9ed1\u6811\uff09-1 \u7684\u9ed1\u9ad8\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6574\u4e2a\u5b50\u6811\u8d21\u732e\u7684\u9ed1\u9ad8\u4e0d\u53d8\uff0c\u6211\u4eec\u8003\u8651\u628a w \u7684\u9ed1\u9ad8\u201c\u4e0a\u653e\u201d\u5230 a \u4e0a\uff0c\u4e5f\u5c31\u662f\u4ece\u4e0b\u9762\u201c\u5438\u7eb3\u201d\u4e0a\u6765\u3002

    Deletion / case 1.2

    \u5f53 a \u4e3a\u9ed1\u6839\u65f6\uff0c\u6211\u4eec\u6ca1\u6709\u7a7a\u4f59\u7684\u4f4d\u7f6e\u6765\u201c\u5438\u7eb3\u201d w \u7684\u9ed1\u9ad8\uff0c\u4f46\u662f\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u7684\u4e0d\u5e73\u8861\u662f\u5fc5\u987b\u89e3\u51b3\u7684\uff0c\u800c\u6211\u4eec\u7edd\u4e0d\u80fd\u5bc4\u5e0c\u671b\u4e8e\u201c\u5728\u4e0d\u77e5\u9053\u6709\u6ca1\u6709\u7ea2\u8272\u8282\u70b9\u7684 b \u548c c \u7684\u5b50\u6811\u4e2d\u53bb\u5bfb\u627e\u7ea2\u8272\u8282\u70b9\u201d\u8fd9\u4e2a\u60f3\u6cd5\u3002

    \u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4eff\u7167\u300cInsertion / case 3\u300d\uff0c\u5c06\u6574\u4e2a\u6811\u6807\u8bb0\u4e3a\u7070\u8272\u2014\u2014\u300c\u7531\u4e8e\u5220\u9664\u7ed3\u70b9\uff0c\u9ed1\u9ad8 -1 \u7684\u5b50\u6811\u300d\uff0c\u7136\u540e\u8fdb\u4e00\u6b65\u6839\u636e\u5176\u5bb6\u957f\u8282\u70b9\u7684\u60c5\u51b5\u9012\u5f52\u5230\u5176\u4ed6 case\u3002\u5176\u4e2d\uff0c\u5f53\u6211\u4eec\u9012\u5f52\u5230 a \u662f\u6574\u4e2a\u6811\u7684\u6839\u65f6\u53ef\u4ee5\u9000\u51fa\uff0c\u56e0\u4e3a\u8fd9\u76f8\u5f53\u4e8e\u6574\u4e2a\u6811\u7684\u9ed1\u9ad8 -1\uff0c\u4e0d\u5f71\u54cd\u7ea2\u9ed1\u6027\u8d28\u3002

    Deletion / case 2

    \u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

    1. \u5c06 w \u67d3\u4e3a a \u7684\u989c\u8272\uff0c\u518d\u5c06 a \u548c c \u67d3\u6210\u9ed1\u8272\uff1b
    2. \u5c06 a \u5de6\u65cb\uff0c\u4f7f w \u6210\u4e3a\u8fd9\u4e2a\u5b50\u6811\u65b0\u7684\u6839\uff0ca \u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff0cb \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff1b
    3. \u8c03\u6574\u7ed3\u675f\uff1b

    Deletion / case 3

    \u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

    1. \u4ea4\u6362 b \u548c w \u7684\u989c\u8272\uff1b
    2. \u5c06 w \u53f3\u65cb\uff0c\u4f7f b \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff0cw \u6210\u4e3a b \u7684\u53f3\u513f\u5b50\uff0cb \u7684\u53f3\u513f\u5b50\u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff1b
    3. \u6b64\u65f6\u60c5\u51b5\u8f6c\u5316\u4e3a case 2\uff1b

    Deletion / case 4

    \u753b\u4e0d\u52a8\u56fe\u4e86\uff0c\u5148\u8bed\u8a00\u63cf\u8ff0\u4e00\u4e0b\u3002

    1. \u4ea4\u6362 a \u548c w \u7684\u989c\u8272\uff1b
    2. \u5c06 a \u5de6\u65cb\uff0c\u4f7f w \u6210\u4e3a\u8fd9\u4e2a\u5b50\u6811\u65b0\u7684\u6839\uff0ca \u6210\u4e3a w \u7684\u5de6\u513f\u5b50\uff0cb \u6210\u4e3a a \u7684\u53f3\u513f\u5b50\uff1b
    3. \u6b64\u65f6\u6839\u636e\u5b50\u6811 a \u7684\u60c5\u51b5\uff0c\u8f6c\u5316\u4e3a case 1.1 / case 2 / case 3\uff1b
    \u533a\u5206 case 1.1 \u548c case 1.2\u4e0d\u533a\u5206 case 1.1 \u548c case 1.2
    graph LR;\nA1[\"case 1.1\"]\nA2[\"case 1.2\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD[\"case 4\"]\nE[\"finish\"]\n\nA1 --->|\"C\"| E\nA2 ===>|\"C\"| A1\nA2 ===>|\"C\"| A2\nA2 ===>|\"C\"| B\nA2 ===>|\"C\"| C\nA2 ===>|\"C\"| D\nC --->|\"C&R\"| B --->|\"C&R\"| E\nD ===>|\"C&R\"| A1\nD ===>|\"C&R\"| B\nD ===>|\"C&R\"| C
    graph LR;\nA[\"case 1\"]\nB[\"case 2\"]\nC[\"case 3\"]\nD[\"case 4\"]\nE[\"finish\"]\n\nA --->|\"C\\nfrom case 1.1\"| E\nA ===>|\"C\\nfrom case 1.2\"| A\nA ===>|\"C\\nfrom case 1.2\"| B\nA ===>|\"C\\nfrom case 1.2\"| C\nA ===>|\"C\\nfrom case 1.2\"| D\nC --->|\"C&R\"| B --->|\"C&R\"| E\nD ===>|\"C&R\\nto case 1.1 \"| A\nD ===>|\"C&R\"| B\nD ===>|\"C&R\"| C

    \u6ce8\u610f\uff0c\u72b6\u6001\u673a\u4e2d\u7684\u7c97\u7ebf\u8868\u793a\u8f6c\u6362\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u201c\u5b50\u6811\u201d\u5411\u4e0a\u6216\u5411\u4e0b\u8f6c\u79fb\u4e86\u4e00\u7ea7\uff08\u7531 case 4 \u51fa\u53d1\u65f6\u4e0b\u964d\uff0c\u7531 case 1.2 \u51fa\u53d1\u65f6\u4e0a\u5347\uff09\uff1b\u800c\u7ec6\u7ebf\u8868\u793a\u6211\u4eec\u5173\u6ce8\u7684\u5b50\u6811\u4ecd\u7136\u662f\u8fd9\u4e00\u5c42\u7684\u90a3\u4e00\u68f5\u3002\u4ee5\u53ca\uff0cC \u8868\u793a\u67d3\u8272\u64cd\u4f5c\uff0cR \u8868\u793a\u65cb\u8f6c\u64cd\u4f5c\u3002

    \u5176\u4e2d\uff0c\u4efb\u4f55\u4e00\u4e2a\u60c5\u51b5\u90fd\u53ef\u4ee5\u4f5c\u4e3a\u4e00\u4e2a\u521d\u59cb\u60c5\u51b5\u3002\u6240\u4ee5\u53ef\u4ee5\u6570\u51fa\uff0c\u5230\u8fbe finish \u7684\u8def\u5f84\u4e2d\uff0c\u6700\u591a\u51fa\u73b0 3 \u6b21 Rotation\uff08case 4 -> case 3 -> case 2 -> finish\uff09\u3002

    \u6839\u636e\u524d\u9762\u72b6\u6001\u673a\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u4e0d\u96be\u5f97\u5230\u8fd9\u5f20\u8868\u683c\uff0c\u5b83\u7edf\u8ba1\u7684\u662f Rotation \u5728\u4e0d\u540c\u6570\u636e\u7ed3\u6784\u3001\u4e0d\u540c\u64cd\u4f5c\u4e2d\u51fa\u73b0\u7684\u6570\u91cf\uff1a

    Option AVL Tree RB Tree Insertion \\(\\leq 2\\) \\(\\leq 2\\) Deletion \\(O(\\log N)\\) \\(\\leq 3\\)"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#b-tree","title":"B+ Tree","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/bplus-tree/

    Wiki: https://en.wikipedia.org/wiki/B%2B_tree

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u6982\u5ff5_1","title":"\u6982\u5ff5","text":"

    B+ \u6811\u662f\u4e00\u79cd\u7528\u6811\u72b6\u5f62\u5f0f\u7ef4\u62a4\u6709\u5e8f\u6570\u5217\u6bd4\u8f83\u4fe1\u606f\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5176\u589e\u6539\u64cd\u4f5c\u62e5\u76f8\u5bf9\u4e8e\u4e8c\u53c9\u6811\u7ed3\u6784\u66f4\u52a0\u7a33\u5b9a\u7684\u5bf9\u6570\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u901a\u5e38\u7528\u4e8e\u6570\u636e\u5e93\u548c\u64cd\u4f5c\u7cfb\u7edf\u7684\u6587\u4ef6\u7cfb\u7edf\u4e2d\u3002

    B+ Tree

    \u5982\u4e0b\u56fe\u5c31\u662f\u4e00\u9897 \\(M=4\\) \u7684 B+ \u6811\uff0c\u53ef\u4ee5\u5bf9\u7167\u7740\u8fd9\u4e2a\u4f8b\u5b50\u6765\u7406\u89e3\u6027\u8d28\u3002

    \u66f4\u4e00\u822c\u5730\u6765\u8bf4\uff0cB+ \u6811\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

    property of B+ Tree

    @cy's PPT

    1. The root is either a leaf or has between \\(2\\) and \\(M\\) children.
    2. All nonleaf nodes (except the root) have between \\(\\lceil M/2 \\rceil\\) and M children.
    3. All leaves are at the same depth.

    Assume each nonroot leaf also has between \\(\\lceil M/2 \\rceil\\) and \\(M\\) children.

    \u6240\u6709\u771f\u5b9e\u7684\u6570\u636e\u90fd\u88ab\u5b58\u50a8\u5728\u53f6\u5b50\u7ed3\u70b9\u4e2d\uff0c\u5f62\u6210\u4e00\u4e2a\u6709\u5e8f\u7684\u6570\u5217\u3002\u800c\u975e\u53f6\u5b50\u7ed3\u70b9\u4e2d\u7b2c i \u4e2a\u952e\u503c\u7b49\u4e8e\u5176\u7b2c i+1 \u68f5\u5b50\u6811\u7684\u6700\u5c0f\u503c\uff08\u5728\u4e0a\u56fe\u4e2d\u8868\u73b0\u4e3a\u989c\u8272\u76f8\u540c\u7684\u4e00\u5bf9\u4e0a\u4e0b\u7ed3\u70b9\uff09\uff0c\u56e0\u6b64\u975e\u53f6\u7ed3\u70b9\u6700\u591a\u5b58 \\(M-1\\) \u4e2a\u503c\u3002

    \u53d1\u73b0

    \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\u8fd9\u6837\u4e00\u4e2a\u6027\u8d28\uff1a\u5728\u5b58\u50a8\u6570\u503c\u4e0d\u91cd\u590d\u7684\u60c5\u51b5\u4e0b\uff0c\u975e\u53f6\u7ed3\u70b9\u5b58\u50a8\u7684\u952e\u503c\u90fd\u4e0d\u76f8\u540c\u3002

    \u8bc1\u660e\u5f88\u7b80\u5355\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u975e\u53f6\u5b50\u7ed3\u70b9\uff0c\u5b83\u5b58\u50a8\u7684\u503c\u5fc5\u5b9a\u4e0d\u4f1a\u88ab\u5b83\u7684\u5b50\u8282\u70b9\u5b58\u50a8\uff08\u5982\u679c\u5b83\u7684\u5b50\u8282\u70b9\u4e0d\u662f\u53f6\u5b50\uff09\uff0c\u56e0\u4e3a\u5b83\u5b58\u7684\u662f\u5b83\u7684\u5b50\u8282\u70b9\u7684\u7b2c\u4e00\u4e2a\u5b50\u6811\u7684\u6700\u5c0f\u503c\uff0c\u800c\u5b83\u7684\u5b50\u8282\u70b9\u5b58\u7684\u662f\u7b2c\u4e8c\u4e2a\u5b50\u6811\u5f00\u59cb\u7684\u6700\u5c0f\u503c\u3002

    \u6211\u4eec\u79f0\u8fd9\u6837\u7684\u6811\u4e3a\u4e00\u4e2a \\(M\\) \u9636(order) B+ \u6811\u3002\u5bf9\u4e8e\u5e38\u89c1\u7684 \\(M\\)\uff0c\u6bd4\u5982\u4e00\u68f5 \\(4\\) \u9636 B+ \u6811\uff0c\u6211\u4eec\u4e5f\u79f0\u4e4b\u4e3a\u4e00\u68f5 2-3-4 \u6811\uff0c\u4e00\u822c \\(M\\) \u7684\u9009\u62e9\u4e3a 3 \u6216 4\u3002

    \u7279\u522b\u8bf4\u660e\uff0c\u5bf9\u4e8e B+ \u6811\uff0c\u5c06\u5b83\u7684\u53f6\u5b50\u7ed3\u70b9\u62fc\u63a5\u8d77\u6765\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u6709\u5e8f\u6570\u5217\u3002

    \u62bd\u8c61\u5730\u6765\u8bf4\u5c31\u662f\uff0c\u6211\u4eec\u628a\u4e00\u4e2a\u6570\u5217\u76f8\u5bf9\u5747\u5300\u7684\u5206\u4e3a \\(m\\) \u5757\uff0c\u7136\u540e\u628a\u5206\u754c\u7684\u6570\u62ff\u51fa\u6765\u3002\u5f53\u6211\u4eec\u53bb\u67e5\u627e\u6216\u63d2\u5165\u65f6\uff0c\u53ea\u9700\u8981\u548c\u8fd9\u4e9b\u8fb9\u754c\u6570\u8fdb\u884c\u6bd4\u8f83\uff0c\u5c31\u77e5\u9053\u5b83\u5e94\u8be5\u653e\u5728\u54ea\u4e00\u5757\u91cc\u3002\u518d\u4e0d\u65ad\u7ec6\u5316\u7c92\u5ea6\uff0c\u7528\u7c7b\u4f3c\u4e8e\u201c\\(m\\) \u5206\u201d\u7684\u601d\u60f3\u6765\u627e\u5230\u76ee\u6807\u4f4d\u7f6e\u3002

    \u5728\u6211\u770b\u6765\u8fd9\u4e2a\u5b9a\u4e49\u975e\u5e38\u6e05\u6670\uff0c\u5c31\u662f\u5c06\u6574\u4e2a\u5e8f\u5217\u6309\u7167\u4e0d\u540c\u7c92\u5ea6\u5212\u5206\uff0c\u7136\u540e\u7531\u5927\u5230\u5c0f\u8fdb\u884c\u903c\u8fd1\u3002

    depth of B+ Tree

    \u7531\u4e8e\u5b83\u5728\u7a7a\u95f4\u6700\u6d6a\u8d39\u7684\u60c5\u51b5\u4e0b\u662f\u4e00\u68f5 \\(\\lceil M/2 \\rceil\\) \u53c9\u6811\uff0c\u6240\u4ee5 B+ \u6811\u7684\u6df1\u5ea6\u662f \\(O(\\lceil \\log_{\\lceil M/2 \\rceil} N \\rceil)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u64cd\u4f5c_1","title":"\u64cd\u4f5c","text":"

    \u7531\u4e8e B+ \u6811\u7684\u6027\u8d28\u5341\u5206\u81ea\u7136\uff0c\u6240\u4ee5\u5b83\u7684\u64cd\u4f5c\u4ece\u601d\u60f3\u5c42\u9762\u4e0a\u6765\u8bf4\u4e5f\u975e\u5e38\u7b80\u5355\u3002\u5176\u66f4\u591a\u7684\u96be\u5ea6\u5728\u4e8e\u5b9e\u73b0\u4e0a\u3002

    \u5173\u4e8e\u5b9e\u73b0\u7684\u5efa\u8bae

    \u7531\u4e8e B+ \u6811\u5173\u4e8e\u5185\u90e8\u8282\u70b9\u548c\u53f6\u5b50\u7684\u5b9a\u4e49\u5341\u5206\u5272\u88c2\uff08\u867d\u7136\u7ea2\u9ed1\u6811\u53f6\u4e5f\u5f88\u5272\u88c2\uff0c\u4f46\u662f\u6bd5\u7adf\u7ea2\u9ed1\u6811\u7684\u53f6\u5b50\u4e0d\u9700\u8981\u4ec0\u4e48\u64cd\u4f5c\uff0c\u4f46\u662f B+ \u6811\u9700\u8981\uff09\uff0c\u6240\u4ee5\u5728\u5b9e\u73b0\u8fc7\u7a0b\u4e2d\u4f1a\u9047\u5230\u4e00\u4e9b\u9ebb\u70e6\u3002

    \u6211\u4e2a\u4eba\u5efa\u8bae\uff0c\u5982\u679c\u4f60\u5341\u5206\u719f\u6089 oop\uff0c\u90a3\u4e48\u53ef\u4ee5\u5c1d\u8bd5\u7528\u591a\u6001\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u53cd\u6b63\u6211\u5b9e\u73b0 B+ \u6811\u7684\u65f6\u5019\u5bf9 cpp \u7684 oop \u6211\u8bf4\u4e0d\u4e0a\u5341\u5206\u719f\u7ec3\uff0c\u6240\u4ee5\u6211\u76f4\u63a5\u65e0\u8111\u4f7f\u7528 struct with tag \u5b9e\u73b0\u4e86\u3002

    \u800c\u5728\u5f00\u59cb\u5199\u4ee3\u7801\u4e4b\u524d\uff0c\u6211\u5f3a\u70c8\u5efa\u8bae\u5927\u5bb6\u6309\u7167\u6211\u4e0b\u9762\u505a\u56fe\u7684\u683c\u5f0f\uff0c\u6a21\u62df\u4e00\u904d\u5404\u4e2a\u64cd\u4f5c\uff01\u5e76\u5728\u6a21\u62df\u8fc7\u7a0b\u4e2d\uff0c\u89c2\u5bdf\u6570\u636e\u7684\u6d41\u52a8\u4ee5\u53ca\u8282\u70b9\u7684\u7ed3\u6784\u53d8\u5316\u3002

    \u6b64\u5916\uff0c\u5728\u8ba8\u8bba\u8fd9\u4e9b\u64cd\u4f5c\u65f6\uff0c\u5148\u8ba9\u6211\u4eec\u5ffd\u7565\u5982\u4f55\u4ece\u7a7a\u5efa\u7acb\u8d77\u4e00\u4e2a B+ \u6811\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u67e5\u627e","title":"\u67e5\u627e","text":"

    \u548c\u4e8c\u53c9\u6811\u7684\u67e5\u627e\u5341\u5206\u76f8\u4f3c\uff0c\u6240\u4ee5\u8fd9\u91cc\u53ea\u6a21\u62df\u4e00\u4e0b\u4e3e\u4e2a\u4f8b\u5b50\u3002

    \u4f8b\u5982\uff0c\u6211\u4eec\u5728\u4e0a\u9762\u8fd9\u68f5\u6811\u4e2d\u627e 43 \u8fd9\u4e2a\u503c\uff0c\u6a59\u8272\u90e8\u5206\u8868\u793a\u6211\u4eec\u7684\u7126\u70b9\u3002

    Find(43)

    Frame 1Frame 2Frame 3

    \u6211\u4eec\u53d1\u73b0\u6709 \\(21 \\leq 43 < 48\\)\uff0c\u6240\u4ee5\u987a\u7740\u6807\u8bc6\u7684\u6a59\u8272\u6307\u9488\u5411\u4e0b\u3002

    \u6211\u4eec\u53d1\u73b0\u6709 \\(41 \\leq 43\\)\uff0c\u6240\u4ee5\u987a\u7740\u6807\u8bc6\u7684\u6a59\u8272\u6307\u9488\u5411\u4e0b\u3002

    \u5df2\u7ecf\u8d70\u5230\u53f6\u5b50\u7ed3\u70b9\uff0c\u6700\u540e\u53d1\u73b0\u6211\u4eec\u8981\u627e\u7684 43\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec02/#\u63d2\u5165_1","title":"\u63d2\u5165","text":"

    \u63d2\u5165\u7684\u65b9\u6cd5\u4e5f\u76f8\u5bf9\u6734\u7d20\u7b80\u5355\uff0c\u5c31\u662f\u627e\u5230\u8be5\u63d2\u5165\u7684\u5730\u65b9\u4ee5\u540e\u63d2\u5165\u5373\u53ef\u3002

    \u53ea\u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u4e00\u4ef6\u4e8b\uff0c\u5f53\u8fd9\u4e2a\u63d2\u5165\uff0c\u5bfc\u81f4\u4e86 B+ \u6811\u7684\u6027\u8d28\u4e0d\u518d\u6210\u7acb\u65f6\uff0c\u5373\u5bfc\u81f4\u5176\u5bb6\u957f\u8282\u70b9\u7684\u5b50\u8282\u70b9\u6570\u91cf\u4e3a \\(M+1\\) \u65f6\uff0c\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u4e2a\u7ed3\u70b9\u5e73\u5747\u5206\u88c2\u6210\u4e24\u4e2a\uff0c\u6b64\u65f6\u663e\u7136\u6709\u4e24\u4e2a\u5b50\u6811\u7684\u8282\u70b9\u6570\u91cf\u90fd\u4e0d\u5c0f\u4e8e \\(\\lceil M+1 \\rceil\\)\u3002\u4f46\u8fd9\u8fd8\u4e0d\u591f\uff0c\u5206\u88c2\u5bfc\u81f4\u5bb6\u957f\u8282\u70b9\u7684\u5bb6\u957f\u8282\u70b9\u7684\u5b50\u8282\u70b9\u53d8\u591a\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u5f97\u5411\u4e0a\u9012\u5f52\u3002

    \u4f9d\u7136\u662f\u8fdb\u884c\u4e00\u4e2a\u6a21\u62df\uff0c\u6211\u4eec\u6a21\u62df\u63d2\u5165 46 \u548c 44\u3002

    Insert(46), no split

    Frame 1Frame 2Frame 3

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u627e\u5230\u8981\u585e\u7684\u4f4d\u7f6e\u4e86\uff0c\u53d1\u73b0\u8981\u585e\u7684\u5730\u65b9\u662f 45 \u7684\u540e\u9762\uff0c\u63d2\u5165\u4ee5\u540e\u53d1\u73b0\u4e00\u5171 4 \u4e2a\u6570\uff0c\u800c \\(M=4\\)\uff0c\u4e0d\u9700\u8981\u5206\u88c2\u3002

    Insert(44), split

    Frame 1Frame 2Frame 3Frame 4Frame 5Frame 6

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u540c\u67e5\u627e\uff0c\u7565\u3002

    \u627e\u5230\u8981\u585e\u7684\u4f4d\u7f6e\u4e86\uff0c\u53d1\u73b0\u8981\u585e\u7684\u5730\u65b9\u662f 45 \u7684\u524d\u9762\uff0c\u63d2\u5165\u4ee5\u540e\u53d1\u73b0\u4e00\u5171 5 \u4e2a\u6570\uff0c\u800c \\(M=4\\)\uff0c\u9700\u8981\u5206\u88c2\uff01

    \u5411\u4e0a\u9012\u5f52\uff0c\u6211\u4eec\u60b2\u75db\u5730\u53d1\u73b0\uff0c\u8fd9\u4e2a\u8282\u70b9\u5728\u5206\u88c2\u540e\u6709\u4e86 5 \u4e2a\u5b50\u8282\u70b9\uff0c\u4e0d\u5f97\u4e0d\u518d\u6b21\u5206\u88c2\u3002

    \u5411\u4e0a\u9012\u5f52\uff0c\u6211\u7684\u8001\u5929\u7237\u5440\uff0c\u600e\u4e48\u8fd8\u6ca1\u5230\u5934\uff01\u8fd9\u4e0b\u6211\u4eec\u8981\u5206\u88c2\u6839\u90e8\u4e86\uff01

    \u7531\u4e8e\u6839\u90e8\u88ab\u88c2\u5f00\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u6dfb\u52a0\u4e00\u4e2a\u65b0\u7684\u6839\uff0c\u8fd9\u4e5f\u610f\u5473\u7740\u6811\u7684\u5c42\u6570\u589e\u9ad8\u4e86\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u7ec8\u4e8e\u5b8c\u6210\u4e86\u63d2\u5165\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/","title":"Lecture 3 | Inverted File Index","text":"

    \u7ea6 1461 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u5012\u6392\u7d22\u5f15","title":"\u5012\u6392\u7d22\u5f15","text":"

    \u5012\u6392\u7d22\u5f15\uff08inverted file index\uff09\u662f\u4e00\u79cd\u5e38\u89c1\u7684\u6587\u672c\u68c0\u7d22\u6280\u672f\uff0c\u7528\u4e8e\u5feb\u901f\u67e5\u627e\u5305\u542b\u7279\u5b9a\u5355\u8bcd\u6216\u77ed\u8bed\u7684\u6587\u6863\u3002\u5b83\u901a\u8fc7\u5c06\u5355\u8bcd\u6216\u77ed\u8bed\u4f5c\u4e3a\u5173\u952e\u5b57\uff0c\u5e76\u5c06\u5b83\u4eec\u51fa\u73b0\u5728\u6587\u6863\u4e2d\u7684\u4f4d\u7f6e\u8bb0\u5f55\u5728\u4e00\u4e2a\u7d22\u5f15\u4e2d\uff0c\u4ece\u800c\u652f\u6301\u5feb\u901f\u7684\u6587\u672c\u68c0\u7d22\u3002\u5728\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u7cfb\u7edf\u53ef\u4ee5\u5feb\u901f\u5730\u5b9a\u4f4d\u5305\u542b\u6307\u5b9a\u5355\u8bcd\u6216\u77ed\u8bed\u7684\u6587\u6863\uff0c\u5e76\u8fd4\u56de\u5b83\u4eec\u7684\u76f8\u5173\u4fe1\u606f\u3002\u5012\u6392\u7d22\u5f15\u5e7f\u6cdb\u5e94\u7528\u4e8e\u641c\u7d22\u5f15\u64ce\u3001\u6570\u636e\u5e93\u7cfb\u7edf\u548c\u4fe1\u606f\u68c0\u7d22\u7b49\u9886\u57df\u3002

    \u2014\u2014 ChatGPT

    Info

    Wiki: https://en.wikipedia.org/wiki/Inverted_index

    \u6240\u8c13\u7684\u5012\u6392\u7d22\u5f15\uff0c\u6240\u6709\u7684\u601d\u60f3\u90fd\u51dd\u7ed3\u5728\u4e86\u201c\u5012\u201d\uff0c\u4e5f\u5c31\u662f inverted\u3002\u5982\u679c\u53ef\u4ee5\uff0c\u6211\u89c9\u5f97\u7528\u201c\u9006\u201d\u66f4\u5408\u9002\u3002\u8fd9\u91cc\u7684\u7d22\u5f15\u5bf9\u8c61\u6307\u7684\u662f\u201c\u6587\u6863\u201d\u548c\u201c\u5355\u8bcd\u201d\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u800c\u5012\u6392\u7d22\u5f15\u7684\u610f\u601d\u662f\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u5355\u8bcd\uff0c\u6211\u4eec\u8bb0\u5f55\u5b83\u51fa\u73b0\u5728\u54ea\u4e9b\u6587\u6863\u4e2d\uff0c\u4ee5\u53ca\u8bb0\u5f55\u4ed6\u4eec\u51fa\u73b0\u7684\u6b21\u6570\uff08\u9891\u7387\uff09\u3002

    \u641c\u7d22\u5f15\u64ce\u662f\u4e00\u4e2a\u975e\u5e38\u5e38\u89c1\u7684\uff0c\u5012\u6392\u7d22\u5f15\u7684\u5e94\u7528\u6848\u4f8b\uff0c\u6211\u4eec\u901a\u8fc7\u8f93\u5165\u6211\u4eec\u5173\u6ce8\u7684\u8bcd\u8bed\uff0c\u6765\u7d22\u5f15\u5305\u542b\u8fd9\u4e2a\u8bcd\u7684\u6240\u6709\u6587\u6863\u3002 \u5f53\u7136\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u8003\u8651\u7684\u662f\u82f1\u6587\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u5012\u6392\u7d22\u5f15\u7684\u5b9e\u73b0","title":"\u5012\u6392\u7d22\u5f15\u7684\u5b9e\u73b0","text":"

    \u77e5\u9053\u4e86\u5012\u6392\u7d22\u5f15\u7684\u601d\u60f3\u4e4b\u540e\uff0c\u5176\u5b9e\u73b0\u5c31\u53d8\u5f97\u975e\u5e38\u76f4\u89c2\u4e86\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u4e00\u4e2a\u5b57\u5178\u6765\u63cf\u8ff0\u4e00\u7c7b\u5173\u7cfb\uff0c\u5176\u4e3b\u952e\u4e3a\u5355\u8bcd\uff0c\u952e\u503c\u4e3a\u8fd9\u4e2a\u5355\u8bcd\u51fa\u73b0\u7684\u6240\u6709\u4f4d\u7f6e\u3002

    \u6700\u6734\u7d20\u7684\u7248\u672c\u5c31\u662f\u8ba9\u952e\u503c\u4e3a\u5355\u8bcd\u51fa\u73b0\u8fc7\u7684\u6587\u6863\u7684\u5e8f\u53f7\u5e8f\u5217\uff0c\u800c\u5982\u679c\u6211\u4eec\u8fd8\u9700\u8981\u77e5\u9053\u8bcd\u6c47\u51fa\u73b0\u7684\u4f4d\u7f6e\uff0c\u5219\u53ef\u4ee5\u8ba9\u952e\u503c\u662f\u4e00\u4e2a\u4e8c\u5143\u7ec4\u7684\u5e8f\u5217\uff0c\u5176\u4e2d\u7b2c\u4e00\u4e2a\u5143\u7d20\u662f\u6587\u6863\u7684\u5e8f\u53f7\uff0c\u7b2c\u4e8c\u4e2a\u5143\u7d20\u662f\u5355\u8bcd\u5728\u6587\u6863\u4e2d\u51fa\u73b0\u7684\u4f4d\u7f6e\u3002

    \u4e00\u4e2a \ud83c\udf30

    \u4f8b\u5982\u6211\u4eec\u6709\u5982\u4e0b\u6587\u4ef6\u96c6\uff1a

    \u6587\u6863\u96c6

    Doc Text 1 Gold silver truck 2 Shipment of gold damaged in a fire 3 Delivery of silver arrived in a silver truck 4 Shipment of gold arrived in a truck

    \u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u5982\u4e0b\u7684\u5012\u6392\u7d22\u5f15\uff1a

    \u5012\u6392\u7d22\u5f15

    No. Term Times; (Doc ID: Places) 1 a {3; (2;6),(3;6),(4;6)} 2 arrived {2; (3;4),(4;4)} 3 damaged {1; (2;4)} 4 delivery {1; (3;1)} 5 fire {1; (2;7)} 6 gold {3; (1;1),(2;3),(4;3)} 7 of {3; (2;2),(3;2),(4;2)} 8 in {3; (2;5),(3;5),(4;5)} 9 shipment {2; (2;1),(4;1)} 10 silver {2; (1;2),(3;3,7)} 11 truck {3; (1;3),(3;8),(4;7)}

    \u6240\u4ee5\u5b9e\u9645\u4e0a\u975e\u5e38\u7b80\u5355\uff0c\u6211\u4eec\u53ea\u9700\u8981\u626b\u63cf\u6587\u6863\uff0c\u7136\u540e\u5b58\u4e0b\u6bcf\u4e00\u4e2a\u6587\u4ef6\u5728\u54ea\u91cc\u51fa\u73b0\u8fc7\u5373\u53ef\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u6539\u8fdb","title":"\u6539\u8fdb","text":"

    \u90a3\u4e48\u5230\u6b64\u4e3a\u6b62\u4e86\u5417\uff1f\u975e\u4e5f\u3002\u5018\u82e5\u6beb\u65e0\u8282\u5236\u7684\u5c06\u6240\u6709\u8bcd\u90fd\u5b58\u5230\u5012\u6392\u7d22\u5f15\u4e2d\uff0c\u90a3\u4e48\u6211\u4eec\u7684\u5012\u6392\u7d22\u5f15\u5c31\u4f1a\u53d8\u5f97\u975e\u5e38\u5927\uff0c\u5176\u4e2d\u5fc5\u7136\u6709\u5f88\u591a\u5197\u4f59\u4fe1\u606f\u5b58\u5728\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5bf9\u5012\u6392\u7d22\u5f15\u8fdb\u884c\u4e00\u4e9b\u6539\u8fdb\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u505c\u7528\u8bcd","title":"\u505c\u7528\u8bcd","text":"

    \u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u6211\u4eec\u5b58\u4e0b\u6765\u7684\u8fd9\u4e9b\u5185\u5bb9\u4e2d\uff0c\u6709\u4e00\u4e9b\u4e1c\u897f\u9891\u7e41\u5730\u51fa\u73b0\u5728\u6240\u6709\u6587\u6863\u4e2d\uff0c\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e9b\u8bcd\u53ef\u80fd\u5e76\u4e0d\u4f1a\u6210\u4e3a\u4e00\u4e2a\u7d22\u5f15\uff0c\u4f8b\u5982\u6b63\u5e38\u7684\u82f1\u6587\u6587\u7ae0\u4e2d\u7684 a\uff0cthe \u7b49\u3002\u6240\u4ee5\uff0c\u5bf9\u4e8e\u8fd9\u4e00\u7c7b\u8bcd\u2014\u2014\u6211\u4eec\u79f0\u4e4b\u4e3a\u505c\u7528\u8bcd(stop words)\uff0c\u5bf9\u4e8e\u505c\u7528\u8bcd\uff0c\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5c06\u4ed6\u4eec\u5b58\u4e0b\u4e86\u3002

    \u54ea\u4e9b\u8bcd\u4f1a\u6210\u4e3a\u505c\u7528\u8bcd\uff1f

    \u4e00\u822c\u4e00\u4e2a\u8bcd\u6210\u4e3a\u505c\u7528\u8bcd\uff0c\u662f\u56e0\u4e3a\u5b83\u65e0\u6cd5\u6210\u4e3a\u4e00\u4e2a\u6709\u6548\u7684\u68c0\u7d22\u5173\u952e\u5b57\uff0c\u5b83\u53ef\u80fd\u662f\u5728\u5927\u91cf\u8d44\u6599\u4e2d\u5927\u91cf\u51fa\u73b0\uff0c\u5bfc\u81f4\u6211\u4eec\u65e0\u6cd5\u5229\u7528\u5b83\u627e\u51fa\u6211\u4eec\u60f3\u8981\u7684\u8d44\u6599\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e00\u4e2a\u5171\u901a\u70b9\u662f\u5b83\u4eec\u901a\u5e38\u90fd\u6709\u7740\u76f8\u5f53\u9ad8\u7684\u51fa\u73b0\u9891\u7387\u3002

    \u4f46\u662f\u6211\u4eec\u4e5f\u4e0d\u80fd\u76f2\u76ee\u5730\u5c06\u6240\u6709\u7684\u8bcd\u90fd\u4f5c\u4e3a\u505c\u7528\u8bcd\uff0c\u56e0\u4e3a\u6709\u4e9b\u8bcd\u5b83\u5728\u67d0\u4e9b\u542b\u4e49\u4e0b\u9002\u5408\u4f5c\u4e3a\u4e00\u79cd\u505c\u7528\u8bcd\uff0c\u4f46\u662f\u5728\u53e6\u4e00\u4e9b\u542b\u4e49\u4e0b\uff0c\u5b83\u5c31\u4e0d\u9002\u5408\u4f5c\u4e3a\u505c\u7528\u8bcd\u4e86\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u95ee\u9898\u5c31\u53d8\u5f97\u6bd4\u8f83\u590d\u6742\u4e86\uff0c\u6240\u4ee5\u8fd9\u91cc\u5e76\u4e0d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u8bcd\u5e72\u5206\u6790","title":"\u8bcd\u5e72\u5206\u6790","text":"

    \u8bcd\u5e72\u5206\u6790(word stemming)\u662f\u4e00\u79cd\u5c06\u5355\u8bcd\u8f6c\u6362\u4e3a\u5176\u8bcd\u5e72\u7684\u6280\u672f\u3002\u4f8b\u5982\uff0c\u8bcd\u5e72\u5206\u6790\u53ef\u4ee5\u5c06\u5355\u8bcd trouble\uff0ctroubled\uff0ctroubles\uff0ctroubling \u90fd\u8f6c\u6362\u4e3a trouble\uff08\u751a\u81f3\u662f troubl\uff0c\u6838\u5fc3\u76ee\u7684\u662f\u8ba9\u5b83\u4eec\u53d8\u6210\u540c\u4e00\u4e2a\u5355\u8bcd\uff09\u3002\u76f8\u540c\u8bcd\u5e72\u7684\u8bcd\u6709\u7740\u7c7b\u4f3c\u7684\u542b\u4e49\uff0c\u5728\u68c0\u7d22 troubled \u7684\u65f6\u5019\uff0c\u5f53\u7136\u4e5f\u53ef\u80fd\u60f3\u627e\u5230\u5305\u542b trouble \u7684\u6587\u6863\u3002\u8fd9\u79cd\u6280\u672f\u4e5f\u53ef\u4ee5\u8ba9\u591a\u4e2a\u5355\u8bcd\u5171\u4eab\u540c\u4e00\u6761\u7d22\u5f15\u8bb0\u5f55\uff0c\u5728\u5b58\u548c\u627e\u7684\u8fc7\u7a0b\u4e2d\u90fd\u80fd\u4f18\u5316\u6548\u679c\u3002

    \u4e0d\u8fc7\u5728\u5177\u4f53\u64cd\u4f5c\u65b9\u9762\uff0c\u8fd9\u4e2a\u4e1c\u897f\u5c31\u663e\u5f97\u6bd4\u8f83\u7e41\u6742\u548c\u66b4\u529b\u4e86\uff0c\u6211\u4eec\u53ea\u80fd\u6839\u636e\u8bed\u6cd5\u89c4\u8303\u8fdb\u884c\u66b4\u529b\u5339\u914d\u548c\u5224\u65ad\uff0c\u8fd9\u91cc\u6211\u4eec\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u5206\u5e03\u5f0f","title":"\u5206\u5e03\u5f0f","text":"

    \u53ef\u60f3\u800c\u77e5\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u641c\u7d22\u5f15\u64ce\u6765\u8bf4\uff0c\u5b83\u6240\u9700\u8981\u7d22\u5f15\u7684\u6587\u6599\u662f\u975e\u5e38\u5e9e\u5927\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u901a\u5e38\u9700\u8981\u5c06\u5176\u5206\u5e03\u5f0f\u5730\u5b58\u50a8\u548c\u7d22\u5f15\u3002

    \u800c\u8fd9\u91cc\u6709\u4e24\u79cd\u5206\u5e03\u5f0f\u7684\u7b56\u7565\uff0c\u5176\u4e00\u662f\u6839\u636e\u5355\u8bcd\u7684\u5b57\u5178\u5e8f\u8fdb\u884c\u5206\u5e03\u5f0f\uff0c\u5176\u4e8c\u662f\u6839\u636e\u6587\u6863\u8fdb\u884c\u5206\u5e03\u5f0f\u3002

    \u663e\u7136\u6839\u636e\u5355\u8bcd\u7684\u5185\u5bb9\u8fdb\u884c\u5206\u5e03\u5f0f\uff0c\u80fd\u591f\u63d0\u9ad8\u7d22\u5f15\u6548\u7387\uff0c\u4f46\u662f\u8fd9\u6837\u7684\u8bdd\uff0c\u6211\u4eec\u5c31\u9700\u8981\u5c06\u6240\u6709\u5f62\u5f0f\u63a5\u8fd1\u7684\u5355\u8bcd\u90fd\u5b58\u50a8\u5728\u4e00\u4e2a\u5730\u65b9\uff0c\u8fd9\u6837\u5c31\u4f1a\u9020\u6210\u5355\u70b9\u6545\u969c\uff0c\u5bb9\u707e\u80fd\u529b\u5f88\u5dee\uff0c\u6240\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u5e76\u4e0d\u662f\u5f88\u597d\u3002

    \u800c\u7b2c\u4e8c\u79cd\u529e\u6cd5\u5219\u6709\u8f83\u5f3a\u7684\u5bb9\u707e\u6027\u80fd\u3002\u5373\u4f7f\u4e00\u53f0\u673a\u5668\u65e0\u6cd5\u5de5\u4f5c\uff0c\u4e5f\u4e0d\u4f1a\u5267\u70c8\u5f71\u54cd\u5230\u6574\u4e2a\u7cfb\u7edf\u7684\u5de5\u4f5c\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec03/#\u6027\u80fd\u8bc4\u4f30","title":"\u6027\u80fd\u8bc4\u4f30","text":"

    \u548c\u7edf\u8ba1\u5b66\u7684\u5047\u8bbe\u68c0\u9a8c\u7c7b\u4f3c\uff0c\u4e5f\u548c\u673a\u5668\u5b66\u4e60\u9886\u57df\u7684 Average Precision \u7c7b\u4f3c\u3002

    \u8fd9\u4e9b\u5185\u5bb9\u53ef\u4ee5\u5f88\u597d\u7684\u7c7b\u6bd4\uff0c\u6682\u65f6\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/","title":"Lecture 4 | Leftist Heap & Skew Heap","text":"

    \u7ea6 4406 \u4e2a\u5b57 97 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#leftist-heap","title":"Leftist Heap","text":"

    link

    OI Wiki: https://oi-wiki.org/ds/leftist-tree/

    Wikipedia: https://en.wikipedia.org/wiki/Leftist_tree

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u5de6\u504f\u5806\uff0c\u6216\u8005\u8bf4\u5de6\u504f\u5806(Leftist Heap)\uff0c\u5b83\u76f8\u6bd4\u4e8e\u666e\u901a\u7684\u5806\uff0c\u66f4\u597d\u7684\u4e00\u70b9\u5728\u4e8e\u5b83\u652f\u6301\u5feb\u901f\u7684\u5806\u5408\u5e76\u64cd\u4f5c\u3002\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5c06\u65b0\u7684\u4e1c\u897f\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80\u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u76f8\u5bf9\u8bc1\u4e86\u8fd9\u4e2a

    \u7531\u4e8e\u5de6\u504f\u5806\u4e0d\u518d\u662f\u4e00\u4e2a\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u7ef4\u62a4\u5927\u6839\u5806\u5c0f\u8ddf\u5806\u90a3\u6837\u7528\u6570\u7ec4\u6765\u7ef4\u62a4\u5b83\u4e86\u3002

    \u4e00\u4e2a\u5de6\u504f\u5806\u7684\u7ed3\u70b9\u7ef4\u62a4\u4e86\u5de6\u53f3\u5b50\u5806\u7684\u5730\u5740\u3001\u81ea\u8eab\u7684\u952e\u503c\u3001\u548c\u4e00\u4e2a\u201c\u8ddd\u79bb(dist)\u201d\u3002

    struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n

    'dist' in leftist heap

    1. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u6216\u53f3\u5b69\u5b50\u4e3a\u7a7a\u7ed3\u70b9\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(0\\)\uff0c\u8fd9\u79cd\u7ed3\u70b9\u88ab\u79f0\u4e3a\u5916\u7ed3\u70b9\uff1b
    2. \u5982\u679c\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u548c\u53f3\u5b69\u5b50\u90fd\u4e0d\u4e3a\u7a7a\uff0c\u5219\u8be5\u7ed3\u70b9\u7684 dist \u4e3a \\(\\min{(dist_\\text{left child}, dist_\\text{right child})} + 1\\)\uff1b

    eg

    \u800c\u5de6\u504f\u5806\u5c31\u5efa\u7acb\u5728\u8fd9\u4e9b\u6027\u8d28\u4e0a\uff1a

    Leftist Heap

    \u5de6\u504f\u5806\u662f\u7ed3\u70b9\u7684\u952e\u503c\u5e94\u5f53\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u7684\u4e8c\u53c9\u6811\uff08\u5373\u5806\u7684\u6027\u8d28\uff09\uff0c\u4e14\u6ee1\u8db3\u300c\u5de6\u504f\u300d\u6027\u8d28\u2014\u2014\u7ed3\u70b9\u7684\u5de6\u5b69\u5b50\u7684 dist \u4e0d\u5c0f\u4e8e\u53f3\u5b69\u5b50\u7684 dist\u3002

    \u56e0\u6b64\uff0c\u56de\u987e dist \u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6269\u5c55\u6027\u8d28\uff1a

    properties

    1. \u7ed3\u70b9\u7684 dist \u7b49\u4e8e \\(dist_\\text{right child} + 1\\)\uff08\u5047\u8bbe \\(dist_\\text{NULL} = -1\\)\uff09\uff1b
    2. \u5982\u679c \\(dist_i = N\\)\uff0c\u5219\u4ee5 \\(i\\) \u4e3a\u6839\u7684\u5b50\u6811\u81f3\u5c11\u662f\u4e00\u4e2a \\(N+1\\) \u5c42\u7684\u5b8c\u7f8e\u4e8c\u53c9\u6811\uff0c\u81f3\u5c11\u6709 \\(2^{N+1}-1\\) \u4e2a\u7ed3\u70b9\uff1b

    \u6ce8\u610f\uff0c\u5728\u793a\u610f\u56fe\u4e2d\u6211\u4eec\u7701\u7565\u4e86\u7ed3\u70b9\u81ea\u8eab\u952e\u503c\u7684\u6807\u8bb0\uff0c\u4f46\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u5806\uff0c\u5b83\u5c31\u9700\u8981\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373\u7ed3\u70b9\u7684\u952e\u503c\u4e0d\u5927\u4e8e\uff08\u4e0d\u5c0f\u4e8e\uff09\u5176\u5b69\u5b50\u7ed3\u70b9\u7684\u952e\u503c\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u952e\u503c\u5f88\u53ef\u80fd\u4e0d\u518d\u662f\u5355\u7eaf\u7684\u6570\uff0c\u5927\u5c0f\u5173\u7cfb\u53ef\u80fd\u8f6c\u5316\u4e3a\u504f\u5e8f\u5173\u7cfb\u3002

    \u7b80\u5355\u601d\u8003\u4e00\u4e0b\uff0c\u4e3a\u4ec0\u4e48\u5de6\u504f\u5806\u4f1a\u8fd9\u4e48\u8bbe\u8ba1\u5462\uff1f\u5b9e\u9645\u4e0a\uff0c\u5408\u5e76\u5806\u9700\u8981\u8003\u8651\u7684\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u70b9\u5c31\u662f\u8981\u80fd\u5728\u4e4b\u540e\u7684\u64cd\u4f5c\u4e2d\u5c3d\u53ef\u80fd\u5730\u7ef4\u62a4\u5806\u7684\u201c\u5e73\u8861\u201d\uff0c\u5426\u5219\u6211\u4eec\u628a\u5806\u7ef4\u62a4\u6210\u4e86\u4e00\u4e2a\u94fe\uff0c\u90a3\u663e\u7136\u662f\u975e\u5e38\u7cdf\u7cd5\u7684\u3002

    \u800c\u5de6\u504f\u5806\u901a\u8fc7\u7ef4\u62a4\u6574\u4e2a\u5806\u201c\u5de6\u504f\u201d\uff0c\u5e76\u4e0d\u65ad\u5f80\u53f3\u4fa7\u5408\u5e76\uff0c\u6765\u5b9e\u73b0\u6bcf\u6b21\u90fd\u662f\u5f80 dist \u76f8\u5bf9\u5c0f\u7684\u90a3\u4e00\u4fa7\u585e\u8fdb\u4e1c\u897f\uff0c\u8fdb\u800c\u4fdd\u8bc1\u4e86\u8fd9\u4e2a\u5806\u7684\u76f8\u5bf9\u5e73\u8861\u6027\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\u5c31\u662f\u5408\u5e76\u3002\u800c\u5176\u5b83\u64cd\u4f5c\u90fd\u53ef\u4ee5\u770b\u4f5c\u662f\u5408\u5e76\u7684\u7279\u6b8a\u60c5\u51b5\u3002\u56e0\u6b64\u6211\u4eec\u9996\u5148\u8ba8\u8bba\u4efb\u610f\u4e24\u4e2a\u5de6\u504f\u5806\u7684\u5408\u5e76\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u5e76","title":"\u5408\u5e76","text":"

    \u4f5c\u4e3a\u5de6\u504f\u5806\u7684\u6838\u5fc3\u64cd\u4f5c\uff0c\u5408\u5e76\u64cd\u4f5c\u81ea\u7136\u5c31\u662f\u8981\u5728\u6ee1\u8db3\u6027\u8d28\u7684\u6761\u4ef6\u4e0b\uff0c\u5408\u5e76\u4e24\u4e2a\u5de6\u504f\u5806\u3002\u5927\u81f4\u601d\u8def\u5c31\u662f\u5148\u7ef4\u62a4\u5806\u7684\u6027\u8d28\uff0c\u5728\u56de\u6eaf\u65f6\u7ef4\u62a4\u5de6\u504f\u6027\u8d28\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5b83\u662f\u4e00\u4e2a\u5148\u81ea\u4e0a\u800c\u4e0b\u518d\u81ea\u4e0b\u800c\u4e0a\u7684\u8fc7\u7a0b\u3002

    \u6309\u7167\u5b9e\u73b0\u65b9\u6cd5\uff0c\u5de6\u504f\u5806\u7684\u5408\u5e76\u53ef\u4ee5\u5206\u4e3a\u9012\u5f52\u5f0f\u548c\u8fed\u4ee3\u5f0f\u4e24\u79cd\u3002\u5176\u4e2d\u524d\u8005\u53ef\u80fd\u66f4\u4e3a\u76f4\u89c9\uff0c\u800c\u540e\u8005\u53ef\u89c6\u5316\u540e\u5219\u66f4\u4e3a\u76f4\u89c2\u3002

    \u4e3a\u4e86\u65b9\u4fbf\u540e\u7eed\u7684\u4ee3\u7801\u63cf\u8ff0\uff0c\u6211\u4eec\u9996\u5148\u7ed9\u51fa\u5de6\u504f\u5806\u7ed3\u70b9\u5728\u672c\u6587\u4e2d\u7684\u5b9a\u4e49\uff1a

    struct LeftistHeapNode {\nElementType val;\nint dist;\nLeftistHeapNode * ls, * rs;\n};\n
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u9012\u5f52\u5f0f","title":"\u9012\u5f52\u5f0f","text":"

    \u9012\u5f52\u5f0f\u5148\u6bd4\u8f83\u5f53\u524d\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u6839\u7ed3\u70b9\u7684\u952e\u503c\uff0c\u9009\u62e9\u8f83\u5c0f\uff08\u8f83\u5927\uff09\u7684\u90a3\u4e2a\u4f5c\u4e3a\u6839\u7ed3\u70b9\uff0c\u5176\u5de6\u5b50\u6811\u4f9d\u7136\u4e3a\u5de6\u5b50\u6811\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u53f3\u5b50\u6811\u548c\u53e6\u4e00\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

    \u5f53\u7136\uff0c\u5728\u9012\u5f52\u5730\u66f4\u65b0\u5b8c\u540e\uff0c\u6211\u4eec\u9700\u8981\u68c0\u67e5\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u662f\u5426\u6ee1\u8db3 \\(dist_\\text{left child} \\geq dist_\\text{right child}\\) \u7684\u6027\u8d28\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\uff0c\u6211\u4eec\u5219\u9700\u8981\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u6765\u7ef4\u6301\u6027\u8d28\u3002

    LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// Recursive exit. If any is NULL, return the other as the new root of subtree.\nif (x == NULL) return y;\nif (y == NULL) return x;\n\n// If `x`'s val is smaller than `y`'s, swap them, which means we always operates on `x`.\nif (x->val > y->val) {\nswap(x, y);\n}\n\n// Merge `x`'s right subtree and `y`, and set `x`'s right subtree to the result.\nx->rs = merge(x->rs, y);\n\n// If `x`'s left subtree's dist is smaller than `x`'s right subtree's dist, swap them.\nif (x->ls->dist == NULL || x->ls->dist < x->rs->dist) {\nswap(x->ls, x->rs);\n}\n\n// Update x's dist.\nx->dist = x->rs->dist + 1;\n\n// Return x as the new root of subtree.\nreturn x;\n}\n

    \ud83c\udf30

    \u73b0\u5728\u6211\u4eec\u6a21\u62df\u4e00\u4e0b\u8fd9\u4e2a\u8fc7\u7a0b\uff0c\u73b0\u5728\u6211\u4eec\u6709\u4e0b\u9762\u4e24\u4e2a\u5de6\u504f\u5806\uff0c\u5c1d\u8bd5\u5408\u5e76\u5b83\u4eec\u3002

    Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

    \u6211\u4eec\u53d1\u73b0\uff0c\u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u7eff\u6811\u53f3\u5b50\u6811\u548c\u84dd\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

    \u7ecf\u8fc7\u6bd4\u8f83\uff0c\u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e0d\u53d8\uff0c\u53f3\u5b50\u6811\u66f4\u65b0\u4e3a\u300c\u84dd\u6811\u53f3\u5b50\u6811\u548c\u7eff\u6811\u7684\u5408\u5e76\u7ed3\u679c\u300d\u3002

    \u6700\u540e\u8fd8\u5269\u4e0b\u4e24\u4e2a\u7ed3\u70b9\u5566\uff01\u5b9e\u9645\u4e0a\u8fd9\u91cc\u76f4\u63a5\u6a21\u62df\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff0c\u9996\u5148\u662f\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u5e76\u9009\u62e9\u4e86 \u277a \u4f5c\u4e3a\u65b0\u6839\uff1b\u63a5\u4e0b\u6765\u5728\u9012\u5f52\u7684\u8fc7\u7a0b\u4e2d\u53d1\u73b0\u9700\u8981\u5408\u5e76 NULL \u548c \u277b\uff0c\u6240\u4ee5\u76f4\u63a5\u8fd4\u56de\u4e86 \u277b\u3002

    \u7136\u800c\u8fd8\u6ca1\u6709\u7ed3\u675f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u5904\u7406\u5de6\u53f3\u5b50\u6811 dist \u5927\u5c0f\u5173\u7cfb\u95ee\u9898\u3002

    \u6211\u4eec\u53d1\u73b0 \u277a \u7684\u5de6\u5b69\u5b50\u4e3a NULL\uff0c\u6211\u4eec\u8bb0 \\(dist_\\text{NULL} = -1\\)\uff0c\u53f3\u5b69\u5b50 \u277b \u6709 \\(dist_\\text{right child}=0\\)\uff0c\u6240\u4ee5\u9700\u8981\u4ea4\u6362\u4e24\u4e2a\u5b69\u5b50\u3002

    \u8fd9\u91cc\u4e5f\u8df3\u8fc7\u4e86\u4e24\u4e2a\u6b65\u9aa4\uff1a

    \u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u277a \u7684 dist \u5c0f\u4e8e \u2779 \u7684 dist\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e0d\u9700\u8981\u6539\u53d8\u3002

    \u7ee7\u7eed\u5f80\u56de\u8d70\uff0c\u53d1\u73b0 \u2777 \u548c \u2778 \u7684 dist \u76f8\u540c\uff0c\u6ee1\u8db3\u6027\u8d28\uff0c\u4e5f\u4e0d\u9700\u8981\u6539\u53d8\u3002

    \u4ece\u8fd9\u91cc\u4e5f\u53ef\u4ee5\u770b\u51fa\u6765\uff0c\u5e76\u4e0d\u662f\u770b\u4e0a\u53bb\u66f4\u5927\u7684\u5b50\u6811\u4e00\u5b9a\u5728\u5de6\u4fa7\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u8fed\u4ee3\u5f0f","title":"\u8fed\u4ee3\u5f0f","text":"

    \u8fed\u4ee3\u5f0f\u662f\u6839\u636e\u5b83\u7684\u5b9e\u73b0\u65b9\u6cd5\u6765\u547d\u540d\u7684\uff0c\u4f46\u662f\u6211\u8ba4\u4e3a\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fed\u4ee3\u5f0f\u53ef\u80fd\u66f4\u6709\u610f\u601d\u3002\u4e8b\u5b9e\u4e0a\u5728\u5f88\u591a\u9898\u76ee\u4e2d\u6211\u89c9\u5f97\u8fd9\u4e2a\u65b9\u6cd5\u505a\u9898\u66f4\u52a0\u65b9\u4fbf\u3002

    \u8fed\u4ee3\u5f0f\u7ef4\u62a4\u4e24\u4e2a\u989d\u5916\u7684\u6307\u9488\uff0c\u5206\u522b\u6307\u5411\u4e24\u68f5\u6811\u8fd8\u6ca1\u88ab\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u5e76\u4e0d\u65ad\u9009\u62e9\u8f83\u5c0f\u7684\u90a3\u4e2a\u5408\u5e76\u8fdb\u53bb\uff0c\u76f4\u5230\u4e24\u4e2a\u6307\u9488\u90fd\u4e3a\u7a7a\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u548c\u5f52\u5e76\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\u975e\u5e38\u76f8\u4f3c\uff0c\u5b9e\u9645\u4e0a\u5f53\u6211\u4eec\u4ece\u53ef\u89c6\u5316\u7684\u89d2\u5ea6\u53bb\u770b\u8fd9\u4ef6\u4e8b\u4ee5\u540e\uff0c\u4f1a\u53d1\u73b0\u8fd9\u91cc\u505a\u7684\u5c31\u662f\u4e00\u4e2a\u5f52\u5e76\u3002

    LeftistHeapNode * merge(LeftistHeapNode * x, LeftistHeapNode * y) {\n// `tx` & `ty` are the pointers to the roots of the subtrees that haven't been merged.\nLeftistHeapNode * tx = x, * ty = y;\n// `res` is the root of the merged final tree, while `cur` is the latest node that has been merged.\nLeftistHeapNode * res = NULL, * cur = NULL;\n\n// Begin merging.\nwhie (tx != NULL && ty != NULL) {\n// If `tx`'s val is smaller than `ty`'s, swap them, which means we always operates on `tx`.\nif (tx->val > ty->val) {\nswap(tx, ty);\n}\n\n// Specially mark the root on the first merge.\nif (res == NULL) {\nres = tx;\ncur = tx;\n} else {\ncur->rs = tx;\ncur = cur->rs;\n}\n\n// Go on.\ntx = tx->rs;\n}\n\n// Merge the rest of the tree.\nwhile (ty != NULL) {\n// Specially mark the root on the first merge. (rarely happens but not impossible)\nif (res == NULL) {\nres = ty;\ncur = ty;\n} else {\ncur->rs = ty;\ncur = cur->rs;\n}\n\n// Go on.\nty = ty->rs;\n}\n\n// Adjust the left and right subtrees of all the nodes according to the properties of `dist`. \n// It does the same work as the adjust part in the recursive version. I ignore it here.\nres = adjust(res);\n\nreturn res;\n}\n

    \u4f9d\u65e7\u662f\u4ee5\u4e0a\u9762\u8fdb\u884c\u6a21\u62df\u7684\u90a3\u4e2a\u5408\u5e76\u4e3a \ud83c\udf30 \u8fdb\u884c\u6a21\u62df\u3002

    \ud83c\udf30

    \u9996\u5148\uff0c\u6211\u4eec\u5bf9\u56fe\u7247\u7684\u6392\u7248\u7a0d\u5fae\u505a\u4e00\u4e9b\u6539\u53d8\uff0c\u6211\u4eec\u4e0d\u518d\u6309\u7167\u4e4b\u524d\u753b\u5806\u7684\u65b9\u5f0f\u53bb\u753b\uff0c\u800c\u662f\u201c\u5de6\u504f\u201d\u5730\u53bb\u753b\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u8c03\u6574\u4e4b\u524d

    Frame 0Frame 1Frame 2Frame 3Frame 4Frame 5

    \u7eff\u8272\u548c\u84dd\u8272\u7684\u7bad\u5934\u5206\u522b\u8868\u793a\u4e24\u4e2a\u5f85\u5408\u5e76\u5b50\u6811\u5c1a\u672a\u5408\u5e76\u7684\u5b50\u6811\u7684\u6839\uff0c\u7d2b\u8272\u7bad\u5934\u8868\u793a\u6700\u8fd1\u7684\u5408\u5e76\u53d1\u751f\u7684\u4f4d\u7f6e\u3002

    \u6bd4\u8f83 \u2776 \u548c \u2777\uff0c\u53d1\u73b0 \u2776 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2776 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277a\u3002

    \u548c\u4e0a\u4e00\u6b65\u7c7b\u4f3c\u7684\uff0c\u6bd4\u8f83 \u277a \u548c \u2777\uff0c\u53d1\u73b0 \u2777 \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u2777 \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u84dd\u8272\u7bad\u5934\u6307\u5411\u5c1a\u672a\u5408\u5e76\u8fdb\u53bb\u7684 \u277b\u3002

    \u4f9d\u7136\u7c7b\u4f3c\u5730\uff0c\u6bd4\u8f83 \u277a \u548c \u277b\uff0c\u53d1\u73b0 \u277a \u66f4\u5c0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06 \u277a \u4f5c\u4e3a\u5408\u5e76\u540e\u7684\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u968f\u4e4b\u5408\u5e76\u8fdb\u53bb\uff0c\u540c\u65f6\u66f4\u65b0\u7eff\u8272\u7bad\u5934\u6307\u5411 NULL\u3002

    \u8fd9\u65f6\u5019\u6211\u4eec\u53d1\u73b0\u5df2\u7ecf\u6709\u4e00\u4e2a\u6307\u9488\u7a7a\u4e86\uff0c\u4e5f\u5c31\u662f\u7eff\u8272\u6307\u9488\u5df2\u7ecf\u6307\u5411\u4e86 NULL\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u53ea\u9700\u8981\u6309\u987a\u5e8f\u628a\u84dd\u8272\u6307\u9488\u6307\u5411\u7684\u5185\u5bb9\u90fd\u63a8\u8fdb\u53bb\u5373\u53ef\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u8fd8\u9700\u8981\u7ef4\u62a4 dist \u4fe1\u606f\u5e76\u6839\u636e\u6027\u8d28\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002\u8fd9\u4e00\u90e8\u5206\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

    \ud83c\udf30/\ud83d\udd25

    \u5f53\u7136\uff0c\u8fd9\u4e48\u6765\u770b\u53ef\u80fd\u8fd8\u662f\u5f88\u4e71\uff0c\u8054\u60f3\u6211\u4eec\u4e4b\u524d\u53d1\u73b0\u5b83\u548c\u5f52\u5e76\u6392\u5e8f\u5f88\u50cf\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u7528\u4e00\u4e2a\u66f4\u52a0\u76f4\u89c2\u7684\u65b9\u5f0f\u6765\u770b\u8fd9\u4e2a\u8fc7\u7a0b\uff1a

    Frame 0Frame 1Frame 2

    \u540c\u6837\u4ece\u8fd9\u5f20\u56fe\u5f00\u59cb\uff0c\u7531\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u5b83\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9012\u5f52\u6392\u5e8f\u7684\u540e\u534a\u90e8\u5206\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u6307\u5408\u5e76\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\u7684\u8fc7\u7a0b\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e24\u4e2a\u5de6\u504f\u5806\u6539\u5199\u6210\u4e24\u4e2a\u6709\u5e8f\u6570\u5217\uff01

    \u7531\u4e8e\u6211\u4eec\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u603b\u662f\u627e\u53f3\u5b69\u5b50\uff0c\u6240\u4ee5\u6211\u4eec\u5c31\u6cbf\u7740\u6700\u53f3\u6cbf\u8def\u5f84\u628a\u6ca1\u4e2a\u5de6\u504f\u5806\u62c6\u6210\u8fd9\u79cd\u201c\u60ac\u540a\u201d\u7684\u5e26\u72b6\u5f62\u5f0f\uff0c\u6bcf\u4e00\u201c\u6761\u201d\u7684\u503c\u53d6\u51b3\u4e8e\u6839\u7684\u952e\u503c\uff0c\u4e5f\u5c31\u662f\u8fd9\u4e00\u201c\u6761\u201d\u7684\u6700\u9876\u90e8\u3002

    \u5728\u8fd9\u5f20\u56fe\u4e2d\uff0c\u6211\u4eec\u5f97\u5230\u7684\u4e24\u4e2a\u6709\u5e8f\u6570\u7ec4\u5206\u522b\u662f [1, 5] \u548c [2, 6]\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u4eec\u8fdb\u884c\u6392\u5e8f\u3002

    \u7ecf\u8fc7\u6392\u5e8f\uff0c\u5c31\u4f1a\u53d1\u73b0\u5b83\u4eec\u521a\u597d\u7b26\u5408\u6211\u4eec\u5728\u4e0a\u9762\u6b65\u9aa4\u5f97\u5230\u7684\u7ed3\u679c\uff08\u53ef\u4ee5\u5bf9\u6bd4\u7740\u4e0a\u9762\u7684 Frame 4 \u770b\uff09\u3002\u5b9e\u9645\u4e0a\uff0c\u53ea\u8981\u4f60\u56de\u987e\u4e00\u4e0b\u5f52\u5e76\u6392\u5e8f\u7684\u8fc7\u7a0b\uff0c\u518d\u5bf9\u6bd4\u7740\u770b\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5c31\u4f1a\u53d1\u73b0\u4e00\u6a21\u4e00\u6837\u3002

    \u518d\u6b21\u63d0\u9192\uff0c\u8fd9\u4e00\u5c0f\u8282\u8bb2\u7684\u90e8\u5206\u90fd\u5ffd\u7565\u4e86\u4e4b\u540e\u8c03\u6574\u5b50\u6811\u5de6\u504f\u6027\u8d28\u7684\u8fc7\u7a0b\uff0c\u5b9e\u9645\u4e0a\u8fd9\u4e5f\u5c31\u5355\u7eaf\u662f\u4e00\u4e2a\u7ef4\u62a4\u5806\u6027\u8d28\u7684\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

    \u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5355\u70b9\u5220\u9664","title":"\u5355\u70b9\u5220\u9664","text":"

    \u8ba9\u6211\u4eec\u4e00\u822c\u6027\u5730\u8003\u8651\u4e00\u4e2a\u7ed3\u70b9\uff0c\u4e0e\u5b83\u76f8\u5173\u7684\u4e3b\u8981\u6709\u4e09\u4e2a\u65b9\u5411\uff1a\u7236\u7ed3\u70b9\u548c\u4e24\u4e2a\u5b69\u5b50\u7ed3\u70b9\u3002

    \u800c\u5355\u70b9\u5220\u9664\u7684\u64cd\u4f5c\u4e5f\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u5408\u5e76\u9700\u8981\u88ab\u5220\u9664\u7684\u7ed3\u70b9\u7684\u4e24\u4e2a\u5b50\u7ed3\u70b9\uff0c\u7136\u540e\u5c06\u8fd9\u4e2a\u65b0\u7684\u6811\u7684\u6839\u4ee3\u66ff\u88ab\u5220\u9664\u7684\u7ed3\u70b9\uff0c\u518d\u5728\u56de\u6eaf\u7684\u8fc7\u7a0b\u4e2d bottom-up \u5730\u66f4\u65b0 dist \u5373\u53ef\u3002

    LeftistHeapNode * del(LeftistHeapNode * cur, ElementType x) {\nif (cur->val == x) {\n// Just return the merge of the children.\nreturn merge(cur->l, cur->r);\n} else {\n// Not this subtree.\nif (cur->val > x) return cur;\n\n// Otherwise, search the `x`.\nif (cur->l != NULL) del(cur->l, x);\nif (cur->r != NULL) del(cur->r, x);\n\n// Adjust the dist bottom-up.\nadjust(cur);\n}\n}\n
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#skew-heap","title":"Skew Heap","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Skew_heap

    \u659c\u5806(Skew Hea)\u662f\u6bd4\u5de6\u504f\u5806\u66f4\u4e3a\u4e00\u822c\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u540c\u6837\u6709\u7740\u80fd\u591f\u5feb\u901f\u5408\u5e76\u7684\u6027\u8d28\u3002

    \u5934\u8111\u98ce\u66b4

    \u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u5de6\u504f\u5806\uff0c\u7531\u4e8e\u9700\u8981\u81ea\u4e0b\u800c\u4e0a\u5730\u7ef4\u62a4 dist\uff0c\u6240\u4ee5\u6211\u4eec\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\u3002\u56de\u987e AVL \u6811\uff0c\u540c\u6837\u4e3a\u4e86\u7ef4\u62a4\u5b83\u6bd4\u8f83\u4e25\u683c\u7684\u5e73\u8861\u6027\u8d28\uff0c\u6211\u4eec\u4e5f\u65e0\u6cd5\u8fdb\u884c\u5e76\u53d1\u64cd\u4f5c\uff0c\u800c\u7ea2\u9ed1\u6811\u5219\u901a\u8fc7\u4e00\u4e2a\u80fd\u591f\u4ec5\u4ec5\u901a\u8fc7\u53d8\u8272\u5c31\u80fd\u8c03\u6574\u7684\u9ed1\u9ad8\u6765\u89c4\u907f\u4e86\u5fc5\u987b\u81ea\u4e0b\u800c\u4e0a\u7ef4\u62a4\u7684\u95ee\u9898\uff0c\u5b9e\u73b0\u4e86\u5e76\u53d1\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u60f3\u5c06\u5de6\u504f\u5806\u6539\u53d8\u5730\u80fd\u591f\u8fdb\u884c\u81ea\u4e0a\u800c\u4e0b\u7ef4\u62a4\uff0c\u5c31\u9700\u8981\u6539\u53d8\u751a\u81f3\u653e\u5f03\u5b83\u7684\u5de6\u504f\u6027\u8d28\u7684\u4e25\u683c\u6027\u2014\u2014\u800c\u8fd9\u5c31\u662f\u659c\u5806\u7684\u7531\u6765\u3002

    \u659c\u5806\u4e5f\u9700\u8981\u6ee1\u8db3\u5927\u6839\u5806\uff08\u5c0f\u6839\u5806\uff09\u7684\u6027\u8d28\uff0c\u800c\u5b83\u7684\u5408\u5e76\u548c\u5de6\u504f\u5806\u7684\u5408\u5e76\u4e5f\u5341\u5206\u7c7b\u4f3c\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u8fd9\u6b21\u65e0\u6761\u4ef6\u7684\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u5de6\u504f\u6027\u8d28\u5982\u4f55\u53d8\u5316\uff0c\u6211\u4eec\u90fd\u4f1a\u9009\u62e9\u4ea4\u6362\u53c2\u4e0e\u5408\u5e76\u7684\u5de6\u53f3\u5b50\u6811\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u5728\u56de\u6eaf\u7684\u65f6\u5019\u624d\u8fdb\u884c\u5de6\u53f3\u5b50\u6811\u7684\u4ea4\u6362\uff0c\u4e8e\u662f\u5c31\u5b9e\u73b0\u4e86\u5b8c\u5168\u7684\u81ea\u4e0a\u800c\u4e0b\u3002

    \u8ba9\u6211\u4eec\u6765\u770b\u770b wiki \u91cc\u7ed9\u51fa\u7684 \ud83c\udf30\uff1a

    \ud83c\udf30 from wikipedia

    Frame 0Frame 1

    \u8fd9\u662f\u6211\u4eec\u9700\u8981\u5408\u5e76\u7684\u4e24\u4e2a\u5806\u3002

    \u7701\u7565\u4e86\u4e2d\u95f4\u7684\u6b65\u9aa4\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u6a21\u62df\u4e00\u4e0b\uff0c\u6bcf\u4e00\u6b21\u5408\u5e76\u64cd\u4f5c\u7ed3\u675f\u4e4b\u540e\u90fd\u4ea4\u6362\u5de6\u53f3\u5b50\u6811\u3002

    \u6211\u4eec\u603b\u662f\u5148\u5f80\u53f3\u4fa7\u5b50\u6811\u9012\u5f52\u4e0b\u53bb\u5730\u5408\u5e76\uff0c\u6ca1\u5b8c\u6210\u4e00\u6b21\u5408\u5e76\u5c31\u4ea4\u6362\u8fd9\u4e2a\u5b50\u6811\u548c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\uff0c\u800c\u5b83\u7684\u5144\u5f1f\u59d0\u59b9\u5728\u8fd9\u6b21\u4ea4\u6362\u5b8c\u4ee5\u540e\u5c31\u4e0d\u4f1a\u518d\u53d1\u751f\u6539\u53d8\uff0c\u800c\u8fd9\u4e2a\u5b50\u6811\u5219\u4f1a\u7ee7\u7eed\u8fdb\u884c\u4e0b\u4e00\u6b21\u5408\u5e76\u3002

    \u7701\u7565\u4e0a\u9762\u7684\u7ed8\u56fe\u663e\u7136\u662f\u6211\u61d2\u5f97\u753b\u4e86\uff0c\u76f8\u4fe1\u5927\u5bb6\u5728\u4e86\u89e3\u5de6\u504f\u5806\u7684\u5408\u5e76\u4ee5\u540e\u4e5f\u80fd\u5f88\u5feb\u611f\u53d7\u5230\u659c\u5806\u662f\u5982\u4f55\u5408\u5e76\u7684\u3002

    \u5f53\u7136\uff0c\u5b83\u4e5f\u662f\u652f\u6301\u8fed\u4ee3\u7684\u5199\u6cd5\u7684\uff0c\u548c\u662f\u548c\u4e4b\u524d\u7684\u505a\u6cd5\u7c7b\u4f3c\uff0c\u6211\u4eec\u53ef\u4ee5\u6392\u5e8f\u6bcf\u4e00\u201c\u6761\u201d\uff0c\u7136\u540e\u518d\u5408\u5e76\u3002Wikipedia \u4e0a\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u7684\u8fc7\u7a0b\u56fe\uff0c\u4f46\u662f\u90a3\u4e2a\u8fc7\u7a0b\u56fe\u6709\u70b9\u81ea\u4e0b\u800c\u4e0a\u7684\u610f\u601d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u81ea\u4e0a\u800c\u4e0b\u505a\u4e5f\u662f\u4e00\u6837\u7684\u3002\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u53bb\u770b\u770b Wiki \u4e0a\u7684\u8fc7\u7a0b\uff1a\ud83d\udd17\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u5408\u7406\u6027\u5206\u6790","title":"\u5408\u7406\u6027\u5206\u6790","text":"

    \u7136\u800c\uff0c\u968f\u4e4b\u51fa\u73b0\u7684\u4e00\u4e2a\u95ee\u9898\u4e0a\uff0c\u6211\u4eec\u7528\u4e86\u8fd9\u79cd\u770b\u8d77\u6765\u6709\u70b9\u4e0d\u7ba1\u4e09\u4e03\u4e8c\u5341\u4e00\u7684\u505a\u6cd5\uff0c\u90a3\u5b83\u7684\u6b63\u786e\u6027\u5982\u4f55\u4fdd\u8bc1\u5462\uff1f

    \u9996\u5148\u8fdb\u884c\u611f\u6027\u7684\u7406\u89e3\u3002\u6211\u4eec\u6bcf\u5408\u5e76\u4e24\u4e2a\u5806\u90fd\u662f\u6cbf\u7740\u6700\u53f3\u4fa7\u8def\u5f84\u5408\u5e76\uff08\u867d\u7136\u4e2d\u95f4\u4f1a\u88ab\u4e0d\u505c\u8f6c\u5230\u5de6\u8fb9\uff09\uff0c\u5373\u6bcf\u6b21\u4f1a\u88ab\u6539\u53d8\u7684\u5b50\u6811\u5de6\u53f3\u987a\u5e8f\u7684\u8282\u70b9\u90fd\u662f\u6700\u53f3\u4fa7\u7684\u8282\u70b9\uff0c\u800c\u518d\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5982\u679c\u6bcf\u6b21\u5408\u5e76\u90fd\u5c06\u53d1\u751f\u7684\u53d8\u5316\u8f6c\u5230\u5de6\u4fa7\uff0c\u4ee5\u6b64\u6765\u51cf\u5c0f\u5408\u5e76\u64cd\u4f5c\u5e26\u6765\u7684\u9ad8\u5ea6\u201c\u7d2f\u79ef\u201d\u3002

    \u8fdb\u4e00\u6b65\u89e3\u91ca

    \u4ee5\u6bcf\u6b21\u53ea\u63d2\u5165\u4e00\u4e2a\u70b9\u4e3a\u4f8b\u5b50\u8bf4\u660e\u95ee\u9898\u3002

    \u8fdb\u4e00\u6b65\u5bf9\u9012\u5f52\u65cb\u8f6c\u5230\u5de6\u4fa7\u505a\u89e3\u91ca\uff0c\u9012\u5f52\u6027\u5730\u8f6c\u5230\u5de6\u4fa7\uff0c\u4f7f\u5f97\u672c\u6765\u6700\u53f3\u4fa7\u7684\u8def\u5f84\u53d8\u5230\u6700\u5de6\u4fa7\uff0c\u5373\u4f7f\u4e4b\u540e\u4ea4\u6362\u4f1a\u91cd\u65b0\u8bbf\u95ee\u5230\u8fd9\u4e2a\u5b50\u6811\uff0c\u4f46\u6b64\u65f6\u9664\u4e86\u6839\uff0c\u5176\u4ed6\u90e8\u5206\u4f9d\u7136\u662f\u6700\u5de6\u4fa7\u7684\u8def\u5f84\uff0c\u4e5f\u4e0d\u4f1a\u518d\u8f7b\u6613\u5730\u8bbf\u95ee\u5230\u8fd9\u6b21\u8def\u5f84\u3002

    \u7528\u56fe\u6765\u505a\u89e3\u91ca\u7684\u8bdd\uff0c\u5c31\u662f\u8fd9\u6837\uff1a

    \u6211\u4eec\u53ea\u5173\u6ce8\u4e00\u5f00\u59cb\u4f5c\u4e3a\u6700\u53f3\u4fa7\u7684\u8fd9\u4e09\u4e2a\u7ea2\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e24\u6b21\u64cd\u4f5c\u540e\uff0c\u9664\u4e86\u76f4\u63a5\u4f5c\u4e3a\u6839\u7684\u5b50\u6811\u7684\u90a3\u4e2a\u8282\u70b9\u88ab\u8f6c\u4e86\u8fc7\u6765\uff0c\u5176\u4ed6\u7684\u4e4b\u540e\u7684\u8282\u70b9\u90fd\u662f\u4f5c\u4e3a\u201c\u6700\u5de6\u4fa7\u201d\u7684\u8282\u70b9\u51fa\u73b0\u7684\uff0c\u867d\u7136\u56fe\u4e2d\u53ea\u6709\u8fd9\u4e00\u4e2a\uff0c\u4f46\u662f\u5f53\u6811\u7684\u89c4\u6a21\u53d8\u5927\u540e\uff0c\u8fd9\u4e2a\u4f18\u52bf\u4f1a\u66f4\u52a0\u660e\u663e\u3002

    \u6839\u636e\u8fd9\u4e2a\u7279\u70b9\uff0c\u6211\u4eec\u53ef\u4ee5\u975e\u5e38\u7b80\u5355\u5730\u7406\u89e3\u4e0b\u9762\u8fd9\u9053\u9898\uff1a

    \u9898\u9762\u7b54\u6848 & \u89e3\u91ca

    The result of inserting keys \\(1\\) to \\(2^k\u22121\\) for any \\(k>4\\) in order into an initially empty skew heap is always a full binary tree. (T/F)

    \u5373\u5bf9\u4e8e\u4efb\u610f\u7684 \\(k>4\\) \u7684\u60c5\u51b5\uff0c\u6309\u987a\u5e8f\u5f80\u4e00\u4e2a\u659c\u5806\u91cc\u63d2\u5165 \\(1\\sim2^k-1\\) \u8fd9\u4e9b\u6570\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u90fd\u4f1a\u662f\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\u3002\uff08\u5bf9/\u9519\uff09

    \u7b54\u6848\u662f T\u3002

    \u9996\u5148\uff0c\u4ece\u63d2\u5165\u7684\u5143\u7d20\u7684\u6570\u91cf\u6765\u770b\uff0c\u662f\u6ee1\u8db3\u6ee1\u4e8c\u53c9\u6811\u7684\u5fc5\u8981\u6761\u4ef6\u7684\u3002

    \u800c\u6839\u636e\u6211\u4eec\u4e0a\u9762\u63cf\u8ff0\u7684\uff0c\u8df3\u8fc7\u80af\u5b9a\u6210\u7acb\u7684\u521d\u59cb\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u5f52\u7eb3\uff0c\u8fc7\u7a0b\u5e76\u4e0d\u5b8c\u6574\u4e0e\u4e25\u8c28\uff0c\u4f46\u662f\u5927\u6982\u5c31\u662f\u8fd9\u4e48\u4e2a\u610f\u601d\u3002

    \u5bf9\u4e8e\u4e00\u4e2a\u6ee1\u4e8c\u53c9\u6811\uff0c\u6211\u4eec\u73b0\u5728\u8981\u63d2\u5165\u4e00\u4e2a\u6570\uff0c\u663e\u7136\u8fd9\u4e2a\u6570\u6bd4\u6811\u91cc\u4efb\u4f55\u4e00\u4e2a\u90fd\u8981\u5927\u3002\u800c\u5f53\u8fd9\u4e2a\u6570\u88ab\u63d2\u5165\u540e\uff0c\u5b83\u6210\u4e3a\u6574\u4e2a\u5806\uff0c\u6216\u8005\u8bf4\u6574\u4e2a\u6811\u6700\u5de6\u4fa7\u7684\u4e00\u6761\u3002\u800c\u5728\u63a5\u4e0b\u6765\u7684\u4ea4\u6362\u8fc7\u7a0b\u4e2d\uff0c\u5b83\u4f1a\u4e0d\u65ad\u88ab\u7529\u6765\u7529\u53bb\uff0c\u6700\u7ec8\u7ecf\u8fc7 2^k \u6b21\u540e\u88ab\u7529\u5230\u6700\u53f3\u8fb9\uff0c\u4e5f\u5c31\u662f\u8fce\u63a5\u5b83\u7684\u7b2c\u4e00\u4e2a\u5b69\u5b50\u3002\u663e\u7136\uff0c\u5bf9\u4e8e\u8be5\u5c42\u7684\u6240\u6709\u8282\u70b9\u6765\u8bf4\u90fd\u9700\u8981 2^k \u6b21\u624d\u4f1a\u8fdb\u5165\u5230\u6700\u53f3\u4fa7\u8def\u5f84\u3002

    \uff08\u8fd9\u4e2a\u8fc7\u7a0b\u53ef\u4ee5\u7c7b\u6bd4\u4e8c\u8fdb\u5236\u6570\u7684\u81ea\u589e\uff0c\u4f60\u53ef\u4ee5\u6839\u636e\u8fd9\u4e2a\u8282\u70b9\u7684\u6bcf\u4e2a\u524d\u9a71\u5206\u522b\u662f\u5de6\u5b69\u5b50\u8fd8\u662f\u53f3\u5b69\u5b50\u6765\u5206\u914d\u5bf9\u5e94\u7684\u4f4d\u5b50\u662f 0 \u8fd8\u662f 1\u3002\uff09

    \u5f53\u7136\uff0c\u5982\u4e0a\u7684\u6027\u8d28\u53ea\u80fd\u5e2e\u52a9\u6211\u4eec\u611f\u6027\u7684\u7406\u89e3\u8fd9\u4e2a\u6b63\u786e\u6027\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ece\u644a\u8fd8\u5206\u6790\u7684\u89d2\u5ea6\u6765\u5206\u6790\u5176\u6b63\u786e\u6027\uff0c\u5373\u5176\u5747\u644a\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec04/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":"

    \u8fd9\u91cc\u6211\u4eec\u91c7\u7528\u52bf\u80fd\u6cd5\u8fdb\u884c\u5206\u6790\u3002

    \u5206\u6790 skew heap \u7684\u5747\u644a\u590d\u6742\u5ea6\uff0c\u4e3b\u8981\u5c31\u662f\u5206\u6790\u5408\u5e76\u64cd\u4f5c\u7684\u590d\u6742\u5ea6\uff0c\u56e0\u4e3a\u5176\u4ed6\u64cd\u4f5c\u90fd\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5408\u5e76\u64cd\u4f5c\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u52bf\u80fd\u51fd\u6570\uff1a

    \u52bf\u80fd\u51fd\u6570

    \u6211\u4eec\u5b9a\u4e49 \\(\\Phi(Heap) = \\text{number of heavy node in } Heap\\)\u3002

    \u5176\u4e2d\uff0c\u989d\u5916\u9700\u8981\u5b9a\u4e49 heavy node \u548c light node\uff1a

    heavy node & light node

    \u5bf9\u4e8e\u4e00\u4e2a\u5b50\u5806 \\(H\\)\uff0c\u5982\u679c \\(size(H.\\text{right\\_descendant}) \\geq \\frac{1}{2}size(H)\\)\uff0c\u5219 \\(H\\) \u662f heavy node\uff0c\u5426\u5219\u662f light node\u3002

    @ cy'ppt

    A node p is heavy if the number of descendants of p\u2019s right subtree is at least half of the number of descendants of p, and light otherwise. Note that the number of descendants of a node includes the node itself.

    \u663e\u7136\uff0c\u5bf9\u4e8e heavy node \u548c light node\uff0c\u4ee5\u53ca\u5408\u5e76\u64cd\u4f5c\uff0c\u6709\u8fd9\u4e48\u4e00\u4e9b\u6027\u8d28\uff1a

    properties

    1. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f heavy node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u4e00\u5b9a\u53d8\u4e3a\u4e00\u4e2a light node\uff1b
    2. \u5982\u679c\u4e00\u4e2a\u8282\u70b9\u662f light node\uff0c\u5e76\u4e14\u5728\u5176\u53f3\u5b50\u6811\u53d1\u751f\u4e86\u5408\u5e76\uff08\u5305\u62ec\u7ffb\u8f6c\uff09\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u53d8\u4e3a\u4e00\u4e2a heavy node\uff1b
    3. \u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u5982\u679c\u4e00\u4e2a\u8282\u70b9\u7684 heavy/light \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u5b83\u539f\u5148\u4e00\u5b9a\u5728\u5806\u7684\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\uff1b

    \u5217\u51fa\u516c\u5f0f\uff1a

    \\[ \\hat{c} = c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\]

    \u5176\u4e2d\uff0c\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\\(H_{merged}\\) \u4e3a\u5408\u5e76\u540e\u7684\u5806\u7684\u52bf\u80fd\uff0c\\(H_x\\) \u548c \\(H_y\\) \u5206\u522b\u4e3a\u5408\u5e76\u524d\u7684\u4e24\u4e2a\u5806\u7684\u52bf\u80fd\u3002

    \u6839\u636e property 3\uff0c\u5728\u5408\u5e76\u8fc7\u7a0b\u4e2d\u5e76\u975e\u6240\u6709\u8282\u70b9\u90fd\u6536\u5230\u5f71\u54cd\u3002\u6211\u4eec\u53ef\u4ee5\u5355\u72ec\u8bb0\u5f55 \\(l_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 light node \u6570\u91cf\uff0c\\(h_{x}\\) \u4e3a \\(H_x\\) \u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff0c\\(h^0_{x}\\) \u4e3a \\(H_x\\) \u6240\u6709\u4e0d\u5728\u6700\u53f3\u4fa7\u8def\u5f84\u4e0a\u7684 heavy node \u6570\u91cf\uff08\u5373 \\(\\text{count of heavy nodes of } H_x = H_x + H^0_x\\)\uff09\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u4e0a\u5f0f\u5199\u5f00\uff1a

    \\[ \\left\\{ \\begin{aligned} c &= l_x + h_x + l_y + h_y &(1)\\\\ \\Phi(H_{merged}) &\\leq l_x + h^0_x + l_y + h^0_y &(2)\\\\ \\Phi(H_x) &= h_x + h^0_{x} &(3)\\\\ \\Phi(H_y) &= h_y + h^0_{y} &(4) \\end{aligned} \\right. \\]

    \u5176\u4e2d\u7a0d\u5fae\u505a\u4e00\u4e9b\u89e3\u91ca\uff1a

    1. \\((1)\\)\uff1a\\(c\\) \u4e3a\u5408\u5e76\u64cd\u4f5c\u7684\uff08\u6700\u574f\uff09\u590d\u6742\u5ea6\uff0c\u5373\u6211\u4eec\u7684\u679a\u4e3e\u6d89\u53ca\u4e86\u4e24\u4e2a\u5806\u6240\u6709\u7684\u53f3\u4fa7\u8def\u5f84\uff1b
    2. \\((2)\\)\uff1a\u5728\u5408\u5e76\u64cd\u4f5c\u4ee5\u540e\uff0c\u6839\u636e property 1 \u548c property 2\uff0c\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\uff1b
    3. \\((3)\\) \u548c \\((4)\\)\uff1a\u6839\u636e\u52bf\u80fd\u51fd\u6570\u7684\u5b9a\u4e49\u5f97\u5230\uff1b

    \u4e8e\u662f\uff0c\u5c06\u5b83\u4eec\u4ee3\u5165\u5f97\u5230\u7ed3\u679c\uff1a

    \\[ \\begin{aligned} \\hat{c} &= c + \\Phi(H_{merged}) - \\Phi(H_x) - \\Phi(H_y) \\\\ &\\leq (l_x + h_x + l_y + h_y) + (l_x + h^0_x + l_y + h^0_y) - (h_x + h^0_{x}) - (h_y + h^0_{y}) \\\\ &\\leq 2(l_x + l_y) \\\\ \\hat{c} &= O(\\log{N}) \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/","title":"Lecture 5 | Binomial Queue","text":"

    \u7ea6 2196 \u4e2a\u5b57 12 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 11 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#binomial-queue","title":"Binomial Queue","text":"

    \u5806\u7684\u5176\u4e2d\u4e00\u4e2a\u5e94\u7528\u5c31\u662f\u4f18\u5148\u961f\u5217\u3002\u672c\u8282\u8981\u4ecb\u7ecd\u7684\u4e8c\u9879\u961f\u5217(Binomial Queue)\u4e5f\u662f\u4f18\u5148\u961f\u5217\u7684\u4e00\u79cd\u5b9e\u73b0\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e8e\u4e4b\u524d\u6211\u4eec\u7528\u4e00\u4e2a\u5806\u7ef4\u62a4\u4f18\u5148\u961f\u5217\uff0c\u4e8c\u9879\u961f\u5217\u540c\u65f6\u7ef4\u62a4\u4e86\u5177\u6709\u4e0d\u540c\u7279\u5f81\u7684\u82e5\u5e72\u961f\u5217\u3002

    link

    Wikipedia: https://en.wikipedia.org/wiki/Binomial_heap

    YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns \uff08\u867d\u7136\u8fd9\u4e2a\u89c6\u9891\u662f\u8bb2\u89e3\u6590\u6ce2\u90a3\u5951\u5806\u7684\uff0c\u4f46\u662f\u4e2d\u95f4\u5148\u8bb2\u4e86\u4e8c\u9879\u5806\u3002\uff09

    \u5b66\u4e60\u5efa\u8bae

    \u5728\u6b63\u5f0f\u5f00\u59cb\u672c\u8282\u5185\u5bb9\u4e4b\u524d\uff0c\u8bf7\u5e26\u7740\u8fd9\u6837\u4e00\u4e2a\u5ff5\u5934\uff1a\u5c3d\u529b\u601d\u8003\u4e8c\u9879\u961f\u5217\u4e0e\u4e8c\u8fdb\u5236\u7684\u5173\u7cfb\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u4e8c\u9879\u961f\u5217(Binomial Queue)\u672c\u8d28\u4e0a\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\u3002\u6240\u4ee5\u6211\u4eec\u9996\u5148\u7ed9\u5b9a\u4e8c\u9879\u6811(Binomial Tree)\u7684\u5b9a\u4e49\uff1a

    Binomial Tree

    \u4e8c\u9879\u6811\u6ee1\u8db3\u5806\u7684\u6027\u8d28\uff0c\u5373 parent \u8282\u70b9\u7684\u503c\u5c0f\u4e8e\uff08\u5927\u4e8e\uff09 child \u8282\u70b9\u7684\u503c\u3002

    \u4e00\u4e2a\u975e\u5e38\u5173\u952e\u7684\u6027\u8d28\u662f\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u90fd\u662f\u540c\u6784\u7684\uff0c\u4e14 \\(k\\) \u9636\u4e8c\u9879\u6811\u662f\u4e24\u4e2a \\(k-1\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u5f97\u5230\u7684\u3002\u800c\u5176\u5408\u5e76\u65b9\u5f0f\u662f\u76f4\u63a5\u4ee4\u5176\u4e2d\u4e00\u68f5\u6210\u4e3a\u53e6\u5916\u4e00\u68f5\u7684\u6839\u7684\u65b0 child\uff0c\u8fd9\u4e5f\u51b3\u5b9a\u4e86\u4e8c\u9879\u6811\u7684\u6839\u6bcf\u4e00\u4e2a child \u672c\u8eab\u4e5f\u90fd\u662f\u4e00\u4e2a\u4e8c\u9879\u6811\u3002

    \u663e\u7136\u80fd\u591f\u5f97\u5230\uff0c\u4e8c\u9879\u6811\u5e76\u975e\u4e8c\u53c9\u6811\uff1b\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811 \\(B_k\\) \u7684\u6839\u6709 \\(k\\) \u4e2a child\uff0c\\(2^k\\) \u4e2a\u8282\u70b9\uff1b\u518d\u8fdb\u4e00\u6b65\u7684\uff0c\\(B_k\\) \u7684\u7b2c \\(d\\) \u5c42\u4e00\u5171\u6709 \\(C_k^d = \\binom{k}{d}\\) \u4e2a\u8282\u70b9\uff0c\u6709\u8da3\u7684\u662f\uff0c\u6240\u6709\u5c42\u7684\u8282\u70b9\u52a0\u8d77\u6765\u521a\u597d\u7b26\u5408\u4e8c\u9879\u5f0f\u5b9a\u7406\uff0c\u6b64\u6761\u5b9a\u7406\u53ef\u4ee5\u7531\u6570\u5b66\u5f52\u7eb3\u6cd5\u5f88\u5bb9\u6613\u5730\u8bc1\u660e\uff0c\u4e0d\u518d\u8d58\u8ff0\u3002

    \u5173\u4e8e\u5b9e\u73b0

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e8c\u9879\u6811\u662f\u4e00\u4e2a \\(N\\) \u53c9\u6811\uff0c\u6240\u4ee5\u901a\u5e38\u6211\u4eec\u4f7f\u7528\u94fe\u8868 sibling \u7684\u5f62\u5f0f\u6765\u8868\u793a\u4e00\u4e2a\u8282\u70b9\u7684 children\u3002

    \u518d\u5bf9\u4e8c\u9879\u6811\u505a\u4e00\u4e2a\u7b80\u5355\u7684\u603b\u7ed3\uff0c\\(k\\) \u9636\u4e8c\u9879\u6811\u7ed3\u6784\u552f\u4e00\u786e\u5b9a\uff0c\u4e24\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u540e\u5f97\u5230\u4e00\u4e2a \\(k+1\\) \u9636\u4e8c\u9879\u6811\uff0c\u800c\u4e8c\u9879\u6811\u672c\u8eab\u4e5f\u5177\u6709\u5806\u7684\u6027\u8d28\u3002

    \u4f46\u662f\uff0c\u867d\u7136\u4e8c\u9879\u6811\u5177\u6709\u5806\u7684\u6027\u8d28\uff0c\u770b\u4f3c\u80fd\u72ec\u7acb\u5b8c\u6210\u4f18\u5148\u961f\u5217\u7684\u529f\u80fd\uff0c\u4f46\u662f\u4e8c\u9879\u6811\u5bf9\u70b9\u7684\u6570\u91cf\u5177\u6709\u6bd4\u8f83\u4e25\u683c\u7684\u8981\u6c42\uff0c\u53ea\u6709\u70b9\u7684\u6570\u91cf\u7b26\u5408 \\(2^k\\) \u65f6\uff0c\u624d\u80fd\u4f7f\u7528\u4e8c\u9879\u6811\u8868\u793a\u3002\u56e0\u6b64\uff0c\u89c2\u5bdf\u4e00\u4e2a\u4e8c\u9879\u6811\u80fd\u627f\u8f7d\u7684\u70b9\u7684\u6570\u91cf\u7279\u5f81\uff0c\u6211\u4eec\u8054\u60f3\u5230\u4e8c\u8fdb\u5236\u5bf9\u6570\u7684\u8868\u793a\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u7528\u4e00\u7cfb\u5217\u4e8c\u9879\u6811\u6765\u7ef4\u62a4 \\(N\\) \u4e2a\u8282\u70b9\u7684\u4f18\u5148\u961f\u5217\uff0c\u800c\u5177\u4f53\u7528\u51e0\u9636\u4e8c\u9879\u6811\uff0c\u5219\u53d6\u51b3\u4e8e \\(N\\) \u7684\u4e8c\u8fdb\u5236\u8868\u8fbe\u4e2d\uff0c\u4e3a 1 \u7684\u662f\u54ea\u51e0\u4f4d\u3002

    Binomial Queue

    \u4e8c\u9879\u961f\u5217(Binomial Queue)\u662f\u4e00\u7cfb\u5217\u4e8c\u9879\u6811(Binomial Tree)\u7684\u96c6\u5408\uff0c\u5176\u4e2d\u6bcf\u4e2a\u4e8c\u9879\u6811\u7684\u9636\u6570 \\(k\\) \u90fd\u662f\u4e0d\u540c\u7684\uff0c\u53cd\u8fc7\u6765\u8bb2\u8fd9\u53e5\u8bdd\uff0c\u96c6\u5408\u4e2d \\(k\\) \u9636\u7684\u4e8c\u9879\u6811\u8981\u4e48\u53ea\u6709\u4e00\u4e2a\uff0c\u8981\u4e48\u6ca1\u6709\u3002

    \ud83c\udf30

    \u9898\u76ee\u5b9e\u73b0\u7684\u4e8c\u9879\u961f\u5217\u4e0d\u4e00\u5b9a\u6709 min \u6307\u9488\uff01\u6ce8\u610f\u9762\u5411\u9898\u9762\u548c\u9009\u9879\u5224\u65ad\u5b9e\u73b0\u3002

    \u800c\u4e3a\u4f55\u8981\u8fd9\u4e48\u8bbe\u8ba1\u4e8c\u9879\u961f\u5217\u7684\u7ed3\u6784\uff0c\u5177\u4f53\u4f53\u73b0\u5728\u64cd\u4f5c\u7684\u8bbe\u8ba1\u4e2d\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u64cd\u4f5c","title":"\u64cd\u4f5c","text":"

    \u5728\u4e8c\u9879\u961f\u5217\u4e2d\uff0c\u5408\u5e76\u662f\u4e00\u4e2a\u975e\u5e38\u57fa\u7840\u7684\u64cd\u4f5c\uff0c\u4e5f\u662f\u7cbe\u9ad3\u6240\u5728\u3002

    \u800c\u4e3a\u4e86\u611f\u53d7\u8fd9\u4e9b\u64cd\u4f5c\u7684\u7cbe\u9ad3\uff0c\u5728\u7406\u89e3\u4e8c\u9879\u961f\u5217\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u4ee5\u8bd5\u56fe\u4ece\u4e24\u4e2a\u7eac\u5ea6\u540c\u65f6\u7406\u89e3\u8fd9\u4e9b\u64cd\u4f5c\uff1a

    1. \u6811/\u5806\u7684\u7eac\u5ea6\uff0c\u5177\u4f53\u89c2\u5bdf\u6570\u636e\u7684\u8f6c\u79fb\u4e0e\u53d8\u5316\u8fc7\u7a0b\uff1b
    2. \u4e8c\u8fdb\u5236\u7684\u7eac\u5ea6\uff0c\u5c06 \\(k\\) \u9636\u4e8c\u9879\u6811\u62bd\u8c61\u4e3a bit vector \u7b2c \\(k\\) \u4f4d\u7684 1\uff0c\u4ece\u4e8c\u8fdb\u5236\u52a0\u6cd5\u7684\u89d2\u5ea6\u7406\u89e3\uff1b

    \u4e3a\u4e86\u65b9\u4fbf\u540e\u9762\u9610\u8ff0\uff0c\u6211\u4eec\u7b80\u5355\u505a\u4e00\u4e0b\u8bf4\u660e\uff1a

    \u7279\u5f81\u6bd4\u7279\u5411\u91cf

    \u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9a\u4e49\u5b83\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\uff08\u6211\u81ea\u5df1\u53e3\u80e1\u7684\u4e1c\u897f\uff0c\u4e0d\u662f\u672f\u8bed\uff09\u662f\u5b83\u7684\u5143\u7d20\u6570\u91cf\u7684\u4e8c\u8fdb\u5236\u8868\u793a\uff08\u53cd\u8fc7\u6765\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u771f\u503c\u8868\u793a\u961f\u5217\u4e2d\u7684\u5143\u7d20\u6570\u91cf\uff09\u3002

    \ud83c\udf30

    \u4f8b\u5982\u4e0b\u56fe\u7684\u4f8b\u5b50\uff0c\u4e00\u5171\u6709 11 \u4e2a\u8282\u70b9\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u521a\u597d\u5bf9\u5e94 \\(B_3\\) \\(B_1\\) \\(B_0\\)\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u8c61\u5f81\u4e86\u4e8c\u9879\u961f\u5217\u7684\u96c6\u5408\u4e2d\u6709\u54ea\u51e0\u9636\u7684\u4e8c\u9879\u6811\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u5217\u5408\u5e76","title":"\u961f\u5217\u5408\u5e76","text":"

    \u5408\u5e76\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5408\u5e76\u4e24\u4e2a\u96c6\u5408\uff0c\u5408\u5e76\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5206\u522b\u5408\u5e76\u6bcf\u4e00\u4e2a \\(k\\) \u9636\u4e8c\u9879\u6811\uff0c\u5f53\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u90fd\u5b58\u5728 \\(k\\) \u9636\u4e8c\u9879\u6811\u65f6\uff0c\u5b83\u4eec\u5408\u5e76\u4e3a\u4e00\u68f5 \\(k+1\\) \u9636\u4e8c\u9879\u6811\u3002\u53ef\u4ee5\u8054\u60f3\uff0c\u8fd9\u9879\u64cd\u4f5c\u201c\u5bf9\u5e94\u201d\u7740\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u7684\u76f8\u52a0\uff0c\u800c\u5408\u5e76\u64cd\u4f5c\u5219\u7c7b\u4f3c\u4e8e\u8fdb\u4f4d\u3002

    \u56e0\u6b64\uff0c\u5b83\u5c31\u7c7b\u4f3c\u4e8e\u4e00\u4e2a 1bit \u7684\u5168\u52a0\u5668\u3002

    graph LR;\nA([\"T1.B[k]\"])\nB([\"T2.B[k]\"])\nC([\"T.carry[k-1]\"])\nD([\"T.result[k]\"])\nE([\"T.carry[k]\"])\nADD[\"Adder\"]\nA ---> ADD\nB ---> ADD\nC ---> ADD\nADD ---> D\nADD ---> E

    \u4e8e\u662f\uff0c\u6839\u636e\u4e00\u4e2a carry \u4f4d\u3001\u4e00\u4e2a\u88ab\u5408\u5e76\u6811\u548c\u4e00\u4e2a\u5408\u5e76\u6811\u7684\u60c5\u51b5\uff0c\u6709\u4e00\u5171 \\(2^3=8\\) \u79cd\u53ef\u80fd\u3002

    \ud83c\udf30

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u8fd9\u6837\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u9700\u8981\u5408\u5e76\uff1a

    \u5219\u5176\u5408\u5e76\u7684\u64cd\u4f5c\u53ef\u4ee5\u8fd9\u6837\u63cf\u8ff0\u3002

    \u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

    \u7eff\u8272\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 1011\uff0c\u84dd\u8272\u7684\u4e3a 1001\uff0c\u4e24\u8005\u76f8\u52a0\u5f97\u5230 10100\u3002

    Frame 1Frame 2Frame 3Frame 4Frame 5Frame 6

    \\(B_0\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_0\\) \u548c \\(T_{blue}.B_0\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_0\\)\uff0c\\(T.R_0\\) \u4e3a\u7a7a\u3002

    \\(B_1\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\) \u548c \\(T.C_0\\) \u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_1\\)\uff0c\\(T.R_1\\) \u4e3a\u7a7a\u3002

    \\(B_2\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_1\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_2 = T.C_1\\)\uff0c\\(T.C_2\\) \u4e3a\u7a7a\u3002

    \\(B_3\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_1\\)\uff0c\\(T_{blue}.B_1\\) \u548c \\(T.C_2\\) \u90fd\u4e0d\u5b58\u5728\uff0c\u6240\u4ee5 \\(T.R_3\\) \u4e3a\u7a7a\uff0c\\(T.C_1\\) \u4e3a\u7a7a\u3002

    \\(B_4\\) \u5408\u5e76\uff0c\u7531\u4e8e \\(T_{green}.B_4\\) \u548c \\(T.C_3\\) \u90fd\u5b58\u5728\uff0c\u6240\u4ee5\u5408\u5e76\u4ea7\u751f\u4e3a \\(T.C_4\\)\uff0c\\(T.R_4\\) \u4e3a\u7a7a\u3002

    \\(B_5\\) \u5408\u5e76\uff0c\u7531\u4e8e\u53ea\u6709 \\(T.C_4\\) \u5b58\u5728\uff0c\u6240\u4ee5\u76f4\u63a5\u4ee4 \\(T.R_5 = T.C_4\\)\uff0c\\(T.C_5\\) \u4e3a\u7a7a\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u5355\u70b9\u63d2\u5165","title":"\u5355\u70b9\u63d2\u5165","text":"

    \u63d2\u5165\u7ed3\u70b9\u53ef\u4ee5\u770b\u4f5c\u5408\u5e76\u4e00\u4e2a\u53ea\u6709\u4e00\u4e2a\u7ed3\u70b9\u7684\u5de6\u504f\u5806\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u590d\u7528\u5408\u5e76\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u67e5\u8be2\u961f\u9996","title":"\u67e5\u8be2\u961f\u9996","text":"

    \u4e8c\u9879\u961f\u5217\u7684\u961f\u9996\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a\u961f\u5217\u7684\u6700\u5c0f\u503c\uff08\u6700\u5927\u503c\uff09\uff0c\u5c31\u662f\u8fd9\u82e5\u5e72\u4e2a\uff08\\(O(\\log N)\\) \u4e2a\uff09\u4e8c\u9879\u6811\u7684\u6839\u4e2d\u6700\u5c0f\uff08\u6700\u5927\uff09\u7684\u90a3\u4e2a\u3002\u6240\u4ee5\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log N)\\)\u3002

    \u4e0d\u8fc7\u6709\u65f6\u5019\u6211\u4eec\u4e5f\u4f1a\u989d\u5916\u7ef4\u62a4\u4e00\u4e2a\u6307\u9488\uff0c\u6307\u5411\u5f53\u524d\u6700\u5c0f\u7684\u90a3\u4e2a\u6839\uff0c\u6b64\u65f6\u5176\u590d\u6742\u5ea6\u4e3a \\(O(1)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u961f\u9996\u51fa\u961f","title":"\u961f\u9996\u51fa\u961f","text":"

    \u961f\u9996\u51fa\u961f\u9996\u5148\u8981\u627e\u5230\u961f\u9996\uff0c\u8fd9\u4ef6\u4e8b\u6211\u4eec\u5728#\u67e5\u8be2\u961f\u9996\u5df2\u7ecf\u8ba8\u8bba\u8fc7\u4e86\u3002

    \u627e\u5230\u961f\u9996\u540e\uff0c\u6211\u4eec\u5c06\u5176\u4ece\u4e8c\u9879\u961f\u5217\u4e2d\u79fb\u9664\uff0c\u6211\u4eec\u77e5\u9053\uff0c\u961f\u9996\u5fc5\u7136\u662f\u67d0\u4e2a\u4e8c\u9879\u6811\u7684\u6839\uff0c\u6240\u4ee5\u5220\u6389\u8fd9\u4e2a\u961f\u9996\u4ee5\u540e\uff0c\u5c31\u4f1a\u4ea7\u751f \\(k\\) \u4e2a\u65b0\u7684\u5b50\u6811\u3002

    \u800c\u8ba9\u6211\u4eec\u56de\u987e\u4e8c\u9879\u6811\u7684\u5408\u5e76\u8fc7\u7a0b\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u6240\u4ee5\u5f53\u6211\u4eec\u5220\u6389\u8fd9\u4e2a\u6839\uff0c\u4ea7\u751f\u7684\u6240\u6709\u5b50\u6811\u90fd\u662f\u4e8c\u9879\u6811\u3002

    \u56e0\u6b64\u6211\u4eec\u8054\u60f3\u5230\uff0c\u5c06\u961f\u9996\u51fa\u961f\u95ee\u9898\u8f6c\u5316\u4e3a\u5408\u5e76\u4e8c\u9879\u961f\u5217\u7684\u95ee\u9898\u2014\u2014\u5047\u8bbe \\(T\\) \u7684\u961f\u9996\u662f \\(B_k\\) \u7684\u6839\uff0c\u5219\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8f6c\u5316\u4e3a\u6c42\u89e3 \\(merge(T-B_k, B_k.root.children)\\) \u7684\u95ee\u9898\u3002

    \ud83c\udf30

    \u5047\u8bbe\u6211\u4eec\u6709\u5982\u4e0b\u7684\u4e8c\u9879\u961f\u5217\uff0c\u73b0\u5728\u8fdb\u884c\u5f39\u51fa\u961f\u9996\u7684\u64cd\u4f5c\u3002

    \u7279\u5f81\u6bd4\u7279\u89c6\u89d2\u5177\u4f53\u89c6\u89d2

    \u5982\u4e0a\u961f\u5217\uff0c\u5176\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a 10100\uff0c\u5171 20 \u4e2a\u8282\u70b9\u3002\u73b0\u5728\u5220\u6389\u4e00\u4e2a\uff0c\u5e94\u5f53\u6709 19 \u4e2a\u8282\u70b9\u3002

    \u66f4\u5177\u4f53\u7684\uff0c10100 = 10000 + 100\uff0c\u5206\u522b\u4ee3\u8868\u4e24\u4e2a\u4e8c\u9879\u6811\uff0c\u800c\u6211\u4eec\u7684\u6700\u5c0f\u503c\u662f\u4ece 10000 \u6240\u4ee3\u8868\u7684\u6811\u91cc\u5220\u9664\u7684\uff0c\u6240\u4ee5\u65b0\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u4e3a\uff1a(10000 - 1) + 100 = 1111 + 100 = 10011\uff0c\u5373 19 \u4e2a\u3002

    \u6ce8\u610f\u89c2\u5bdf\u8fd9\u91cc 10000 - 1 = 1111 \u7684\u53d8\u5316\uff0c\u5bfb\u627e\u5b83\u4e0e\u5177\u4f53\u89c6\u89d2\u4e2d\u7684\u5173\u7cfb\u3002

    Frame 1Frame 2Frame 3Frame 4

    \u9996\u5148\u627e\u5230\u961f\u9996\uff0c\u5373\u6b64\u65f6 min \u6307\u9488\u6307\u5411\u7684\u5730\u65b9\u3002\u89c2\u5bdf\u5b83\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u53d1\u73b0\u5b83\u5177\u6709\u56db\u4e2a\u5b50\u6811\uff0c\u5206\u522b\u662f \\(B_0 \\sim B_3\\)\uff0c\u5bf9\u5e94\u4e86\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u300c\u6839\u7684\u6240\u6709\u513f\u5b50\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684 \\(k\\) \u9636\u4e8c\u9879\u6811\u5408\u5e76\u8fc7\u6765\u7684\u300d\u3002

    \u4e8e\u662f\u6211\u4eec\u5c06\u8fd9\u4e2a\u5b50\u6811\u63d0\u53d6\u51fa\u6765\uff0c\u5c06\u539f\u672c\u7684\u4e8c\u9879\u961f\u5217\u62c6\u6210\u4e3a\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u3002

    \u73b0\u5728\u6211\u4eec\u5220\u9664\u201c\u961f\u9996\u201d\uff0c\u53d1\u73b0\u90a3\u68f5\u6811\u5206\u88c2\u6210\u4e86\u56db\u4e2a\u8fde\u7eed\u7684\u4e8c\u9879\u6811\uff0810000 - 1 = 1111\uff09\u3002

    \u73b0\u5728\u95ee\u9898\u5c31\u8f6c\u5316\u4e3a\u4e86\u4e24\u4e2a\u4e8c\u9879\u961f\u5217\u5408\u5e76\u7684\u95ee\u9898\u3002\u5728\u6b64\u7701\u7565\u3002

    \u6ce8\u610f\u89c2\u5bdf\u5b8c\u6210\u7684\u4e8c\u9879\u961f\u5217\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u548c\u4e0a\u9762\u7684\u7279\u5f81\u6bd4\u7279\u5411\u91cf\u89c6\u89d2\u7684\u7ed3\u679c\u3002

    \u63d0\u793a

    \u652f\u6301\u7740\u961f\u9996\u51fa\u961f\u53ef\u4ee5\u8fd9\u6837\u8fdb\u884c\u7684\u6027\u8d28\u5c31\u662f\uff0c\u6bcf\u4e00\u4e2a\u4e8c\u9879\u6811\u7684\u6839\u7684 children \u672c\u8eab\u4e5f\u90fd\u662f\u4e8c\u9879\u6811\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#\u644a\u8fd8\u5206\u6790","title":"\u644a\u8fd8\u5206\u6790","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec05/#project-fibonacci-queue","title":"Project: Fibonacci Queue","text":"

    Link

    YouTube: https://www.youtube.com/watch?v=6JxvKfSV9Ns

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/","title":"Lecture 6 | Backtracing","text":"

    \u7ea6 459 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    link

    OI Wiki: https://oi-wiki.org/search/backtracking/

    Wikipedia: https://en.wikipedia.org/wiki/Backtracking

    \u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u6bd4\u8f83\u6563\uff0c\u56e0\u4e3a\u56de\u6eaf\u662f\u4e00\u4e2a\u5f88\u57fa\u7840\u800c\u4e14\u5f88\u6cdb\u7528\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u611f\u89c9\u600e\u4e48\u8bb2\u90fd\u4e0d\u592a\u5408\u9002\u3002\u66f4\u591a\u7684\u662f\u9700\u8981\u5728\u5177\u4f53\u95ee\u9898\u3001\u5177\u4f53\u6a21\u578b\u4e2d\u53bb\u4f53\u4f1a\u3002

    \u52a0\u4e0a\u5982\u679c\u6bcf\u4e00\u4e2a\u5185\u5bb9\u90fd\u8981\u5f80\u6b7b\u91cc\u53bb\u53d9\u8ff0\u7684\u8bdd\u5b9e\u5728\u592a\u7d2f\u4e86\uff0c\u6240\u4ee5\u56de\u6eaf\u8fd9\u4e00\u7ae0\u60f3\u5077\u4e2a\u61d2\uff0c\u5c31\u7b80\u5355\u8bb0\u5f55\u4e00\u4e0b\u8bfe\u4e0a\u63d0\u5230\u8fc7\u7684\u4e00\u4e9b\u6a21\u578b\u5427\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u516b\u7687\u540e","title":"\u516b\u7687\u540e","text":"

    \u975e\u5e38\u7ecf\u5178\u7684\u95ee\u9898\uff0c\u76f8\u4fe1\u63a5\u89e6\u8fc7\u7b97\u6cd5\u7684\u540c\u5b66\u57fa\u672c\u4e0a\u90fd\u7ed5\u4e0d\u5f00\u8fd9\u4e2a\u4e1c\u897f\u3002

    link

    Wikipedia: https://en.wikipedia.org/wiki/Eight_queens_puzzle

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u6848\u4f8b-the-turnpike-reconstruction-problem","title":"[\u6848\u4f8b] The Turnpike Reconstruction Problem","text":"

    \u6536\u8d39\u7ad9\u91cd\u5efa\u95ee\u9898(The Turnpike Reconstruction Problem)\u63cf\u8ff0\u7684\u662f\u4e00\u6761\u88ab\u62bd\u8c61\u4e3a\u76f4\u7ebf\u7684\u516c\u8def\u4e0a\uff0c\u6709 \\(N\\) \u4e2a\u6536\u8d39\u7ad9\uff08\\(x_1, x_2, ..., x_N\\)\uff09\u3002\u73b0\u5728\u7ed9\u51fa\u4efb\u610f\u4e24\u4e2a\u6536\u8d39\u7ad9\u4e4b\u95f4\u7684\u8ddd\u79bb\u7684\u53ef\u91cd\u96c6\u5408 \\(D\\)\uff0c\uff08\u53ef\u60f3\u800c\u77e5\uff0c\u4e00\u5171\u6709 \\(\\frac{N(N-1)}{2}\\) \u4e2a\u5143\u7d20\uff09\uff0c\u6c42\u6536\u8d39\u7ad9\u7684\u4f4d\u7f6e\uff0c\u5373\u7ed9\u5b9a\u4efb\u610f\u4e24\u70b9\u7684\u8ddd\u79bb\u96c6\u5408\uff0c\u6c42\u51fa\u8fd9\u4e9b\u70b9\u7684\u5750\u6807\u3002

    solution

    \u5927\u6982\u601d\u8def\u5c31\u662f\uff0c\u9996\u5148\u5047\u8bbe \\(x_1 = 0\\)\uff0c\u90a3\u4e48\u5f88\u663e\u7136 \\(x_N = \\mathop{max} \\{D\\}\\)\u3002\u540c\u65f6\u6211\u4eec\u4e5f\u5f97\u5230\u8fd9\u6761\u7ebf\u6bb5\u7684\u957f\u5ea6\u4e3a \\(\\mathop{max} \\{D\\}\\)\u3002\u63a5\u4e0b\u6765 \\(D\\) \u4e2d\u4ece\u5927\u5230\u5c0f\u53d6\u51fa\u5143\u7d20\uff0c\u5219\u5fc5\u5b9a\u8ffd\u52a0\u5728 \\(x_1\\) \u53f3\u4fa7\u6216 \\(x_N\\) \u5de6\u4fa7\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002\uff08\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\u5728\u5b8c\u5168\u5b89\u6392\u597d\u4e4b\u524d\u90fd\u662f\u8ffd\u52a0\u5728\u5de6\u4fa7\u6216\u8005\u53f3\u4fa7\u7684\u65e2\u5b9a\u8fb9\u754c\u4e4b\u95f4\u7684\uff09\u3002\u800c\u6bcf\u4e00\u6b21\u8ffd\u52a0\u7684\u9009\u62e9\u90fd\u4ee3\u8868\u51b3\u7b56\u6811\u4e2d\u7684\u4e00\u4e2a\u5206\u652f\uff0c\u53ef\u4ee5\u5229\u7528\u5176\u5b83\u6761\u4ef6\u8fdb\u884c\u526a\u679d\uff08\u4f8b\u5982 \\(D\\) \u4e2d\u6709 \\(x_p - x_0\\) \u5c31\u4e00\u5b9a\u6709 \\(x_N - x_p\\)\uff09\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec06/#\u0251-\u03b2-\u526a\u679d","title":"\u0251-\u03b2 \u526a\u679d","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/","title":"Lecture 7 | Divide & Conquer","text":"

    \u7ea6 3626 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 18 \u5206\u949f

    \u611f\u89c9\u8fd9\u51e0\u8282\u8bfe\u4e0a\u7684\u5185\u5bb9\u90fd\u633a\u5bbd\u6cdb\u7684\u554ax

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Divide-and-conquer_algorithm

    \u5957\u7528 Wiki \u4e0a\u7684\u8bf4\u6cd5\uff0c\u5206\u6cbb\u6cd5(Divide-and-conquer algorithm)\u5c5e\u4e8e\u4e00\u79cd\u7b97\u6cd5\u8303\u578b\uff0c\u5b83\u7684\u57fa\u672c\u601d\u60f3\u662f\u5c06\u4e00\u4e2a\u95ee\u9898\u5206\u89e3\u4e3a\u82e5\u5e72\u4e2a\u89c4\u6a21\u8f83\u5c0f\u7684\u76f8\u540c\u95ee\u9898\uff0c\u7136\u540e\u9012\u5f52\u5730\u89e3\u51b3\u8fd9\u4e9b\u5b50\u95ee\u9898\uff0c\u6700\u540e\u5c06\u8fd9\u4e9b\u5b50\u95ee\u9898\u7684\u89e3\u5408\u5e76\u5f97\u5230\u539f\u95ee\u9898\u7684\u89e3\uff0c\u4e00\u4e2a\u6bd4\u8f83\u7ecf\u5178\u7684\u6848\u4f8b\u5c31\u662f\u5f52\u5e76\u6392\u5e8f\u3002

    \u672c\u8282\u7684\u91cd\u70b9\u5b9e\u9645\u4e0a\u4e5f\u5e76\u4e0d\u662f\u805a\u7126\u4e8e\u5206\u6cbb\u672c\u8eab\uff0c\u800c\u662f\u5176\u590d\u6742\u5ea6\u5206\u6790\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6848\u4f8b-closet-points-problem","title":"[\u6848\u4f8b] Closet Points Problem","text":"

    \u4e8c\u7ef4\u6700\u8fd1\u70b9\u95ee\u9898(Closet Points Problem)\uff0c\u6307\u7684\u662f\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684 n \u4e2a\u70b9\uff0c\u627e\u51fa\u5176\u4e2d\u8ddd\u79bb\u6700\u8fd1\u7684\u4e24\u4e2a\u70b9\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u6734\u7d20\u65b9\u6cd5","title":"\u6734\u7d20\u65b9\u6cd5","text":"

    \u6700\u6734\u7d20\u7684\u505a\u6cd5\u5f53\u7136\u662f\u679a\u4e3e\u6240\u6709\u7684\u70b9\u5bf9\uff0c\u4e00\u5171\u9700\u8981 \\(C_{N}^{2} = {{N}\\choose{2}} = \\frac{N(N-1)}{2}\\) \u5373\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5206\u6cbb\u65b9\u6cd5","title":"\u5206\u6cbb\u65b9\u6cd5","text":"

    \u73b0\u5728\u6211\u4eec\u7c7b\u6bd4\u6700\u5927\u5b50\u5e8f\u5217\u548c\u95ee\u9898\u7684\u5206\u6cbb\u505a\u6cd5\u3002

    \u6700\u5927\u5b50\u5e8f\u5217\u548c\u7684\u5206\u6cbb\u505a\u6cd5
    1. \u5c06\u5e8f\u5217\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
    2. \u6c42\u89e3\u8de8\u8d8a\u4e2d\u70b9\u7684\u6700\u5927\u5b50\u5e8f\u5217\u548c\uff1b
    3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5927\u503c\uff1b

    \u6211\u4eec\u53ef\u4ee5\u5c06\u6574\u4e2a\u5e73\u9762\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u5982\u56fe\u4e2d\u7eff\u8272\u7ebf\u5c06\u70b9\u5bf9\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u540c\u6837\u5206\u4e3a\u8fd9\u4e48\u4e09\u6b65\uff1a

    1. \u5c06\u70b9\u5bf9\u5206\u4e3a\u5de6\u53f3\u4e24\u90e8\u5206\uff0c\u5206\u522b\u6c42\u89e3\u6700\u8fd1\u70b9\u5bf9\uff1b
    2. \u5bfb\u627e\u8de8\u8d8a\u5206\u754c\u7ebf\u7684\u70b9\u5bf9\uff0c\u4ece\u4e2d\u5bfb\u627e\u6700\u8fd1\u70b9\u5bf9\uff1b
    3. \u6bd4\u8f83\u4e09\u8005\u7684\u5927\u5c0f\uff0c\u53d6\u6700\u5c0f\u503c\uff1b

    \u663e\u7136\uff0c\u6211\u4eec\u73b0\u5728\u9700\u8981\u89e3\u51b3\u7684\u5c31\u662f\u8981\u5982\u4f55\u8bbe\u8ba1\u7b2c\u4e8c\u6b65\u7684\u5b9e\u73b0\uff0c\u4ee5\u6c42\u66f4\u4f18\u7684\u590d\u6742\u5ea6\u3002

    \u9996\u5148\u6211\u4eec\u5047\u8bbe\u5728\u7b2c\u4e00\u6b65\u4e2d\uff0c\u6211\u4eec\u6c42\u5f97\u4e24\u8fb9\u6c42\u5f97\u7684\u6700\u5c0f\u8ddd\u79bb\u4e2d\u8f83\u5c0f\u7684\u90a3\u4e2a\u4e3a \\(\\delta\\)\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u679c\u7b54\u6848\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u66f4\u65b0\uff0c\u90a3\u4e48\u5b83\u7684\u8ddd\u79bb\u9700\u8981\u5c0f\u4e8e \\(\\delta\\)\u3002\u800c\u6211\u4eec\u77e5\u9053\uff0c\u5728\u7b2c\u4e8c\u6b65\u4e2d\u88ab\u62ff\u51fa\u6765\u7684\u70b9\u5bf9\uff0c\u4e00\u5b9a\u662f\u4e00\u4e2a\u5728\u5206\u754c\u7ebf\u5de6\u4fa7\u4e00\u4e2a\u5728\u5206\u754c\u7ebf \\(L\\) \u53f3\u4fa7\u3002\u6734\u7d20\u7684\u6765\u60f3\uff0c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5916\u7684\u70b9\u5bf9\u4e2d\uff0c\u6211\u4eec\u662f\u4e0d\u9700\u8981\u8003\u8651\u7684\u3002\u800c\u5728\u8ddd\u79bb\u5206\u754c\u7ebf \\(\\delta\\) \u4ee5\u5185\u7684\u70b9\uff0c\u90fd\u5b58\u5728\u6210\u4e3a\u7b54\u6848\u70b9\u5bf9\u70b9\u53ef\u80fd\u3002

    \u5982\u56fe\uff0c\u73b0\u5728\u6211\u4eec\u77e5\u9053\uff0c\u53ea\u6709\u843d\u5728\u4e24\u6761\u6df1\u7eff\u8272\u4e4b\u95f4\u7684\u70b9\u624d\u53ef\u80fd\u4f1a\u66f4\u65b0\u7b54\u6848\u3002

    \u73b0\u5728\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\uff0c\u4ece\u5206\u754c\u7ebf\u5de6\u4fa7\u7684\u533a\u57df\u91cc\u62ff\u4e00\u4e2a\u70b9\uff0c\u548c\u5206\u754c\u7ebf\u53f3\u8fb9\u7684\u4e00\u4e2a\u70b9\u505a\u5339\u914d\uff0c\u7136\u540e\u53d6\u6240\u6709\u7ed3\u679c\u4e2d\u7684\u6700\u5c0f\u70b9\u3002\u4e0d\u8fc7\u8fd9\u4ef6\u4e8b\u4ecd\u7136\u53ef\u4ee5\u4f18\u5316\u2014\u2014\u5728\u4e8c\u7ef4\u7684\u6570\u636e\u4e2d\uff0c\u4ec5\u5bf9\u4e00\u4e2a\u7eac\u5ea6\u505a\u7ea6\u675f\u5f80\u5f80\u4f1a\u5bfc\u81f4\u4e8b\u60c5\u53d8\u5f97\u4e0d\u90a3\u4e48\u7a33\u5b9a\uff0c\u6240\u4ee5\u6211\u4eec\u540c\u6837\u8003\u8651\u5728\u53e6\u5916\u4e00\u4e2a\u65b9\u5411\u505a\u7ea6\u675f\u3002

    \u4e5f\u662f\u57fa\u4e8e\u8303\u56f4\u7ea6\u675f\u7684\u8003\u8651\u3002\u5047\u8bbe\u6211\u4eec\u4ee5\u5de6\u4fa7\u7684\u70b9\u4e3a\u57fa\u51c6\uff0c\u4ece\u4e0a\u5f80\u4e0b\u505a\u904d\u5386\u8fd9\u4e9b\u70b9\uff0c\u90a3\u4e48\u5bf9\u4e8e\u70b9 \\(p_{l_i}\\)\uff0c\u5177\u6709\u80fd\u591f\u66f4\u65b0\u7b54\u6848\u7684\uff0c \\(\\mathop{dis} (p_{l_i}, p_{r_j}) \\leq \\delta\\) \u7684 \\(p_{r_j}\\)\uff0c\u4e00\u5b9a\u6709 \\(\\mathop{dis_{\\parallel bound}}(p_{l_i}, p_{r_j}) \\leq \\delta\\)\uff08\u76f4\u89d2\u4e09\u89d2\u5f62\u659c\u8fb9\u6700\u957f\uff09\u3002

    \u56e0\u6b64\uff0c\u5bf9\u4e8e\u9009\u5b9a\u70b9 \\(p_{l_i}\\)\uff0c\u5176\u6240\u6709\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u90fd\u88ab\u6846\u5b9a\u5728\u4e00\u4e2a \\(2\\delta \\times \\delta\\) \u7684\u77e9\u5f62\u4e2d\u3002

    \u800c\u66f4\u5947\u5999\u7684\u662f\uff0c\u8fd9\u4e2a\u7531\u53c2\u6570 \\(\\delta\\) \u6307\u5b9a\u7684\u77e9\u5f62\uff0c\u5de7\u5999\u5730\u7ea6\u675f\u4e86\u843d\u5728\u77e9\u5f62\u4e2d\u7684\u70b9\u7684\u6700\u5927\u6570\u91cf\u3002

    \u5728\u8fd9\u6837\u4e00\u4e2a\u533a\u57df\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u7ea6\u675f\u6240\u6709\u843d\u5728 \\(\\delta \\times \\delta\\) \u7684 L \u533a\u57df\u4e2d\u7684\u70b9\uff0c\u4e92\u76f8\u7684\u8ddd\u79bb\u90fd\u5927\u4e8e\u7b49\u4e8e \\(\\delta\\)\uff0c\u5bf9 R \u533a\u57df\u4e2d\u7684\u70b9\u4e5f\u6709\u76f8\u540c\u7684\u7ea6\u675f\u3002\u4e0d\u96be\u53d1\u73b0\uff0c\u5728\u6700\u7406\u60f3\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u2014\u2014\u95ed\u533a\u95f4\u3001\u5141\u8bb8\u70b9\u91cd\u5408\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u77e9\u5f62\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516b\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u56db\u4e2a\uff09\uff1a

    \u800c\u66f4\u4e00\u822c\u7684\u60c5\u51b5\u4e0b\uff0c\u6700\u591a\u4e5f\u53ea\u80fd\u653e\u516d\u4e2a\u70b9\uff08\u4e24\u8fb9\u5404\u4e09\u4e2a\uff09\u3002

    \u65e0\u8bba\u5982\u4f55\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u7ed3\u8bba\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u9009\u5b9a\u7684 \\(p_{l_i}\\)\uff0c\u5bfb\u627e\u5176\u53ef\u80fd\u5bfc\u81f4\u7b54\u6848\u66f4\u65b0\u7684\u70b9\u7684\u590d\u6742\u5ea6\u90fd\u662f\u5e38\u6570\u7ea7\u7684\u3002

    \u800c\u679a\u4e3e\u8fd9\u4e9b\u201c\u9009\u5b9a\u70b9\u201d\uff0c\u4e5f\u5c31\u662f\u679a\u4e3e \\(p_{l_i}\\)\uff0c\u5176\u590d\u6742\u5ea6\uff08\u6491\u6b7b\uff09\u662f \\(O(N)\\)\u3002

    \u4e8e\u662f\u6211\u4eec\u80fd\u5f97\u5230\u8fd9\u4e2a\u5206\u6cbb\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8ba1\u7b97\u9012\u63a8\u516c\u5f0f\uff1a

    \\[ T(N) = \\underbrace{2\\; T(\\frac{N}{2})}_{\\text{Step 1. divide}} + \\underbrace{O(N)}_{\\text{Step 2. across}} = O(N\\log N) \\]

    \u800c\u6211\u4eec\u63a5\u4e0b\u6765\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u5982\u4f55\u901a\u8fc7\u8fd9\u4e2a\u9012\u63a8\u5f0f\u5f97\u5230\u7ed3\u679c\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u590d\u6742\u5ea6\u5206\u6790","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u5728\u5f00\u59cb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u51fa\u66f4\u4e00\u822c\u7684\uff0c\u6211\u4eec\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\uff0c\u5373\u6c42\u89e3\u65f6\u95f4\u590d\u6742\u5ea6\u9012\u63a8\u516c\u5f0f\u5f62\u5982\u4e0b\u5f0f\u7684\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff1a

    \\[ T(N) = aT(\\frac{N}{b}) + f(N) \\;\\;\\;\\; a,b \\in Z^+ \\]

    \u4f8b\u5982\uff0c\u4e0a\u9762\u7684\u6700\u8fd1\u70b9\u5bf9\u95ee\u9898\uff0c\u5c31\u662f \\(a = 2,\\; b = 2,\\; f(N) = O(N)\\) \u7684\u60c5\u51b5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4ee3\u6362\u6cd5","title":"\u4ee3\u6362\u6cd5","text":"

    \u4ee3\u6362\u6cd5(substitution method)\u7684\u601d\u8def\u975e\u5e38\u76f4\u767d\uff0c\u9996\u5148\u6211\u4eec\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff08\u6bd4\u5982\u5927\u773c\u89c2\u5bdf\u6cd5\ud83d\udc40\uff09\u6765\u5f97\u5230\u4e00\u4e2a\u9884\u8bbe\u7684\u7ed3\u679c\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u4ee3\u5165\u3001\u5f52\u7eb3\u7684\u65b9\u6cd5\u6765\u8bc1\u660e\u8fd9\u4e2a\u7ed3\u679c\u3002

    \u5927\u80c6\u731c\u6d4b\uff0c\u5c0f\u5fc3\u6c42\u8bc1\uff01

    \ud83c\udf30

    \u9898\u9762\u89e3\u7b54

    \u6c42\u89e3\u590d\u6742\u5ea6\uff1a

    \\[ T(N) = 2\\; T(\\frac{N}{2}) + N \\]

    \u9884\u8bbe\uff1a

    \\[ T(N) = O(N\\log N) \\]

    \u4ee3\u5165\uff1a

    \\[ T(\\frac{m}{2}) = O(\\frac{m}{2}\\log \\frac{m}{2}) \\leq c \\frac{m}{2}\\log \\frac{m}{2} \\] \\[ T(m) = 2\\; T(\\frac{m}{2}) + m \\] \\[ T(m) \\leq 2\\; c \\frac{m}{2}\\log \\frac{m}{2} + m \\leq c m \\log m \\text{ for } c \\geq 1 \\]

    \u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684 \\(m = 2\\) \u5f0f\u5b50\u5c31\u53ef\u4ee5\u6210\u7acb\uff0c\u7531\u5f52\u7eb3\u6cd5\u5f97\u7ed3\u8bba\u6210\u7acb\u3002

    \u4e0d\u8fc7\u5f88\u663e\u7136\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u6211\u4eec\u6c42\u8bc1\u4e86\u4e00\u4e2a\u590d\u6742\u5ea6\u7684\u5047\u8bbe\u6210\u7acb\uff0c\u4f46\u5b83\u5e76\u4e0d\u4e00\u5b9a\u8db3\u591f\u7d27\uff0c\u8fd9\u662f\u731c\u89e3\u6cd5\u7684\u901a\u75c5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u9012\u5f52\u6811\u6cd5","title":"\u9012\u5f52\u6811\u6cd5","text":"

    \u9012\u5f52\u6811\u6cd5(recursion-tree method)\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u901a\u8fc7\u753b\u51fa\u9012\u5f52\u6811\u6765\u5206\u6790\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u5b9e\u9645\u4e0a\u548c\u76f4\u63a5\u6570\u5b66\u63a8\u7406\u7684\u533a\u522b\u4e0d\u662f\u5f88\u5927\uff0c\u4e3b\u8981\u5c31\u662f\u901a\u8fc7\u89c2\u5bdf\u9012\u5f52\u8fc7\u7a0b\u4e2d\u6570\u636e\u589e\u957f\u7684\u6a21\u5f0f\u6765\u8fdb\u884c\u5206\u6790\u3002

    some mathematical tools \\[ a^{\\log_b N} = \\exp^{\\frac{\\ln N}{\\ln b} \\ln a} = \\exp^{\\frac{\\ln a}{\\ln b} \\ln N} = N^{\\log_b a} \\]

    \u5c31\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u5c55\u5f00\u5f0f\u5b50\uff0c\u53ea\u4e0d\u8fc7\u901a\u8fc7\u6811\u72b6\u56fe\u7684\u5f62\u5f0f\u6216\u8bb8\u66f4\u52a0\u76f4\u89c2\u3002

    \u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u5c06\u5b83\u4e0d\u65ad\u5c55\u5f00\u4ee5\u540e\uff0c\u5176\u5f62\u5f0f\u5927\u6982\u4f1a\u662f\u8fd9\u6837\uff1a

    \\[ T(N) = ... = \\underbrace{\\sum_{leaf_i}^{leaves}T(N_{leaf_i})}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

    \u5176\u4e2d\uff0c\u7531\u4e8e\u672b\u7aef\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u4e00\u822c\u90fd\u8db3\u591f\u5c0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a \\(T(N_{leaf_i})\\) \u90fd\u662f\u5e38\u6570\uff0c\u4e8e\u662f\u4e0a\u5f0f\u53c8\u53ef\u4ee5\u53d8\u5316\u4e3a\uff1a

    \\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]

    \u5177\u4f53\u6765\u8bf4\u89e3\u91ca\u5176\u542b\u4e49\uff0ccombine \u90e8\u5206\u5c31\u662f\u5728\u6bcf\u4e00\u6b21\u201c\u5206\u6cbb\u201d\u7684\u5904\u7406\u65f6\u95f4\uff0c\u5982\u5408\u5e76\u5f53\u524d\u7684\u5b50\u95ee\u9898\u5206\u6cbb\u540e\u7684\u7ed3\u679c\uff0c\u4f53\u73b0\u5728\u9012\u63a8\u5f0f\u7684 \\(f(N)\\) \u90e8\u5206\uff1b\u800c conquer \u90e8\u5206\u6307\u7684\u662f\u5f53\u201c\u5206\u6cbb\u201d\u7684\u201c\u6cbb\u201d\u5728\u201c\u5206\u201d\u7684\u672b\u7aef\u7684\u4f53\u73b0\uff0c\u5373\u5bf9\u4e8e\u8db3\u591f\u5c0f\u7684\u89c4\u6a21\u7684\u95ee\u9898\uff0c\u4e0d\u518d\u9700\u8981\u7ee7\u7eed\u201c\u5206\u201d\u7684\u65f6\u5019\uff0c\u5bf9\u5176\u5904\u7406\u7684\u5f00\u9500\u3002

    \u5b9e\u9645\u4e0a\u5728\u4ee3\u7801\u5c42\u9762\u8fd9\u4e24\u90e8\u5206\u53ef\u80fd\u533a\u522b\u4e0d\u5927\uff08\u53ef\u80fd\u5c31\u662f\u4e00\u4e2a\u5206\u652f\u7684\u4e8b\u60c5\uff09\uff0c\u4e0d\u8fc7\u5728\u6570\u5b66\u610f\u4e49\u4e0a\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u9012\u63a8\u5f0f\u5b50\u6c42\u89e3\u6211\u4eec\u4e00\u822c\u662f\u9700\u8981\u201c\u9996\u9879\u201d\u7684\uff0c\u6216\u8005\u8bf4\u662f\u201c\u6700\u5e95\u5c42\u201d\u7684\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5e95\u5c42\u201d\u7684\u90e8\u5206\u5c31\u662f conquer \u90e8\u5206\u3002

    \u63a5\u4e0b\u6765\u7ed3\u5408 \ud83c\udf30 \u6765\u5206\u6790\u4e00\u4e0b\uff1a

    \ud83c\udf30

    From cy's ppt.

    \\underbrace \u4e0b\u9762\u90a3\u4e2a\u7b49\u5f0f\u7684\u8bc1\u660e\u5728\u4e0a\u9762\u7684 \"some mathematical tools\"\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6b64\u60c5\u51b5\u4e0b \\(a = 3,\\; b = 4,\\; f(N) = \\Theta(N^2)\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\u6bcf\u6b21\u5206\u4e3a \\(3\\) \u4e2a\u5b50\u95ee\u9898\uff0c\u5b50\u95ee\u9898\u7684\u89c4\u6a21\u662f \\(\\frac{N}{4}\\)\uff0c\u800c\u5408\u5e76\u5f00\u9500\u4e3a \\(\\Theta(N^2)\\)\u3002

    \u6b64\u65f6\u7531\u4e8e\u5206\u6cbb\u7684\u7b56\u7565\u662f\u76f8\u5bf9\u5747\u5300\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u8ba4\u4e3a\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u5b8c\u7f8e\u4e09\u53c9\u6811\u3002

    \u663e\u7136\uff0c\u6811\u9ad8\u4e3a \\(\\log_4 N\\)\uff0c\u6839\u8bb0\u4e3a \\(0\\)\uff0c\u6bcf\u4e2a\u5206\u6cbb\u8282\u70b9\u7684 combine \u5f00\u9500\u5df2\u7ecf\u6807\u6ce8\u5728\u56fe\u7684\u8282\u70b9\u4f4d\u7f6e\uff0c\u6a2a\u5411\u7bad\u5934\u6807\u8bb0\u7684\u662f\u5bf9\u8be5\u5c42\u6240\u6709\u8282\u70b9\u7684\u5f00\u9500\u7684\u6c42\u548c\u3002\u7279\u522b\u7684\uff0c\u5bf9\u4e8e\u6700\u5e95\u5c42\uff0c\u5373\u53f6\u5b50\u5c42\uff0c\u5b83\u8868\u793a\u7684\u662f conquer \u90e8\u5206\u7684\u5f00\u9500\uff08\u867d\u7136\u6211\u4e2a\u4eba\u89c9\u5f97\u6ca1\u5fc5\u8981\u533a\u5206\u8fd9\u4fe9\uff09\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u4e0b\u5f0f\u7684\u5f62\u5f0f\uff0c\u5bf9\u5176\u8fdb\u884c\u6c42\u548c\uff0c\u5f97\u5230\u56fe\u7247\u4e2d\u4e0b\u65b9\u7684\u5f0f\u5b50\u3002

    \\[ T(N) = ... = \\underbrace{c\\; N_{leaves}}_{conquer} + \\underbrace{\\sum_{node_i}^{non-leaf-nodes}f(N_{node_i})}_{combine} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u4e3b\u65b9\u6cd5","title":"\u4e3b\u65b9\u6cd5","text":"

    link

    OI Wiki: https://oi-wiki.org/basic/complexity/#\u4e3b\u5b9a\u7406-master-theorem

    Wikipedia: https://en.wikipedia.org/wiki/Master_theorem_(analysis_of_algorithms)

    \u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e00","title":"\u5f62\u5f0f\u4e00","text":"

    Form 1

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

    1. \u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b
    2. \u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b
    3. \u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

    \u60c5\u51b5\u4e09\u7684\u540e\u9762\u90a3\u4e2a\u6761\u4ef6\u53c8\u53eb regularity condition\u3002

    \u56de\u987e\u6211\u4eec\u5728\u524d\u9762\u8bf4\u7684\u90a3\u53e5\u8bdd\uff0c\u300c\u4e3b\u65b9\u6cd5(master method)\u4e4b\u6240\u4ee5\u53eb\u201c\u4e3b\u201d\uff0c\u662f\u56e0\u4e3a\u5b83\u5206\u6790\u7684\u662f combine \u548c conquer \u90e8\u5206\u5b70\u4e3a\u4e3b\u5bfc\u300d\uff0c\u89c2\u5bdf\u4e09\u79cd\u60c5\u51b5\u7684\u533a\u5206\u6761\u4ef6\u90fd\u662f\u6bd4\u8f83 \\(f(N)\\)\uff08\u6bcf\u4e00\u6b21\u7684 combine \u5f00\u9500\uff09 \u548c \\(N^{\\log_b{a}}\\)\uff08\u5373\u6c42\u548c\u5f0f\u4e2d\u7684 conquer \u7684\u5f00\u9500\uff09\uff0c\u5f53 \\(f(N)\\) \u8db3\u591f\u5c0f\u65f6\uff0c\u4ee5 conquer \u5f00\u9500\u4e3a\u4e3b\uff08i.e. case 1\uff09\uff1b\u5f53\u8db3\u591f\u5927\u65f6\uff0c\u4ee5 combine \u4e3a\u4e3b\uff08i.e. case 3\uff09\uff1b\u800c\u5176\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e2d\u95f4\u72b6\u6001\uff08i.e. case 2\uff09\u3002

    examples for form 1 "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e","title":"\u8bc1\u660e","text":"

    proof for form 1

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u6211\u4eec\u9700\u8981\u4f9d\u6b21\u8bc1\u660e\uff0c\u6b64\u5904\u6211\u4eec\u4f7f\u7528\u9012\u5f52\u6811\u6cd5\u8fdb\u884c\u8bc1\u660e\u3002

    \u60c5\u51b5\u4e00

    \ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}})\\)\uff1b

    \ud83e\udea7 \u8bc1\u660e\uff1a\u6211\u4eec\u9996\u5148\u9700\u8981\u7ed8\u5236\u51fa\u5bf9\u5e94\u7684\u9012\u5f52\u6811\uff0c\u6216\u8005\u641e\u6e05\u695a\u5c55\u5f00\u540e\u7684\u60c5\u51b5\uff0c\u56e0\u4e3a\u61d2\u5f97\u753b\u56fe\u6240\u4ee5\u6211\u8fd9\u91cc\u91c7\u7528\u6587\u5b57\u53d9\u8ff0\u3002

    \u6811\u9ad8 \\(\\log_b{N}\\)\uff0c\u5171 \\(\\log_b{N} + 1\\) \u5c42\uff0c\u5219\u6709\uff1a

    \u5f97\u5230\u6c42\u548c\u5f0f\uff1a

    \\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

    \u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=O(N^{(\\log_b{a})-\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

    \\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j O\\left(\\left(\\frac{N}{b^j}\\right)^{(\\log_b{a})-\\varepsilon}\\right)\\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} \\left(\\frac{a}{b^{(\\log_b{a})-\\varepsilon}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\sum_{j = 0}^{(\\log_b{N})-1} (b^{\\varepsilon})^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{1\\times(1-(b^\\varepsilon)^{\\log_b{N}})}{1-b^\\varepsilon} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times \\frac{N^\\varepsilon-1}{b^\\varepsilon-1} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{(\\log_b{a}) - \\varepsilon} \\times N^\\varepsilon \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + O\\left( N^{\\log_b{a}} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) \\end{aligned} \\]

    \u81f3\u6b64\uff0c\u60c5\u51b5\u4e00\u8bc1\u660e\u5b8c\u6bd5\u3002

    \u60c5\u51b5\u4e8c

    \ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(N^{\\log_b{a}}\\log{N})\\)\uff1b

    \ud83e\udea7 \u8bc1\u660e\uff1a\u524d\u9762\u7684\u90e8\u5206\u548c\u60c5\u51b5\u4e00\u7684\u7c7b\u4f3c\uff0c\u6211\u4eec\u901a\u8fc7\u76f8\u540c\u7684\u6b65\u9aa4\u5f97\u5230\u76f8\u540c\u7684\u6c42\u548c\u5f0f\uff1a

    \\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

    \u800c\u6211\u4eec\u6709\u6761\u4ef6 \\(f(N)=\\Theta(N^{\\log_b{a}})\\)\uff0c\u5c06\u5b83\u4ee3\u5165\u5230\u4e0a\u5f0f\u4e2d\u5f97\u5230\uff1a

    \\[\\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}a^j\\Theta\\left(\\left(\\frac{N}{b^j}\\right)^{\\log_b{a}}\\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\sum_{j=0}^{(\\log_b{N})-1}\\left(\\frac{a}{b^{\\log_b{a}}}\\right)^j \\right) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\Theta\\left( N^{\\log_b{a}} \\times \\log_b{N} \\right) \\\\ &= \\Theta(N^{\\log_b{a}}\\log{N}) \\end{aligned}\\]

    \u81f3\u6b64\uff0c\u60c5\u51b5\u4e8c\u8bc1\u660e\u5b8c\u6bd5\u3002

    \u60c5\u51b5\u4e09

    \ud83c\udfaf \u76ee\u6807\uff1a\u82e5 \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\) \u4e14 \\(af(\\frac{N}{b})<cf(N), \\text{ for } c<1 \\text{ and } \\forall N > N_0\\)\uff0c\u90a3\u4e48 \\(T(N)=\\Theta(f(N))\\)\uff1b

    \ud83e\udea7 \u8bc1\u660e\uff1a\u60c5\u51b5\u4e09\u7684\u8bc1\u660e\uff0c\u4ece\u6761\u4ef6\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u770b\u51fa\u6765\u548c\u524d\u9762\u7a0d\u8bb8\u6709\u4e9b\u4e0d\u540c\u4e86\u3002\u4e0d\u8fc7\u6c42\u548c\u5f0f\u7684\u5f97\u5230\u8fd8\u662f\u4e00\u6837\uff0c\u901a\u8fc7\u548c\u4e4b\u524d\u4e00\u6837\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u9996\u5148\u5f97\u5230\u6c42\u548c\u5f0f\uff1a

    \\[ T(N) = \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\]

    \u63a5\u4e0b\u6765\u7684\u6b65\u9aa4\u548c\u4e4b\u524d\u4e0d\u540c\u3002\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u89c2\u5bdf\u4e0d\u7b49\u5f0f \\(af(\\frac{N}{b})<cf(N)\\)\uff0c\u5728\u6211\u4eec\u7684\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u6211\u4eec\u6709\u5927\u91cf\u7684\u5f62\u5982 \\(a^jf(\\frac{N}{b^j})\\) \u7684\u9879\uff0c\u800c\u8fd9\u4e9b\u9879\u90fd\u53ef\u4ee5\u901a\u8fc7\u8fed\u4ee3\u4e0a\u9762\u90a3\u4e2a\u4e0d\u7b49\u5f0f\u6765\u5b9e\u73b0\uff0c\u5373\uff1a

    \\[ a^jf(\\frac{N}{b^j}) < c\\times a^{j-1}f(\\frac{N}{b^{j-1}}) < ... < c^j f(N) \\]

    \u5c06\u8fd9\u4e2a\u4e0d\u7b49\u5f0f\u5e94\u7528\u4e8e\u6c42\u548c\u5f0f\u4e2d\uff0c\u6211\u4eec\u80fd\u591f\u5f97\u5230\uff1a

    \\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + \\sum_{j=0}^{(\\log_b{N})-1}c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j=0}^{(\\log_b{N})-1}c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{c^{1-\\log_b{N}}}{1-c} \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\end{aligned} \\]

    \u800c\u7531\u4e8e \\(c<1\\)\uff0c\u6240\u4ee5 \\(\\log_b{c} < 0\\)\uff1b\u800c \\(N > 0\\)\uff0c\u800c\u4e14\u4e00\u822c\u975e\u5e38\u5927\uff0c\u6240\u4ee5 \\(N^{\\log_b{c}} \\in (0,1)\\)\u3002\u56e0\u6b64\uff0c\u5bf9\u4e8e\u786e\u5b9a\u7684\u5e38\u6570 \\(c\\)\uff0c\u6211\u4eec\u6709 \\(\\frac{1-N^{\\log_b{c}}}{1-c} \\in \\left(0, \\frac{1}{1-c}\\right)\\)\uff1b

    \u56e0\u6b64\uff0c\u4e0a\u5f0f\u4fbf\u80fd\u6539\u53d8\u4e3a\uff1a

    \\[ \\begin{aligned} T(N) &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ &< \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1}{1-c} \\end{aligned} \\]

    \u5e76\u4e14\uff0c\u7531\u4e8e \\(f(N)=\\Omega(N^{(\\log_b{a})+\\varepsilon}), \\text{ for }\\varepsilon>0\\)\uff0c\u6240\u4ee5\u6839\u636e\u7b26\u53f7\u5b9a\u4e49\u53ef\u4ee5\u5f97\u5230 \\(T(N) = O(f(N))\\)\u3002

    \u800c\u6211\u4eec\u77e5\u9053\uff0c\u8981\u8bc1\u660e \\(T(N) = \\Theta(f(N))\\) \u8fd8\u9700\u8981\u8bc1\u660e \\(T(N) = \\Omega(f(N))\\)\uff1a

    \\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) &\\geq f(N) \\end{aligned} \\]

    \u7531\u6b64\u5f97\u5230 \\(T(N) = \\Omega(f(N))\\)\uff0c\u6700\u7ec8\u8bc1\u5f97 \\(T(N) = \\Theta(f(N))\\)\uff0c\u81f3\u6b64\uff0c\u60c5\u51b5\u4e09\u8bc1\u660e\u5b8c\u6bd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e8c","title":"\u5f62\u5f0f\u4e8c","text":"

    Form 2

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N) = aT(\\frac{N}{b}) + f(N)\\) \u7684\u9012\u63a8\u5f0f\uff1a

    1. \u82e5 \\(af(\\frac{N}{b}) = \\kappa f(N) \\text{ for fixed } \\kappa < 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N))\\)\uff1b
    2. \u82e5 \\(af(\\frac{N}{b}) = \\Kappa f(N) \\text{ for fixed } \\Kappa > 1\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(N^{\\log_b{a}}) = \\Theta(a^{\\log_b{N}})\\)\uff08\u4e2a\u4eba\u611f\u89c9\u540e\u9762\u90a3\u4e2a\u5f0f\u5b50\u66f4\u65b9\u4fbf\u76f4\u89c2\u8bb0\u5fc6\uff09\uff1b
    3. \u82e5 \\(af(\\frac{N}{b}) = f(N)\\)\uff0c\u90a3\u4e48 \\(T(N) = \\Theta(f(N) \\log_b N)\\)\uff1b
    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u8bc1\u660e_1","title":"\u8bc1\u660e","text":"

    proof for form 2

    \u5bf9\u4e8e\u5f62\u5982 \\(T(N)=aT(N/b)+f(N)\\) \u7684\u9012\u63a8\u5f0f\uff0c\u57fa\u4e8e\u7ebf\u6027\u5173\u7cfb\u7684\u5f62\u5f0f\u4e8c\u7684\u8bc1\u660e\u5b9e\u9645\u4e0a\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u975e\u5e38\u76f8\u50cf\u3002

    \u5047\u8bbe\u6211\u4eec\u6709 \\(af(\\frac{N}{b}) = c f(N)\\)\uff0c\u53ea\u9700\u8981\u8ba8\u8bba \\(c\\) \u7684\u53d6\u503c\u8303\u56f4\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\uff0c\u5c31\u53ef\u4ee5\u4e00\u6b21\u6027\u5f97\u5230\u7ed3\u679c\u3002

    \u7c7b\u4f3c\u4e8e\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\uff0c\u6211\u4eec\u8fed\u4ee3\u8be5\u5173\u7cfb\u5f0f\uff0c\u5f97\u5230\u5173\u7cfb\uff1a

    \\[ a^j f(\\frac{N}{b^j}) = c^j f(N) \\]

    \u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

    \\[ \\begin{aligned} T(N) &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} a^j f(\\frac{N}{b^j}) \\\\ &= \\Theta(N^{\\log_b{a}}) + \\sum_{j = 0}^{(\\log_b{N})-1} c^j f(N) \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\sum_{j = 0}^{(\\log_b{N})-1} c^j \\\\ &= \\Theta(N^{\\log_b{a}}) + f(N) \\times \\frac{1-N^{\\log_b{c}}}{1-c} \\\\ \\end{aligned} \\]

    \u5929\u5450\uff0c\u8fd9\u4e0d\u5c31\u662f\u5f62\u5f0f\u4e00\u91cc\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u5f0f\u5b50\u5417\uff1f\u7136\u800c\u5f53\u6211\u4eec\u6ee1\u5fc3\u6b22\u559c\u5730\u6253\u7b97\u7167\u7740\u5b83\u8bc1\u660e\u5f62\u5f0f\u4e8c\u7684\u60c5\u51b5\u4e00\u65f6\u4f1a\u53d1\u73b0\uff0c\u6761\u4ef6\u597d\u50cf\u4e0d\u591f\u3002\u6211\u4eec\u73b0\u5728\u5e76\u6ca1\u6709\u663e\u5f0f\u7684 \\(f(N) = \\Omega(N^{\\log_b {a}} + \\epsilon)\\) \u7684\u6761\u4ef6\uff0c\u800c\u8fd9\u4e2a\u6761\u4ef6\u6700\u7ec8\u51b3\u5b9a conquer \u90e8\u5206\u548c combine \u90e8\u5206\u8c01\u5360\u4e3b\u5bfc\u5730\u4f4d\u3002\u4f46\u662f\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u53ea\u9700\u8981\u5f97\u5230 \\(f(N)\\) = \\(\\Omega(N^{\\log_b {a}})\\) \u5c31\u591f\u4e86\u3002\u5176\u5b9e \\(af(\\frac{N}{b}) \\sim c f(N)\\) \u8fd9\u4ef6\u4e8b\u672c\u8eab\u5c31\u6697\u542b\u4e86\u5b83\u4e0e \\(N^{\\log_b {a}}\\) \u7684\u5173\u7cfb\uff1a

    \u4e3a\u4e86\u91cd\u590d\u5229\u7528\u8fc7\u7a0b\uff0c\u6211\u76f4\u63a5\u7528 \\(\\sim\\) \u6765\u4ee3\u66ff \\(<,>,=\\) \u4e86\uff0c\u8fc7\u7a0b\u4e2d\u4fdd\u6301\u4f20\u9012\u6027\u3002

    \\[ c f(N) \\sim a f(\\frac{N}{b}) \\sim ... \\sim a^L f(\\frac{N}{b^L}) \\]

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u4e00\u6b65\u8fd8\u662f\u548c\u5f62\u5f0f\u4e00\u7684\u7b2c\u4e09\u79cd\u60c5\u51b5\u7684\u8bc1\u660e\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\u3002\u53ea\u4e0d\u8fc7\u73b0\u5728\u6211\u4eec\u8981\u66f4\u8fdb\u4e00\u6b65\u5730\u770b\u8fd9\u4e2a\u5f0f\u5b50\u3002

    \u5f53 \\(c < 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) > af(\\frac{N}{b})\\)\uff1b\u5f53 \\(c = 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) = af(\\frac{N}{b})\\)\uff1b \\(c > 1\\) \u65f6\uff0c\u5b9e\u9645\u4e0a\u6709 \\(f(N) < af(\\frac{N}{b})\\)\uff1b

    \u6211\u4eec\u5047\u8bbe \\(\\frac{N}{b^L}\\) \u8db3\u591f\u5c0f\uff08\u5373\u9012\u5f52\u5230\u6700\u672b\u7aef\uff0c\u53ea\u9700\u8981\u8fdb\u884c conquer \u7684\u65f6\u5019\uff09\uff0c\u5373 \\(\\frac{N}{b^L} = \\Theta(1)\\)\uff0c\u90a3\u4e48\u5c31\u6709 \\(L = \\Theta(\\log_b{N})\\)\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u6709\uff1a

    \\[ f(N) \\sim \\Theta(a^{\\log_b{N}}) = \\Theta(N^{\\log_b{a}}) \\]

    \u7686\u5927\u6b22\u559c\uff01\u4e09\u4e2a\u613f\u671b\uff0c\u4e00\u6b21\u6ee1\u8db3\uff01

    \u5269\u4e0b\u7684\u8bc1\u660e\u8fc7\u7a0b\u6211\u5c31\u4e0d\u518d\u8d58\u8ff0\u4e86\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec07/#\u5f62\u5f0f\u4e09","title":"\u5f62\u5f0f\u4e09","text":"

    Form 3

    \u7b2c\u4e09\u79cd\u5f62\u5f0f\u662f\u5bf9\u4e8e \\((N)\\) \u7684\u7279\u522b\u5f62\u5f0f\uff0c\u5f53\u9012\u63a8\u5173\u7cfb\u6ee1\u8db3\uff1a

    \\[ \\begin{aligned} & T(N) = a T(\\frac{n}{b}) + \\Theta(N^k \\log^p{N}) & \\text{Where } a \\geq 1,\\; b > 1,\\; p \\geq 0 \\end{aligned} \\]

    \u5176\u590d\u6742\u5ea6\u6709\u7ed3\u8bba\uff1a

    \\[ T(N) = \\left\\{ \\begin{aligned} & O(N^{\\log_b{a}}) & \\text{if } a > b^{k} \\\\ & O(N^k \\log^{p+1}{N}) & \\text{if } a = b^{k} \\\\ & O(N^k \\log^{p}{N}) & \\text{if } a < b^{k} \\end{aligned} \\right. \\]

    \u5b9e\u9645\u4e0a\u8fd9\u4e2a\u5f0f\u5b50\u4e5f\u975e\u5e38\u597d\u8ba4\uff0c\u5c5e\u4e8e\u5f62\u5f0f\u4e8c\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u3002\u53ef\u4ee5\u5bf9\u7167\u7740\u770b\uff0c\u975e\u5e38\u5bb9\u6613\u770b\u51fa\u5173\u7cfb\u3002

    \u53ea\u4e0d\u8fc7\u5bf9\u4e8e\u7279\u6b8a\u60c5\u51b5\uff0c\u8fd9\u4e2a\u5f62\u5f0f\u7684\u7ea6\u675f\u66f4\u52a0\u7cbe\u786e\uff0c\u8bc1\u660e\u8fc7\u7a0b\u6709\u7f18\u518d\u8865\u5427x

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec08/","title":"Lecture 8 | Dynamic Programming","text":"

    \u7ea6 4 \u4e2a\u5b57

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/","title":"Lecture 9 | Greedy Algorithms","text":"

    \u7ea6 895 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

    \u679c\u7136\u8d8a\u6765\u8d8a\u5bbd\u6cdb\u4e86

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/#\u6982\u5ff5","title":"\u6982\u5ff5","text":"

    \u8d2a\u5fc3\u7b97\u6cd5(Greedy Algorithms)\u662f\u4e00\u79cd\u5728\u6c42\u89e3\u4f18\u5316\u95ee\u9898\u65f6\u91c7\u7528\u7684\u7b56\u7565\uff0c\u5b83\u5728\u6bcf\u4e2a\u51b3\u7b56\u9636\u6bb5\u90fd\u9009\u62e9\u5f53\u524d\u770b\u8d77\u6765\u6700\u4f18\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4ece\u800c\u5e0c\u671b\u80fd\u591f\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u89e3\u3002\u8d2a\u5fc3\u7b97\u6cd5\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c40\u90e8\u6700\u4f18\u9009\u62e9\uff0c\u901a\u8fc7\u4e00\u7cfb\u5217\u5c40\u90e8\u6700\u4f18\u7684\u9009\u62e9\uff0c\u6765\u8fbe\u5230\u5168\u5c40\u6700\u4f18\u7684\u76ee\u6807\u3002\u8d2a\u5fc3\u7b97\u6cd5\u6613\u4e8e\u5b9e\u73b0\uff0c\u4f46\u5e76\u4e0d\u603b\u662f\u80fd\u591f\u5f97\u5230\u5168\u5c40\u6700\u4f18\u89e3\uff0c\u56e0\u6b64\u5728\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\u65f6\u9700\u8981\u5206\u6790\u95ee\u9898\u7684\u7279\u6027\u4ee5\u786e\u4fdd\u5176\u9002\u7528\u6027\u3002

    \u2014\u2014ChatGPT

    \u8d2a\u5fc3\u601d\u60f3\u548c\u5b83\u7684\u540d\u5b57\u4e00\u6837\u7b80\u5355\u66b4\u529b\uff0c\u5c31\u662f\u5728\u6bcf\u4e00\u4e2a\u6b65\u9aa4\u4e2d\u90fd\u91c7\u53d6\u5c40\u90e8\u6700\u4f18\u89e3\uff0c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u3002\u4f46\u662f\u663e\u7136\u8fd9\u4e2a\u65b9\u6cd5\u5e76\u4e0d\u603b\u80fd\u201c\u6700\u7ec8\u6c42\u5f97\u6700\u4f18\u89e3\u201d\u3002\u56e0\u6b64\u867d\u7136\u8fd9\u4e2a\u65b9\u6cd5\u770b\u8d77\u6765\u76f4\u63a5\u66b4\u529b\uff0c\u4f46\u662f\u5982\u4f55\u627e\u5230\u7528\u300c\u8d2a\u5fc3\u300d\u89e3\u51b3\u95ee\u9898\u7684\u8def\u5f84\uff0c\u5f80\u5f80\u662f\u9700\u8981\u52a8\u52a8\u8111\u5b50\u7684\u3002

    \u548c dp \u4e00\u6837\uff0c\u8d2a\u5fc3\u662f\u4e00\u4e2a\u6bd4\u8f83\u601d\u60f3\u6027\u8d28\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u501f\u52a9\u8bb8\u591a\u6848\u4f8b\u6765\u8fdb\u884c\u5206\u6790\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec09/#\u6848\u4f8b-activity-selection-problem","title":"[\u6848\u4f8b] Activity Selection Problem","text":"

    \u5728\u8bfe\u4ef6\u4e0a\uff0c\u6d3b\u52a8\u9009\u62e9\u95ee\u9898(Activity Selection Problem)\u7684\u9648\u8ff0\u5982\u4e0b\uff1a

    Activity Selection Problem

    Given a set of activities \\(S = { a_1, a_2, ..., a_n }\\) that wish to use a resource (e.g. a classroom). Each \\(a_i\\) takes place during a time interval \\([s_i, f_i)\\).

    Activities \\(a_i\\) and \\(a_j\\) are compatible if \\(s_i \\geq f_j\\) or \\(s_j \\geq f_i\\) (i.e. their time intervals do not overlap).

    Goal: Select a maximum-size subset of mutually compatible activities.

    \u62bd\u8c61\u6765\u8bf4\u5c31\u662f\u4e00\u4e2a\u4e00\u7ef4\u7684\u5bc6\u94fa\u95ee\u9898\u3002\u7ed9\u5b9a\u65f6\u95f4\u7ebf\u4e0a\u7684\u82e5\u5e72\u533a\u95f4 \\([s_i, f_i)\\)\uff0c\u6c42\u51fa\u6700\u591a\u80fd\u4e0d\u91cd\u53e0\u5730\u5728\u8fd9\u4e2a\u65f6\u95f4\u7ebf\u4e0a\u653e\u7f6e\u591a\u5c11\u4e2a\u533a\u95f4\u3002\u9898\u76ee\u989d\u5916\u4fdd\u8bc1\u4e86\u8f93\u5165\u6570\u636e\u662f\u6839\u636e \\(f_i\\) \u6709\u5e8f\u7684\uff0c\u4e0d\u8fc7\u8fd9\u4e0d\u662f\u5f88\u91cd\u8981\u3002

    bad try 1

    \u4e00\u4e2a\u975e\u5e38 naive \u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u54ea\u95e8\u8bfe\u5148\u5f00\u59cb\u6211\u5148\u9009\u54ea\u95e8\u8bfe\uff0c\u8fd9\u4e2a\u60f3\u6cd5\u975e\u5e38\u7684\u8282\u7701\u8111\u7ec6\u80de\uff0c\u4f46\u662f\u663e\u7136\u4e0d\u5bf9\u3002\u6211\u968f\u968f\u4fbf\u4fbf\u6765\u4e2a\u6700\u65e9\u5f00\u59cb\u6700\u665a\u7ed3\u675f\u7684\u8bfe\uff0c\u5c31\u80fd\u76f4\u63a5 hack \u6389\u8fd9\u4e2a\u65b9\u6cd5\u3002

    bad try 2

    \u518d\u6765\u4e00\u4e2a\u5929\u771f\u7684\u60f3\u6cd5\uff0c\u6211\u6bcf\u6b21\u90fd\u9009\u533a\u95f4\u957f\u5ea6\u6700\u5c11\u7684\uff0c\u867d\u7136\u770b\u8d77\u6765\u80fd\u8ba9\u5b83\u201c\u76f8\u5bf9\u6bd4\u8f83\u591a\u201d\uff0c\u4f46\u662f\u663e\u7136\u4e5f\u65e0\u6cd5\u4fdd\u8bc1\u7ed3\u679c\u7684\u6700\u4f18\u6027\uff0c\u4e5f\u975e\u5e38\u597d hack\u3002

    search

    \u800c\u53e6\u5916\u4e00\u4e2a\u66b4\u529b\u7684\u60f3\u6cd5\u5c31\u662f\uff0c\u6211\u53bb\u679a\u4e3e\u6bcf\u4e00\u79cd\u53ef\u80fd\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4fd7\u79f0\u7684\u66b4\u641c\uff0c\u8fd8\u53ef\u4ee5\u7528\u4e0a\u526a\u679d\u7b49\u64cd\u4f5c\uff0c\u867d\u7136\u53ef\u4ee5\uff0c\u4f46\u662f\u592a\u4e0d\u4f18\u96c5\u4e86\uff0c\u800c\u4e14\u65f6\u95f4\u590d\u6742\u5ea6\u672a\u5fc5\u662f\u6211\u4eec\u80fd\u63a5\u53d7\u7684\u3002

    dp

    \u65e2\u7136\u66b4\u641c\u4e0d\u884c\uff0c\u90a3\u8bd5\u8bd5 dp \u5462\uff1f\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5199\u51fa\u5982\u4e0b\u8f6c\u79fb\u65b9\u7a0b\uff1a

    \\[ dp_i = \\left\\{ \\begin{aligned} &1 & i = 1 \\\\ &\\max\\{ dp_{i-1}, dp_{f(i)} + 1 \\} & i > 1 \\end{aligned} \\right. \\]

    \u5176\u4e2d\uff0c\\(dp_i\\) \u8868\u793a\u5230\u7b2c \\(i\\) \u4e2a\u533a\u95f4\u622a\u6b62\u7684\u65f6\u95f4\u4e3a\u6b62\uff0c\u6700\u591a\u6709\u591a\u5c11\u4e2a\u9879\u76ee\u53ef\u4ee5\u88ab\u5b89\u6392\uff1b\\(f(i)\\) \u662f\u6700\u5927\u7684\u6ee1\u8db3 \\(f_j \\leq s_i\\) \u7684\u533a\u95f4\u7684\u7f16\u53f7 \\(j\\)\uff0c\u4e5f\u5c31\u662f\u80fd\u591f\u4e0d\u91cd\u53e0\u653e\u4e0b\u7684\uff0c\u6700\u665a\u7684\u90a3\u4e2a\u6d3b\u52a8\u3002

    \u6211\u4eec\u53d1\u73b0\uff0c\u8fd9\u4e48\u505a\u662f\u53ef\u4ee5\u7684\u3002\u53ea\u4e0d\u8fc7\u8fd9\u6837\u505a\u7684\u8bdd\uff0c\u5176\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\)\u3002

    greedy

    \u663e\u7136\uff0c\u8fd9\u4e2a\u6848\u4f8b\u653e\u5728\u8fd9\u4e2a\u5730\u65b9\u80af\u5b9a\u662f\u6709\u8d2a\u5fc3\u89e3\u7684\u3002\u800c\u4e14\u9898\u76ee\u7684 \u201cAssume\u201d \u63d0\u793a\u6027\u5df2\u7ecf\u5f88\u5f3a\u4e86\u3002\u6211\u4eec\u53ea\u9700\u8981\u6309\u7167\u7ed3\u675f\u65f6\u95f4\uff0c\u904d\u5386\u8fd9\u4e9b\u533a\u95f4\uff0c\u80fd\u585e\u4e0b\u5c31\u585e\uff0c\u5373\u53ef \\(O(N)\\) \u8d2a\u5fc3\u6c42\u89e3\u3002

    TODO:

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/","title":"Lecture 10 | NP Completeness","text":"

    \u7ea6 3027 \u4e2a\u5b57 10 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f

    \u5bfc\u8bfb

    \u7531\u4e8e\u672c\u8282\u6d89\u53ca\u8f83\u591a\u6982\u5ff5\uff0c\u5e76\u4e14\u77e5\u8bc6\u6811\u957f\u7684\u5f88\u84ec\u677e\uff0c\u6240\u4ee5\u6211\u51b3\u5b9a\u5c1d\u8bd5\u975e\u7ebf\u6027\u7ec4\u7ec7\u5185\u5bb9\uff0c\u56e0\u6b64\u672c\u6587\u7684\u9605\u8bfb\u987a\u5e8f\u53ef\u80fd\u4e5f\u5e76\u4e0d\u4f1a\u662f\u7ebf\u6027\u7684\u3002

    \u6240\u6709\u63d0\u5230\u7684\u3001\u5e76\u4e14\u672c\u6587\u4f1a\u4ecb\u7ecd\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u90fd\u4f1a\u4ee5\u94fe\u63a5\u548c\u653e\u5927\u955c\ud83d\udd0d\u7684\u5f62\u5f0f\u51fa\u73b0\u3002\u63a8\u8350\u4f7f\u7528\u9f20\u6807\u4e2d\u952e\u7b49\u65b9\u5f0f\u6253\u5f00\u65b0\u6807\u7b7e\u9875\u67e5\u770b\uff0c\u65b9\u4fbf\u56de\u6eaf\u3002

    \u63a8\u8350\u7684\u9605\u8bfb\u987a\u5e8f\u662f\uff0c\u987a\u7740\u8bfb\u4e0b\u53bb\uff0c\u6bcf\u6b21\u51fa\u73b0 \ud83d\udd0d \u90fd\u8fdb\u884c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\u5f0f\u7684\u5b66\u4e60\uff0c\u76f4\u81f3\u770b\u5b8c\u5168\u6587\u3002

    \u5176\u4e2d\uff0c\u5728 \u76f8\u5173\u6982\u5ff5 \u4e4b\u540e\u7684\u90e8\u5206\uff0c\u6211\u4f1a\u4fdd\u8bc1\u5728\u524d\u9762\u90fd\u6709\u63d0\u53ca\uff0c\u800c\u5176\u4e4b\u524d\u7684\u5185\u5bb9\uff0c\u63a8\u8350\u90fd\u5728\u987a\u5e8f\u9605\u8bfb\u4e2d\u6d89\u53ca\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    Links

    OI Wiki: https://oi-wiki.org/misc/cc-basic/

    Wikipedia: https://en.wikipedia.org/wiki/P_versus_NP_problem

    Wikipedia: https://en.wikipedia.org/wiki/NP-completeness

    Wikipedia: https://en.wikipedia.org/wiki/NP-hardness

    \u6839\u636e\u95ee\u9898\u7684\u96be\u5ea6\uff0c\u7531\u4e0d\u540c\u7684\u5b9a\u4e49\u5212\u5206\uff0c\u95ee\u9898\u53ef\u4ee5\u5206\u4e3a\uff1a

    P \u95ee\u9898(polynomial time)\u3001NP \u95ee\u9898(nondeterministic polynomial time)\u3001NPC \u95ee\u9898(NP complete)\u3001NPH \u95ee\u9898(NP hard)\u3002\u9664\u6b64\u4e4b\u5916 \uff0c\u6211\u4eec\u8fd8\u9700\u8981\u989d\u5916\u4e86\u89e3\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898(undecidable)\u3002

    \u7531\u4e8e\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u6bd4\u8f83\u7279\u6b8a\uff0c\u6240\u4ee5\u6211\u5148\u653e\u5728\u524d\u9762\u4ecb\u7ecd\u3002

    Undecidable Problem

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Undecidable_problem

    \u4e0d\u53ef\u5224\u5b9a\u95ee\u9898(undecidable problem)\u662f\u4e00\u7c7b\u7279\u6b8a\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff0c\u5b83\u7684\u7279\u70b9\u662f\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u6c42\u89e3\u5b83\u7684\u7ed3\u679c\u3002

    \u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5178\u578b\u7684\u4f8b\u5b50\u5c31\u662f\u505c\u673a\u95ee\u9898\ud83d\udd0d\u3002

    \u6211\u4eec\u53ef\u4ee5\u7528\u8fd9\u6837\u4e00\u5f20\u56fe\u6765\u8868\u793a\u5176\u4ed6\u51e0\u4e2a\u6982\u5ff5\u7684\u5173\u7cfb\uff1a

    Source: https://en.wikipedia.org/wiki/NP-hardness

    \u53ef\u4ee5\u7c97\u6d45\u7684\u6309\u7167\u56fe\u4e2d\u7684\u201cComplexity\u201d\u8f74\u6765\u7406\u89e3\u5176\u4e2d\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u63a5\u4e0b\u6765\u7ed9\u51fa\u5b83\u4eec\u7684\u8be6\u7ec6\u5b9a\u4e49\uff1a

    P

    P \u53d6\u81ea polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002

    NP

    NP \u5373 nondeterministic polynomial time\uff0c\u6307\u7684\u662f\u53ef\u4ee5\u7528\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u89e3\u51b3\u7684\u95ee\u9898\u3002\u8fd9\u4e2a\u8bf4\u6cd5\u7b49\u4ef7\u4e8e\u53ef\u4ee5\u7528\u786e\u5b9a\u578b\u56fe\u7075\u673a\ud83d\udd0d\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\uff08\u5224\u65ad\u7b54\u6848\u662f\u5426\u6b63\u786e\uff09\u3002

    \u4e5f\u5c31\u662f\u6211\u4eec\u901a\u5e38\u610f\u4e49\u4e0b\u6240\u8bf4\u7684\uff0c\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u9a8c\u8bc1\u7684\u95ee\u9898\u3002

    NPC

    NPC \u5373 NP complete\uff0cNP \u5b8c\u5168\uff0c\u662f NP \u4e2d\u6700\u96be\u7684\u51b3\u5b9a\u6027\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u65e0\u9650\u5b9a\u8bcd\u7684\u6700\u96be\u7684\u95ee\u9898\uff01\uff09\u3002\u800c\u6211\u4eec\u79f0\u6ee1\u8db3\u5982\u4e0b\u6761\u4ef6\u7684\u95ee\u9898\u4e3a NPC \u95ee\u9898\uff1a

    1. \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. \u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff1b

    \u7531 2 \u53ef\u4ee5\u6709\u7ed3\u8bba\uff0c\u6240\u6709\u7684 NPC \u95ee\u9898\u96be\u5ea6\u76f8\u540c\u2014\u2014\u4e00\u65e6\u6709\u4e00\u4e2a NPC \u95ee\u9898\u88ab\u89e3\u51b3\uff0c\u90a3\u4e48\u6240\u6709 NPC \u95ee\u9898\uff0c\u4e43\u81f3\u6240\u6709 NP \u95ee\u9898\u90fd\u80fd\u88ab\u89e3\u51b3\u3002

    \u5982\u679c\u6211\u4eec\u8bd5\u56fe\u8bc1\u660e\u4e00\u4e2a\u95ee\u9898\u662f NPC \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8fd9\u79cd\u624b\u6bb5\uff1a

    1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH\uff08\u5728\u4e0b\u9762\uff09\u95ee\u9898\uff1b

    \u7b2c\u4e00\u4e2a\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\u662f Circuit-SAT\ud83d\udd0d \u95ee\u9898\u3002

    P ?= NP & NPC

    \u5173\u4e8e P \u548c NP \u7684\u5173\u7cfb\uff0c\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053 P \u662f\u5426\u80fd\u7b49\u4e8e NP\uff0c\u5373\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u662f\u5426\u5b58\u5728\u591a\u9879\u5f0f\u7b97\u6cd5\u53ef\u4ee5\u89e3\u51b3\u4e00\u5207 NP \u95ee\u9898\u3002

    \u800c\u5176\u4e2d\u7684\u5173\u952e\u5c31\u662f\uff0c\u5982\u679c\u6211\u4eec\u80fd\u627e\u5230 NPC \u95ee\u9898\u7684\u591a\u9879\u5f0f\u89e3\u6cd5\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u8bc1\u660e P = NP\u3002

    NPH

    NPH \u5373 NP hard\uff0cNP \u56f0\u96be\uff0c\u5b83\u4e0d\u4e00\u5b9a\u9700\u8981\u662f NP \u95ee\u9898\u3002\u800c\u6240\u6709 NP \u95ee\u9898\u90fd\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a NPH \u95ee\u9898\u3002

    \u4e5f\u5c31\u662f\u8bf4 \\(NPC = NP \\cap NPH\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u8bfe\u5185\u6848\u4f8b","title":"\u8bfe\u5185\u6848\u4f8b","text":"

    \u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u90fd\u662f\u8bfe\u4ef6\u4e2d\u63d0\u5230\u7684\u4e00\u4e9b\u5177\u4f53\u95ee\u9898\u548c\u6848\u4f8b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#halting-problem","title":"Halting Problem","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Halting_problem

    \u505c\u673a\u95ee\u9898\u662f\u4e00\u4e2a\u5178\u578b\u7684\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\uff0c\u5b83\u6307\u7684\u662f\uff0c\u5bf9\u4e8e\u4efb\u610f\u4e00\u4e2a\u7a0b\u5e8f\uff0c\u6211\u4eec\u65e0\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u7b97\u6cd5\u6765\u5224\u65ad\u5b83\u662f\u5426\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u505c\u673a\uff08\u5373\u5224\u65ad\u7a0b\u5e8f\u662f\u5426\u4f1a\u6b7b\u5faa\u73af\uff09\u3002

    \u6211\u4eec\u901a\u8fc7\u53cd\u8bc1\u6cd5\u53ef\u4ee5\u8bc1\u660e\uff1a

    \u5047\u8bbe\u5b58\u5728\u51fd\u6570 willHalt(func F) \u53ef\u4ee5\u5224\u65ad\u51fd\u6570 F \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5982\u679c\u4f1a\uff0c\u5219\u8fd4\u56de true\uff0c\u5426\u5219\u8fd4\u56de false\u3002\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6784\u9020\u4e00\u4e2a\u8fd9\u6837\u7684\u51fd\u6570 foo()\uff1a

    void foo() {\nif ( willHalt(foo) ) {\nwhile (true) {} // Endless loop.\n}\nreturn;\n}\n

    \u63a5\u4e0b\u6765\uff0c\u5982\u679c\u6211\u4eec\u60f3\u77e5\u9053 foo() \u662f\u5426\u4f1a\u505c\u673a\uff0c\u5c31\u4f1a\u6267\u884c willHalt(foo)\u3002\u7136\u800c\u5728 foo() \u5185\u90e8\u4e5f\u6709\u4e00\u4e2a willHalt(foo)\uff0c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4f1a\u505c\u673a\uff0c\u5219\u6784\u9020\u4e00\u4e2a\u6b7b\u5faa\u73af\uff1b\u800c\u5982\u679c\u5b83\u8ba4\u4e3a foo() \u4e0d\u4f1a\u505c\u673a\uff0c\u5219\u9009\u62e9\u8ba9\u5b83\u7acb\u523b\u505c\u673a\uff0c\u4e8e\u662f\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u77db\u76fe\u3002

    \u7406\u89e3\u4e0a\u9762\u8fd9\u6bb5\u5185\u5bb9\u7684\u5173\u952e\u5c31\u662f\uff0c\u8fd9\u91cc\u867d\u7136\u4e0d\u5b58\u5728\u4e8b\u5b9e\u610f\u4e49\u4e0a\u7684\u201c\u6b7b\u5faa\u73af\u201d\uff0c\u4f46\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u903b\u8f91\u4e0a\u7684\u9012\u5f52\uff0c\u800c\u8fd9\u79cd\u201c\u903b\u8f91\u4e0a\u7684\u9012\u5f52\u201d\uff0c\u6b63\u662f\u5bfc\u81f4\u505c\u673a\u95ee\u9898\u6210\u4e3a\u4e00\u4e2a\u4e0d\u53ef\u8ba1\u7b97\u95ee\u9898\u7684\u539f\u56e0\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#hamilton-cycle-problem","title":"Hamilton Cycle Problem","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Hamiltonian_path_problem

    OI Wiki: https://oi-wiki.org/graph/hamilton

    \u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898

    \u7ed9\u5b9a\u4e00\u4e2a\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\u3002

    \u54c8\u5bc6\u987f\u56de\u8def\u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#traveling-salesman-problem","title":"Traveling Salesman Problem","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Travelling_salesman_problem

    \u65c5\u884c\u5546\u95ee\u9898

    \u65c5\u884c\u5546\u95ee\u9898\u6709\u4e24\u79cd\u5b9a\u4e49\uff0c\u5176\u4e2d\u524d\u8005\u662f NPH\uff0c\u800c\u88ab\u79f0\u4e3a\u201c\u5224\u5b9a\u7248\u672c\u201d\u7684\u540e\u8005\u662f NPC\u3002

    \u539f\u59cb\u5b9a\u4e49\u5224\u5b9a\u7248\u672c

    \u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u6700\u77ed\u3002

    \"Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?\"

    From Wikipedia

    \u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u7ec4\u5408\u4f18\u5316\u7684\u8bed\u5883\u4e2d\u3002

    \u7ed9\u5b9a\u4e00\u4e2a\u5b8c\u5168\u56fe\uff0c\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e00\u6761\u8def\u5f84\uff0c\u4f7f\u5f97\u5b83\u7ecf\u8fc7\u56fe\u4e2d\u7684\u6bcf\u4e2a\u70b9\u6070\u597d\u4e00\u6b21\uff0c\u4e14\u6700\u540e\u56de\u5230\u8d77\u70b9\uff0c\u4e14\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7 \\(k\\)\u3002

    \u8be5\u7248\u672c\u7684 TSP \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5e38\u5e38\u51fa\u73b0\u5728\u590d\u6742\u5ea6\u7406\u8bba\u7684\u8bed\u5883\u4e2d\u3002

    \u9700\u8981\u6ce8\u610f\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u8c08\u8bba\u7684\u90fd\u662f\u5224\u5b9a\u7248\u672c\u7684 TSP\uff01

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u5224\u5b9a\u7248\u672c\u7684-npc-\u8bc1\u660e","title":"\u5224\u5b9a\u7248\u672c\u7684 NPC \u8bc1\u660e","text":"

    \u73b0\u5728\uff0c\u5047\u8bbe\u6211\u4eec\u5df2\u77e5 Hamilton Cycle Problem \u95ee\u9898\u662f\u4e00\u4e2a NPC \u95ee\u9898\uff0c\u5c1d\u8bd5\u901a\u8fc7\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u7684\u65b9\u5f0f\u6765\u8bc1\u660e TSP \u4e5f\u662f\u4e00\u4e2a NPC \u95ee\u9898\u3002

    Recommended Reading

    https://opendsa-server.cs.vt.edu/ODSA/Books/Everything/html/hamiltonianCycle_to_TSP.html

    \u9996\u5148\u56de\u987e\u8bc1\u660e NPC \u7684\u6b65\u9aa4\uff1a

    1. \u5224\u5b9a\u8be5\u95ee\u9898\u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. \u5224\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684 NPC \u95ee\u9898\u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a\u8be5\u95ee\u9898\uff0c\u6216\u8005\u8bf4\u5224\u5b9a\u8be5\u95ee\u9898\u662f NPH \u95ee\u9898\uff1b

    \u4ee3\u5165\u5230\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u9700\u8981\u8bc1\u660e\uff1a

    1. TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\uff1b
    2. Hamilton Cycle Problem \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\uff1b

    TSP is NP

    \u8bc1\u660e TSP \u662f\u4e00\u4e2a NP \u95ee\u9898\u5373\u8bc1\u660e TSP \u7684\u89e3\u53ef\u4ee5\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u88ab\u9a8c\u8bc1\u3002\u800c\u9a8c\u8bc1\u4e00\u4e2a\u89e3\u662f TSP \u95ee\u9898\u7684\u89e3\uff0c\u9700\u8981\u8bc1\u660e\u4e0b\u9762\u4e24\u4e2a\u70b9\uff1a

    1. \u8fd9\u6761\u8def\u5f84\u7ecf\u8fc7\u4e86\u6240\u6709\u8282\u70b9\u6070\u597d\u4e00\u6b21\uff1b
    2. \u8fd9\u6761\u8def\u5f84\u957f\u5ea6\u4e0d\u8d85\u8fc7\\(k\\)\uff1b

    \u663e\u7136\uff0c\u8fd9\u4e24\u6761\u90fd\u53ea\u9700\u8981 \\(O(N)\\) \u7684\u5f00\u9500\u5c31\u80fd\u9a8c\u8bc1\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u5f97\u5230\u7ed3\u8bba\uff1a\\(\\text{TSP} \\in \\text{NP}\\)\u3002

    TSP is NPH

    \u8981\u8bc1\u660e TSP \u662f\u4e00\u4e2a NPH \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8bc1\u660e Hamilton Cycle Problem(HCP) \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6\ud83d\udd0d\u4e3a TSP\u3002

    \u4e3a\u6b64\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u6bd4 HCP \u548c TSP \u7684\u5dee\u5f02\u3002

    \u4ee5 HCP \u4e3a\u57fa\u7840\u63cf\u8ff0 TSP\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5728\u4e00\u5f20\u5b8c\u5168\u56fe\u4e0a\u5bfb\u627e\u603b\u957f\u4e0d\u8d85\u8fc7 \\(k\\) \u7684\u54c8\u5bc6\u987f\u73af\u8def\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

    HCP TSP \u56fe \\(G(V,E)\\) \u5b8c\u5168\u56fe \\(G'(V',E')\\) \u65e0\u8fb9\u6743 \u6709\u8fb9\u6743 - \\(\\sum v_i \\leq k\\)

    \u800c\u4e3a\u4e86\u8bc1\u660e \\(\\text{HCP} \\leq_p \\text{TCP}\\)\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e00\u4e2a\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u65b9\u6cd5 f() \u5b9e\u73b0 \\(G(V,E) \\to G'(V',E')\\)\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u505a\u8fd9\u4e9b\u4e8b\uff1a

    1. \u8fde\u63a5 \\(G\\) \u4e2d\u6240\u6709\u6ca1\u8fde\u4e0a\u7684\u8fb9\uff0c\u4f7f \\(G\\) \u6210\u4e3a\u4e00\u5f20\u65e0\u6743\u5b8c\u5168\u56fe\uff1b
    2. \u5bf9\u4e8e\u65e0\u6743\u5b8c\u5168\u56fe\u4e2d\u7684\u6bcf\u4e00\u6761\u8fb9 \\(v^c_i\\)\uff0c\u5982\u679c\u5728 \\(G\\) \u4e2d\u4e5f\u6709\u8fd9\u6761\u8fb9\uff0c\u90a3\u4e48\u4ee4\u5b83\u8fb9\u6743\u4e3a 0\uff0c\u5426\u5219\u4ee4\u5b83\u8fb9\u6743\u4e3a 1\uff0c\u4e8e\u662f\u5f97\u5230\u6709\u6743\u5b8c\u5168\u56fe \\(G'(V',E')\\)\uff1b

    \u53f3\u56fe\u4e2d\u6240\u6709\u7684\u84dd\u8fb9\u8fb9\u6743\u90fd\u4e3a 0\uff0c\u7eff\u8fb9\u8fb9\u6743\u90fd\u4e3a 1\u3002

    \u7531\u4e8e\u5b8c\u5168\u56fe\u7684\u8fb9\u6570\u4e3a \\(\\frac{n(n-1)}{2}\\)\uff0c\u6240\u4ee5\u8fd9\u4e2a\u6b65\u9aa4\u663e\u7136\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u539f\u95ee\u9898\u4e3a\u5728 \\(G\\) \u4e0a\u5bfb\u627e\u54c8\u5bc6\u987f\u73af\uff0c\u7b49\u4ef7\u4e8e\u5728 \\(G' = f(G)\\) \u4e0a\u505a \\(k = 0\\) \u7684 TSP\u3002\u7531\u6b64\u8bc1\u660e \\(\\text{HCP} \\leq_{p} \\text{TSP}\\)\uff0c\u5373 \\(\\text{TSP} \\in \\text{NPH}\\)\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u7531\u4e8e \\(\\text{TSP} \\in \\text{NP}\\) \u4e14 \\(\\text{TSP} \\in \\text{NPH}\\)\uff0c\u6240\u4ee5 \\(\\text{TSP} \\in \\text{NPC}\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#circuit-sat","title":"Circuit-SAT","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

    Circuit-SAT \u53c8\u53eb circuit satisfiability problem\uff0c\u5b83\u662f\u6700\u65e9\u88ab\u8bc1\u660e\u662f NPC \u7684\u95ee\u9898\uff0c\u5373\u901a\u8fc7 NPC \u95ee\u9898\u7684\u5b9a\u4e49\u8bc1\u660e\u3002

    \u5176\u5177\u4f53\u63cf\u8ff0\u5982\u4e0b\uff1a

    Circuit-SAT

    Circuit-SAT \u5373\u4e3a\u786e\u5b9a\u7ed9\u5b9a\u5e03\u5c14\u7535\u8def\u662f\u5426\u5177\u6709\u4f7f\u8f93\u51fa\u4e3a\u771f\u7684\u8f93\u5165\u5206\u914d\u7684\u51b3\u7b56\u7684\u95ee\u9898\u3002

    Source: https://en.wikipedia.org/wiki/Circuit_satisfiability_problem

    \u4e0a\u56fe\u4e2d\uff0c\u5de6\u4fa7\u7535\u8def\u6ee1\u8db3\u6761\u4ef6\uff0c\u53f3\u4fa7\u7535\u8def\u4e0d\u6ee1\u8db3\u6761\u4ef6\u3002

    \u6216\u8005\uff0c\u66f4\u62bd\u8c61\u7684\u6765\u8bf4\uff0c\u662f\u5224\u65ad\u4e00\u4e2a\u5177\u6709 \\(n\\) \u4e2a\u5e03\u5c14\u53d8\u91cf\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u662f\u5426\u5177\u6709\u7ed3\u679c\u4e3a True \u7684\u89e3\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#3-sat","title":"3-SAT","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Boolean_satisfiability_problem#3-satisfiability

    3-SAT \u6307\u7684\u662f Circuit-SAT \u95ee\u9898\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u5b83\u5bf9\u5e03\u5c14\u7535\u8def\uff0c\u6216\u8005\u8bf4\u5e03\u5c14\u8868\u8fbe\u5f0f\u7684\u5f62\u5f0f\u6709\u7279\u6b8a\u8981\u6c42\uff0c\u5177\u4f53\u6765\u8bf4\uff0c\u5b83\u8981\u6c42\u5e03\u5c14\u8868\u8fbe\u5f0f\u5f62\u5982\uff1a

    \\[ (x_1 \\vee x_2 \\vee x_3) \\wedge (x_4 \\vee x_5 \\vee x_6) \\wedge \\cdots \\wedge (x_{n-2} \\vee x_{n-1} \\vee x_n) \\] "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#a-formal-language-framework","title":"A formal-language Framework","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u76f8\u5173\u6982\u5ff5","title":"\u76f8\u5173\u6982\u5ff5","text":"

    \u8bf4\u660e

    \u4ee5\u4e0b\u90e8\u5206\u7684\u5185\u5bb9\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u8bf4\u660e\u4e0a\u6587\u4e2d\u90e8\u5206\u5185\u5bb9\u800c\u4ecb\u7ecd\u7684\u6982\u5ff5\uff0c\u5e76\u4e0d\u5177\u6709\u7ec4\u7ec7\u7ed3\u6784\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u56fe\u7075\u673a","title":"\u56fe\u7075\u673a","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Turing_machine

    Wikipedia: https://en.wikipedia.org/wiki/Nondeterministic_Turing_machine

    \u56fe\u7075\u673a\u6709\u4e00\u4e9b\u53d8\u4f53\uff0c\u800c\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u56fe\u7075\u673a\u662f\u4e3a\u4e86\u4ecb\u7ecd P/NP\uff0c\u53ea\u4ecb\u7ecd\u786e\u5b9a\u578b\u56fe\u7075\u673a\u548c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u3002

    \u56fe\u7075\u673a\u7531\u4e00\u4e2a\u65e0\u9650\u957f\u7684\u7eb8\u5e26\u548c\u4e00\u4e2a\u8bfb\u5199\u5934\u7ec4\u6210\u3002\u7eb8\u5e26\u88ab\u5212\u5206\u4e3a\u4e00\u4e2a\u4e2a\u683c\u5b50\uff0c\u6bcf\u4e2a\u683c\u5b50\u4e0a\u6709\u4e00\u4e2a\u7b26\u53f7\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u5728\u7eb8\u5e26\u4e0a\u79fb\u52a8\uff0c\u8bfb\u5199\u5934\u53ef\u4ee5\u8bfb\u53d6\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u4e5f\u53ef\u4ee5\u6539\u53d8\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u3002\u56fe\u7075\u673a\u7684\u72b6\u6001\u662f\u4e00\u4e2a\u6709\u9650\u96c6\u5408\uff0c\u6bcf\u4e2a\u72b6\u6001\u90fd\u6709\u4e00\u4e2a\u8f6c\u79fb\u51fd\u6570\uff0c\u8f6c\u79fb\u51fd\u6570\u7684\u8f93\u5165\u662f\u5f53\u524d\u72b6\u6001\u548c\u5f53\u524d\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\uff0c\u8f93\u51fa\u662f\u4e0b\u4e00\u4e2a\u72b6\u6001\u3001\u4e0b\u4e00\u4e2a\u683c\u5b50\u4e0a\u7684\u7b26\u53f7\u548c\u8bfb\u5199\u5934\u7684\u79fb\u52a8\u65b9\u5411\u3002

    \u66f4\u672c\u8d28\u7684\u6765\u8bf4\uff0c\u56fe\u7075\u673a\u662f\u4e00\u79cd\u8ba1\u7b97\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8868\u793a\u4efb\u4f55\u6709\u9650\u903b\u8f91\u6570\u5b66\u8fc7\u7a0b\u3002\u786e\u5b9a\u578b\u56fe\u7075\u673a\u4e0e\u6211\u4eec\u5e38\u89c4\u7406\u89e3\u7684\u8ba1\u7b97\u673a\u903b\u8f91\u7c7b\u4f3c\uff0c\u5373\u4e0b\u4e00\u6b65\u8981\u505a\u4ec0\u4e48\u53ef\u4ee5\u6839\u636e\u5f53\u524d\u72b6\u6001\u786e\u5b9a\u3002\u800c\u975e\u786e\u5b9a\u578b\u56fe\u7075\u673a\u5219\u7c7b\u4f3c\u4e8e\u80fd\u591f\u8fdb\u884c\u65e0\u9650\u5e76\u884c\uff0c\u5e76\u4e14\u6700\u7ec8\u603b\u662f\u9009\u62e9\u901a\u5411\u6b63\u786e\u7b54\u6848\u7684\u65b9\u5411\u7684\u90a3\u6761\u8def\uff08\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5b83\u80fd\u5f00\u5e73\u884c\u5b87\u5b99\uff0c\u5e76\u4e14\u603b\u662f\u8ba9\u4f60\u89c2\u6d4b\u5230\u6b63\u786e\u7684\u90a3\u4e00\u4e2a\u5e73\u884c\u5b87\u5b99\uff09\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec10/#\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","title":"\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6","text":"

    Links

    Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_reduction

    \u6211\u4eec\u5f15\u5165 P/NP \u7b49\u8fd9\u4e9b\u6982\u5ff5\uff0c\u662f\u4e3a\u4e86\u8861\u91cf\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u800c\u5982\u4f55\u5728\u5177\u4f53\u7684\u201c\u95ee\u9898\u201d\u95f4\u4f20\u9012\u3001\u6bd4\u8f83\u8fd9\u79cd\u201c\u590d\u6742\u7a0b\u5ea6\u201d\uff0c\u5c31\u662f\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u7684\u76ee\u7684\u3002

    graph LR;\nA[\"\u95ee\u9898 A\"]\nB[\"\u95ee\u9898 B\"]\nA ===>|\"\u591a\u9879\u5f0f\u65f6\u95f4\u8f6c\u5316\"| B

    \u5982\u679c\u6211\u4eec\u80fd\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u7684\u590d\u6742\u5ea6\u5185\uff0c\u5c06\u95ee\u9898 A \u8f6c\u5316\u4e3a\u95ee\u9898 B\uff0c\u5219\u79f0\u95ee\u9898 A \u53ef\u4ee5\u591a\u9879\u5f0f\u65f6\u95f4\u5f52\u7ea6(polynomial reduce)\u4e3a B\uff0c\u8bb0\u4e3a \\(A \\leq_{p} B\\)\uff0c\u8868\u793a A \u4e0d\u4f1a\u6bd4 B \u96be\u3002

    \u800c\u91c7\u53d6\u6570\u5b66\u8bed\u8a00\u6765\u63cf\u8ff0\uff0c\u5219\u662f\uff1a

    \\[ \\begin{aligned} A \\leq_{p} B \\;\\;\\Leftrightarrow\\;\\; & \\exist f() \\text{ which runs in polynomial time}, \\\\ & s.t. \\;\\; \\forall x \\in A,\\; f(x) \\in B \\\\ & \\text{and}\\; \\forall f(x) \\in B,\\; y \\in A \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/","title":"Lecture 11 | Approximation","text":"

    \u7ea6 5372 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 27 \u5206\u949f

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u7b97\u6cd5","title":"\u8fd1\u4f3c\u7b97\u6cd5","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Approximation_algorithm

    \u5728\u4e0a\u4e00\u7ae0\u4e2d\u6211\u4eec\u4ecb\u7ecd\u4e86 P/NP \u95ee\u9898\uff0c\u800c\u5927\u5bb6\u666e\u904d\u8ba4\u4e3a P \u2260 NP\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u5bf9\u4e8e\u67d0\u4e9b\u95ee\u9898\uff0c\u6211\u4eec\u65e0\u6cd5\u4f7f\u7528\u591a\u9879\u5f0f\u65f6\u95f4\u89e3\u51b3\uff0c\u800c\u5728\u95ee\u9898\u89c4\u6a21\u53d8\u5927\u65f6\uff0c\u8d8a\u53d1\u4e0d\u53ef\u63a5\u53d7\u3002

    \u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u9000\u800c\u6c42\u5176\u6b21\uff0c\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5185\u6c42\u4e00\u4e2a\u6bd4\u8f83\u4f18\u7684\u89e3\u3002\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u5c1d\u8bd5\u5bfb\u627e\u4e00\u79cd\u591a\u9879\u5f0f\u7b97\u6cd5\uff0c\u4f7f\u5f97\u5176\u7ed3\u679c\u59cb\u7ec8\u5728\u5173\u4e8e\u51c6\u786e\u89e3\u7684\u53ef\u63a5\u53d7\u504f\u5dee\u8303\u56f4\u5185\uff0c\u5bf9\u4e8e\u8fd9\u79cd\u7b97\u6cd5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u8fd1\u4f3c\u7b97\u6cd5(approximation algorithm)\u3002

    \u6211\u4eec\u8bbe \\(f(n, x)\\) \u662f\u5bf9\u8f93\u5165\u5927\u5c0f\u4e3a \\(n\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u7ed3\u679c \\(x\\) \u7684\u6700\u574f\u60c5\u51b5\u7684\u4e00\u4e2a\u76f4\u89c2\u91cf\u5316\uff08\u4f8b\u5982 dist, weight...\uff09\uff0c\u82e5\u8bbe \\(x^*\\) \u4e3a\u51c6\u786e\u89e3\uff0c\\(x\\) \u4e3a\u7ed9\u5b9a\u7b97\u6cd5\u7ed3\u679c\uff0c\u5219\u6211\u4eec\u5b9a\u4e49\u8fd1\u4f3c\u6bd4(Approximation Ratio)\\(\\rho\\)\uff1a

    \\[ \\forall n \\rho = \\max\\left\\{\\frac{f(n, x)}{f(n, x^*)}, \\frac{f(n, x^*)}{f(n, x)}\\right\\} \\]

    \u5219\u79f0\u7ed9\u5b9a\u7b97\u6cd5\u4e3a \\(\\rho\\) \u8fd1\u4f3c\u7b97\u6cd5(\\(\\rho\\)-approximation algorithm)\u3002

    \u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5

    \u5728\u770b\u5230\u8fd1\u4f3c\u7b97\u6cd5\u65f6\uff0c\u6211\u8111\u5b50\u91cc\u4e00\u4e0b\u5b50\u6d6e\u73b0\u51fa\u4e86\u968f\u673a\u7b97\u6cd5\u7684\u6982\u5ff5\uff0c\u540c\u6837\u662f\u6c42\u51c6\u786e\u89e3\u7684\u8fd1\u4f3c\u89e3\uff0c\u4e24\u8005\u6709\u4f55\u533a\u522b\u5462\uff1f

    hint: \u6700\u574f\u60c5\u51b5

    \u8fd1\u4f3c\u7b97\u6cd5\u548c\u968f\u673a\u7b97\u6cd5\u6700\u5927\u7684\u533a\u522b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u8bbe\u8ba1\u3001\u5206\u6790\u3001\u8ba8\u8bba\u8fd1\u4f3c\u7b97\u6cd5\u7684\u65f6\u5019\uff0c\u6211\u4eec\u5173\u6ce8\u7684\u90fd\u662f\u5b83\u7684\u6700\u574f\u60c5\u51b5\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd1\u4f3c\u7b97\u6cd5\u662f\u5b8c\u5168\u53ef\u63a7\u7684\uff0c\u800c\u7eaf\u7cb9\u7684\u968f\u673a\u7b97\u6cd5\u5219\u662f\u901a\u8fc7\u6982\u7387\u6765\u51cf\u5c11\u574f\u60c5\u51b5\u51fa\u73b0\u7684\u53ef\u80fd\uff0c\u5e76\u6ca1\u6709\u4e25\u683c\u7684\u7ea6\u675f\u3002\u8fd1\u4f3c\u7b97\u6cd5\u6700\u574f\u4e5f\u5c31\u574f\u5230 \\(\\rho\\)\uff0c\u800c\u968f\u673a\u7b97\u6cd5\u6700\u574f\u53ef\u4ee5\u574f\u5230\u6d77\u62c9\u9c81\u5927\u9646\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8fd1\u4f3c\u8303\u5f0f","title":"\u8fd1\u4f3c\u8303\u5f0f","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Polynomial-time_approximation_scheme

    \u8fd1\u4f3c\u8303\u5f0f(approximation scheme)\u6307\u7684\u662f\u5bf9\u4e8e\u67d0\u4e2a\u4f18\u5316\u95ee\u9898\u7684\u4e00\u65cf\u76f8\u540c\u6a21\u5f0f\u7684\u7b97\u6cd5\uff0c\u5b83\u4eec\u6ee1\u8db3\u5bf9\u4e8e\u786e\u5b9a\u7684 \\(\\epsilon > 0\\)\uff0c\u7b97\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

    \u53ef\u4ee5\u7c97\u7cd9\u5730\u7406\u89e3\u4e3a\uff1a\u201c\u8303\u5f0f\u201d\u662f\u4e00\u4e2a\u8f93\u51fa\u4e3a\u7b97\u6cd5\u7684\u7279\u6b8a\u51fd\u6570\uff0c\u800c \\(\\epsilon\\) \u662f\u201c\u8303\u5f0f\u201d\u7684\u4e00\u4e2a\u53c2\u6570\uff0c\u5bf9\u4e8e\u7279\u5b9a\u7684 \\(\\epsilon\\)\uff0c\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u7b97\u6cd5\uff08\u8fd9\u4e9b\u7b97\u6cd5\u6709\u7740\u76f8\u540c\u7684\u6a21\u5f0f\uff09\uff0c\u800c\u8fd9\u4e9b\u201c\u8303\u5f0f\u201d\u8f93\u51fa\u7684\u7b97\u6cd5\uff0c\u90fd\u89e3\u51b3\u540c\u4e00\u4e2a\u95ee\u9898\uff0c\u5e76\u4e14\u5bf9\u4e8e\u4efb\u610f\u56fa\u5b9a\u7684 \\(\\epsilon\\) \u5176\u8fd1\u4f3c\u6bd4\u4e3a \\(1+\\epsilon\\)\u3002

    \u800c\u5173\u4e8e \\(\\epsilon > 0\\) \u8fd9\u4e2a\u7ea6\u675f\uff0c\u662f\u56e0\u4e3a\u8fd1\u4f3c\u6bd4\u5fc5\u5b9a\u5927\u4e8e 1\u3002

    \u800c\u6b64\u65f6\uff0c\u8fd9\u4e00\u65cf\u7684\u7b97\u6cd5\u7684\u590d\u6742\u5ea6\u53ef\u4ee5\u8868\u793a\u4e3a \\(O(f(n, \\epsilon))\\)\uff0c\u5982 \\(O(n^{2/\\epsilon}), O((\\frac{1}{\\epsilon})^2n^3)\\)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(polynomial-time approximation scheme, PTAS)\u3002\u5f53 \\(f(n, \\epsilon)\\) \u5173\u4e8e \\(n\\) \u548c \\(\\frac{1}{\\epsilon}\\) \u90fd\u662f\u591a\u9879\u5f0f\u65f6\uff0c\u6211\u4eec\u79f0\u5176\u4e3a\u5b8c\u5168\u591a\u9879\u5f0f\u65f6\u95f4\u8fd1\u4f3c\u8303\u5f0f(fully polynomial-time approximation scheme, FPTAS)\u3002

    \u4e3a\u4ec0\u4e48\u8981\u533a\u5206 PTAS \u548c FPTAS \u5462\uff1f\u6211\u4eec\u89c2\u5bdf \\(\\epsilon\\) \u5bf9\u7b97\u6cd5\u7684\u5f71\u54cd\uff1a\u968f\u7740 \\(\\epsilon\\) \u7684\u51cf\u5c0f\uff0c\u8fd1\u4f3c\u6bd4\u9010\u6e10\u53d8\u5c0f\uff0c\u5373\u51c6\u786e\u5ea6\u63d0\u9ad8\uff1b\u800c \\(\\frac{1}{\\epsilon}\\) \u53d8\u5927\uff0c\u800c\u901a\u5e38\u6765\u8bf4 \\(\\frac{1}{\\epsilon}\\) \u4e0e\u7b97\u6cd5\u590d\u6742\u5ea6\u90fd\u662f\u6b63\u76f8\u5173\u7684\uff0c\u56e0\u6b64\u4f1a\u5bfc\u81f4\u7b97\u6cd5\u590d\u6742\u5ea6\u5347\u9ad8\u3002\u5982\u679c\u8bf4\u8fd9\u4e2a\u8fd1\u4f3c\u8303\u5f0f\u662f FPTAS\uff0c\u90a3\u4e48\u4e3a\u4e86\u63d0\u9ad8\u51c6\u786e\u5ea6\u800c\u7f29\u5c0f \\(\\epsilon\\)\uff0c\u5bfc\u81f4\u7684\u590d\u6742\u5ea6\u53d8\u5316\u662f\u76f8\u5bf9\u53ef\u63a5\u53d7\u7684\uff08\u591a\u9879\u5f0f\u7ea7\u7684\u53d8\u5316\uff0c\u5982 \\((\\frac{1}{\\epsilon})^2n^3\\) \u5173\u4e8e \\(\\frac{1}{\\epsilon}\\) \u662f\u591a\u9879\u5f0f\u7ea7\u7684\uff09\uff1b\u7136\u800c\u5982\u679c\u5b83\u4e0d\u662f FPTAS\uff0c\u90a3\u4e48 \\(\\epsilon\\) \u7684\u7f29\u5c0f\u53ef\u80fd\u5e26\u6765\u6050\u6016\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff08\u5982 \\(n^{2/\\epsilon}\\) \u5173\u4e8e \\(\\epsilon\\) \u662f\u6307\u6570\u7ea7\u7684\uff09\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u82e5\u5e72\u5177\u4f53\u4f8b\u5b50\u505a\u5206\u6790\uff0c\u4ee5\u4fbf\u66f4\u597d\u5730\u7406\u89e3\u8fd1\u4f3c\u7b97\u6cd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-approximate-bin-packing","title":"[\u6848\u4f8b] Approximate Bin Packing","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Bin_packing

    \u88c5\u7bb1\u95ee\u9898\u6307\u7684\u662f\uff0c\u7ed9\u5b9a \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\in [1,N]\\) \u4e2a item \u7684 size \u4e3a \\(S_i \\in (0,1]\\)\uff0c\u4e00\u4e2a bin \u7684\u5927\u5c0f\u4e3a \\(1\\)\uff0c\u5c1d\u8bd5\u5bfb\u627e\u6700\u5c11\u7684\uff0c\u80fd\u591f\u88c5\u8f7d\u6240\u6709 item \u7684 bin \u7684\u6570\u91cf\u3002

    \ud83c\udf30 \u4f8b\u5b50

    \u7ed9\u5b9a 7 \u4e2a item\uff0csize \u5206\u522b\u4e3a \\(0.2, 0.5, 0.4, 0.7, 0.1, 0.3, 0.8\\)\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

    \u8fd9\u662f\u4e00\u4e2a NP hard \u95ee\u9898\uff0c\u73b0\u5728\u6211\u4eec\u8003\u8651\u4e09\u79cd\u8fd1\u4f3c\u89e3\u6cd5\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u4e09\u79cd\u90fd\u662f\u5728\u7ebf(online)\u89e3\u6cd5\uff0c\u5373\u5904\u7406 \\(item_i\\) \u65f6\u6211\u4eec\u4e0d\u77e5\u9053 \\(item_{i+1}\\sim item_{N}\\) \u7684\u60c5\u51b5\u3002\u4e4b\u540e\u6211\u4eec\u4f1a\u518d\u8ba8\u8bba\u79bb\u7ebf(offline)\u505a\u6cd5\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u77e5\u9053\u6240\u6709 item \u7684\u60c5\u51b5\u4ee5\u540e\u518d\u7ed9\u51fa\u7b56\u7565\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-next-fit-nf","title":"(online) Next Fit (NF)","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Next-fit_bin_packing

    NF \u7b56\u7565\u603b\u662f\u9009\u62e9\u5f53\u524d\u6700\u540e\u4e00\u4e2a bin\uff0c\u82e5\u80fd\u591f\u5bb9\u7eb3\uff0c\u5219\u5c06\u5f53\u524d item \u653e\u5165\u5176\u4e2d\uff0c\u5426\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

    NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(2M-1\\) \u4e2a bin\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    proof for 2M-1

    \u6211\u4eec\u4ece NF \u7684\u7ed3\u679c\u51fa\u53d1\uff0c\u8bc1\u660e\u5f53 NF \u7684\u7ed3\u679c\u4e3a\u9700\u8981 \\(2M-1\\) \u6216 \\(2M\\) \u4e2a bin \u65f6\uff0c\u51c6\u786e\u89e3\u4e3a\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

    \u5047\u8bbe \\(S(B_i)\\) \u8868\u793a\u7b2c \\(i\\) \u4e2a bin \u7684 size\uff0c\u5219\u6839\u636e NF \u7684\u5b9a\u4e49\uff0c\u6709\uff1a\\(S(B_{i}) + S(B_{i+1}) > 1\\)\uff08\u662f NF \u7684\u5fc5\u8981\u4e0d\u5145\u5206\u6761\u4ef6\uff09\u3002\u7a0d\u4f5c\u89e3\u91ca\uff0c\u4f7f\u7528\u53cd\u8bc1\u6cd5\uff0c\u5047\u8bbe \\(S(B_{i}) + S(B_{i+1}) \\leq 1\\)\uff0c\u8fd9\u8bf4\u660e\u65e0\u8bba \\(B_{i+1}\\) \u4e2d\u6709\u591a\u5c11 item\uff0c\u90fd\u4e00\u5b9a\u80fd\u653e\u8fdb \\(B_i\\)\uff0c\u800c\u8fd9\u4e0e NF \u201c\\(B_i\\) \u653e\u4e0d\u4e0b\u4e86\u624d\u5f00\u59cb\u653e \\(B_{i+1}\\)\u201d \u7684\u6027\u8d28\u76f8\u8fdd\u80cc\u3002\u4e8e\u662f\u6211\u4eec\u5c06\u6240\u6709\u6876\u4e24\u4e24\u914d\u5bf9\uff1a

    1.\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M-1\\) \u4e2a bin \u65f6\uff1a

    \\[ \\left\\{ \\begin{aligned} S(B_1) + S(B_2) &> 1 \\\\ S(B_3) + S(B_4) &> 1 \\\\ \\vdots \\\\ S(B_{2M-3}) + S(B_{2M-2}) &> 1 \\\\ S(B_{2M-1}) &\\leq 1 \\end{aligned} \\right. \\\\ \\begin{aligned} &\\therefore \\sum_{i=1}^{2M-1} > \\sum_{i=1}^{2M-2} > M-1 \\\\ &\\therefore \\sum_{i=1}^{2M-1} \\geq M \\end{aligned} \\]

    \u5373 item \u7684\u603b size \u81f3\u5c11\u4e3a M\uff0c\u5373\u81f3\u5c11\u9700\u8981 \\(M\\) \u4e2a bin\u3002

    2.\u800c\u5f53 NF \u7684\u7ed3\u679c\u662f\u9700\u8981 \\(2M\\) \u4e2a bin \u65f6\uff0c\u53ef\u4ee5\u8f6c\u5316\u4e3a \\(2M-1\\) \u7684\u60c5\u51b5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-first-fit-ff","title":"(online) First Fit (FF)","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/First-fit_bin_packing

    FF \u7b56\u7565\u603b\u662f\u9009\u62e9\u7b2c\u4e00\u4e2a\u80fd\u653e\u4e0b\u5f53\u524d item \u7684 bin\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

    NF \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#online-best-fit-bf","title":"(online) Best Fit (BF)","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Best-fit_bin_packing

    BF \u7b56\u7565\u603b\u662f\u9009\u62e9\u80fd\u591f\u5bb9\u7eb3\u5f53\u524d item \u4e14\u5269\u4f59\u7a7a\u95f4\u6700\u5c0f\u7684 bin\uff08\u5373 tightest\uff09\uff0c\u82e5\u6240\u6709 bin \u90fd\u65e0\u6cd5\u5bb9\u7eb3\u5f53\u524d item\uff0c\u5219\u65b0\u5f00\u4e00\u4e2a bin\u3002

    NF \u7b56\u7565\u4e5f\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\lfloor 1.7M \\rfloor\\) \u4e2a bin\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    \u867d\u7136\u5728\u7ebf\u505a\u6cd5\u7531\u4e8e\u5bf9\u4fe1\u606f\u628a\u63e1\u7684\u4e0d\u5168\u9762\uff0c\u5728\u4e0d\u7279\u6b8a\u6784\u9020\u8f93\u5165\u7684\u60c5\u51b5\u4e0b\u751a\u81f3\u51e0\u4e4e\u4e0d\u53ef\u80fd\u8fbe\u5230\u6700\u4f18\u89e3\uff0c\u4f46\u662f\u73b0\u5b9e\u4e16\u754c\u4e2d\u6709\u5f88\u591a\u80fd\u5efa\u6a21\u4e3a\u88c5\u7bb1\u95ee\u9898\u7684\u95ee\u9898\uff0c\u90fd\u8981\u6c42\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\u89e3\u51b3\u3002\u56e0\u6b64\uff0c\u7814\u7a76\u5728\u7ebf\u505a\u6cd5\u8fd8\u662f\u6709\u5176\u610f\u4e49\u7684\u3002

    \u6b64\u5916\uff0c\u5173\u4e8e\u5728\u7ebf\u505a\u6cd5\uff0c\u6709\u4e00\u4e2a\u7ed3\u8bba\uff1a

    theorem

    \u5bf9\u4e8e\u88c5\u7bb1\u95ee\u9898\uff0c\u5982\u679c\u9650\u5b9a\u4f7f\u7528\u5728\u7ebf\u505a\u6cd5\uff0c\u5219\u6700\u4f18\u7684\u8fd1\u4f3c\u89e3\u6cd5\uff0c\u5176\u6700\u574f\u60c5\u51b5\u7684\u7ed3\u679c\u4e5f\u81f3\u5c11\u9700\u8981\u51c6\u786e\u89e3\u7684 \\(\\frac{5}{3}\\)\u3002

    PPT \u4e0a\u7684\u539f\u8bdd\u662f\uff0c\u65e0\u8bba\u54ea\u79cd\u5728\u7ebf\u505a\u6cd5\u4e5f\u81f3\u5c11\u9700\u8981\u4f7f\u7528 \\(\\frac{5}{3}\\) \u7684\u51c6\u786e\u89e3\u7ed9\u51fa\u7684\u6570\u91cf\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u4e2a \\(\\frac{5}{3}\\) \u662f\u9488\u5bf9\u6700\u574f\u89e3\u7684\u8ba8\u8bba\u3002\u56de\u987e\u300c\u8fd1\u4f3c\u7b97\u6cd5 v.s. \u968f\u673a\u7b97\u6cd5\u300d\u8fd9\u4e2a block \u91cc\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5206\u6790\u8fd1\u4f3c\u89e3\uff0c\u90fd\u662f\u9488\u5bf9\u5176\u6700\u574f\u60c5\u51b5\u6765\u8bf4\u7684\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#offline-first-fit-decreasing-ffd","title":"(offline) First Fit Decreasing (FFD)","text":"

    \u79bb\u7ebf\u505a\u6cd5\u7684\u4f18\u52bf\u5728\u4e8e\u5b83\u80fd\u591f\u83b7\u5f97\u6240\u6709 item \u7684\u4fe1\u606f\u4ee5\u6c42\u7edf\u7b79\u89c4\u5212\u3002\u8fd9\u91cc\u7ed9\u51fa\u7684\u8fd1\u4f3c\u505a\u6cd5\u662f\uff0c\u5c06 item \u6309\u7167 size \u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4f7f\u7528 FF\uff08\u6216 BF\uff0c\u7531\u4e8e\u5355\u8c03\u6027\uff0c\u4e24\u8005\u7b49\u4ef7\uff09\u3002

    \ud83c\udf30 \u4f8b\u5b50

    \u7ed9\u5b9a 7 \u4e2a item\uff08\u540c\u4e4b\u524d\u7684 \ud83c\udf30\uff09\uff0c\u7ecf\u8fc7\u6392\u5e8f\u540e\uff0c\u5b83\u4eec\u7684 size \u5206\u522b\u4e3a $0.8, 0.7, 0.5, 0.4, 0.3, 0.2, 0.1\uff0c\u5219\u6700\u5c11\u9700\u8981 3 \u4e2a bin\uff08\u51c6\u786e\u89e3\uff09\uff1a

    FFD \u7b56\u7565\u603b\u662f\u4f7f\u7528\u4e0d\u8d85\u8fc7 \\(\\frac{11}{9}M + \\frac{6}{9}\\) \u4e2a bin\uff08\u4e3a\u5565\u5c31\u8fde wiki \u4e5f\u4e0d\u7ea6 6/9\uff09\uff0c\u5e76\u4e14\u5b58\u5728\u4e00\u65cf\u80fd\u5bf9\u8fb9\u754c\u53d6\u7b49\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(M\\) \u8868\u793a\u51c6\u786e\u89e3\u7684 \\(\\#bin\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-knapsack-problem","title":"[\u6848\u4f8b] Knapsack Problem","text":"

    link

    Wikipedia: https://en.wikipedia.org/wiki/Knapsack_problem

    \u4e00\u4e2a\u4e0e\u88c5\u7bb1\u95ee\u9898\u5f88\u50cf\u7684\u95ee\u9898\u662f\u80cc\u5305\u95ee\u9898\u3002\u5176\u5927\u81f4\u63cf\u8ff0\u5982\u4e0b\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5bb9\u91cf\u4e3a \\(M\\) \u7684\u80cc\u5305\uff0c\u4ee5\u53ca \\(N\\) \u4e2a item\uff0c\u7b2c \\(i\\) \u4e2a item \u7684\u91cd\u91cf\u4e3a \\(w_i\\)\uff0c\u5176\u5229\u6da6\u4e3a \\(p_i\\)\u3002\u8981\u6c42\u5728\u4e0d\u8d85\u8fc7\u80cc\u5305\u5bb9\u91cf\u7684\u524d\u63d0\u4e0b\uff0c\u4f7f\u5f97\u80cc\u5305\u4e2d\u7684\u5229\u6da6\u6700\u5927\u5316\u3002\uff08\u6211\u4e5f\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48 PPT \u4e0a\u4f1a\u628a\u5bb9\u91cf\u548c\u91cd\u91cf\u5173\u8054\u8d77\u6765\uff0canyway\uff0c\u5bb9\u91cf\u9650\u5236\u4e86 item \u7684\u91cd\u91cf\u548c\u3002\uff09

    \u6ce8\u610f

    \u6216\u8bb8\u5728\u5b66\u4e60 dp \u7684\u65f6\u5019\u4f60\u5df2\u7ecf\u63a5\u89e6\u8fc7\u80cc\u5305\u95ee\u9898\u4e86\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u8fd9\u91cc\u8ba8\u8bba\u7684\u80cc\u5305\u95ee\u9898\u6709\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u7279\u70b9\u5c31\u662f\uff0c\u5bb9\u91cf\u548c\u5229\u6da6\u90fd\u662f\u5b9e\u6570\uff0c\u66f4\u76f4\u767d\u7684\u6765\u8bf4\uff0c\u4f60\u6ca1\u529e\u6cd5\u901a\u8fc7\u5c06\u5bb9\u91cf\u6216\u5229\u6da6\u4f5c\u4e3a\u72b6\u6001\u6765 dp \u6c42\u51c6\u786e\u89e3\u3002

    \u800c\u6839\u636e\u6bcf\u4e00\u4e2a\u7269\u54c1\u80fd\u5426\u81ea\u7531\u62c6\u5206\uff0c\u80cc\u5305\u95ee\u9898\u5206\u4e3a fractional version \u548c 0-1 version \u4e24\u7c7b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#fractional-version","title":"Fractional Version","text":"

    \u5982\u679c\u6211\u4eec\u8bb0 \\(x_i\\in[0,1]\\) \u4e3a\u7b2c \\(i\\) \u4e2a item \u7684\u9009\u4e2d\u91cf\uff08\u5373\u5047\u8bbe item \u90fd\u662f\u8fde\u7eed\u53ef\u5206\u7684\uff09\uff0c\u5219\u7ea6\u675f\u6761\u4ef6\u53ef\u4ee5\u8868\u8ff0\u4e3a \\(\\sum_{i}^N w_ix_i \\leq M\\)\uff0c\u73b0\u5728\u6c42 \\(\\sum_{i}^{N} p_ix_i\\) \u7684\u6700\u5927\u503c\u3002

    \ud83c\udf30 \u4f8b\u5b50

    \u5047\u8bbe\u73b0\u5728 \\(M = 20.0\\)\uff0c\u5e76\u4e14 \\(N = 3\\)\uff0c\u5206\u522b\u662f\uff1a

    \u5219\u6700\u4f18\u89e3\u4e3a \\(x_1 = 0, x_2 = 1, x_3 = \\frac{1}{2}\\)\uff0c\u6b64\u65f6 \\(\\sum_{i}^{N} p_ix_i = 31.5\\)\u3002

    \u7531\u4e8e \\(x_i\\in[0,1]\\)\uff0c\u7ed9\u4e86\u6211\u4eec\u6781\u5927\u7684\u9009\u62e9\u81ea\u7531\uff0c\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u4efb\u610f\u591a\u7684\u67d0\u4e2a\u7269\u54c1\u3002\u90a3\u4e48\u975e\u5e38\u6734\u7d20\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\uff0c\u5c3d\u53ef\u80fd\u591a\u5730\u9009\u62e9\u201c\u6027\u4ef7\u6bd4\u201d\u9ad8\u7684\u7269\u54c1\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u6309\u7167 \\(\\frac{p_i}{w_i}\\)\uff08PPT \u79f0\u4e4b\u4e3a profit density\uff09\u964d\u5e8f\u6392\u5e8f\uff0c\u800c\u540e\u4ece\u5927\u5230\u5c0f\u4f9d\u6b21\u9009\u62e9\u7269\u54c1\uff0c\u76f4\u5230\u80cc\u5305\u88c5\u6ee1\u4e3a\u6b62\u3002

    \u4e0d\u8fc7\u8be5\u505a\u6cd5\u5df2\u7ecf\u662f\u51c6\u786e\u89e3\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u5bf9\u5b83\u8fdb\u884c\u5173\u4e8e\u8fd1\u4f3c\u7b97\u6cd5\u7684\u8ba8\u8bba\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#0-1-version","title":"0-1 Version","text":"

    \u76f8\u8f83\u4e8e fractional version\uff0c0-1 version \u8981\u6c42 \\(x_i \\in \\{0,1\\}\\)\uff0c\u6362\u53e5\u8bdd\u8bf4\u6bcf\u4e00\u4e2a\u7269\u54c1\u8981\u4e48\u9009\u8981\u4e48\u4e0d\u9009\u3002\u8fd9\u662f\u4e00\u4e2a\u7ecf\u5178\u7684 NPC \u95ee\u9898\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528\u8fd1\u4f3c\u7b97\u6cd5\u6765\u6c42\u8f83\u4f18\u89e3\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u8d2a\u5fc3\u505a\u6cd5","title":"\u8d2a\u5fc3\u505a\u6cd5","text":"

    \u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u8d2a\u5fc3\u7b97\u6cd5\uff0c\u8d2a\u5fc3\u7b56\u7565\u53ef\u4ee5\u662f\u603b\u662f\u9009\u53ef\u4ee5\u653e\u5f97\u4e0b\u7684\u3001\u8fd8\u6ca1\u653e\u5165\u4e2d\u7684\uff0c\u5229\u6da6\u6700\u5927\u7684\u6216 \\(\\frac{p_i}{w_i}\\) \u6700\u5927\u7684\u3002\u8fd9\u4e9b\u505a\u6cd5\u7684\u8fd1\u4f3c\u6bd4\u90fd\u662f 2\u3002

    proof for rho = 2

    \u6211\u4eec\u7528 \\(p_\\text{max}\\) \u8868\u793a\u6240\u6709 item \u4e2d\u6700\u5927\u7684\u5229\u6da6\uff0c\u7528 \\(P_\\text{optimal}\\) \u8868\u793a\u51c6\u786e\u89e3\uff0c\\(P_\\text{greedy}\\) \u8868\u793a\u6211\u4eec\u4f7f\u7528\u8d2a\u5fc3\u505a\u6cd5\u5f97\u5230\u7684\u7b54\u6848\u3002\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u8fd1\u4f3c\u6bd4\u7684\u8ba1\u7b97\u8868\u8fbe\u5f0f\u4e3a\uff1a

    \\[ \\rho = \\max( \\frac{P_\\text{optimal}}{P_\\text{greedy}}, \\frac{P_\\text{greedy}}{P_\\text{optimal}} ) \\]

    \u4e0b\u9762\u662f\u8bc1\u660e\u8fc7\u7a0b\uff1a

    \\[ \\left\\{ \\begin{aligned} & p_\\text{max} \\leq P_\\text{greedy} & (1)\\\\ & P_\\text{optimal} \\leq P_\\text{greedy} + p_\\text{max} & (2) \\end{aligned} \\right. \\]

    \u5c06 \\((1)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\) \u5f97\uff1a

    \\[ \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 1 \\quad (3) \\]

    \u5c06 \\((2)\\) \u5f0f\u4e24\u4fa7\u540c\u9664\u4ee5 \\(P_\\text{greedy}\\)\uff0c\u5e76\u4ee3\u5165 \\((3)\\) \u5f97\uff1a

    \\[ \\frac{P_\\text{optimal}}{P_\\text{greedy}} \\leq 1 + \\frac{p_\\text{max}}{P_\\text{greedy}} \\leq 2 \\]

    PPT \u7684\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u4e0d\u7b49\u5f0f\uff0c\u867d\u7136\u6210\u7acb\uff0c\u4f46\u662f\u597d\u50cf\u6ca1\u8d77\u5230\u4f5c\u7528\uff0c\u6211\u5c31\u6269\u5c55\u4e00\u4e0b\u5199\u5728\u8fd9\u91cc\u6c42\u4e2a\u773c\u719f\u4e86\uff1a

    \\[ p_\\text{max} \\leq P_\\text{greedy} \\leq P_\\text{optimal} \\leq P_\\text{frac} \\]

    \u5176\u4e2d \\(P_\\text{frac}\\) \u6307\u7684\u662f\u540c\u6837\u7684\u6570\u636e\u4e0b fractional version \u7684\u7b54\u6848\u3002

    \u8865\u5145\u7ed3\u8bba\uff1a\u80cc\u5305\u95ee\u9898\u5177\u6709 FPTAS\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u52a8\u6001\u89c4\u5212\u505a\u6cd5","title":"\u52a8\u6001\u89c4\u5212\u505a\u6cd5","text":"

    \uff08\u771f\u662f\u6df7\u4e71\uff09

    \\[ W_{i,p} = \\text{the minimum weight of a collection from } \\{1, \u2026, i\\} \\text{ with total profit being exactly } p \\\\ W_{i,p} = \\left\\{ \\begin{aligned} &\\infty && i = 0 \\\\ &W_{i-1, p} && p_i > p \\\\ &\\min\\{W_{i-1, p}, w_i + W_{i-1, p-p_i}\\} && otherwise \\end{aligned} \\right.\\\\ i = 1, ..., n; p = 1, ..., n\\cdot p_\\text{max} \\\\ O(n^2p_\\text{max}) \\]

    \u5982\u679c \\(p_\\text{max}\\) \u5f88\u5927\uff0c\u53ef\u4ee5\u8003\u8651\u5c06\u5b83\u4eec\u8fd1\u4f3c\u53d6\u6574\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u6d6e\u70b9\u6570\u5411\u4e0a\u53d6\u6574\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u6848\u4f8b-the-k-center-problem","title":"[\u6848\u4f8b] The K-center Problem","text":"

    link

    Berkeley's: https://ugtcs.berkeley.edu/src/approx-sp19/scribe-notes-2.pdf

    \uff08\u4e8c\u7ef4\uff09K \u4e2d\u5fc3\u95ee\u9898\u6307\uff1a\u7ed9\u5b9a\u5e73\u9762\u4e0a\u7684\u4e00\u7cfb\u5217 site\uff08\u5373\u70b9\uff09\uff0c\u5728\u5e73\u9762\u4e2d\u627e\u51fa \\(k\\) \u4e2a\u4e0d\u540c\u7684 center\uff0c\u8bb0 \\(site_i\\) \u5230\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u4e3a \\(dis_i\\)\uff0c\u6c42 \\(\\max \\{dis_i\\}\\) \u7684\u6700\u5c0f\u503c\u3002

    \u6570\u5b66\u8bed\u8a00\u8868\u8fbe

    \u8bbe \\(C = \\{c_1, c_2, ..., c_k\\}\\) \u4e3a \\(k\\) \u4e2a center\uff0c\\(S = \\{s_1, s_2, ..., s_n\\}\\) \u4e3a \\(n\\) \u4e2a site\uff0c\u6211\u4eec\u5b9a\u4e49 site \u5230\u5173\u4e8e center \u7684\u96c6\u5408 \\(C\\) \u7684\u8ddd\u79bb\u4e3a\uff1a

    \\[ dis(s_i, C) = \\min_{c_i\\in C} \\{ dis(s_i, c_i) \\} \\]

    \u5373 \\(s_i\\) \u5230\u8ddd\u79bb\u5b83\u6700\u8fd1\u7684 center \u7684\u8ddd\u79bb\u3002

    \u5b9a\u4e49\u6700\u5927\u7684\u6700\u5c0f\u8986\u76d6\u534a\u5f84\u4e3a\uff1a

    \\[ r(C) = \\max_{s_i\\in S} \\{ dis(s_i, C) \\} \\\\ \\]

    \u73b0\u5728\u8981\u5bfb\u627e\u4e00\u4e2a \\(C\\) \u4f7f\u5f97 \\(r(C)\\) \u6700\u5c0f\uff08\\(|C| = k\\)\uff09\u3002

    \u5f88\u7ed5\uff0c\u975e\u5e38\u7ed5\u3002\u63a5\u4e0b\u6765\u5f00\u59cb\u8bf4\u4eba\u8bdd\u3002

    \u5e73\u9762\u7684\u95ee\u9898\u6211\u4eec\u5c31\u7528\u5e73\u9762\u7684\u601d\u8def\u6765\u770b\uff0c\u5c31\u662f\u4e00\u4e2a\u5e73\u9762\u4e0a\u6709\u4e00\u5806\u70b9\uff0c\u73b0\u5728\u6211\u8981\u5728\u4e0a\u9762\u627e \\(k\\) \u4e2a\u4e2d\u5fc3\u53bb\u753b\u5706\uff0c\u4f7f\u5f97\u8fd9 \\(k\\) \u4e2a\u5706\u80fd\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002\u73b0\u5728\u8981\u6c42\u6700\u5927\u7684\u90a3\u4e2a\u5706\u7684\u534a\u5f84\u6700\u5c0f\u80fd\u591a\u5c0f\u3002

    \u5173\u4e8e\u8ddd\u79bb

    PPT \u4e0a\u5bf9\u8ddd\u79bb\u505a\u4e86\u66f4\u8fdb\u4e00\u6b65\u7684\u8bf4\u660e\uff0c\u4f46\u662f\u5176\u5b9e\u5e76\u4e0d\u662f\u8fd9\u4e2a\u95ee\u9898\u7684\u91cd\u70b9\uff0c\u4f46\u662f\u4e3a\u4e86\u4e25\u8c28\u6027\uff0c\u6211\u8fd8\u662f\u5728\u8fd9\u91cc\u653e\u4e0a\u4e09\u6761\u6027\u8d28\uff1a

    3 property of 'distance'

    \\[ \\begin{aligned} & dis(x,x) = 0 && \\text{(identity)} \\\\ & dis(x,y) = dis(y,x) && \\text{(symmetry)} \\\\ & dis(x,y) \\leq dis(x,z) + dis(z,y) && \\text{(triangle inequality)} \\end{aligned} \\]

    \u788e\u788e\u5ff5

    \u8fd9\u4e2a\u4e1c\u897f\u548c\u805a\u7c7b\u6709\u70b9\u50cf\u3002\u4e3b\u8981\u96be\u70b9\u5c31\u5728\u4e8e\uff0c\u6211\u4eec\u4e0d\u77e5\u9053\u5e94\u8be5\u4ee5\u4f55\u79cd\u7b56\u7565\u53bb\u8986\u76d6\u8fd9\u4e9b\u70b9\uff0c\u8981\u662f\u628a\u4e24\u4e2a\u8ddd\u79bb\u5f88\u8fdc\u7684\u70b9\u5212\u5728\u540c\u4e00\u4e2a\u5706\u5185\uff0c\u90a3\u7b54\u6848\u80af\u5b9a\u5c0f\u4e0d\u4e86\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u6765\u5c1d\u8bd5\u89e3\u51b3\u7684\u8fd9\u4e2a\u95ee\u9898\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#naive-greedy","title":"Naive Greedy","text":"

    \u4e00\u4e2a\u505a\u6cd5\u662f\uff0c\u6211\u4eec\u6bcf\u6b21\u90fd\u9009\u62e9\u6700\u53ef\u80fd\u6210\u4e3a\u4e2d\u5fc3\u7684\u90a3\u4e2a\u70b9\uff0c\u5177\u4f53\u6765\u8bf4\uff1a

    1. \u5982\u679c\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u6240\u6709\u70b9\u7684\u4e2d\u5fc3\uff1b
    2. \u5982\u679c\u4e0d\u662f\u7b2c\u4e00\u4e2a\u70b9\uff0c\u5c31\u9009\u53d6\u80fd\u4e00\u4e2a\u6700\u80fd\u8ba9 \\(r(C)\\) \u4e0b\u964d\u7684\uff1b

    \u8fd9\u4e2a\u505a\u6cd5\u7684 bug \u6bd4\u8f83\u5927\uff0c\u5047\u8bbe\u6211\u4eec\u7684\u70b9\u662f\u805a\u7c7b\u975e\u5e38\u660e\u663e\u7684\u4e24\u4e2a\u70b9\u4e91\uff0c\u90a3\u4e48\u7b2c\u4e00\u4e2a\u70b9\u5c31\u4f1a\u843d\u5728\u4e24\u4e2a\u70b9\u4e91\u4e4b\u95f4\uff0c\u8fd9\u5f88\u8822\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u6d6a\u8d39\u8fc7\u591a\u65f6\u95f4\u5728\u8fd9\u4e2a\u65b9\u6cd5\u4e0a\u3002

    \u6ce8\u610f\uff0c\u968f\u7740 center \u7684\u589e\u52a0\uff0c\u539f\u6765\u4ee5 \\(c_i\\) \u4e3a center \u7684 site \u5f88\u53ef\u80fd\u4ee5\u6700\u65b0\u63d2\u5165\u7684 \\(c_j\\) \u4e3a center\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#2r-greedy","title":"2r-Greedy","text":"

    \u65e2\u7136\u6b63\u5411\u505a\u5f88\u56f0\u96be\uff0c\u90a3\u6211\u4eec\u80fd\u4e0d\u80fd\u53cd\u7740\u505a\u5462\uff1f\u6709\u4e00\u79cd\u5957\u8def\u53eb\u4e8c\u5206\u7b54\u6848\uff0c\u5373\u5148\u731c\u7b54\u6848\uff0c\u518d\u9a8c\u8bc1\u662f\u5426\u662f\u7b54\u6848\u3002\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u8fd9\u4e2a\u601d\u60f3\uff0c\u5373\u5148\u731c\u4e00\u4e2a \\(r\\)\uff0c\u7136\u540e\u5c1d\u8bd5\u7528 \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u6240\u6709\u70b9\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u5047\u8bbe\u51c6\u786e\u89e3\u5bf9\u5e94\u7684\u4e00\u4e2a center \u96c6\u5408\u4e3a \\(C^*\\)\uff0c\u90a3\u4e48 \\(\\forall r(C_x) \\geq r(C^*)\\) \u7684 \\(C_x\\) \u90fd\u5fc5\u5b9a\u5b58\u5728\u8986\u76d6\u65b9\u6848\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6211\u4eec\u80fd\u591f\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u7ea6\u675f\u51c6\u786e\u89e3 \\(r(C^*) \\leq r(C_x)\\)\u3002

    \u5982\u4f55\u201c\u9a8c\u8bc1\u201d

    \u53ef\u662f\uff0c\u4ed4\u7ec6\u4e00\u60f3\u6211\u4eec\u53d1\u73b0\uff0c\u4e8c\u5206\u7b54\u6848\u7684\u8fc7\u7a0b\u4e2d\uff0c\u201c\u9a8c\u8bc1\u5bf9\u4e8e \\(C_x\\) \u80fd\u591f\u8986\u76d6\u6240\u6709\u7684\u70b9\u201d\u8fd9\u4ef6\u4e8b\u4e5f\u4e0d\u597d\u505a\uff0c\u867d\u7136\u6211\u4eec\u6709\u534a\u5f84\uff0c\u4f46\u662f\u6211\u4eec\u4e5f\u5f88\u96be\u627e\u5230\u4e00\u4e2a\u6700\u597d\u7684\u65b9\u6848\u6765\u8986\u76d6\u6240\u6709\u7684\u70b9\u3002

    hint: \u8fd1\u4f3c\u7b97\u6cd5

    \u4e8e\u662f\u6211\u4eec\u7684\u8fd1\u4f3c\u7b97\u6cd5\u5c31\u53ef\u4ee5\u5927\u5c55\u62f3\u811a\u4e86\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u6240\u8c13\u7684\u8fd1\u4f3c\u7b97\u6cd5\uff0c\u6307\u7684\u662f\u4f7f\u7528\u4e8c\u5206\u7b54\u6848\u6c42\u89e3 \\(r(C)\\) \u8fd9\u4e2a\u7b97\u6cd5\uff0c\u800c\u975e\u5224\u65ad \\(k\\) \u4e2a\u534a\u5f84\u4e3a \\(r\\) \u7684\u5706\u80fd\u5426\u8986\u76d6\u6240\u6709\u70b9\u7684\u7b97\u6cd5\u3002\u8fd9\u4e00\u70b9\u975e\u5e38\u91cd\u8981\uff01

    \u800c\u5173\u4e8e\u7b97\u6cd5\u5177\u4f53\u5982\u4f55\u64cd\u4f5c\uff0c\u8bf7\u63a5\u7740\u770b\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u518d\u6b21\u68b3\u7406\u4e00\u4e0b\u8fd9\u4e2a\u7b97\u6cd5\uff0c\u5b83\u5305\u542b\u5185\u5916\u4e24\u5c42\uff0c\u9996\u5148\u5916\u90e8\u901a\u8fc7\u5728\u7b54\u6848\u7684\u5019\u9009\u533a\u95f4\uff08\u5373 \\((0, r_\\text{max}]\\)\uff0c\\(r_\\text{max}\\) \u4e3a\u6700\u8fdc\u7684\u4e24\u4e2a\u70b9\u7684\u8ddd\u79bb\uff09\u4e8c\u5206\u5019\u9009\u503c\uff0c\u63a5\u7740\u901a\u8fc7\u5224\u5b9a\u7b97\u6cd5\u6765\u5224\u5b9a\u63a5\u4e0b\u6765\u7684\u4e8c\u5206\u65b9\u5411\u3002

    \u7136\u800c\uff0c\u7531\u4e8e\u6211\u4eec\u5f88\u96be\u5728\u591a\u9879\u5f0f\u65f6\u95f4\u5b9e\u73b0\u51c6\u786e\u7684\u201c\u5224\u5b9a\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u91c7\u53d6\u8fd9\u6837\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u7b56\u7565\u6765\u8fdb\u884c\u5bbd\u6cdb\u7684\u5fc5\u8981\u6761\u4ef6\u7b5b\u9009\uff1a

    \u6d41\u7a0b\u63cf\u8ff0

    \u8bbe \\(C_x\\) \u8868\u793a\u9009\u4e2d\u7684 center\uff0c\\(S_x\\) \u8868\u793a\u5c1a\u672a\u88ab\u4efb\u4f55\u5706\u8986\u76d6\u7684 site\uff0c\\(r_x\\) \u8868\u793a\u5f53\u524d\u4e8c\u5206\u51fa\u6765\u7684\uff0c\u8981\u6211\u4eec\u5224\u65ad\u7684\u534a\u5f84\uff0c\\(S\\) \u4f9d\u7136\u8868\u793a\u6240\u6709 site \u7684\u96c6\u5408\uff1a

    1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff1b
    2. \u5f53 \\(S_x \\not = \\emptyset\\) \u65f6\uff08\u5373\u8fd8\u6709\u70b9\u6ca1\u88ab\u8986\u76d6\u65f6\uff09\uff0c\u91cd\u590d\u8fd9\u4e9b\u64cd\u4f5c\uff1a
      1. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff08\u5373\u5c06 \\(s_i\\) \u5f53\u4f5c\u4e00\u4e2a center\uff09\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff08\u5373 \\(s_i\\) \u5fc5\u5b9a\u88ab\u8986\u76d6\uff09\uff1b
      2. \u5220\u9664 \\(S_x\\) \u4e2d\u6240\u6709\u8ddd\u79bb \\(s_i\\) \u4e0d\u8db3 \\(r_x\\) \u7684\u70b9\uff08\u5373\u5220\u9664\u6ee1\u8db3 \\(dis(s_i, s_j) \\leq r_x\\) \u7684\u6240\u6709 \\(s_k \\in S_x\\)\uff09\uff1b
    3. \u5f53\u6240\u6709\u70b9\u90fd\u88ab\u8986\u76d6\u540e\uff1a
      1. \u5982\u679c \\(|C_x| \\leq k\\)\uff0c\u5219\u8fd4\u56de yes\uff1b
      2. \u5426\u5219\u8fd4\u56de no\uff1b

    \u5982\u679c\u8fd4\u56de yes\uff0c\u5219\u4e0b\u4e00\u4e2a \\(r_x\\) \u5e94\u5f53\u53d6\u66f4\u5c0f\u7684 \\(r_x\\)\uff1b\u5982\u679c\u8fd4\u56de no\uff0c\u4e0b\u4e00\u6b21\u5e94\u8be5\u53d6\u66f4\u5927\u7684 \\(r_x\\)\uff08\u7a0d\u5019\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\uff09\u3002

    \u73b0\u5728\u5bf9\u5176\u505a\u8fdb\u4e00\u6b65\u89e3\u91ca\u3002\u8fd9\u662f\u4e00\u4e2a\u542f\u53d1\u5f0f\u7684\u505a\u6cd5\uff0c\u65e8\u5728\u6bcf\u6b21\u5bfb\u627e\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4f5c\u4e3a\u65b0\u7684 center\uff0c\u7528\u4e00\u4e2a\u534a\u5f84\u4e3a \\(2r_x\\) \u7684\u5706\u53bb\u8986\u76d6\u5269\u4e0b\u7684\u70b9\u3002\u901a\u8fc7\u5224\u65ad\u8fd9\u6837\u6240\u9700\u8981\u7684 center \u6570\u91cf\u662f\u5426\u8d85\u8fc7 \\(k\\) \u6765\u5224\u65ad\u662f\u5426\u80fd\u591f\u8986\u76d6\u3002\u63a5\u4e0b\u6765\u5f88\u7ed5\uff0c\u8bf7\u4e00\u6b65\u4e00\u6b65\u7684\u770b\uff1a

    1. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u6210\u529f\u65f6\uff0c\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u53ef\u4ee5\u8986\u76d6\u6240\u6709\u70b9\uff1b
    2. \u5f53\u8fd9\u4e2a\u542f\u53d1\u5f0f\u641c\u7d22\u5931\u8d25\u65f6\uff0c\u4e0d\u80fd\u8bf4\u660e \\(2r_x \\geq r(C^*)\\)\uff0c\u5373 \\(k\\) \u4e2a \\(2r_x\\) \u7684\u5706\u4e0d\u80fd\u8986\u76d6\u6240\u6709\u70b9\uff0c\u56e0\u4e3a\u542f\u53d1\u5f0f\u65b9\u6848\u5e76\u4e0d\u662f\u6700\u4f18\u65b9\u6848\uff1b\u4f46\u662f\u80fd\u8bf4\u660e\u5fc5\u5b9a\u4e0d\u5b58\u5728 \\(r_x\\) \u7684\u8986\u76d6\uff0c\u5373 \\(r_x \\leq r(C^*)\\)\uff08\u8bc1\u660e\u89c1\u4e0b\u65b9 lemma\uff09\uff1b
    lemma

    \u5047\u8bbe\u534a\u5f84\u4e3a \\(r\\)\uff0c\u4ee5 \\(c\\) \u4e3a\u5706\u5fc3\u7684\u5706 \\(C\\) \u8986\u76d6\u4e86 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\u3002

    \u90a3\u4e48\uff0c\u5bf9\u4e8e\u56fa\u5b9a\u7684\u534a\u5f84 \\(r'\\)\uff0c\u8981\u60f3\u53d6\u4efb\u610f\u7684 \\(s_i \\in S\\) \u4e3a\u5706\u5fc3\uff0c\u5f62\u6210\u7684\u5706 \\(C_i\\)\uff0c\u603b\u662f\u80fd\u8986\u76d6 \\(S\\) \u4e2d\u7684\u6240\u6709\u70b9\uff0c\u5219 \\(r' \\geq 2r\\)\u3002

    lemma \u7684\u8bc1\u660e\u5c31\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\u4e86\uff0c\u8bc1\u660e\u7684\u5173\u952e\u662f\u8003\u8651\u4e24\u70b9\u5206\u5e03\u5728\u76f4\u5f84\u4e24\u7aef\u7684\u60c5\u51b5\u3002

    \u8fd9\u4e2a\u5f15\u7406\u7684\u9644\u52a0\u7ed3\u8bba\u5c31\u662f\uff1a

    \\[ \\forall i \\quad C \\subset C_i \\]

    \u5373\u4ee5 \\(r\\) \u4e3a\u534a\u5f84\u7684\u6700\u4f18\u8986\u76d6\u5706\uff0c\u4e00\u5b9a\u80fd\u88ab\u4ee5\u4efb\u610f \\(s_i\\) \u4e3a\u5706\u5fc3\u3001\\(2r\\) \u4e3a\u534a\u5f84\u7684\u5706\u6240\u8986\u76d6\u3002

    \u5f53\u6211\u4eec\u53d1\u73b0\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 1. \u65f6\uff0c\u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u6211\u4eec\u786e\u5b9e\u5f97\u5230\u4e86\u4e00\u4e2a\u8ddd\u79bb \\(r(C^*)\\) \u66f4\u8fd1\u7684\u4e0a\u754c \\(2r_x\\)\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 1. \u786e\u5b9a\u7684\u4e0a\u754c\uff0c\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

    \u5f53\u6211\u4eec\u5904\u4e8e\u60c5\u51b5 2. \u65f6\uff0c\u6211\u4eec\u4e0d\u77e5\u9053 \\(2r_x\\) \u548c \\(r(C^*)\\) \u7684\u5927\u5c0f\u5173\u7cfb\uff0c\u4f46\u662f\u77e5\u9053 \\(r_x\\) \u548c \\(r(C^*)\\) \u7684\u5173\u7cfb\uff0c\u7531\u4e8e\u4e8c\u5206\u7684\u6027\u8d28\uff0c\u6211\u4eec\u6bcf\u6b21\u901a\u8fc7 2. \u786e\u5b9a\u7684\u4e0b\u754c\uff0c\u4e5f\u603b\u662f\u8d8a\u6765\u8d8a\u7d27\u7684\u3002

    \u800c\u6700\u7ec8\uff0c\u6211\u4eec\u4f1a\u5f97\u5230\u4e00\u4e2a\u6700\u7ec8\u7684 \\(r_{x_0}\\)\uff0c\u6ee1\u8db3\uff1a\\(r_{x_0} \\leq r(C^*) \\leq 2r_{x_0}\\)\uff08\u5f0f\u4e2d\u54ea\u8fb9\u80fd\u53d6\u7b49\u53d6\u51b3\u4e8e\u6700\u540e\u843d\u5728 1. \u8fd8\u662f 2.\uff09\u3002

    \u800c\u6211\u4eec\u6700\u7ec8\u7ed9\u51fa\u7684\u7b54\u6848\u662f \\(2r_{x_0}\\)\uff08\u56e0\u4e3a \\(r_{x_0}\\) \u4e0d\u6ee1\u8db3\u6761\u4ef6\uff0c\u4e0d\u662f\u89e3\uff0c\u66f4\u4e0d\u662f\u8fd1\u4f3c\u89e3\uff09\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u6765\u8ba1\u7b97\u8fd1\u4f3c\u6bd4\uff1a

    \\[ \\begin{aligned} & \\begin{aligned} \\because \\;\\;\\; & r_{x_0} \\leq r(C^*) \\leq 2r_{x_0} \\\\ & \\frac{1}{2} \\leq \\frac{r(C^*)}{2r_{x_0}} \\leq 1 \\\\ & 1 \\leq \\frac{2r_{x_0}}{r(C^*)} \\leq 2 \\end{aligned} \\\\ & \\therefore \\; \\rho = \\max\\{ \\frac{ 2 r_{x_0} }{ r(C^*) }, \\frac{ r(C^*) }{ 2 r_{x_0} } \\} = 2 \\end{aligned} \\]"},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#smarter-greedy","title":"Smarter Greedy","text":"

    \u6211\u4eec\u5173\u6ce8\u5230\uff0c\u4e0a\u9762\u90a3\u4e2a\u505a\u6cd5\u603b\u662f\u968f\u673a\u7684\u9009\u53d6\u65b0\u7684 \\(c_i\\)\uff0c\u4f46\u662f\u5bf9\u4e8e center \u7684\u9009\u53d6\uff0c\u6211\u4eec\u5176\u5b9e\u53ef\u4ee5\u603b\u662f\u9009\u62e9\u8ddd\u79bb\u5df2\u6709\u7684 center \u6700\u8fdc\u7684\u70b9\uff0c\u6b64\u5916\uff0c\u5f53 \\(|C| > k\\) \u65f6\uff0c\u6211\u4eec\u4e5f\u6ca1\u5fc5\u8981\u7ee7\u7eed\u505a\u4e86\u3002

    \u6d41\u7a0b\u63cf\u8ff0

    1. \u521d\u59cb\u5316 \\(C_x = \\emptyset\\)\uff0c\\(S_x = S\\)\uff1b
    2. \u968f\u673a\u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u5c06\u5176\u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
    3. \u5f53 \\(|C_x| \\leq k\\) \u4e14 \\(S_x \\not = \\emptyset\\) \u65f6\uff0c\u91cd\u590d\u4ee5\u4e0b\u6b65\u9aa4\uff1a
      1. \u9009\u53d6\u4e00\u4e2a site \\(s_i \\in S_x\\)\uff0c\u8fd9\u4e2a site \u6ee1\u8db3 \\(\\forall s_j \\in S_x \\quad dis(s_i, C_x) \\geq dis(s_j, C_x)\\)\uff08\u5373\u8fd9\u4e2a\u70b9\u662f\u8fd8\u6ca1\u88ab\u8986\u76d6\u7684\u70b9\u4e2d\u8ddd\u79bb \\(C_x\\) \u6700\u8fdc\u7684\u70b9\uff09\uff1b
      2. \u5c06 \\(s_i\\) \u63d2\u5165 \\(C_x\\)\uff0c\u5e76\u4ece \\(S_x\\) \u4e2d\u5c06 \\(s_i\\) \u5220\u9664\uff1b
    4. \u5982\u679c \\(|C_x| \\leq k\\) \u4e14 \\(S_x = \\emptyset\\)\uff0c\u5219\u8fd4\u56de yes\uff1b\u5426\u5219\u8fd4\u56de no\u3002

    \u7531\u4e8e\u8fd9\u4e2a\u505a\u6cd5\u5b9e\u9645\u4e0a\u53ea\u662f\u4f18\u5316\u4e86\u4e00\u4e0b\u542f\u53d1\u5f0f\u7684\u7b56\u7565\uff0c\u5e76\u6ca1\u6709\u6539\u53d8\u5185\u6838\uff0c\u6240\u4ee5\u5176\u8fd1\u4f3c\u6bd4\u4ecd\u7136\u662f \\(2\\)\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec11/#\u603b\u7ed3","title":"\u603b\u7ed3","text":"

    \u5173\u4e8e\u7b97\u6cd5\u7684\u8bbe\u8ba1\uff0c\u6211\u4eec\u8003\u8651\u8fd9\u4e09\u4e2a\u7ef4\u5ea6\uff1a

    1. \u6700\u4f18\u6027(optimality)\uff1a\u5373\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
    2. \u9ad8\u6548\u6027(efficiency)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u9ad8\u6548\uff1b
    3. \u666e\u904d\u6027(all instances)\uff1a\u5373\u7b97\u6cd5\u662f\u5426\u666e\u904d\u9002\u7528\u4e8e\u6240\u6709\u7684\u60c5\u51b5\uff1b

    \u5018\u82e5\u4e00\u4e2a\u89e3\u6cd5\uff1a

    1. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u9ad8\u6548\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u7279\u6b8a\u60c5\u51b5\u80fd\u9ad8\u6548\u6c42\u51c6\u786e\u89e3\uff1b
    2. \u540c\u65f6\u6ee1\u8db3\u6700\u4f18\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u5bf9\u6240\u6709\u60c5\u51b5\u90fd\u80fd\u6c42\u51c6\u786e\u89e3\uff1b
    3. \u540c\u65f6\u6ee1\u8db3\u9ad8\u6548\u6027\u548c\u666e\u904d\u6027\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7b97\u6cd5\u53ef\u80fd\u662f\u4e2a\u8fd1\u4f3c\u7b97\u6cd5\uff1b

    \u5c31\u7b97 N=NP \u6210\u7acb\uff0c\u6211\u4eec\u4ecd\u7136\u65e0\u6cd5\u4fdd\u8bc1\u4e09\u4e2a\u613f\u671b\u4e00\u6b21\u6ee1\u8db3\u3002

    \u4e0d\u662f\u5f88\u660e\u767d\u6700\u540e\u4e00\u53e5\u8bdd\u5982\u4f55\u7406\u89e3\uff0c\u4f46\u662f\u8fd9\u4e00\u90e8\u5206\u5e94\u8be5\u5c31\u662f\u770b\u4e2a\u773c\u719f\uff0c\u4e0d\u662f\u5f88\u91cd\u8981\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/","title":"Lecture 12 | Local Search","text":"

    \u7ea6 365 \u4e2a\u5b57 17 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

    \u5373\u5148\u627e\u5230\u4e00\u4e2a\u53ef\u884c\u89e3\uff0c\u4ee5\u53ca\u91cf\u5316\u5176\u4f18\u7a0b\u5ea6\u7684\u76ee\u6807\u51fd\u6570\uff0c\u518d\u5728\u8fd9\u4e2a\u53ef\u884c\u89e3\u4e0a\u5bfb\u6c42\u4f18\u5316\uff0c\u76f4\u5230\u8fbe\u5230\u5c40\u90e8\u6700\u4f18\u89e3\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-vertex-cover-problem","title":"[\u6848\u4f8b] The Vertex Cover Problem","text":"

    \u9876\u70b9\u8986\u76d6\u95ee\u9898(vertex cover problem)\u6307\u7ed9\u5b9a\u4e00\u4e2a\u65e0\u5411\u56fe \\(G=(V,E)\\)\uff0c\u627e\u5230\u4e00\u4e2a\u6700\u5c0f\u7684\u9876\u70b9\u96c6 \\(S\\subseteq V\\)\uff0c\u4f7f\u5f97\u6bcf\u6761\u8fb9 \\((u,v)\\) \u90fd\u81f3\u5c11\u6709\u4e00\u4e2a\u7aef\u70b9\u5728 \\(S\\) \u4e2d\uff08\u5373 \\(u\\in S \\lor v\\in S\\)\uff09\u3002

    \u8fd9\u4e2a\u95ee\u9898\u7684\u53ef\u884c\u89e3\u4e3a \\(S = V\\)\uff0c\u5373\u5b8c\u5168\u8986\u76d6\uff0c\u5176\u76ee\u6807\u51fd\u6570\u4e3a \\(cost(S) = |S|\\)\u3002\u5373\uff0c\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528 local search \u6765\u964d\u4f4e \\(|S|\\)\u3002

    \u7ed9\u51fa\u51e0\u79cd\u6848\u4f8b\u4ee5\u53ca\u53ef\u89c6\u5316\uff0c\u8bf4\u660e\u5c40\u90e8\u641c\u7d22\u5bb9\u6613\u5931\u6548\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","title":"\u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5","text":"

    \u6885\u7279\u7f57\u6ce2\u5229\u65af\u7b97\u6cd5(the Metropolis algorithm)\u7684\u8fc7\u7a0b\uff1a

    \u51d1\u5408\u4e00\u4e0b\uff0c\u4e4b\u540e\u6709\u7a7a\u518d\u6539\u3002

    SolutionType Metropolis() {   Define constants k and T;\nStart from a feasible solution S \\in FS ;\nMinCost = cost(S);\nwhile (1) {\nS\u2019 = Randomly chosen from N(S); CurrentCost = cost(S\u2019);\nif ( CurrentCost < MinCost ) {\nMinCost = CurrentCost;    S = S\u2019;\n}\nelse {\nWith a probability e^{-\\Delta cost / (kT)}, let S = S\u2019;\nelse  break;\n}\n}\nreturn S;\n}\n

    \u6ce8\uff1a\u5bf9\u4e8ecase 1\uff0c\u6709\u4e00\u5b9a\u6982\u7387\u53ef\u4ee5\u8df3\u51falocal optimum\u5f97\u5230\u6b63\u786e\u89e3\u3002\u4f46\u662f\u5bf9case 0\uff0c\u6709\u53ef\u80fd\u5728\u52a01\u548c\u51cf1\u4e4b\u95f4\u65e0\u9650\u9707\u8361\u2026\u2026 \u6ce8\uff1a\u5f53\uff08\u6e29\u5ea6\uff09T\u5f88\u9ad8\u65f6\uff0c\u4e0a\u5761\u7684\u6982\u7387\u51e0\u4e4e\u4e3a1\uff0c\u5bb9\u6613\u5f15\u8d77\u5e95\u90e8\u9707\u8361\uff1b\u5f53T\u63a5\u8fd10\u65f6\uff0c\u4e0a\u5761\u6982\u7387\u51e0\u4e4e\u4e3a0\uff0c\u63a5\u8fd1\u539f\u59cb\u7684\u68af\u5ea6\u4e0b\u964d\u6cd5\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6a21\u62df\u9000\u706b","title":"\u6a21\u62df\u9000\u706b","text":"

    \u6a21\u62df\u9000\u706b(simulated annealing)

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-hopfield-neural-networks","title":"[\u6848\u4f8b] Hopfield Neural Networks","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Hopfield_network

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec12/#\u6848\u4f8b-the-maximum-cut-problem","title":"[\u6848\u4f8b] The Maximum Cut Problem","text":"

    links

    Wikipedia: https://en.wikipedia.org/wiki/Maximum_cut

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/","title":"Lecture 13 | Randomized Algorithms","text":"

    \u7ea6 25 \u4e2a\u5b57

    \u65f6\u95f4\u5306\u5fd9\uff0c\u5185\u5bb9\u7b80\u7565

    \u4e00\u4e9b\u6982\u5ff5\u8bf4\u660e

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#the-hiring-problem","title":"The Hiring Problem","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec13/#modified-quick-sort","title":"Modified Quick Sort","text":""},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec14/","title":"Lecture 14 | Parallel","text":"

    \u7ea6 3 \u4e2a\u5b57

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/","title":"Lecture 15 | External Sorting","text":"

    \u7ea6 6424 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 32 \u5206\u949f

    link

    Wikipedia: https://en.wikipedia.org/wiki/External_sorting

    \u5916\u6392\u5e8f\u4e0e\u6570\u636e\u5e93\u7cfb\u7edf\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\u6709\u4ea4\u53c9\u5173\u7cfb\uff0c\u5f53\u9700\u8981\u6392\u5e8f\u7684\u6570\u636e\u8fc7\u5927\uff0c\u800c\u65e0\u6cd5\u88ab\u5b8c\u5168\u653e\u5728\u5185\u5b58\u65f6\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u65e0\u6cd5\u88ab\u5e94\u7528\u3002\u6b64\u65f6\u9700\u8981\u4f7f\u7528\u5916\u6392\u5e8f\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u5728\u66f4\u5927\u7684\u5c3a\u5ea6\u4e0a\u8fdb\u884c\u7c7b\u4f3c\u5f52\u5e76\u7684\u64cd\u4f5c\u3002

    \u800c\u6b63\u56e0\u4e3a\u6b64\uff0c\u5916\u90e8\u6392\u5e8f\u7684\u8fc7\u7a0b\u4e0e\u786c\u4ef6\u8bbe\u8ba1\u6709\u4e00\u5b9a\u5173\u7cfb\u3002

    \u4e0e\u786c\u4ef6\u76f8\u5173\u7684\u4e00\u4e9b\u8bf4\u660e

    \u5177\u4f53\u6765\u8bf4\uff0c\u666e\u901a\u7684\u6392\u5e8f\u7b97\u6cd5\u6392\u5e8f\u7684\u5bf9\u8c61\u90fd\u662f\u653e\u5728\u5185\u5b58\u91cc\u7684\u4e00\u4e9b\u6570\u636e\uff0c\u4f8b\u5982\u4e00\u4e2a int \u6570\u7ec4\u3002\u7136\u800c\u5916\u90e8\u6392\u5e8f\u6392\u5e8f\u7684\u5bf9\u8c61\uff0c\u6216\u8005\u8bf4\u8981\u6392\u5e8f\u7684\u90a3\u4e2a\u201c\u6570\u7ec4\u201d\uff0c\u6ca1\u6cd5\u88ab\u5b8c\u6574\u5730\u5b58\u5728\u5185\u5b58\u91cc\uff0c\u5b83\u4eec\u90fd\u88ab\u5b58\u50a8\u5728\u786c\u76d8\u4e4b\u7c7b\u7684\u975e\u6613\u5931\u4ecb\u8d28\u4e2d\uff0c\u800c\u4ece\u8fd9\u79cd\u4ecb\u8d28\u91cc\u8bfb\u53d6\u6570\u636e\u5f80\u5f80\u5177\u6709\u8f83\u5927\u7684\u5f00\u9500\uff0c\u6240\u4ee5\u6211\u4eec\u603b\u662f\u201c\u4e00\u5757\u4e00\u5757\u201d\u4ece\u91cc\u9762\u90a3\u6570\u636e\u3002

    \u6253\u4e2a\u6bd4\u65b9\uff0c\u4f60\u73b0\u5728\u9700\u8981\u5bf9\u4e00\u6574\u4e2a\u56fe\u4e66\u9986\uff08\u786c\u76d8\uff09\u7684\u4e66\u505a\u6392\u5e8f\uff0c\u4f46\u662f\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u6700\u591a\u653e\u4e0b\u4e09\u5341\u672c\u4e66\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4f60\u4e00\u6b21\u6700\u591a\u5904\u7406\u4e09\u5341\u672c\u4e66\u3002\u800c\u4e3a\u4e86\u4ece\u56fe\u4e66\u9986\u4e2d\u83b7\u53d6\u9700\u8981\u6392\u7684\u4e66\uff0c\u4f60\u5f97\u5148\u627e\u5230\u8fd9\u4e9b\u4e66\u5728\u54ea\uff08seek\uff09\uff0c\u7136\u540e\u518d\u628a\u8fde\u7eed\u7684\u4e09\u5341\u672c\u4e66\u62ff\u51fa\u6765\uff08block transfer\uff09\uff0c\u653e\u5230\u4f60\u7684\u684c\u5b50\uff08\u5185\u5b58\uff09\u4e0a\u518d\u6392\u5e8f\uff0c\u800c\u4e3a\u4e86\u7ed9\u63a5\u4e0b\u6765\u4e09\u5341\u672c\u4e66\u817e\u4f4d\u7f6e\uff0c\u4f60\u8fd8\u5f97\u628a\u6392\u597d\u7684\u4e09\u5341\u672c\u4e66\u518d\u653e\u56de\u53bb\uff08\u5373\u8bb0\u5f55\u4e0b\u6392\u5e8f\u7ed3\u679c\uff0c\u540c\u6837\u4e5f\u662f\u4e00\u6b21 block transfer\uff09\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u5916\u90e8\u6392\u5e8f\u4e3b\u8981\u89e3\u51b3\u7684\u5c31\u662f\uff0c\u6309\u7167\u600e\u6837\u7684\u7b56\u7565\u6765\u5bf9\u8fd9\u4e9b\u6570\u636e\u8fdb\u884c\u6392\u5e8f\u3002

    \u5bfc\u8bfb

    \u7531\u4e8e ADS \u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u548c\u540c\u65f6\u671f\u6570\u636e\u5e93\u7cfb\u7edf\u8fd9\u95e8\u8bfe\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u6709\u540c\u6709\u5f02\uff0c\u6240\u4ee5\u6211\u6253\u7b97\u5148\u5728\u5927\u6982\u8bb2\u5916\u6392\u5e8f\u7684\u6838\u5fc3\u601d\u8def\uff0c\u518d\u5c55\u5f00 ADS \u8bfe\u7a0b\u4e2d\u7684\u5177\u4f53\u8fc7\u7a0b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    \u5916\u6392\u5e8f\u7684\u57fa\u672c\u601d\u8def\u5c31\u662f\u5c06\u6570\u636e\u5206\u4e3a\u82e5\u5e72\u4e2a\u5c0f\u5757\uff0c\u7136\u540e\u5bf9\u6bcf\u4e2a\u5c0f\u5757\u8fdb\u884c\u6392\u5e8f\uff0c\u6700\u540e\u518d\u5c06\u8fd9\u4e9b\u5c0f\u5757\u5408\u5e76\u8d77\u6765\u3002\u800c\u6211\u4eec\u5e38\u8bf4\u7684\u5f52\u5e76\u6392\u5e8f\uff0c\u6307\u7684\u662f\u9012\u5f52\u5730\u5c06\u4e24\u5757\u5408\u6210\u4e00\u5757\uff0c\u800c\u6240\u8c13\u7684 \\(k\\) \u8def\uff08\\(k\\)-way\uff09\u5f52\u5e76\uff0c\u5c31\u662f\u5c06 \\(k\\) \u5757\u5408\u6210\u4e00\u5757\u3002

    \u90a3\u4e48\u5982\u4f55\u5f52\u5e76\u5462\uff1f\u6211\u5c06\u4ece\u4e24\u4e2a\u7ef4\u5ea6\u6765\u7b80\u5355\u9610\u8ff0\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u903b\u8f91\u7ef4\u5ea6","title":"\u903b\u8f91\u7ef4\u5ea6","text":"

    \u5916\u90e8\u6392\u5e8f\u6240\u4f7f\u7528\u7684\u5f52\u5e76\u6392\u5e8f\u4ece\u903b\u8f91\u4e0a\u6765\u8bb2\u548c\u666e\u901a\u7684\u5f52\u5e76\u6392\u5e8f\u4e00\u81f4\uff0c\u603b\u662f\u5c06 \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u5408\u5e76\u4e3a 1 \u4e2a\u6709\u5e8f\u5e8f\u5217\u3002

    \u800c\u8fd9\u91cc\u7684\u201c\u6709\u5e8f\u5e8f\u5217\u201d\uff0c\u5728\u5916\u6392\u5e8f\u4e2d\u88ab\u79f0\u4e3a\u201crun\u201d\uff0c\u5373\u6bcf\u6b21\u5f52\u5e76\u6211\u4eec\u53e6 \\(k\\) \u4e2a run \u53d8\u6210\u4e00\u4e2a run\u3002\u6b63\u7740\u8bf4\u5c31\u662f\uff1a

    run

    \u4e00\u4e2a run \u6307\u7684\u662f\u4e00\u6bb5\u8fc7\u7a0b\u4e2d\u7684\u6570\u636e\uff0c\u5728\u672c\u6587\u4e2d\u7279\u6307\u5f85\u5f52\u5e76\u7684\u6709\u5e8f\u7684\u5e8f\u5217\uff0c\u5728 \\(k\\)-way merge \u4e2d\uff0c\u6211\u4eec\u603b\u662f\u5c06 \\(k\\) \u4e2a run \u5408\u5e76\u4e3a 1 \u4e2a run\u3002

    \u8bf4\u660e

    \u8fd9\u91cc\u7684 run \u7684\u5b9a\u4e49\u662f\u6211\u81ea\u5df1\u8111\u8865\u51fa\u6765\u7684\uff0c\u5e76\u4e0d\u786e\u5b9a\u662f\u5426\u4e25\u683c\uff0c\u4f46\u662f\u53ef\u4ee5\u4fdd\u8bc1\u7684\u662f\uff1a \u4e00\u4e2a run \u5728\u53c2\u4e0e merge \u4e4b\u524d\u80af\u5b9a\u5df2\u7ecf\u6709\u5e8f\u4e86\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a \"have already run\"\uff0c\u800c\u4e3a\u4e86\u4e0d\u6405\u7cca\u8bfb\u8005\u7684\u8111\u5b50\uff0c\u6211\u8fd9\u91cc\u5c31\u4ee5\u8fd9\u4e2a\u5b9a\u4e49\u4e3a\u51c6\u3002

    \u4ece\u6267\u884c\u7684\u987a\u5e8f\u6765\u8bf4\uff0c\u5185\u6392\u5e8f\u4e2d\u7684\u5f52\u5e76\u6392\u5e8f\u662f\u4e00\u4e2a\u81ea\u4e0a\u800c\u4e0b\u4e0d\u65ad \\(\\frac{1}{k}\\) \u5730\u5212\u5206\uff0c\u518d\u81ea\u4e0b\u800c\u4e0a\u4e0d\u65ad\u5f52\u5e76\u7684\u8fc7\u7a0b\u3002\u76f8\u53cd\uff0c\u5916\u6392\u5e8f\u7531\u4e8e\u5176\u7279\u6027\u9650\u5236\uff0c\u5176\u201c\u5f52\u5e76\u6bb5\u201d\u5e76\u4e0d\u662f\u81ea\u4e0a\u800c\u4e0b \\(\\frac{1}{k}\\) \u5212\u5206\u51fa\u6765\u7684\uff0c\u800c\u662f\u6839\u636e\u786c\u4ef6\u5904\u7406\u80fd\u529b\uff0c\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u7136\u540e\u76f4\u63a5\u81ea\u4e0b\u800c\u4e0a\u5f52\u5e76\u3002

    \u800c\u8fd9\u6837\u4e00\u4e2a\u5c06 \\(k \\cdot c\\) \u4e2a run merge \u6210 \\(c\\) \u4e2a run \u7684\u8fc7\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e00\u4e2a pass\u3002\uff08\u5728\u5f52\u5e76\u6811\u4e0a\u4f53\u73b0\u4e3a\u4e00\u5c42\u3002\uff09

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u7269\u7406\u7ef4\u5ea6","title":"\u7269\u7406\u7ef4\u5ea6","text":"

    \u5173\u4e8e\u7269\u7406\u7ef4\u5ea6\uff0c\u6d89\u53ca\u5230\u4e00\u4e9b\u786c\u4ef6\u77e5\u8bc6\uff0c\u5728 ADS \u4e2d\u4e3a\u4e86\u65b9\u4fbf\u8bf4\u660e\u4f1a\u5c06\u5176\u7b80\u5316\uff0c\u6709\u5173 block \u7684\u6982\u5ff5\u5c06\u88ab\u62bd\u8c61\u5316\u4e3a\u201c\u6570\u636e\u5355\u4f4d\u201d\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u5185\u5b58\u7684\u5927\u5c0f\u662f\u6709\u9650\u7684\uff0c\u5212\u5206\u7ed9\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\u4e5f\u5e94\u5f53\u662f\u6709\u9650\u7684\uff0c\u6211\u4eec\u7528 \\(M\\) \u6765\u8bb0\u5b83\uff0c\u5373\u5185\u5b58\u4e2d\u4e00\u6b21\u53ea\u80fd\u5904\u7406 \\(M\\) \u4e2a\u5355\u4f4d\u7684\u6570\u636e\u3002

    \u66f4\u7ec6\u8282\u7684\uff0c\u6211\u4eec\u5e94\u5f53\u66f4\u5177\u7269\u7406\u5927\u5c0f\u6765\u8ba1\u7b97 \\(M\\)\uff0c\u4f8b\u5982\u4e00\u6761\u6570\u636e\u7684\u5927\u5c0f\u662f \\(l \\text{Bytes}\\)\uff0c\u800c\u5185\u5b58\u7684\u5927\u5c0f\u662f \\(m \\text{Bytes}\\)\uff0c\u90a3\u4e48\u4e00\u4e2a\u5185\u5b58\u80fd\u591f\u5bb9\u7eb3\u7684\u6570\u636e\u6570\u91cf\u5e94\u5f53\u4e3a \\(\\lfloor \\frac{m}{l} \\rfloor\\)\u3002

    \u4f46\u662f\u65e2\u7136\u8981\u5f52\u5e76\uff0c\u6211\u4eec\u5c31\u9700\u8981\u5c06 \\(k\\) \u8def\u7684\u6570\u636e\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u6700\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u80af\u5b9a\u5e0c\u671b\u8fd9 \\(k\\) \u8def\u90fd\u80fd\u8bfb\u5165\u5230\u5185\u5b58\u4e2d\uff0c\u4f46\u662f\u663e\u7136\u8fd9\u662f\u4e0d\u5207\u5b9e\u9645\u7684\uff0c\u6211\u4eec\u6700\u591a\u516c\u5e73\u5730\u8bfb\u5165\u6bcf\u4e00\u8def\u7684\u524d \\(\\lfloor \\frac{M}{k} \\rfloor\\) \u4e2a\u6570\u636e\u2014\u2014\u4f46\u8fd9\u5df2\u7ecf\u8db3\u591f\u2014\u2014\u5bf9\u4e8e \\(k\\) \u4e2a\u6709\u5e8f\u5e8f\u5217\u7684\u5408\u5e76\u64cd\u4f5c\uff0c\u5176\u5408\u5e76\u8fc7\u7a0b\u4e2d\u4e5f\u6070\u597d\u53ea\u4e0e\u6700\u9760\u524d\u7684\u3001\u672a\u6392\u5e8f\u7684\u4e00\u90e8\u5206\u6570\u636e\u6709\u5173\u3002

    \u8bf4\u660e

    \u4e4b\u540e\u6240\u63d0\u5230\u7684\uff0c\u6709\u5173\u4e8e\u6392\u5e8f\u6570\u636e\u7684\u201c\u5185\u5b58\u201d\uff0c\u6307\u7684\u90fd\u662f\u5212\u5206\u7ed9\u7b97\u6cd5\uff0c\u7528\u6765\u5b58\u653e\u5f52\u5e76\u6570\u636e\u7684\u5185\u5b58\uff01

    example

    \u4e3e\u4f8b\u6765\u8bf4\uff0c\u5047\u8bbe\u73b0\u5728\u6709\u4e24\u4e2a run\uff0c\u5206\u522b\u4e3a\uff1a

    1. 1 3 5 7 9
    2. 0 2 4 6 8

    \u4f46\u662f\u5185\u5b58\u53ea\u80fd\u653e 4 \u4e2a\u5355\u4f4d\u6570\u636e\uff0c\u6240\u4ee5\u5bf9\u4e8e\u6bcf\u4e2a run \u603b\u662f\u53ea\u6709\u524d 2 \u4e2a\u6570\u636e\u662f\u53ef\u89c1\u7684\u3002\u4f46\u662f\u8fd9\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u53ef\u4ee5\u786e\u5b9a\u8fd9\u4e24\u4e2a run \u5408\u5e76\u7684\u7ed3\u679c\u4e2d\uff0c\u524d\u4e00\u90e8\u5206\u662f 0 1 2\uff0c\u800c\u81f3\u4e8e 2 \u540e\u9762\u6392\u4ec0\u4e48\uff0c\u5219\u8981\u4ece run2 \u4e2d\u53d6\u51fa\u4e4b\u540e\u7684\u6570\u636e\uff0c\u518d\u4e0e run1 \u4f59\u4e0b\u7684 _ 3 \u5408\u5e76\u3002

    \u6613\u9519\u70b9

    \u6ce8\u610f\uff0c\u5f53\u5176\u4e2d\u4e00\u4e2a\u6bb5\u7684 buffer \u7a7a\u4e86\u4ee5\u540e\uff0c\u6211\u4eec\u4e0d\u80fd\u76f4\u63a5\u628a\u5176\u4ed6\u6bb5\u7684 buffer \u76f4\u63a5\u6392\u5e8f\u8fdb\u53bb\uff0c\u800c\u5fc5\u987b\u5148\u586b\u5145\u8fd9\u4e2a\u7a7a buffer \u7684\u5185\u5bb9\uff0c\u518d\u7ee7\u7eed\u6392\u5e8f\u3002

    \u60f3\u8c61\u8fd9\u6837\u4e00\u4e2a\u60c5\u51b5\uff0c\u7a7a buffer \u5c06\u8981\u8f7d\u5165\u7684\u4e0b\u4e00\u6bb5\u6570\u636e\u662f 3 4 5\uff0c\u800c\u53e6\u5916\u4e00\u4e2a buffer \u5269\u4e0b\u7684\u6570\u636e\u662f 7\uff0c\u90a3\u4e48\u663e\u7136\uff0c3 4 5 \u5e94\u8be5\u5148\u4e8e 7 \u88ab\u6392\u5e8f\u3002

    \u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e5f\u6b63\u662f\u5916\u6392\u5e8f\u80fd\u591f\u8fdb\u884c\u7684\u4e00\u4e2a\u91cd\u8981\u57fa\u7840\u3002

    \u5176\u4e2d\u6bd4\u8f83\u7279\u522b\u7684\u6b65\u9aa4\u5c31\u662f\uff0c\u6700\u5f00\u59cb\u7684\u6392\u5e8f\uff0c\u5373\u7b2c\u4e00\u4e2a pass\u3002\u5148\u524d\u6211\u4eec\u5728#\u903b\u8f91\u7ef4\u5ea6\u91cc\u63d0\u5230\u4e86\uff0c\u5916\u6392\u5e8f\u7684\u7b2c\u4e00\u4e2a pass \u4f1a\u76f4\u63a5\u5212\u5206\u597d\u6700\u5c0f\u7684\u5f52\u5e76\u6bb5\uff0c\u800c\u8fd9\u4e2a\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u7684\u5927\u5c0f\u5c31\u662f \\(M\\)\u3002\u7528\u8bed\u8a00\u63cf\u8ff0\uff0c\u5c31\u662f\u6700\u65e9\u7684 run \u7684\u5927\u5c0f\u5c31\u662f\u5e73\u5747\u6bcf\u4e00\u8def\u80fd\u591f\u5728\u5185\u5b58\u4e2d\u5904\u7406\u7684\u6700\u5927\u6570\u636e\u5355\u4f4d\u91cf\u3002

    \u7136\u800c\u95ee\u9898\u51fa\u73b0\u4e86\uff0c\u6839\u636e\u6211\u4e4b\u524d\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0crun \u5e94\u5f53\u662f\u6709\u5e8f\u7684\uff0c\u4f46\u662f\u4ece\u539f\u59cb\u6570\u636e\u91cc\u8bfb\u51fa\u6765\u7684\u201c\u6700\u5c0f\u5f52\u5e76\u6bb5\u201d\u662f\u65e0\u5e8f\u7684\u3002\u4f46\u662f\u5bf9\u4e8e\u6700\u521d\u7684 run\uff0c\u5b83\u5fc5\u7136\u80fd\u591f\u6574\u6bb5\u653e\u5230\u5185\u5b58\u91cc\uff08\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u4e5f\u53ea\u6709\u6700\u521d\u7684 run \u80fd\u591f\u5b8c\u6574\u5730\u653e\u5230\u5185\u5b58\u91cc\uff09\uff0c\u56e0\u6b64\u76f4\u63a5\u5bf9\u5176\u8fdb\u884c\u5185\u6392\u5e8f\u5373\u53ef\u3002

    \u903b\u8f91\u8054\u7cfb

    \u4e2d\u7ee7

    \u4ee5\u4e0a\u5185\u5bb9\u662f\u5bf9\u5916\u6392\u5e8f\u6838\u5fc3\u601d\u60f3\u7684\u4e00\u4e2a\u7b80\u5355\u4ecb\u7ecd\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u4ee5 ADS \u6240\u4ecb\u7ecd\u7684\u5916\u6392\u5e8f\u8303\u5f0f\uff0c\u6765\u4ecb\u7ecd\u4e00\u4e0b\u5177\u4f53\u7684\u8fc7\u7a0b\u548c\u4e00\u4e9b\u6539\u8fdb\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5177\u4f53\u5206\u6790","title":"\u5177\u4f53\u5206\u6790","text":"

    ADS \u4e2d\u76f8\u6bd4\u4e0a\u9762\u4ecb\u7ecd\u7684\u90e8\u5206\uff0c\u53c8\u5f15\u5165\u4e86\u4e00\u4e2a\u53eb tape \u7684\u6982\u5ff5\uff0ctape \u7684\u4e2d\u6587\u662f\u78c1\u5e26\uff0c\u800c\u5728\u8fd9\u4e2a\u6846\u67b6\u4e2d\uff0c\u6211\u66f4\u503e\u5411\u4e8e\u628a\u5b83\u5f53\u4f5c\u4e00\u4e2a\u62bd\u8c61\u7684\u6982\u5ff5\u3002

    \u76f8\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u9645\u8fc7\u7a0b\u4e0e\u4e0a\u9762\u63cf\u8ff0\u7684\u65b9\u6cd5\u53ef\u80fd\u6709\u4e00\u4e9b\u611f\u53d7\u4e0a\u7684\u5dee\u522b\uff0c\u5982\u679c\u53ea\u662f\u4e86\u89e3\u601d\u60f3\u7684\u8bdd\u4e0a\u534a\u90e8\u5206\u5df2\u7ecf\u8db3\u591f\uff08\u5f53\u7136\u540e\u9762\u8fd8\u6709\u4e00\u4e9b\u57fa\u4e8e\u5982\u4e0b\u6a21\u578b\u7684\u4f18\u5316\u8ba8\u8bba\uff09\uff0c\u4f46\u662f\u6bd5\u7adf\u8fd8\u662f\u9762\u5411\u8003\u8bd5\uff0c\u6240\u4ee5\u8fd8\u662f\u9700\u8981\u4ee5 ADS \u8bfe\u4ef6\u7684\u65b9\u6cd5\u518d\u4ecb\u7ecd\u4e00\u6b21\u3002

    \u8bf4\u660e

    \u6211\u4e4b\u540e\u4f1a\u4ee5 run \u4e3a\u5355\u4f4d\uff0c\u6765\u63cf\u8ff0\u5408\u5e76\u8fc7\u7a0b\u3002\u4f46\u662f\u5b9e\u9645\u53d1\u751f\u5728\u8ba1\u7b97\u673a\u91cc\u7684\u6b65\u9aa4\u66f4\u52a0\u590d\u6742\uff1a

    \u9700\u8981\u5148\u5c06\u6bcf\u4e00\u6761 tape \u7684\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\u5185\u5b58\u7684 buffer \u4e2d\uff0c\u7136\u540e\u5229\u7528\u8fd9\u4e9b buffer \u6765\u8fdb\u884c\u6392\u5e8f\uff1b\u5f53\u67d0\u4e2a buffer \u7a7a\u4e86\u4ee5\u540e\u8981\u7acb\u523b\u5c06\u5bf9\u5e94 tape \u7684\u4e0b\u4e00\u90e8\u5206\u6570\u636e\u8bfb\u5165\uff0c\u76f4\u5230\u6ca1\u6709\u6570\u636e\u53ef\u4ee5\u586b\u5145\u4e3a\u6b62\u3002

    \u4e5f\u6b63\u662f#\u7269\u7406\u7ef4\u5ea6\u6240\u8bf4\u7684\u90a3\u4e9b\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","title":"\u6734\u7d20\u8fc7\u7a0b\u5206\u6790","text":"

    \u6211\u4eec\u4ee5 2-way merge \u4e3a\u4f8b\uff0c\u7ed3\u5408 ADS \u8bfe\u4ef6\u4e2d\u7684\u914d\u56fe\u6765\u8bf4\u660e\u3002

    \u51c6\u5907

    \u56fe\u4e2d \\(T_1\\) \u662f\u4e00\u6761 tape \u7684\u7f16\u53f7\uff0c\u6211\u4eec\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a\u5e8f\u5217\u7684\u7269\u7406\u5730\u5740\uff0c\u6216\u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a\u6570\u7ec4\uff0c\u53ea\u4e0d\u8fc7\u5b83\u7684\u5b9e\u9645\u6570\u636e\u662f\u5728\u786c\u76d8\u4e2d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u91cc\u7684 tape \u8868\u793a\u7684\u90fd\u662f\u786c\u76d8\u4e2d\u7684\u6570\u636e\u3002

    \u8fd9\u6761 tape \u4e2d\u6709 13 \u4e2a\u5143\u7d20\uff0c\u6211\u4eec\u8bb0\u5176\u4e3a \\(N = 13\\)\u3002\u800c\u8fd9\u6761\u539f\u59cb\u7684 tape \u88ab\u5212\u5206\u4e3a\u4e86 5 \u6bb5\uff0c\u6bcf\u4e00\u6bb5\u90fd\u6709\u4e0d\u8d85\u8fc7 3 \u4e2a\u5143\u7d20\uff0c\u6b64\u65f6 \\(M = 3\\)\u3002\u5373\u6709 \\(\\lceil \\frac{N}{M} \\rceil = 5\\)\u3002

    Pass 1

    \u73b0\u5728\u6211\u4eec\u8981\u5f00\u59cb merge \u4e86\u3002\u5bf9\u4e8e\u8fd9\u6bb5\u6570\u636e\u6765\u8bf4\uff0c\u8fd9\u662f\u610f\u4e49\u91cd\u5927\u7684\u201c\u4eba\u751f\u7b2c\u4e00\u6b21\u201d\uff0c\u76f8\u6bd4\u4e8e\u5176\u4ed6\u5f52\u5e76\u90fd\u662f\u4ece 2 \u4e2a tape \u5f00\u59cb\u7684 pass\uff0c\u8fd9\u4e00\u6b21\u663e\u5f97\u6709\u4e9b\u7279\u6b8a\u3002

    \u5728\u7b2c\u4e00\u8f6e\u4e2d\uff0c\u9762\u5bf9\u5168\u90e8\u90fd\u662f\u65e0\u5e8f\u7684\u6570\u636e\uff0c\u6211\u4eec\u5c06\u8fd9 \\(\\lceil \\frac{N}{M} \\rceil = 5\\) \u4e2a\u6bb5\u5747\u5206\u5230\u4e24\u6761 tape \u4e0a\uff082-way\uff09\uff0c\u8fd9\u91cc\u7ecf\u5386\u4e24\u4e2a\u6b65\u9aa4\uff1a

    1. \u4f9d\u6b21\u8bfb\u53d6 \\(T_1\\) \u4e2d\u6bcf\u4e00\u6bb5\u6570\u636e\uff08\u521a\u597d\u5360\u6ee1\u5185\u5b58\uff09\uff0c\u5e76\u5bf9\u5b83\u4eec\u8fdb\u884c\u5185\u6392\u5e8f\uff1b
    2. \u5c06\u6392\u5e8f\u5b8c\u7684\u6bb5\uff0c\u8ffd\u52a0\u5199\u5230 \\(T_2\\) \u6216 \\(T_3\\) \u4e2d\uff08\u5177\u4f53\u6bcf\u4e00\u4e2a tape \u5199\u51e0\u6761\uff0c\u4f1a\u6709\u4e13\u95e8\u7b56\u7565\u505a\u8c03\u6574\uff0c\u76ee\u524d\u5148\u5e73\u5206\u7740\u653e\uff09\uff1b

    \u4e8e\u662f\uff0c\\(T_1\\) \u4e2d\u7684\u6570\u636e\u4fbf\u88ab\u8f6c\u79fb\u5230\u4e86 \\(T_2\\) \u548c \\(T_3\\)\u3002\u4e3a\u4e86\u91cd\u590d\u5229\u7528 tape\uff0c\u6b64\u65f6\u7684 \\(T_1\\) \u88ab\u770b\u4f5c\u53ef\u4ee5\u7528\u7684\u7a7a\u78c1\u76d8\u4e86\u3002

    \u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e00\u4e2a pass\u3002

    Pass 2

    \u4e4b\u540e\u7684 pass \u5219\u57fa\u672c\u9075\u5faa\u540c\u6837\u7684\u89c4\u5219\uff0c\u4e0d\u65ad\u53d6\u6bcf\u4e00\u8def\u7684\u7b2c\u4e00\u4e2a run \u5e76 merge\uff0c\u5e76\u4e14\u5c06\u7ed3\u679c\u5199\u5230\u4e24\u4e2a\uff08k \u4e2a\uff09\u95f2\u7f6e\u7684 tape \u4e0a\uff08\u548c\u524d\u9762\u8bf4\u8fc7\u7684\u4e00\u6837\uff0c\u8fd9\u91cc\u6682\u4e14\u5c06\u5206\u914d\u7b56\u7565\u5b9a\u4e3a\u5e73\u5206\u5230\u6bcf\u4e00\u4e2a tape \u4e0a\uff09\u3002

    \u4f8b\u5982\uff0c\u6211\u4eec\u8981\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u6267\u884c\u5f52\u5e76\u64cd\u4f5c\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684\uff0c\u6709 6 \u4e2a\u6570\u636e\u7684 run\uff0c\u5e76\u5199\u5230\u95f2\u7f6e\u7684 \\(T_1\\) \u4e0a\uff1b\u63a5\u4e0b\u6765\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u6b64\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\\(T_1\\)\u3001\\(T_2\\)\u3001\\(T_3\\) \u90fd\u4e0d\u662f\u95f2\u7f6e\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u65b0\u7684 tape\uff0c\u5199\u5230 \\(T_4\\) \u4e0a\u3002

    \u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e8c\u4e2a pass\u3002

    Pass 3

    pass 3 \u548c pass 2 \u7684\u8fc7\u7a0b\u57fa\u672c\u4e00\u81f4\u3002\u73b0\u5728\u7684 tape \u72b6\u6001\u662f \\(\\{T_2, T_3\\}\\) \u95f2\u7f6e\uff0c\u6211\u4eec\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 12 \u4e2a\u5143\u7d20\uff1b\u53d6 \\(T_1\\) \u548c \\(T_4\\) \u7684\u7b2c\u4e8c\u6bb5\uff0c\u5f97\u5230\u4e00\u4e2a\u65b0\u7684 run\uff0c\u5305\u542b 1 \u4e2a\u5143\u7d20\u3002\u8fd9\u4e24\u6bb5\u88ab\u5206\u914d\u5230\u4e24\u6761\u7a7a\u95f2 tape \u4e0a\uff0c\u5373 \\(T_2\\) \u548c \\(T_3\\)\u3002

    \u4e8e\u662f\uff0c\u5b8c\u6210\u4e86\u7b2c\u4e09\u4e2a pass\u3002

    Pass 4

    \u540c\u6837\uff0cpass 4 \u548c\u524d\u9762\u4e24\u4e2a pass \u7684\u8fc7\u7a0b\u4e5f\u662f\u4e00\u81f4\u6027\u7684\uff0c\u4e0d\u505a\u8fc7\u591a\u89e3\u91ca\uff0c\u5bf9\u4e8e\u89c4\u6a21\u66f4\u5927\u7684\u6570\u636e\u4e5f\u662f\u4e00\u6837\uff0c\u9664\u4e86\u7b2c\u4e00\u4e2a pass \u6bd4\u8f83\u7279\u6b8a\uff0c\u5176\u5b83 pass \u90fd\u662f\u4e00\u6837\u7684\u3002\u6700\u7ec8\u5f97\u5230\u53ea\u5269\u4e0b\u4e00\u4e2a tape \u4e2d\u5305\u542b\u552f\u4e00\u7684 run \u65f6\uff0c\u6392\u5e8f\u5c31\u7ed3\u675f\u4e86\u3002

    \u81f3\u6b64\uff0c\u6392\u5e8f\u7ed3\u675f\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u4f18\u5316\u7a7a\u95f4","title":"\u4f18\u5316\u7a7a\u95f4","text":"

    \u53ef\u4ee5\u4f18\u5316\u7684\u90e8\u5206\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\uff1a

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#pass-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"pass \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

    \u4f8b\u5b50\u4e2d\u4e00\u5171\u7ecf\u8fc7\u4e86 4 \u6b21 pass\u3002\u5982\u679c\u6211\u4eec\u8bb0 \\(max(\\#run)\\) \u4e3a \\(\\#run\\) \u6700\u591a\u7684 tape \u7684 \\(\\#run\\)\uff0c\u5219\u6bcf\u4e00\u6b21 pass \u4f1a\u4ee4 \\(max(\\#run)\\) \u7f29\u5c0f\u4e00\u534a\uff0c\u76f4\u5230 \\(max(\\#run)\\) \u53d8\u4e3a 1\uff0c\u4e14\u53ea\u6709\u5b83\u4e00\u6761 tape \u8fd8\u6709\u6570\u636e\uff0c\u6807\u5fd7\u7740\u6392\u5e8f\u7ed3\u675f\u3002

    \u5982\u679c\u4e13\u6ce8\u4e8e \\(\\#run\\) \u7684\u53d8\u5316\uff0c\u90a3\u4e48\u4e0a\u9762\u7684\u6a21\u62df\u6b65\u9aa4\u5927\u81f4\u662f\u8fd9\u4e48\u4e00\u4e2a\u8fc7\u7a0b\uff1a

    Pass 1

    \u539f\u5148 \\(T_1\\) \u4e0a \\(\\#run = 5\\)\uff0c\u73b0\u5c06\u5b83\u5206\u914d\u5230\u4e24\u6761 tape \u4e0a\uff0c\u4e8e\u662f\u6709\uff1a

    Pass 2

    \u4f9d\u6b21\u53d6 \\(T_2\\) \u548c \\(T_3\\) \u7684\u7b2c\u4e00\u6bb5\uff0c\u5f52\u5e76\u5f97\u5230\u65b0\u7684 run\uff0c\u5747\u5206\u5230\u53e6\u5916\u4e24\u6761 tape \u4e0a\uff08\u672a\u4f18\u5316\u7684\u505a\u6cd5\uff0c\u4f18\u5316\u505a\u6cd5\u53c2\u8003#tape-\u4f18\u5316\uff09\uff0c\u4e8e\u662f\u6709\uff1a

    \u7ee7\u7eed\u53d6\uff0c\u5373\uff1a

    \\(T_3\\) \u4e0a\u5df2\u7ecf\u6ca1\u6709\u4e86\uff0c\u4f46\u662f \\(T_2\\) \u8fd8\u6ca1\u53d6\u5b8c\uff0c\u6240\u4ee5\u53ea\u4ece \\(T_2\\) \u62ff\uff1a

    \u6a21\u62df\u5230\u4ece\u8fd9\u91cc\u5176\u5b9e\u5df2\u7ecf\u53ef\u4ee5\u770b\u51fa\u6765\u4e86\uff0c\u5bf9\u4e8e 2-way merge \u6765\u8bf4\uff0c\u6392\u9664\u672b\u6bb5\u60c5\u51b5\uff0c\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u57fa\u672c\u4e0a\u6bcf\u6b21\u90fd\u662f\u4ece 2 \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{2}\\)\u3002

    \u90a3\u4e48\uff0c\u5bf9\u4e8e \\(k\\)-way merge \u6765\u8bf4\uff0c\u5c31\u662f\u4ece\u7b2c\u4e8c\u4e2a pass \u5f00\u59cb\uff0c\u6bcf\u6b21\u4ece \\(k\\) \u8def\u4e2d\u5404\u53d6 1 \u4e2a run\uff0c\u5e76\u5408\u5e76\u4e3a 1 \u4e2a run\uff0c\u6bcf\u4e00\u4e2a pass \u4f1a\u8ba9 \\(total(\\#run)\\) \u7f29\u5c0f\u4e3a\u539f\u6765\u7684 \\(\\frac{1}{k}\\)\u3002

    \u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u5f52\u7eb3\u5f97\u5230\u5982\u4e0b\u8ba1\u7b97\u5f0f\uff1a

    \\[ \\begin{aligned} \\#pass &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{(\\#run)}\\rceil }_{\\text{rest passes}} \\\\ &= \\underbrace{ 1 }_{\\text{pass 1}} + \\underbrace{ \\lceil \\log_{k}{ \\lceil \\frac{N}{M} \\rceil }\\rceil }_{\\text{rest passes}} \\end{aligned} \\]

    \u5176\u4e2d\uff0c\\(k\\) \u8868\u793a\u5f52\u5e76\u8def\u6570\uff0c\\(N\\) \u8868\u793a\u6570\u636e\u91cf\uff0c\\(M\\) \u8868\u793a\u5185\u5b58\u4e00\u6b21\u80fd\u5904\u7406\u7684\u6570\u636e\u91cf\u3002

    \u90a3\u4e48\uff0c\u51cf\u5c11 pass \u7684\u65b9\u6cd5\u4e5f\u5f88\u76f4\u89c2\u4e86\uff0c\u53ea\u9700\u8981\u589e\u52a0 \\(k\\) \u5373\u53ef\uff0c\u5373\u91c7\u53d6\u66f4\u591a\u8def\u7684\u5f52\u5e76\uff0c\u5c31\u80fd\u51cf\u5c11 pass\u3002

    \u7136\u800c\uff0c\u5176\u4e2d\u5fc5\u7136\u5b58\u5728\u4e00\u4e2a trade-off \u7684\u5173\u7cfb\uff0c\u867d\u7136 \\(k\\) \u589e\u52a0\u53ef\u4ee5\u51cf\u5c11 \\(\\#pass\\)\uff0c\u4f46\u662f\u5728\u63a5\u4e0b\u6765\u4e00\u8282\u4e2d\u6211\u4eec\u4f1a\u77e5\u9053\uff0c\\(k\\) \u8fc7\u5927\u4f1a\u5bfc\u81f4 tape \u9700\u6c42\u91cf\u589e\u52a0\uff0c\u6b64\u5916\uff0c\\(k\\) \u7684\u589e\u52a0\u4e5f\u4f1a\u5bfc\u81f4\u5185\u6392\u5e8f\u7684\u590d\u6742\u5ea6\u589e\u52a0\uff0c\u4e5f\u4f1a\u589e\u52a0 pass \u5185\u7684 seek \u6b21\u6570\u3002

    \u5f53\u7136\uff0c\u9664\u4e86\u66b4\u529b\u7684\u589e\u52a0 \\(k\\) \u4ee5\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4f7f\u7528\u66ff\u6362\u9009\u62e9(Replacement Selection)\u7b97\u6cd5\uff0c\u6765\u751f\u6210\u6bd4 \\(M\\) \u5927\u7684\u521d\u59cb run\uff0c\u4ee5\u76f8\u5bf9\u51cf\u5c11 pass \u6570\u91cf\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","title":"\u66ff\u6362\u9009\u62e9\u7b97\u6cd5","text":"

    \u66ff\u6362\u9009\u62e9(Replacement Selection) \u5728 hw15 \u4e2d\u88ab\u5e03\u7f6e\u4e3a\u7f16\u7a0b\u9898\uff0c\u6240\u4ee5\u5176\u5b9e\u73b0\u8fc7\u7a0b\u53ef\u4ee5\u7ed3\u5408\u90a3\u9053\u9898\u76ee\u6765\u5b66\u4e60\u3002

    Replacement Selection @ PTA

    When the input is much too large to fit into memory, we have to do external sorting instead of internal sorting. One of the key steps in external sorting is to generate sets of sorted records (also called runs) with limited internal memory. The simplest method is to read as many records as possible into the memory, and sort them internally, then write the resulting run back to some tape. The size of each run is the same as the capacity of the internal memory.

    Replacement Selection sorting algorithm was described in 1965 by Donald Knuth. Notice that as soon as the first record is written to an output tape, the memory it used becomes available for another record. Assume that we are sorting in ascending order, if the next record is not smaller than the record we have just output, then it can be included in the run.

    For example, suppose that we have a set of input { 81, 94, 11, 96, 12, 99, 35 }, and our memory can sort 3 records only. By the simplest method we will obtain three runs: { 11, 81, 94 }, { 12, 96, 99 } and { 35 }. According to the replacement selection algorithm, we would read and sort the first 3 records { 81, 94, 11 } and output 11 as the smallest one. Then one space is available so 96 is read in and will join the first run since it is larger than 11. Now we have { 81, 94, 96 }. After 81 is out, 12 comes in but it must belong to the next run since it is smaller than 81. Hence we have { 94, 96, 12 } where 12 will stay since it belongs to the next run. When 94 is out and 99 is in, since 99 is larger than 94, it must belong to the first run. Eventually we will obtain two runs: the first one contains { 11, 81, 94, 96, 99 } and the second one contains { 12, 35 }.

    Your job is to implement this replacement selection algorithm.

    \u5229\u7528\u66ff\u6362\u9009\u62e9\u7b56\u7565\u4ee5\u540e\uff0c\u6bcf\u4e00\u6b21\u751f\u6210\u7684 run \u4e00\u5b9a\u4e0d\u5c0f\u4e8e \\(M\\)\uff08\u672b\u7aef\u4f59\u6570\u9664\u5916\uff09\uff0c\u4e8e\u662f\u76f8\u5bf9\u6765\u8bf4 \\(\\#pass\\) \u5c31\u4f1a\u51cf\u5c11\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#tape-\u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","title":"tape \u6570\u91cf\u5206\u6790\u4e0e\u4f18\u5316","text":"

    \u5982\u679c\u4f7f\u7528#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u7684\u65b9\u6cd5\uff0c\u90a3\u4e48\u6211\u4eec\u4f7f\u7528 \\(k\\)-way merge \u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape\u3002

    \u8fd9\u5176\u5b9e\u5f88\u597d\u7406\u89e3\uff0c\u6211\u4eec\u6bcf\u4e00\u4e2a pass \u9700\u8981 \\(k\\) \u4e2a tape \u6765\u5b58\u653e\u6bcf\u4e00\u8def\u7684\u5e8f\u5217\uff0c\u800c\u5176\u7ed3\u679c\u8981\u5e73\u5206\u653e\u590d\u5236\u5230\u4e0b\u4e00\u4e2a pass \u6240\u9700\u8981\u7684 \\(k\\) \u4e2a pass \u4e2d\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 \\(2k\\) \u4e2a tape \u8f6e\u6362\u7740\u6765\u5b58\u50a8\u6570\u636e\u3002

    \u800c\u8fd9\u4e0d\u5229\u4e8e\u6211\u4eec\u901a\u8fc7\u589e\u52a0 \\(k\\) \u6765\u51cf\u5c11 \\(\\#pass\\)\uff0c\u56e0\u6b64\u6211\u4eec\u8003\u8651\u67d0\u79cd\u7b56\u7565\u6765\u4f18\u5316 tape \u7684\u4f7f\u7528\u3002

    \u5728#\u6734\u7d20\u8fc7\u7a0b\u5206\u6790\u4e2d\u6211\u591a\u6b21\u6697\u793a\uff0c\u4e4b\u540e\u4f1a\u5bf9\u300c\u5c06\u5f52\u5e76\u540e\u7684 run \u5e73\u5206\u5230\u5404 tape\u300d\u8fd9\u4ef6\u4e8b\u505a\u4f18\u5316\u3002

    \u6211\u4eec\u53ef\u4ee5\u8003\u8651\uff0c\u4e0d\u5e73\u5747\u7684\u5c06\u5f52\u5e76\u540e\u7684 run \u5206\u914d\u5230\u5404\u4e2a tape \u4e0a\uff0c\u5373\u603b\u6709\u4e00\u4e9b tape \u6bd4\u522b\u7684 tape \u591a\u4e00\u4e9b run\u3002\u867d\u7136\u5728\u5e73\u5206\u7684\u7b56\u7565\u4e2d\uff0c\u4e5f\u6709\u53ef\u80fd\u4f1a\u6709\u591a\u51fa\u6765\u7684 run\uff0c\u4f46\u662f\u53ea\u4f1a\u591a\u4e00\u4e2a\uff08\u4e5f\u5c31\u662f\u5c06 \\(x \\mod k\\) \u7684\u4f59\u6570\u5206\u914d\u5230\u5176\u4e2d\u51e0\u4e2a tape \u4e0a\uff09\u3002\u6b64\u65f6\u8fd9\u4e9b\u591a\u51fa\u6765\u7684 run \u53ef\u80fd\u5c31\u662f\u5355\u7eaf\u7684\u4ece\u4e00\u4e2a tape \u522b\u590d\u5236\u5230\u53e6\u5916\u4e00\u4e2a tape \u4e0a\uff0c\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u6ca1\u5fc5\u8981\u7684\u64cd\u4f5c\uff0c\u4e3a\u4ec0\u4e48\u4e0d\u76f4\u63a5\u7559\u4e0b\u5b83\uff0c\u5c06\u5f53\u524d tape \u62ff\u5230\u4e0b\u4e00\u8f6e\u7528\u5462\uff1f

    \u4f46\u662f\u7531\u4e8e\u5e73\u5206\u7b56\u7565\u4e0b\uff0c\u8fd9\u4e2a\u60c5\u51b5\u7684\u51fa\u73b0\u5e76\u4e0d\u53ef\u63a7\uff0c\u800c\u4e14\u603b\u662f\u4f1a\u5f15\u8d77\u60ac\u6b8a\u7684 tape \u95f4\u7684\u6570\u91cf\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u80fd\u4e0d\u80fd\u4e3b\u52a8\u5229\u7528\u8fd9\u4e2a\u6027\u8d28\u3002

    \u5b9e\u5728\u60f3\u4e0d\u5230\u600e\u4e48\u8fc7\u5ea6\u4e86\uff0c\u800c\u4e14\u6025\u6025\u6025\uff0c\u6240\u4ee5\u76f4\u63a5\u4e0a\u7ed3\u8bba\u3002

    \u6211\u4eec\u6309\u7167 Fibonacci \u6570\u5217\u7684\u9879\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\)\uff0c\u6b64\u65f6\u6bcf\u4e00\u4e2a pass \u53ea\u9700\u8981\u4e00\u4e2a\u6709\u4e00\u4e2a\u7a7a\u95f2\u7684 tape \u5373\u53ef\u3002

    example

    \\[ \\text{Fibonacci}: {1,1,2,3,5,8,13,21,...} \\]

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u4e24\u4e2a tape\uff0c\u5206\u522b\u6709 23 \u4e2a run \u548c 13 \u4e2a run\uff0c\u5219\uff1a

    \\(T_1\\) \\(T_2\\) \\(T_3\\) \u8bf4\u660e 21 13 - \u521d\u59cb\u60c5\u51b5 8 - 13 \\(T_1\\) \u7684\u524d 13 \u4e2a\u4e0e \\(T_2\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_3\\) - 8 5 \\(T_3\\) \u7684\u524d 8 \u4e2a\u4e0e \\(T_1\\) \u5f52\u5e76\uff0c\u7ed3\u679c\u5199\u5165 \\(T_2\\) 5 3 - \u7565 2 - 3 \u7565 - 2 1 \u7565 1 1 - \u7565 0 - 1 \u7565

    \u4f7f\u7528 Fibonacci \u6211\u4eec\u603b\u53ef\u4ee5\u6eda\u52a8\u7740\u5c06 \\(\\#run\\) \u7684\u89c4\u6a21\u7f29\u5c0f\u3002

    k-way merge with k-order Fibonacci Sequence

    \u5bf9\u4e8e \\(k\\)-way merge\uff0c\u6211\u4eec\u53ea\u9700\u8981\u6784\u9020 k \u9636 Fibonacci \u6570\u5217\uff0c\u7136\u540e\u6309\u7167\u8fd9\u4e2a\u6570\u5217\u6765\u5206\u914d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u5373\u53ef\u3002

    k-order Fibonacci Sequence

    \u7ed9\u51fa k \u9636 Fibonacci \u6570\u5217\uff08\u4e0e PPT \u7565\u6709\u4e0d\u540c\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\u4e0b\u6807\u4ece\u8c01\u5f00\u59cb\uff0c\u65e0\u4f24\u5927\u96c5\uff09\uff1a

    \\[ \\left\\{ \\begin{aligned} F^k_1 &= 1 \\\\ F^k_2 &= 1 \\\\ & \\vdots\\\\ F^k_n &= F^k_{n-1} + F^k_{n-2} + \\cdots + F^k_{n-k} \\quad (n > k) \\end{aligned} \\right. \\]

    \u8fd9\u4e2a\u7ed3\u8bba\u770b\u8d77\u6765\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u600e\u4e48\u64cd\u4f5c\u7684\u5462\uff1fPPT \u538b\u6839\u6ca1\u8bb2\uff0c\u56e0\u6b64\uff0c\u6211\u5728\u8be2\u95ee ch \u8001\u5e08\u4ee5\u540e\uff0c\u5199\u4e0b\u4e86\u8fd9\u4e2a\u90e8\u5206\uff0c\u65e8\u5728\u8865\u5145 \\(k\\)-way merge \u4f7f\u7528 k \u9636 Fibonacci \u4f18\u5316\u7684\u65b9\u6cd5\u3002

    \u9996\u5148\uff0c\u505a\u4e00\u4e9b\u5f3a\u8c03\uff1a

    1. \u8be5\u65b9\u6cd5\u9648\u8ff0\u8fc7\u7a0b\u4e2d\uff0ck \u8def\u59cb\u7ec8\u76f4\u63a5\u5408\u5e76\u6210\u4e00\u8def\uff08\u5343\u4e07\u4e0d\u8981\u7528\u201citerative\u201d\u7684\u601d\u8def\u6765\u8003\u8651\uff0c\u5c31\u7b97 iterative\uff0c\u8fed\u4ee3\u5b8c\u4e86\u4e5f\u8fd8\u662f k \u8def\u5f52\u4e3a 1 \u8def\uff09\uff1b
    2. \u6211\u4eec\u7684\u76ee\u7684\u662f\u4f18\u5316\u6bcf\u4e00\u4e2a pass \u4e2d\u6bcf\u4e2a tape \u7684 \\(\\#run\\) \u4e0d\u4e00\u6837\u5e26\u6765\u7684\u6027\u80fd\u95ee\u9898\uff08\u4f8b\u5982\u5c34\u5c2c\u7684 \\(n\\) \u548c \\(n+1\\) \u5f52\uff0c\u4e0b\u4e00\u4e2a pass \u5c31\u5f97 \\(1\\) \u548c \\(n\\) \u5f52\u4e86\uff09\uff1b

    \u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a pass\uff0c\u6709 \\(k\\) \u4e2a tape\uff0c\u6211\u4eec\u8bb0\u6bcf\u4e00\u4e2a tape \u7684 \\(\\#run\\) \u4e3a \\(r_i\\)\uff0c\u5219\u6709\uff1a

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6bcf\u4e2a pass \u6700\u5927\u548c\u6700\u5c0f\u7684 \\(\\#run\\) \u5206\u522b\u6709 k \u9636 Fibonacci \u4e2d\u76f8\u90bb\u7684\u4e24\u9879\u3002

    \u8fd9\u91cc\u5206\u5f00\u7528 i \u548c j \u662f\u60f3\u8868\u8fbe\u8fd9\u4e2a\u5339\u914d\u5173\u7cfb\u4e0d\u91cd\u8981\uff0c\u91cd\u8981\u7684\u662f\u6700\u5927\u503c\u6700\u5c0f\u503c\u7531 Fibonacci \u76f8\u90bb\u9879\u6240\u786e\u5b9a\u3002

    \u90a3\u4e48\u5939\u5728\u6700\u5927\u548c\u6700\u5c0f\u7684\u4e2d\u95f4\u7684\u5176\u4ed6 \\(\\#run\\) \u8981\u5982\u4f55\u786e\u5b9a\u5462\uff1f\u9996\u5148\u6211\u4eec\u8fdb\u884c\u4e00\u6bb5\u63a8\u5bfc\uff1a

    \u5047\u8bbe \\(\\{r_i\\}\\) \u7ecf\u8fc7\u6392\u5e8f\uff0c\u5e76\u4e14\u521a\u597d\u80fd\u51d1\u4e0a\u6211\u4eec\u6240\u9700\u8981\u7684\u6570\u91cf\uff0c\u6709\uff1a

    \\[ r_k > r_{k-1} > ... > r_{2} > r_{1} \\text{where } r_k = F^k_j \\text{ and } r_1 = F^k_{j-1} \\]

    \u5728\u8fd9\u4e00\u4e2a pass \u4e2d\uff0c\u6211\u4eec\u5c06\u6240\u6709 tape \u7684\u524d \\(r1\\) \u4e2a run \u62ff\u51fa\u6765 merge\uff0c\u8fd9\u6837\uff0c\u9664\u4e86 \\(r_1\\) \u8fd9\u4e2a tape\uff0c\u5176\u4ed6 tape \u7684 \\(\\#run\\) \u90fd\u53d8\u4e3a \\(r_i-r_1\\)\u3002\u6b64\u65f6\u6709\u4e0d\u7b49\u5173\u7cfb\uff1a

    \\[ r_1 > r_k - r_1 > r_{k-1} - r_1 > ... > r_{2} - r_1 \\]

    \u8fd9\u91cc\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f \\(r_1 > r_k - r_1\\)\uff1a

    proof of the relation \\[ \\begin{aligned} &\\begin{aligned} \\because r_1 &= F^k_{j-1} \\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} + F^k_{j-k-1} \\end{aligned} & (1)\\\\ &\\begin{aligned} \\text{and } r_k &= F^k_{j} \\\\ &= F^k_{j-1} + F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (2)\\\\ &\\begin{aligned} \\therefore r_k - r_1 &= F^k_{j} - F^k_{j-1} \\quad \\text{ i.e. } (2) - (1)\\\\ &= F^k_{j-2} + \\cdots + F^k_{j-k} \\end{aligned} & (3)\\\\ &\\begin{aligned} \\therefore r_1 - (r_k - r_1) &= F^k_{j-k-1} > 0 \\quad \\text{ i.e. } (1) - (3) \\\\ \\end{aligned} \\\\ &\\begin{aligned} \\therefore r_1 > r_k - r_1 \\end{aligned} \\\\ \\end{aligned} \\]

    \u5982\u679c\u6211\u4eec\u5c06\u73b0\u5728\u8fd9\u4e2a\u6392\u5e8f\u540e\u7684\u6570\u5217\u8bb0\u4e3a \\(\\{r_i'\\}\\)\uff0c\u5219\u6709\uff1a

    \\[ \\left\\{ \\begin{aligned} r_1' &= r_2 - r_1 \\\\ r_2' &= r_3 - r_1 \\\\ \\vdots \\\\ r_{k-1}' &= r_k - r_1 \\\\ r_k' &= r_1 \\end{aligned} \\right. \\]

    \u6b64\u65f6\u6839\u636e\u6211\u4eec\u5173\u4e8e\u6700\u5927\u6700\u5c0f\u503c\u7684\u9648\u8ff0\uff0c\u53c8\u6709\uff1a

    \\[ \\left\\{ \\begin{aligned} r_1' &= F^k_{j-2} \\\\ r_k' &= F^k_{j-1} \\end{aligned} \\right. \\]

    \u4e8e\u662f\u53ef\u4ee5\u63a8\u5f97\uff1a\\(r_2 = r_1 + F^k_{j-2} = F^k_{j-1} + F^k_{j-2}\\)\u3002\u5173\u4e8e \\(r_3, r_4\\)\uff0c\u4e5f\u662f\u4e00\u6837\u7684\u529e\u6cd5\uff0c\u5c06 \\(r_2\\) \u7684\u7ed3\u8bba\u8fc1\u79fb\u5230 \\(r_2'\\)\uff0c\u518d\u56de\u8fc7\u5934\u5f97\u5230 \\(r_3 = r_1 + r_2'= F^k_{j-1} + F^k_{j-2} + F^k_{j-3}\\)\uff0c\u4ee5\u6b64\u7c7b\u63a8\uff0c\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7ed3\u8bba\uff1a

    \\[ \\left\\{ \\begin{aligned} r_1 &= F^k_{j-1} \\\\ r_2 &= F^k_{j-1} + F^k_{j-2} \\\\ r_3 &= F^k_{j-1} + F^k_{j-2} + F^k_{j-3} \\\\ \\vdots \\\\ r_k &= F^k_{j-1} + F^k_{j-2} + ... + F^k_{j-k} = F^k_{j} \\end{aligned} \\right. \\]

    \u601d\u8003\u9898

    \u53ef\u4ee5\u611f\u53d7\u601d\u8003\u4e00\u4e0b\u8fd9\u4e2a\u7279\u6027\uff08\u8003\u8651 2-way \u5373\u53ef\uff09\u4e0e\u9ec4\u91d1\u6bd4\u4f8b\u7684\u5173\u7cfb\uff01

    hint: \u5982\u4f55\u7406\u89e3 \\(\\frac{a_n}{a_{n-1}} \\approx \\frac{a_{n-1}}{a_n - a_{n-1}}\\) \u4e0e\u8fd9\u4e2a\u6027\u8d28\u7684\u5173\u7cfb\uff1f

    \u5f53\u7136\uff0c\u521a\u597d\u80fd\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\u81ea\u7136\u662f\u5c11\u6570\uff0c\u5bf9\u4e8e\u65e0\u6cd5\u51d1\u4e0a Fibonacci \u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u591a\u4f59\u7684\u90e8\u5206\u5747\u5300\u7684\u5206\u5230\u8f83\u591a\u82e5\u5e72 tape \u4e0a\uff0c\u4ee5\u76f8\u5bf9\u7684\u5229\u7528 Fibonacci \u6570\u5217\u7684\u6027\u8d28\uff08\u8054\u7cfb\u601d\u8003\u9898\u7406\u89e3\uff09\u3002

    \u6ce8\u610f

    \u6216\u8bb8\u4f60\u5df2\u7ecf\u5f00\u59cb\u4ea7\u751f\u7591\u95ee\u4e86\uff0c\u5982\u679c\u8fd9\u6837\u6765\u505a\uff0c\u524d\u9762\u5bf9 \\(\\#pass\\) \u7684\u5206\u6790\u662f\u4e0d\u662f\u4e0d\u6210\u7acb\u4e86\u5462\uff1f

    \u6211\u60f3\u5e94\u8be5\u786e\u5b9e\u4e0d\u518d\u5b8c\u5168\u4e00\u6837\u4e86\uff0c\u4f46\u662f\u5e76\u4e0d\u5f71\u54cd\u6211\u4eec\u4e4b\u540e\u5229\u7528\u90a3\u4e2a\u7ed3\u8bba\u505a\u5b9a\u6027\u5206\u6790\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053\uff0c\u91c7\u53d6 Fibonacci \u7b56\u7565\u6765\u4f18\u5316\u4f1a\u5bfc\u81f4 \\(\\#pass\\) \u589e\u591a\u5373\u53ef\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#k-\u8def\u5185\u6392\u5e8f\u4f18\u5316","title":"k \u8def\u5185\u6392\u5e8f\u4f18\u5316","text":"

    \u968f\u7740 \\(k\\) \u7684\u589e\u52a0\uff0c\u6211\u4eec\u4e0d\u80fd\u518d\u50cf\u4e24\u8def\u5f52\u5e76\u90a3\u6837\u76f4\u63a5\u8f93\u51fa\u8f83\u5c0f\u7684\u90a3\u4e2a\uff0c\u800c\u662f\u9700\u8981\u7ef4\u62a4\u6570\u636e\u7ed3\u6784\u6765\u603b\u662f\u8f93\u51fa k \u4e2a\u4e2d\u6700\u5c0f\u7684\u90a3\u4e2a\u2014\u2014\u6211\u4eec\u7528\u5806\u6765\u7ef4\u62a4\u6bcf\u4e00\u4e2a run \u5728\u5185\u5b58\u4e2d\u7684\u6570\u636e\u7684\u961f\u9996\u5143\u7d20\uff08\u540c\u65f6\u4e5f\u662f\u6700\u5c0f\u5143\u7d20\uff09\uff0c\u6bcf\u5f53\u5806\u9876\u5143\u7d20\u88ab\u8f93\u51fa\uff0c\u5c31\u9700\u8981\u4ece\u5bf9\u5e94\u7684 run \u4e2d\u8bfb\u5165\u4e0b\u4e00\u4e2a\u5143\u7d20\u3002

    \u6ce8\u610f

    \u9700\u8981\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u5806\u662f\u989d\u5916\u7ef4\u62a4\u7684\uff0c\u800c\u6bcf\u6b21\u63a8\u5165\u5806\u4e2d\u7684\u5143\u7d20\u90fd\u662f\u4ece\u5bf9\u5e94\u7684 run \u7684 buffer \u4e2d\u62ff\u7684\uff0c\u800c\u4e0d\u662f\u6bcf\u6b21\u90fd\u4ece\u786c\u76d8\u4e2d\u62ff\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u970d\u592b\u66fc\u6811\u4f18\u5316","title":"\u970d\u592b\u66fc\u6811\u4f18\u5316","text":"

    \u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4e0d\u4f7f\u7528\u76f4\u63a5 \\(k\\) \u8def\u5408\u5e76\uff0c\u800c\u662f\u91c7\u7528\u4e24\u4e24\u5f52\u5e76\u7684\u65b9\u6cd5\uff0c\u4e5f\u5c31\u662f wiki \u4e2d\u63d0\u5230\u7684\u8fed\u4ee3\u5f52\u5e76\uff08\u6ce8\u610f\uff0c\u8be5\u6761\u76ee\u4e2d\u63d0\u5230\u7684\u5f52\u5e76\u5e76\u6ca1\u6709\u8bf4\u660e\u662f\u5916\u6392\u5e8f\u80cc\u666f\uff0c\u4f46\u662f\u53ef\u4ee5\u8fc1\u79fb\uff09\u3002

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u82e5\u5e72\u4e2a run\uff0c\u5e76\u4e14\u6211\u4eec\u5c06\u8981\u8fdb\u884c\u4e24\u4e24\u5f52\u5e76\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u6bcf\u4e00\u4e2a run \u7684\u5927\u5c0f\uff0c\u6839\u636e\u970d\u592b\u66fc\u6811\u7684\u89c4\u5f8b\u6765\u8fdb\u884c\u5f52\u5e76\uff0c\u5373\u603b\u662f\u9009\u6700\u5c0f\u7684\u4e24\u4e2a\u8fdb\u884c\u5f52\u5e76\u3002

    "},{"location":"cour_note/D2CX_AdvancedDataStructure/Lec15/#\u5e76\u884c\u4f18\u5316","title":"\u5e76\u884c\u4f18\u5316","text":"

    \u8fd9\u91cc\u5e76\u884c\u7684\u76ee\u6807\u4e3b\u8981\u662f\u4f7f\u7b97\u6cd5\u652f\u6301\u6570\u636e\u7684\u8bfb-\u7528-\u5199\u7684\u6d41\u6c34\u7ebf\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u8981\u60f3\u529e\u6cd5\u8ba9\u8bfb\u4e0d\u963b\u585e\u7528\uff0c\u7528\u4e0d\u963b\u585e\u5199\u3002

    \u5148\u524d\u6211\u4eec\u9700\u8981\u5148\u8bfb\u5165\u6570\u636e\uff0c\u7136\u540e\u8fdb\u884c\u6392\u5e8f\uff0c\u6392\u5e8f\u5b8c\u4e86\u518d\u5199\u5165\u78c1\u76d8\uff0c\u817e\u51fa\u5185\u5b58\u7a7a\u95f4\u4ee5\u4f9b\u4e0b\u4e00\u6b21\u8bfb\u5165\u3002\u90a3\u4e3a\u4ec0\u4e48\u4f1a\u963b\u585e\u5462\uff1f\u56e0\u4e3a\u6211\u4eec\u6ca1\u6cd5\u8bfb\u4e00\u4e2a\u6b63\u5728\u5199\u7684\u6570\u636e\u5757\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e0d\u540c\u7684\u6570\u636e\u5757\u8bfb\u548c\u5199\u5c31\u884c\u4e86\u3002\u5bf9\u4e8e \\(k\\)-way \u4e2d\u7684\u6bcf\u4e00\u8def\uff0c\u6211\u4eec\u90fd\u63d0\u4f9b\u4e24\u4e2a input buffer\uff0c\u4e00\u4e2a\u7528\u4e8e\u5199\uff0c\u4e00\u4e2a\u7528\u4e8e\u6392\u5e8f\u3002\u5f53\u6392\u5e8f buffer \u7a7a\u4e86\u7684\u65f6\u5019\uff0c\u5c31\u548c\u8bfb\u6ee1\u4e86\u7684 input buffer \u4ea4\u6362\uff0c\u65e0\u7f1d\u8854\u63a5\u7ee7\u7eed\u8f93\u51fa\u3002\u4e8e\u6b64\u540c\u65f6\uff0c\u521a\u521a\u88ab\u4ea4\u6362\u8fc7\u53bb\u7684 buffer \u5219\u53ef\u7528\u4e8e\u7ee7\u7eed\u8bfb\u5165\u3002

    \u56e0\u6b64\uff0c\u5982\u679c\u6211\u4eec\u6267\u884c direct \\(k\\)-way merge\uff0c\u5c31\u9700\u8981 \\(2k\\) \u4e2a input buffer\uff08\u8fd9\u91cc\u5f3a\u8c03 direct \u662f\u56e0\u4e3a\uff0c\u5982\u679c\u4f7f\u7528 iterative \u7684\u8bdd\uff0cinput buffer \u53ea\u9700\u8981 4 \u4e2a\uff09\u3002

    \u800c\u5bf9\u4e8e\u8f93\u51fa\uff0c\u6211\u4eec\u53ea\u9700\u8981 2 \u4e2a output buffer \u4ea4\u66ff\u4f7f\u7528\u5373\u53ef\uff0c\u4e00\u4e2a\u7528\u6765\u63a5\u6536\u6765\u81ea\u6392\u5e8f\u7b97\u6cd5\u7684\u8f93\u51fa\uff0c\u4e00\u4e2a\u7528\u6765\u5c06\u6570\u636e\u5199\u5165\u78c1\u76d8\u3002

    \u4f46\u662f\uff0c\u5e76\u884c\u4f18\u5316\u7684\u7f3a\u70b9\u5c31\u662f\u5360\u636e\u4e86\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u2014\u2014\u539f\u5148 \\(k + 1\\) \u4e2a buffer \u5e73\u5206\u7684\u7528\u4e8e\u5904\u7406\u6570\u636e\u7684\u5185\u5b58\uff0c\u73b0\u5728\u9700\u8981\u88ab \\(2k + 2\\) \u4e2a buffer \u5e73\u5206\uff0c\u6240\u4ee5\u6bcf\u4e00\u4e2a buffer \u7684\u5927\u5c0f\u4f1a\u53d8\u5c0f\u3002\u8fdb\u800c\u5bfc\u81f4\u6bcf\u4e00\u6b21\u4ece disk \u4e2d\u8bfb\u53d6\u7684\u6570\u636e\u53d8\u5c11\uff0c\u6240\u4ee5\u8981\u8bfb\u5b8c\u6570\u636e\u6240\u9700\u8981\u7684\u8bfb\u53d6\u6b21\u6570\u5c31\u589e\u52a0\uff0c\u5373 seek \u6b21\u6570\u589e\u52a0\u3002

    "},{"location":"cour_note/D2CX_ComputerOrganization/","title":"\ud83d\udd2e \u8ba1\u7b97\u673a\u7ec4\u6210 | Computer Organization","text":"

    \u7ea6 57 \u4e2a\u5b57

    \u7531\u4e8e\u7b14\u8bb0\u592a\u6d6a\u8d39\u65f6\u95f4\u4e86\uff0c\u6211\u5b66\u4e60\u8ba1\u7ec4\u4f7f\u7528\u7684\u662f xxjj \u7684\u7b14\u8bb0\uff1a

    https://xuan-insr.github.io/computer_organization/1_prelude/

    \u987a\u4fbf\u61d2\u5f97\u81ea\u5df1\u91cd\u65b0\u8c03\u6574\uff0c\u76f4\u63a5\u5728\u4ed6\u7684\u7b14\u8bb0\u4e0a\u4fee\u6539\u7136\u540e PR \u4e86\u3002

    "},{"location":"cour_note/D2HJ_StanfordWriting/","title":"\ud83d\udd2e \u79d1\u5b66\u6587\u7ae0\u5199\u4f5c | Writing in the Sciences","text":"

    \u7ea6 1331 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    \u5410\u69fd

    \u4e0d\u662f\u6211\u8bf4\uff0c\u6211\u611f\u89c9\u8fd9\u8bfe\u7684\u7ec4\u7ec7\u6ca1\u6709\u5f88\u6e05\u6670\u7684\u903b\u8f91\uff0c\u6216\u8005\u8bf4\u5b9e\u9645\u4e0a\u5b83\u5e76\u4e0d\u5c5e\u4e8e\u80fd\u591f\u7528\u6846\u67b6\u6027\u7684\u5185\u5bb9\u6982\u62ec\u7684\uff0c\u800c\u662f\u4e0d\u65ad\u7684\u628a\u7ec6\u8282\u5185\u5bb9\u4e22\u51fa\u6765\u5e76\u5728\u6848\u4f8b\u4e2d\u5206\u6790\uff0c\u6240\u4ee5\u611f\u89c9\u7b14\u8bb0\u5f88\u96be\u505a\u554a\uff0c\u7136\u540e\u611f\u89c9\u7b2c\u4e00\u5355\u5143\u7684\u5185\u5bb9\u662f\u5bf9\u6574\u4e2a\u8bfe\u7a0b\u7684\u5927\u81f4\u6897\u6982\uff0c\u6240\u4ee5\u8fd9\u91cc\u653e\u7684\u4e3b\u8981\u662f\u7b2c\u4e00\u7ae0\u7684\u5185\u5bb9\uff0c\u540e\u9762\u5982\u679c\u6709\u9047\u5230\u6211\u89c9\u5f97\u6709\u5fc5\u8981\u4e14\u65b9\u4fbf\u8bb0\u4e0b\u6765\u7684\u4e1c\u897f\u4f1a\u5fd8\u91cc\u9762\u4e22\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u611f\u89c9\u8fd9\u4efd\u7b14\u8bb0\u7684\u8d28\u91cf\u4e0d\u662f\u5f88\u9ad8\uff0c\u6548\u679c\u4e5f\u4e0d\u662f\u5f88\u597d\u2014\u2014\u5bf9\u4e8e\u66ff\u4ee3\u8fd9\u95e8\u8bfe\u6765\u8bf4\u3002

    \u6897\u6982

    \u79d1\u5b66\u6587\u732e\u662f\u4e3a\u4e86\u89c2\u70b9\u4ea4\u6d41\u5b58\u5728\u7684\uff0c\u800c\u201c\u6587\u7ae0\u201d\u53ea\u662f\u89c2\u70b9\u4ea4\u6d41\u8fc7\u7a0b\u4e2d\u7684\u4e00\u79cd\u627f\u8f7d\u5f62\u5f0f\u3002\u6211\u4eec\u8981\u7740\u91cd\u4e8e\u8ba9\u8bfb\u8005\u80fd\u4ee5\u66f4\u5c0f\u7684\u8d1f\u62c5\u7406\u89e3\u6587\u7ae0\u7684\u5185\u6db5\uff0c\u5373\u7528\u7b80\u660e\u627c\u8981\u7684\u3001\u8109\u7edc\u6e05\u6670\u7684\u6587\u5b57\uff0c\u8868\u8fbe\uff08\u6709\u53ef\u80fd\u6bd4\u8f83\u590d\u6742\u7684\uff09\u89c2\u70b9\u548c\u903b\u8f91\u3002

    \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u201c\u4e3a\u8bfb\u8005\u670d\u52a1\u201d\uff0c\u8003\u8651\u5230\u6587\u7ae0\u7684\u9605\u8bfb\u8282\u594f\uff0c\u5c3d\u53ef\u80fd\u8ba9\u6587\u7ae0\u80fd\u591f\u88ab\u884c\u4e91\u6d41\u6c34\u5730\u9605\u8bfb\u4e0b\u6765\uff0c\u800c\u975e\u78d5\u78d5\u7eca\u7eca\u6216\u53cd\u53cd\u590d\u590d\u3002

    \u4e00\u7bc7\u79d1\u5b66\u6587\u7ae0\u662f\u4e3a\u4e86\u4ea4\u6d41\u89c2\u70b9\u800c\u5b58\u5728\u7684\uff0c\u6240\u4ee5\u5b83\u5e94\u5f53\u80fd\u591f\u8ba9\u4eba \u9ad8\u6548 \u5730\u83b7\u53d6\u6838\u5fc3\u5185\u5bb9\uff0c\u6e05\u6670 \u5730\u641e\u6e05\u695a\u6587\u7ae0\u8bf4\u4e86\u4ec0\u4e48\uff0c\u5c24\u5176\u5728\u64b0\u5199\u6587\u7ae0\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u8981\u5c24\u5176\u6ce8\u91cd\u8fd9\u4e9b\uff1b\u5728\u6b64\u57fa\u7840\u4e0a \u4f18\u96c5 \u7684\u6587\u98ce\u80fd\u8ba9\u6587\u7ae0\u66f4\u4e0a\u4e00\u5c42\u697c\uff0c\u800c\u8fd9\u4e9b\u901a\u5e38\u662f\u5728\u4fee\u6539\u4e0e\u6da6\u8272\u4e2d\u4f53\u73b0\u51fa\u6765\u7684\u3002

    \u800c\u4e3a\u4e86\u5b9e\u73b0\u300c\u9ad8\u6548\u300d\u548c\u300c\u6e05\u6670\u300d\uff0c\u4f60\u9996\u5148\u5fc5\u987b\u6e05\u695a\u81ea\u5df1\u5c06\u8981\u8868\u8fbe\u4ec0\u4e48\uff08Have something to say.\uff09\uff0c\u5e76\u4e14\u68b3\u7406\u6e05\u8fd9\u4e9b\u5185\u5bb9\u7684\u8109\u7edc\u548c\u903b\u8f91\u5173\u7cfb\uff08Logical thinking.\uff09\uff0c\u6b64\u5916\uff0c\u4e3a\u4e86\u8f85\u52a9\u6784\u5efa\u8d77\u4e00\u7bc7\u6587\u7ae0\uff0c\u4f60\u8fd8\u9700\u8981\u4e00\u4e9b\u5199\u4f5c\u5957\u8def\uff08A few simple, learnable rules of style.\uff09\u3002

    \u8fd9\u91cc\u6709\u4e00\u4e9b\u5176\u5b83\u4e60\u60ef\u80fd\u591f\u5e2e\u52a9\u4f60\u66f4\u597d\u5730\u5199\u4f5c\uff1a

    1. \u65e5\u5e38\u591a\u8bfb\u591a\u5199\u591a\u6a21\u4eff\uff0c\u4e0d\u4e00\u5b9a\u8981\u548c\u79d1\u5b66\u6587\u7ae0\u6709\u5173\uff1b
    2. \u6539\u6b63\u4e00\u4e9b\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u517b\u6210\u7684\u574f\u7684\u201c\u5b66\u672f\u201d\u5199\u4f5c\u4e60\u60ef\uff0c\u8bb2\u8005\u79f0\u4e4b\u4e3a deprogramming step\uff1b
    3. \u52a8\u7b14\u4e4b\u524d\u5148\u5c1d\u8bd5\u7740\u7528\u8bed\u8a00\u6765\u8bb2\u8ff0\u6587\u7ae0\u5185\u5bb9\uff0c\u6bd4\u5982\u548c\u4f60\u7684\u670b\u53cb\u8c08\u8c08\uff1b
    4. \u5c1d\u8bd5\u8ba9\u6587\u7ae0\u53d8\u5f97\u6709\u5438\u5f15\u529b\uff1b
    5. \u8ba4\u8bc6\u5230\u5199\u4f5c\u4e0d\u9700\u8981\u7075\u611f\uff0c\u4e0d\u8981\u628a\u7075\u611f\u5f53\u4f5c\u501f\u53e3\uff1b
    6. \u8ba4\u8bc6\u5230\u5199\u4f5c\u672c\u8eab\u662f\u56f0\u96be\u7684\uff0c\u800c\u5927\u5bb6\u90fd\u4e00\u6837\uff1b
    7. \u575a\u6301\u53cd\u590d\u4fee\u6539\uff0c\u751a\u81f3\u662f\u5728\u5199\u521d\u7a3f\u7684\u65f6\u5019\uff0c\u4f18\u5148\u628a\u6587\u7ae0\u6210\u54c1\u5199\u51fa\u6765\uff0c\u518d\u4e0d\u538c\u5176\u70e6\u5730\u4fee\u7f2e\uff1b
    8. \u6740\u4f10\u679c\u65ad\uff0c\u4e0d\u8981\u6267\u7740\u4e8e\u5df2\u7ecf\u5199\u51fa\u6765\u7684\u4f46\u662f\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u7684\u6587\u5b57\uff1b
    9. \u627e\u4e00\u4e2a\u597d\u7f16\u8f91\uff0cta \u4eec\u53ef\u80fd\u4f1a\u7ed9\u4f60\u597d\u7684\u610f\u89c1\u548c\u5efa\u8bae\uff1b
    10. \u53bb\u5192\u9669\uff0c\u52c7\u6562\u5730\u53bb\u7a81\u7834\u684e\u688f\uff1b

    \u5177\u4f53\u5230\u5199\u4f5c\u65f6\uff0c\u6211\u4eec\u8981\u5207\u5fcc\u53e5\u5b50\u6666\u6da9\u96be\u61c2\uff0c\u5728\u5199\u4f5c\u8fc7\u7a0b\u4e2d\u6211\u4eec\u53ef\u80fd\u65e0\u610f\u8bc6\u5730\u7528\u6666\u6da9\u590d\u6742\u7684\u8bed\u53e5\u63a9\u76d6\u6211\u4eec\u60f3\u8981\u8868\u8fbe\u7684\u5185\u5bb9\uff0c\u5176\u4e2d\u53ef\u80fd\u7684\u539f\u56e0\u6709\uff1a

    \u5c06\u8bb8\u591a\u52a8\u8bcd\u8f6c\u5316\u4e3a\u540d\u8bcd\u4f7f\u7528

    Verbs drive sentences along and nouns slow them down.

    bad eg

    Adoptive cell transfer (ACT) immunotherapy is based on the ex vivo selection of tumor-reactive lymphocytes, and their activation and numerical expression before reinfusion to the autologous tumor-bearing host.

    \u4f7f\u7528\u6a21\u7cca\u5bbd\u6cdb\u7684\u8bcd

    \u6a21\u7cca\u5bbd\u6cdb\u7684\u3001\u4e0d\u591f\u5177\u4f53\u7684\u3001\u4e0d\u80fd\u8ba9\u8bfb\u8005\u8111\u4e2d\u4ea7\u751f\u76f4\u63a5\u5370\u8c61\u7684\u8bcd\u4f1a\u8ba9\u8bfb\u8005\u611f\u5230\u56f0\u60d1\u3002

    \u4f7f\u7528\u4e0d\u5fc5\u8981\u7684\u7f29\u5199\u6216\u672f\u8bed

    \u9664\u975e\u662f\u4e00\u4e9b\u5e7f\u4e3a\u4eba\u77e5\u7684\u7f29\u5199\uff0c\u5426\u5219\u5f88\u53ef\u80fd\u4e3a\u8bfb\u8005\u5e26\u6765\u56f0\u6270\u3002\u5373\u4f7f\u4f60\u5728\u524d\u6587\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\uff0c\u5b83\u4eec\u5f88\u53ef\u80fd\u9700\u8981\u56de\u8fc7\u5934\u6765\u67e5\u9605\u624d\u80fd\u201c\u8bb0\u8d77\u201d\u8fd9\u4e2a\u7f29\u5199\u7684\u542b\u4e49\u3002

    \u4f7f\u7528\u88ab\u52a8\u8bed\u6001

    \u8fdd\u53cd\u4e86\u60c5\u7eea\u4e0a\u7684 \u4e3b-\u8c13-\u5bbe \u7684\u987a\u5e8f\u3002\u5f53\u7136\u8981\u6309\u7167\u5b9e\u9645\u60c5\u51b5\u6765\u8bf4\uff0c\u5173\u952e\u662f\u8981\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u8bed\u6cd5\u53d8\u5316\u3002

    \u4e3b\u8bed\u548c\u52a8\u8bcd\u592a\u9065\u8fdc

    \u8bfb\u8005\u603b\u662f\u5728\u671f\u5f85\u627e\u5230\u4e00\u53e5\u8bdd\u91cc\u7684\u201c\u52a8\u8bcd\u201d\uff0c\u800c\u5982\u679c\u8fd9\u4e2a\u201c\u52a8\u8bcd\u201d\u592a\u96be\u627e\uff0c\u5c06\u4f1a\u5f71\u54cd\u6574\u53e5\u8bdd\u7684\u9605\u8bfb\u6548\u7387\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e0d\u7ba1\u4f60\u7684\u5185\u5bb9\u662f\u5426\u590d\u6742\uff0c\u627f\u8f7d\u8fd9\u4e9b\u5185\u5bb9\u7684\u8bed\u53e5\u90fd\u4e0d\u5e94\u5f53\u662f\u590d\u6742\u7684\u3002

    \u603b\u7684\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e9b\u539f\u5219\uff1a

    1. \u5220\u51cf\u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u5bf9\u6b64\u4fdd\u6301 \u654f\u611f \u548c \u65e0\u60c5\uff0c\u4e0d\u8981\u6297\u62d2\u91cd\u6784\u5b57\u53e5\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u5b9e\u9645\u542b\u4e49\u7684\u8bcd\uff0c\u4e00\u4e9b\u53ea\u6709\u8bed\u6c14\u4f5c\u7528\u7684\u8bcd\u7b49\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u6ca1\u6709\u610f\u4e49\u7684\u7f29\u5199\u548c\u672f\u8bed\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1a\u524d\u540e\u8bed\u4e49\u91cd\u590d\u7684\u8bcd\uff1b
      • \u4e0d\u5fc5\u8981\u7684\u8bcd\u6c47\uff0c\u6bd4\u5982\uff1aadv. \u4eec\uff1b
    2. \u66f4\u591a\u5730\u4f7f\u7528\u4e3b\u52a8\u8bed\u6001\uff08\u4e3b\u8c13\u5bbe\uff09\u800c\u975e\u88ab\u52a8\u8bed\u6001\uff1b
    3. \u56f4\u7ed5 \u52a8\u8bcd \u5199\u4f5c\uff1a\u4f7f\u7528\u5f3a\u52a8\u8bcd\uff0c\u907f\u514d\u5c06\u52a8\u8bcd\u53d8\u6210\u540d\u8bcd\uff0c\u5e76\u5c06\u52a8\u8bcd\u653e\u5728\u9192\u76ee\u7684\u4f4d\u7f6e\uff1b
    4. \u9ad8\u8003\u82f1\u8bed\u4f5c\u6587\u600e\u4e48\u5199\uff0c\u79d1\u5b66\u6587\u732e\u5c31\u4e0d\u8981\u600e\u4e48\u5199\uff1b

    \u51cf\u5c11\u6587\u7ae0\u4e2d\u7684\u6df7\u4e71\u6709\u5982\u4e0b\u65b9\u6cd5\uff1a

    \u8f6c\u5426\u5b9a\u4e3a\u80af\u5b9a

    from to not honest dishonest not harmful safe not important unimportant do not have lack do not remember forget do not pay attention to ignore do not succeed fail

    \u5220\u53bb\u8fc7\u5269\u7684 \"there are\" / \"there is\"

    \u5220\u53bb\u4e0d\u5fc5\u8981\u7684\u4ecb\u8bcd

    "},{"location":"cour_note/D2QD_DigitalDesign/","title":"\ud83d\udd2e \u6570\u5b57\u903b\u8f91\u8bbe\u8ba1 | Digital Design","text":"

    \u7ea6 382 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u6ce8\u610f\uff01

    \u672c\u7ad9\u90e8\u7f72\u5728 GitHub pages \u4e0a\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u5361\u987f\u60c5\u51b5\uff0c\u4f7f\u7528\u4ee3\u7406\u53ef\u4ee5\u6781\u5927\u4f18\u5316\u9605\u8bfb\u4f53\u9a8c\u3002

    \u8bfe\u7a0b\u4fe1\u606f

    \u5f88\u663e\u7136\uff0c\u6211\u70c2\u5c3e\u4e86\uff0c\u7b2c\u4e94\u7ae0\u5185\u5bb9\u5f88\u7b80\u964b\uff0c\u7b2c\u4e03\u7ae0\u57fa\u672c\u6ca1\u5199\uff0c\u5b9e\u5728\u662f\u8003\u524d\u6765\u4e0d\u53ca\u5199\u5b8c\u4e86\u3002\u4f46\u662f\u6211\u53ef\u4ee5\u4fdd\u8bc1\u9664\u6b64\u4e4b\u5916\u7684\u5185\u5bb9\u6211\u90fd\u662f\u4ed4\u7ec6\u63a8\u6572\u540e\u624d\u5199\u51fa\u6765\u7684orz\u3002

    \u6b64\u5916\uff0c\u5bf9\u4e8e\u6211\u5df2\u7ecf\u5199\u4e86\u7684\u5185\u5bb9\u6709\u7591\u4e49\uff0c\u6216\u662f\u5e0c\u671b\u80fd\u8865\u5145\u6211\u6ca1\u5199\u7684\u5185\u5bb9\uff0c\u6b22\u8fce\u63d0\u4ea4 PR\uff01

    List

    \u8865\u5929\u65f6\u5019\u7684\u4e00\u70b9\u60f3\u6cd5\uff0c\u56e0\u4e3a\u8bfe\u672c\u6bcf\u4e00\u7ae0\u90fd\u6709\u4e00\u4e2a summary\uff0c\u6240\u4ee5\u5982\u679c\u8981\u770b\u4e66\u7684\u8bdd\u6216\u8bb8\u53ef\u4ee5\u5148\u770b\u90a3\u4e2a summary \u518d\u770b\u5177\u4f53\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/","title":"Chap 1 Digital Systems and Information","text":"

    \u7ea6 2053 \u4e2a\u5b57 9 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4fe1\u606f\u8868\u8fbe--information-representation","title":"\u4fe1\u606f\u8868\u8fbe | Information Representation","text":"

    \u73b0\u5b9e\u4e16\u754c\u4e2d\u7684\u4fe1\u606f\u5f80\u5f80\u662f \u8fde\u7eed(continuous) \u7684\uff0c\u4f46\u5728\u4eba\u9020\u7269\u7684\u4e16\u754c\u4e2d\uff0c\u5927\u90e8\u5206\u4fe1\u606f\u90fd\u662f \u79bb\u6563(discrete) \u7684\u3002

    \u5728\u7535\u5b50\u4fe1\u606f\u7cfb\u7edf\u4e2d\uff0c\u4fe1\u53f7\u5206\u4e3a \u6a21\u62df\u4fe1\u53f7(analog signal) \u548c \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e24\u79cd\u3002\u5176\u4e2d\uff0c\u5728 \u6570\u5b57\u4fe1\u53f7(digital signal) \u4e2d\u53c8\u6709\u591a\u79cd\u8868\u793a\u65b9\u6cd5\uff0c\u5982\u4eca\u6211\u4eec\u6700\u5e38\u7528\u7684\u662f \u4e8c\u8fdb\u5236(binary)\u3002\u5bf9\u5e94\u5230\u7535\u8def\u5c42\u9762\uff0c\u6211\u4eec\u5e38\u5e38\u7528 \u9ad8\u7535\u4f4d(HIGH) \u548c \u4f4e\u7535\u4f4d(LOW) \u6765\u8868\u5f81 1 \u548c 0\u3002

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5728\u8f93\u5165\u548c\u8f93\u51fa\u4e2d\uff0c\u9ad8\u4f4e\u7535\u4f4d\u7684\u63a5\u53d7\u8303\u56f4\u662f\u4e0d\u540c\u7684\u3002\u53ef\u4ee5\u53d1\u73b0\uff0c\u8f93\u5165\u7684\u5224\u5b9a\u8303\u56f4\u6bd4\u8f93\u51fa\u7684\u5224\u5b9a\u8303\u56f4\u5927\uff0c\u5373 \u5bbd\u8fdb\u4e25\u51fa\u3002\u5176\u76ee\u7684\u662f\u4e3a\u4e86\u8fdb\u4e00\u6b65\u63d0\u9ad8\u7535\u8def\u5728\u566a\u97f3\u7b49\u5f02\u5e38\u5f71\u54cd\u4e0b\u4e5f\u80fd\u6b63\u5e38\u8868\u73b0\u7684\u80fd\u529b\u3002

    HIGH input LOW input HIGH output LOW output 0.6 ~ 1.1 -0.1 ~ 0.4 0.9 ~ 1.1 -0.1 ~ 0.1

    \u6216\u8bb8\u4f60\u4e5f\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\uff0c\u5728\u56fe\u4e2d\uff0cHIGH \u7684\u63a5\u53d7\u8303\u56f4\u548c LOW \u7684\u63a5\u53d7\u8303\u56f4\u4e4b\u95f4\u8fd8\u5b58\u5728\u4e00\u6bb5\u533a\u57df\u3002\u843d\u5728\u8fd9\u4e00\u90e8\u5206\u7684\u7535\u5e73\u662f \u672a\u5b9a\u4e49(undefined) \u7684\uff0c\u4e5f\u88ab\u79f0\u4e3a\u662f \u6d6e\u52a8(floating) \u7684\u3002\u5982\u679c\u8f93\u51fa\u7684\u7535\u5e73\u662f\u5728\u6d6e\u52a8\u533a\u95f4\u7684\uff0c\u90a3\u4e48\u5176\u8ba4\u5b9a\u503c\u5c06\u662f\u968f\u673a\u7684\u3002

    \u4e8b\u5b9e\u4e0a\uff0c\u5728\u4fe1\u606f\u7684\u5bf9\u5e94\u4e0a\uff0c\u867d\u7136\u5c06\u9ad8\u4f4e\u7535\u5e73\u540c HIGH/LOW \u8054\u7cfb\u662f\u5f88\u81ea\u7136\u7684\uff0c\u4f46\u662f\u5c06\u4ed6\u4eec\u540c true/false \u6216\u8005 1/0 \u8054\u7cfb\u5176\u5b9e\u5e76\u4e0d\u552f\u4e00\u3002\u4f46\u662f\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\uff08\u6211\u4eec\u79f0\u4e4b\u4e3a positive logic\uff09\uff0c\u6211\u4eec\u90fd\u8ba4\u4e3a HIGH ~ true ~ 1\uff0c LOW ~ false ~ 0\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c(b) \u56fe\u4e2d\u7684\u6a21\u62df\u4fe1\u53f7\u5728\u7ecf\u8fc7\u6211\u4eec\u7684\u5668\u4ef6\u540e\uff0c\u4f1a\u88ab\u8ba4\u4e3a\u662f (c) \u56fe\u6240\u793a\u7684\u4fe1\u53f7\u3002\u800c\u8fd9\u4e9b\u64cd\u4f5c\u5728\u786c\u4ef6\u5c42\u9762\uff0c\u6211\u4eec\u901a\u8fc7 \u6676\u4f53\u7ba1(transistors) \u6765\u5b9e\u73b0\u3002

    \u8fd9\u4e5f\u7275\u626f\u5230\u6211\u4eec\u4e3a\u4ec0\u4e48\u6700\u7ec8\u4f7f\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u4fe1\u606f\u3002\u4e00\u65b9\u9762\u662f\u56e0\u4e3a\u4e8c\u503c\u5668\u4ef6\u6bd4\u8f83\u5e38\u89c1\uff0c\u4ea6\u5373\u8fd9\u91cc\u63d0\u5230\u7684\u6676\u4f53\u7ba1\uff1b\u53e6\u5916\u4e00\u65b9\u9762\u662f\u4f7f\u7528\u4e8c\u8fdb\u5236\u53ef\u4ee5\u964d\u4f4e\u7535\u8def\u6210\u672c\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42--abstraction-layers-in-computer-systems-design","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\u7684\u62bd\u8c61\u5c42 | Abstraction Layers in Computer Systems Design","text":"\u8d8a\u4e0a\u5c42\u62bd\u8c61\u7a0b\u5ea6\u8d8a\u9ad8 Algorithms Programing Languages Operating Systems Instruction Set Architecture Microarchitecture Register Transfers Logic Gates Transistor Circuits"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u6570\u5b57\u7cfb\u7edf--number-systems","title":"\u6570\u5b57\u7cfb\u7edf | Number Systems","text":"

    \u9996\u5148\u9700\u8981\u6d89\u53ca\u7684\u95ee\u9898\u662f\u8fdb\u5236\u8f6c\u6362\u3002

    \u5bf9\u4e8e\u4e00\u4e2a \\(r\\) \u8fdb\u5236\u6570\uff0c\u5b83\u4e00\u822c\u88ab\u5199\u6210\u8fd9\u6837\uff1a

    \\[ (A_{n-1}A_{n-2}...A_1A_0A_{-1}...A_{-(m-1)}A_{-m})_{r} \\]

    \u800c\u5b83\u5bf9\u5e94\u7684\u5341\u8fdb\u5236\u771f\u503c\u4e3a\uff1a

    \\[ \\begin{aligned} \\sum_{i=-m}^{n-1} A_ir^i\\;\\; =&A_{n-1}r^{n-1}+A_{n-2}r^{n-2}+...\\\\ +&A_{1}r^{1}+A_0r^0+A_{-1}r^{-1}+...\\\\ +&A_{-(m-1)}r^{m-1}+A_{-m}r^{-m} \\end{aligned} \\]

    \u8ba1\u7b97\u673a\u9886\u57df\u5e38\u89c1\u7684\u8fdb\u5236\u4e3b\u8981\u662f \u4e8c\u8fdb\u5236(binary)\uff0c\u516b\u8fdb\u5236(octal)\uff0c\u5341\u8fdb\u5236(decimal) \u548c \u5341\u516d\u8fdb\u5236(hexadecimal)\u3002

    \u5176\u4e2d\u4e8c\u3001\u516b\u3001\u5341\u516d\u8fdb\u5236\u4e4b\u95f4\u7684\u8f6c\u6362\u975e\u5e38\u7b80\u5355\uff0c\u5b58\u5728\u591a\u4f4d\u5230\u4e00\u4f4d\u4e4b\u95f4\u7684\u65e0\u540e\u6548\u6027\u6620\u5c04\uff0c\u4f8b\u5982\u4e8c\u8fdb\u5236\u8f6c\u6362\u5230\u5341\u516d\u8fdb\u5236\u53ea\u9700\u8981\u5c06\u4ece\u4f4e\u5230\u9ad8\u6bcf\u56db\u4f4d\u8f6c\u5316\u6210\u5341\u516d\u8fdb\u5236\u4e2d\u7684\u4e00\u4f4d\u5373\u53ef\u3002

    \u9700\u8981\u6ce8\u610f\uff0c\u7531\u4e8e\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u5728\u96f6\u4f4d\u4e0a\u7684\u6743\u91cd\u76f8\u540c\uff0c\u8fd9\u610f\u5473\u7740\u5728\u6574\u6570\u90e8\u5206\uff0c\u4e8c\u8fdb\u5236\u548c\u5341\u8fdb\u5236\u662f\u53ef\u4ee5\u76f8\u4e92\u7cbe\u51c6\u8f6c\u5316\u7684\uff08\u5373\u6700\u5c0f\u7cbe\u5ea6\u662f\u4e00\u81f4\u7684\uff0c\u90fd\u662f 1\uff09\uff1b\u7136\u800c\u8be5\u6027\u8d28\u5728\u5c0f\u6570\u90e8\u5206\u5e76\u4e0d\u6210\u7acb\uff08\u56e0\u4e3a\u5c0f\u6570\u90e8\u5206\u4e0d\u5b58\u5728\u201c\u6700\u5c0f\u7cbe\u5ea6\u201d\u4e00\u8bf4\uff09\uff0c\u5373\u5341\u8fdb\u5236\u65e0\u6cd5\u7cbe\u51c6\u8f6c\u5316\u4e3a\u4e8c\u8fdb\u5236\uff0c\u4f46\u4e8c\u8fdb\u5236\u53ef\u4ee5\u8f6c\u5316\u4e3a\u5341\u8fdb\u5236\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7b97\u672f\u8fd0\u7b97--arithmetic-operations","title":"\u7b97\u672f\u8fd0\u7b97 | Arithmetic Operations","text":"

    \u8fd9\u91cc\u6d89\u53ca\u7684\u4e3b\u8981\u662f \u52a0\u6cd5(Addition)\u3001\u51cf\u6cd5(Subtraction)\u3001\u4e58\u6cd5(Multiplication)\u3002

    \u6574\u4f53\u6d41\u7a0b\u548c\u5c0f\u5b66\u7ad6\u5f0f\u52a0\u6cd5\u662f\u4e00\u81f4\u7684\u3002

    \u4e8c\u8fdb\u5236\u8fd0\u7b97

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u7f16\u7801--codes","title":"\u7f16\u7801 | Codes","text":"

    \u4e8c\u8fdb\u5236\u7f16\u7801\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u72ec\u70ed\u7801--\u72ec\u51b7\u7801","title":"\u72ec\u70ed\u7801 & \u72ec\u51b7\u7801","text":"

    \u72ec\u70ed\u7801(one-hot) \u8981\u6c42\u6bd4\u7279\u5411\u91cf\u4e2d\u53ea\u6709\u4e00\u4f4d\u662f 1\uff1b\u5bf9\u5e94\u7684\u8fd8\u6709 \u72ec\u51b7\u7801(one-cold)\u3002

    \u4f7f\u7528\u8fd9\u79cd\u7f16\u7801\u7684\u597d\u5904\u662f\uff0c\u51b3\u5b9a\u6216\u6539\u53d8\u72b6\u6001\u673a\u76ee\u524d\u7684\u72b6\u6001\u7684\u6210\u672c\u76f8\u5bf9\u8f83\u4f4e\uff0c\u5bb9\u6613\u8bbe\u8ba1\u4e5f\u5bb9\u6613\u68c0\u6d4b\u975e\u6cd5\u884c\u4e3a\u7b49\u3002

    \u4f46\u662f\u76f8\u5bf9\u5e94\u7684\uff0c\u7f3a\u70b9\u662f\u4fe1\u606f\u8868\u793a\u7387\u8f83\u4f4e\uff0c\u975e\u6cd5\u72b6\u6001\u975e\u5e38\u591a\u800c\u6709\u6548\u72b6\u6001\u5f88\u5c11\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#bcd-\u7801","title":"BCD \u7801","text":"

    \u7531\u4e8e\u771f\u5b9e\u4e16\u754c\u4e2d\u5927\u90e8\u5206\u6570\u636e\u8868\u8ff0\u90fd\u662f\u4ee5\u5341\u8fdb\u5236\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7814\u7a76\u5982\u4f55\u7528\u4e8c\u8fdb\u5236\u6765\u8868\u793a\u5341\u8fdb\u5236\u3002

    \u9996\u5148\uff0c\u4e00\u4f4d\u4e8c\u8fdb\u5236\u6570\u80fd\u5305\u542b\u7684\u4fe1\u606f\u662f 1bit\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u201c\u771f\u201d\u6216\u8005\u4e00\u4e2a\u201c\u5047\u201d\u3002\u6211\u4eec\u79f0\u4e00\u4e2a\u62e5\u6709 n \u4e2a\u5143\u7d20\u7684\u4e8c\u8fdb\u5236\u5411\u91cf\u4e3a\u4e00\u4e2a n\u4f4d\u4e8c\u8fdb\u5236\u7f16\u7801(n-bit binary code)\u3002\u4e00\u4e2a n \u4f4d\u4e8c\u8fdb\u5236\u6570\u62e5\u6709 \\(2^{n}\\) \u79cd\u53ef\u80fd\u7684\u7ec4\u5408\uff0c\u56e0\u800c\u53ef\u4ee5\u8868\u793a \\(2^n\\) \u79cd\u4fe1\u606f\u3002

    \u800c\u6211\u4eec\u9700\u8981\u8bbe\u8ba1\u7684\u7f16\u7801\u7cfb\u7edf\uff0c\u5c31\u662f\u5c06\u6211\u4eec\u9700\u8981\u7684\u4fe1\u606f\u6620\u5c04\u5230\u8fd9 \\(2^n\\) \u4e2a\u201c\u7a7a\u4f4d\u201d\u4e2d\u3002\u5f53\u7136\uff0c\u5f53\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u4fe1\u606f\u6570\u91cf\u5e76\u4e0d\u662f 2 \u7684\u5e42\u6b21\u65f6\u5019\uff0c\u4f1a\u51fa\u73b0\u4e00\u4e9b \u672a\u5206\u914d(unassigned) \u7684\u6bd4\u7279\u7ec4\u5408\u3002

    \u800c\u5728\u8fd9\u79cd\u7f16\u7801\u4e2d\uff0c\u6700\u5e38\u7528\u7684\u5c31\u662f BCD\u7801(binary-coded demical)\u3002\u5176\u6838\u5fc3\u601d\u8def\u5c31\u662f\uff0c\u5c06\u5341\u8fdb\u5236\u7684\u6bcf\u4e00\u4f4d \u5206\u522b \u7528 \u771f\u503c\u76f8\u7b49\u7684 4 \u4f4d\u4e8c\u8fdb\u5236 \u8868\u793a\uff0c\u5373 0 ~ 9 \u5206\u522b\u7528 0000 ~ 1001 \u8868\u793a\u3002

    DecimalSymbol BCDDigit 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001

    eg

    \\[ \\mathrm{ (185)_{10}\\;=\\;(0001\\;1000\\;0101)_{BCD}\\;=\\;(10111001)_2 } \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u4f59\u4e09\u7801","title":"\u4f59\u4e09\u7801","text":"

    \u4e00\u79cd BCD\u7801 \u7684\u6539\u8fdb\u662f \u4f59\u4e09\u7801(Excess3)\u3002\u5176\u6838\u5fc3\u601d\u8def\u662f\u5728 BCD\u7801\u7684\u57fa\u7840\u4e0a\uff0c\u589e\u52a0\u4e00\u4e2a\u5927\u5c0f\u4e3a 3 \u7684\u504f\u79fb\u91cf\u3002

    DecimalSymbol Excess3Digit 0 0011 1 0100 2 0101 3 0110 4 0111 5 1000 6 1001 7 1010 8 1011 9 1100

    \u4e3a\u4ec0\u4e48\u662f 3 \u5462\uff1f\u9996\u5148\u8fd9\u4e2a 3 \u6765\u81ea\u4e8e \\(\\frac{16-10}{2}\\)\uff0c\u4e5f\u5c31\u662f 8421 \u7801\u7684\u5bb9\u91cf\u51cf\u53bb\u6211\u4eec\u9700\u8981\u8868\u793a\u7684\u6570\u5b57\u6570\u91cf\uff0c\u518d\u9664\u4ee5\u4e8c\u3002\u8fd9\u6837\u7684\u597d\u5904\u662f\uff0c\u5341\u8fdb\u5236\u4e0b\u80fd\u8fdb\u4f4d\u7684\u4e24\u4e2a\u6570\uff0c\u5728\u4f59\u4e09\u7801\u4e0b\u76f8\u52a0\u4e5f\u521a\u597d\u8fdb\u4f4d\u3002

    \u4f46\u662f\u9700\u8981\u5f3a\u8c03\u7684\u4e00\u70b9\u662f\uff0c\u7f16\u7801\u548c\u6570\u503c\u662f\u5b58\u5728\u533a\u522b\u7684\uff0c\u867d\u7136\u6211\u4eec\u63d0\u5230\u4e86\u4f59\u4e09\u7801\u76f8\u52a0\uff0c\u4f46\u662f\u7f16\u7801\u505a\u8fd0\u7b97\u591a\u6570\u60c5\u51b5\u4e0b\u662f\u6ca1\u6709\u610f\u4e49\u7684\u3002\u201c\u8fd0\u7b97\u201d\u7684\u4e3b\u4f53\u66f4\u591a\u662f\u6570\u503c\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u683c\u96f7\u7801","title":"\u683c\u96f7\u7801","text":"

    \u6b64\u5916\uff0c\u8fd9\u91cc\u4e0d\u5f97\u4e0d\u63d0\u7684\u53e6\u5916\u4e00\u4e2a\u7f16\u7801\u662f \u683c\u96f7\u7801(Gray Codes)\u3002\u683c\u96f7\u7801\u7684\u7279\u5f81\uff0c\u4e5f\u662f\u4ed6\u7684\u4f18\u70b9\uff0c\u5c31\u662f\u76f8\u90bb\u7684\u4e24\u4e2a\u6570\u5728\u4e8c\u8fdb\u5236\u4e0b\u7684\u8868\u793a\u53ea\u5dee\u4e00\u4f4d\uff08\u5f53\u5728\u5360\u6ee1\u65f6\uff0c\u5bf9\u4e8e\u6574\u4e2a\u7f16\u7801\u5e8f\u5217\uff0c\u73af\u72b6\u6ee1\u8db3\u8be5\u6761\u4ef6\uff09\u3002

    \u6bd4\u5982\u6709\u5982\u4e0b\u5e94\u7528\uff1a

    \u4ee5\u53ca\u5728\u8bb8\u591a\u72b6\u6001\u63a7\u5236\u4e2d\u90fd\u6709\u7740\u5e7f\u6cdb\u7684\u5e94\u7528\u3002

    \u4ece\u7b14\u8bd5\u505a\u9898\u89d2\u5ea6\u6765\u8bf4\uff0c\u683c\u96f7\u7801\u6700\u9ebb\u70e6\u7684\u5176\u5b9e\u662f\u4e0e\u5341\u8fdb\u5236\u6570\u7684\u8f6c\u6362\u3002\uff08\u6b64\u5904 @CSP-S2019-Day1-T1\uff09

    \u4e2a\u4eba\u8ba4\u4e3a\u6700\u597d\u505a\u7684\u505a\u6cd5\u5c31\u662f\uff0c\u5047\u8bbe\u6211\u4eec\u8981\u627e\u7684\u662f\u7b2c k \u4e2a\u683c\u96f7\u7801\uff0c\u5219\u5bf9\u5e94\u7684\u683c\u96f7\u7801\u4e3a\uff1a

    \\[ k \\;\\;\\mathrm{XOR}\\;\\; (k>>1) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#ascii-\u7801","title":"ASCII \u7801","text":"

    \u5b57\u7b26\u7f16\u7801\u6240\u4f7f\u7528\u7684\u4e00\u822c\u662f ASCII \u7f16\u7801\uff0c\u7531\u4e8e ASCII \u5df2\u7ecf\u662f\u8001\u751f\u5e38\u8c08\u4e86\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap01/#\u5947\u5076\u6821\u9a8c\u4f4d","title":"\u5947\u5076\u6821\u9a8c\u4f4d","text":"

    \u4fe1\u9053\u7f16\u7801\u4e0e\u4fe1\u6e90\u7f16\u7801\uff1a

    \u5728\u4fe1\u53f7\u4f20\u8f93\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u80fd\u7531\u4e8e\u73af\u5883\u5e72\u6270\u7b49\u539f\u56e0\uff0c\u51fa\u73b0\u5404\u79cd\u4fe1\u53f7\u6296\u52a8\uff0c\u6240\u4ee5\u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u7684\u53ef\u4fe1\u5ea6\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u9519\u8bef\u68c0\u6d4b\u673a\u5236\u3002

    \u4e00\u79cd\u5e38\u89c1\u7684\u65b9\u6cd5\u662f \u5197\u4f59(Redundancy)\uff0c\u5373\u52a0\u5165\u4e00\u4e9b\u989d\u5916\u7684\u4fe1\u606f\u7528\u4ee5\u6821\u9a8c\u3002

    graph TD\nA[Error Detection Techniques]\nB[Single Parity Check]\nC[Cyclic Redundancy Check]\nD[Check Sum]\n\nA-->B\nA-->C\nA-->D

    \u5176\u4e2d\u4e00\u79cd\u505a\u6cd5\u662f\u5f15\u5165 \u5947\u5076\u6821\u9a8c\u4f4d(Parity Bit)\u3002\u5b83\u5206\u4e3a \u5947\u6821\u9a8c(Odd Parity) \u548c \u5076\u6821\u9a8c(Even Parity)\u3002\u5206\u522b\u901a\u8fc7\u5f15\u5165\u989d\u5916\u7684\u4e00\u4f4d\uff0c\u6765\u4fdd\u8bc1\u6574\u4e2a\u4fe1\u606f\u4e32\u4e2d 1 \u7684\u6570\u91cf\u662f\u5947\u6570/\u5076\u6570\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/","title":"Chap 2 Combinational Logic Circuits","text":"

    \u7ea6 8091 \u4e2a\u5b57 25 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 41 \u5206\u949f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u8fd0\u7b97","title":"\u903b\u8f91\u8fd0\u7b97","text":"

    \u903b\u8f91\u8fd0\u7b97\u7684\u5bf9\u8c61\u662f\u5e03\u5c14\u53d8\u91cf\uff0c\u4e5f\u5c31\u662f 0/1 \u4e8c\u503c\u3002

    \u4e3b\u8981\u7684\u8fd0\u7b97\u5c31\u662f \u4e0e(AND)\uff0c\u6216(OR)\uff0c\u975e(NOT)\uff0c\u5f02\u6216(XOR)\uff0c\u4ee5\u53ca \u4e0e\u975e(NAND)\uff0c\u6216\u975e(NOR)\uff0c\u540c\u6216(XNOR)\u3002

    \u9ad8\u7ef4

    \u591a\u8f93\u5165\u7684\u5f02\u6216\u548c\u540c\u6216\u88ab\u79f0\u4e3a\u5947\u51fd\u6570\u548c\u5076\u51fd\u6570\u3002

    \u53ef\u4ee5\u7528\u5b83\u4eec\u6765\u5b9e\u73b0\u5947\u6821\u9a8c\u548c\u5076\u6821\u9a8c\u3002

    \u800c\u4e14\u89c2\u5bdf\u5176\u5361\u8bfa\u56fe\u7684\u5f62\u72b6\uff08\u68cb\u76d8\u5f62\uff09\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u4eec\u662f\u5929\u7136\u4f18\u5316\u7684\uff0c\u5373\u4e0d\u53ef\u4f18\u5316\u7684\u3002

    \u8fd0\u7b97\u89c4\u5219\u633a\u7b80\u5355\u7684\uff0c\u5728\u6b64\u7565\u53bb\u3002

    \u6bd4\u8f83\u57fa\u7840\u7684\uff0c\u9700\u8981\u4e86\u89e3\u4e0e\u6216\u975e\u7684\u7b26\u53f7\u8868\u793a\u3002

    \u7531\u6b64\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u7ec4\u5408\uff0c\u4f8b\u5982\uff1a

    \u518d\u6b21\u8fd8\u9700\u8981\u63d0\u5230\u7684\u662f \u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b(De Morgan's Laws)\uff0c\u5176\u8868\u8ff0\u4e3a\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u903b\u8f91\u95e8","title":"\u903b\u8f91\u95e8","text":"

    \u903b\u8f91\u95e8\u662f\u5728\u786c\u4ef6\u5c42\u9762\u4e0a\u5b9e\u73b0\u5e03\u5c14\u4ee3\u6570\u7684\u903b\u8f91\u5355\u5143\u3002\u5176\u64cd\u4f5c\u5bf9\u8c61\u4e3a\u9ad8\u4f4e\u7535\u5e73\u3002

    \u5982\u56fe\uff0c(a)\u4e2d\u7ed8\u5236\u4e86\u4e09\u4e2a\u5e38\u7528\u903b\u8f91\u95e8\u7684\u7b26\u53f7\uff1b(b)\u4e2d\u5219\u63cf\u8ff0\u4e86\u8fd9\u4e9b\u8fd0\u7b97\u5728 \u65f6\u5e8f\u56fe(timing diagram) \u4e2d\u7684\u72b6\u6001\uff1b(c)\u5219\u63cf\u8ff0\u4e86\u5728\u5ef6\u65f6\uff08\u89c1\u4e0b\uff09\u6548\u5e94\u4e0b\u7684\u65f6\u5e8f\u56fe\u3002

    \u8fd8\u6709\u4e00\u4e2a\u6ce8\u610f\u70b9\u662f\uff0c\u975e\u95e8\u5176\u5b9e\u66f4\u591a\u7684\u88ab\u79f0\u4e3a inverter\uff0c\u800c\u975e NOT\u3002

    \u4f46\u662f\u7531\u4e8e\u662f\u7269\u7406\u5c42\u9762\u7684\u5b9e\u73b0\uff0c\u6240\u4ee5\u4f1a\u6709\u4e00\u4e9b\u903b\u8f91\u8fd0\u7b97\u5c42\u9762\u4e0d\u4f1a\u51fa\u73b0\u7684\u95ee\u9898\uff0c\u6bd4\u5982 \u5ef6\u65f6(delay)\u3002

    Source: https://en.wikipedia.org/wiki/Signal_propagation_delay#Electronics

    \u5ef6\u65f6\u7684\u957f\u77ed\u4e0e\u5f88\u591a\u56e0\u7d20\u6709\u5173\uff0c\u53d6\u51b3\u4e8e\u903b\u8f91\u95e8\u7684\u5b9e\u73b0\u6280\u672f\u3002\u800c\u4e14\u901a\u5e38\u6765\u8bf4\uff0c\u5bf9\u4e8e\u4e0d\u540c\u8fd0\u7b97\u53c2\u6570\uff0c\u5176\u5ef6\u65f6\u4e5f\u4f1a\u6709\u4e0d\u540c\u3002

    \u6b64\u5916\uff0c\u4e0e\u95e8\u548c\u6216\u95e8\u53ef\u80fd\u6709\u66f4\u591a\u7684\u8f93\u5165\u5f15\u811a\uff0c\u5982\u4e0b\uff1a

    \u81f3\u6b64\uff0c\u7ed9\u51fa\u4e86 AND, OR, NOT \u4e09\u4e2a\u95e8\u7684\u7b26\u53f7\u8868\u793a\uff0c\u7c7b\u4f3c\u4e0a\u4e00\u5c0f\u8282\u63d0\u5230\u7684\u90a3\u6837\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5229\u7528\u8fd9\u4e09\u4e2a\u57fa\u7840\u7684\u95e8\u7535\u8def\u6765\u6784\u6210\u5176\u4ed6\u7684\u95e8\u7535\u8def\uff08\u867d\u7136\u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u662f\u901a\u8fc7 NAND + NOT \u6765\u5b9e\u73b0 AND \u7684\uff09\u3002

    \u4e8e\u662f\u53c8\u5f15\u7533\u51fa\u4e00\u4e2a\u6982\u5ff5\u2014\u2014\u901a\u7528\u95e8(Universal Gate)\u3002\u4e00\u4e2a\u529f\u80fd\u5b8c\u5168\u7684\uff0c\u80fd\u591f\u8868\u793a\u5176\u4ed6\u6240\u6709\u95e8\u7684\u903b\u8f91\u95e8\u88ab\u79f0\u4e3a\u901a\u7528\u95e8\uff0c\u5728\u6211\u4eec\u5b66\u8fc7\u7684\u903b\u8f91\u95e8\u4e2d\uff0cNAND \u548c NOR \u90fd\u662f\u901a\u7528\u95e8\u3002

    \u63a8\u8350\u9605\u8bfb

    Universal Logic gates can be used to produce any other logic or Boolean function with the NAND and NOR gates being minimal

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5e03\u5c14\u4ee3\u6570","title":"\u5e03\u5c14\u4ee3\u6570","text":"

    literal ~ \u5b57\u9762\u91cf\uff0c\u4e5f\u5c31\u662f\u201c\u53d8\u91cf\u201d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b","title":"\u8fd0\u7b97\u5f8b","text":"

    \u8fd9\u5f20\u56fe\u7247\u603b\u7ed3\u4e86\u5e03\u5c14\u8fd0\u7b97\u4e2d\u7684\u8fd0\u7b97\u5f8b\uff0c\u4e2a\u4eba\u611f\u89c9\u6700\u9700\u8981\u5f3a\u5316\u8bb0\u5fc6\u7684\u662f 15 \u6761\uff0c\u56e0\u4e3a\u5e03\u5c14\u4ee3\u6570\u501f\u7528\u4e86\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\uff0c\u4f46\u7b2c 15 \u6761\u5728\u666e\u901a\u4ee3\u6570\u4e2d\u5e76\u4e0d\u6210\u7acb\uff0c\u6240\u4ee5\u5bf9\u4e8e\u4e60\u60ef\u8fd9\u5957\u7b26\u53f7\u7684\u4eba\u6765\u8bf4\u53ef\u80fd\u4e0d\u592a straightfoward\u3002

    \u5728\u8bb0\u5fc6\u8fd9\u5957\u8fd0\u7b97\u89c4\u5f8b\u7684\u65f6\u5019\uff0c\u6211\u4e2a\u4eba\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u4e00\u5b9a\u8981\u5efa\u7acb \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\u89c2\u5ff5\u3002\u6211\u4eec\u4e60\u60ef\u7528\u201c\u771f\u201d\u53bb\u7406\u89e3\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5982\u679c\u4f60\u4ee5\u201c\u5047\u201d\u4e3a\u4e3b\u4f53\u53bb\u5206\u6790\u8fd9\u4e24\u4e2a\u8fd0\u7b97\uff0c\u4f1a\u53d1\u73b0\u548c\u201c\u771f\u201d\u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u3002\u6362\u8a00\u4e4b\uff0c \u4e0e \u548c \u6216 \u662f\u5b8c\u5168\u5bf9\u79f0\u7684\u8fd0\u7b97\uff0c\u800c\u975e\u50cf\u4ed6\u4eec\u501f\u7528\u7684\u7b26\u53f7 \\(\\times\\) \u548c \\(+\\) \u90a3\u6837\u5b58\u5728\u975e\u5bf9\u79f0\u5173\u7cfb\u3002

    \u4f46\u662f\u8ba9\u8fd9\u4ef6\u4e8b\u53d8\u5f97\u53c8\u6ca1\u90a3\u4e48\u7b80\u5355\u7684\u4e8b\u60c5\u662f\uff0c\u867d\u7136 \u4e0e \u548c \u6216 \u662f\u5bf9\u7b49\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u501f\u7528\u666e\u901a\u4ee3\u6570\u7b26\u53f7\u4f53\u7cfb\u7684\u540c\u65f6\uff0c\u53c8\u4eba\u4e3a\u5730\u7ed9\u4ed6\u4eec\u6dfb\u52a0\u4e86\u4f18\u5148\u7ea7\uff08\u4f46\u662f\u8fd9\u4e5f\u662f\u5fc5\u8981\u7684\uff0c\u5426\u5219\u8868\u8fbe\u5f0f\u5c31\u4f1a\u5145\u6ee1\u62ec\u53f7\uff09\u3002

    \u4f18\u5148\u7ea7\u4ece\u9ad8\u5230\u4f4e\u4f9d\u6b21\u4e3a\uff1a

    1. \u62ec\u53f7 / ()\uff1b
    2. \u975e / NOT / \\(\\overline A\\)\uff1b
    3. \u4e0e / AND / \\(\\cdot\\)\uff1b
    4. \u6216 / OR / \\(+\\)\uff1b

    \u4e2a\u4eba\u611f\u89c9\uff0c\u8fd9\u4e00\u79cd\u601d\u8def\u5e76\u4e0d\u76f4\u89c9\uff0c\u5c24\u5176\u662f\u501f\u7528\u666e\u901a\u4ee3\u6570\u7684\u7b26\u53f7\u4f53\u7cfb\u4ee5\u540e\u66f4\u52a0\u6df7\u6dc6\uff0c\u6240\u4ee5\u53ef\u80fd\u9700\u8981\u4e00\u4e9b\u7ec3\u4e60\u6765\u6446\u8131\u8fd9\u4e9b\u201c\u523b\u677f\u5370\u8c61\u201d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8fd0\u7b97\u5f8b\u63a8\u5e7f","title":"\u8fd0\u7b97\u5f8b\u63a8\u5e7f","text":"

    \u9664\u6b64\u4e4b\u5916\uff0c\u4ece\u4e0a\u9762\u63d0\u5230\u7684\u8fd0\u7b97\u5f8b\u4e2d\u8fd8\u80fd\u63a8\u5e7f\u51fa\u5982\u4e0b\u51e0\u4e2a\u6a21\u578b\uff1a

    \u5bf9\u6bd4\u524d\u4e09\u4e2a\u548c\u540e\u4e09\u4e2a\uff0c\u6211\u4eec\u518d\u6b21\u53d1\u73b0\uff0c\u4e0e \u548c \u6216 \u5728\u903b\u8f91\u4e0a\u662f\u5bf9\u79f0\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5bf9\u5076\u6cd5\u5219","title":"\u5bf9\u5076\u6cd5\u5219","text":"

    \u5bf9\u5076\u6cd5\u5219(Duality Rule)\uff1a\u4e00\u4e2a\u8868\u8fbe\u5f0f\u7684 \u5bf9\u5076(dual) \u4e3a\uff0c\u5c06\u6240\u6709\u7684 \u4e0e \u548c \u6216 \u5bf9\u8c03\u5f97\u5230\u7684\u5f0f\u5b50\uff08\u6ce8\u610f\uff01\u9700\u8981\u4fdd\u8bc1\u53c2\u4e0e\u8fd0\u7b97\u7684\u7ed3\u6784\u4e0d\u80fd\u53d8\uff08\u662f\u201c\u5e26\u62ec\u53f7\u201d\u7684\u5b8f\u5c55\u5f00\uff09\uff0c\u6bd4\u5982 \u4e00\u822c\u60c5\u51b5\u4e0b \\(A\\cdot B\\) \u4f1a\u88ab\u5bf9\u5076\u4e3a \\((A+B)\\) \u4ee5\u4fdd\u8bc1\u8fd0\u7b97\u987a\u5e8f\uff09\u3002

    eg

    \u800c\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u9664\u975e\u67d0\u4e2a\u8868\u8fbe\u5f0f\u662f \u81ea\u5bf9\u5076(self-dual) \u7684\uff0c\u90a3\u4e48\u5b83\u7684\u8868\u73b0\u90fd\u4e0e\u539f\u8868\u8fbe\u5f0f\u4e0d\u540c\u3002

    \u5bf9\u5076\u8868\u8fbe\u5f0f\u5177\u6709\u5982\u4e0b\u6027\u8d28\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e92\u8865\u51fd\u6570","title":"\u4e92\u8865\u51fd\u6570","text":"

    \u4e00\u4e2a \u51fd\u6570\u7684\u4e92\u8865(Complement of a Function) \u6307\u7684\u662f\uff0c\u5c06\u5b83\u7684 \u5bf9\u5076\u51fd\u6570 \u4e2d\u6bcf\u4e00\u4e2a \u53d8\u91cf \u90fd\u53d6\u53cd\u5f97\u5230\u7684\u51fd\u6570\uff0c\u800c\u8be5\u51fd\u6570\u6b63\u597d\u7b49\u4e8e\u539f\u51fd\u6570\u7684 \u975e\u3002

    eg

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u66ff\u4ee3\u6cd5\u5219","title":"\u66ff\u4ee3\u6cd5\u5219","text":"

    \u66ff\u4ee3\u6cd5\u5219(Substitution Rules): \u5982\u679c\u5c06\u4e00\u4e2a\u7b49\u5f0f\u4e2d \u6240\u6709\u7684 \u67d0\u4e2a\u53d8\u91cf \u90fd\u66ff\u6362\u4e3a\u540c\u4e00\u4e2a\u8868\u8fbe\u5f0f\uff0c\u5219\u7b49\u5f0f\u4f9d\u7136\u6210\u7acb\u3002

    eg

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e00\u81f4\u6027\u5b9a\u7406","title":"\u4e00\u81f4\u6027\u5b9a\u7406","text":"

    \u5728\u7b80\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u7684\u65f6\u5019\uff0c\u4e00\u81f4\u6027\u5b9a\u7406(Consensus Theorem) \u4e5f\u5f88\u6709\u7528\uff1a

    \\[ XY+\\overline{X}Z+YZ=XY+\\overline{X}Z \\]

    \u5176\u8bc1\u660e\u7684\u7b2c\u4e00\u6b65\u662f\u8fd9\u6837\u7684\uff1a \\(XY+\\overline{X}Z+YZ=XY+\\overline{X}Z+(X+\\overline{X})YZ\\)\uff0c\u90a3\u540e\u9762\u5c31\u5f88\u7b80\u5355\u4e86\u3002\u672c\u8d28\u4e0a\u8fd9\u4e2a\u7b49\u5f0f\u662f\u5229\u7528\u4e86\u88c2\u9879\uff0c\u9700\u8981\u5c06\u5176\u4e2d\u6700\u672c\u8d28\u7684\u90e8\u5206\uff0c\u6700\u5c0f\u7684\u7c92\u5ea6\u7ed9\u88c2\u5f00\u6765\uff0c\u7136\u540e\u518d\u6162\u6162\u6d88\u6389\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","title":"\u6807\u51c6\u5f62\u5f0f\u4e0e\u89c4\u8303\u5f62\u5f0f","text":"

    \u7531\u4e8e\u672c\u8d28\u4e0a\u76f8\u7b49\u7684\u5e03\u5c14\u8868\u8fbe\u5f0f\u5b9e\u9645\u4e0a\u6709\u5f88\u591a\u79cd\u5199\u6cd5\uff0c\u800c\u4e14\u968f\u7740\u53d8\u91cf\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u4ed6\u4eec\u4e4b\u95f4\u7684\u6bd4\u8f83\u4f1a\u5f88\u56f0\u96be\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4e00\u79cd\u5f62\u5f0f\uff0c\u4f7f\u5f97\u6240\u6709\u76f8\u540c\u7684\u8868\u8fbe\u5f0f\u90fd\u80fd\u6bd4\u8f83\u65b9\u4fbf\u7684\u201c\u5316\u7b80\u201d\u4e3a\u540c\u4e00\u4e2a\u5f62\u5f0f\uff0c\u540c\u65f6\u4e5f\u80fd\u8fa8\u522b\u51fa\u4e24\u4e2a\u8868\u8fbe\u5f0f\u662f\u4e0d\u540c\u7684\u3002\u8fd9\u5c31\u5f15\u5165\u4e86 \u6807\u51c6\u5f62\u5f0f(Standard Forms)\uff0c\u5305\u62ec SOP \u548c POS\uff1b\u4ee5\u53ca \u89c4\u8303\u5f62\u5f0f(Canonical Forms)\uff0c\u5206\u522b\u4e3a \u6700\u5c0f\u9879\u4e4b\u548c(Sum of Minterms, SOM) \u548c \u6700\u5927\u9879\u4e4b\u79ef(Product of Maxterms, POM)\u3002

    \u4e3a\u4e86\u65b9\u4fbf\u63cf\u8ff0\uff0c\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u6211\u4eec\u5148\u7ed9\u51fa\u8fd9\u6837\u4e00\u5f20 \ud83c\udf30 \u771f\u503c\u8868\u3002

    \ud83c\udf30 Index X Y Z Output 0 / 000 0 0 0 0 1 / 001 0 0 1 0 2 / 010 0 1 0 1 3 / 011 0 1 1 0 4 / 100 1 0 0 1 5 / 101 1 0 1 1 6 / 110 1 1 0 0 7 / 111 1 1 1 1

    \u6570\u503c\u662f\u968f\u4fbf\u6413\u7684\uff0c\u8bf7\u7559\u610f\u4e3a\u4ec0\u4e48\u4e3a\u8981\u5728 Index \u7279\u5730\u5199\u51fa\u4e8c\u8fdb\u5236\u7684\u8868\u8ff0\u3002

    \u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u9700\u8981\u5f3a\u8c03\uff0c\u6211\u4eec\u5f15\u5165 SOM \u548c POM \u7684\u76ee\u7684\u662f\u5bfb\u627e\u4e00\u79cd\u6bd4\u8f83\u5178\u578b\u7684 \u8868\u8fbe\uff0c\u4f7f\u5f97\u4ed6\u4eec\u80fd\u591f \u786e\u5b9a \u4e00\u5f20\u771f\u503c\u8868\u3002\u5373\uff0c\u77e5\u9053\u8fd9\u79cd \u8868\u8fbe \u6211\u4eec\u5c31\u8db3\u591f\u5199\u51fa\u8fd9\u5f20\u771f\u503c\u8868\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5c0f\u9879\u4e4b\u548c-som","title":"\u6700\u5c0f\u9879\u4e4b\u548c SOM","text":"

    \u8bfe\u672c\u4e2d\u5bf9\u6700\u5c0f\u9879\u7684\u63cf\u8ff0\u662f\uff1a

    A product term in which all the variables appear exactly once, either complemented or uncomplemented, is called minterm.

    Its characteristic property is that it represents exactly one combination of binary variable values in the truth table.

    \u7528\u6211\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u5c31\u662f\u6311\u51fa\u771f\u503c\u8868\u4e2d\u6240\u6709\u7ed3\u679c\u662f 1 \u7684\u6700\u5c0f\u9879\uff08\u6bd4\u8f83\u6a21\u7cca\u4f46\u76f4\u89c2\uff0c\u6240\u4ee5\u8bf7\u5148\u56eb\u56f5\u541e\u67a3\uff0c\u6211\u5728\u201c\u8ffd\u52a0\u8bf4\u660e\u201d\u4f1a\u8fdb\u4e00\u6b65\u8bf4\u660e\uff09\u7136\u540e OR \u8d77\u6765\u3002\u663e\u7136\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u542b\u4e49\u5c31\u662f\uff0c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u4e86\u8fd9\u51e0\u4e2a\u201c\u6700\u5c0f\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f 1\uff0c\u7b26\u5408\u4e86 OR \u7684\u201c\u67091\u5f971\u201d\u7684\u89c4\u5219\u3002

    \u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(m_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5c0f\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

    \u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 1 \u7684\u9879\u6709\uff1a010 100 101 111 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(m_{2}=\\overline{X}Y\\overline{Z}, \\; m_{4}=X\\overline{Y}\\overline{Z}, \\; m_{5}=X\\overline{Y}Z, \\; m_{7}=XYZ\\)\uff0c\u8fd9\u4e9b\u53d8\u91cf\u8868\u8fbe\u5f0f\u90fd\u662f\u5f53\u4e14\u4ec5\u5f53\u53d8\u91cf\u7ec4\u5408\u4e3a\u5bf9\u5e94\u9879\u65f6\u624d\u4f1a\u53d6 1 \u7684\u8868\u8fbe\u5f0f\uff0c\u53ef\u4ee5\u8ba4\u4e3a\uff0c\u8fd9\u5199\u8868\u8fbe\u5f0f\u552f\u4e00\u8868\u8fbe\u4e86\u8fd9\u4e9b\u771f\u503c\u8868\u4e2d\u7684 1\u3002

    \u8ffd\u52a0\u8bf4\u660e\uff08\u7b80\u5355\uff0c\u4f46\u662f\u5efa\u8bae\u770b\u4e00\u770b\uff09

    \u6216\u8bb8\u60a8\u89c9\u5f97\u6700\u5c0f\u9879\u7684\u5f97\u5230\u975e\u5e38\u7684\u81ea\u7136\u4e14\u7b80\u5355\uff0c\u6211\u5efa\u8bae\u60a8\u4e5f\u5c1d\u8bd5\u7740\u770b\u4e00\u770b\u8ffd\u52a0\u8bf4\u660e\uff0c\u56e0\u4e3a\u8fd9\u5bf9\u7406\u89e3\u6700\u5927\u9879\u633a\u6709\u5e2e\u52a9\u7684\u3002

    \u90a3\u4e48\u4ec0\u4e48\u662f\u201c\u5217\u4e3e\u201d\u5462\uff1f\u8ba9\u6211\u4eec\u518d\u770b\u4e00\u773c\u4e0a\u9762\u5bf9\u6700\u5c0f\u9879\u4e4b\u548c\u7684\u63cf\u8ff0\uff1a\u201c\u4e00\u65e6\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5c0f\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u90a3\u4e48\u7ed3\u679c\u5c31\u662f\u771f\u201d\uff0c\u8ffd\u672c\u6eaf\u6e90\uff0c\u5728\u6700\u5c0f\u9879\u4e2d\uff0c\u6211\u4eec\u5c31\u9700\u8981\u505a\u5230\u53ea\u6709\u5f53\u4e00\u4e2a\u7535\u8def\u7684\u72b6\u6001\u662f\u7279\u5b9a\u7ec4\u5408\u65f6\uff0c\u5176\u8fd4\u56de\u503c\u4e3a 1\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(m_{5}=X\\overline{Y}Z\\)\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u4e00\u79cd\u66f4\u5570\u55e6\u7684\u65b9\u5f0f\u8868\u8fbe\u51fa\u6765\u662f\u8fd9\u6837\u7684\uff1a

    if(X == 1 && Y == 0 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

    \uff08\u5faa\u5e8f\u6e10\u8fdb\uff09\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u53d8\u5316\u4e3a\u8fd9\u6837\uff1a

    if(X == 1 && (!Y) == 1 && Z == 1) {\nOutput = 1;\n} else {\nOutput = 0;\n}\n

    \u5982\u679c\u4f60\u719f\u6089\u201c\u538b\u884c\u201d\u6280\u5de7\uff0c\u90a3\u4e48\u8fd9\u4e00\u6bb5\u90fd\u53ef\u4ee5\u5199\u6210\uff1a

    Output = (X == 1 && (!Y) == 1 && Z == 1);\n

    \u800c\u8fd9\u4e2a\u903b\u8f91\u8868\u8fbe\u5f0f\uff0c\u5b9e\u9645\u4e0a\u5df2\u7ecf\u548c \\(m_5=X\\overline{Y}Z\\) \u4e00\u6a21\u4e00\u6837\u4e86\u3002

    \u5728\u8fd9\u91cc\u7ed9\u51fa\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002\uff08\u8fd9\u91cc\u4e4b\u6240\u4ee5\u5199\u7684\u662f \\(f\\) \u800c\u4e0d\u662f 1\uff0c\u662f\u4e3a\u4e86\u7ed9\u4e4b\u540e\u5206\u6790 POM \u505a\u94fa\u57ab\uff0c\u5bf9\u4e8e POM\uff0c0 \u624d\u662f\u552f\u4e00\u8868\u8fbe\u7684\u7279\u5f81\u7ed3\u679c\u3002\uff09

    \u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 SOM\uff1a

    \\[ \\begin{array}{l} F(X,Y,Z) & = \\sum m(2,4,5,7) \\\\ & = m_2+m_4+m_5+m_7 \\\\ & = \\overline{X}Y\\overline{Z}+X\\overline{Y}\\,\\overline{Z}+X\\overline{Y}Z+XYZ \\end{array} \\]

    \u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5c0f\u9879\u4e4b\u548c\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 1 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u548c\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff08\u4e8b\u5b9e\u4e0a\u4e0d\u505a\u5316\u7b80\u7684\u8bdd\u4f60\u4e5f\u53ea\u80fd\u6ee1\u8db3\u4e00\u9879\u7684\u503c\u53d6\u5230 1\uff09\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 1\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6700\u5927\u9879\u4e4b\u79ef-pom","title":"\u6700\u5927\u9879\u4e4b\u79ef POM","text":"

    \u5c31\u50cf\u6211\u4e4b\u524d\u4e0d\u65ad\u4e0d\u65ad\u4e0d\u65ad\u5f3a\u8c03\u7684\uff0c\u6240\u8c13\u7684 1 \u548c 0 \u90fd\u53ea\u662f\u4eba\u4e3a\u5b9a\u4e49\u7684\uff0c\u6446\u8131\u6f5c\u610f\u8bc6\u91cc\u5bf9\u8fd9\u4e24\u8005\u4e4b\u4e00\u7684\u503e\u5411\uff08\u4f8b\u5982\u6211\u672c\u4eba\u5c31\u4e00\u76f4\u5f88\u503e\u5411\u4e8e\u4ee5 1 \u4e3a\u4e3b\u4f53\u7814\u7a76\u95ee\u9898\uff09\u4f1a\u5bf9\u7406\u89e3\u6700\u5927\u9879\u4e4b\u79ef\u548c\u903b\u8f91\u8868\u8fbe\u5f0f\u5316\u7b80\u5f88\u6709\u5e2e\u52a9\u3002

    \u800c\u6700\u5927\u9879\u4e4b\u79ef\u2014\u2014\u4ee5\u6211\u4e2a\u4eba\u7684\u611a\u89c1\u2014\u2014\u5c31\u662f\u4ee5 0 \u4e3a\u4e3b\u4f53\u6765\u7814\u7a76\u771f\u503c\u8868\u7684\u7279\u5f81\u7684\u3002

    \u8bfe\u672c\u4e2d\u5bf9\u6700\u5927\u9879\u7684\u63cf\u8ff0\u662f\uff1a

    A sum term that contains all the variables in complemented or uncomplemented form is called a maxterm.

    \u4e0e\u6700\u5c0f\u9879\u5bf9\u6bd4\uff0c\u65e0\u975e\u662f\u628a \"product term\" \u6362\u6210\u4e86 \"sum term\"\uff0c\u4e5f\u5c31\u662f\u628a AND \u6362\u6210\u4e86 OR\u3002

    \u800c\u6700\u5927\u9879\u4e4b\u79ef\uff0c\u5c31\u662f\u6311\u51fa\u6240\u6709\u7ed3\u679c\u4e3a 0 \u7684\u6700\u5927\u9879\uff08\u201c\u6311\u51fa\u201d\u7684\u5b9a\u4e49\u6211\u5df2\u7ecf\u5728 SOM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u7ed9\u51fa\uff0c\u5728 POM \u7684\u8ffd\u52a0\u8bf4\u660e\u4e2d\u6211\u8fd8\u4f1a\u518d\u4e00\u6b21\u63d0\u53ca\uff09\uff0c\u518d\u505a AND\u3002\u4ee5 1 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u662f\u201c\u90fd1\u51fa1\u201d\uff0c\u800c\u4ee5 0 \u4e3a\u4e3b\u4f53\u63cf\u8ff0 AND \u5219\u662f\u201c\u67090\u51fa0\u201d\uff0c\u8fd9\u4e0e OR \u7684\u201c\u67091\u51fa1\u201d\u4e5f\u662f\u9ad8\u5ea6\u5bf9\u79f0\u7684\uff08\u53cd\u4e4b\u4ea6\u7136\uff09\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u7684\u542b\u4e49\u662f\uff0c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u201c\u6700\u5927\u9879\u201d\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u3002

    \u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u4f7f\u7528\u7b26\u53f7 \\(M_{idx}\\) \u6765\u8868\u793a\u53d8\u91cf\u7ec4\u5408 \\(idx\\) \u662f\u4e00\u4e2a\u6700\u5927\u9879\uff0c\u5176\u4e2d \\(idx\\) \u8868\u793a\u63cf\u8ff0\u7684\u90a3\u4e00\u9879\u5728\u771f\u503c\u8868\u7684\u5e8f\u53f7\uff0c\u540c\u65f6\u8fd9\u4e2a\u4e0b\u6807\u7684\u4e8c\u8fdb\u5236\u4e5f\u80fd\u53cd\u6620\u51fa\u5b57\u9762\u91cf\u7684\u7ec4\u5408\u3002

    \u4f8b\u5982\uff0c\u5728 \ud83c\udf30 \u4e2d\uff0coutput \u4e3a 0 \u7684\u9879\u6709\uff1a000 001 011 110 \u8fd9\u56db\u9879\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u6311\u51fa\u6765\u7684\u6700\u5c0f\u9879\u8868\u8fbe\u5c31\u5206\u522b\u662f \\(M_{0}=X+Y+Z, \\; M_{1}=X+Y+\\overline{Z}, \\; M_{3}=X+\\overline{Y}+\\overline{Z}, \\; M_{6}=\\overline{X}+\\overline{Y}+Z\\)\u3002\u53ef\u4ee5\u68c0\u9a8c\uff0c\u53ea\u6709\u4ee3\u5165\u4ed6\u4eec\u5bf9\u5e94\u7684\u90a3\u4e00\u884c\u771f\u503c\u8868\u7ec4\u5408\u65f6\uff0c\u4ed6\u4eec\u624d\u4f1a\u5f97\u5230 0\u3002

    \u8ffd\u52a0\u8bf4\u660e

    \u540c\u6837\u7684\uff0c\u56de\u987e\u6700\u5927\u9879\u4e4b\u79ef\u7684\u63cf\u8ff0\uff1a\u201c\u5728\u6700\u5927\u9879\u4e4b\u79ef\u4e2d\uff0c\u53ea\u8981\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\u5339\u914d\u8fd9\u51e0\u4e2a\u2018\u6700\u5927\u9879\u2019\u7684\u5176\u4e2d\u4e00\u9879\uff0c\u6574\u4e2a\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u5c31\u4f1a\u53d8\u6210 0\u201d\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6bd4\u5982\uff0c\u5bf9\u4e8e \ud83c\udf30 \u4e2d\u7684 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\uff0c\u6211\u4eec\u53ef\u4ee5\u5982\u4e0b\u63cf\u8ff0\uff1a

    if(X == 1 && Y == 1 && Z == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

    \u56de\u987e\u6700\u5927\u9879\u7684\u76ee\u7684\u662f\u6ee1\u8db3\u8fd9\u4e2a\u5206\u652f\u6761\u4ef6\u7684\u60c5\u51b5\u4e0b\u8f93\u51fa 0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u9700\u8981\u8868\u8fbe (X == 1 && Y == 1 && Z == 0) \u8fd9\u4e2a\u903b\u8f91\u6761\u4ef6\u3002\u4f46\u7531\u4e8e\u6700\u5927\u9879\u7684\u5b9e\u73b0\u5f62\u5f0f\u662f OR\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06 && \u7684\u5f0f\u5b50\u4ee5 || \u7684\u5f62\u5f0f\u8868\u8fbe\u3002

    \u5f53\u7136\uff0c\u4f60\u53ef\u4ee5\u9009\u62e9\u4f7f\u7528\u5404\u79cd\u8fd0\u7b97\u5f8b\u6765\u5316\u7b80\uff0c\u4f46\u662f\u4e0d\u59a8\u60f3\u4e00\u60f3 AND \u548c OR \u7684\u8fd0\u7b97\u7279\u5f81\uff0c\u524d\u8005\u662f\u201c\u67090\u51fa0\u201d\uff0c\u540e\u8005\u662f\u201c\u67091\u51fa1\u201d\u3002\u800c\u5bf9\u4e8e AND \u6765\u8bf4\uff0c\u60f3\u8981\u505a\u5230\u6761\u4ef6\u7b5b\u9009\uff0c\u5c31\u9700\u8981\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 1\uff0c\u6700\u540e\u5982\u679c\u7b5b\u9009\u6210\u529f\u7ed3\u679c\u5c31\u662f 1\uff1b\u5bf9\u4e8e OR \u6765\u8bf4\uff0c\u5c31\u662f\u6bcf\u4e00\u4e2a\u6761\u4ef6\u90fd\u662f 0\uff0c\u5982\u679c \u7b5b\u9009\u6210\u529f \u7684\u7ed3\u679c\u5c31\u662f 0\u3002\u4e5f\u5c31\u662f\u8bf4\u5bf9\u4e8e\u6216\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8868\u793a\uff1a

    if((X == 0 || Y == 0 || (!Z) == 0) == 0){\nOutput = 0;\n} else {\nOutput = 1;\n}\n

    \u540c\u6837\u8fdb\u884c\u4e00\u4e0b\u538b\u884c\uff1a

    // It might be too complex.\nOutput = !((X == 0 || Y == 0 || (!Z) == 0) == 0);\n// So we can simplify it.\nOutput = (X == 0 || Y == 0 || (!Z) == 0);\n

    \u8fd9\u4e5f\u6b63\u5bf9\u5e94\u4e86 \\(M_6=\\overline{X}+\\overline{Y}+Z\\)\u3002

    \u518d\u6b21\u7ed9\u51fa\u8fd9\u4e2a\u603b\u7ed3\u6027\u7684\u8868\u8ff0\uff1a\u6240\u8c13\u7684\u201c\u6311\u51fa\u201d\uff0c\u5c31\u662f\u5bf9\u4e8e\u9009\u5b9a\u7684\u4e00\u4e2a\u5b57\u9762\u91cf\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u7ed9\u51fa\u4e00\u4e2a\u7279\u5b9a\u7684\u8868\u8fbe\u5f0f\uff0c\u4f7f\u5f97\u53ea\u6709\u8fd9\u79cd\u7ec4\u5408\u7684\u7ed3\u679c\u662f \\(f\\)\uff0c\u800c\u5bf9\u4e8e\u4efb\u4f55\u5176\u4ed6\u53d6\u503c\u7684\u7ec4\u5408\uff0c\u8be5\u8868\u8fbe\u5f0f\u7684\u7ed3\u679c\u90fd\u662f \\(\\overline{f}\\)\uff0c\u5373\u5b9e\u73b0\u4e86\u8be5\u8868\u8fbe\u5f0f\u80fd \u552f\u4e00\u8868\u8fbe \u8fd9\u4e2a\u53d6\u503c\u7ec4\u5408\u3002

    \u81f3\u6b64\uff0c\u6211\u4eec\u5f97\u5230\u4e86 \ud83c\udf30 \u6240\u5bf9\u5e94\u7684 POM\uff1a

    \\[ \\begin{aligned} F(X,Y,Z) & = \\prod M(0,1,3,6) \\\\ & = M_0M_1M_3M_6 \\\\ & = (X+Y+Z)(X+Y+\\overline{Z})(X+\\overline{Y}+\\overline{Z})(\\overline{X}+\\overline{Y}+Z) \\end{aligned} \\]

    \u540c\u6837\u518d\u6b21\u5f52\u7eb3\uff0c\u4f7f\u7528\u901a\u4fd7\u7684\u8bdd\u6765\u8bf4\uff0c\u6700\u5927\u9879\u4e4b\u79ef\u66f4\u50cf\u662f\u201c\u679a\u4e3e\u4e86\u6240\u6709 0 \u7684\u53ef\u80fd\u201d\uff0c\u53ea\u8981\u5339\u914d\u4e86\u8fd9\u4e2a\u201c\u79ef\u201d\u4e2d\u7684\u67d0\u4e00\u9879\uff0c\u8868\u8fbe\u5f0f\u7684\u503c\u5c31\u4f1a\u53d8\u6210 0\uff1b\u800c\u4e00\u4e2a\u90fd\u4e0d\u5339\u914d\u7684\uff0c\u81ea\u7136\u5c31\u53ea\u80fd\u5f97\u5230 1\u3002

    \u4e0e\u6700\u5c0f\u9879\u76f8\u6bd4\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u7684 1 \u7684\u53ef\u80fd\uff0c\u4e00\u4e2a\u679a\u4e3e\u4e86\u6240\u6709\u662f 0 \u7684\u53ef\u80fd\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u503c\u8868\u8fbe\u5f0f\u6765\u8bf4\uff0c\u4e24\u79cd \u8868\u8fbe \u90fd\u662f\u5145\u8981\u7684\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u8fd8\u80fd\u53d1\u73b0\uff1a

    \u4f8b\u5982\uff1a\\(M_5 = \\overline{X} + Y + \\overline{Z} = \\overline{ X\\overline{Y}Z } = \\overline{m}_5\\)

    \u5173\u4e8e\u8fd9\u4e2a\u53d1\u73b0\u7684\u66f4\u591a\u7684\u4f8b\u5b50\u548c\u8bf4\u660e\uff0c\u53ef\u4ee5\u770b\u4e0b\u9762\u7684\u7b2c\u4e00\u4e2a\u7ec3\u4e60\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ec3\u4e60","title":"\u7ec3\u4e60","text":"

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u901a\u8fc7\u4e00\u4e9b\u4f8b\u5b50\u6765\u8fdb\u4e00\u6b65\u5f3a\u5316\u8fd9\u4e9b\u7406\u89e3\uff0c\u5e76\u4e14\u6316\u6398\u4e00\u4e9b\u795e\u5947\u7684\u7279\u6027\u3002

    \u9898\u9762\u7b54\u6848

    \u8bf7\u5206\u522b\u5199\u51fa\u5982\u4e0b\u771f\u503c\u8868\u4e2d \\(F\\) \u548c \\(\\overline{F}\\) \u7684 SOM \u548c POM\u3002

    \u7b54\u6848\uff1a \\begin{array}{l} \\overline{F}(X,Y,Z) & = \\sum m(1,3,4,6) \\\\ & = \\overline{X}\\,\\overline{Y}Z + \\overline{X}YZ + X\\overline{Y}\\,\\overline{Z} + XY\\overline{Z} \\\\ & = \\prod M(0,2,5,7) \\\\ & = (X+Y+Z)(X+\\overline{Y}+Z)(\\overline{X}+Y+\\overline{Z})(\\overline{X}+\\overline{Y}+\\overline{Z}) \\end{array} \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\u4e00\u4ef6\u5f88\u6709\u610f\u601d\u7684\u4e8b\u60c5\uff0c\\(F\\) \u7684 SOM \u7684\u4e0b\u6807\u4e0e \\(\\overline{F}\\) \u7684 POM \u7684\u4e0b\u6807\u662f\u4e00\u6837\u7684\uff1b\u5f53\u7136\u5bf9\u4e8e \\(F\\) \u7684 POM \u548c \\(\\overline{F}\\) \u7684 SOM \u4e5f\u662f\u4e00\u6837\u7684\u3002\u8fd9\u53c8\u5370\u8bc1\u4e86\u5bf9\u79f0\u6027\u3002

    \u4e4b\u540e\u7684\u7ec3\u4e60\u7b49\u6211\u505a\u4e86\u518d\u6dfb\u52a0x \u5982\u679c\u505a\u4e86\u7684\u8bddx \ud83d\ude0b

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","title":"\u7535\u8def\u5b9e\u73b0\u4e0e\u4f18\u5316","text":"

    \u5f15\u5165

    \u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u6807\u51c6\u5f62\u5f0f\u6765\u5f97\u5230\u5bf9\u5e94\u7684\u7535\u8def\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u60c5\u51b5\u4e2d\uff0c\u8fd9\u6837\u505a\u4f1a\u5bfc\u81f4\u6210\u672c\u8fc7\u9ad8\u4ee5\u53ca\u7535\u8def\u590d\u6742\uff08\u56e0\u4e3a\u95e8\u592a\u591a\u4e86\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5bf9\u7535\u8def\u8fdb\u884c\u4f18\u5316\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u4ecb\u7ecd\u901a\u8fc7 \u5361\u8bfa\u56fe(Karnaugh map) \u6765\u4f18\u5316\u903b\u8f91\u7535\u8def\u7684\u65b9\u6cd5\u3002

    \u4e0d\u8fc7\u518d\u5f00\u59cb\u201c\u4f18\u5316\u201d\u7684\u8bdd\u9898\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u4ec0\u4e48\u662f\u201c\u4f18\u201d\uff0c\u4e5f\u5c31\u662f\u7ed9\u51fa\u4e00\u4e2a\u7535\u8def\u6210\u672c\u7684\u8861\u91cf\u4f9d\u636e\uff0c\u5373 \u6210\u672c\u6807\u51c6(cost criteria)\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6210\u672c\u6807\u51c6","title":"\u6210\u672c\u6807\u51c6","text":"

    \u5728\u6210\u672c\u6807\u51c6\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u7684\u4e3b\u8981\u6709\u4e09\u79cd\u6807\u51c6\uff0c\u5206\u522b\u662f\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","title":"\u6309\u7167\u5b57\u9762\u91cf\u5b57\u9762\u91cf\u8ba1","text":"

    \u5f88\u76f4\u767d\uff0c\u5c31\u662f\u6309\u7167\u8868\u8fbe\u5f0f\u4e2d\u6709\u591a\u5c11\u5b57\u9762\u91cf\u6765\u8ba1\u7b97\uff0c\u4f8b\u5982\uff1a

    \u53ef\u4ee5\u60f3\u8c61\uff0c\u867d\u7136\u8fd9\u79cd\u8ba1\u7b97\u65b9\u6cd5\u975e\u5e38\u7684\u7b80\u5355\uff0c\u4f46\u662f\u611f\u89c9\u4e0d\u592a\u9760\u8c31\u3002\u6bd4\u5982\uff0c\u540e\u9762\u4e24\u4e2a\u4f8b\u5b50\uff0c\u867d\u7136\u4ed6\u4eec\u7684 literal cost \u662f\u4e00\u6837\u7684\uff0c\u4f46\u662f\u663e\u7136\u5f00\u9500\u4e0d\u592a\u4e00\u6837\uff08\u56e0\u4e3a\u4e00\u4e2a\u662f 3+3 \u4e00\u4e2a\u662f 2+2+2\uff09\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u5408\u9002\u7684\u8ba1\u7b97\u65b9\u6cd5\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u6309\u95e8\u8f93\u5165\u8ba1","title":"\u6309\u95e8\u8f93\u5165\u8ba1","text":"

    \u6309\u7167\u95e8\u8f93\u5165\u8ba1\u5c31\u662f\u6309\u7167\u903b\u8f91\u95e8\u8f93\u5165\u5f15\u811a\u7684\u603b\u4e2a\u6570\u6765\u8ba1\u7b97\uff0c\u8fd9\u91cc\u7684\u8f93\u5165\u5e76\u4e0d\u4ec5\u4ec5\u662f\u76f4\u63a5\u6765\u81ea\u4e8e\u5b57\u9762\u91cf\u8f93\u5165\u7684\u90a3\u4e9b\u5f15\u811a\uff0c\u4e5f\u5305\u62ec\u5b57\u9762\u91cf\u505a\u8fd0\u7b97\u540e\u5f97\u5230\u7684\u7ed3\u679c\u4f5c\u4e3a\u8f93\u5165\u4f20\u5165\u4e0b\u4e00\u7ea7\u903b\u8f91\u95e8\u7684\u5f15\u811a\u3002

    \u6ce8\u610f

    \u867d\u7136\u975e\u95e8\u4e5f\u662f\u95e8\uff0c\u4f46\u662f\u6211\u4eec\u901a\u5e38\u4e0d\u628a\u975e\u95e8\u76f4\u63a5\u8ba1\u5165 gate-input cost\uff0c\u6240\u4ee5\u63a5\u4e0b\u6765\u63d0\u5230\u7684\u201c\u8f93\u5165\u5f15\u811a\u201d\u9ed8\u8ba4\u662f\u4e0d\u5305\u542b\u975e\u95e8\u7684\u8f93\u5165\u5f15\u811a\u7684\u3002

    \u4f8b\u5982\u8fd9\u5f20\u5bf9\u5e94\u8868\u8fbe\u5f0f \\(F = A+BC+\\overline{B}\\,\\overline{C}\\) \u7684\u56fe\u4e2d\uff1a

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u4e00\u5171\u6709 5 + 2 = 7 \u4e2a\u8f93\u5165\u5f15\u811a\uff0c\u4ee5\u53ca 2 \u4e2a\u975e\u95e8\u8f93\u5165\u5f15\u811a\u3002

    \u4ece\u8868\u8fbe\u5f0f\u6765\u770b\uff0c\u5b83\u53ef\u4ee5\u770b\u4f5c\u662f\u6bcf\u4e00\u5c42\u8fd0\u7b97\u7684\u53c2\u6570\u6570\u91cf\u6c42\u548c\uff0c\u4e0d\u8fc7\u6211\u4eec\u5ffd\u7565\u975e\u95e8\u3002

    \u4f8b\u5982\uff0c\u5f0f\u5b50 \\(F=AB+\\overline{B}C+C\\overline{D}\\) \u4e2d\uff0c\u6700\u9876\u5c42\u7684\u8fd0\u7b97\u662f\u4e00\u4e2a\u4e09\u8f93\u5165\u6216\u8fd0\u7b97\uff0c\u6240\u4ee5\u6709 3 \u4e2a\u8f93\u5165\uff1b\u63a5\u4e0b\u6765\u6709\u4e09\u4e2a\u4e8c\u8f93\u5165\u4e0e\u8fd0\u7b97\uff0c\u6240\u4ee5\u5404\u8ba1 2 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171 2 * 3 = 6 \u4e2a\u8f93\u5165\uff0c\u4e00\u5171\u662f 9 \u4e2a\u8f93\u5165\u3002

    \u5f53\u7136\uff0c\u5b9e\u9645\u4e0a\u4ece\u5e95\u5c42\u5f80\u4e0a\u6570\u66f4\u65b9\u4fbf\uff1a

    \u603b\u4e4b\uff0c\u5c31\u662f\u7c7b\u4f3c\u4e8e\u5728\u505a\u7b97\u5f0f\u5316\u7b80\uff0c\u6bcf\u505a\u4e00\u6b21\u5316\u7b80\u90fd\u9700\u8981\u8ba1\u5165\u4e00\u6b21\u64cd\u4f5c\u6570\u7684\u6570\u91cf\u3002

    \u800c\u5bf9\u4e8e gate-input cost with NOTs\uff0c\u53ea\u8981\u518d\u989d\u5916\u8ba1\u5165\u975e\u95e8\u7684\u8f93\u5165\u5373\u53ef\u3002\u4f8b\u5982\u4e0a\u9762\u90a3\u4e2a\u5f0f\u5b50\uff1a

    \u6ce8\u610f

    \u5982\u679c\u51fa\u73b0\u4e86\u6bd4\u5982 \\(F=\\overline{A}B+\\overline{A}C\\) \u7684\u60c5\u51b5\uff0c\u975e\u95e8\u53ea\u9700\u8981\u8ba1 1 \u4e2a\uff0c\u56e0\u4e3a\u6211\u4eec\u5b9e\u9645\u4e0a\u662f\u628a\u975e\u4e86\u4ee5\u540e\u7684\u4e1c\u897f\u5f53\u4f5c\u4e86\u4e00\u4e2a\u5b57\u9762\u91cf\u518d\u7528\u7684\uff0c\u5728\u5b9e\u9645\u7535\u8def\u4e2d\uff0c\u6211\u4eec\u53ea\u9700\u8981\u975e\u4e00\u6b21\uff0c\u4e4b\u540e\u53ea\u9700\u8981\u628a\u8fd9\u4e2a\u8f93\u51fa\u503c\u62ff\u8d70\u53bb\u7528\u5c31\u884c\u3002

    \u63a5\u4e0b\u6765\u653e\u51e0\u9053\u4f8b\u9898\u3002

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=ABC+\\overline{A}\\,\\overline{B}\\,\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=(A+\\overline{C})(\\overline{B}+C)(\\overline{A}+B)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=(A+\\overline{B})(A+D)(B+C+\\overline{D})(\\overline{B}+\\overline{C}+D)\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u8fd9\u91cc\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=BD+A\\overline{B}C+A\\overline{B}\\,\\overline{D}+AB\\overline{C}\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u91cd\u590d\u7684\u88ab\u975e\u4e86\u7684\u5b57\u9762\u91cf\uff0c\u4e0d\u8981\u91cd\u590d\u8ba1\u7b97\uff01

    \u9898\u9762\u7b54\u6848

    \u8ba1\u7b97 \\(F=\\overline{A}\\,\\overline{C}(B+\\overline{D})+AC(B+\\overline{D})\\) \u7684 \\(L\\)\u3001\\(G\\)\u3001\\(GN\\)\u3002

    \u8fd9\u91cc\u540c\u6837\u9700\u8981\u6ce8\u610f\uff0c\u51fa\u73b0\u4e86\u6bd4\u8f83\u590d\u6742\u7684\u903b\u8f91\u8fd0\u7b97\uff0c\u4ee5 \\(\\overline{A}\\,\\overline{C}(B+\\overline{D})\\) \u4e3a\u4f8b\uff0c\u81ea\u9876\u5411\u4e0b\u662f\uff1a\u24f5\u4e09\u8f93\u5165\u4e0e\u95e8\uff0c\u24f6\u4e8c\u8f93\u5165\u6216\u95e8\uff1b\u6240\u4ee5\u5e94\u8be5\u662f \\(1^{\\overline{A}} + 1^{\\overline{C}} + 1^{B} + 1^{\\overline{D}} + 1^{B+\\overline{D}} + 1^{\\overline{A}\\,\\overline{C}(B+\\overline{D})}\\)\uff0c\u5373 6\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe","title":"\u5361\u8bfa\u56fe","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u601d\u60f3","title":"\u5361\u8bfa\u56fe\u7684\u601d\u60f3","text":"

    \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u5f0f\u6700\u76f4\u767d\u7684\u601d\u60f3\u5c31\u662f\u51cf\u5c11\u95e8\u7535\u8def\uff0c\u4e5f\u5c31\u662f\u53bb\u51cf\u5c11 gate-input cost\u3002\u90a3\u4e48\u8981\u5982\u4f55\u505a\u5462\uff1f

    \u6211\u4eec\u8003\u8651\u5230\u903b\u8f91\u8fd0\u7b97\u5f8b\u4e2d\u7684\u8fd9\u4e2a\u63a8\u5e7f\uff1a\\(XY+X\\overline{Y}=X(Y+\\overline{Y})=X\\)\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u4e24\u4e2a\u6700\u5c0f\u9879\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u90a3\u4e48\u4ed6\u4eec\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u5f53\u7136\uff0c\u5bf9\u79f0\u7684\uff0c\u6839\u636e\\((X+\\overline{Y})(X+Y)=X+Y\\overline{Y}=X\\)\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5f97\u5230\u8fd9\u4e2a\u7ed3\u8bba\u5bf9\u6700\u5927\u9879\u4e5f\u6210\u7acb\u3002

    \u662f\u4e0d\u662f\u89c9\u5f97\u201c\u53ea\u5dee\u4e00\u4e2a\u201d\u5f88\u8033\u719f\uff1f\u662f\u7684\uff01\u6211\u4eec\u60f3\u5230\u4e86\u683c\u96f7\u7801\uff01\u5047\u8bbe\u6211\u4eec\u5c06 n \u4e2a\u5b57\u9762\u91cf\u6392\u5217\u6210\u4e00\u4e2a n bits \u7684\u5411\u91cf\uff0c\u90a3\u4e48\u53ea\u9700\u8981\u6309\u7167\u683c\u96f7\u7801\u6392\u5e8f\uff0c\u4e00\u65e6\u53d1\u73b0\u6709\u76f8\u90bb\u7684\u6700\u5c0f\u9879\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5408\u5e76\u4ed6\u4eec\u3002

    \u4f46\u8fd9\u8fd8\u4e0d\u591f\u5145\u5206\uff0c\u4f8b\u5982\u5728\u4e00\u4e2a\u6709\u4e09\u4e2a\u5b57\u9762\u91cf\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e2d\uff0c\u201c\u4e0e\u4e00\u4e2a\u8868\u8fbe\u5f0f\u76f8\u90bb\u201d\u7684\u8868\u8fbe\u5f0f\u5176\u5b9e\u6709\u4e09\u4e2a\uff0c\u4f46\u662f\u7528\u7ebf\u6027\u7684\u8868\u793a\u65b9\u6cd5\u53c8\u6ca1\u6cd5\u5f88\u597d\u7684\u8868\u793a\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u60f3\u5230\u5c06\u5b83\u5199\u6210\u4e00\u5f20\u4e8c\u7ef4\u7684\u8868\uff0c\u5373\u5c06\u5b57\u9762\u91cf\u62c6\u6210\u4e24\u7ec4 bit \u5411\u91cf\uff0c\u5404\u81ea\u6309\u7167\u683c\u96f7\u7801\u6392\u5217\uff0c\u5f62\u6210\u4e00\u5f20\u4e8c\u7ef4\u8868\uff0c\u8fd9\u5c31\u662f \u5361\u8bfa\u56fe(Karnaugh Map)\uff0c\u4e5f\u53eb K-map\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4efb\u610f\u4e24\u4e2a\u76f8\u90bb\u7684\u683c\u5b50\u90fd\u53ea\u5dee\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u975e\uff0c\u800c\u4e14\u662f\u5145\u8981\u7684\uff0c\u5373\u6240\u6709\u201c\u76f8\u90bb\u201d\u90fd\u53ef\u4ee5\u5728\u8fd9\u5f20\u56fe\u8868\u73b0\u51fa\u6765\u3002

    \u8bf4\u660e

    \u7531\u4e8e\u683c\u96f7\u7801\u7684\u6027\u8d28\u662f\u4e00\u4e2a\u5728\u201c\u6ee1\u201d\u72b6\u6001\u4e0b \u73af\u72b6\u6210\u7acb \u7684\u6027\u8d28\uff0c\u6240\u4ee5\u5361\u8bfa\u56fe\u4e5f\u9700\u8981\u7528\u201c\u73af\u72b6\u201d\u7684\u601d\u8def\u53bb\u770b\uff0c\u8fd9\u91cc\u53ef\u4ee5\u8054\u60f3\u4e00\u4e0b\u884c\u5217\u5f0f\u7684\u5f62\u8c61\u5316\u8ba1\u7b97\u65b9\u6cd5\uff0c\u5c06\u8fd9\u5f20\u8868\u5f53\u4f5c\u4e00\u4e2a\u65e0\u9650\u6269\u5c55\u7684\u8868\u683c\u3002

    \u601d\u8003\u9898

    \u5728\u8fd9\u91cc\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u7740\u611f\u53d7\u4e00\u4e0b\u4e24\u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\u4e0b\uff0c\u5373\u5b9e\u9645\u4e0a\u201c\u76f8\u90bb\u4e5f\u53ea\u67092\u4e2a\u201d\u7684\u60c5\u51b5\u4e0b\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u3002\u4e8b\u5b9e\u4e0a\uff0c\u4e09\u4e2a\u5b57\u9762\u91cf\u4e5f\u53ea\u6709\u201c3\u4e2a\u76f8\u90bb\u201d\uff0c\u4f46\u662f\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u7528\u660e\u660e\u6709\u201c4\u4e2a\u76f8\u90bb\u201d\u7684\u5361\u8bfa\u56fe\u6765\u5b9e\u73b0\u5462\uff1f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","title":"\u5361\u8bfa\u56fe\u7684\u5c40\u9650\u6027","text":"

    \u7136\u800c\uff0c\u4e0a\u9762\u7684\u8bf4\u6cd5\u5176\u5b9e\u5f88\u7275\u5f3a\u3002\u56e0\u4e3a\u4e00\u5f20\u4e8c\u7ef4\u8868\u4e2d\uff0c\u80fd\u4e0e\u4e00\u4e2a\u5143\u7d20\u76f8\u90bb\u7684\u5143\u7d20\u6700\u591a\u53ea\u6709\u56db\u4e2a\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u6491\u6b7b\u4e5f\u53ea\u80fd\u7528\u5361\u8bfa\u56fe\u8868\u793a 4 \u4e2a\u5b57\u9762\u91cf\u7684\u60c5\u51b5\uff08\u5f53\u7136\u66f4\u591a\u7684\u53d8\u91cf\u4e5f\u6709\u5904\u7406\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u591a\u5c11\u6709\u70b9\u9ebb\u70e6\u4e86\uff09\u3002\u56e0\u6b64\uff0c\u5b9e\u9645\u4e0a\u5361\u8bfa\u56fe\u53ea\u80fd\u7528\u4e8e\u5316\u7b80\u975e\u5e38\u7b80\u5355\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u3002

    cm \u8001\u5e08\u5982\u662f\u8bf4

    \u66f4\u591a\u60c5\u51b5\u4e0b\uff0c\u5361\u8bfa\u56fe\u5b9e\u9645\u4e0a\u53ea\u9002\u5408\u6211\u4eec\u505a\u9898\u3002\u4f46\u662f\u5176\u601d\u8def\u662f\u975e\u5e38\u6709\u610f\u601d\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","title":"\u5361\u8bfa\u56fe\u7684\u7ed3\u6784","text":"

    \u8fd9\u91cc\u6211\u4eec\u4ee5 3 \u5143\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e3a\u4f8b\uff0c2 \u5143\u548c 4 \u5143\u7684\u601d\u8def\u662f\u4e00\u6837\u7684\u3002

    \u540c\u6837\uff0c\u4e3e\u4e00\u4e2a \ud83c\udf30 \uff1a\\(F(X,Y,Z) = \\sum m(2,3,4,5)\\)

    \u9996\u5148\u6211\u4eec\u6309\u7167\u6bd4\u7279\u5411\u91cf\u7684\u5f62\u5f0f\u628a\u6700\u5c0f\u9879\u5199\u51fa\u6765\uff1a

    \u503c X Y Z 2 0 1 0 3 0 1 1 4 1 0 0 5 1 0 1

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u7ed8\u5236\u5361\u8bfa\u56fe\uff0c\u6211\u4eec\u5c06 bit \u5411\u91cf [x, y, z] \u62c6\u6210 [x] \u548c [y, z] \u505a\u5982\u4e0b\u8868\u683c\uff1a

    yz = 00 yz = 01 yz = 11 yz = 10 x = 0 0 0 1 1 x = 1 1 1 0 0

    \u53e6\u5916\u4e00\u79cd\u6807\u6ce8\u8868\u683c\u7684\u65b9\u5f0f\u662f\u8fd9\u6837\uff0c\u5b83\u53ef\u80fd\u66f4\u6e05\u6670\uff1a

    \u4f46\u662f\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u683c\u96f7\u7801\u3002

    4 \u5143\u5b57\u9762\u91cf\u7684\u5361\u8bfa\u56fe\u5219\u957f\u8fd9\u4e2a\u6837\u5b50\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","title":"\u4f7f\u7528\u5361\u8bfa\u56fe\u4f18\u5316","text":"

    \u5df2\u7ecf\u8bb2\u4e86\u601d\u60f3\u548c\u5361\u8bfa\u56fe\u7684\u7ed3\u6784\uff0c\u90a3\u4e48\u5230\u5e95\u8981\u5982\u4f55\u5229\u7528\u5361\u8bfa\u56fe\u8fdb\u884c\u4f18\u5316\u5462\uff1f

    \u8ba9\u6211\u4eec\u56de\u987e\u4f18\u5316\u7684\u65b9\u6cd5\uff0c\u5373\u5408\u5e76\u76f8\u90bb\u4e24\u9879\uff0c\u4e5f\u5c31\u662f\u627e\u5230\u5361\u8bfa\u56fe\u4e2d\u76f8\u90bb\u7684\u90e8\u5206\u3002\u4f46\u662f\u8fd9\u4e0d\u591f\uff0c\u6211\u4eec\u8fd8\u8981\u601d\u8003\u662f\u4e0d\u662f\u80fd\u5408\u5e76\u5df2\u7ecf\u76f8\u90bb\u7684\u90e8\u5206\uff0c\u6bd4\u5982\uff1a

    \u6211\u4eec\u901a\u8fc7\u5361\u8bfa\u56fe\uff0c\u9996\u5148\u5408\u5e76\u4e86 \\(WXYZ\\) \u548c \\(WXY\\overline{Z}\\)\uff0c\\(WX\\overline{Y}Z\\) \u548c \\(WX\\overline{Y}\\,\\overline{Z}\\)\uff0c\u5206\u522b\u5f97\u5230\u4e86 \\(WXY\\) \u548c \\(WX\\overline{Y}\\)\uff0c\u663e\u7136\u8fd9\u4e24\u4e2a\u4e1c\u897f\u4e5f\u662f\u53ef\u4ee5\u5408\u5e76\u7684\uff1b\u800c\u5728\u5361\u8bfa\u56fe\u4e0a\uff0c\u8fd9\u8868\u73b0\u4e3a\u4e24\u4e2a\u76f8\u90bb\u7684 1*2 \u7684\u77e9\u5f62\u3002

    \u603b\u800c\u8a00\u4e4b\uff0c\u8fd9\u79cd\u8fed\u4ee3\u5408\u5e76\u7684\u884c\u4e3a\u6700\u7ec8\u53ef\u4ee5\u5212\u5f52\u4e3a\u8fd9\u6837\u4e00\u4e2a\u884c\u4e3a\uff1a

    \u6211\u4eec\u5728\u5361\u8bfa\u56fe\u4e2d\u5bfb\u627e\u82e5\u5e72 \u6781\u5927 \u7684 2 \u5e42\u77e9\u5f62\uff0c\u5373\u5143\u7d20\u4e2a\u6570\u4e3a 2 \u7684\u5e42\u6b21\uff08\u81ea\u7136\u8fb9\u957f\u4e5f\u90fd\u4e3a 2 \u7684\u5e42\u6b21\uff09\u7684\u77e9\u5f62\uff0c\u800c\u6bcf\u4e00\u4e2a\u77e9\u5f62\u6240\u8986\u76d6\u7684\u5143\u7d20\u90fd\u5e94\u8be5\u662f \u6700\u5c0f\u9879/\u6700\u5927\u9879\uff08\u4e00\u822c\u90fd\u662f\u505a\u6700\u5c0f\u9879\uff09\u3002\u9700\u8981\u6ce8\u610f\uff0c\u201c\u5faa\u73af\u201d\u7684\u6027\u8d28\u4ecd\u7136\u6ee1\u8db3\uff0c\u5373\u7b2c\u4e00\u5217\u548c\u6700\u540e\u4e00\u5217\uff0c\u7b2c\u4e00\u884c\u548c\u6700\u540e\u4e00\u884c\u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u76f8\u90bb\u7684\u3002

    \u4f8b\u5982\uff1a

    \u4f8b\u5982\uff1a

    \u518d\u4f8b\u5982\uff1a

    \u90fd\u662f\u5408\u7406\u7684\u5361\u8bfa\u56fe\u5212\u5206\u3002

    \u5728\u5f97\u5230\u8fd9\u4e9b\u5212\u5206\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u5c06\u8fd9\u4e9b\u9879\u62ce\u51fa\u6765\uff0c\u5199\u51fa\u5b83\u4eec\u7684\u8868\u8fbe\u5f0f\u3002

    \u800c\u81f3\u4e8e\u5982\u4f55\u62ce\u51fa\u6765\u2014\u2014\u4e0d\u96be\u53d1\u73b0\uff0c\u5982\u679c\u4e00\u4e2a\u65b9\u6846\u4e2d\uff0c\u67d0\u4e00\u4e2a\u5b57\u9762\u91cf\u7684\u503c\u65e2\u53ef\u4ee5\u662f 0\uff0c\u53c8\u53ef\u4ee5\u662f 1 \u65f6\uff08\u8fd9\u91cc\u6307\u7684\u662f\u8f93\u5165\u7684\u503c\uff0c\u5e76\u975e\u8f93\u51fa\u7ed3\u679c\uff09\uff0c\u5728\u8fd9\u4e2a\u4f18\u5316\u9879\u7684\u7ed3\u679c\u4e2d\u5c31\u53ef\u4ee5\u4e0d\u7528\u5199\u51fa\u8fd9\u4e2a\u5b57\u9762\u91cf\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u8fd9\u4e2a\u5b57\u9762\u91cf \\(X\\) \u7684\u503c\u90fd\u662f 0\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(\\overline{X}\\)\uff0c\u5982\u679c\u90fd\u662f 1\uff0c\u5219\u7ed3\u679c\u4e2d\u4f1a\u5305\u542b \\(X\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u5229\u7528\u5361\u8bfa\u56fe\u4f18\u5316 \\(F(X,Y,Z) = \\sum m(0,1,2,4,6,7)\\) \u7684\u7ed3\u679c\u3002

    \u753b\u51fa\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u5bf9\u5e94\u7684\u5361\u8bfa\u56fe\uff1a

    \u7136\u540e\u5212\u51fa\u5176\u4e2d\u7684\u6781\u5927\u6700\u5c0f\u9879\u4f18\u5316\u9879\uff1a

    \u5199\u51fa\u6765\u662f\uff1a

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u4f18\u5316\u7ed3\u679c\u662f \\(F = \\overline{X}\\,\\overline{Y} + \\overline{Z} + XY\\)

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e0d\u5b9a\u9879","title":"\u4e0d\u5b9a\u9879","text":"

    \u63a8\u8350\u9605\u8bfb

    https://www.geeksforgeeks.org/dont-care-x-conditions-in-k-maps/

    \u4e0d\u5b9a\u9879(Don't Cares) \u6307\u7684\u662f\u9700\u8981\u5316\u7b80\u7684\u903b\u8f91\u51fd\u6570\u4e2d\uff0c\u6ca1\u6709\u7ed9\u51fa\u5b9a\u4e49\u7684\u51e0\u9879\uff0c\u5b83\u4eec\u53ef\u80fd\u662f\uff1a

    \u5bf9\u4e8e\u8fd9\u79cd\u9879\uff0c\u5728\u5361\u8bfa\u56fe\u4e2d\u7528 X \u6765\u8868\u793a\uff0c\u5728\u6700\u5c0f\u9879\u4e4b\u548c\u4e2d\u7528 \\(\\sum d(...)\\) \u8868\u793a\u3002\u6211\u4eec\u53ef\u4ee5\u968f\u610f\u5b9a\u4e49\u5b83\u4eec\u7684\u8f93\u51fa\uff0c\u6b64\u65f6\u5c31\u53ef\u4ee5\u5229\u7528\u8fd9\u4e9b\u9879\u6765\u65b9\u4fbf\u6211\u4eec\u7684\u4f18\u5316\u2014\u2014\u5f53\u6211\u4eec\u753b\u51fa\u6765\u7684\u6781\u5927\u77e9\u9635\u8d8a\u5927\uff0c\u6210\u672c\u5c31\u8d8a\u4f4e\u3002

    \u4f8b\u5982\uff0c\u6211\u4eec\u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570\uff0c\u5f53\u8f93\u5165\u7684 BCD \u7801\u8868\u793a\u7684\u6570\u5b57\u5927\u4e8e\u7b49\u4e8e 5 \u65f6\u8fd4\u56de 1\uff0c\u5219\u5b83\u53ef\u4ee5\u901a\u8fc7\u8fd9\u6837\u7684\u5f62\u5f0f\u6765\u4f18\u5316\uff1a

    \u6839\u636e\u7ed3\u679c\uff0c\u5199\u51fa\u4f18\u5316\u540e\u7684\u8868\u8fbe\u5f0f\u4e3a\uff1a\\(F(W,X,Y,Z) = W + XY + XZ\\)\u3002

    \u7531\u5361\u8bfa\u56fe\u5f97\u5230\u4e58\u79ef\u7ed3\u679c

    \u5c3d\u7ba1\u6211\u4eec\u4e0d\u505c\u5f3a\u8c03 \u4e0e \u548c \u6216 \u662f\u5bf9\u79f0\u7684\uff0c\u4f46\u662f\u4ecd\u7136\u6709\u5f88\u591a\u64cd\u4f5c\u662f\u9274\u4e8e\u6211\u4eec\u5bf9 1 \u7684\u504f\u7231\u624d\u4f1a\u987a\u624b\u7684\uff08\u4f60\u4f1a\u53d1\u73b0\uff0c\u628a\u4e58\u9664\u6362\u6210\u6211\u4eec\u5b8c\u5168\u4e0d\u719f\u6089\u7684\u7b26\u53f7\uff0c\u4f60\u751a\u81f3\u53ef\u80fd\u65e0\u4ece\u4e0b\u624b\uff09\u3002

    \u6240\u4ee5\uff0c\u5728\u5361\u8bfa\u56fe\u7684\u95ee\u9898\u4e2d\uff0c\u5982\u679c\u8981\u5229\u7528\u5361\u8bfa\u56fe\u5f97\u5230 \\(F\\) \u4f18\u5316\u540e\u7684\u4e58\u79ef\u5f62\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u6c42 \\(\\overline{F}\\) \u4f18\u5316\u540e\u7684\u548c\u5f62\u5f0f\uff0c\u7136\u540e\u518d\u5bf9\u5176\u53d6\u53cd\u8fc7\uff0c\u5229\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

    \u5177\u4f53\u6765\u8bf4\u5c31\u662f\u53cd\u8f6c K-map \u4e2d\u6240\u6709\u7684 0 \u548c 1\uff0c\u7136\u540e\u7740\u773c\u4e8e SOM \u8fdb\u884c\u4f18\u5316\uff0c\u6700\u540e\u518d\u5bf9\u7ed3\u679c\u53d6\u53cd\uff0c\u7528\u5fb7\u00b7\u6469\u6839\u5b9a\u5f8b\u6765\u5f97\u5230\u7ed3\u679c\u3002

    eg

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u8574\u542b\u9879\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","title":"\u8574\u542b\u9879\u3001\u4e3b\u8574\u542b\u9879\u4e0e\u57fa\u672c\u4e3b\u8574\u542b\u9879","text":"

    \u8574\u542b\u9879(implicant) \u5206\u4e3a \u4e3b\u8574\u542b\u9879(prime implicant) \u548c \u57fa\u672c\u4e3b\u8574\u542b\u9879(essential prime implicant)\u3002

    \u5982\u56fe\uff0c\u5de6\u4fa7\u7684\u4e24\u4e2a\u4e3b\u8574\u542b\u9879\u56e0\u4e3a\u5305\u62ec\u4e86 \u24f5 \u548c \u24f6 \u8fd9\u4e24\u4e2a\u552f\u4e00\u7684 1\uff0c\u6240\u4ee5\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\uff1b

    \u800c\u53f3\u4fa7\u7684\u8574\u542b\u9879\u5219\u662f\u4e00\u4e2a\u5197\u4f59\u7684\u8574\u542b\u9879\uff1b

    \u6ce8\u610f

    \u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\uff0c\u4e3b\u8574\u542b\u9879\u4e00\u5b9a\u5b58\u5728\uff0c\u4f46\u662f\u57fa\u672c\u4e3b\u8574\u542b\u9879\u4e0d\u4e00\u5b9a\u5b58\u5728\u3002

    \ud83e\udd14

    \u6b63\u56e0\u4e3a\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u5b58\u5728\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u4efb\u610f\u51fd\u6570\uff0c\u4f18\u5316\u7684\u591a\u89e3\u7ed3\u679c\u603b\u6709\u4e00\u90e8\u5206\u662f\u4e0d\u53d8\u7684\uff08\u53ea\u4e0d\u8fc7\u6ca1\u6709\u57fa\u672c\u4e3b\u8574\u542b\u9879\u7684\u65f6\u5019\u8fd9\u90e8\u5206\u4e3a\u96f6\uff09\u3002

    \u9ea6\u514b\u62c9\u594e\u56e0\u7b97\u6cd5

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u7ecf\u5178\u7ec4\u5408\u7535\u8def","title":"\u7ecf\u5178\u7ec4\u5408\u7535\u8def","text":"

    \u5f15\u5165

    \u5728\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u6709\u4e00\u4e9b\u73b0\u6210\u7684\u7ec4\u5408\u7535\u8def\u80fd\u591f\u4f7f\u7528\uff0c\u6765\u65b9\u4fbf\u6211\u4eec\u8bbe\u8ba1\u3002

    \u4e0d\u8fc7\u6211\u6ca1\u6709\u5168\u5199\u51fa\u6765\uff1b

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u4e09\u6001\u95e8","title":"\u4e09\u6001\u95e8","text":"

    \u4e09\u6001\u7f13\u51b2\u5668(3-State Buffer)

    \u9664\u4e86\u8f93\u5165\u548c\u8f93\u51fa\uff0c\u5b83\u8fd8\u6709\u4e00\u4e2a \u4f7f\u80fd\u7aef(enable) \u6765\u63a7\u5236\u8f93\u51fa\u3002

    \u6240\u8c13\u7684\u4e09\u6001\u6307\u7684\u662f\uff1a

    \u4f5c\u7528

    \u6211\u4eec\u53ef\u4ee5\u7528\u4e09\u6001\u95e8\u6765\u89e3\u51b3\u591a\u8def\u8f93\u51fa\u4e92\u8054\u7684\u95ee\u9898\u3002\u6b63\u5982\u5728 ICS \u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\uff0c\u53ef\u4ee5\u8ba9\u591a\u4e2a\u8f93\u5165\u5728\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u88ab\u8f93\u51fa\u5230\u603b\u7ebf\u4e2d\u2014\u2014\u5b9e\u73b0\u7684\u624b\u6bb5\u5c31\u662f\u901a\u8fc7\u7535\u8def\u6765\u4f7f\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u4e2a\u4f7f\u80fd\u7aef\u4e3a 1\u3002

    \u5728\u6570\u5b57\u903b\u8f91\u8bbe\u8ba1\u4e2d\uff0c\u4e09\u6001\u95e8\u5b9e\u73b0\u603b\u7ebf\u7684\u76f8\u5173\u77e5\u8bc6\u5c06\u5728 \u7b2c\u516d\u7ae0 \u63d0\u5230\u3002

    \u788e\u788e\u5ff5

    \u6240\u4ee5\u4ec0\u4e48\u662f\u300c\u9ad8\u963b\u6001\u300d\uff1f\u5b83\u8981\u5982\u4f55\u7406\u89e3\uff1f\u4ee5\u4e0b\u662f\u6211\u6839\u636e\u5b83\u7684\u5e94\u7528\u53cd\u63a8\u5f97\u5230\u7684\u7ed3\u8bba\uff1a

    \u9ad8\u963b\u6001\u540c\u5b83\u5b57\u9762\u610f\u601d\u76f8\u540c\uff0c\u6211\u4eec\u53ef\u4ee5\u5f53\u5b83\u6b64\u65f6\u662f\u65ad\u8def\uff0c\u800c\u9ad8\u963b\u6001\u91cd\u70b9\u8981\u4e0e\u4f4e\u7535\u5e73\u505a\u533a\u5206\uff1a\u5982\u679c\u73b0\u5728\u5b58\u5728\u4e00\u4e2a\u201c\u5bfc\u7ebf\u201d\uff0c\u5b83\u6709\u4e09\u4e2a\u7aef\uff0c\u5176\u4e2d\u6211\u4eec\u4eba\u4e3a\u5730\u8ba4\u4e3a\u5176\u4e2d\u4e24\u4e2a\u662f\u8f93\u5165\uff0c\u5206\u522b\u547d\u540d\u4e3a a \u548c b\uff0c\u53e6\u5916\u4e00\u4e2a\u8ba4\u4e3a\u662f\u8f93\u51fa\uff0c\u547d\u540d\u4e3a c\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u662f\u4e0d\u5141\u8bb8 a \u548c b \u4e00\u4e2a\u4e3a\u9ad8\u7535\u5e73\uff0c\u4e00\u4e2a\u4e3a\u4f4e\u7535\u5e73\u7684\uff0c\u56e0\u4e3a\u6211\u4eec\u8fd9\u91cc\u4eba\u4e3a\u5b9a\u4e49\u7684\u8f93\u5165\u8f93\u51fa\u5e76\u4e0d\u5f71\u54cd\u7535\u6d41\u7684\u6d41\u52a8\u65b9\u5411\uff0c\u6240\u4ee5\u5f53 a \u4e3a 1\uff0cb \u4e3a 0 \u65f6\uff0c\u7535\u6d41\u5f88\u53ef\u80fd\u4f1a\u53d8\u6210\u4ece a \u6d41\u5411 b\uff0c\u7535\u6e90\u53ef\u80fd\u76f4\u63a5\u63a5\u5730\uff0c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u770b\u5230\u7684\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u6216\u95e8\u6765\u5b9e\u73b0\u8fd9\u4e2a\u903b\u8f91\u884c\u4e3a\uff08\u6362\u8a00\u4e4b\uff0c\u8fd9\u79cd\u201c\u4e09\u7aef\u201d\u7535\u8def\u662f\u76f8\u5f53\u5371\u9669\u7684\uff0c\u4e0d\u8fc7\u5f53\u6211\u4eec\u4eba\u4e3a\u5b9a\u4e49\u591a\u4e2a\u8f93\u51fa\u65f6\uff0c\u4e00\u822c\u4f5c\u4e3a\u63a5\u6536\u7aef\u7684\u7535\u8def\u90fd\u6709\u4e8c\u6781\u7ba1\u9632\u6b62\u9006\u6d41\uff0c\u6240\u4ee5\u5355\u8f93\u5165\u591a\u8f93\u51fa\u662f\u5f88\u5e38\u89c1\u7684\uff09\u3002

    \u4ece\u66f4\u62bd\u8c61\u5730\u89d2\u5ea6\u6765\u7406\u89e3\uff0c\u4e00\u6839\u5bfc\u7ebf\u6700\u591a\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\uff0c\u7136\u800c\u6709\u4e24\u4e2a\u8f93\u5165\u4ecb\u5165\uff0c\u6b64\u65f6\u6211\u4eec\u53ea\u6709 0/1 \u4e24\u6001\uff0c\u4e0d\u7ba1\u600e\u4e48\u6837\uff0c\u6211\u4eec\u90fd\u540c\u65f6\u62ff\u5230\u4e86\u6765\u81ea\u4e24\u4e2a\u8f93\u5165\u7684\u6570\u636e\uff0c\u800c\u5bf9\u4e8e\u53ea\u80fd\u627f\u8f7d\u4e00\u4efd\u4fe1\u606f\u7684\u5bfc\u7ebf\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u4fe1\u606f\u51b2\u7a81\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981 MUX \u6765\u9009\u62e9\u6211\u4eec\u9700\u8981\u7684\u5230\u5e95\u662f\u54ea\u4e2a\u4fe1\u606f\uff0c\u7136\u540e\u518d\u7ed9\u5bfc\u7ebf\u3002

    \u800c\u4e09\u6001\u95e8\uff0c\u5728\u9ad8\u4f4e\u7535\u5e73\u5916\u5f15\u5165\u4e86\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u975e\u5e38\u5de7\u5999\u5730\u89e3\u51b3\u4e86\u8fd9\u4e2a\u300c\u591a\u8f93\u5165\u300d\u5371\u9669\u7684\u95ee\u9898\uff0c\u5f53\u6211\u4eec\u4e0d\u5e0c\u671b\u8fd9\u4e2a\u6570\u636e\u88ab\u8f93\u5165\u65f6\uff0c\u6211\u4eec\u76f4\u63a5\u628a\u5b83\u65ad\u5f00\uff0c\u7c7b\u4f3c\u4e8e\u76f4\u63a5\u628a\u5f00\u5173\u65ad\u5f00\uff0c\u53ea\u8981\u6211\u4eec\u8ba9\u5bfc\u7ebf\u7684\u82e5\u5e72\u8f93\u5165\u4e2d\u53ea\u6709\u4e00\u4e2a\u4e09\u6001\u95e8\u4e0d\u5728\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u80fd\u591f\u4f18\u96c5\u5730\u5b9e\u73b0\u591a\u8def\u8f93\u51fa\u4e92\u8054\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap02/#\u590d\u6742\u95e8","title":"\u590d\u6742\u95e8","text":"

    \u901a\u8fc7\u4e00\u4e9b\u57fa\u672c\u95e8\u7ec4\u5408\u51fa\u6765\u7684\u95e8\uff0c\u5b83\u4eec\u7684\u8868\u793a\u65b9\u6cd5\u5927\u81f4\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/","title":"Chap 3 Combinational Logic Design","text":"

    \u7ea6 4252 \u4e2a\u5b57 7 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f

    \u5f15\u5165

    \u6309\u7167\u529f\u80fd\uff0c\u903b\u8f91\u7535\u8def\u5206\u4e3a\u4e24\u7c7b\uff1a

    \u800c\u672c\u7ae0\u5c06\u7740\u773c\u4e8e\u7ec4\u5408\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u76f8\u5173\u5185\u5bb9\u5c06\u5728 \u4e0b\u4e00\u7ae0 \u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","title":"\u7ec4\u5408\u7535\u8def\u8bbe\u8ba1","text":"

    \u8868\u793a\u903b\u8f91\u7684\u65b9\u6cd5

    1. \u771f\u503c\u8868(Truth Table)\uff1b
    2. \u5e03\u5c14\u51fd\u6570(Boolean Function)\uff1b
    3. \u5361\u8bfa\u56fe(Karnaugh Maps)\uff1b
    4. \u65f6\u5e8f\u56fe(Timing Diagram)\uff1b
    5. \u903b\u8f91\u7535\u8def\u56fe(Logic Circuit)\uff1b

    \u5176\u4e2d\uff0c\u4e0b\u5212\u7ebf\u7684\u65b9\u6cd5\u5728\u529f\u80fd\u786e\u5b9a\u7684\u60c5\u51b5\u4e0b\uff0c\u5176\u8868\u793a\u662f\u552f\u4e00\u7684\u3002

    \u800c\u6211\u4eec\u7684\u8bbe\u8ba1\uff0c\u5c31\u662f\u5728\u6ee1\u8db3\u529f\u80fd\u7684\u524d\u63d0\u4e0b\uff0c\u5c3d\u53ef\u80fd\u4f18\u5316\u548c\u627e\u5230\u6700\u597d\u7684\u8bbe\u8ba1\u3002

    \u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u5982\u4e0b\uff1a

    1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
    2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
    3. \u4f18\u5316\u903b\u8f91\u8868\u8fbe\u4ee5\u51cf\u5c11\u6210\u672c(\u6bd4\u5982\u4f7f\u7528\u5361\u8bfa\u56fe)\uff1b
    4. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
    5. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
    graph LR;\n\nA[\"\u5b9e\u9645\u95ee\u9898\"] ===> B[\"\u771f\u503c\u8868\"]\n\nB ==>|\"\u5316\u7b80\"| C[\"\u6700\u7b80\u529f\u80fd\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D[\"\u7f51\u8868\"]\n\nB ==>|\"\u53d8\u6362\"| E[\"\u5408\u9002\u7684\u8868\u8fbe\u5f0f\"] ===>|\"\u5de5\u827a\u6620\u5c04\"| D
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5206\u5c42\u8bbe\u8ba1","title":"\u5206\u5c42\u8bbe\u8ba1","text":"

    \u5206\u5c42\u8bbe\u8ba1\u5373\u5c06\u590d\u6742\u95ee\u9898\u6a21\u5757\u5316\u5206\u89e3\u4e3a\u82e5\u5e72\u5c42\u6b21\uff0c\u7136\u540e\u9010\u4e2a\u62bd\u8c61\u89e3\u51b3\u3002

    \u5176\u8bbe\u8ba1\u65b9\u6cd5\u5206\u4e3a \u81ea\u9876\u5411\u4e0b(Top-Down) \u548c \u81ea\u5e95\u5411\u4e0a(Bottom-Up)\u3002

    \u524d\u8005\u4ece\u9700\u6c42\u5f00\u59cb\uff0c\u81ea\u9876\u5411\u4e0b\u5206\u89e3\u529f\u80fd\u8bbe\u8ba1\uff1b\u540e\u8005\u6839\u636e\u73b0\u6709\u7684\u5143\u4ef6\u53bb\u7ec4\u5408\u6210\u76ee\u6807\u529f\u80fd\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u96c6\u6210\u7535\u8def","title":"\u96c6\u6210\u7535\u8def","text":"

    \u96c6\u6210\u7535\u8def(integrated circuits) \u53c8\u53eb \u82af\u7247(chip)\uff0c\u5206\u4e3a\u5982\u4e0b\u82e5\u5e72\u7b49\u7ea7\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6280\u672f\u53c2\u6570","title":"\u6280\u672f\u53c2\u6570","text":"

    \u95e8\u7684\u5b9e\u73b0\u4e3b\u8981\u901a\u8fc7\u8fd9\u4e9b\u53c2\u6570\u7279\u6027\u6765\u63cf\u8ff0\uff1a

    Name Description Fan-in \u4e00\u4e2a\u95e8\u53ef\u7528\u7684\u8f93\u5165 Fan-out \u4e00\u4e2a\u6805\u6781\u8f93\u51fa\u9a71\u52a8\u7684\u6807\u51c6\u8d1f\u8f7d\u6570\u91cf Logic Levels \u88ab\u8ba4\u4e3a\u662f\u9ad8\u4f4e\u7535\u5e73\u7684\u8f93\u5165\u8f93\u51fa\u7535\u538b\u8303\u56f4 Noise Margin \u5bf9\u5916\u754c\u566a\u58f0\u7684\u5bb9\u5fcd\u80fd\u529b(\u5177\u4f53\u6765\u8bf4\u662f\u4e0d\u4f1a\u5bfc\u81f4\u884c\u4e3a\u5f02\u53d8\u7684\u6700\u5927\u566a\u58f0\u538b\u503c) Cost for a gate \u7ee7\u627f\u7535\u8def\u7684\u95e8\u6210\u672c Propagation Delay \u4fe1\u53f7\u6539\u53d8\u540e\u4ece\u8f93\u5165\u5230\u8f93\u51fa\u6240\u9700\u7684\u53d8\u5316\u65f6\u95f4 Power Dissipation \u7535\u6e90\u8f93\u51fa\u80fd\u8017\u548c\u95e8\u7684\u80fd\u8017"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6247\u5165\u6247\u51fa","title":"\u6247\u5165\u6247\u51fa","text":"

    \u6247\u5165\u63cf\u8ff0\u4e86\u4e00\u4e2a\u95e8\u80fd\u591f\u63a5\u53d7\u7684\u6700\u591a\u8f93\u5165\u91cf\uff0c\u5982\u4e00\u4e2a\u56db\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6247\u5165\u5c31\u662f 4\uff1b\u800c\u6247\u51fa\u63cf\u8ff0\u7684\u5219\u662f\u4e00\u4e2a\u95e8\u7684\u8f93\u51fa(\u6805\u6781\u8f93\u51fa)\u5728\u4e0d\u964d\u4f4e\u5de5\u4f5c\u6027\u80fd\u7684\u60c5\u51b5\u4e0b\u80fd\u591f\u8d1f\u8f7d\u591a\u5c11\u95e8\uff0c\u4f8b\u5982\u4e00\u4e2a\u975e\u95e8\u7684\u8f93\u51fa\u80fd\u591f\u540c\u65f6\u8d1f\u8f7d 4 \u4e2a\u975e\u95e8\u5e76\u4e14\u90fd\u80fd\u6b63\u5e38\u5de5\u4f5c\uff0c\u5219\u5176\u6247\u51fa\u4e3a 4\uff0c\u5176\u4e5f\u80fd\u901a\u8fc7\u6807\u51c6\u8d1f\u8f7d\u6765\u5b9a\u4e49\u3002

    \u6807\u51c6\u8d1f\u8f7d

    \u6240\u8c13\u7684\u6807\u51c6\u8d1f\u8f7d\uff0c\u662f\u8861\u91cf\u201c\u8d1f\u8f7d\u201d\u7684\u4e00\u4e2a\u201c\u5355\u4f4d\u781d\u7801\u201d\u3002\u5176\u5927\u5c0f\u7b49\u4e8e\u4e00\u4e2a\u975e\u95e8(\u9006\u53d8\u5668)\u8d21\u732e\u7684\u8d1f\u8f7d\u538b\u529b\u3002

    \u90a3\u4e48\u8981\u5982\u4f55\u8bc4\u4f30\u8d1f\u8f7d\u5462\uff1f\u9996\u5148\u6211\u4eec\u5f15\u5165 \u8fc7\u6e21\u65f6\u95f4(transition time)\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8f6c\u6362\u65f6\u95f4","title":"\u8f6c\u6362\u65f6\u95f4","text":"

    \u8f6c\u6362\u65f6\u95f4\u5206\u4e3a \\(\\mathrm{t_{LH}}\\)(rise time) \u548c \\(\\mathrm{t_{HL}}\\)(fall time) \u4e24\u4e2a\u90e8\u5206\u3002

    \u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

    \u968f\u7740\u8d1f\u8f7d\u589e\u52a0\uff0c\u8f6c\u6362\u65f6\u95f4\u4e5f\u4f1a\u589e\u52a0\uff08\u7ed9\u7535\u5bb9\u5145\u7535\u7684\u65f6\u95f4\u589e\u52a0\uff09\uff0c\u800c\u6247\u51fa\u5b9a\u4e49\u4e2d\u63d0\u5230\u7684\u201c\u6700\u5927\u8d1f\u8f7d\u201d\uff0c\u5c31\u662f\u6307\u5b83\u7684\u8f6c\u6362\u65f6\u95f4\u4e0d\u8d85\u8fc7\u5b83\u9884\u5b9a\u7684\u6700\u5927\u8f6c\u6362\u65f6\u95f4\u3002

    \u4ece\u5de6\u5230\u53f3\u8868\u793a\u8d1f\u8f7d\u4e0d\u65ad\u589e\u52a0\u65f6\uff0crise time \u7684\u53d8\u5316\u8d8b\u52bf\u3002

    \u5b9e\u9645\u4e0a\uff0c\u7c7b\u4f3c\u7684\uff0c\u8d85\u51fa\u6247\u5165\u540e\uff0c\u95e8\u5bf9\u8f93\u5165\u7684\u53cd\u5e94\u5c31\u592a\u6162\u4e86\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4f20\u64ad\u5ef6\u8fdf","title":"\u4f20\u64ad\u5ef6\u8fdf","text":"

    \u4f20\u64ad\u5ef6\u8fdf(propagation delay) \u8861\u91cf\u4e86\u95e8\u7684\u8f93\u5165\u53d8\u5316\u5bfc\u81f4\u8f93\u51fa\u53d8\u5316\u6240\u9700\u8981\u7684\u65f6\u95f4\u3002\u7531\u4e8e\u4ece\u4f4e\u7535\u5e73\u8f6c\u5316\u5230\u9ad8\u7535\u5e73\u548c\u9ad8\u7535\u5e73\u8f6c\u5316\u5230\u4f4e\u7535\u5e73\u6240\u9700\u8981\u7684\u65f6\u95f4\u4e0d\u4e00\u6837\uff0c\u6240\u4ee5\u4f20\u64ad\u5ef6\u8fdf\u540c\u6837\u6709\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u4f7f\u7528 \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}} \u6765\u8868\u793a\\)\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u4f20\u64ad\u5ef6\u8fdf\u7684\u8ba1\u7b97\u65b9\u6cd5\u662f\u8f93\u5165\u548c\u8f93\u51fa\u7684\u53d8\u5316\u4e2d\u70b9\uff08\u5373\u53d8\u5316\u5230 \\(\\frac{1}{2}V_{CC}\\) \u65f6\uff09\u7684\u65f6\u95f4\u5dee\uff0c\u901a\u8fc7\u65f6\u5e8f\u56fe\u8868\u793a\u5c31\u662f\u8fd9\u6837\uff1a

    \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5f15\u5165 \\(\\mathrm{ t_{pd} }\\) \u6765\u7edf\u4e00\u8868\u793a \\(\\mathrm{t_{PHL}}\\) \u548c \\(\\mathrm{t_{PLH}}\\)\u3002\u6570\u503c\u4e0a\uff0c\\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\) \u6216 \\(\\mathrm{ t_{pd} } = max(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

    \u9898\u9762\u7b54\u6848

    \u6839\u636e\u65f6\u5e8f\u56fe\uff0c\u5199\u51fa\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\uff0c\u6b64\u5904 \\(\\mathrm{ t_{pd} } = average(\\mathrm{t_{PHL}}, \\mathrm{t_{PLH}})\\)\u3002

    Transition Time vs. Propagation Delay

    \u8f6c\u6362\u65f6\u95f4\u4e13\u6ce8\u4e8e\u8f93\u51fa\u7684\u53d8\u5316\uff0c\u800c\u4f20\u64ad\u5ef6\u8fdf\u5219\u5305\u542b\u4e86\u8f93\u5165\u7684\u53d8\u5316\u548c\u8f93\u51fa\u7684\u53d8\u5316\u6574\u4e2a\u8fc7\u7a0b\u3002

    \u4ece\u65f6\u5e8f\u56fe\u4e0a\u7684\u8868\u793a\u6765\u770b\uff0c\u8f6c\u6362\u65f6\u95f4\u53ea\u9700\u8981\u8f93\u51fa\u7684\u65f6\u5e8f\u56fe\u5373\u53ef\u8868\u793a\uff1b\u4f46\u4f20\u64ad\u5ef6\u8fdf\u5219\u662f\u901a\u8fc7\u6bd4\u8f83\u8f93\u5165\u548c\u8f93\u51fa\u7684\u504f\u5dee\u6765\u8868\u793a\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u6a21\u578b","title":"\u5ef6\u8fdf\u6a21\u578b","text":"

    \u4e3a\u4e86\u7814\u7a76\u4e3a\u4ec0\u4e48\u4f1a\u5b58\u5728\u95e8\u5ef6\u8fdf\uff0c\u523b\u753b\u95e8\u7684 \u56fa\u6709\u95e8\u5ef6\u8fdf(inherent gate delay)\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5176\u5efa\u6a21\uff0c\u5e38\u89c1\u7684 \u5ef6\u8fdf\u6a21\u578b(delay model) \u6709\u4ee5\u4e0b\u4e24\u79cd\uff1a

    \u5c06\u4e0d\u5b58\u5728\u5ef6\u8fdf\u7684\u6a21\u578b\u3001\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u548c\u60ef\u6027\u5ef6\u8fdf\u6a21\u578b\u505a\u6bd4\u8f83\u5730\u6765\u770b\uff0c\u5c31\u662f\u5982\u4e0b\u60c5\u51b5\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","title":"\u5ef6\u8fdf\u4ee5\u53ca\u76f8\u5173\u95ee\u9898","text":"

    \u5f15\u5165

    \u7531\u4e8e\u5b9e\u9645\u7535\u8def\u4e2d\u5b9e\u73b0\u5ef6\u8fdf\uff0c\u6570\u5b66\u4e0a\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u4e0e\u5b9e\u9645\u7535\u8def\u60c5\u51b5\u4f1a\u5b58\u5728\u4e0d\u540c\u2014\u2014\u5373\u5b58\u5728\u82e5\u5e72\u6570\u5b66\u4e0a\u65e0\u6cd5\u76f4\u63a5\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u6240\u4ee5\u7814\u7a76\u5ef6\u8fdf\u662f\u975e\u5e38\u5fc5\u8981\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u8ba1\u7b97","title":"\u5ef6\u8fdf\u8ba1\u7b97","text":"

    \u8ba1\u7b97\u4e00\u4e2a\u7535\u8def\u7684\u5ef6\u8fdf\u65f6\uff0c\u6709\u4e24\u65b9\u9762\u9700\u8981\u8003\u8651\uff0c\u4e00\u65b9\u9762\u662f\u7535\u8def\u81ea\u8eab\u6240\u5bfc\u81f4\u7684\u4e00\u4e2a\u56fa\u5b9a\u5ef6\u8fdf\uff0c\u53e6\u5916\u4e00\u65b9\u9762\u5219\u662f\u7531\u4e8e\u4e0d\u540c\u7684\u8d1f\u8f7d\u5bfc\u81f4\u7684\u989d\u5916\u5ef6\u8fdf\u3002

    \u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c0.07 \u4e3a\u56fa\u5b9a\u5ef6\u8fdf\uff0c0.021 \u4e3a\u4e00\u4e2a\u6807\u51c6\u8d1f\u8f7d\u5e26\u6765\u7684\u5ef6\u8fdf\u7cfb\u6570\uff0cSL(4.5 here) \u5219\u662f\u6807\u51c6\u5316\u7684\u8d1f\u8f7d\u91cf\u3002

    \u800c\u5177\u4f53\u7684\u8868\u8fbe\u5f0f\uff0c\u4f1a\u5728 Cell Library \u91cc\u5199\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","title":"\u5ef6\u8fdf\u5e26\u6765\u7684\u95ee\u9898","text":"

    \u7531\u4e8e\u5b58\u5728\u5ef6\u8fdf\uff0c\u8bb8\u591a\u5728\u6570\u5b66\u610f\u4e49\u4e0a\u6ca1\u6709\u95ee\u9898\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u5728\u7535\u8def\u4e2d\u5c31\u5b58\u5728\u975e\u5e38\u5927\u7684\u95ee\u9898\u3002

    \u4f8b\u5982\uff0c\u4ece\u6570\u5b66\u89d2\u5ea6\u770b\uff0c\\(\\mathrm{Y=\\overline{A}A}\\) \u7684\u503c\u6052\u4e3a 0\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u7531\u4e8e\u5ef6\u8fdf\uff0c\u5176\u4eff\u771f\u6ce2\u5f62\u4e2d\u4f1a\u51fa\u73b0\u8fd9\u6837\u4e00\u4e2a \u6bdb\u523a(glitch)\uff0c\u800c\u8fd9\u5728\u5de5\u7a0b\u610f\u4e49\u4e0a\u6709\u5f88\u5927\u7684\u95ee\u9898\u3002

    \u66f4\u590d\u6742\u7684 \ud83c\udf30

    \u8ba9\u6211\u4eec\u5206\u6790\u4e0b\u9762\u8fd9\u4e2a\u4e8c\u8def\u9009\u62e9\u5668\uff0c\u5176\u529f\u80fd\u662f\u901a\u8fc7 S \u63a7\u5236\u8f93\u51fa\u8868\u8fbe\u7684\u662f A \u8fd8\u662f B\uff0c\u5728\u4f20\u8f93\u5ef6\u8fdf\u6a21\u578b\u4e0b\uff0c\u5176\u6ce2\u5f62\u5982\u4e0b\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0cY \u4e2d\u51fa\u73b0\u4e86\u610f\u6599\u4e4b\u5916\u7684\u6bdb\u523a\u3002

    \u800c\u8fd9\u4e2d\u6bdb\u523a\u53ef\u4ee5\u7528\u6dfb\u52a0\u5197\u4f59\u9879\u6765\u89e3\u51b3\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","title":"\u6b63\u903b\u8f91\u548c\u8d1f\u903b\u8f91","text":"

    \u6b63\u903b\u8f91(positive logic) \u5c31\u662f 1 \u662f\u6709\u6548\u4fe1\u53f7\uff0c\u8d1f\u903b\u8f91(negative logic) \u5c31\u662f 0 \u662f\u6709\u6548\u4fe1\u53f7\u3002\u800c\u5728\u6b63\u903b\u8f91\u4e2d AND \u95e8\u7684\u4f5c\u7528\u5c31\u7b49\u6548\u4e8e\u8d1f\u903b\u8f91\u4e2d OR \u95e8\u7684\u4f5c\u7528\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u524d\u9762\u51e0\u7ae0\u7684\u7b14\u8bb0\u4e2d\u63d0\u5230\u7684\u5bf9\u79f0\u3002

    \u800c\u6b63\u903b\u8f91\u7684\u7535\u8def\u7684\u7b26\u53f7\u4e00\u822c\u5c31\u662f\u6b63\u5e38\u7684\u903b\u8f91\u95e8\u7b26\u53f7\uff0c\u800c\u8d1f\u903b\u8f91\u7684\u903b\u8f91\u95e8\u7b26\u53f7\u5219\u53ef\u80fd\u6709\u5c0f\u4e09\u89d2\u6807\uff0c\u5373 \u6781\u6027\u6307\u793a\u5668(polarity indicator)\uff1a

    \u5982\u56fe\uff0c\u5de6\u4fa7\u662f\u6b63\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\uff0c\u53f3\u4fa7\u662f\u8d1f\u903b\u8f91\u7535\u8def\u7684\u7b26\u53f7\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u5de5\u827a\u6620\u5c04","title":"\u5de5\u827a\u6620\u5c04","text":"

    \u5de5\u827a\u6620\u5c04(technology mapping) \u662f\u6307\u5c06\u903b\u8f91\u56fe\u6216\u7f51\u8868\u8f6c\u5316\u4e3a\u53ef\u4ee5\u7528\u5de5\u827a\u5b9e\u73b0\u7684\u5fc3\u7684\u56fe\u6216\u7f51\u8868\u7684\u8fc7\u7a0b\u3002

    \u6709\u65f6\u6211\u4eec\u4f1a\u4f7f\u7528\u4e0e\u975e\u95e8\u548c\u975e\u95e8\u66ff\u6362\u4e0e\u95e8\u548c\u6216\u95e8(\u56e0\u4e3a\u7535\u8def\u5c42\u9762\uff0c\u4e0e\u95e8\u5b9e\u9645\u4e0a\u5c31\u662f\u901a\u8fc7\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684)\uff0c\u7136\u540e\u4f1a\u53d1\u73b0\u6709\u4e00\u4e9b\u8fde\u7eed\u5bf9\u975e\u95e8\u53ef\u4ee5\u76f8\u4e92\u62b5\u6d88\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

    \u84dd\u7eff\u8272\u5757\u4e2d\u5373\u4e3a\u88ab\u66ff\u6362\u540e\u7684\u5185\u5bb9\uff0c\u7136\u540e\u6211\u4eec\u53d1\u73b0\u51fa\u73b0\u4e86\u82e5\u5e72\u53ef\u4ee5\u62b5\u6d88\u7684\u975e\u95e8\u3002

    \u5f53\u7136\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u6216\u975e\u95e8\u6765\u5b9e\u73b0\uff0c\u6bd4\u5982\u4e0b\u9762\u7684\u60c5\u51b5\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u9a8c\u8bc1\u6b63\u786e\u6027","title":"\u9a8c\u8bc1\u6b63\u786e\u6027","text":"

    \u9a8c\u8bc1\u6b63\u786e\u6027(Verification)\u6307\u7684\u662f\u8bc1\u660e\u6700\u7ec8\u8bbe\u8ba1\u7684\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u9884\u671f\u884c\u4e3a(Specification)\u3002 \u7b80\u5355\u7684\u884c\u4e3a\u53ef\u4ee5\u7528\u771f\u503c\u8868\u3001\u5e03\u5c14\u4ee3\u6570\u5f0f\u3001HDL \u4ee3\u7801\u7b49\u63cf\u8ff0\u3002

    \u6700\u57fa\u672c\u7684\u9a8c\u8bc1\u6b63\u786e\u6027\u65b9\u6cd5\u6709\uff1a

    Why Simulate?

    \u6211\u4eec\u66fe\u5728\u6570\u903b\u5b9e\u9a8c\u4e2d\u9a8c\u8bc1\u8fc7\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\uff0c\u90a3\u65f6\u6211\u4eec\u91c7\u7528\u4eba\u5de5\u903b\u8f91\u5206\u6790\uff0c\u901a\u8fc7\u6d4b\u8bd5\u786e\u5b9a\u4e86\u5f85\u6d4b\u95e8\u7684\u771f\u503c\u8868\uff0c\u5e76\u5c06\u5176\u4e0e\u6807\u51c6\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u771f\u503c\u8868\u6bd4\u8f83\uff0c\u4ece\u800c\u5224\u65ad\u6211\u4eec\u7684\u4e8c\u8f93\u5165\u4e0e\u975e\u95e8\u662f\u5426\u6b63\u786e\u5b9e\u73b0\uff1b

    \u4f46\u5982\u679c\u6211\u4eec\u9700\u8981\u9a8c\u8bc1\u4e00\u4e2a\u4e00\u767e\u4e07\u8f93\u5165\u4e0e\u975e\u95e8\u7684\u6b63\u786e\u6027\u5462\uff1f\uff08\u4ec5\u7528\u4e8e\u4e3e\u4f8b\uff09

    \u6211\u4eec\u53d1\u73b0\uff0c\u5728\u73b0\u5b9e\u4e16\u754c\u4e2d\u4eba\u5de5\u6c42\u89e3\u8fd9\u4e2a\u7535\u8def\u7684\u771f\u503c\u8868\u6216\u5e03\u5c14\u4ee3\u6570\u5f0f\u662f\u4e0d\u53ef\u80fd\u7684\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u53ef\u4ee5\u8bbe\u8ba1\u4e00\u7ec4\u5177\u6709\u4ee3\u8868\u6027\u7684\u8f93\u5165\uff08\u4ecd\u7136\u662f\u4e2a\u4e0d\u5c0f\u7684\u6570\u76ee\uff09\uff0c\u8ba9\u8ba1\u7b97\u673a\u5728\u4eff\u771f\u73af\u5883\u4e2d\u7528\u8fd9\u7ec4\u8f93\u5165\u53bb\u6d4b\u8bd5\u7535\u8def\uff0c\u5e76\u5c06\u6d4b\u8bd5\u7ed3\u679c\u4e0e\u9884\u671f\u7ed3\u679c\u8fdb\u884c\u5bf9\u6bd4\u3002\u6211\u4eec\u65e0\u6cd5\u786e\u4fdd\u9a8c\u8bc1\u662f\u5426\u5145\u5206\uff0c\u4f46\u81f3\u5c11\u8fd9\u662f\u5b9e\u8df5\u610f\u4e49\u4e0a\u8db3\u591f\u5145\u5206\u7684\u9a8c\u8bc1\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7ec4\u5408\u903b\u8f91","title":"\u7ec4\u5408\u903b\u8f91","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u903b\u8f91\u51fd\u6570","title":"\u57fa\u672c\u903b\u8f91\u51fd\u6570","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u57fa\u672c\u529f\u80fd\u5757","title":"\u57fa\u672c\u529f\u80fd\u5757","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u8bd1\u7801\u5668","title":"\u8bd1\u7801\u5668","text":"

    \u7a77\u4e3e\u53ef\u80fd\u6027\uff0c\u7a20\u5bc6 -> \u7a20\u5bc6/\u7a00\u758f

    \u4e3a\u4e86\u8282\u7701\u95e8\u8f93\u5165\u6210\u672c\uff0c\u6211\u4eec\u5e38\u5e38\u4f7f\u7528 \u5206\u7ea7 \u7684\u601d\u60f3\u6765\u6784\u9020\u591a\u8f93\u5165\u591a\u8bd1\u7801\u5668\u3002

    eg

    \u7531\u4e8e\u5e95\u5c42\u7684\u7535\u8def\u80fd\u591f\u76f4\u63a5\u5b9e\u73b0\u7684\u8fd0\u7b97\u5341\u5206\u5c40\u9650\uff0c\u6240\u4ee5\u9700\u8981\u7528\u8bd1\u7801\u5668\u6765\u5b9e\u73b0\u4e00\u4e9b\u57fa\u7840\u8fd0\u7b97\uff0c\u4f8b\u5982\u52a0\u6cd5\u3002

    \u4e00\u4f4d\u52a0\u6cd5\u5668\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bd1\u7801\u5668\u548c\u6216\u95e8\u5b9e\u73b0\uff0c\u6838\u5fc3\u5c31\u662f\u679a\u4e3e\u8f93\u5165\u7684\u5404\u79cd\u60c5\u51b5\uff0c\u7136\u540e\u7528\u6216\u95e8\u62fe\u53d6 sum \u548c carry \u7684\u6700\u5c0f\u9879\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7f16\u7801\u5668","title":"\u7f16\u7801\u5668","text":"

    \u7a20\u5bc6/\u7a00\u758f -> \u7a20\u5bc6

    \u5982\u4e0a\u5b9a\u4e49\u7684\u7f16\u7801\u5668\u6709\u4e00\u4e2a\u9650\u5236\uff0c\u5373\u4efb\u4f55\u65f6\u5019\u8f93\u5165\u53ea\u80fd\u6709\u4e00\u4e2a\u662f\u6d3b\u52a8\u7684\uff0c\u5373\u8f93\u5165\u662f one-hot \u7684\u3002

    \u4f18\u5148\u7f16\u7801\u5668

    \u4f18\u5148\u7f16\u7801\u5668\u80fd\u591f\u5b9e\u73b0\u4f18\u5148\u7ea7\u51fd\u6570\uff0c\u5b83\u4e0d\u8981\u6c42\u8f93\u5165\u662f one-hot \u7684\uff0c\u800c\u662f\u603b\u662f\u5173\u6ce8\u6709\u6548\u8f93\u5165\u4e2d\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4e2a\u3002\u5373\u6bd4\u5982\u5f53\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u90a3\u4e00\u4f4d\u662f 1 \u65f6\uff0c\u5176\u5b83\u6240\u6709\u4f18\u5148\u7ea7\u4e0d\u5982\u5b83\u7684\u4f4d\u7f6e\u7684\u503c\u90fd\u662f\u6211\u4eec\u4e0d\u5173\u5fc3\u7684\u5185\u5bb9\u4e86\u3002

    \u4e2d\u65ad(interrupt)\u5224\u4f18\u5668

    \u4f18\u5148\u7f16\u7801\u5668\u7684\u4e00\u79cd\u5e94\u7528\u5c31\u662f\u4e2d\u65ad\u5224\u4f18\u5668\u3002

    \u5176\u4e2d \\(V\\) \u8868\u793a\u8f93\u51fa\u662f\u5426\u6709\u6548\uff0c\u5728\u4e2d\u65ad\u5224\u4f18\u7cfb\u7edf\u4e2d\u5373\u8868\u793a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u591a\u8def\u590d\u7528\u5668","title":"\u591a\u8def\u590d\u7528\u5668","text":"

    \u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u51fa\u7684\u662f\u82e5\u5e72\u8f93\u5165\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

    \u901a\u8fc7\u4e09\u6001\u95e8\u6765\u5b9e\u73b0 MUX \u80fd\u591f\u964d\u4f4e\u95e8\u8f93\u5165\u4ee3\u4ef7\u3002

    eg

    \u5b8c\u5168\u4f7f\u7528\u4e09\u6001\u95e8\u6765\u5b9e\u73b0\u56db\u8f93\u5165 MUX\uff0c\u95e8\u8f93\u5165\u5927\u5927\u51cf\u5c11\u3002

    MUX \u8fd8\u53ef\u4ee5 \u5b9e\u73b0\u4efb\u610f\u7684\u903b\u8f91\u51fd\u6570\uff1a

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u5c06\u539f\u6765\u7684\u63a7\u5236\u7aef\u5f53\u4f5c\u8f93\u5165\u7aef\uff0c\u5e76\u5728\u539f\u6765\u7684\u8f93\u5165\u7aef\u5199\u5165\u903b\u8f91\u51fd\u6570\u7684\u771f\u503c\u8868\uff0c\u4ee5\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\u3002

    \u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u628a\u4e00\u90e8\u5206\u7684\u8f93\u5165\u5f53\u4f5c\u5e38\u91cf\u7aef\u6765\u7b80\u5316\u5143\u4ef6\uff08\u964d\u7ef4\uff09\uff1a

    \u89c2\u5bdf\u5176\u6700\u5c0f\u9879\uff0c\u4f7f\u5176\u8f93\u51fa\u6240\u6709\u6700\u5c0f\u9879\u3002\u4f46\u662f\u5728\u964d\u7ef4\u8fc7\u7a0b\u4e2d\u5e76\u4e0d\u9700\u8981\u5168\u90fd\u662f C\uff0c\u5982\u679c\u5361\u8bfa\u56fe\u4e2d\u5b58\u5728\u53cc 1 \u6216\u8005\u53cc 0\uff0c\u4e5f\u53ef\u4ee5\u4ecd\u7136\u4f7f\u7528\u5e38\u91cf\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4fe1\u53f7\u5206\u914d\u5668","title":"\u4fe1\u53f7\u5206\u914d\u5668","text":"

    \u7b80\u5199\u4e3a DEMUX\uff0c\u901a\u8fc7\u63a7\u5236\u7aef\u9009\u62e9\u8f93\u5165\u7ed9\u5230\u82e5\u5e72\u8f93\u51fa\u4e2d\u7684\u54ea\u4e00\u4e2a\u3002

    \u540e\u7eed \ud83d\udc49 \u53ef\u7f16\u7a0b\u6280\u672f

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u7b97\u672f\u903b\u8f91\u7535\u8def","title":"\u7b97\u672f\u903b\u8f91\u7535\u8def","text":"

    \u6211\u4eec\u4e3b\u8981\u8ba8\u8bba\u7684\u8ba1\u7b97\u4e3b\u8981\u5305\u62ec\u903b\u8f91\u8fd0\u7b97\u548c\u7b97\u672f\u8fd0\u7b97\uff0c\u524d\u8005\u7531\u4e8e\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u57fa\u672c\u95e8\u5f88\u65b9\u4fbf\u5b9e\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u8fc7\u591a\u8003\u8651\uff1b\u5728\u6b64\u4e3b\u8981\u4ecb\u7ecd\u7b97\u6570\u8fd0\u7b97\u3002\u5728\u8ba1\u7b97\u673a\u786c\u4ef6\u4e2d\uff0c\u627f\u62c5\u8ba1\u7b97\u5de5\u4f5c\u7684\u4e3b\u8981\u90e8\u4ef6\u4e3a ALU(Arithmetic Logical Unit)\u3002

    \u5f15\u5165

    \u5728\u4e4b\u524d #\u8bd1\u7801\u5668 \u548c #\u591a\u8def\u590d\u7528\u5668 \u7684\u90e8\u5206\u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u4e00\u4e9b\u5b9e\u73b0 1 bit \u52a0\u6cd5\u5668\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u6765\u8be6\u7ec6\u770b\u770b\u52a0\u6cd5\u5668\u8fd9\u4e2a\u4e1c\u897f\u3002

    \u9996\u5148\u6211\u4eec\u9700\u8981\u4e86\u89e3\u52a0\u6cd5\u5668\u6700\u5e95\u5c42\u7684\u5355\u5143\uff0c\u5373\u5b9e\u73b0 1 bit \u8fd0\u7b97\u7684 \u534a\u52a0\u5668(half adder) \u548c \u5168\u52a0\u5668(full adder)\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u5c06\u4ed6\u4eec\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u5b9e\u73b0 n bits \u7684\u52a0\u6cd5\u5668\uff0c\u5176\u4e2d\u4e3b\u8981\u4ecb\u7ecd \u884c\u6ce2\u52a0\u6cd5\u5668(binary ripple carry adder)\u3002\u6b64\u5916\uff0c\u57fa\u4e8e\u4e00\u4e9b\u7f16\u7801\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u5c06\u5b83\u6539\u88c5\u6210\u52a0\u51cf\u6cd5\u5668\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u534a\u52a0\u5668--\u5168\u52a0\u5668","title":"\u534a\u52a0\u5668 & \u5168\u52a0\u5668","text":"

    \u5bf9\u4e8e\u4e8c\u8fdb\u5236\u52a0\u6cd5\uff0c\u5176\u8f93\u51fa\u65e0\u7591\u6709\u5f53\u524d\u4f4d\u7684\u548c S \u548c\u8fdb\u4f4d C\uff0c\u800c\u8f93\u5165\u9664\u4e86\u4e24\u4e2a\u64cd\u4f5c\u6570 X \u548c Y \u4ee5\u5916\uff0c\u8fd8\u53ef\u80fd\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z(\u6216\u8005C{n-1})\u3002\u800c\u5bf9\u4e8e\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6570\u7684\u7b2c\u4e00\u4f4d\uff0c\u663e\u7136\u4e0d\u4f1a\u6709\u8fdb\u4f4d\uff0c\u6216\u8005\u8bf4 Z=0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5c06\u8fd9\u4e2a Z \u53bb\u6389\uff0c\u5373\u8f93\u5165\u53ea\u6709 X \u548c Y\uff0c\u8fd9\u5c31\u662f \u534a\u52a0\u5668(half adder)\uff1b\u663e\u7136\uff0c\u5bf9\u5e94\u7684\uff0c\u5982\u679c\u8f93\u5165\u4e2d\u6709\u4e0a\u4e00\u4f4d\u7684\u8fdb\u4f4d Z\uff0c\u5219\u79f0\u4e3a \u5168\u52a0\u5668(full adder)\u3002

    \u534a\u52a0\u5668\u5168\u52a0\u5668 \u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u7535\u8def\u56fe \\[ S=\\overline{X}Y+X\\overline{Y}=X\\oplus Y \\\\ C = XY \\]

    \u903b\u8f91\u8868\u8fbe\u5f0f\u771f\u503c\u8868\u5361\u8bfa\u56fe\u903b\u8f91\u8868\u8fbe\u5f0f with XOR \\[ S=\\overline{X}\\,\\overline{Y}Z + \\overline{X}Y\\overline{Z} + X\\overline{Y}\\,\\overline{Z} + XYZ \\\\ C = XY + XZ + YZ \\]

    \\[ S = (X\\oplus Y)\\oplus Z \\\\ C = XY + Z(X\\oplus Y) \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u884c\u6ce2\u52a0\u6cd5\u5668","title":"\u884c\u6ce2\u52a0\u6cd5\u5668","text":"

    \u884c\u6ce2\u52a0\u6cd5\u5668\u662f\u6734\u7d20\u7684 n bits \u52a0\u6cd5\u5668\u5b9e\u73b0\u3002\u5176\u6838\u5fc3\u601d\u60f3\u4e5f\u5c31\u662f\u6a21\u62df\u6211\u4eec\u4f7f\u7528\u201c\u7ad6\u5f0f\u201d\u6765\u8ba1\u7b97\u52a0\u6cd5\uff0c\u4ece\u4f4e\u4f4d\u5f00\u59cb\u9010\u4f4d\u8ba1\u7b97\uff0c\u5e76\u5c06\u8fdb\u4f4d\u7ed9\u5230\u4e0b\u4e00\u4f4d\u4f5c\u4e3a\u8f93\u5165\u3002

    \u5b9e\u9645\u4e0a\u65e0\u8bba\u662f\u53ea\u7528\u534a\u52a0\u5668\u6216\u662f\u53ea\u7528\u5168\u52a0\u5668\uff0c\u90fd\u53ef\u4ee5\u5b9e\u73b0\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u4f46\u662f\u6b8a\u9014\u540c\u5f52\uff0c\u65e0\u975e\u662f\u901a\u8fc7\u5916\u90e8\u5668\u4ef6\u6765\u8fdb\u884c\u4e92\u76f8\u8f6c\u5316\u800c\u5df2\u3002\u5982\u679c\u53ea\u4f7f\u7528\u5168\u52a0\u5668\u6765\u5b9e\u73b0\uff0c\u5219\u4ee5 4 bits \u884c\u6ce2\u52a0\u6cd5\u5668\u4e3a\u4f8b\uff0c\u5176\u5927\u81f4\u903b\u8f91\u5982\u4e0b\uff1a

    \u5176\u4e2d\uff0c\u5728\u52a0\u6cd5\u5668\u4e2d\uff0c\\(C_0\\) \u5fc5\u7136\u662f 0\u3002

    \u52a0\u51cf\u6cd5\u5668\uff0c\u6216\u8005\u8bf4\u52a0\u6cd5\u5668\uff0c\u4e00\u822c\u60c5\u51b5\u4e0b\u5728 ALU \u4e2d\u662f\u6700\u5f71\u54cd\u6548\u7387\u7684\u90e8\u5206\uff0c\u800c\u4e14\u5982\u679c\u4f7f\u7528\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u968f\u7740\u4f4d\u6570\u589e\u52a0\u6548\u7387\u4f1a\u8d8a\u6765\u8d8a\u6162\u3002

    \u6240\u4ee5\u4f1a\u6709\u7c7b\u4f3c\u4e8e\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u66f4\u591a\u7684\u5185\u5bb9\u53ef\u4ee5\u770b xxjj \u7684\u8ba1\u7ec4\u7b14\u8bb0\u3002\uff08\u6570\u903b\u4e2d\u6700\u591a\u4e86\u89e3\u5230\u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668\u5373\u53ef\u3002\uff09

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u4e8c\u8fdb\u5236\u51cf\u6cd5","title":"\u4e8c\u8fdb\u5236\u51cf\u6cd5","text":"

    \u9996\u5148\uff0c\u5728\u5f00\u59cb\u4e8c\u8fdb\u5236\u51cf\u6cd5\u7684\u4ecb\u7ecd\u4e4b\u524d\uff0c\u4f60\u9700\u8981\u4e86\u89e3 \u8865\u7801(2's complement)\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u4e1c\u897f\u5b9e\u5728\u662f\u63d0\u8fc7\u592a\u591a\u6b21\u4e86\u6240\u4ee5\u6211\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u518d\u5199\u4e00\u6b21\uff0c\u53ef\u4ee5\u67e5\u770b\u6211\u7684 C \u5c0f\u7b14\u8bb0\u7684\u8865\u7801\u5185\u5bb9\u3002

    \u7ed3\u5408\u8865\u7801\uff0c\u6211\u4eec\u518d\u6765\u89c2\u5bdf\u884c\u6ce2\u52a0\u6cd5\u5668\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u51cf\u6570\u7684\u6bcf\u4e00\u4f4d\u53d6\u53cd\uff0c\u5e76\u5bf9\u6574\u4e2a\u6570\u52a0\u4e00\uff0c\u518d\u76f4\u63a5\u5c06\u5b83\u4eec\u76f8\u52a0\u5373\u53ef\uff0c\u5373\u5c06\u51cf\u6cd5\u8f6c\u5316\u4e3a\u8865\u7801\u4e0b\u7684\u52a0\u6cd5\u3002

    \u5176\u4e2d\u52a0\u4e00\u8fd9\u4e00\u6b65\u6070\u597d\u53ef\u4ee5\u901a\u8fc7\u5728\u52a0\u6cd5\u5668\u4e2d\u5fc5\u5b9a\u4e3a 0 \u7684 \\(C_0\\) \u6765\u5b9e\u73b0\u3002\u6211\u4eec\u5728\u8f93\u5165\u4e2d\u6dfb\u52a0\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u53cd\u7801(1's complement)\uff0c\u518d\u7528 \\(C_0\\) \u5b9e\u73b0\u52a0\u4e00\uff0c\u4ece\u800c\u5f97\u5230\u8865\u7801(2's complement)\uff0c\u5c31\u6837\u5c31\u53ef\u4ee5\u5b9e\u73b0\u52a0\u51cf\u6cd5\u5668\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap03/#\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","title":"\u6709\u7b26\u53f7\u6570\u7684\u8868\u793a\u4e0e\u8ba1\u7b97","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/","title":"Chap 4 Sequential Circuits","text":"

    \u7ea6 6340 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 32 \u5206\u949f

    \u4e0a\u4e00\u7ae0\u8bb2\u7684\u662f\u7ec4\u5408\u7535\u8def\uff0c\u867d\u7136\u7ec4\u5408\u7535\u8def\u80fd\u591f\u5b9e\u73b0\u8bf8\u591a\u529f\u80fd\uff0c\u4f46\u662f\u5b83\u4f9d\u7136\u5b58\u5728\u4e00\u4e9b\u7684\u95ee\u9898\uff1a

    1. \u5bf9\u4e8e\u590d\u6742\u7684\u903b\u8f91\uff0c\u62bd\u8c61\u5c42\u7ea7\u591a\uff0c\u5bfc\u81f4\u786c\u4ef6\u5c42\u9762\u5f00\u9500\u5927\u3001\u8017\u65f6\u957f\uff0c\u4e00\u65b9\u9762\u63d0\u9ad8\u6210\u672c\uff0c\u4e00\u65b9\u9762\u964d\u4f4e\u6548\u7387\uff1b
    2. \u7ec4\u5408\u7535\u8def\u6ca1\u6cd5\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u6240\u6709\u7684\u529f\u80fd\u6a21\u5757\u5bf9\u4e8e\u7279\u5b9a\u7684\u8f93\u5165\u7ed9\u51fa\u76f8\u540c\u7684\u8f93\u51fa\uff1b

    \u800c\u65f6\u5e8f\u7535\u8def\u5219\u62e5\u6709\u5b58\u50a8\u4fe1\u606f\u7684\u80fd\u529b\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u6765\u8bf4\uff0c\u8f93\u51fa\u9664\u4e86\u4e0e\u8f93\u5165\u6709\u5173\uff08\u751a\u81f3\u53ef\u4ee5\u6ca1\u6709\u8f93\u5165\uff09\uff0c\u4e5f\u53ef\u4ee5\u4e0e\u81ea\u8eab \u72b6\u6001(state) \u6709\u5173\u3002

    \u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u5206\u4e3a\u4e24\u7c7b\uff08\u4e3b\u8981\u5206\u7c7b\u4f9d\u636e\u662f\u8f93\u5165\u4fe1\u53f7\u7684\u65f6\u95f4\u548c\u5185\u90e8\u72b6\u6001\u6539\u53d8\u7684\u65f6\u95f4\uff09\uff1a\u540c\u6b65\u65f6\u5e8f\u7535\u8def(synchronous sequential circuit) \u548c \u5f02\u6b65\u65f6\u5e8f\u7535\u8def(asynchronous sequential circuit)\u3002

    The behavior of a synchronous sequential circuit can be defined from the knowledge of its signals at discrete instants of time. The behavior of an asynchronous sequential circuit depends upon the inputs at any instant of time and the order in continuous time in which the inputs change.

    \u4e00\u822c\u6765\u8bf4\uff0c\u5f02\u6b65\u7535\u8def\u7684\u8bbe\u8ba1\u76f8\u5bf9\u56f0\u96be\uff08\u884c\u4e3a\u4e0e\u95e8\u7684\u4f20\u64ad\u5ef6\u8fdf\u548c\u8f93\u5165\u4fe1\u53f7\u53d8\u5316\u7684\u65f6\u95f4\u5e8f\u5217\u5bc6\u5207\u76f8\u5173\uff09\uff0c\u4f46\u4ecd\u7136\u5341\u5206\u5fc5\u8981\uff0c\u6bd4\u5982\u89e6\u53d1\u5668\u5c31\u662f\u4ee5\u4e00\u90e8\u9501\u5b58\u5668\u4e3a\u6a21\u5757\u8bbe\u8ba1\u7684\uff1b\u800c\u540c\u6b65\u7535\u8def\u7684\u4f7f\u7528\u66f4\u52a0\u5e7f\u6cdb\uff0c\u901a\u5e38\u8fd9\u4e9b\u201c\u79bb\u6563\u7684\u65f6\u523b\u201d\u90fd\u662f\u7531 \u65f6\u949f\u53d1\u751f\u5668(clock generator) \u8fd9\u79cd\u65f6\u5e8f\u5668\u4ef6\u4ea7\u751f\u5468\u671f\u6027\u7684 \u65f6\u949f\u8109\u51b2(clock pulse) \u5e8f\u5217\u6765\u5b9e\u73b0\u7684\uff08\u8fd9\u79cd\u7535\u8def\u4e00\u822c\u88ab\u79f0\u4e3a \u949f\u63a7\u65f6\u5e8f\u7535\u8def(clocked sequential circuit)\uff0c\u7531\u4e8e\u8bbe\u8ba1\u76f8\u5bf9\u5bb9\u6613\uff0c\u9c81\u68d2\u6027\u5f3a\uff0c\u6240\u4ee5\u88ab\u5e7f\u6cdb\u5e94\u7528\uff09\u3002

    \u7f13\u51b2

    \u7f13\u51b2\u5668(buffer) \u4e00\u822c\u901a\u8fc7\u4e24\u4e2a\u975e\u95e8\u4e32\u8054\uff0c\u5e76\u5c06\u8f93\u5165\u8fde\u901a\u8f93\u51fa\u5b9e\u73b0\uff0c\u8fd9\u6837\u80fd\u591f\u5b9e\u73b0\u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u7136\u800c\u65e0\u6cd5\u4fee\u6539\u3002\u800c\u9501\u5b58\u5668\u5c31\u662f\u5728\u7f13\u51b2\u5668\u7684\u57fa\u7840\u4e0a\uff0c\u5c06\u975e\u95e8\u66ff\u6362\u4e3a\u6216\u975e\u95e8\u6216\u4e0e\u975e\u95e8\u5b9e\u73b0\u7684\u3002

    \u5176\u4e2d\uff0c\u4ece\u7ed9\u5b9a\u8f93\u5165\u5230\u66f4\u65b0\u8f93\u51fa\u6709\u4e00\u4e2a \\(t_G\\) \u7684\u5ef6\u65f6\u3002

    \u5f15\u5165

    \u663e\u7136\uff0c\u6839\u636e\u4e0a\u9762\u7684\u6982\u8ff0\uff0c\u65f6\u5e8f\u7535\u8def\u4e2d\u6700\u91cd\u8981\u7684\u5c31\u662f\u4fe1\u606f\u5b58\u50a8\u5143\u4ef6\u3002\u5f53\u8f93\u5165\u4fe1\u53f7\u4e0d\u53d1\u751f\u53d8\u5316\u65f6\uff08\u91cd\u70b9\u662f\u53d8\u5316\uff0c\u5373\u8f93\u5165\u548c\u5b58\u50a8\u4fe1\u606f\u672a\u5fc5\u5b58\u5728\u5bf9\u5e94\u5173\u7cfb\uff09\u5b58\u50a8\u5143\u4ef6\u5c31\u80fd\u591f\u4fdd\u6301\u5176\u5185\u90e8\u5b58\u50a8\u7684\u4e8c\u8fdb\u5236\u6570\u636e\u3002

    \u5b58\u50a8\u5143\u4ef6\u4e3b\u8981\u7531 \u9501\u5b58\u5668(latch) \u548c \u89e6\u53d1\u5668(flip-flop) \u4e24\u79cd\uff0c\u5176\u4e2d\u524d\u8005\u662f\u540e\u8005\u7684\u57fa\u7840\uff0c\u6216\u8005\u8bf4\u591a\u6570\u60c5\u51b5\u4e0b\u6211\u4eec\u4f7f\u7528\u540e\u8005\uff0c\u4f46\u540e\u8005\u7531\u524d\u8005\u6784\u6210\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u9501\u5b58\u5668","title":"\u9501\u5b58\u5668","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr--sr-\u9501\u5b58\u5668","title":"SR & S'R' \u9501\u5b58\u5668","text":"

    SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u57fa\u672c\u539f\u7406\u662f\u4e00\u81f4\u7684\uff0c\u53ea\u4e0d\u8fc7\u524d\u8005\u7528\u7684\u662f\u6216\u975e\u95e8\uff0c\u540e\u8005\u7528\u7684\u662f\u4e0e\u975e\u95e8\u3002

    SR \u9501\u5b58\u5668\u548c S'R' \u9501\u5b58\u5668\u7684\u8f93\u5165\u90fd\u662f S(Set) \u548c R(Reset) \u4e24\u4e2a\u90e8\u5206\uff0c\u8f93\u51fa\u90fd\u662f Q \u548c Q' \u4e24\u4e2a\u90e8\u5206\u3002

    \u540d\u79f0\u4e0a \u7684\u5171\u540c\u70b9\u662f\uff0c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\uff1b\u5bf9\u4e8e R \u548c Q' \u4e5f\u662f\u8fd9\u6837\uff0c\u53ea\u4e0d\u8fc7\u8981\u6ce8\u610f\uff0cS'R'\u9501\u5b58\u5668\u8f93\u5165\u7684\u5e76\u4e0d\u662f\u8fd9\u91cc\u6240\u8bf4\u7684 S\uff0c\u800c\u662f\u5c06 S' \u4f5c\u4e3a\u8f93\u5165\u3002

    SR \u9501\u5b58\u5668S'R' \u9501\u5b58\u5668

    \u4e00\u4e2a\u8bb0\u5fc6\u65b9\u6cd5\u662f\uff0cSR \u7684\u95e8\u5143\u4ef6\u5bf9 1 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u6216\u975e\u95e8 \u7684\u5b9e\u73b0\uff1b\u800c S'R' \u7684\u95e8\u5143\u4ef6\u5bf9 0 \u654f\u611f\uff0c\u6240\u4ee5\u662f \u4e0e\u975e\u95e8 \u7684\u5b9e\u73b0\u3002\u800c\u901a\u8fc7 \u300c\u5f53 S \u4e3a 1 \u65f6\uff0cQ \u90fd\u4f1a\u662f 1\u300d\u53ef\u4ee5\u5f97\u5230 S\u3001R \u4e0e Q\u3001Q' \u7684\u4f4d\u7f6e\u3002

    \u4f46\u662f\u5b9e\u9645\u7684\u5b58\u50a8\u5143\u4ef6\u5e76\u4e0d\u662f\u5355\u7eaf\u7684 SR/S'R' Latches\uff0c\u6240\u4ee5\u5b83\u4eec\u5f53\u7136\u662f\u5b58\u5728\u95ee\u9898\u7684\u3002\u7531\u4e8e\u7535\u8def\u5b58\u5728\u5ef6\u65f6\uff0c\u6240\u4ee5 S \u548c R \u7684\u8f93\u5165\u5f88\u96be\u540c\u65f6\u5230\u8fbe\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u524d\u9762\u52a0\u4e00\u4e2a\u63a7\u5236\u7aef\uff0c\u5f53\u786e\u4fdd\u4e24\u4e2a\u8f93\u5165\u90fd\u5230\u4f4d\u7684\u65f6\u5019\u518d\u4f7f\u80fd\u3002

    \u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\uff0c\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668(SR Latch with Control Input)\uff08S'R'\u7565\uff09\uff1a

    \u6ce8\u610f\uff01SR \u9501\u5b58\u5668\u901a\u8fc7 \u6216\u975e\u95e8 \u5b9e\u73b0\uff0c\u4f46\u5e26\u8f93\u5165\u63a7\u5236\u7684 SR \u9501\u5b58\u5668\u5219\u901a\u8fc7 \u4e0e\u975e\u95e8 \u5b9e\u73b0\uff01

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#d-\u9501\u5b58\u5668","title":"D \u9501\u5b58\u5668","text":"

    D \u9501\u5b58\u5668\u5b9e\u9645\u4e0a\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\u7684\u6539\u8fdb\u3002\u5176\u4e2d\u6211\u4eec\u5173\u6ce8\u5230\uff0c\u867d\u7136 S \u548c R \u8d77\u4f5c\u7528\u7684\u6709\u4e09\u79cd\u72b6\u6001

    \u6211\u4eec\u5173\u6ce8\u5230\uff0c\u5373\u4f7f\u662f\u5e26\u63a7\u5236\u8f93\u5165\u7684 SR \u9501\u5b58\u5668\uff0c\u4e5f\u5b58\u5728\u4e00\u4e2a\u300cundefined\u300d\u72b6\u6001\uff0c\u800c\u8fd9\u662f\u6211\u4eec\u4e0d\u5e0c\u671b\u51fa\u73b0\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u60f3\uff0c\u80fd\u4e0d\u80fd\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\u7684\u53d1\u751f\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u7531\u4e8e\u53ef\u4ee5\u901a\u8fc7 C \u6765\u63a7\u5236\u662f\u5426\u4fdd\u6301\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u5f3a\u5236\u8981\u6c42 \\(S = \\overline R\\)\uff0c\u4e8e\u662f\u5c31\u907f\u514d\u4e86 undefined \u60c5\u51b5\u7684\u51fa\u73b0\uff0c\u8fd9\u5c31\u662f D \u9501\u5b58\u5668(D Latch)\u3002

    \u53ea\u6709\u5f53 C \u4e3a 1 \u65f6\uff0cD \u9501\u5b58\u5668\u624d\u80fd\u5199\u5165\u6570\u636e\uff1b\u800c\u5f53 C \u4e3a 0 \u65f6\uff0cD \u9501\u5b58\u5668\u7684\u6570\u636e\u5c31\u4e0d\u4f1a\u53d8\u5316\u3002

    \u900f\u660e\u7684\u5371\u5bb3\uff1a\u7a7a\u7ffb

    \u5f53\u7136\uff0cD \u9501\u5b58\u5668\u4e5f\u5b58\u5728\u95ee\u9898\u3002\u5982\u679c\u6211\u95e8\u5c06 \\(\\overline Q\\) \u63a5\u5230 \\(D\\) \u4e0a\uff0c\u5c31\u4f1a\u53d1\u73b0 C \u7f6e 1 \u65f6 D \u9501\u5b58\u5668\u5c06\u4e0d\u505c\u7684\u53d8\u5316\u5176\u4e2d\u7684\u6570\u636e\uff0c\u51fa\u73b0 \u7a7a\u7ffb\uff0c\u5bfc\u81f4\u6211\u4eec\u65e0\u6cd5\u786e\u5b9a C \u7f6e 0 \u65f6 Q \u7684\u8f93\u51fa\u7a76\u7adf\u662f\u4ec0\u4e48\uff0c\u800c\u8fd9\u662f\u975e\u5e38\u5371\u9669\u7684\u3002

    \u8fd9\u4e3b\u8981\u662f\u56e0\u4e3a D \u9501\u5b58\u5668\u7684\u8f93\u5165\u548c\u8f93\u51fa\u90fd\u662f\u76f4\u63a5\u66b4\u9732\u51fa\u6765\u3001\u540c\u65f6\u5141\u8bb8\u53d8\u5316\u7684\uff08\u4e0d\u662f\u540c\u65f6\u53d8\u5316\uff0c\u662f\u6307\u5728 Input \u53ef\u4ee5\u53d8\u7684\u65f6\u5019 Output \u4e5f\u80fd\u53d8\uff09\uff0c\u5373 \u900f\u660e(transparent) \u7684\u3002\u8fd9\u5c31\u5bfc\u81f4\u4e86\u5728\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u91cc\uff0c\u540c\u65f6\u5b58\u5728 \u53ef\u4ee5\u4e92\u76f8\u5f71\u54cd \u7684\u4e24\u4e2a\u4e1c\u897f\u3002\u8fd9\u4e5f\u662f\u89e6\u53d1\u5668\u6240\u89e3\u51b3\u7684\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668","title":"\u89e6\u53d1\u5668","text":"

    \u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u63d0\u5230\u7684\uff0c\u7531\u300c\u900f\u660e\u300d\u5f15\u53d1\u7684\u95ee\u9898\uff0c\u800c\u91c7\u7528\u89e6\u53d1\u5668\u7684\u8bbe\u8ba1\u3002\u901a\u8fc7\u7ec4\u5408\u4e24\u4e2a\u9501\u5b58\u5668\uff0c\u4e3b\u8981\u6709\u4e24\u79cd\u5b9e\u73b0\u65b9\u6cd5\uff1a

    1. \u5728\u6709\u8109\u51b2\uff08\u9ad8\u7535\u5e73\uff09\u65f6\uff0c\u4fee\u6539\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fdd\u6301\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff1b\u5728\u6ca1\u6709\u8109\u51b2\uff08\u4f4e\u7535\u5e73\uff09\u65f6\u5019\u4fdd\u6301\u7b2c\u4e00\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u4fee\u6539\u7b2c\u4e8c\u4e2a\u9501\u5b58\u5668\u7684\u503c\uff0c\u66f4\u65b0\u89e6\u53d1\u5668\u7684\u72b6\u6001\uff0c\u5373 \u4e3b\u4ece\u5f0f(master-slave)\u89e6\u53d1\u5668\uff1b
    2. \u4ec5\u5728\u65f6\u949f\u7684\u8fb9\u7f18\u89e6\u53d1\uff0c\u5373\u5728\u7279\u5b9a\u65f6\u523b\u4ec5\u63a5\u53d7\u4e00\u4e2a\u8f93\u5165\uff0c\u5373 \u8fb9\u6cbf\u89e6\u53d1\u5f0f(edge-triggered)\u89e6\u53d1\u5668\uff1b

    \u8fb9\u6cbf\u89e6\u53d1\u5f0f D \u89e6\u53d1\u5668\u662f\u76ee\u524d\u4f7f\u7528\u6700\u5e7f\u6cdb\u7684\u89e6\u53d1\u5668\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#sr-\u4e3b\u4ece\u89e6\u53d1\u5668","title":"SR \u4e3b\u4ece\u89e6\u53d1\u5668","text":"

    \u867d\u7136\u5b83\u53eb FF\uff0c\u4f46\u5b83\u5e76\u4e0d\u7b26\u5408 FF \u7684\u7279\u5f81\uff0c\u7136\u800c\u5206\u7c7b\u4e0a\u53c8\u5c5e\u4e8e pulse-triggered FF\u3002

    SR \u89e6\u53d1\u5668\u4e4b\u6240\u4ee5\u662f\u6240\u8c13\u7684 pulse-triggered \u7684\uff0c\u662f\u56e0\u4e3a\u5728 C \u7f6e 1\uff0cS \u548c R \u7f6e 0 \u65f6\uff0c\u5982\u679c\u51fa\u73b0\u566a\u97f3\uff08S \u6216 R \u8f93\u5165\u77ed\u6682\u5730\u8df3\u53d8\u5230 1\uff09\uff0c\u5c31\u4f1a\u5bfc\u81f4 Slave \u5199\u5165\u5f02\u5e38\u6570\u636e\uff08\u8fd9\u4e2a\u884c\u4e3a\u88ab\u79f0\u4e3a 1s-catching\uff09\u3002

    \u4f46\u662f\u6211\u4e2a\u4eba\u8ba4\u4e3a\u8fd9\u662f SR \u81ea\u8eab\u6709\u4e24\u4e2a\u4fdd\u6301\u6001\uff08C \u7f6e 0 \u4fdd\u6301\uff1bC \u7f6e 1\uff0cS \u548c R \u7f6e 0\uff09\u5bfc\u81f4\u7684\u5f0a\u7aef\uff0c\u800c\u5728\u5b9e\u9645\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u6211\u4eec\u5c31\u4e0d\u5e94\u8be5\u4f7f\u7528\u540e\u8005\u4f5c\u4e3a\u4fdd\u6301\u6001\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u8fb9\u6cbf\u89e6\u53d1\u5f0f\u89e6\u53d1\u5668","title":"\u8fb9\u6cbf\u89e6\u53d1\u5f0f\u89e6\u53d1\u5668","text":"

    \u4e0a\u9762\u5df2\u7ecf\u8bf4\u8fc7\u4e86\uff0c\u8fb9\u6cbf\u89e6\u53d1\u5f0f\u89e6\u53d1\u5668\u4e3b\u8981\u5bf9\u8109\u51b2\u7684 \u4e0a\u5347\u6cbf \u6216 \u4e0b\u964d\u6cbf \u654f\u611f\u3002

    \u4e0b\u56fe\u4e3a\u4e0a\u5347\u6cbf\u89e6\u53d1(positive-edge-triggered)\u7684 D \u89e6\u53d1\u5668\u7684\u5927\u81f4\u539f\u7406\u56fe\uff08\u5c06 C \u524d\u7684\u975e\u95e8\u53bb\u6389\u5219\u53ef\u5f97\u5230\u4e0b\u964d\u6cbf\u89e6\u53d1(negative-edge-triggered)\u7684 D \u89e6\u53d1\u5668\uff09\u3002

    \u5173\u6ce8\u4e0a\u5347\u6cbf\u524d\u540e\uff0c\u4e0a\u5347\u6cbf\u524d\u4e00\u523b\uff0c\u4e3b\u9501\u5b58\u5668\u53ef\u5199\uff0c\u4ece\u9501\u5b58\u5668\u53ea\u8bfb\uff1b\u4e0a\u5347\u6cbf\u540e\u4e00\u523b\uff0c\u4e3b\u9501\u5b58\u5668\u53ea\u8bfb\uff0c\u4ece\u9501\u5b58\u5668\u53ea\u5199\uff0c\u4e14\u5199\u5165\u7684\u662f\u4e3b\u9501\u5b58\u5668\u5b58\u50a8\u7684\u503c\u2014\u2014\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5b58\u7684\u662f\u4e0a\u5347\u6cbf\u524d\u4e00\u523b\u5199\u5165\u4e3b\u9501\u5b58\u5668\u7684\u5185\u5bb9\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0cD \u89e6\u53d1\u5668\u6ca1\u6709\u300c\u4fdd\u6301\u300d\u6001\u3002\u5982\u679c\u8981\u4f7f D \u89e6\u53d1\u5668\u4fdd\u6301\uff0c\u53ef\u4ee5\u4f7f\u65f6\u949f\u8109\u51b2\u5931\u6548\u6216\u901a\u8fc7 MUX \u5c06\u8f93\u51fa\u63a5\u5230\u8f93\u5165\u5b9e\u73b0\u3002\u5176\u4e2d\u524d\u8005\u4e0d\u592a\u5e38\u7528\uff0c\u56e0\u4e3a\u53d7\u95e8\u63a7\u7684\u65f6\u949f\u8109\u51b2\u8fdb\u5165\u89e6\u53d1\u5668\u65f6\u6709\u5ef6\u8fdf\uff0c\u5373 \u65f6\u949f\u504f\u79fb(clock skew)\u3002\u5173\u4e8e\u65f6\u949f\u504f\u79fb\u7684\u66f4\u8be6\u7ec6\u4ecb\u7ecd\u53ef\u4ee5\u79fb\u6b65 \u7b2c\u516d\u7ae0#\u4fdd\u6301\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u6807\u51c6\u56fe\u5f62\u7b26\u53f7","title":"\u6807\u51c6\u56fe\u5f62\u7b26\u53f7","text":"

    \u5e26\u5706\u5708\u8868\u793a\u8d1f\u903b\u8f91\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u76f4\u63a5\u8f93\u5165","title":"\u76f4\u63a5\u8f93\u5165","text":"

    \u8fd9\u4e9b\u76f4\u63a5\u8f93\u5165\u5f80\u5f80\u662f\u5f02\u6b65\u7684\uff0c\u4e00\u822c\u7528\u6765\u5f02\u6b65\u7f6e\u4f4d\uff08\u76f4\u63a5\u7f6e\u4f4d\u6216\u9884\u7f6e\uff09\u6216\u5f02\u6b65\u590d\u4f4d\uff08\u76f4\u63a5\u590d\u4f4d\u6216\u6e05\u96f6\uff09\u3002

    \u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u6765\u8bf4\uff0c\u300c\u590d\u4f4d\u300d\u6216\u300c\u7f6e\u4f4d\u300d\u8fd9\u79cd\u8f93\u5165\u5e38\u5e38\u4f5c\u4e3a\u521d\u59cb\u5316\uff0c\u5373\u786e\u5b9a\u5404\u4e2a\u89e6\u53d1\u5668\u7684\u300c\u521d\u59cb\u72b6\u6001\u300d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u7684\u57fa\u672c\u63cf\u8ff0\u65b9\u6cd5","title":"\u89e6\u53d1\u5668\u7684\u57fa\u672c\u63cf\u8ff0\u65b9\u6cd5","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u5206\u6790","title":"\u65f6\u5e8f\u7535\u8def\u5206\u6790","text":"

    \u4e3a\u4e86\u5206\u6790\u65f6\u5e8f\u7535\u8def\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e9b\u5de5\u5177\u6765\u8868\u793a\u65f6\u5e8f\u7535\u8def\u7684\u4e00\u4e9b\u7279\u5f81\u4e0e\u903b\u8f91\u3002\u89c2\u5bdf\u65f6\u5e8f\u7535\u8def\u548c\u7ec4\u5408\u7535\u8def\u7684\u533a\u522b\uff0c\u53d1\u73b0\u6700\u6838\u5fc3\u7684\u5c31\u662f\u903b\u8f91\u8fd0\u7b97\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u4e86\u300c\u72b6\u6001\u300d\u53c2\u4e0e\u8fd0\u7b97\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u5728\u5404\u4e2a\u7ec4\u5408\u7535\u8def\u5206\u6790\u4e2d\u91c7\u7528\u7684\u8868\u793a\u65b9\u6cd5\u4e2d\uff0c\u6dfb\u52a0\u8868\u793a\u300c\u72b6\u6001\u300d\u7684\u4fe1\u606f\u3002

    \u9664\u6b64\u4e4b\u5916\uff0c\u5982\u679c\u53ea\u662f\u5355\u7eaf\u7684\u5c06\u300c\u72b6\u6001\u300d\u4f5c\u4e3a\u4e00\u4e2a\u65b0\u7684\u8f93\u5165\uff0c\u4f5c\u4e3a\u589e\u91cf\u6dfb\u52a0\u5230\u8868\u8fbe\u65b9\u5f0f\u4e2d\uff0c\u4f1a\u53d1\u73b0\u8fd9\u4e9b\u8868\u8ff0\u4f1a\u663e\u5f97\u5f88\u91cd\u3002\u6240\u4ee5\u6211\u4eec\u4e5f\u9700\u8981\u5bfb\u627e\u4e00\u79cd\u66f4\u597d\u7684\u529e\u6cd5\u6765\u8868\u8fbe\u65f6\u5e8f\u7535\u8def\u4e2d\u7684\u903b\u8f91\uff0c\u8fd9\u5c31\u662f\u300c\u72b6\u6001\u56fe\u300d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u7684\u8f93\u5165\u65b9\u7a0b","title":"\u89e6\u53d1\u5668\u7684\u8f93\u5165\u65b9\u7a0b","text":"

    \u89e6\u53d1\u5668\u7684\u8f93\u5165\u65b9\u7a0b(flip-flop input equation) \u4e3b\u8981\u662f\u4e3a\u5176\u63d0\u4f9b\u4e00\u4e2a\u4ee3\u6570\u8868\u8fbe\u65b9\u5f0f\u3002\u5b83\u7684\u4e3b\u8981\u60f3\u6cd5\u662f\u24f5\u8868\u8fbe\u6bcf\u4e00\u4e2a\u89e6\u53d1\u5668\u7684\u8f93\u5165\u4e0e\u8f93\u51fa\u4e4b\u95f4\u7684\u5173\u7cfb\uff1b\u24f6\u8868\u8fbe\u6bcf\u4e00\u4e2a\u76f4\u63a5\u8f93\u51fa\u7684\u903b\u8f91\u8868\u8fbe\u5f0f\u3002\u5176\u4e2d\uff0c\u89e6\u53d1\u5668\u7684\u8f93\u51fa\u7b26\u53f7\u8868\u793a\u4e86\u5176\u7c7b\u578b\uff08\u5373\u7b26\u53f7\uff09\u4e0e\u8f93\u51fa\uff08\u5373\u4e0b\u6807\uff09\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e2a\u7535\u8def\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u4e2d\u5305\u542b\u4e24\u4e2a\u89e6\u53d1\u5668 \\(D_A\\) \u548c \\(D_B\\)\uff0c\u4ee5\u53ca\u4e00\u4e2a\u7ec4\u5408\u903b\u8f91\u8f93\u51fa \\(Y\\)\uff0c\u56e0\u800c\u53ef\u4ee5\u6839\u636e\u7535\u8def\u7684\u7279\u5f81\uff0c\u5f97\u5230\u4e0b\u9762\u8fd9\u51e0\u4e2a\u5f0f\u5b50\uff1a

    \\[ \\begin{aligned} D_A & = AX + BX \\\\ D_B & = \\overline{A}X \\\\ Y & = (A + B)\\overline{X} \\end{aligned} \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u8868","title":"\u72b6\u6001\u8868","text":"

    \u5f53\u7136\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u903b\u8f91\u6709\u65f6\u5019\u4e5f\u53ef\u4ee5\u901a\u8fc7\u72b6\u6001\u8868\u6765\u63cf\u8ff0\uff0c\u53ea\u4e0d\u8fc7\u4e0e\u7ec4\u5408\u7535\u8def\u7684 \u771f\u503c\u8868 \u4e0d\u540c\uff0c\u72b6\u6001\u8868(state table) \u6709\u56db\u680f\uff1a\u5f53\u524d\u72b6\u6001(present state)\u3001\u8f93\u5165(input)\u3001\u4e0b\u4e00\u72b6\u6001(next state)\u3001\u8f93\u51fa(output)\u3002\u5176\u542b\u4e49\u662f\u6bd4\u8f83\u663e\u7136\u7684\uff0c\u53ea\u4e0d\u8fc7\u9700\u8981\u901a\u8fc7\u7535\u8def\u56fe\u5f97\u5230\u72b6\u6001\u8868\uff0c\u9700\u8981\u9996\u5148\u5f97\u5230\u300c\u5f53\u524d\u72b6\u6001\u300d\u5411\u300c\u4e0b\u4e00\u72b6\u6001\u300d\u8f6c\u79fb\u7684\u65b9\u7a0b\uff0c\u5373\u5bf9\u4e8e\u67d0\u4e2a\u65f6\u523b \\(t\\) \u7684\u89e6\u53d1\u5668 \\(A\\) \u7684\u8f93\u51fa \\(A(t)\\)\uff0c\u9700\u8981\u5f97\u5230\u5b83\u4e0b\u4e00\u523b\u7684\u72b6\u6001 \\(A(t+1) = f(A(t), ...)\\)\u3002

    \u540c\u6837\u4ee5\u8fd9\u4e2a\u7535\u8def\u4e3a \ud83c\udf30\uff1a

    \u9996\u5148\u6211\u4eec\u5bf9 \\(D_A\\) \u5f97\u5230\u8f6c\u79fb\u65b9\u7a0b\uff1a\\(A(t+1) = D_A = A(t)X + B(t)X\\)\uff0c\u53ef\u4ee5\u7b80\u5199\u4e3a \\(A(t+1) = D_A = AX+BX\\)\u3002\u7c7b\u4f3c\u5730\u4e5f\u80fd\u5f97\u5230 \\(B\\) \u7684\u8f6c\u79fb\u65b9\u7a0b\u3002

    \u4e8e\u662f\uff0c\u6839\u636e\u8fd9\u4e9b\u4fe1\u606f\uff0c\u6211\u4eec\u53ef\u4ee5\u5199\u51fa\u5b83\u7684\u72b6\u6001\u8868\uff1a

    Present StateAB InputX Next StateAB OutputY 00 0 00 0 00 1 01 0 01 0 00 1 01 1 11 0 10 0 00 1 10 1 10 0 11 0 00 1 11 1 10 0

    Mealy model circuit & Moore model circuit

    \u5982\u679c\u8f93\u51fa\u65e2\u4f9d\u8d56\u4e8e\u5f53\u524d\u72b6\u6001\uff0c\u4e5f\u4f9d\u8d56\u4e8e\u8f93\u5165\u7684\u65f6\u5e8f\u7535\u8def\uff0c\u5219\u79f0\u4e3a \u7c73\u52d2\u578b\u7535\u8def(Mealy model circuit)\uff1b\u800c\u5982\u679c\u8f93\u51fa\u53ea\u4f9d\u8d56\u4e8e\u5f53\u524d\u72b6\u6001\uff0c\u5219\u79f0\u4e3a \u6469\u5c14\u578b\u7535\u8def(Moore model circuit)\u3002

    \u5728 \u72b6\u6001\u56fe \u4e2d\uff0c\u6211\u4eec\u8fd8\u5c06\u518d\u4e00\u6b21\u9047\u5230\u8fd9\u4e24\u4e2a\u4eba\u540d\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u56fe","title":"\u72b6\u6001\u56fe","text":"

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u72b6\u6001\u8868\u6bd4\u8f83\u6e05\u6670\u7684\u8868\u8fbe\u4e86\u4e0d\u540c\u7684\u72b6\u6001\u548c\u8f93\u5165\u5f97\u5230\u7684\u7ed3\u679c\uff0c\u4f46\u662f\u5bf9\u4e8e\u300c\u4e0d\u540c\u72b6\u6001\u4e4b\u95f4\u662f\u5982\u4f55\u8f6c\u6362\u7684\u300d\u8fd9\u4ef6\u4e8b\u7684\u63cf\u8ff0\u5e76\u4e0d\u6e05\u6670\u3002\u800c\u5bf9\u4e8e\u300c\u8054\u7cfb\u300d\u8fd9\u4ef6\u4e8b\uff0c\u6709\u5411\u56fe\u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u5f62\u5f0f\uff0c\u6240\u4ee5\u6211\u4eec\u5c06\u4ecb\u7ecd \u72b6\u6001\u56fe(state diagram)\u3002

    \u72b6\u6001\u56fe\u627f\u8f7d\u7684\u4fe1\u606f\u91cf\u548c\u72b6\u6001\u8868\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u4e5f\u662f\u9700\u8981\u8868\u8fbe \u5f53\u524d\u72b6\u6001(present state)\u3001\u8f93\u5165(input)\u3001\u4e0b\u4e00\u72b6\u6001(next state)\u3001\u8f93\u51fa(output) \u8fd9\u56db\u4e2a\u4e1c\u897f\u3002\u53ea\u4e0d\u8fc7\u300c\u4e0b\u4e00\u72b6\u6001\u300d\u662f\u901a\u8fc7\u6709\u5411\u8fb9\u6765\u8868\u793a\u7684\u3002\u5f53\u524d\u72b6\u6001\u4f5c\u4e3a\u4e00\u4e2a node \u7684\u5c5e\u6027\uff1b\u800c\u8f93\u5165\u4f5c\u4e3a edge \u7684\u4e00\u4e2a\u5c5e\u6027\uff1b\u81f3\u4e8e\u8f93\u51fa\uff0c\u6839\u636e\u5b83\u662f\u653e\u5728 edge \u4e0a\u8fd8\u662f node \u4e0a\uff0c\u5206\u4e3a \u7c73\u52d2\u578b(Mealy) \u548c \u6469\u5c14\u578b(Moore) \u4e24\u79cd\u3002

    Mealy

    \u4f8b\u5982\uff0c\u8fd9\u662f\u4e00\u4e2a \u7c73\u52d2\u578b \u7684\u72b6\u6001\u56fe\uff0c\u4ee5\u53ca\u5bf9\u5e94\u7684\u72b6\u6001\u8868\u3002

    \u56e0\u4e3a\u7c73\u52d2\u578b\u7535\u8def\u7684 \u8f93\u51fa\u4e0e\u5f53\u524d\u72b6\u6001\u548c\u8f93\u5165\u90fd\u6709\u5173\uff0c\u6240\u4ee5\u8f93\u51fa\u4f1a\u548c\u8f93\u5165\u653e\u5728\u4e00\u8d77\uff0c\u5373\u653e\u5728 edge \u91cc\u3002

    \u5bf9\u4e8e\u7c73\u52d2\u578b\uff0cnode \u5185\u7684\u4e8c\u8fdb\u5236\u4e3a present state \u4e2d\u7684 AB\uff1bedge \u4e0a\u5206\u522b\u4e3a input \u548c output\uff1aX/Y\uff1b\u6709\u5411\u8fb9\u8868\u8fbe\u4e86\u6bcf\u4e2a\u72b6\u6001\u5728\u7279\u5b9a\u8f93\u5165\u4e0b\u7684\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002

    \u4f8b\u5982\uff0c\u5173\u6ce8 node 00\uff0c\u5b83\u6709\u4e00\u6761\u81ea\u73af 0/0\uff0c\u5bf9\u5e94 \u72b6\u6001\u8868 \u7684\u7b2c\u4e00\u884c\uff1b\u5b83\u6709\u4e00\u6761 edge 1/0 \u6307\u5411 node 01\uff0c\u5bf9\u5e94 \u72b6\u6001\u8868\u7684\u7b2c\u4e8c\u884c\u3002

    \u5f53\u7136\uff0c\u7c73\u52d2\u578b\u662f\u6709 \u7f3a\u9677 \u7684\uff0c\u5728\u65f6\u5e8f\u7535\u8def\u8bbe\u8ba1\u4e4b\u540e\u7684\u6b65\u9aa4\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u6839\u636e\u5b83\u6765\u5bf9\u6bcf\u4e00\u4e2a\u72b6\u6001\u8bbe\u8ba1\u8f93\u51fa\u65b9\u7a0b\u3002\u6b64\u65f6\u7531\u4e8e\u4e24\u4e2a\u8f93\u51fa\u5171\u4eab\u540c\u4e00\u4e2a\u76ee\u6807\u72b6\u6001\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u4e24\u4e2a\u8f93\u51fa\u7ed3\u5408\u5230\u540c\u4e00\u4e2a\u5f0f\u5b50\u4e2d\uff0c\u8fd9\u5c06\u63d0\u9ad8\u8bbe\u8ba1\u96be\u5ea6\u548c\u7ec4\u5408\u7535\u8def\u6210\u672c\u3002

    Moore

    \u800c\u4e0b\u9762\u662f\u4e00\u4e2a \u6469\u5c14\u578b \u7684\u72b6\u6001\u56fe\uff0c\u4ee5\u53ca\u5bf9\u5e94\u7684\u72b6\u6001\u8868\u3002

    \u56e0\u4e3a\u6469\u5c14\u578b\u7535\u8def\u7684 \u8f93\u51fa\u53ea\u4e0e\u5f53\u524d\u72b6\u6001\u6709\u5173\uff0c\u6240\u4ee5\u8f93\u51fa\u4f1a\u548c\u5f53\u524d\u72b6\u6001\u653e\u5728\u4e00\u8d77\uff0c\u5373\u653e\u5728 node \u91cc\u3002

    \u5bf9\u4e8e\u6469\u5c14\u578b\uff0cnode \u5185\u7684\u4e8c\u8fdb\u5236\u8868\u793a present state \u548c output\uff1aA/Z\uff1bedge \u4e0a\u5217\u4e3e\u4e86\u8fd9\u79cd\u8f6c\u79fb\u53ef\u80fd\u7684 inputs\uff1aXY\u3002

    \u4f8b\u5982\uff0c\u5173\u6ce8 node 0/0\uff0c\u5b83\u6709\u4e24\u6761\u81ea\u73af 00 \u548c 11\uff0c\u5206\u522b\u5bf9\u5e94 \u72b6\u6001\u8868 \u7684\u7b2c\u4e00\u884c\u548c\u7b2c\u56db\u884c\uff1b\u5b83\u6709\u4e24\u6761 edge 01 \u548c 10 \u6307\u5411 node 1/1\uff0c\u5bf9\u5e94 \u72b6\u6001\u8868 \u7684\u7b2c\u4e8c\u884c\u548c\u7b2c\u4e09\u884c\u3002

    \u6469\u5c14\u578b\u4e5f\u5b58\u5728 \u7f3a\u9677 \u7684\uff0c\u975e\u5e38\u663e\u7136\uff0c\u76f8\u6bd4\u4e8e\u7c73\u52d2\u578b\uff0c\u6469\u5c14\u578b\u9700\u8981\u66f4\u591a\u7684\u72b6\u6001\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u7c73\u52d2\u578b\u503e\u5411\u4e8e\u8868\u8fbe\u300c\u5728\u7279\u5b9a\u72b6\u6001\u4e0b\uff0c\u7279\u5b9a\u8f93\u5165\u5c06\u5bfc\u81f4\u67d0\u79cd\u7ed3\u679c\uff0c\u4ee5\u53ca\u72b6\u6001\u8f6c\u79fb\u300d\uff1b\u800c\u6469\u5c14\u578b\u503e\u5411\u4e8e\u8868\u8fbe\u300c\u7279\u5b9a\u8f93\u5165\u5c06\u5bfc\u81f4\u67d0\u4e2a\u72b6\u6001\u5411\u53e6\u5916\u4e00\u4e2a\u72b6\u6001\u8f6c\u79fb\uff0c\u800c\u8f93\u51fa\u66f4\u50cf\u662f\u4e00\u79cd\u72b6\u6001\u7684\u7ed3\u679c\u300d\u3002

    \u73b0\u5b9e\u7684\u5de5\u7a0b\u8bbe\u8ba1\u4e2d\uff0c\u6709\u65f6\u4f1a\u7ed3\u5408\u4f7f\u7528\u7c73\u52d2\u578b\u548c\u6469\u5c14\u578b\uff0c\u5373\u5728\u540c\u4e00\u72b6\u6001\u56fe\u4e2d\u53ef\u80fd\u6df7\u7528\u4e24\u79cd\u7c7b\u578b\u3002

    \u72b6\u6001\u56fe\u8fd8\u6709\u8fdb\u9636\u5f62\u6001\uff0c\u4e4b\u540e\u4f1a\u63d0\u53ca\uff0c\u5c31\u662f \u72b6\u6001\u673a\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u7b49\u4ef7\u72b6\u6001","title":"\u7b49\u4ef7\u72b6\u6001","text":"

    \u5bf9\u4e8e\u4e24\u4e2a\u72b6\u6001\uff0c\u5982\u679c\u5b83\u4eec\u5bf9\u4e8e\u540c\u4e00\u8f93\u5165\u5e8f\u5217\u7684\u54cd\u5e94\u662f\u5b8c\u5168\u76f8\u540c\u7684\uff08\u5305\u62ec\u76f8\u540c\u7684\u8f93\u51fa\u548c\u76f8\u540c\u7684\u72b6\u6001\u8f6c\u79fb\uff09\uff0c\u90a3\u4e48\u8fd9\u4e24\u4e2a\u72b6\u6001\u662f\u7b49\u4ef7\u7684\u3002

    Equivalent State

    \u672a\u7b80\u5316\u7684\u72b6\u6001\u56fe\u7b80\u5316\u7b49\u4ef7\u72b6\u6001\u540e\u7684\u72b6\u6001\u56fe

    \u6211\u4eec\u9996\u5148\u6ce8\u610f\u5230\uff0c\u72b6\u6001 S2 \u548c S3 \u5bf9\u4e8e\u8f93\u5165 0\uff0c\u76f8\u5e94\u7684\u8f93\u51fa\u90fd\u662f 1\uff0c\u4e0b\u4e00\u72b6\u6001\u90fd\u662f S0\uff1b\u5bf9\u4e8e\u8f93\u5165 1\uff0c\u76f8\u5e94\u7684\u8f93\u51fa\u90fd\u662f 0\uff0c\u4e0b\u4e00\u72b6\u6001\u90fd\u662f S2\u3002\u6240\u4ee5 S2 \u548c S3 \u662f\u7b49\u4ef7\u72b6\u6001\u3002\u6211\u4eec\u53ef\u4ee5\u628a\u8fd9\u4e24\u4e2a\u7b49\u4ef7\u72b6\u6001\u7b80\u5316\u6210\u540c\u4e00\u4e2a\u72b6\u6001\uff0c\u8bb0\u4e3a S2\u3002

    \u66f4\u8fdb\u4e00\u6b65\u5730\uff0c\u6211\u4eec\u6ce8\u610f\u5230 S1 \u548c\u65b0\u7684 S2 \u4e5f\u662f\u7b49\u4ef7\u72b6\u6001\uff0c\u6211\u4eec\u7ee7\u7eed\u5316\u7b80\u5b83\u4eec\u3002

    \u5bfb\u627e\u7b49\u4ef7\u72b6\u6001\u5e76\u5408\u5e76\u5b83\u4eec\uff0c\u4e0d\u65ad\u91cd\u590d\u8fd9\u4e2a\u8fc7\u7a0b\u5c31\u53ef\u4ee5\u5b9e\u73b0\u72b6\u6001\u56fe\u7684\u7b80\u5316\u3002

    \u5ef6\u65f6\u5206\u6790

    \u5ef6\u65f6\u5206\u6790\u662f\u4e00\u4e2a\u91cd\u96be\u70b9\uff0c\u5bf9\u4e8e\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\uff0c\u5c06\u5728\u4e4b\u540e\u5355\u72ec\u5f00\u4e00\u4e2a\u5c0f\u7ed3\u91cd\u70b9\u4ecb\u7ecd\u3002

    \u8bf7\u53c2\u8003 \u5ef6\u65f6\u5206\u6790\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","title":"\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1","text":"

    \u7c7b\u6bd4\u7ec4\u5408\u903b\u8f91\u7535\u8def\u901a\u8fc7\u771f\u503c\u8868\u8bbe\u8ba1\u7535\u8def\uff0c\uff08\u540c\u6b65\uff09\u65f6\u5e8f\u7535\u8def\u4e3b\u8981\u4f9d\u636e\u72b6\u6001\u8868\uff08\u6216\u7b49\u4ef7\u8868\u8fbe\uff0c\u5982\u72b6\u6001\u56fe\uff09\u6765\u8bbe\u8ba1\u7535\u8def\u3002\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u89e6\u53d1\u5668\u4ee5\u53ca\u5176\u5b83\u7ec4\u5408\u7535\u8def\u7684\u9009\u62e9\u4e0e\u8bbe\u8ba1\uff1a

    \u800c\u4e3b\u8981\u7684\u8bbe\u8ba1\u8fc7\u7a0b\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684\u8bbe\u8ba1\u662f\u7c7b\u4f3c\u7684\uff0c\u5982\u4e0b\uff1a

    1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a\uff1b
      1. \u63cf\u8ff0\u7cfb\u7edf\u884c\u4e3a\u8fc7\u7a0b\u4e2d\uff0c\u8981\u6ce8\u610f\u72b6\u6001\u7684\u590d\u7528\uff08\u4e0d\u8fc7\u5e76\u975e\u72b6\u6001\u8d8a\u5c11\u6210\u672c\u5c31\u8d8a\u5c0f\uff0c\u8fd9\u91cc\u6709\u89e6\u53d1\u5668\u6570\u91cf\u548c\u7ec4\u5408\u903b\u8f91\u7535\u8def\u7684 trade-off\uff09\uff1b
      2. \u786e\u5b9a\u7535\u8def\u7684\u521d\u59cb\u72b6\u6001\uff08\u590d\u4f4d\u72b6\u6001(reset state)\uff0c\u901a\u8fc7\u7ed9\u5b9a\u590d\u4f4d(reset)\u4fe1\u53f7\u5b9e\u73b0\uff09\uff1b
        • \u590d\u4f4d\u4e00\u822c\u53ef\u4ee5\u662f\u5f02\u6b65\u7684\uff1b
    2. \u9610\u8ff0\u8f93\u5165\u548c\u8f93\u51fa\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u5e76\u7528\u771f\u503c\u8868\u6216\u903b\u8f91\u8868\u8fbe\u5f0f\u8868\u8fbe\u51fa\u6765\uff1b
    3. \u7ed9\u8bbe\u8ba1\u597d\u7684\u72b6\u6001\u7f16\u7801\u8d4b\u503c\uff0c\u5f97\u5230\u5177\u4f53\u7684\u72b6\u6001\u8868\uff1b
      1. \u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 \u6309\u8ba1\u6570\u987a\u5e8f\u3001 \u6309\u683c\u96f7\u7801\u3001\u7528\u72ec\u70ed\u7801 \u6765\u7ed9\u72b6\u6001\u8d4b\u503c\uff0c\u66f4\u7cfb\u7edf\u7684\u65b9\u6cd5\u6bd4\u8f83\u590d\u6742\uff0c\u4e0d\u505a\u8ba8\u8bba\uff1b
      2. \u5176\u4e2d\u8fd8\u6709\u4e00\u79cd\u60c5\u51b5\u662f\u6240\u9700\u8981\u7684\u72b6\u6001\u4e0d\u80fd\u5b8c\u6574\u586b\u5145 \\(2^n\\) \u79cd\u60c5\u51b5\uff0c\u9700\u8981\u8bbe\u8ba1\u65e0\u6548\u72b6\u6001\uff0c\u8fd9\u79cd\u65f6\u5019\u53ef\u4ee5\u4e0d\u8003\u8651\u5b83\u4eec\uff1b
    4. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u4f7f\u7528\u7684\u89e6\u53d1\u5668\u53ca\u5176\u8f93\u5165\u65b9\u7a0b\uff1b
    5. \u6839\u636e\u72b6\u6001\u8868\u786e\u5b9a\u8f93\u51fa\u65b9\u7a0b\uff1b
    6. \u4f18\u5316\u8f93\u5165\u65b9\u7a0b\u548c\u8f93\u51fa\u65b9\u7a0b\uff1b
    7. \u5c06\u4f18\u5316\u540e\u7684\u903b\u8f91\u8bbe\u8ba1\u5de5\u827a\u6620\u5c04\u5230\u786c\u4ef6\u5b9e\u73b0\u4e0a\uff1b
    8. \u9a8c\u8bc1\u6b63\u786e\u6027\uff08\u5728\u4eff\u771f\u73af\u5883\u4e2d\uff09\uff1b
      • \u4e3b\u8981\u5c31\u662f\u770b\u80fd\u4e0d\u80fd\u590d\u73b0\u72b6\u6001\u56fe\uff1b
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u72b6\u6001\u673a","title":"\u72b6\u6001\u673a","text":"

    \u5c3d\u7ba1\u5728\u5c0f\u89c4\u6a21\u7684\u8bbe\u8ba1\u4e2d\uff0c\u72b6\u6001\u56fe\u8868\u73b0\u826f\u597d\uff0c\u4f46\u662f\u968f\u7740\u8bbe\u8ba1\u7684\u7cfb\u7edf\u89c4\u6a21\u53d8\u5927\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u66f4\u52a0\u6cdb\u7528\u7684\u65b9\u5f0f\u6765\u8868\u8fbe\u7c7b\u4f3c\u7684\u65f6\u5e8f\u903b\u8f91\u3002

    \u4e8e\u662f\uff0c\u6211\u4eec\u5728\u72b6\u6001\u56fe\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u4fee\u6539\uff0c\u8bbe\u8ba1\u4e86 \u72b6\u6001\u673a(State-Machine Diagram) \u6765\u505a\u8fd9\u4ef6\u4e8b\u3002

    \u72b6\u6001\u673a\u6df7\u7528\u4e86\u7c73\u52d2\u578b\u548c\u6469\u5c14\u578b\u7684\u8f93\u51fa\u683c\u5f0f\uff0c\u4f18\u52a3\u5728 \u72b6\u6001\u56fe \u4e2d\u6709\u6240\u63d0\u53ca\u3002\u5e76\u4e14\uff0c\u6709\u9650\u56fe\u5c06\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u4e5f\u5199\u5165\uff0c\u603b\u4f53\u4e0a\u5bf9\u7535\u8def\u8bbe\u8ba1\u66f4\u53cb\u597d\u3002\u4e0b\u56fe\u662f\u72b6\u6001\u673a\u7684\u4e00\u4e2a\u201c\u8303\u5f0f\u201d\u3002

    Generic State Diagram Template

    \u9996\u5148\u89e3\u91ca\u4e00\u4e0b\u8fd9\u4e2a\u201c\u8303\u5f0f\u201d\uff1a

    \u5177\u4f53\u89e3\u91ca\u72b6\u6001\u673a\u6709\u54ea\u4e9b\u5185\u5bb9\uff0c\u4ee5\u53ca\u5404\u4e2a\u90e8\u5206\u4e4b\u95f4\u7684\u903b\u8f91\u3002\u5173\u4e8e\u5404\u4e2a\u90e8\u5206\u51fa\u73b0\u7684\u4f4d\u7f6e\uff0c\u8bf7\u53c2\u8003 Template\u3002

    \u53e6\u5916\uff0c\u4e3a\u4e86\u7b80\u5316\u8bed\u53e5\uff0c\u4e0b\u9762\u7684\u8bf4\u6cd5\u7701\u7565\u4e86\u65f6\u949f\uff0c\u8bf7\u8bb0\u5f97\u8003\u8651\u3002

    \u72b6\u6001\u673a\u6a21\u578b\u4e3b\u8981\u6709\u4e09\u8981\u7d20\uff1a\u8f93\u5165\u6761\u4ef6(Input Conditions)\u3001\u72b6\u6001\u8f6c\u79fb(Transitions) \u548c \u8f93\u51fa\u884c\u4e3a(Output Actions)\u3002\u603b\u4f53\u6765\u8bf4\uff0c\u8f93\u5165\u6761\u4ef6\u544a\u8bc9\u6211\u4eec\u6574\u4e2a\u72b6\u6001\u673a\u8981\u5982\u4f55\u53d8\u5316\uff1b\u72b6\u6001\u8f6c\u79fb\u63cf\u8ff0\u4e86\u72b6\u6001\u673a\u7684\u5185\u90e8\u8f6c\u79fb\u884c\u4e3a\uff0c\u5373\u56fe\u8bba\u4e0a\u7684\u6709\u5411\u8054\u901a\u5173\u7cfb\uff1b\u8f93\u51fa\u884c\u4e3a\u63cf\u8ff0\u52a8\u6001\u53d8\u5316\u8fc7\u7a0b\u4e2d\u72b6\u6001\u673a\u7684\u5bf9\u5916\u8868\u8fbe\u3002\u5176\u4e2d\uff0c\u72b6\u6001\u8f6c\u79fb\u548c\u8f93\u51fa\u884c\u4e3a\u662f\u6211\u4eec\u9700\u8981\u5173\u6ce8\u7684\u72b6\u6001\u673a\u7684\u4e24\u4e2a\u7ef4\u5ea6\uff0c\u8f93\u5165\u6761\u4ef6\u662f\u6211\u4eec\u7528\u6765\u505a\u5b9e\u65f6\u5224\u65ad\u7684\u5916\u90e8\u4f9d\u636e\u3002

    \u300c\u8f93\u5165\u6761\u4ef6\u300d\u662f\u7531\u8f93\u5165\u53d8\u91cf\u5f62\u6210\u7684\u4e00\u4e2a\u5e03\u5c14\u65b9\u7a0b\uff0c\u5728\u6574\u4e2a\u72b6\u6001\u673a\u4e2d\uff0c\u8f93\u5165\u662f\u53d8\u5316\u7684\u201c\u56e0\u53d8\u91cf\u201d\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u65e0\u8bba\u662f\u72b6\u6001\u8f6c\u79fb\u8fd8\u662f\u8f93\u51fa\uff0c\u90fd\u53d6\u51b3\u4e8e\u8f93\u5165\u6761\u4ef6\u3002\u800c\u5bfc\u81f4\u7279\u5b9a\u884c\u4e3a\u7684\u8f93\u5165\u6761\u4ef6\u5219\u88ab\u5206\u7c7b\u4e3a \u8f6c\u79fb\u6761\u4ef6(Transition Condition, TC) \u548c \u8f93\u51fa\u6761\u4ef6(Output Condition, OC)\u3002

    \u300c\u72b6\u6001\u8f6c\u79fb\u300d\u5728\u56fe\u4e2d\u8868\u73b0\u4e3a\u6709\u5411\u8fb9\uff0c\u5f53 TC \u6210\u7acb\u65f6\uff0c\u72b6\u6001\u8f6c\u79fb\u53d1\u751f\uff1b\u6216\u8005\u5bf9\u4e8e\u65e0\u6761\u4ef6\u8f6c\u79fb\uff0c\u53ea\u8981\u5f97\u5230\u65f6\u949f\u8109\u51b2\u5c31\u4f1a\u8f6c\u79fb\u5230\u4e0b\u4e00\u4e2a\u72b6\u6001\u3002

    \u300c\u8f93\u51fa\u884c\u4e3a\u300d\u5728\u72b6\u6001\u673a\u4e2d\u6709\u56db\u79cd\u89e6\u53d1\u65b9\u6cd5\uff08\u5373\u56db\u79cd OC\uff09\uff1aMoore\u3001\u4e0d\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Independent, TCI) Mealy\u3001\u4f9d\u8d56\u8f6c\u79fb(Transition-condition Dependent, TCD) Mealy \u548c \u4f9d\u8d56\u8f6c\u79fb\u548c\u8f93\u51fa\u6761\u4ef6(Transition and Output-condition Dependent, TOCD) Mealy\u3002\u6839\u636e\u5b57\u9762\u610f\u601d\u6765\u770b\uff1a

    In a given state, an output action occurs if: (a) it is unconditional (Moore), (b) TCI and its output condition OC = 1, (c) TCD and its transition condition TC = 1, and (d) TOCD and its transition condition TC and output condition OC are both equal to 1, i.e, TC\u00b7OC = 1. Note that Moore and TCI output actions attached to a state, apply to all transitions from the state as well.

    \u56de\u5230\u8f93\u51fa\u884c\u4e3a\u672c\u8eab\uff0c\u5f53 OC \u6210\u7acb\u65f6\u8f93\u51fa\u884c\u4e3a\u53d1\u751f\uff0c\u4e00\u822c\u4f1a\u5c06\u8f93\u51fa\u53d8\u91cf\u6807\u51fa\uff0c\u5982\u679c\u5199\u7684\u662f NOT X\uff0c\u8868\u793a OC \u6210\u7acb\u65f6 X \u5e94\u4e3a 0\uff1b\u5982\u679c\u5199\u7684\u662f X\uff0c\u5219\u8868\u793a OC \u6210\u7acb\u65f6 X \u4e3a 1\u3002

    \u6ce8\u610f\u70b9

    \u6b64\u5916\uff0c\u8fd8\u6709\u4e00\u4e2a\u70b9\u9700\u8981\u8fa8\u6790\uff0c\u7531\u4e8e\u300cTransition\u300d\u8868\u793a\u7684\u662f\u201c\u4e0b\u4e00\u4e2a\u201d\u72b6\u6001\uff0c\u6240\u4ee5\u5bf9\u4e8e\u5f53\u524d\u65f6\u523b\uff0c\u5f53\u524d\u8282\u70b9\u7684\u8f93\u51fa\u548c\u51fa\u5ea6\u7684\u8f93\u51fa\u4e0d\u80fd\u51b2\u7a81\u3002\u4f8b\u5982\uff0c\u4e0b\u56fe\u56e0\u4e3a Moore \u8f93\u51fa\u884c\u4e3a\u7684 Z \u548c TC=AB \u90a3\u6761\u8fb9\u7684 Z' \u51b2\u7a81\uff0c\u6240\u4ee5\u975e\u6cd5\u3002

    \u5f53\u7136\uff0c\u975e\u6cd5\u72b6\u6001\u673a\u5e76\u4e0d\u53ea\u6709\u8fd9\u4e00\u4e2a\u5224\u636e\u3002\u4e0d\u8fc7\u6838\u5fc3\u601d\u60f3\u5c31\u662f \u4e0d\u80fd\u6709\u6b67\u4e49\u6216\u51b2\u7a81\u4e14\u9700\u8981\u5145\u5206\uff0c\u66f4\u6570\u5b66\u7684\u8868\u8fbe\u662f\uff0c\u5fc5\u987b\u6ee1\u8db3\u5982\u4e0b\u4e24\u4e2a\u6761\u4ef6\uff1a

    1.\u975e\u4ea4\uff1a\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u72b6\u6001 \\(S_i\\)\uff0c\u5b83\u7684\u4efb\u610f\u4e24\u4e2a\u51fa\u5ea6 \\((T_{ij},T_{jk})\\) \u90fd\u4e0d\u80fd\u540c\u65f6\u6210\u7acb\uff0c\u5373\u5e94\u6709\uff1a

    \\[ \\forall (T_{ij},T_{ik})\\;,\\;\\;T_{ij}\\cdot T_{ik} = 0 \\]

    2.\u5145\u5206\uff1a\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u72b6\u6001 \\(S_i\\)\uff0c\u5b83\u7684\u6240\u6709\u51fa\u5ea6\u6761\u4ef6\u5e94\u8be5\u6db5\u76d6\u6240\u6709\u53ef\u80fd\uff0c\u5373\u5e94\u6709\uff1a

    \\[ \\sum_{j}T_{ij} = 1 \\]

    \u4e0a\u8ff0\u662f\u5bf9\u4e8e TC \u7684\u7ea6\u675f\uff0c\u800c\u5bf9\u4e8e OC\uff0c\u4e5f\u5b58\u5728\u76f8\u5e94\u7684\u975e\u4ea4\u548c\u5145\u5206\u7684\u7ea6\u675f\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u7ec6\u8282\u4e0d\u540c\u503c\u5f97\u5f15\u8d77\u6ce8\u610f\uff1a

    \u7f29\u5199\u5bf9\u7167\u8868 \u7f29\u5199 \u542b\u4e49 \u6ce8\u91ca TC Transition Condition \u8f6c\u79fb\u6761\u4ef6\uff1a\u5bfc\u81f4 Transition \u7684 Input Condition OC Output Condition \u8f93\u51fa\u6761\u4ef6\uff1a\u5bfc\u81f4 Output Actions \u7684 Input Condition TCI Transition-condition Independent \u4e0d\u4f9d\u8d56\u8f6c\u79fb\uff1a\u53ea\u4e0e State \u6709\u5173\u7684 Output Actions TCD Transition-condition Dependent \u4f9d\u8d56\u8f6c\u79fb\uff1aTransition Condition \u6210\u7acb\u624d\u6709 Output Actions TOCD Transition and Output-condition Dependent \u4f9d\u8d56\u8f6c\u79fb\u548c\u8f93\u51fa\u65b9\u7a0b\uff1aTransition Condition \u548c Output Condition \u90fd\u6210\u7acb\u624d\u6709 Output Actions State Machine Diagram \ud83c\udf30

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u5ef6\u65f6\u5206\u6790","title":"\u5ef6\u65f6\u5206\u6790","text":"

    \u9996\u5148\uff0c\u81ea\u4e0a\u800c\u4e0b\u7684\u7ed9\u51fa\u89c2\u5ff5\uff0c\u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u5206\u6790\u6709\u4e24\u4e2a\u4e3b\u8981\u90e8\u5206\u548c\u4e00\u4e2a\u6b21\u8981\u90e8\u5206\uff1a

    1. \u7ec4\u5408\u7535\u8def\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
    2. \u89e6\u53d1\u5668\u5bfc\u81f4\u7684\u5ef6\u65f6\uff1b
    3. \u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\uff1b

    \u5e76\u4e14\u5f80\u5f80\u662f\u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\uff0c\u8ba1\u7b97\u4e00\u4e2a\u65f6\u949f\u5468\u671f\u7684\u65f6\u95f4\u3002\u6700\u6838\u5fc3\u7684\u95ee\u9898\u5c31\u662f\u8ba1\u7b97\u7535\u8def\u80fd\u591f\u6b63\u5e38\u5de5\u4f5c\u7684\u6700\u77ed\u65f6\u949f\u5468\u671f\u3002\u63a5\u4e0b\u6765\uff0c\u81ea\u4e0a\u800c\u4e0b\u5730\u8fdb\u884c\u7ec6\u8282\u8865\u5145\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","title":"\u7ec4\u5408\u7535\u8def\u5ef6\u65f6","text":"

    \u8fd9\u4e00\u90e8\u5206\u7684\u8be6\u7ec6\u5185\u5bb9\u5df2\u7ecf\u5728 \u4e0a\u4e00\u7ae0 \u4ecb\u7ecd\u8fc7\u4e86\uff0c\u5728\u8fd9\u91cc\uff0c\u4e3a\u4e86\u7b80\u5316\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6211\u4eec\u5168\u90e8\u91c7\u7528 \\(t_{pd}\\)\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u89e6\u53d1\u5668\u5ef6\u65f6","title":"\u89e6\u53d1\u5668\u5ef6\u65f6","text":"

    \u89e6\u53d1\u5668\u5ef6\u65f6\u76f8\u6bd4\u7ec4\u5408\u7535\u8def\u5ef6\u65f6\u590d\u6742\u5f88\u591a\uff0c\u4e3b\u8981\u76ee\u7684\u662f\u4e3a\u4e86\u4fdd\u8bc1\u91c7\u6837\u3002\u4e5f\u5c31\u662f\u8bf4\u5b83\u7684\u201c\u5ef6\u65f6\u201d\u5e76\u4e0d\u4ec5\u4ec5\u662f\u56e0\u4e3a\u7535\u4fe1\u53f7\u4f20\u64ad\u7684\u5ef6\u8fdf\uff0c\u8fd8\u6709\u4e3a\u4e86\u4fdd\u8bc1\u4fe1\u53f7\u7a33\u5b9a\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u3002

    \u5927\u81f4\u6765\u8bf4\u6709\u4e09\u4e2a\u90e8\u5206\uff1a

    \u4e00\u7bc7\u4ecb\u7ecd Setup Time \u548c Hold Time \u7684 \u6587\u7ae0\u3002

    \u6839\u636e\u89e6\u53d1\u5668\u7684\u7c7b\u578b\u4e0d\u540c\uff0c\u4e3b\u8981\u7684 Setup Time \u4e5f\u4e0d\u540c\uff1a

    \u5176\u4e2d\u6bd4\u8f83\u91cd\u8981\u7684\u4e00\u4e9b\u70b9\u662f\uff1a

    1. \u8fd9\u51e0\u4e2a\u65f6\u95f4\u70b9\u8d77\u70b9/\u7ec8\u70b9\u90fd\u662f\u89e6\u53d1\u8fb9\u7f18\uff1b
    2. Propagation Time \u4e00\u5b9a\u957f\u4e8e Hold Time\uff0c\u56e0\u6b64\u5728\u8ba1\u7b97\u7535\u8def\u5ef6\u8fdf\u65f6\u53ea\u8003\u8651 Propagation Time\uff1b
    3. Pulse-trigger \u548c Edge-trigger \u5728\u8868\u73b0\u4e0a\u7684\u533a\u522b\u5728\u4e8e Setup Time\uff0c\u524d\u8005\u9700\u8981\u8986\u76d6\u6574\u4e2a pulse(pos or neg)\uff1b
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u677e\u5f1b\u65f6\u95f4","title":"\u677e\u5f1b\u65f6\u95f4","text":"

    \u5b9e\u9645\u4e0a\u8fd9\u5c31\u662f\u7ed9\u6574\u4e2a\u7535\u8def\u7684\u4e00\u4e2a\u201c\u5bb9\u5dee\u201d\u65f6\u95f4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u8bef\u5dee\uff0c\u4f46\u662f\u7531\u4e8e\u901a\u8fc7\u524d\u4e24\u8005\u8ba1\u7b97\u51fa\u6765\u7684\u662f\u6700\u77ed\u65f6\u95f4\uff0c\u6240\u4ee5\u677e\u5f1b\u65f6\u95f4\u5fc5\u5b9a\u975e\u8d1f\u3002\uff08\u4e0d\u80fd\u5012\u6263\uff01\uff09

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap04/#\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","title":"\u65f6\u5e8f\u7535\u8def\u5ef6\u65f6","text":"

    \u65f6\u5e8f\u7535\u8def\u7684\u5ef6\u65f6\u8ba1\u7b97\u5b9e\u9645\u4e0a\u662f\u4e3a\u4e86\u8ba1\u7b97\u65f6\u5e8f\u7535\u8def\u8fd0\u4f5c\u7684\u6700\u5927\u9891\u7387\u4ee5\u8bbe\u8ba1\u65f6\u949f\u9891\u7387\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7b97\u51fa\u7535\u8def\u80fd\u591f\u7a33\u5b9a\u5de5\u4f5c\u7684\u6700\u5c0f\u65f6\u949f\u671f\u3002

    \u5176\u8ba1\u7b97\u9075\u5faa\u4e00\u5b9a\u65b9\u6cd5\uff1a

    \u56fe\u4e2d \\(t_{pd,FF}\\) \u6307\u89e6\u53d1\u5668\u7684 propagation time\uff0c\\(t_{COMB}\\) \u6307\u7ec4\u5408\u7535\u8def\u7684\u603b\u4f20\u64ad\u65f6\u95f4\uff08\u4e00\u822c\u60c5\u51b5\u4e0b \\(t_{COMB} = \\max{\\sum_i t_{pd,gate_i}}\\)\uff09\uff0c\\(t_{s}\\) \u6307\u89e6\u53d1\u5668\u7684 setup time\uff0c\\(t_{slack}\\) \u8868\u793a\u7535\u8def\u7684\u677e\u5f1b\u65f6\u95f4\u3002

    \uff08\u5047\uff09\u7ecf\u9a8c\u4e4b\u8c08

    \u4e00\u822c\u4ece\u4e00\u4e2a FF \u7684\u8f93\u51fa\u51fa\u53d1\u5230 FF \u7684\u8f93\u5165\u7ed3\u675f\u3002

    \u63a5\u4e0b\u6765\u653e\u51e0\u9053\u4f8b\u9898\u3002

    \u9898\u9762\u7b54\u6848

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/","title":"Chap 5 Digital Hardware Implementation","text":"

    \u7ea6 3031 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f

    \u5f15\u5165

    \u672c\u7ae0\u5185\u5bb9\u4e3b\u8981\u5173\u4e8e\u6570\u5b57\u903b\u8f91\u7684\u786c\u4ef6\u5b9e\u73b0\uff0c\u5206\u522b\u4ecb\u7ecd \u8bbe\u8ba1\u7a7a\u95f4(The Design Space) \u548c \u53ef\u7f16\u7a0b\u6280\u672f(Programmable Implementation Technologies)\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u8bbe\u8ba1\u7a7a\u95f4","title":"\u8bbe\u8ba1\u7a7a\u95f4","text":""},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u96c6\u6210\u7535\u8def","title":"\u96c6\u6210\u7535\u8def","text":"

    \u96c6\u6210\u7535\u8def(IC)\u8fd9\u90e8\u5206\u5185\u5bb9\u5728 \u7b2c\u4e09\u7ae0#\u96c6\u6210\u7535\u8def \u4e2d\u5df2\u7ecf\u4ecb\u7ecd\u8fc7\u4e86\uff0c\u6b64\u5904\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#cmos","title":"CMOS","text":"

    \u524d\u7f6e\u77e5\u8bc6

    \u91d1\u5c5e\u6c27\u5316\u7269\u534a\u5bfc\u4f53\u573a\u6548\u5e94\u7ba1(Metal-Oxide-Semiconductor Field-Effect Transistor\uff0c or MOSFET)\u7b80\u79f0 MOS\uff0c\u662f\u4e00\u79cd\u5e7f\u6cdb\u5e94\u7528\u4e8e\u6570\u5b57\u7535\u8def\u548c\u6a21\u62df\u7535\u8def\u7684\u786c\u4ef6\u3002MOS \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5176\u5177\u4f53\u5de5\u4f5c\u539f\u7406\u6b64\u5904\u4e0d\u505a\u5c55\u5f00\uff0c\u6211\u4eec\u53ea\u9700\u8981\u77e5\u9053\uff0cMOS \u7684\u4f5c\u7528\u76f8\u5f53\u4e8e\u4e00\u4e2a\u5f00\u5173\uff0c\u901a\u8fc7\u63a7\u5236\u95e8\u6781(Gate)\u7684\u7535\u538b\uff0c\u6765\u63a7\u5236 MOS \u7684\u5f00\u95ed\u3002

    \u4e92\u8865\u5f0f\u91d1\u5c5e\u6c27\u5316\u7269\u534a\u5bfc\u4f53(Complementary Metal\u2013Oxide\u2013Semiconductor)\u7b80\u79f0 CMOS\uff0c\u662f\u96c6\u6210\u7535\u8def\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u79cd\u8bbe\u8ba1\u5de5\u827a\u3002\u5176\u4e3b\u8981\u6709\u5bf9\u79f0\u7684\u4e24\u90e8\u5206\u7ec4\u6210\uff0c\u8fd9\u4e24\u90e8\u5206\u5206\u522b\u4f7f\u7528\u4e86 n-channel MOS(NMOS)\u548c p-channel MOS(PMOS)\u3002

    \u5bf9\u4e8e NMOS\uff0c\u95e8\u6781\u8f93\u5165 X \u4e3a 0 \u65f6\u65ad\u5f00\uff08\u79f0\u4e3a\u201c\u5e38\u5f00\u201d\uff09\uff0cX \u4e3a 1 \u65f6\u5bfc\u901a\uff1b\u5bf9\u4e8e PMOS\uff0c\u95e8\u6781\u8f93\u5165 X \u4e3a 0 \u65f6\u5bfc\u901a\uff08\u79f0\u4e3a\u201c\u5e38\u95ed\u201d\uff09\uff0cX \u4e3a 1 \u65f6\u65ad\u5f00\u3002

    \u66f4\u8fdb\u4e00\u6b65\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528 MOS \u7684\u5f00\u5173\u7279\u6027\uff0c\u6765\u5b9e\u73b0\u4e00\u4e9b\u7b80\u5355\u7684\u201c\u4e0e\u201d\u548c\u201c\u6216\u201d\u7684\u903b\u8f91\uff08\u6ce8\u610f\u8fd9\u91cc\u7684\u5b9e\u73b0\u662f\u6709\u95ee\u9898\u7684\uff0c\u771f\u6b63\u7684\u5b9e\u73b0\u5e94\u8be5\u7528 CMOS\uff09\uff1a

    \u5de6\u56fe\u5b9e\u73b0\u4e86 \\(\\overline{X} \\cdot \\overline{Y}\\)\uff0c\u53f3\u56fe\u5b9e\u73b0\u4e86 \\(X+Y\\)\u3002

    \u4e0b\u9762\u7ed9\u51fa\u4e00\u5e45\u56fe\u6765\u4ecb\u7ecd CMOS \u7684\u7ecf\u5178\u7ed3\u6784\uff1a

    \u9996\u5148\u8ba9\u6211\u4eec\u6765\u770b\u56fe(a)\uff0c\u8fd9\u662f CMOS \u7684\u901a\u7528\u7ed3\u6784\uff08\u53ef\u4ee5\u88ab\u79f0\u4f5c static CMOS\uff09\u3002\u5176\u53ef\u4ee5\u5206\u4e3a\u4e0a\u4e0b\u4e24\u90e8\u5206\uff0c\u4e0a\u534a\u90e8\u5206\u63a5\u7535\u6e90\uff0c\u7531 PMOS \u8bbe\u8ba1\u51fa \\(F\\) \u7684\u903b\u8f91\uff1b\u4e0b\u534a\u90e8\u5206\u63a5\u5730\uff0c\u7531 NMOS \u8bbe\u8ba1\u51fa \\(\\overline{F}\\) \u7684\u903b\u8f91\u3002\u4e5f\u5c31\u662f\u8bf4 CMOS \u540c\u65f6\u9700\u8981\u5b9e\u73b0 \\(F\\) \u548c \\(\\overline{F}\\)\uff0c\u8fd9\u5c31\u662f\u5176\u540d\u79f0 complementary \u7684\u7531\u6765\u3002

    CMOS \u5728\u7ed3\u6784\u4e0a\u7684\u6700\u5927\u7279\u5f81\u5c31\u662f\uff0c\u5176 PMOS \u7684\u7535\u8def\u548c NMOS \u7684\u7535\u8def\u662f\u5bf9\u5076\u7684\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u51fa\u4e24\u8005\u4e2d\u7684\u4e00\u4e2a\uff0c\u5c31\u53ef\u4ee5\u5229\u7528\u5bf9\u5076\u76f4\u63a5\u5f97\u5230\u53e6\u4e00\u4e2a\u3002\u5982\u679c\u89c9\u5f97\u4e0d\u591f\u663e\u7136\uff0c\u8bf7\u590d\u4e60\u4e00\u4e0b\u7b2c\u4e8c\u7ae0\u7684 #\u5bf9\u5076\u6cd5\u5219 \u548c #\u4e92\u8865\u51fd\u6570 \u6709\u5173\u5185\u5bb9\u3002

    \u7ecf\u9a8c\u4e4b\u8c08

    \u6839\u636e\u903b\u8f91\u8868\u8fbe\u5f0f\u8bbe\u8ba1 CMOS \u7684\u65f6\u5019\uff0c\u5efa\u8bae\u4ece\u4e0b\u534a\u90e8\u5206\u5f00\u59cb\u8bbe\u8ba1\uff0c\u5373\u7528 NMOS \u8868\u8fbe\u51fa \\(\\overline{F}\\)\uff0c\u7136\u540e\u518d\u5bf9\u5076\u5730\u8bbe\u8ba1\u51fa\u4e0a\u534a\u90e8\u5206\u3002\u4e0a\u56fe\u7ed9\u51fa\u4e86\u6700\u7ecf\u5178\u7684 NOR\u3001NAND\u3001NOT \u7684 CMOS \u5b9e\u73b0\uff0c\u81ea\u5df1\u8bd5\u8bd5\u5427\uff01

    \u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0cPMOS \u7b26\u53f7\u4e2d\u7684\u5706\u5708\u5e76\u4e0d\u4ee3\u8868\u8d1f\u903b\u8f91\u3002\u5b83\u53ea\u662f\u4e3a\u4e86\u533a\u5206 NMOS \u548c PMOS\uff0c\u5e76\u6ca1\u6709\u4efb\u4f55\u903b\u8f91\u610f\u4e49\uff01

    \u4e3a\u4ec0\u4e48 PMOS \u63a5\u7535\u6e90\u800c NMOS \u63a5\u5730\uff1f

    \u8fd9\u4e2a\u95ee\u9898\u6570\u5b57\u903b\u8f91\u8bbe\u8ba1\u8fd9\u95e8\u8bfe\u5e76\u4e0d\u6df1\u7a76\uff0c\u901a\u5e38\u8ba4\u4e3a\u91c7\u7528\u8fd9\u79cd\u63a5\u6cd5\u548c PMOS \u4e0e NMOS \u7684\u7535\u5b66\u7279\u6027\u6709\u5173\u3002

    \u6211\u4eec\u6ce8\u610f\u5230\uff0c\u5bf9\u4e8e\u4efb\u4f55\u8f93\u5165\uff0cCMOS \u7684\u4e0a\u4e0b\u4e24\u90e8\u5206\u603b\u662f\u4e00\u4e2a\u5bfc\u901a\uff0c\u800c\u53e6\u4e00\u4e2a\u65ad\u5f00\u3002\u8fd9\u5c31\u610f\u5473\u7740\u7406\u8bba\u4e0a CMOS \u5e76\u4e0d\u5b58\u5728\u7535\u6d41\u901a\u8def\uff08\u5373\u4ece VCC \u6307\u5411 GND \u7684\u7535\u8def\uff09\uff0c\u6240\u4ee5\u4e0d\u8bba CMOS \u662f\u5426\u5904\u5728\u5de5\u4f5c\u72b6\u6001\uff0c\u5176\u603b\u662f\u6ca1\u6709\u80fd\u8017\u7684\uff08\u7136\u800c\u5b9e\u9645\u4e0a\u4f1a\u5b58\u5728\u5c11\u91cf\u80fd\u8017\uff0c\u8fd9\u662f\u56e0\u4e3a\u8f93\u5165\u4fe1\u53f7\u53d8\u5316\u4e0d\u662f\u7edd\u5bf9\u77ac\u65f6\u7684\uff0cCMOS \u4f1a\u5728\u4fe1\u53f7\u53d8\u5316\u7684\u8fb9\u6cbf\u77ed\u6682\u5730\u5f62\u6210\u7535\u6d41\u901a\u8def\uff09\u3002

    \u5f97\u76ca\u4e8e CMOS \u5de7\u5999\u7684\u5bf9\u5076\u8bbe\u8ba1\uff0c\u5176\u5177\u6709\u8f83\u5f3a\u7684\u6297\u566a\u80fd\u529b\u548c\u8f83\u4f4e\u7684\u80fd\u8017\u3002\u76f4\u81f3\u4eca\u5929\uff0cCMOS \u4ecd\u7136\u5728 LSI \u548c VLSI \u96c6\u6210\u7535\u8def\u8bbe\u8ba1\u4e2d\u88ab\u5e7f\u6cdb\u4f7f\u7528\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u53ef\u7f16\u7a0b\u6280\u672f","title":"\u53ef\u7f16\u7a0b\u6280\u672f","text":"

    \u76f4\u63a5\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u6765\u4fee\u6539\u7535\u8def\u529f\u80fd\u88ab\u79f0\u4e3a\u786c\u7f16\u7a0b\uff0c\u800c\u53ef\u7f16\u7a0b\u6280\u672f\u8ba9\u6211\u4eec\u80fd\u591f\u5728\u4e0d\u76f4\u63a5\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u7684\u60c5\u51b5\u4e0b\uff0c\u5229\u7528\u8f6f\u4ef6\u7f16\u7a0b\u6765\u95f4\u63a5\u66f4\u6539\u786c\u4ef6\u5e03\u7ebf\u3002\u786c\u7f16\u7a0b\u7684\u64cd\u4f5c\u8005\u662f\u8bbe\u8ba1\u5236\u9020\u8005(manufacturer)\uff0c\u800c\u8f6f\u7f16\u7a0b\u7684\u64cd\u4f5c\u8005\u662f\u7528\u6237(user)\u3002

    \u4e3a\u4ec0\u4e48\u6211\u4eec\u9700\u8981\u53ef\u7f16\u7a0b\u6280\u672f\uff1f

    \u4ee5\u4e00\u5757\u82af\u7247\u4e3a\u4f8b\uff0c\u5176\u6210\u672c\u4e3b\u8981\u5305\u62ec\u56fa\u5b9a\u6210\u672c\uff08\u7528\u4e8e\u8bbe\u8ba1\u5236\u4f5c\u63a9\u6a21\uff0c\u5373 mask\uff09\u548c\u5236\u4f5c\u6210\u672c\uff08\u52a0\u5de5\u4e00\u5757\u82af\u7247\u7684\u539f\u6599\u548c\u5de5\u827a\u6210\u672c\uff09\u3002\u56fa\u5b9a\u6210\u672c\u662f\u6781\u9ad8\u7684\uff0c\u5982\u679c\u4e00\u5757\u82af\u7247\u666e\u9002\u6027\u4e0d\u591f\u5f3a\uff0c\u7528\u6237\u7fa4\u4e0d\u591f\u5e7f\uff0c\u90a3\u4e48\u751f\u4ea7\u6570\u989d\u5c31\u4e0d\u591f\u5927\uff0c\u4ece\u800c\u5747\u644a\u5230\u6bcf\u5757\u82af\u7247\u7684\u56fa\u5b9a\u6210\u672c\u5c31\u4f1a\u5f88\u9ad8\u3002\u6240\u4ee5\u5bf9\u4e8e\u6709\u7279\u5b9a\u903b\u8f91\u529f\u80fd\u7684\u82af\u7247\u800c\u8a00\uff0c\u5176\u5b9a\u4f4d\u7684\u53d7\u4f17\u7fa4\u4f53\u5fc5\u7136\u662f\u5e9e\u5927\u7684\uff0c\u5f80\u5f80\u8fbe\u5230\u4e07\u7ea7\u751a\u81f3\u4ebf\u7ea7\uff0c\u6bd4\u5982\u624b\u673a\u82af\u7247\u3002

    \u4f46\u662f\uff0c\u5f88\u591a\u65f6\u5019\u6211\u4eec\u9700\u8981\u67d0\u79cd\u7279\u5b9a\u529f\u80fd\u7684\u82af\u7247\uff0c\u4f46\u8fd9\u79cd\u82af\u7247\u53ea\u7528\u5728\u5c11\u90e8\u5206\u5730\u65b9\u3002\u8fd9\u65f6\u5019\u5982\u679c\u4e13\u95e8\u53bb\u8bbe\u8ba1\u4e00\u6b3e\u82af\u7247\uff0c\u90a3\u4e48\u5176\u5747\u644a\u6210\u672c\u5c31\u4f1a\u975e\u5e38\u9ad8\u3002\u53ef\u7f16\u7a0b\u6280\u672f\u53ef\u4ee5\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u4e00\u6b3e\u901a\u7528\u7684\u53ef\u7f16\u7a0b\u7684\u82af\u7247\uff0c\u5e76\u5728\u51fa\u5382\u540e\u6839\u636e\u7528\u6237\u7684\u7279\u5b9a\u9700\u6c42\u8fdb\u884c\u76f8\u5e94\u7684\u7f16\u8f91\u4fee\u6539\u5373\u53ef\u3002

    \u53ef\u7f16\u7a0b\u6280\u672f\u5728\u786c\u4ef6\u5c42\u9762\u4e3b\u8981\u6709\u4e09\u79cd\u5b9e\u73b0\u624b\u6bb5\uff1a

    \u8fdb\u4e00\u6b65\u5730\uff0c\u53ef\u7f16\u7a0b\u6280\u672f\u53ef\u4ee5\u5206\u4e3a \u6c38\u4e45\u7f16\u7a0b\u6280\u672f \u548c \u53ef\u91cd\u7f16\u7a0b\u6280\u672f \uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#\u5e38\u89c1\u7684\u53ef\u7f16\u7a0b\u6280\u672f","title":"\u5e38\u89c1\u7684\u53ef\u7f16\u7a0b\u6280\u672f","text":"

    \u8bfe\u7a0b\u4e2d\u4ecb\u7ecd\u7684\u53ef\u7f16\u7a0b\u6280\u672f\u4e3b\u8981\u6709\u5982\u4e0b\u56db\u79cd\uff1a

    \u524d\u4e09\u8005\u90fd\u53ea\u80fd\u7f16\u7a0b\u4e00\u6b21\uff08\u5c5e\u4e8e\u6c38\u4e45\u7f16\u7a0b\u6280\u672f\uff09\uff0c\u5982\u4e0b\u662f\u5b83\u4eec\u7684\u53ef\u7f16\u7a0b\u5185\u5bb9\uff1a

    FPGA

    \u73b0\u573a\u53ef\u7f16\u7a0b\u903b\u8f91\u95e8\u9635\u5217(Field-Programmable Gate Array, or FPGA)

    \u5f15\u5165

    \u7531\u4e8e\u4e4b\u540e\u51fa\u73b0\u7684\u7535\u8def\u56fe\u4f1a\u975e\u5e38\u5e9e\u5927\uff0c\u6240\u4ee5\u9700\u8981\u5f15\u5165\u4e00\u4e9b\u903b\u8f91\u7b26\u53f7\u3002

    Buffer

    \u7b80\u5316\u8868\u793a\u4e00\u4e2a\u53d8\u91cf\u7684\u81ea\u8eab\u548c\u5176\u975e\uff1b

    Wire connecting

    \u5728\u53ef\u7f16\u7a0b\u903b\u8f91\u7535\u8def\u4e2d\uff0c\u7ebf\u7684\u8fde\u63a5\u4e0d\u518d\u53ea\u6709\u5355\u7eaf\u7684\u8fde\u901a\u548c\u4e0d\u8fde\u901a\u7684\u5173\u7cfb\uff1a

    \u5bf9\u4e8e\u4e24\u6761\u76f8\u4ea4\u5bfc\u7ebf\uff1a

    \u7279\u522b\u7684\uff0c\u5982\u679c\u4e00\u4e2a\u5143\u5668\u4ef6\u7684\u6240\u6709\u8f93\u5165\u90fd\u662f programmable\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u628a\u8fd9\u4e2a \u274c \u753b\u5230\u903b\u8f91\u95e8\u4e0a\uff08\u5982\u4e0b\u56fe e \u548c f\uff09\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#rom","title":"ROM","text":"

    ROM \u7531 \\(N\\) \u4e2a\u8f93\u5165\uff0c\\(M\\) \u4e2a\u8f93\u51fa\uff0c\u4ee5\u53ca \\(2^N\\) \u4e2a\u8bd1\u7801\u540e\u7684\u6700\u5c0f\u9879\u7ec4\u6210\u3002\u5176\u4e2d\uff0c\u56fa\u5b9a\u7684 AND \u7528\u4e8e\u8bbe\u8ba1\u8bd1\u7801\u5668\uff0c\u5b9e\u73b0\u6240\u6709\u7684 \\(2^N\\) \u4e2a\u6700\u5c0f\u9879\uff1b\u53ef\u7f16\u7a0b\u7684 OR \u7528\u4e8e\u628a\u8fd9\u4e9b\u6700\u5c0f\u9879\u201c\u6216\u201d\u8d77\u6765\u5e76\u5b9e\u73b0\u7279\u5b9a\u903b\u8f91\u3002

    \u4e25\u683c\u6765\u8bf4\uff0cROM \u662f\u4e0d\u53ef\u7f16\u7a0b\u7684\uff0cPROM \u624d\u662f\u53ef\u7f16\u7a0b\u7684\u3002PROM(Programmable ROM) \u901a\u8fc7 fuse \u6216 anti-fuse \u7b49\u624b\u6bb5\u5b9e\u73b0\u53ef\u7f16\u7a0b\uff0c\u6240\u4ee5\u5728\u51fa\u5382\u540e\u4ec5\u53ef\u8fdb\u884c\u4e00\u6b21\u7f16\u7a0b\u4fee\u6539\uff0c\u5c5e\u4e8e\u6c38\u4e45\u7f16\u7a0b\u6280\u672f\u3002

    ROM \u53ef\u4ee5\u88ab\u89c6\u4f5c\u4e00\u4e2a memory\uff0c\u8f93\u5165\u63d0\u4f9b\u4e86\u4e00\u7ec4\u5730\u5740(address)\uff0c\u800c\u8f93\u51fa\u5219\u662f\u8fd9\u7ec4\u5730\u5740\u5bf9\u5e94\u7684 memory \u4e2d\u5b58\u50a8\u7684\u4fe1\u606f\u3002\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u6765\u770b\uff0cROM \u7684\u786e\u5177\u6709\u300c\u53ea\u8bfb\u300d\u7684\u7279\u5f81\u3002

    eg

    ROM \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pal","title":"PAL","text":"

    PAL \u4e0e ROM \u6070\u6070\u76f8\u53cd\uff0c\u5176\u5177\u6709\u56fa\u5b9a\u7684 OR \u548c\u4e00\u6279\u53ef\u7f16\u7a0b\u7684 AND\u3002

    eg

    PAL \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#pla","title":"PLA","text":"

    PLA \u5728\u8bbe\u8ba1\u4e0a\u548c ROM \u7c7b\u4f3c\uff0c\u533a\u522b\u5728\u4e8e PLA \u5e76\u4e0d\u4f7f\u7528\u8bd1\u7801\u5668\u83b7\u5f97\u6240\u6709\u6700\u5c0f\u9879\uff0c\u800c\u662f\u7528\u53ef\u7f16\u7a0b\u7684 AND \u9635\u5217\u6765\u4ee3\u66ff\u8bd1\u7801\u5668\u3002

    eg

    PLA \u7684\u4e00\u79cd\u5e38\u89c1\u5199\u6cd5\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#lookup-tables","title":"Lookup Tables","text":"LUT

    \u67e5\u627e\u8868(Lookup Tables, or LUT)

    \u901a\u8fc7\u8ba9\u6570\u636e\u6e90\u63a5\u5185\u5b58\uff0c\u5e76\u901a\u8fc7\u4fee\u6539\u771f\u503c\u8868\u5185\u7684\u503c\uff0c\u5373\u4fee\u6539\u5185\u5b58\u91cc\u7684\u503c\uff0c\u6765\u5b9e\u73b0\u6570\u636e\u6e90\u7684\u53d8\u5316\uff0c\u6765\u6539\u53d8 MUX \u7684\u884c\u4e3a\u3002

    \u4f46\u662f\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u51fd\u6570\u8f93\u5165\u7684\u6570\u91cf\u4f1a\u53d8\u5316\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u901a\u8fc7\u7075\u6d3b\u7ec4\u5408\u7684\u65b9\u6cd5\uff08\u6bd4\u5982\u901a\u8fc7\u56db\u9009\u4e8c\u9009\u4e00\u7684\u65b9\u5f0f\uff0c\u7528\u4e09\u4e2a\u4e8c\u9009\u4e00\u7684 MUX \u6765\u5b9e\u73b0\u56db\u9009\u4e00\uff09\u6765\u5b9e\u73b0\u591a\u8f93\u5165\u3002

    \u5e38\u89c1\u7684 LUT \u5927\u5c0f\u4ee5 16bits \u6216 64bits \u7684 4 \u8f93\u5165\u6216 6 \u8f93\u5165\u4e3a\u4e3b\u3002

    \u7531\u4e8e LUT \u5b58\u7684\u672c\u8d28\u4e0a\u662f\u771f\u503c\u8868\uff0c\u6240\u4ee5\u5b83\u53ef\u4ee5\u5b9e\u73b0\u4efb\u610f\u8f93\u5165\u7b26\u5408\u8981\u6c42\u7684\u903b\u8f91\u51fd\u6570\u3002

    \u6240\u4ee5\uff0c\u95ee\u9898\u5c31\u53d8\u5316\u4e3a\u5982\u4f55\u7528\u8f83\u5c0f\u7684 LUT \u6765\u7ec4\u5408\u5b9e\u73b0\u590d\u6742\u7684\u903b\u8f91\u51fd\u6570\u3002

    LUT \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    FPGA \u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    \u5176\u4e3b\u8981\u5206\u4e3a\u4e09\u4e2a\u7ec4\u6210\u90e8\u5206\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#clb","title":"CLB","text":"

    CLB \u662f FPGA \u4e2d\u7684\u57fa\u7840\u903b\u8f91\u5355\u5143\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#sm","title":"SM","text":"

    \u901a\u8fc7\u76f8\u5f53\u590d\u6742\u7684\u7b97\u6cd5\uff0c SM \u4f1a\u6839\u636e\u76ee\u6807\u903b\u8f91\uff0c\u9009\u62e9\u94fe\u63a5\u4e0d\u540c\u7684 CLB \u4ee5\u5b9e\u73b0\u590d\u6742\u903b\u8f91\u3002

    \u5b83\u5177\u6709\u8fd9\u4e9b\u57fa\u672c\u5c5e\u6027\uff1a

    1. Flexibility: \u8bc4\u4f30\u4e00\u6761\u7ebf\u53ef\u4ee5\u8fde\u63a5\u5230\u591a\u5c11\u7ebf\uff1b
    2. Topology: \u54ea\u4e9b\u7ebf\u53ef\u4ee5\u88ab\u8fde\u63a5\u5230\uff1b
    3. Routability: \u6709\u591a\u5c11\u56de\u8def\u53ef\u4ee5\u88ab\u8def\u7531\uff1b

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap05/#iob","title":"IOB","text":"

    IOB \u7528\u6765\u5bf9\u5916\u90e8\u8bbe\u5907\u8fdb\u884c\u8fde\u63a5\uff0c\u7528\u6765\u63a7\u5236\u8f93\u5165\u548c\u8f93\u51fa\u3002

    eg for FPGA

    \u901a\u8fc7 FPGA \u5b9e\u73b0 \\(f=x_1x_2+\\overline{x_2x_3}\\)\uff1a

    \u5206\u89e3\u95ee\u9898\uff1a\\(f_1 = x_1x_2,\\;\\;f_2=\\overline{x_2x_3},\\;\\;f=f_1+f_2\\)\u3002

    \u5728\u8f6f\u4ef6\u5c42\u9762\u7f16\u7a0b\u5b8c\u540e\uff0c\u4f1a\u751f\u6210\u4f4d\u6d41\u6587\u4ef6(bitfile)\uff0c\u4e0b\u8f7d\u5230\u677f\u65f6\u4f1a\u66f4\u65b0 FPGA \u4e2d\u7684\u5185\u5bb9\u3002

    \u7ec4\u5408\u51fd\u6570\u7684\u5b9e\u73b0\u65b9\u6cd5

    \u5230\u76ee\u524d\u4e3a\u6b62\uff0c\u4e0d\u7ba1\u662f\u53ef\u7f16\u7a0b\u8fd8\u662f\u4e0d\u53ef\u7f16\u7a0b\uff0c\u90fd\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u8fdb\u884c\u4e00\u6b21\u5c0f\u7ed3\uff1a

    1. Decoders & OR gates
      • \u5c06\u8bd1\u7801\u51fa\u6765\u7684\u9700\u8981\u7684\u76ee\u6807\u7ec4\u5408\u90fd OR \u5728\u4e00\u8d77\uff1b
    2. MUXs
      • \u901a\u8fc7\u591a\u8def\u9009\u62e9\u5668\u5b9e\u73b0\u4efb\u610f\u903b\u8f91\u51fd\u6570\uff1b
    3. ROMs
    4. PALs
    5. PLAs
    6. LUTs
    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/","title":"Chap 6 Registers & Register Transfers","text":"

    \u7ea6 7005 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 35 \u5206\u949f

    \u5f15\u5165

    \u8fd9\u4e00\u7ae0\u53ef\u4ee5\u89c6\u4e3a\u662f\u7b2c\u56db\u7ae0\u7684\u4e00\u4e2a\u5ef6\u7eed\uff0c\u4e3b\u8981\u4ecb\u7ecd\uff08\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u540c\u6b65\uff09\u65f6\u5e8f\u903b\u8f91\u8bbe\u8ba1(Sequential Logic Design)\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668","title":"\u5bc4\u5b58\u5668","text":"

    \u5bc4\u5b58\u5668(registers)\u7c97\u7565\u7684\u6765\u8bf4\u5c31\u662f\u4e00\u5806\u89e6\u53d1\u5668\u4ee5\u53ca\u5bf9\u5e94\u7684\u72b6\u6001\u63a7\u5236\u7535\u8def\uff0c\u7528\u6765\u5b9e\u73b0\u591a\u4f4d\u6570\u636e\u7684\u5b58\u50a8\u7b49\u64cd\u4f5c\u3002

    \u5176\u4e2d\u6709\u4e00\u79cd\u7279\u6b8a\u7684\u5bc4\u5b58\u5668\u53eb\u8ba1\u6570\u5668(counter)\uff0c\u975e\u5e38\u76f4\u767d\u7684\uff0c\u5b83\u7684\u884c\u4e3a\u5c31\u662f\u968f\u7740\u65f6\u949f\u5468\u671f\u4e0d\u65ad\u5728\u56fa\u5b9a\u7684\u72b6\u6001\u5e8f\u5217\u4e2d\u5faa\u73af\u3002\u66f4\u5f62\u8c61\u7684\uff0c\u4e00\u822c\u662f\u5b9e\u73b0\u81ea\u52a8\u7684\u8ba1\u6570\u529f\u80fd\uff0c\u50cf\u7535\u5b50\u65f6\u949f\u90a3\u6837\u3002

    Registers are useful for storing and manipulating information; counters are employed in circuits that sequence and control operations in a digital system.

    \u5b9e\u73b0\u5bc4\u5b58\u5668\u4e00\u4e2a\u6700\u76f4\u767d\u7684\u60f3\u6cd5\u5c31\u662f\u516c\u7528\u63a7\u5236\u7ebf\u8def\u548c\u5206\u5217\u6570\u636e\u7ebf\u8def\u6765\u63a7\u5236\u591a\u4e2a\u89e6\u53d1\u5668\uff0c\u5982\u4e0b\u56fe\u662f\u4f7f\u7528 D FF \u5b9e\u73b0\u7684\u4e00\u4e2a 4-bit register\uff1a

    \u6211\u4eec\u79f0\u65b0\u6570\u636e\u88ab\u5199\u5165\u5bc4\u5b58\u5668\u7684\u64cd\u4f5c\u4e3a\u8f7d\u5165(load)\uff0c\u800c\u5982\u679c\u8f7d\u5165\u64cd\u4f5c\u5728\u540c\u4e00\u4e2a\u65f6\u949f\u8109\u51b2\u4e2d\u5b8c\u6210\uff0c\u6211\u4eec\u79f0\u4e4b\u662f\u5e76\u884c(parallel)\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4fdd\u6301","title":"\u4fdd\u6301","text":"

    \u6211\u4eec\u53d1\u73b0\uff0c\u5982\u56fe\u7684\u5bc4\u5b58\u5668\u5728\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u90fd\u5141\u8bb8\u8f7d\u5165\u3002\u4f46\u662f\u6211\u4eec\u5e0c\u671b\u5bc4\u5b58\u5668\u7684\u8f7d\u5165\u80fd\u591f\u88ab\u4eba\u4e3a\u63a7\u5236\uff0c\u4e5f\u5c31\u662f\u8bf4\u5f53\u6211\u4eec\u4e0d\u5e0c\u671b\u8f7d\u5165\u6570\u636e\u7684\u65f6\u5019\uff0c\u5bc4\u5b58\u5668\u80fd\u5904\u4e8e\u300c\u4fdd\u6301\u300d\u72b6\u6001\u3002\u4e3b\u8981\u6709\u4ee5\u4e0b\u4e24\u79cd\u65b9\u6848\uff1a

    \u65b9\u6848 A

    \u5176\u4e2d\u4e00\u4e2a\u505a\u6cd5\u662f\u9700\u8981\u9009\u62e9\u6027\u7684\u8ba9\u5b83\u8ddf\u968f\u65f6\u949f\u8109\u51b2\u5207\u6362\u72b6\u6001\u3002\u505a\u6cd5\u5c31\u662f\u5c06 Control \u4fe1\u53f7\u4fee\u6539\u4e3a \\(C = \\overline{Load} + Clock\\)\uff0c\u5982\u6b64\u800c\u6765\uff0c\u5f53 \\(Load = 0\\) \u65f6\uff0c\u59cb\u7ec8\u6709 \\(C = 1\\)\uff0c\u8109\u51b2\u6d88\u5931\uff0c\u5bc4\u5b58\u5668\u65e0\u6cd5\u88ab\u8f7d\u5165\u3002\u5982\u4e0b\u56fe\uff0c\u8fd9\u79cd\u6280\u672f\u53eb\u95e8\u63a7\u65f6\u949f(clock gating)\u3002

    clock skew

    \u7136\u800c\uff0c\u5728\u95e8\u63a7\u65f6\u949f\u6280\u672f\u4e2d\uff0c\u7531\u4e8e\u6dfb\u52a0\u4e86\u4e00\u4e2a\u989d\u5916\u7684\u903b\u8f91\u95e8\uff0c\u65f6\u949f\u8109\u51b2\u5230\u8fbe Control \u7684\u65f6\u5019\u4f1a\u51fa\u73b0\u989d\u5916\u7684\u4f20\u64ad\u5ef6\u65f6\uff0c\u5373\u65f6\u949f\u504f\u79fb(clock skew)\u3002\u800c\u8fd9\u5fae\u5c0f\u7684\u5ef6\u65f6\u4f1a\u5bfc\u81f4\u5728\u6574\u4e2a\u540c\u6b65\u7cfb\u7edf\u4e2d\uff0c\u4e0d\u540c\u7ec4\u4ef6\u5f97\u5230\u7684\u65f6\u949f\u8109\u51b2\u6709\u504f\u5dee\uff0c\u800c\u8fd9\u662f\u6211\u4eec\u6240\u4e0d\u5e0c\u671b\u770b\u5230\u7684\u3002\u6240\u4ee5\u5728\u5b9e\u9645\u8bbe\u8ba1\u4e2d\uff0c\u6211\u4eec\u5e94\u5f53\u907f\u514d\u6216\u5c3d\u53ef\u80fd\u7f29\u5c0f\u65f6\u949f\u504f\u79fb\u3002

    \u65b9\u6848 B

    \u53e6\u5916\u4e00\u4e2a\u505a\u6cd5\u662f\uff0c\u5728\u4e0d\u5e0c\u671b\u5b83\u4fee\u6539\u7684\u65f6\u5019\uff0c\u4e0d\u65ad\u5c06\u5b83\u7684\u8f93\u5165\u8f7d\u5165\uff0c\u4e5f\u5c31\u662f\u4fdd\u6301\u4e0d\u53d8\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2a MUX \u6765\u5b9e\u73b0\u8fd9\u4e2a\u529f\u80fd\uff0c\u7528 EN \u4f7f\u80fd\u7aef\u6765\u9009\u62e9\u662f\u8f7d\u5165\u65b0\u503c\u8fd8\u662f\u4fdd\u6301\u4e4b\u524d\u7684\u503c\uff0c\u5982\u4e0b\u56fe\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u5355\u5143","title":"\u5bc4\u5b58\u5668\u5355\u5143","text":"

    \u5c0f\u8282\u5bfc\u8bfb

    \u672c\u5c0f\u8282\u5728\u4e66\u672c\u4e2d\u7684\u4f4d\u7f6e\u9760\u540e\uff0c\u4f46\u662f\u8003\u8651\u5230\u5185\u5bb9\u7684\u8fde\u7eed\u6027\u6211\u51b3\u5b9a\u63d0\u524d\uff0c\u672c\u8282\u5185\u5bb9\u4f1a\u6d89\u53ca\u4e00\u4e9b\u4e4b\u540e\u7684\u5185\u5bb9\uff0c\u5b9e\u9645\u4e0a\u7684\u7edd\u5bf9\u6027\u77e5\u8bc6\u8f83\u5c11\uff0c\u53ef\u4ee5\u7c97\u770b\u8fc7\u7559\u4e0b\u5370\u8c61\u5373\u53ef\uff0c\u5927\u90e8\u5206\u77e5\u8bc6\u9700\u8981\u901a\u8fc7\u6848\u4f8b\u5206\u6790\u548c\u5b9e\u8df5\u83b7\u5f97\uff0c\u662f\u7c7b\u4f3c\u4e8e\u8bbe\u8ba1\u6307\u5bfc\u601d\u60f3\u7684\u5185\u5bb9\u3002

    \u5bc4\u5b58\u5668\u5355\u5143(Register Cell)\u662f\u5bc4\u5b58\u5668\u7684\u4e2a\u4f53\u5355\u5143\uff0c\u4e3b\u8981\u5305\u62ec\u4e00\u4e2a FF \u53ca\u5b9e\u73b0\u5176\u7ec4\u5408\u903b\u8f91\u7684\u7ec4\u5408\u7535\u8def\u3002

    A single-bit cell of an iterative combinational circuit, connected to a flip-flop that provides the output, forms a two-state sequential circuit called a register cell

    Register Cell Design

    \u8bbe\u8ba1\u5bc4\u5b58\u5668\uff08\u5c24\u5176\u662f\u5927\u89c4\u6a21\u7684\u5bc4\u5b58\u5668\uff09\u7684\u91cd\u8981\u624b\u6bb5\u4e4b\u4e00\uff0c\u5c31\u662f\u5bc4\u5b58\u5668\u5355\u5143\u8bbe\u8ba1(Register Cell Design)\u3002\u901a\u5e38\u9075\u5faa\u4ee5\u4e0b\u6b65\u9aa4\uff1a

    1. \u8bbe\u8ba1\u5177\u6709\u4ee3\u8868\u6027\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b
    2. \u590d\u5236\u5e76\u8fde\u63a5\u82e5\u5e72\u4e2a\u8fd9\u6837\u7684\u5bc4\u5b58\u5668\u5355\u5143\uff1b
    3. \u4fee\u6539\u67d0\u51e0\u4e2a\u5bc4\u5b58\u5668\u5355\u5143\uff08\u901a\u5e38\u53ef\u80fd\u662f\u4e00\u4e32\u5bc4\u5b58\u5668\u7684\u9996\u5c3e\u4e24\u4e2a\u5355\u5143\uff09\u4ee5\u89e3\u51b3\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\u6216\u8fb9\u754c\u95ee\u9898\uff1b

    \u8bbe\u8ba1\u5bc4\u5b58\u5668\u5355\u5143\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u5bc4\u5b58\u5668\u5355\u5143\u8fdb\u884c\u5b9a\u4e49\u3002\u800c\u6307\u5b9a(Specify)\u4e00\u4e2a\u5bc4\u5b58\u5668\u5355\u5143\u7684\u529f\u80fd\u7684\u4e3b\u8981\u6709\u8fd9\u4e9b\u65b9\u9762\uff1a

    \u5728\u5b9e\u9645\u5b9e\u73b0\u65f6\uff0c\u5206\u4e3a MUX \u5b9e\u73b0 \u548c \u65f6\u5e8f\u903b\u8f91\u5b9e\u73b0 \u4e24\u79cd\u65b9\u6cd5\u3002

    \u524d\u8005\u5c31\u662f #\u57fa\u4e8e Mux \u5b9e\u73b0\u4f20\u8f93 \u4e2d\u5c06\u8981\u63d0\u5230\u7684\u90a3\u6837\uff0c\u5173\u4e8e\u4e0a\u9762\u90a3\u4e9b\u5185\u5bb9\u5728\u8be5\u5c0f\u8282\u4e2d\u7684\u4f53\u73b0\u5982\u4e0b\u56fe\uff1b

    \u4e5f\u5c31\u662f\u901a\u8fc7\u5148\u5206\u522b\u5b9e\u73b0\u903b\u8f91\uff0c\u7136\u540e\u7ecf\u7531 MUX \u9009\u62e9\u76f8\u5e94\u7684\u6570\u636e\u8f93\u5165\u6765\u5b9e\u73b0\u3002

    \u800c\u540e\u8005\u6309\u7167\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1\u65b9\u6cd5\uff0c\u786e\u5b9a\u72b6\u6001\u56fe\u540e\u6839\u636e\u72b6\u6001\u53d8\u5316\u8bbe\u8ba1\u65f6\u5e8f\u7535\u8def\uff0c\u8bbe\u8ba1\u4f18\u5316\u51b3\u5b9a\u72b6\u6001\u8f6c\u79fb\u65b9\u7a0b\u5b9e\u73b0\uff0c\u5177\u4f53\u53ef\u4ee5\u53c2\u8003 \u7b2c\u56db\u7ae0#\u65f6\u5e8f\u7535\u8def\u8bbe\u8ba1\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93","title":"\u5bc4\u5b58\u5668\u4f20\u8f93","text":"

    \u8bf4\u660e

    \u628a transfer \u7ffb\u8bd1\u4e3a\u201c\u4f20\u8f93\u201d\u662f\u6211\u8111\u74dc\u4e00\u62cd\u7684\u884c\u4e3a\uff0c\u6211\u5e76\u4e0d\u77e5\u9053\u7ffb\u8bd1\u6210\u4ec0\u4e48\u6bd4\u8f83\u5408\u9002\uff0c\u5982\u679c\u8bfb\u8005\u6709\u66f4\u597d\u7684\u7ffb\u8bd1\uff0c\u8bf7\u544a\u8bc9\u6211\uff01

    \u4e00\u4e2a\u590d\u6742\u7cfb\u7edf\u9664\u4e86\u4fe1\u606f\u7684\u5b58\u50a8\u8fd8\u9700\u8981\u4fe1\u606f\u7684\u4f20\u8f93\u548c\u5904\u7406\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u4e3a\u4e86\u5b9e\u73b0\u7075\u6d3b\u3001\u590d\u6742\u7684\u8ba1\u7b97\uff0c\u6211\u4eec\u9700\u8981\u4fe1\u606f\u4e4b\u95f4\u80fd\u591f\u5e7f\u6cdb\u5730\u4ea4\u4e92\u3002\u5927\u90e8\u5206\u7535\u5b50\u7cfb\u7edf\u8bbe\u8ba1\u4e2d\uff0c\u90fd\u4f1a\u6709\u4e00\u4e2a\u63a7\u5236\u5355\u5143(Control Unit)\u6765\u8d1f\u8d23\u6307\u6325\u6570\u636e\u901a\u8def(Datapath)\u8fdb\u884c\u6570\u636e\u5904\u7406\u3002

    Datapath performs data-processing operations, and control unit determines the sequence of those operations.

    Datapaths are defined by their registers and the operations performed on binary data stored in the registers.

    \u5bf9\u4e8e\u5bc4\u5b58\u5668\u81ea\u8eab\u800c\u8a00\uff0c\u5b83\u53ef\u80fd\u5b9e\u73b0 \u8f7d\u5165(load)\u3001\u6e05\u7a7a(clear)\u3001\u79fb\u4f4d(shift) \u548c \u8ba1\u6570(count) \u7b49\u3002\u6b64\u5916\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u5bc4\u5b58\u5668\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u79fb\u52a8\u4e86\u7684\u52a0\u5de5\uff0c\u88ab\u79f0\u4e3a\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c(Register Transfer Operations)\uff0c\u5b83\u4eec\u4e3b\u8981\u5305\u542b\u8fd9\u4e09\u4e2a\u90e8\u5206\uff1a

    1. \u7cfb\u7edf\u4e2d\u7684\u5bc4\u5b58\u5668\u96c6\u5408\uff1b
    2. \u5bf9\u4e8e\u6570\u636e\u7684\u64cd\u4f5c\uff1b
    3. \u76d1\u7763\u64cd\u4f5c\u5e8f\u5217\u7684\u63a7\u5236\uff1b

    \u5176\u4e2d\uff0c\u6700\u57fa\u7840\u7684\u90a3\u90e8\u5206\u64cd\u4f5c\u88ab\u79f0\u4e3a\u5fae\u64cd\u4f5c(microoperation)\uff0c\u5b83\u4eec\u662f\u5b9e\u73b0\u590d\u6742\u64cd\u4f5c\u7684\u57fa\u7840\uff0c\u4f8b\u5982\u5c06 R1 \u7684\u6570\u636e\u8f7d\u5165 R2\uff0c\u5c06 R1 \u548c R2 \u76f8\u52a0\uff0c\u6216\u662f\u81ea\u589e R1 \u7b49\u3002\u5b83\u4eec\u901a\u5e38\u662f\u4ee5\u6bd4\u7279\u5411\u91cf\u4e3a\u8f7d\u4f53\u5e76\u884c\u5b9e\u73b0\u7684\u3002

    Note that:

    the term \u201cmicrooperation,\u201d as used here, does not refer to any particular way of producing the control signals: specifically, it does not imply that the control signals are generated by a control unit based on a technique called microprogramming.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00","text":"

    \u5bf9\u4e8e\u7b80\u5355\u7684\u65f6\u5e8f\u903b\u8f91\u7cfb\u7edf\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u72b6\u6001\u673a\u7b49\u65b9\u5f0f\u6765\u63cf\u8ff0\u5b83\u4eec\u7684\u884c\u4e3a\uff0c\u4f46\u662f\u5bf9\u4e0e\u89c4\u6a21\u66f4\u5927\u7684\u7cfb\u7edf\u6765\u8bf4\uff0c\u8fd9\u662f\u4e00\u4ef6\u5f88\u75db\u82e6\u7684\u4e8b\u60c5\u3002\u6240\u4ee5\u6211\u4eec\u5f15\u5165\u4e86\u4e00\u79cd\u4e13\u6ce8\u4e8e\u884c\u4e3a\u903b\u8f91\u7684\u8bed\u8a00\u6765\u63cf\u8ff0\u5bc4\u5b58\u5668\u4f20\u8f93\u4e2d\u7684\u903b\u8f91\u884c\u4e3a\uff1a\u5bc4\u5b58\u5668\u4f20\u8f93\u8bed\u8a00(Register Transfer Language, RTL)\u3002

    \u901a\u5e38\u5177\u6709\u7279\u6b8a\u529f\u80fd\u7684\u5bc4\u5b58\u5668\u90fd\u4f1a\u7528\u5176\u540d\u79f0\u7f29\u5199\u5927\u5199\u8868\u793a\uff0c\u4f8b\u5982 AR(Address Register)\uff0cPC(Program Counter)\uff0cIR(Instruction Register) \u6216\u8005\u66f4\u666e\u901a\u7684 R2(Register 2)\u3002

    Little-endian & Big-endian

    \u6211\u4eec\u6709\u65f6\u5019\u4e5f\u4f1a\u7528\u8fd9\u4e9b\u5f62\u5f0f\u6765\u56fe\u5f62\u5316\u7684\u8868\u793a\u5bc4\u5b58\u5668\uff1a

    \u6b64\u5916\uff0c\u5e38\u89c1\u64cd\u4f5c\u7528 RTL \u8868\u793a\u65b9\u6cd5\u548c\u7b26\u53f7\u5982\u4e0b\uff1a

    \u9700\u8981\u989d\u5916\u8bf4\u660e\u7684\u662f\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8868\u8fbe\u6761\u4ef6\u8bed\u53e5\uff0c\u4f8b\u5982\u6211\u4eec\u60f3\u8868\u8fbe\uff1a

    \\[ if\\, (K_1 = 1) \\,then\\, (R2 \\leftarrow R1) \\]

    \u5219\u53ef\u4ee5\u5199\u4e3a\uff1a

    \\[ K_1 : R2 \\leftarrow R1 \\]"},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0","text":"

    \u5f15\u5165

    \u5982\u4f55\u5b9e\u73b0\u5bc4\u5b58\u5668\u6240\u5b58\u50a8\u7684\u6570\u636e\u4e4b\u95f4\u7684\u5904\u7406\u4e0e\u4ea4\u4e92\u662f\u672c\u7ae0\u8282\u7684\u6838\u5fc3\u547d\u9898\u3002\u5982\u679c\u8bf4 \u5fae\u64cd\u4f5c \u5173\u6ce8\u7684\u662f\u6570\u636e\u7684\u5904\u7406\uff0c\u90a3 \u5bc4\u5b58\u5668\u4f20\u8f93 \u5219\u7740\u773c\u4e8e\u6570\u636e\u4e4b\u95f4\u7684\u4ea4\u4e92\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5982\u4f55\u628a\u6570\u636e\u7ed9\u5230\u522b\u7684\u5bc4\u5b58\u5668\u3001\u5982\u4f55\u83b7\u53d6\u522b\u7684\u5bc4\u5b58\u5668\u7ed9\u5230\u7684\u6570\u636e\u3001\u5982\u4f55\u4f20\u8f93\u548c\u9009\u62e9\u8fd9\u4e9b\u6570\u636e\uff0c\u5c31\u662f\u672c\u5c0f\u8282\u8981\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u7279\u522b\u7684\uff0c\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0\u53ef\u4ee5\u76f4\u63a5\u5b9e\u73b0 \u8f6c\u79fb \u64cd\u4f5c\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u57fa\u4e8e-mux-\u5b9e\u73b0\u4f20\u8f93","title":"\u57fa\u4e8e MUX \u5b9e\u73b0\u4f20\u8f93","text":"

    \u5bf9\u4e8e\u4e00\u4e2a\u5355\u4e00\u5bc4\u5b58\u5668\uff0c\u5b83\u7684\u8f93\u5165\u53ef\u80fd\u6709\u591a\u79cd\u6765\u6e90\uff0c\u4f8b\u5982\u5176\u5b83\u5bc4\u5b58\u5668\uff0c\u53c8\u6216\u8005\u662f\u5176\u4ed6\u64cd\u4f5c\u7684\u7ed3\u679c\u3002\u603b\u800c\u8a00\u4e4b\uff0c\u5b83\u7684\u8f93\u5165\u5f88\u53ef\u80fd\u662f\u4e0d\u552f\u4e00\u7684\uff0c\u800c\u540c\u4e00\u65f6\u523b\u6211\u4eec\u53ea\u80fd\u63a5\u53d7\u4e00\u4e2a\u6765\u6e90\u7684\u8f93\u5165\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528 MUX \u6765\u5bf9\u8f93\u5165\u8fdb\u884c\u9009\u62e9\u3002

    \u4e00\u4e2a\u7b80\u5355 \ud83c\udf30 \u5982\u4e0b\uff1a

    \u7528\u8bed\u8a00\u6765\u63cf\u8ff0\u8fd9\u4e2a\u603b\u4f53\u67b6\u6784\u5c31\u662f\uff0c\u6211\u4eec\u901a\u8fc7\u4e00\u7cfb\u5217 one-hot \u7f16\u7801\uff08\u6216\u8005\u662f one-cold\uff09\u6765\u8868\u793a\u9009\u62e9\u54ea\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d \\(K_0\\sim K_{n-1}\\)\uff09\uff0c\u518d\u901a\u8fc7 Encoder \u5c06\u5b83\u4eec\u7f16\u7801\u4f5c\u4e3a MUX \u7684\u8f93\u5165\u9009\u62e9\u4fe1\u53f7\uff08\u4e0b\u56fe\u4e2d \\(S_m \\sim S_0\\)\uff09\uff0c\u4ece\u591a\u4e2a\u8f93\u5165\u6e90\uff08\u4e0b\u56fe\u4e2d \\(0 \\sim k \\sim (n-1)\\)\uff09\u4e2d\u9009\u62e9\u5bf9\u5e94\u7684\u6e90\uff0c\u5e76\u8f93\u51fa\uff0c\u7ed9\u5230 R0\uff1b\u6b64\u5916\uff0c\u5c06\u9009\u62e9\u4fe1\u53f7\u90fd\u6216\u8d77\u6765\uff0c\u4f5c\u4e3a R0 \u7684 Load \u4fe1\u53f7\u8f93\u5165\u3002

    \u5176\u4e2d MUX \u7684 \\(k \\sim (n-1)\\) \u5b9e\u73b0\u4e86 \u8f6c\u79fb \u64cd\u4f5c\u3002

    \u5c0f\u7ed3

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0cMUX \u5b9e\u73b0\u4e3b\u8981\u7684\u5b9e\u73b0\u4e86\u591a\u5bf9\u4e00\u7684\u6570\u636e\u4f20\u8f93\u95ee\u9898\u3002\u5982\u679c\u6211\u4eec\u5355\u5355\u4f7f\u7528 MUX \u6765\u5b8c\u6210\u5bc4\u5b58\u5668\u4e4b\u95f4\u7684\u6570\u636e\u4ea4\u4e92\uff08\u5047\u8bbe\u6240\u6709\u5bc4\u5b58\u5668\u90fd\u80fd\u76f8\u4e92\u4f20\u8f93\u6570\u636e\uff09\uff0c\u90a3\u5c06\u8fd9\u4e2a\u6a21\u578b\uff08\u56fe\u4f8b\u5728\u4e0b\u4e00\u5c0f\u8282\uff09\u62bd\u8c61\u540e\uff0c\u6211\u4eec\u5f97\u5230\u7684\u5c06\u662f\u4e00\u5f20\u201c\u5b8c\u5168\u56fe\u201d\uff0c\u7136\u800c\u5b83\u8089\u773c\u53ef\u89c1\u7684\u5f00\u9500\u5927\u3002

    \u800c\u603b\u7ebf\u5219\u975e\u5e38\u5de7\u5999\u5730\u4f18\u5316\u4e86\u8fd9\u4e2a\u95ee\u9898\uff08\u5e76\u4e0d\u662f\u4e0a\u4f4d\u66ff\u4ee3\u5173\u7cfb\uff09\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","title":"\u57fa\u4e8e\u603b\u7ebf\u5b9e\u73b0\u4f20\u8f93","text":"

    \u5728\u4e0a\u4e00\u5c0f\u8282\u7684\u5c0f\u7ed3\u4e2d\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86 MUX \u5b9e\u73b0\u7684\u4f18\u52a3\uff0c\u4e5f\u63d0\u5230\u4e86\u603b\u7ebf(bus)\u4f20\u8f93\u7684\u4f18\u52bf\uff0c\u90a3\u4e48\u5b83\u5177\u4f53\u6765\u8bf4\u5176\u5b9e\u73b0\u65b9\u6cd5\u6709\u4e24\u79cd\u2014\u2014\u901a\u8fc7\u5171\u6709 MUX \u5b9e\u73b0\uff0c\u6216\u901a\u8fc7\u4e09\u6001\u95e8\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5171\u6709-mux-\u5b9e\u73b0","title":"\u5171\u6709 MUX \u5b9e\u73b0","text":"

    \u8ba9\u6211\u4eec\u4ee5\u4e09\u4e2a\u5bc4\u5b58\u5668\u7684\u6a21\u578b\u4e3a\u4f8b\uff0c\u5bf9\u6bd4\u901a\u8fc7\u4e13\u6709 MUX \u5b9e\u73b0\u548c\u901a\u8fc7\u5355\u4e00\u603b\u7ebf(single bus)\u5b9e\u73b0\u7684\u533a\u522b\uff1a

    \u9996\u5148\u5bf9\u603b\u7ebf\u5b9e\u73b0\u8fdb\u884c\u8bf4\u660e\uff0c\u540c\u6837\u662f\u4f7f\u7528 MUX\uff0c\u4f46\u6b64\u65f6 MUX \u4e0d\u518d\u662f\u67d0\u4e2a\u5bc4\u5b58\u5668\u7684\u4e13\u6709\u903b\u8f91(dedicated logic)\uff0c\u800c\u662f\u4e09\u4e2a\u5bc4\u5b58\u5668\u5171\u540c\u4f7f\u7528\u7684\u5171\u6709\u903b\u8f91(shared logic)\u3002\u603b\u7ebf\u4e2d\u7684 MUX \u5728\u6240\u6709\u5bc4\u5b58\u5668\u7684\u8f93\u5165\u4e2d\u9009\u62e9\u5176\u4e2d\u4e00\u4e2a\uff0c\u5e76\u5c06\u5b83\u8f93\u51fa\uff0c\u7ed9\u5230\u6240\u6709\u5bc4\u5b58\u5668\uff1b\u800c\u603b\u7ebf\u901a\u8fc7\u63a7\u5236 Load \u4fe1\u53f7\u6765\u9009\u62e9\u8ba9\u54ea\u4e2a\uff08\u6216\u54ea\u4e9b\uff09\u5bc4\u5b58\u5668\u5f97\u5230\u8fd9\u4e2a\u4fe1\u53f7\u3002

    \u63a5\u4e0b\u6765\u8fdb\u884c\u5bf9\u6bd4\uff0c\u4ee5\u603b\u7ebf\u5b9e\u73b0\u4e3a\u4e3b\u4f53\uff0c\u4e0e MUX \u5b9e\u73b0\u5bf9\u6bd4\uff1a

    \u800c\u56e0\u4e3a\u8fd9\u4e9b\u7279\u70b9\uff0c\u6211\u4eec\u9700\u8981\u8bc4\u4f30\u6211\u4eec\u7684\u9700\u6c42\uff0c\u9009\u62e9\u5408\u9002\u7684\u7ed3\u6784\u6765\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4e09\u6001\u95e8\u5b9e\u73b0","title":"\u4e09\u6001\u95e8\u5b9e\u73b0","text":"

    \u4e09\u6001\u95e8\u7684\u76f8\u5173\u5185\u5bb9\u5df2\u7ecf\u5728\u524d\u9762\u4ecb\u7ecd\uff0c\u53ef\u4ee5\u91cd\u70b9\u5173\u6ce8\u5176\u4e2d\u7684\u788e\u788e\u5ff5\u90e8\u5206\u3002

    \u800c\u5173\u4e8e\u603b\u7ebf\u7684\u5b9e\u73b0\uff0c\u5f15\u7528\u4e00\u53e5\u6211\u5728 #\u4e09\u6001\u95e8/\u788e\u788e\u5ff5 \u91cc\u5199\u7684\u8bdd\uff1a

    \u53ea\u8981\u6211\u4eec\u8ba9\u5bfc\u7ebf\u7684\u82e5\u5e72\u8f93\u5165\u4e2d\u53ea\u6709\u4e00\u4e2a\u4e09\u6001\u95e8\u4e0d\u5728\u300c\u9ad8\u963b\u6001\u300d\uff0c\u5c31\u80fd\u591f\u4f18\u96c5\u5730\u5b9e\u73b0\u591a\u8def\u8f93\u51fa\u4e92\u8054\u3002

    \u5b9e\u9645\u4e0a\uff0c\u6240\u8c13\u7684\u4e09\u6001\u95e8\u5b9e\u73b0\u539f\u7406\u4e0a\u548c MUX \u5b9e\u73b0\u65e0\u4e8c\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u662f\u901a\u8fc7\u4e09\u6001\u95e8\u6765\u5b9e\u73b0\u300c\u8def\u7531\u300d\u8fd9\u4e2a\u903b\u8f91\u800c\u5df2\uff0c\u4e5f\u5c31\u662f\u4e66\u4e0a\u6240\u8bf4\u7684\uff1a

    Three-state buffer outputs can be connected together to form a multiplexed output line.

    \u4e0e MUX \u5b9e\u73b0\u76f8\u5bf9\u6bd4\uff0c\u4e09\u6001\u95e8\u5b9e\u73b0\u65b9\u5f0f\u5982\u4e0b\uff1a

    \u8fdb\u884c\u7b80\u5355\u8bf4\u660e\uff0c(c) \u4e2d\u5bf9\u4e09\u6001\u95e8\u7684\u8868\u793a\u8fdb\u884c\u4e86\u7b80\u5316\uff0c\u542b\u4e49\u53c2\u8003 (a)\u3002\u5b83\u60f3\u8868\u8fbe\u7684\u4e3b\u8981\u542b\u4e49\u662f\uff0c\u5f53 EN \u4e3a 1 \u65f6\uff0c\u8868\u793a\u8f93\u51fa\uff1b\u53cd\u4e4b\u8868\u793a\u8f93\u5165\uff08\u5f53\u7136\uff0c\u771f\u6b63\u51b3\u5b9a\u662f\u5426\u8bfb\u5165\u5bc4\u5b58\u5668\u7684\u8fd8\u662f LD\uff09\u3002

    \u4e2a\u4eba\u7591\u60d1

    \u4e66\u4e2d\u7684\u8868\u8ff0\u662f\uff1a

    If the three-state buffers are enabled, then the lines are outputs; if the three-state buffers are disabled, then the lines can be inputs.

    \u4f46\u662f\u770b (a) \u7684\u8868\u8fbe\uff0c\u4e0d\u7ba1 EN \u662f\u4ec0\u4e48\uff0c\u5b83\u5e94\u5f53\u90fd\u6709\u8f93\u5165\u624d\u5bf9\uff0c\u771f\u6b63\u51b3\u5b9a\u662f\u5426\u8f93\u5165\u8fdb\u6765\u7684\u5e94\u8be5\u8fd8\u662f LD\uff1f

    \u5bf9\u6bd4\u6765\u770b\uff0c\u4e09\u6001\u95e8\u7684\u5b9e\u73b0\u5927\u5927\u964d\u4f4e\u4e86\u603b\u7ebf\u7684\u5b9e\u73b0\u6210\u672c\uff0c\u7cbe\u7b80\u4e86\u7535\u8def\u7684\u5b9e\u73b0\uff0c\u6240\u4ee5\u901a\u5e38\u6765\u8bf4\u66f4\u5e38\u7528\u3002

    \u4e2a\u4eba\u60f3\u6cd5

    \u867d\u7136\u4e66\u4e2d\u8bf4\u4e09\u6001\u95e8\u7684\u63a5\u7ebf\u6bd4 MUX \u7684\u5c11\u4e86\u4e00\u534a\uff0c\u4f46\u6211\u89c9\u5f97\u4e09\u6001\u95e8\u53ea\u662f\u628a\u7ebf\u5206\u5c94\u7684\u5730\u65b9\u79fb\u52a8\u5230\u4e86\u5bc4\u5b58\u5668\u9644\u8fd1\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4e0d\u5982\u8bf4\u662f\u8282\u7701\u4e86\u5bfc\u7ebf\u7684\u957f\u5ea6\u3002\u4f46\u662f\u968f\u7740\u8f93\u5165\u7684\u589e\u52a0\uff0cMUX \u7684\u7ed3\u6784\u4f1a\u8d8a\u6765\u8d8a\u590d\u6742\u4e14\u9700\u8981\u91cd\u65b0\u8bbe\u8ba1\uff0c\u4f46\u4e09\u6001\u95e8\u53ea\u9700\u8981\u91cf\u7684\u589e\u52a0\u5c31\u884c\u4e86\uff0c\u6240\u4ee5\u786e\u5b9e\u662f\u66f4\u52a0\u5438\u5f15\u4eba\u3002\uff08\u5f53\u7136\uff0c\u867d\u7136\u4e66\u4e2d\u6ca1\u8bf4\uff0c\u4f46\u662f\u6211\u89c9\u5f97 Enable \u5fc5\u987b at most one-hot\uff0c\u800c\u8fd9\u90e8\u5206\u7684\u903b\u8f91\u5bf9\u4e8e\u4e24\u4e2a\u5b9e\u73b0\u65b9\u6cd5\u6765\u8bf4\u662f\u4e00\u6837\u7684\uff09

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","title":"\u5fae\u64cd\u4f5c\u53ca\u5176\u5b9e\u73b0","text":"

    A microoperation is an elementary operation performed on data stored in registers or in memory.

    \u5fae\u64cd\u4f5c\u4e00\u822c\u5206\u4e3a\u8fd9\u56db\u79cd\uff1a

    1. \u8f6c\u79fb\uff0ctransfer microoperations\uff0c\u5c06\u6570\u636e\u4ece\u4e00\u4e2a\u5bc4\u5b58\u5668\u8f6c\u79fb\u5230\u53e6\u5916\u4e00\u4e2a\u5bc4\u5b58\u5668\uff1b
    2. \u7b97\u672f\uff0carithmetic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u7b97\u672f\u8fd0\u7b97\u64cd\u4f5c\uff1b
    3. \u903b\u8f91\uff0clogic microoperations\uff0c\u5bf9\u6570\u636e\u7684\u903b\u8f91\u8fd0\u7b97\u64cd\u4f5c\uff1b
    4. \u79fb\u4f4d\uff0cshift microoperations\uff0c\u5bf9\u6570\u636e\u7684\u79fb\u4f4d\u64cd\u4f5c\uff1b

    A given microoperation may be of more than one type. For example, a 1s complement operation is both an arithmetic microoperation and a logic microoperation.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u8f6c\u79fb","title":"\u8f6c\u79fb","text":"

    \u4e0d\u6539\u53d8\u6570\u636e\u672c\u8eab\uff0c\u53ea\u662f\u4ece\u4e00\u4e2a\u5bc4\u5b58\u5668\u4e2d\u628a\u6570\u636e\u79fb\u52a8\u5230\u53e6\u5916\u4e00\u4e2a\u5bc4\u5b58\u5668\u3002

    \u5c06 R0 \u4e2d\u7684\u6570\u636e\u8f6c\u79fb\u5230 R1 \u4e2d\uff0c\u7528 RTL \u8868\u793a\u5c31\u662f \\(R0 \\leftarrow R1\\)\u3002

    \u8fd9\u4e00\u90e8\u5206\u7684\u5b9e\u73b0\u9014\u5f84\u5728 \u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u5b9e\u73b0 \u5df2\u7ecf\u9610\u8ff0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u7b97\u672f","title":"\u7b97\u672f","text":"

    Multiplication and division are not listed in Table 6-3. Multiplication can be represented by the symbol * and division by /. These two operations are not included in the basic set of arithmetic microoperations because they are assumed to be implemented by sequences of basic microoperations. However, multiplication can be considered as a microoperation if implemented by a combinational circuit. In such a case, the result is transferred into a destination register at the clock edge after all signals have propagated through the entire combinational circuit.

    \u52a0\u51cf\u6cd5\u5668

    \u5c31\u50cf\u6211\u4eec\u4e4b\u524d\u5b66\u8fc7\u7684\uff0c\u7528\u52a0\u6cd5\u5668\u5b9e\u73b0\u52a0\u51cf\u6cd5\u5668\uff0c\u5728 RTL \u548c\u6a21\u5757\u903b\u8f91\u7535\u8def\u7684\u7ef4\u5ea6\u4e0b\uff0c\u53ef\u4ee5\u8fd9\u4e48\u8868\u793a\uff1a

    \\[ \\begin{aligned} &\\overline{X}K_1:R_1\\leftarrow R_1 + R_2 \\\\ &XK_1:R_1\\leftarrow R_1 + \\overline{R_2} + 1 \\end{aligned} \\]

    \u6ce8\u610f

    \u5bf9\u4e8e\u5982\u4e0a\u51fa\u73b0\u7684\u5f62\u5f0f\u5982\uff1a\\(condition: reg \\leftarrow options one regs\\) \u7684\u8868\u8fbe\u5f0f\uff0c: \u5de6\u4fa7\u51fa\u73b0\u7684 + \u8868\u793a\u6216\uff0c\u53f3\u4fa7\u7684\u5219\u8868\u793a\u52a0\uff08\u201c\u4e58\u201d\u4e5f\u662f\u8fd9\u6837\uff09\uff01

    \u76f8\u5bf9\u5e94\u7684\uff0c\u52a0\u51cf\u6cd5\u7684\u5b9e\u73b0\u53ef\u4ee5\u901a\u8fc7\u52a0\u51cf\u6cd5\u5668\u5b9e\u73b0\uff0c\u4e58\u6cd5\u53ef\u4ee5\u7528 \u79fb\u4f4d \u64cd\u4f5c\u5b9e\u73b0\uff0c\u800c\u9664\u6cd5\u76f8\u5bf9\u590d\u6742\u3002

    \u4e58\u6cd5\u5b9e\u73b0\u7684\u5927\u81f4\u601d\u8def

    \u5047\u8bbe\u6211\u4eec\u9700\u8981\u8ba1\u7b97 \\(a \\cdot b\\)\uff0c\u4e14 \\(a\\)\uff0c\\(b\\) \u90fd\u662f\u6574\u6570\uff0c\u5219\u53ef\u4ee5\u5c06 \\(b\\) \u5199\u6210\u4e8c\u8fdb\u5236\u5f62\u5f0f \\((b_{n-1}b_{n-2}...b_1b_0)_2\\)\uff0c\u4e8e\u662f\uff1a

    \\[ \\begin{aligned} a \\cdot b &= a \\cdot (b_{n-1}b_{n-2}...b_1b_0)_2 \\\\ &= a \\cdot \\left[ (b_{n-1}0...00)_2 + \\cdot (0b_{n-2}...00)_2 + ... + \\cdot (00...b_10)_2 + \\cdot(00...0b_0)_2 \\right]\\\\ &= a \\cdot \\sum_{i = 0} ^{n-1} b_i \\cdot 2^{i} \\\\ &= \\left(a \\cdot \\sum_{i = 0} ^{n-1} b_i\\right) \\;\\mathrm{<<}\\; i \\;\\;\\; \\text{where \"<<\" means \"Shift Left\"} \\end{aligned} \\]

    \u4e8e\u662f\u5c31\u53ef\u4ee5\u901a\u8fc7 \u79fb\u4f4d \u7684\u76f8\u5173\u77e5\u8bc6\u6765\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u903b\u8f91","title":"\u903b\u8f91","text":"

    \u903b\u8f91\u8fd0\u7b97\u7684\u5b9e\u73b0\u76f8\u6bd4\u7b97\u672f\u66f4\u52a0\u76f4\u63a5\uff0c\u56e0\u4e3a\u5927\u90e8\u5206\u903b\u8f91\u90fd\u53ef\u4ee5\u901a\u8fc7\u903b\u8f91\u95e8\u6765\u5b9e\u73b0\u3002

    \u800c\u627f\u62c5\u903b\u8f91\u548c\u7b97\u672f\u8fd0\u7b97\u7684\u786c\u4ef6\u6a21\u5757\uff0c\u4e00\u822c\u88ab\u79f0\u4e3aALU\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u79fb\u4f4d","title":"\u79fb\u4f4d","text":"

    \u79fb\u4f4d\u7684\u5b9e\u73b0\u901a\u8fc7\u79fb\u4f4d\u5bc4\u5b58\u5668(Shift Register, SHR)\u5b9e\u73b0\u3002

    \u5f15\u5165

    \u79fb\u4f4d\u64cd\u4f5c\u4ece\u672c\u8d28\u4e0a\u6765\u8bb2\uff0c\u662f\u901a\u8fc7\u89e6\u53d1\u5668\u968f\u7740\u65f6\u949f\u8109\u51b2\uff0c\u5c06\u4e32\u884c\u6570\u636e\u4e00\u4f4d\u4e00\u4f4d\u5730\u79fb\u52a8\u5b9e\u73b0\u7684\u3002\u4f46\u662f\u5982\u679c\u8bfb\u8005\u5c1a\u672a\u7406\u89e3\u5176\u5b9e\u73b0\u539f\u7406\uff0c\u9605\u8bfb\u4ee5\u4e0b\u5185\u5bb9\u521a\u5f00\u59cb\u53ef\u80fd\u4f1a\u89c9\u5f97\u6709\u4e9b\u83ab\u540d\u5176\u5999\uff0c\u4f46\u662f\u8bf7\u5148\u9605\u8bfb \u4e32\u884c\u5b9e\u73b0 \u548c \u5e76\u884c\u5316 \u7684\u5185\u5bb9\uff0c\u77e5\u9053\u5b83\u4eec\u7684\u884c\u4e3a\u540e\uff0c\u53ef\u4ee5\u5148\u6682\u65f6\u8df3\u8fc7 \u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668\uff0c\u518d\u6765\u770b\u672c\u8282\u672b\u5c3e\u7684\u603b\u7ed3\uff0c\u4e5f\u8bb8\u80fd\u591f\u8ba9\u60a8\u660e\u767d\u5b83\u7a76\u7adf\u662f\u600e\u4e48\u5b9e\u73b0\u7684\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4e32\u884c\u5b9e\u73b0","title":"\u4e32\u884c\u5b9e\u73b0","text":"

    \u79fb\u4f4d\u64cd\u4f5c\u6700\u7b80\u5355\u7684\u5b9e\u73b0\u53ea\u9700\u8981\u4e0e\u8f93\u5165\u6570\u76f8\u540c\u4f4d\u6570\u7684\u89e6\u53d1\u5668\u5b9e\u73b0\u3002\u5b83\u7684\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    \u56db\u4e2a\u89e6\u53d1\u5668\u9996\u5c3e\u76f8\u8fde\uff0c\u6700\u524d\u9762\u4e32\u884c\u8f93\u5165(Serial Input, SI)\u6570\u636e\uff0c\u672b\u7aef\u5f97\u5230\u4e32\u884c\u8f93\u51fa(Serial Output, SO)\uff0c\u5728\u4e0d\u540c\u65f6\u949f\u5468\u671f\u7684\u504f\u5dee\u4e0b\uff0c\u8fde\u7eed\u8bfb\u5165\u7684 n bits \u5373\u4e3a\u4e0d\u540c\u4f4d\u6570\u79fb\u4f4d\u7684\u7ed3\u679c\u3002

    \u4e32\u884c\u79fb\u4f4d\u64cd\u4f5c\u5b9e\u73b0\u7684\u6a21\u62df\u89e3\u91ca

    \u5047\u8bbe\u73b0\u5728\u6211\u4eec\u6709 4 \u4e2a FF \u9996\u5c3e\u76f8\u8fde\uff0c\u73b0\u5728\u4e32\u884c\u8f93\u5165 1001 \u8fd9 4bits \u7684\u6570\u636e\uff08\u5f53\u7136\uff0c\u5b8c\u5168\u8f93\u5165\u9700\u8981 4 \u4e2a\u65f6\u949f\u5468\u671f\uff09\u3002

    \u5047\u8bbe\u7b2c 1 \u4e2a\u5468\u671f\u7ed3\u675f\u540e\uff0c1001 \u6700\u53f3\u4fa7\u7684 1 \u88ab\u5b58\u5728\u4e86\u7b2c\u4e00\u4e2a FF\uff0c\u5219\uff1a

    \u5468\u671f \u5f85\u8f93\u5165 FF1 FF2 FF3 FF4 SO 1 100 1 ? ? ? 1??? 2 10 0 1 ? ? 01?? 3 1 0 0 1 ? 001? 4 1 0 0 1 1001 5 ? 1 0 0 ?100 6 ? ? 1 0 ??10 7 ? ? ? 1 ???1

    \u8fd9\u91cc\u7684 SO \u6307\u7684\u662f\u4ece\u5f53\u524d\u8f6e\u6b21\u5f00\u59cb\uff0c\u8bfb\u5165 4bits \u6570\u636e\u5f97\u5230\u7684\u4e32\u884c\u8f93\u51fa\u7ed3\u679c\uff0c\u8fd9\u91cc\u7684 4bits \u5f53\u7136\u662f\u5bf9\u5e94\u8f93\u5165\u7684 4bits\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u7b2c\u56db\u8f6e\u524d\u540e\u7684\u7ed3\u679c\u5206\u522b\u662f\u5de6\u79fb\u548c\u53f3\u79fb\u7684\u7ed3\u679c\uff0c\u5f53\u7136\uff0c\u5982\u679c\u662f\u8981\u8003\u8651\u5177\u6709\u5b9e\u9645\u8ba1\u7b97\u4ef7\u503c\u7684\u79fb\u4f4d\uff0c\u6211\u4eec\u5f53\u7136\u9700\u8981\u586b\u5145 ? \u7684\u503c\uff0c\u4e0d\u8fc7\u8fd9\u90fd\u662f\u5c0f\u4e8b\u60c5\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5e76\u884c\u5316","title":"\u5e76\u884c\u5316","text":"

    \u5e76\u884c\u5316\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff0c\u5373\u5e76\u884c\u8f93\u51fa(parallel output)\u548c\u5e76\u884c\u8f7d\u5165(parallel load)\uff0c\u5206\u522b\u5bf9\u5e94\u7740\u5728\u540c\u4e00\u4e2a\u65f6\u95f4\u5468\u671f\u5185\u5f97\u5230\u6bcf\u4e00\u4e2a FF \u7684\u7ed3\u679c\u548c\u5bf9\u6bcf\u4e00\u4e2a FF \u8f7d\u5165\u6570\u636e\u3002

    \u5e76\u884c\u8f93\u51fa\u7684\u5b9e\u73b0\u975e\u5e38\u7b80\u5355\uff0c\u53ea\u9700\u8981\u7ed9\u6bcf\u4e00\u4e2a FF \u7684\u8f93\u51fa\u5f15\u51fa\u4e00\u6761\u7ebf\u5c31\u884c\u4e86\uff0c\u5b83\u4e0e\u4e32\u884c\u8f93\u51fa\u53ef\u4ee5\u76f4\u63a5\u540c\u65f6\u5b58\u5728\uff1b\u800c\u5e76\u884c\u8f93\u5165\u5219\u4e0e\u4e32\u884c\u8f93\u5165\u51b2\u7a81\uff0c\u4e00\u6b21\u53ea\u80fd\u5b9e\u73b0\u5176\u4e2d\u4e00\u4e2a\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e9b\u63a7\u5236\u7535\u8def\uff1a

    \u770b\u8d77\u6765\u6709\u70b9\u590d\u6742\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u903b\u8f91\u8fd8\u662f\u5f88\u6e05\u6670\u7684\u3002

    \u603b\u548c\u6765\u8bf4\uff0c\u5c31\u662f\uff1a

    \\[ \\begin{aligned} Shift :& Q\\leftarrow \\mathrm{sl}\\; Q \\\\ \\overline{Shift}\\cdot Load :& Q\\leftarrow D \\\\ \\overline{Shift}\\cdot \\overline{Load} :& Q\\leftarrow Q \\end{aligned} \\]

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668","title":"\u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668","text":"

    \u4e0a\u9762\u4ecb\u7ecd\u7684\u79fb\u4f4d\u5bc4\u5b58\u5668\u968f\u7740\u65f6\u949f\u5468\u671f\u7684\u4f9b\u7ed9\uff0c\u53ea\u80fd\u4e0d\u53ef\u9006\u3001\u5355\u5411\u5730\u8fdb\u884c\u79fb\u4f4d\uff0c\u8fd9\u79cd\u79fb\u4f4d\u5bc4\u5b58\u5668\u79f0\u4e3a\u65e0\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668(Unidirectional SHR)\uff1b\u5bf9\u5e94\u7684\uff0c\u5982\u679c\u80fd\u591f\u652f\u6301\u53ef\u63a7\u5236\u7684\u5de6\u79fb\u53f3\u79fb\uff0c\u5219\u88ab\u79f0\u4e3a\u53cc\u5411\u79fb\u4f4d\u5bc4\u5b58\u5668(Bidirectional SHR)\u3002

    \u5176\u884c\u4e3a\u5982\u4e0b\uff1a

    \\[ \\begin{aligned} \\overline{S_0} \\cdot \\overline{S_1} :& Q \\leftarrow Q\\\\ S_0 \\cdot \\overline{S_1} :& Q\\leftarrow\\mathrm{Sl}\\; Q \\\\ \\overline{S_0} \\cdot S_1 :& Q\\leftarrow\\mathrm{Sr}\\; Q \\\\ S_0 \\cdot S_1:& Q\\leftarrow D \\end{aligned} \\]

    \u5176\u5355\u5143\u5b9e\u73b0\u5982\u4e0b\uff1a

    \u5176\u672c\u8d28\u4e0a\u5c31\u662f\u6dfb\u52a0\u4e86\u4e00\u4e2a MUX \u6765\u9009\u62e9\u4e0b\u4e00\u4e2a\u65f6\u949f\u662f\u7ee7\u627f \\((i+1)\\)\u3001\\((i-1)\\)\u3001\\(D_i\\) \u8fd8\u662f \\(Q\\)\u3002

    \u7efc\u5408\u9610\u8ff0

    \u4ee3\u7801\u610f\u4e49\u4e0a\u7684\u79fb\u4f4d\u4e00\u822c\u6307\u7684\u662f\u4e00\u4e2a\u53cc\u76ee\u64cd\u4f5c\uff0c\u5373\u53ef\u4ee5\u6307\u5b9a\u79fb\u4f4d\u591a\u5c11\u4f4d\uff0c\u8fd9\u4e2a\u53c2\u6570\u88ab\u79f0\u4e3a\u79fb\u4f4d\u91cf(Shift Amount)\u3002

    \u4f46\u5728\u786c\u4ef6\u5c42\u9762\u7684\u5b9e\u73b0\u4e0a\uff0c\u8fd9\u4e2a\u591a\u5c11\u201c\u4f4d\u201d\u53ea\u80fd\u901a\u8fc7\u5faa\u73af\u548c\u5df2\u7ecf\u5b9e\u73b0\u7684\u3001\u6709\u9650\u79cd\u786e\u5b9a\u79fb\u4f4d\u91cf\u7684\u79fb\u4f4d\u5b9e\u73b0\u3002\u5728\u6211\u4eec\u63d0\u5230\u7684\u5b9e\u73b0\u4e2d\uff0c\u6307\u7684\u5c31\u662f\u6211\u4eec\u786c\u4ef6\u53ea\u5b9e\u73b0\u300c\u4e00\u4f4d\u79fb\u4f4d\u300d\uff0c\u5e76\u901a\u8fc7\u5faa\u73af\u5b9e\u73b0\u300c\u4efb\u610f\u4f4d\u79fb\u4f4d\u300d\uff0c\u800c\u8fd9\u4e2a\u201c\u5faa\u73af\u201d\uff0c\u5c31\u662f\u5728\u65f6\u949f\u5468\u671f\u4e0b\uff0cFF \u4e0d\u65ad\u7ee7\u627f\u4e0a\u4e00\u4e2a FF \u7684\u503c\u6765\u5b9e\u73b0\u7684\u3002

    \u800c\u5e76\u884c\u4e0e\u4e32\u884c\u5b9e\u73b0\u65e0\u975e\u662f\u4f53\u73b0\u8fd9\u4e2a\u7279\u5f81\u7684\u4e24\u79cd\u5b9e\u73b0\u65b9\u6cd5\u800c\u5df2\u3002

    \u5173\u4e8e\u5e76\u884c\u548c\u4e32\u884c

    \u8fd9\u662f\u4e00\u4e2a\u9898\u5916\u8bdd\uff0c\u6211\u6682\u65f6\u4e0d\u77e5\u9053\u653e\u54ea\u91cc\uff0c\u521a\u597d\u8fd9\u91cc\u63d0\u5230\u4e86\u5c31\u5728\u8fd9\u91cc\u8bf4\u4e86\u3002

    \u5b9e\u9645\u4e0a\uff0c\u867d\u7136\u770b\u8d77\u6765\u5e76\u884c\u7684\u6548\u7387\u4f1a\u6bd4\u4e32\u884c\u9ad8\u5f88\u591a\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5f88\u591a\u9ad8\u901f\u4f20\u8f93\u8bbe\u5907\u6216\u534f\u8bae\u7528\u7684\u90fd\u662f\u4e32\u884c\u3002\u8fd9\u662f\u56e0\u4e3a\uff0c\u5e76\u884c\u5355\u6b21\u4f20\u8f93\u7ebf\u8def\u591a\uff0c\u7ebf\u8def\u4e4b\u95f4\u7684\u8ddd\u79bb\u5c0f\uff0c\u5e72\u6270\u5927\uff0c\u6240\u4ee5\u76f8\u5bf9\u6765\u8bf4\u6b63\u5e38\u5de5\u4f5c\u6240\u4e0b\u5bf9\u9891\u7387\u7684\u8981\u6c42\u66f4\u9ad8\uff1b\u800c\u4e32\u884c\u7531\u4e8e\u53ef\u4ee5\u4f7f\u7528\u66f4\u9ad8\u7684\u9891\u7387\u5de5\u4f5c\uff0c\u6240\u4ee5\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u6548\u7387\u66f4\u9ad8\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u8ba1\u6570\u5668","title":"\u8ba1\u6570\u5668","text":"

    \u8ba1\u6570\u5668(counter) \u662f\u4ec0\u4e48\uff0c\u5df2\u7ecf\u5728 #\u5bc4\u5b58\u5668 \u4e2d\u89e3\u91ca\u4e86\uff0c\u6839\u636e\u5b9e\u73b0\u539f\u7406\uff0c\u4e3b\u8981\u5206\u4e3a \u884c\u6ce2\u8ba1\u6570\u5668(Ripple Counter) \u548c \u540c\u6b65\u8ba1\u6570\u5668(Synchronous Counter) \u4e24\u79cd\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u884c\u6ce2\u8ba1\u6570\u5668","title":"\u884c\u6ce2\u8ba1\u6570\u5668","text":"

    \u884c\u6ce2\u8ba1\u6570\u5668\u7684\u4e3b\u8981\u601d\u60f3\u5c31\u662f\u5c06\u4e00\u4e2a\u4e0d\u65ad\u81ea\u53cd\u7684 FF \u7684\u8f93\u51fa\u76f4\u63a5\u6216\u95f4\u63a5\u4f5c\u4e3a\u4e0b\u4e00\u4e2a FF \u7684\u65f6\u949f\u8109\u51b2\u3002\u7531\u4e8e\u5f62\u6210\u4e00\u6b21\u8109\u51b2\u9700\u8981\u4e00\u5bf9 0&1\uff0c\u6240\u4ee5\u524d\u4e00\u4e2a FF \u53d6\u53cd\u4e24\u6b21\u624d\u80fd\u5f15\u8d77\u4e0b\u4e00\u4e2a FF \u53d6\u53cd\u4e00\u6b21\uff0c\u5982\u679c\u4e0b\u4e00\u4e2a FF \u662f\u5728\u4e0a\u4e00\u4e2a FF \u7684\u8f93\u51fa\u4ece 1 \u53d8 0 \u65f6\u89e6\u53d1\uff0c\u90a3\u4e24\u4e2a FF \u7684\u53d8\u5316\u521a\u597d\u5bf9\u5e94\u4e8e\u4e8c\u8fdb\u5236\u81ea\u589e\u7684\u8fdb\u4f4d\u89c4\u5f8b\uff1a(0,0)\uff0c(0,1)\uff0c(1,0)\uff0c(1,1)\uff0c(0,0)\uff0c...

    \u4e8e\u662f\uff0c\u4e00\u4e2a 4-Bit \u884c\u6ce2\u8ba1\u6570\u5668\u7684\u903b\u8f91\u56fe\u5c31\u5982\u4e0b\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u4f18\u70b9\u662f\u7535\u8def\u7b80\u5355\uff0c\u6210\u672c\u4f4e\uff1b\u4f46\u662f\u7f3a\u70b9\u4e5f\u5f88\u660e\u663e\uff0c\u65e2\u7136\u5b83\u4e0e\u540c\u6b65\u8ba1\u6570\u5668\u76f8\u533a\u5206\uff0c\u5c31\u8bf4\u660e\u5b83\u4e0d\u662f\u540c\u6b65\u7535\u8def\uff0c\u6bcf\u4e00\u4e2a FF \u90fd\u4f1a\u6709\u4f20\u64ad\u5ef6\u65f6\uff0c\u968f\u7740\u8ba1\u6570\u8303\u56f4\u589e\u5927\uff0c\u603b\u4f20\u64ad\u5ef6\u65f6\u4e5f\u4f1a\u589e\u52a0\uff0c\u800c\u4e3a\u4e86\u8ba9\u7535\u8def\u6b63\u5e38\u5de5\u4f5c\uff0c\u65f6\u949f\u9891\u7387\u4e5f\u8981\u56e0\u6b64\u4e0b\u964d\u3002

    \u7531\u4e8e\u8fd9\u4e9b\uff0c\u4e66\u4e0a\u5bf9\u884c\u6ce2\u8ba1\u6570\u5668\u7684\u8bc4\u4ef7\u662f\u591a\u6570\u60c5\u51b5\u4e0b\u884c\u6ce2\u52a0\u6cd5\u5668\u53ea\u4f1a\u5728\u4f4e\u529f\u8017\u7535\u8def\u4e2d\u88ab\u91c7\u7528\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u540c\u6b65\u8ba1\u6570\u5668","title":"\u540c\u6b65\u8ba1\u6570\u5668","text":"

    \u540c\u6b65\u8ba1\u6570\u5668\u4ece\u5b9e\u73b0\u81ea\u589e\u7684\u539f\u7406\u4e0a\u6765\u8bf4\uff0c\u548c\u884c\u6ce2\u8ba1\u6570\u5668\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u540c\u6837\u662f\u5728\u4e0a\u4e00\u4e2a FF \u5b8c\u6210\u4e00\u6b21\u7ffb\u8f6c\u7684\u65f6\u5019\u8ba9\u4e0b\u4e00\u4e2a FF \u53d8\u5316\u3002\u53ea\u4e0d\u8fc7\u540c\u6b65\u8ba1\u6570\u5668\u4e0d\u662f\u63a7\u5236\u65f6\u949f\uff0c\u800c\u662f\u63a7\u5236\u300cFF \u5185\u7684\u503c\u662f\u5426\u53d6\u53cd\u300d\u6765\u5b9e\u73b0\uff0c\u800c\u5b83\u662f\u901a\u8fc7\u5f02\u6216\u95e8\u6765\u5b9e\u73b0\u7684\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\\(0 \\;\\mathrm{XOR}\\; X = X\\)\uff0c\u800c \\(1 \\;\\mathrm{XOR}\\; X = \\overline{X}\\)\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u63a7\u5236 XOR \u7684\u67d0\u4e2a\u8f93\u5165\u662f 0 \u8fd8\u662f 1 \u6765\u5b9e\u73b0\u53d6\u53cd\u8fd8\u662f\u4fdd\u6301\u7684\u5207\u6362\u3002

    \u4e0d\u8fc7\u9700\u8981\u533a\u5206\u7684\u662f\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5728\u4e0a\u4e00\u4e2a FF \u53d8\u5316\u5b8c\u624d\u5f71\u54cd\u4e0b\u4e00\u4e2a\u7684\uff0c\u6240\u4ee5\u662f 1 \u53d8 0 \u65f6\u9700\u8981\u8fdb\u4f4d\uff1b\u800c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u6240\u6709 FF \u662f\u4e00\u8d77\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u53ea\u6709\u5728\u524d\u9762\u90fd\u662f 1 \u65f6\u5019\uff0c\u8868\u793a\u4e0b\u4e00\u523b\u5b83\u4eec\u90fd\u8981\u8fdb\u4f4d\u4e86\uff0c\u5f53\u524d FF \u624d\u8fdb\u4f4d\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u884c\u6ce2\u8ba1\u6570\u5668\u662f\u5efa\u7acb\u5728\u524d\u4e00\u4e2a FF \u7684\u7ed3\u679c\u8fdb\u884c\u53d8\u5316\uff1b\u800c\u5e76\u884c\u52a0\u6cd5\u5668\u662f\u5efa\u7acb\u5728\u4e0a\u4e00\u523b\u6240\u6709\u5173\u8054 FF \u7684\u72b6\u6001\uff0c\u5bf9\u4e0b\u4e00\u72b6\u6001\u7684\u9884\u5224\u3002

    \u5728\u8fd9\u57fa\u7840\u4e0a\uff0c\u540c\u6b65\u8ba1\u6570\u5668\u7684\u81ea\u589e\u5668(incrementer)\u6709\u4e24\u79cd\u4e0d\u540c\u7684\u5b9e\u73b0\u65b9\u6cd5\uff1a

    (b) \u7684\u84dd\u8272\u90e8\u5206\u66ff\u6362 (a) \u7684\u84dd\u6846\u90e8\u5206\u4e3a\u7b2c\u4e8c\u79cd\u3002\u4e24\u79cd\u5206\u522b\u4e3a \u95e8\u4e32\u884c\u5b9e\u73b0 \u548c \u95e8\u5e76\u884c\u5b9e\u73b0\u3002

    \u4e24\u79cd\u5b9e\u73b0\u5176\u5b9e\u539f\u7406\u90fd\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u95e8\u4e32\u884c\u727a\u7272\u67d0\u4e9b\u60c5\u51b5\u4e0b\u7684\u8fd0\u884c\u6548\u7387\uff0c\u8282\u7ea6\u4e86\u95e8\u6210\u672c\uff1b\u800c\u95e8\u5e76\u884c\u63d0\u9ad8\u4e86\u95e8\u6210\u672c\uff0c\u51cf\u5c11\u4e86\u67d0\u4e9b\u60c5\u51b5\u4e0b\u7684\u95e8\u5ef6\u8fdf\u3002

    \u5f53\u7136\uff0c\u65e2\u7136\u4f7f\u7528\u7684\u662f\u81ea\u589e\u5668\uff0c\u90a3\u4e48\u5b9e\u73b0\u7684\u81ea\u7136\u5c31\u662f\u6b63\u5411\u8ba1\u6570\u5668\u3002\u4e3a\u4e86\u5b9e\u73b0\u9006\u5411\u8ba1\u6570\u5668\uff0c\u6211\u4eec\u5219\u9700\u8981\u5c06\u81ea\u589e\u5668\u6362\u4e3a\u81ea\u51cf\u5668\u3002\u505a\u6cd5\u53ea\u4e0d\u8fc7\u662f\u5c06\u5f02\u6216\u95e8\u7684\u63a7\u5236\u4fe1\u53f7\u53d6\u53cd\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u517c\u5177\u81ea\u589e\u81ea\u51cf\u529f\u80fd\u7684\u8f93\u5165\u51fd\u6570\u5982\u4e0b\uff1a

    \\[ \\begin{aligned} D_{A0} = & Q_0 \\oplus EN \\\\ D_{A1} = & Q_1 \\oplus \\left( (Q_0 \\cdot \\overline{S} + \\overline{Q_0} \\cdot S) \\cdot EN \\right) \\\\ D_{A2} = & Q_2 \\oplus \\left( (Q_0 \\cdot Q_1 \\cdot \\overline{S} + \\overline{Q_0} \\cdot \\overline{Q_1} \\cdot S) \\cdot EN \\right) \\\\ D_{A3} = & Q_3 \\oplus \\left( (Q_0 \\cdot Q_1 \\cdot Q_2 \\cdot \\overline{S} + \\overline{Q_0} \\cdot \\overline{Q_1} \\cdot \\overline{Q_2} \\cdot S) \\cdot EN \\right) \\end{aligned} \\]

    \u4ece\u8fd9\u4e2a\u8868\u8fbe\u5f0f\u4e5f\u53ef\u4ee5\u7565\u5fae\u611f\u53d7\u5230\u95e8\u4e32\u884c\u548c\u95e8\u5e76\u884c\u7684\u533a\u522b\u7a76\u7adf\u5728\u54ea\u91cc\uff0c\u5b83\u4eec\u4f7f\u7528\u540c\u4e00\u4e2a\u8868\u8fbe\u5f0f\uff0c\u53ea\u4e0d\u8fc7\u7528\u4e0d\u540c\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u591a\u4f4d AND \u8fd0\u7b97\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u540c\u6b65\u8f7d\u5165","title":"\u540c\u6b65\u8f7d\u5165","text":"

    \u8fd9\u91cc\u540c\u6b65\u8f7d\u5165\u7684\u542b\u4e49\u53ef\u4ee5\u540c \u79fb\u4f4d\u5bc4\u5b58\u5668\u7684\u5e76\u884c\u8f7d\u5165 \u7c7b\u6bd4\uff0c\u5176\u4e3b\u8981\u76ee\u7684\u662f\u5c06\u8ba1\u6570\u5668\u7684\u5f53\u524d\u503c\u8bbe\u4e3a\u4e00\u4e2a\u6211\u4eec\u9700\u8981\u7684\u6570\u5b57\u3002

    \u4ee5\u95e8\u4e32\u884c\u5b9e\u73b0\u4e3a\u4f8b\uff0c\u6dfb\u52a0\u529f\u80fd\u63a7\u5236\u903b\u8f91\u540e\u7684\u8bbe\u8ba1\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u4efb\u610f\u8ba1\u6570\u5e8f\u5217","title":"\u4efb\u610f\u8ba1\u6570\u5e8f\u5217","text":"

    \u73b0\u5728\u8ba9\u6211\u4eec\u56de\u5f52\u8ba1\u6570\u5668\u7684\u884c\u4e3a\uff1a\u968f\u7740\u65f6\u949f\u5468\u671f\u4e0d\u65ad\u5728\u56fa\u5b9a\u7684\u72b6\u6001\u5e8f\u5217\u4e2d\u5faa\u73af\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u4e2a\u5e8f\u5217\u672a\u5fc5\u9700\u8981\u662f\u6574\u6570\u81ea\u589e\u81ea\u51cf\u5e8f\u5217\u3002\u800c\u5b9e\u73b0\u67d0\u4e00\u5e8f\u5217\u7684\u8ba1\u6570\u884c\u4e3a\uff0c\u5b9e\u9645\u4e0a\u53ea\u8981\u8bbe\u8ba1\u597d\u6709\u9650\u72b6\u6001\u548c\u72b6\u6001\u4e4b\u95f4\u7684\u8f6c\u79fb\u5373\u53ef\u3002

    \u5f53\u7136\uff0c\u8fd9\u4e2a\u8bdd\u9898\u592a\u8fc7\u5bbd\u6cdb\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u5177\u4f53\u8ba8\u8bba\u7684\u8fd8\u662f\u6574\u6570\u81ea\u589e\u5e8f\u5217\uff0c\u53ea\u4e0d\u8fc7\u9650\u5236\u4e86\u4e0a\u4e0b\u754c\u3002\u4e66\u4e0a\u63d0\u4f9b\u7684\u6848\u4f8b\u662f BCD \u7801\u7684\u5faa\u73af\u8ba1\u6570\uff0c\u90a3\u6211\u4eec\u4e5f\u8ddf\u7740\u8fd9\u4e2a\u6848\u4f8b\u6765\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#bcd-\u7801\u5faa\u73af\u8ba1\u6570","title":"BCD \u7801\u5faa\u73af\u8ba1\u6570","text":"

    \u9996\u5148\u6211\u4eec\u9700\u8981\u6839\u636e\u65f6\u5e8f\u7535\u8def\u7684\u8bbe\u8ba1\u89c4\u5219\uff0c\u641e\u6e05\u695a\u72b6\u6001\u5e8f\u5217\uff0c\u663e\u7136\uff0c\u6839\u636e BCD \u7801\u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u53ef\u4ee5\u6bdb\u6bdb\u5730\u8ba4\u4e3a\u5b83\u662f\u4e0b\u786e\u754c\u4e3a 0\uff0c\u4e0a\u786e\u754c\u4e3a 9 \u7684 4 \u6bd4\u7279\u6574\u6570\u5e8f\u5217\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u8ba1\u6570\u5230 9 \u540e\u4e0b\u4e00\u4e2a\u72b6\u6001\u662f 0 \u7684 4 \u6bd4\u7279\u8ba1\u6570\u5668\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u5f53\u8ba1\u6570\u5668\u7684\u8f93\u51fa\u4e3a 9 \u65f6\uff0c\u4e0b\u4e00\u5468\u671f\u8ba9\u8ba1\u6570\u5668\u8f7d\u5165 0\uff1a

    \u6309\u7406\u6765\u8bf4\u8fd9\u91cc\u5e94\u8be5\u662f \\(Load = Q_0\\cdot\\overline{Q_1}\\cdot\\overline{Q_2}\\cdot Q_3\\)\uff0c\u4ee5\u5bf9\u5e94 9D=1001B\uff0c\u4f46\u662f\u7531\u4e8e\u81ea\u589e\u8fc7\u7a0b\u4e2d\uff0c1001 \u662f\u7b2c\u4e00\u4e2a\u6ee1\u8db3 1??1 \u7684\u7ec4\u5408\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u7b80\u5316\u4e3a \\(Load = Q_0\\cdot Q_3\\)\u3002

    \u5982\u4e0a\u662f\u4fee\u6539\u4e0a\u786e\u754c\u7684\u65b9\u6cd5\uff0c\u800c\u4fee\u6539\u4e0b\u786e\u754c\u7684\u65b9\u6cd5\u5219\u662f\u4fee\u6539 \\(D_i\\) \u5e8f\u5217\uff0c\u4f8b\u5982\u4e0a\u56fe\u4e2d \\(D\\) \u63a5\u5730\uff0c\u6240\u4ee5\u4e0b\u786e\u754c\u662f 0000B\u3002

    Mod N \u8ba1\u6570\u5668

    \u5b9e\u9645\u4e0a\uff0c\u6211\u4eec\u53ef\u4ee5\u628a BCD \u7801\u5faa\u73af\u8ba1\u6570\u5668\u770b\u4f5c\u662f\u7279\u6b8a\u7684 Mod N \u8ba1\u6570\u5668\uff0c\u5373 N = 10 \u7684 Mod N \u8ba1\u6570\u5668\u3002

    \u6216\u8bb8\u4f60\u4f1a\u60f3\uff0c\u5b9e\u73b0 Mod N \u8ba1\u6570\u5668\u80fd\u4e0d\u80fd\u5728\u6ee1\u8db3\u8f93\u51fa\u6761\u4ef6\u540e\u76f4\u63a5\u4f7f\u7528 Clear \u8f93\u5165\u3002\u4f46\u662f\u8bf7\u4e0d\u8981\u5fd8\u8bb0\u4e86\uff0cClear \u4e5f\u597d\uff0cSet \u4e5f\u7f62\uff0c\u5b83\u4eec\u90fd\u662f\u5f02\u6b65\u64cd\u4f5c\u3002\u6211\u4eec\u6ca1\u6709\u5fc5\u8981\u4e5f\u4e0d\u5e94\u8be5\u4f7f\u7528\u5f02\u6b65\u64cd\u4f5c\uff0c\u6240\u4ee5\u6700\u597d\u7684\u505a\u6cd5\u8fd8\u662f\u4f7f\u7528 Load\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u63a7\u5236","title":"\u5bc4\u5b58\u5668\u4f20\u8f93\u7684\u63a7\u5236","text":"

    \u5bc4\u5b58\u5668\u4f20\u8f93\u7cfb\u7edf(Register Transfer System)\u8bbe\u8ba1\u6d41\u7a0b\uff1a

    1. \u786e\u5b9a\u7cfb\u7edf\u7684\u884c\u4e3a(specification)\uff1b
    2. \u5b9a\u4e49\u5916\u90e8\u7684\u8f93\u5165\u3001\u8f93\u51fa\uff0c\u4ee5\u53ca\u63a7\u5236\u5355\u5143(control unit)\u548c\u6570\u636e\u901a\u8def(datapath)\u9700\u8981\u7684\u5bc4\u5b58\u5668\uff1b
    3. \u8bbe\u8ba1\u72b6\u6001\u673a\uff1b
    4. \u5b9a\u4e49\u5185\u90e8\u7684\u63a7\u5236\u4fe1\u53f7\u3001\u72b6\u6001\u4fe1\u53f7\uff1b
      • \u7528\u8fd9\u4e9b\u4fe1\u53f7\u6765\u5206\u914d\u8f93\u51fa\u6761\u4ef6(output condition)\u3001\u8f93\u51fa\u884c\u4e3a(output actions)\u7b49\uff0c\u5305\u62ec\u5bc4\u5b58\u5668\u4f20\u8f93(register transfer)\uff08\u4e2a\u4eba\u7406\u89e3\u662f\u8bbe\u8ba1\u5185\u90e8\u4fe1\u53f7\u6765\u8fdb\u4e00\u6b65\u8bbe\u8ba1\u72b6\u6001\u673a\uff0c\u5305\u62ec\u8bbe\u8ba1 TC\u3001OC\u3001OA \u7b49\uff09\uff1b
    5. \u7ed8\u5236\u6846\u56fe(block diagram)\uff1b
    6. \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u548c\u6570\u636e\u901a\u8def\u7684\u5bc4\u5b58\u5668\u4f20\u8f93\u903b\u8f91(register transfer logic)\uff1b
    7. \u8bbe\u8ba1\u63a7\u5236\u5355\u5143\u903b\u8f91(control unit logic)\uff1b
    8. \u9a8c\u8bc1\u6b63\u786e\u6027\uff1b

    \u6211\u4eec\u5728 \u7b2c\u4e09\u7ae0 \u4ecb\u7ecd\u4e86\u7ec4\u5408\u903b\u8f91\u8bbe\u8ba1\u7684\u57fa\u672c\u6d41\u7a0b\uff0c\u800c\u8fd9\u91cc\u7684\u5bc4\u5b58\u5668\u4f20\u8f93\u7cfb\u7edf\uff0c\u5b9e\u9645\u4e0a\u662f\uff08\u57fa\u4e8e\u5bc4\u5b58\u5668\u7684\u540c\u6b65\uff09\u65f6\u5e8f\u903b\u8f91\u8bbe\u8ba1\u7684\u57fa\u672c\u6d41\u7a0b\u3002\u8fd9\u4e2a\u6d41\u7a0b\u770b\u8d77\u6765\u6bd4\u8f83\u62bd\u8c61\uff0c\u4f46\u603b\u4f53\u601d\u8def\u548c\u7ec4\u5408\u903b\u8f91\u8bbe\u8ba1\u5176\u5b9e\u662f\u4e00\u81f4\u7684\u3002\u91cd\u8981\u7684\u662f\u7ed3\u5408\u5177\u4f53\u4f8b\u5b50\u53bb\u5b9e\u8df5\u8fd9\u4e2a\u8bbe\u8ba1\u6d41\u7a0b\uff0c\u5efa\u8bae\u9605\u8bfb\u6559\u6750\u4e2d\u76f8\u5e94\u4f4d\u7f6e\u7684 DashWatch \u548c Handheld Game: PIG \u8fd9\u4e24\u4e2a\u4f8b\u5b50\u3002

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap06/#\u5fae\u7a0b\u5e8f\u63a7\u5236","title":"\u5fae\u7a0b\u5e8f\u63a7\u5236","text":"

    \u5fae\u7a0b\u5e8f\u63a7\u5236(Microprogrammed Control)\u662f\u4e00\u79cd\u63a7\u5236\u624b\u6bb5\uff0c\u5176\u4e3b\u8981\u601d\u8def\u662f\u628a\u6307\u4ee4\u5b58\u50a8\u8d77\u6765\uff0c\u5e76\u5728\u9700\u8981\u8c03\u7528\u6307\u4ee4\u65f6\u4ece\u76f8\u5e94\u5730\u5740\u8bfb\u53d6\u3002\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\u7684 CPU \u901a\u5e38\u91c7\u7528\u7684\u5c31\u662f\u5fae\u7a0b\u5e8f\u63a7\u5236\u3002

    A control unit with its binary control values stored as a group of bits, which are referred as words, in memory is called a microprogrammed control.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/","title":"Chap 7 Memory Basics","text":"

    \u7ea6 737 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 4 \u5206\u949f

    \u6846\u67b6

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-1-memory","title":"7-1 Memory","text":"

    Two types of memories are used in various parts of a computer: random-access memory (RAM) and read-only memory (ROM). RAM accepts new information for storage to be available later for use. The process of storing new information in memory is referred to as a memory write operation. The process of transferring the stored information out of memory is referred to as a memory read operation. RAM can perform both the write and the read operations, whereas ROM, as introduced in Section 6-8, performs only read operations. RAM sizes may range from hundreds to billions of bits.

    Memory is a collection of binary storage cells together with associated circuits needed to transfer information into and out of the cells.

    "},{"location":"cour_note/D2QD_DigitalDesign/Chap07/#7-2-ram","title":"7-2 RAM","text":"

    Memory cells can be accessed to transfer information to or from any desired location, with the access taking the same time regardless of the location, hence the name random-access memory. In contrast,serial memory, such as is exhibited by a hard drive, takes different lengths of time to access information, depending on where the desired location is relative to the current physical position of the disk.

    word:

    A word is an entity of bits that moves in and out of memory as a unit\u2014a group of 1s and 0s that represents a number, an instruction, one or more alphanumeric characters, or other binary-coded information.

    A group of eight bits is called a byte.

    Most computer memories use words that are multiples of eight bits in length. Thus, a 16-bit word contains two bytes, and a 32-bit word is made up of four bytes. The capacity of a memory unit is usually stated as the total number of bytes that it can store.

    Communication between a memory and its environment is achieved through data input and output lines, address selection lines, and control lines that specify the direction of transfer of information.

    Computer memory varies greatly in size. It is customary to refer to the number of words (or bytes) in memory with one of the letters K (kilo), M (mega), or G (giga). K is equal to 2^10, M to 2^20, and G to 2^30.

    A word in memory is selected by its binary address. When a word is read or written, the memory operates on all 16 bits as a single unit.

    The 1K * 16 memory of the figure has 10 bits in the address and 16 bits in each word. The number of address bits needed in memory is dependent on the total number of words that can be stored and is independent of the number of bits in each word. The number of bits in the address for a word is determined from the relationship 2^k >= m, where m is the total number of words and k is the minimum number of address bits satisfying the relationship.

    The two operations that a random-access memory can perform are write and read. A write is a transfer into memory of a new word to be stored. A read is a transfer of a copy of a stored word out of memory.

    The steps that must be taken for a write are as follows:

    1. Apply the binary address of the desired word to the address lines.
    2. Apply the data bits that must be stored in memory to the data input lines.
    3. Activate the Write input.

    The memory unit will then take the bits from the data input lines and store them in the word specified by the address lines.The steps that must be taken for a read are as follows:

    1. Apply the binary address of the desired word to the address lines.
    2. Activate the Read input.

    The memory will then take the bits from the word that has been selected by the address and apply them to the data output lines. The contents of the selected word are not changed by reading them.

    ...

    To avoid destroying data in other memory words, it is important that this change occur after the signals on the address lines have become fixed at the desired values.

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/","title":"\u8bcd\u6c47\u8868","text":"

    \u7ea6 1051 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 5 \u5206\u949f

    \ud83d\ude4f

    \u8bcd\u6c47\u8868\u662f cm \u8001\u5e08\u6574\u7406\u7684\uff0c\u8ba9\u6211\u4eec\u8bf4 \u8c22\u8c22 cm \uff01

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#1---ch11-7","title":"1) Ch1.1-7","text":"

    odometer\uff1a\u91cc\u7a0b\u8868\uff0c\u8ba1\u7a0b\u5668

    signal conditioning: \u4fe1\u53f7\u8c03\u7406\u3001\u4fe1\u53f7\u5904\u7406

    capacitor\uff1a\u7535\u5bb9\u5668\uff0ce.g., capacitor charge\uff0c\u7535\u5bb9\u5668\u5145\u7535

    radix\uff1a\u57fa\u6570(= base)

    radix point\uff1a\u5c0f\u6570\u70b9

    number = integer portion(\u6574\u6570\u90e8\u5206) + fraction portion(\u5c0f\u6570\u90e8\u5206)

    power series\uff1a\u5e42\u7ea7\u6570

    binary\uff1a\u4e8c\u8fdb\u5236\uff0coctal\uff1a\u516b\u8fdb\u5236\uff0cdecimal\uff1a\u5341\u8fdb\u5236\uff1bhexadecimal\uff1a\u5341\u516d\u8fdb\u5236

    augend\uff1a\u88ab\u52a0\u6570

    addend\uff1a\u52a0\u6570

    minuend: \u88ab\u51cf\u6570

    subtrahend\uff1a\u51cf\u6570

    padding\uff1a\u586b\u5145

    weighted code\uff1a\u6709\u6743\u7801

    arithmetic\uff1a\u7b97\u672f\u3001\u56db\u5219\u8fd0\u7b97

    significant digit\uff1a\u6709\u6548\u4f4d

    punched paper\uff1a\u6253\u5b54\u7eb8\u5e26

    parity\uff1a\u5947\u5076\u6821\u9a8c

    even\uff1a\u5076\u6570

    odd\uff1a\u5947\u6570

    source coding\uff1a\u4fe1\u6e90\u7f16\u7801

    channel coding\uff1a\u4fe1\u9053\u7f16\u7801

    optical Shaft Encoder\uff1a\u5149\u8f74\u7f16\u7801\u5668

    positional number system\uff1a\u6309\u4f4d\u8bb0\u6570\u5236

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#2---ch21-3","title":"2) Ch2.1-3","text":"

    notation: \u6807\u8bb0\u6cd5

    operator\uff1a\u8fd0\u7b97\u7b26\u3001\u7b97\u5b50\uff0ce.g., logical operator \u903b\u8f91\u8fd0\u7b97\u7b26

    operand\uff1a\u64cd\u4f5c\u6570

    identifier\uff1a\u6807\u8bc6\u7b26=designator\uff0ce.g., variable identifier\uff1a\u53d8\u91cf\u6807\u8bc6\u7b26

    overbar: ( \u00af )\u4e0a\u6a2a\u7ebf

    single quote mark (')\uff1a\u5355\u5f15\u53f7

    normally-closed switch\uff1a\u5e38\u95ed\u5f00\u5173,e.g. Normally-Open(NO), Normally-Closed(NC)

    magnetic field\uff1a\u78c1\u573a

    energizing coil\uff1a\u6fc0\u52b1\u7ebf\u5708

    relay\uff1a\u7ee7\u7535\u5668

    transistor: \u6676\u4f53\u7ba1\u3001\u4e09\u6781\u7ba1

    precedence\uff1a\u4f18\u5148\u6743\uff0ce.g., Boolean Operator Precedence

    parenthesis\uff1a\u62ec\u53f7\uff08\u5355\u6570\u5f62\u5f0fparenthesis\uff09

    leave out\uff1a\u9057\u6f0f, e.g., If the meaning is unambiguous, we leave out the symbol \u201c\u00b7\u201d.

    idempotence: \u5e42\u7b49\u6027

    involution: \u4e58\u65b9

    dual\uff1a\u5bf9\u5076= duality\uff0ce.g., The dual of an algebraic expression is obtained by interchanging + and \u00b7 and interchanging 0\u2019s and 1\u2019s.

    dual function\uff1a\u5bf9\u5076\u51fd\u6570

    complement function: \u8865\u51fd\u6570

    canonical form\uff1a\u89c4\u8303\u5f62\u5f0f

    standard form\uff1a\u6807\u51c6\u5f62\u5f0f

    designator\uff1a\u6807\u8bc6\u7b26= identifier\uff0ce.g., We drop the \u201cm\u201d designators\uff1a\u6211\u4eec\u5220\u9664\u4e86m\u53d8\u91cf\u6807\u8bc6\u7b26

    identity: \u540c\u4e00\u6027\uff1b\u4e00\u81f4\uff1b\u76f8\u7b49\uff1be.g., Prove the identity of each of the following Boolean equations, using algebraic manipulation.

    indices\uff1aindex\u7684\u590d\u6570(=indexes) \u4e00\u822c\u5728\u6570\u5b66\uff0c\u91d1\u878d\u548c\u76f8\u5173\u9886\u57df\u4f7f\u7528

    subscript\uff1a\u4e0b\u6807

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#3---ch24-7","title":"3) Ch2.4-7","text":"

    Venn diagram\uff1a\u7ef4\u6069\u56fe

    Implicant\uff1a\u8574\u6db5\u9879\uff1b\u8574\u542b\u9879\uff1b\u9690\u542b\u6570

    Prime implicant: \u4e3b\u8574\u542b\u9879

    essential prime implicant\uff1a\u57fa\u672c\u7d20\u8574\u6db5; \u5b9e\u8d28\u672c\u539f\u8574\u6db5

    Don't cares: \u65e0\u5173\u6700\u5c0f\u9879

    degenerate: \u9000\u5316, e.g., A NAND gate with one input degenerates to an inverter.

    Hi-Impedance Outputs: \u9ad8\u963b\u6001\u8f93\u51fa

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#4---ch3-1-2","title":"4) ch3. 1-2","text":"

    rudimentary:\u57fa\u7840\u7684\uff1b\u57fa\u672c\u7684\uff1b\u672a\u5145\u5206\u53d1\u5c55\u7684\uff1b\u539f\u59cb\u7684

    die: \u88f8\u7247\u3001\u82af\u7247

    wafer\uff1a\u6676\u5706

    margin: \u8fb9\u7f18\u3001\u5dee\u989d\uff0ce.g., noise margin\uff0c\u566a\u58f0\u5bb9\u9650

    superimpose: v.\u4f7f\uff08\u7532\uff09\u53e0\u6620\u5728\uff08\u4e59\uff09\u4e0a\uff1b\u4f7f\u91cd\u53e0, e.g., Noise margin refers to the maximum external noise voltage superimposed on a normal input value that will not cause an undesirable change in the circuit output

    dissipation: n.\u6d88\u8017\uff1b\u653e\u8361\uff1b\u6d6a\u8d39\uff1be.g., power dissipation = power consumption

    propagation delay\uff1a\u4f20\u64ad\u5ef6\u8fdf

    transition time\uff1a\u8f6c\u6362\u65f6\u95f4

    transport delay\uff1a\u4f20\u8f93\u5ef6\u8fdf

    inertial delay\uff1a\u60ef\u6027\u5ef6\u8fdf

    full custom: \u5b8c\u5168\u5b9a\u5236

    fabrication: \u5236\u9020\u3001\u5236\u4f5c

    cell library\uff1a\u5143\u4ef6\u5e93

    schematic\uff1a\u539f\u7406\u56fe\uff0c\u7b80\u56fe

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#5---ch3-3-9","title":"5) ch3. 3-9","text":"

    decoder\uff1a\u8bd1\u7801\u5668

    encoder\uff1a\u7f16\u7801\u5668

    multiplexer\uff1a\u591a\u8def\u590d\u7528\u5668\uff0cMultiplexer means many into one.

    demultiplexer\uff1a\u4fe1\u53f7\u5206\u79bb\u5668\u3001\u591a\u8def\u5206\u914d\u5668\uff0cThe demultiplexer means one into many.

    anode: \u9633\u6781\uff0c\u6b63\u6781

    cathode: \u9634\u6781\uff0c\u8d1f\u6781

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#6---ch3-8-10","title":"6) Ch3. 8-10","text":"

    Iterative array\uff1a\u8fed\u4ee3\u9635\u5217

    Ripple Carry Adder\uff1a\u884c\u6ce2\u8fdb\u4f4d\u52a0\u6cd5\u5668

    Carry Look-ahead Adder: \u8d85\u524d\u8fdb\u4f4d\u52a0\u6cd5\u5668

    bit-wise: \u4ee5\u4f4d\u4e3a\u64cd\u4f5c\u5bf9\u8c61\u7684(wise\u662f\u65b9\u5f0f\u4e4b\u610f),\u5982bit-wise operators(\u4f4d\u8fd0\u7b97\u7b26), 2-input bit-wise addition functional block

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#7---ch311-12","title":"7) Ch3.11-12","text":"

    1's Complement\uff1a\u53cd\u7801

    2's Complement\uff1a\u8865\u7801

    magnitude\uff1a\u6570\u503c

    Signed-Magnitude\uff1a\u7b26\u53f7\u2014\u6570\u503c\u8868\u793a\u6cd5

    Signed-Complement\uff1a\u7b26\u53f7\u2014\u8865\u7801\u8868\u793a\u6cd5

    contraction\uff1a(n.) \u6536\u7f29\u3001\u7d27\u7f29\uff1bcontract\uff1a(v.) \u6536\u7f29

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#8---ch5-2","title":"8) Ch5. 2","text":"

    fuse intact\uff1a\u7194\u4e1d\u4fdd\u7559

    fuse blown\uff1a\u7194\u4e1d\u7194\u65ad

    volatile\uff1a\u6613\u5931\u6027\u7684

    non-volatile\uff1a\u975e\u6613\u5931\u6027\u7684

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#9---ch4-1-4","title":"9) Ch4. 1-4","text":"

    tractable: (adj.) \u6613\u5904\u7406\u7684\uff1b\u6613\u9a7e\u9a6d\u7684

    oscillator: (n.) \u632f\u8361\u5668

    capacitors: (n.) \u7535\u5bb9\u5668

    inductor: (n.) \u7535\u611f\u5668

    latch\uff1a\u9501\u5b58\u5668

    flip-flop\uff1a\u89e6\u53d1\u5668

    metastable state\uff1a\u4e9a\u7a33\u6001

    alternating clock\uff1a\u4ea4\u66ff\u65f6\u949f

    disposable sampling = 1s catching\uff1a\u4e00\u6b21\u91c7\u6837

    setup time\uff1a\u5efa\u7acb\u65f6\u95f4

    hold time\uff1a\u4fdd\u6301\u65f6\u95f4

    pulse-triggering\uff1a\u8109\u51b2\u89e6\u53d1

    level triggering\uff1a\u7535\u5e73\u89e6\u53d1

    edge triggering\uff1a\u8fb9\u6cbf\u89e6\u53d1

    self-recovery capability\uff1a\u81ea\u6062\u590d\u80fd\u529b

    equivalent state\uff1a\u7b49\u4ef7\u72b6\u6001

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#10--ch6-1-5","title":"10) Ch6. 1-5","text":"

    register\uff1a\u5bc4\u5b58\u5668

    register transfer operation\uff1a\u5bc4\u5b58\u5668\u4f20\u8f93\u64cd\u4f5c

    microoperation\uff1a\u5fae\u64cd\u4f5c

    register transfer structure\uff1a\u5bc4\u5b58\u5668\u4f20\u8f93\u7ed3\u6784

    bus\uff1a\u603b\u7ebf

    lateral: (adj.) \u4fa7\u9762\u7684\uff1b\u6a2a\u5411\u7684\uff1b\u5411\u4fa7\u9762\u79fb\u52a8\u7684

    laterally: (adv.) \u4fa7\u9762\u5730\uff1b\u6a2a\u5411\u5730\uff1b\u5411\u4fa7\u9762\u79fb\u52a8\u5730

    serial gating\uff1a\u4e32\u884c\u95e8\u63a7

    parallel gating\uff1a\u5e76\u884c\u95e8\u63a7

    counter\uff1a\u8ba1\u6570\u5668

    data path\uff1a\u6570\u636e\u901a\u9053

    control unit\uff1a\u63a7\u5236\u5355\u5143

    "},{"location":"cour_note/D2QD_DigitalDesign/glossary/#11--ch7-1-7","title":"11) Ch7. 1-7","text":"

    strobe\uff1a\u9009\u901a\uff1b\u9009\u901a\u8109\u51b2\uff1b\u95f8\u95e8

    SRAM\uff1a\u9759\u6001\u5185\u5b58

    DRAM\uff1a\u52a8\u6001\u5185\u5b58

    coincident selection\uff1a\u91cd\u5408\u9009\u62e9

    word extension\uff1a\u5b57\u6269\u5c55

    bit extension\uff1a\u4f4d\u6269\u5c55

    address multiplexing\uff1a\u5730\u5740\u590d\u7528\uff08\u6307DRAM\uff09

    refresh\uff1a\u5237\u65b0

    synchronous DRAM(SDRAM)\uff1a\u540c\u6b65DRAM

    burst read\uff1a\u7206\u53d1\u6a21\u5f0f\u8bfb\u53d6\u6570\u636e

    burst length\uff1a\u7206\u53d1\u6a21\u5f0f\u7684\u6570\u636e\u8bfb/\u5199\u957f\u5ea6

    memory bandwidth\uff1a\u5185\u5b58\u5e26\u5bbd

    "},{"location":"cour_note/D2QD_Intro2CV/","title":"\ud83d\udc8e \u8ba1\u7b97\u673a\u89c6\u89c9\u5bfc\u8bba | Introduction to Computer Vision","text":"

    \u7ea6 145 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    List

    Lab

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/","title":"Lecture 1 | Introduction","text":"

    \u7ea6 1737 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u4e3b\u8981\u4efb\u52a1","title":"CV \u7684\u4e3b\u8981\u4efb\u52a1","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#cv-\u7684\u5e94\u7528","title":"CV \u7684\u5e94\u7528","text":"Application Examples "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u5b66\u672f\u5708\u6982\u51b5","title":"\u5b66\u672f\u5708\u6982\u51b5","text":"

    CV \u9886\u57df\u7684\u51e0\u4e2a\u9876\u4f1a

    \u56fe\u5f62\u5b66\u76f8\u5173\u7684\u9876\u4f1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u8bfe\u7a0b\u6982\u8ff0","title":"\u8bfe\u7a0b\u6982\u8ff0","text":"

    Note

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u4ee3\u590d\u4e60","title":"\u7ebf\u4ee3\u590d\u4e60","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7ebf\u6027\u53d8\u6362","title":"\u7ebf\u6027\u53d8\u6362","text":"

    \u9996\u5148\uff0c\u4e00\u4e2a\u77e9\u9635\u5de6\u4e58\u4e00\u4e2a\u5411\u91cf\uff1a

    \u5728\u8fd9\u79cd\u57fa\u7840\u4e0a\uff0c\u77e9\u9635\u4e58\u6cd5\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u7cfb\u5217\u5411\u91cf\uff08\u53f3\u4fa7\u77e9\u9635\uff09\u7ecf\u8fc7\u540c\u4e00\u4e2a\u53d8\u6362\u5f97\u5230\u65b0\u7684\u4e00\u7cfb\u5217\u5411\u91cf\u3002

    Tips

    \u5b9e\u9645\u4e0a\uff0c\u4ece\u5355\u4f4d\u77e9\u9635\u7684\u89d2\u5ea6\u4e5f\u53ef\u4ee5\u5f88\u597d\u7684\u7406\u89e3\u8fd9\u4ef6\u4e8b\uff1a

    \\[ \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} 1 & 0 \\\\ 0 & 1 \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\]

    \u6211\u4eec\u6765\u8bd5\u7740\u8fd0\u7528\u4e0a\u9762\u7684\u6280\u5de7\u6c42\u4e00\u4e2a\u65cb\u8f6c\u53d8\u6362\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u3002

    \u9898\u9762\u7b54\u6848

    \u5047\u8bbe\u8be5\u77e9\u9635\u8ba9\u76ee\u6807\u56fe\u5f62\u987a\u65f6\u9488\u65cb\u8f6c \\(\\theta\\) \uff0c\u5219\u5176\u8868\u8fbe\u5f0f\u4e3a\uff1f

    \u6211\u4eec\u505a\u6b64\u5206\u6790\uff1a

    \u56e0\u6b64\uff0c\u6839\u636e\u4e0a\u9762\u63d0\u5230\u7684\u6280\u5de7\uff0c\u65cb\u8f6c\u5bf9\u5e94\u7684\u53d8\u6362\u77e9\u9635\u4e3a\uff1a

    \\[ R_{\\theta,clockwise} = \\begin{bmatrix} \\cos\\theta & \\sin\\theta \\\\ -\\sin\\theta & \\cos\\theta \\end{bmatrix} \\]

    \u7279\u522b\u7684\uff0c\u5982\u679c\u662f\u9006\u65f6\u9488\uff0c\u7ed3\u679c\u5c31\u662f\uff1a

    \\[ R_{\\theta,anti-clockwise} = \\begin{bmatrix} \\cos\\theta & -\\sin\\theta \\\\ \\sin\\theta & \\cos\\theta \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","title":"\u4eff\u5c04\u53d8\u6362\u4e0e\u9f50\u6b21\u5750\u6807","text":"

    \u4eff\u5c04\u53d8\u6362(Affine Transformations) \u4e3b\u8981\u5305\u62ec\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u7ebf\u6027\u53d8\u6362\u548c\u5e73\u79fb\uff08\u6362\u8a00\u4e4b\uff0c\u4eff\u5c04\u53d8\u6362\u5e76\u4e0d\u662f\u7ebf\u6027\u53d8\u6362\uff09\uff0c\u5176\u6570\u5b66\u8868\u8ff0\u4e3a\uff1a

    \\[ \\begin{bmatrix} x' \\\\ y' \\end{bmatrix} = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\end{bmatrix} \\]

    \u4e3a\u4e86\u8ba9\u4eff\u5c04\u53d8\u6362\u4e5f\u80fd\u5199\u6210 \\(a=Mb\\) \u7684\u5f62\u5f0f\u4ee5\u7b80\u5316\u8fd0\u7b97\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 \\(n+1\\) \u7ef4\u5411\u91cf\u6765\u8868\u793a \\(n\\) \u7ef4\u70b9\uff0c\u5373\u4f7f\u7528\u9f50\u6b21\u5750\u6807(homogenous coordinates)\uff1a

    \\[ \\begin{bmatrix} x'\\\\ y'\\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} a & b & t_x \\\\ c & d & t_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ 1 \\end{bmatrix} \\]

    \u4e3a\u4ec0\u4e48\u662f \u201c1\u201d

    \u8fd9\u91cc\u6211\u4eec\u4e0d\u7981\u629b\u51fa\u4e00\u4e2a\u7591\u95ee\uff0c\u4e3a\u4ec0\u4e48\u9f50\u6b21\u5750\u6807\u6dfb\u52a0\u7684\u7ef4\u5ea6\u4e2d\u8981\u586b\u5165 1 \u5462\uff1f\u5b83\u6709\u4ec0\u4e48\u542b\u4e49\u5417\uff1f\u5b83\u4e0d\u80fd\u662f 2 \u6216\u8005\u522b\u7684\u4ec0\u4e48\u4e1c\u897f\u5417\uff1f

    \u7b54\u6848\u662f\uff0c\u5b83\u53ef\u4ee5\u662f\u522b\u7684\u4e1c\u897f\uff0c\u6216\u8005\u8bf4\u6211\u4eec\u9700\u8981\u5bf9\u5b9a\u4e49\u8fdb\u884c\u4e00\u4e2a\u6269\u5c55\uff0c\u4ee5\u4f7f\u9f50\u6b21\u5750\u6807\u6709\u66f4\u5927\u7684\u7528\u5904\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","title":"\u9f50\u6b21\u5750\u6807\u7684\u6269\u5c55\u6027\u8d28","text":"

    \u4f8b\u5982\uff0c\\((x,y)\\) \u5bf9\u5e94\u7684\u9f50\u6b21\u5750\u6807\u4e3a \\((x,y,1)\\)\uff0c\u5982\u679c\u4f60\u628a\u5b83\u60f3\u8c61\u6210\u4e09\u7ef4\u7a7a\u95f4\u4e2d\u7684\u70b9\uff0c\u4f1a\u53d1\u73b0\uff0c\u5982\u679c\u6539\u53d8 1 \u7684\u503c\uff0c\u5f97\u5230\u7684\u70b9\u7684\u8f68\u8ff9\u4f1a\u662f\u82e5\u5e72\u5f20\u5e73\u884c\u7684\u5e73\u9762\uff0c\u4e5f\u5c31\u662f\u8bf4\u4ed6\u4eec\u5728\u4e09\u7ef4\u7a7a\u95f4\u4e0b\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4eba\u4e3a\u7684\u5b9a\u4e49\u4e00\u4e2a\u6bcf\u4e00\u4e2a\u5e73\u9762\u5185\u7684\u70b9\u7684\u6620\u5c04\u5173\u7cfb\uff08\u6211\u4eec\u53ea\u8003\u8651\u7b2c\u4e00\u8c61\u9650\uff09\uff0c\u4ece\u539f\u70b9\u5f15\u4e00\u6761\u5c04\u7ebf\uff0c\u76f4\u7ebf\u4e0a\u4e0e\u6bcf\u4e00\u4e2a\u5e73\u9762\u7684\u4ea4\u70b9\u6211\u4eec\u90fd\u8ba4\u4e3a\u5bf9\u5e94\u7740\u4e8c\u7ef4\u5e73\u9762\u4e0a\u7684\u540c\u4e00\u70b9\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u7528 \\(n+1\\) \u7ef4\u7a7a\u95f4\u4e2d \u4ece\u539f\u70b9\u53d1\u51fa\u7684\u4e00\u6761 \u5c04\u7ebf \u6765\u63cf\u8ff0 \\(n\\) \u7ef4\u7a7a\u95f4\u4e2d\u7684\u4e00\u4e2a\u70b9\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u7528\u4e0b\u9762\u7684\u5f0f\u5b50\u6765\u6982\u62ec\u6269\u5c55\u5b9a\u4e49\uff1a

    \u800c\u5f15\u5165\u8fd9\u79cd\u60f3\u6cd5\u540e\uff0c\u6211\u4eec\u5c31\u77e5\u9053\u4e3a\u4ec0\u4e48\u901a\u8fc7\u9f50\u6b21\u5750\u6807\u5316\u5c31\u80fd\u628a\u5e73\u79fb\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u2014\u2014\u6211\u4eec\u53ef\u4ee5\u5c06 \\(n\\) \u7ef4\u70b9\u7684\u5e73\u79fb\u770b\u4f5c \\(n+1\\) \u7ef4\u5c04\u7ebf\u7684\u65cb\u8f6c\uff0c\u800c\u65cb\u8f6c\u663e\u7136\u662f\u4e00\u4e2a\u7ebf\u6027\u53d8\u6362\u3002

    \u800c\u5173\u4e8e\u8be5\u6027\u8d28\u7684\u5176\u4ed6\u5e94\u7528\uff0c\u53ef\u4ee5\u770b Lecture 2 \u7684\u7b2c\u4e8c\u5c0f\u8282\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u9006\u53d8\u6362","title":"\u9006\u53d8\u6362","text":"

    \u7ebf\u6027\u53d8\u6362 \\(T\\) \u7684\u9006\u53d8\u6362(Inverse Transform)\u5c31\u662f\u5176\u53d8\u6362\u77e9\u9635\u7684\u9006 \\(T^{-1}\\)\uff0c\u663e\u7136\uff0c\u5e76\u4e0d\u662f\u6240\u6709\u53d8\u6362\u90fd\u662f\u53ef\u9006\u7684\u3002

    \u5f62\u8c61\u5730\u7406\u89e3\uff0c\u4e00\u4e2a\u53d8\u6362\u77e9\u9635\u5982\u679c\u4e0d\u6ee1\u79e9\uff08\u4e0d\u53ef\u9006\uff09\uff0c\u90a3\u4e48\u5c31\u4f1a\u6709\u51e0\u4e2a\u57fa\u5728\u53d8\u6362\u4e2d\u5408\u5e76\uff0c\u6216\u8005\u8bf4\u591a\u4e2a\u70b9\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u70b9\uff0c\u5bfc\u81f4\u65e0\u6cd5\u8fd8\u539f\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","title":"\u884c\u5217\u5f0f\u7684\u51e0\u4f55\u542b\u4e49","text":"

    \u884c\u5217\u5f0f(Determinant) \u7684\u503c\u7b49\u4e8e\u8fd9\u4e2a\u65b9\u9635\u4e2d\u7684\u5411\u91cf\u5bf9\u5e94\u7684 \u5e73\u884c\u56fe\u5f62/\u51e0\u4f55\u4f53/... \u7684 \u9762\u79ef/\u4f53\u79ef/...

    "},{"location":"cour_note/D2QD_Intro2CV/Lec01/#\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","title":"\u7279\u5f81\u503c\u548c\u7279\u5f81\u5411\u91cf","text":"

    \u7279\u5f81\u5411\u91cf(eigenvector)\u548c\u7279\u5f81\u503c(eigenvalue)\u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

    \u5bf9\u4e8e\u77e9\u9635 \\(A\\in R^{N\\times N}\\)\uff0c\u5982\u679c\u6709\u5411\u91cf \\(v\\in R^{N}\\) \u548c\u5b9e\u6570 \\(\\lambda \\not = 0\\)\uff0c\u6ee1\u8db3\uff1a

    \\[ Av = \\lambda v \\]

    \u5219\u79f0 \\(v\\) \u662f\u77e9\u9635 \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u5e94\u7684\u7279\u5f81\u503c\u4e3a \\(\\lambda\\)\u3002

    \u4ece\u51e0\u4f55\u53d8\u6362\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u8fd9\u4e2a\u5b9a\u4e49\u5f0f\uff0c\u53ef\u4ee5\u63cf\u8ff0\u4e3a\uff1a\u5411\u91cf \\(v\\) \u7ecf\u8fc7\u53d8\u6362 \\(A\\) \u5f97\u5230\u7684\u7ed3\u679c\uff0c\u7b49\u4e8e\u76f4\u63a5\u5bf9 \\(v\\) \u8fdb\u884c\u7f29\u653e\uff08\u800c\u6ca1\u6709\u6539\u53d8\u65b9\u5411\uff09\u3002

    \u5de5\u7a0b\u8ba1\u7b97\u65b9\u6cd5

    \u4ee4\u4eba\u60ca\u559c\u7684\u662f\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u8fd0\u7528\u65f6\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6570\u5b66\u5e93\u4e2d\u7684\u7279\u5f81\u503c\u5206\u89e3(eigen decomposition)\u65b9\u6cd5\uff0c\u5176\u5927\u81f4\u4f1a\u505a\u8fd9\u6837\u4e00\u4ef6\u4e8b\uff1a

    \u5c06\u77e9\u9635 \\(A\\) \u5206\u89e3\u4e3a \\(Q\\Lambda Q^{-1}\\)\uff0c\u5176\u4e2d \\(Q\\) \u4e2d\u7684\u6bcf\u4e00\u5217\u5373\u4e3a \\(A\\) \u7684\u7279\u5f81\u5411\u91cf\uff0c\u5bf9\u89d2\u9635 \\(\\Lambda\\) \u4e2d\u7684\u7b2c \\(i\\) \u9879\u5c31\u662f\u7b2c \\(i\\) \u4e2a\u7279\u5f81\u5411\u91cf\u7684\u7279\u5f81\u503c\u3002

    \u7279\u5f81\u503c\u4e0e\u7279\u5f81\u5411\u91cf\u7684\u5e94\u7528\uff1a\u4e3b\u6210\u5206\u5206\u6790(principal component analysis)

    \u4e3b\u6210\u5206(principal component)\u7b49\u4e8e\u534f\u65b9\u5dee\u77e9\u9635\u7684 \u7279\u5f81\u503c\u6700\u5927\u7684 \u90a3\u4e2a\u7279\u5f81\u5411\u91cf\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/","title":"Lecture 2 | Image Formation","text":"

    \u7ea6 3769 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 19 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","title":"\u76f8\u673a\u4e0e\u5149\u5b66\u539f\u7406","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5c0f\u5b54\u6210\u50cf","title":"\u5c0f\u5b54\u6210\u50cf","text":"

    \u5982\u679c\u6211\u4eec\u76f4\u63a5\u62ff\u4e00\u5757\u5e73\u9762\u6765\u8bb0\u5f55\u81ea\u7136\u754c\u7684\u5149\u4fe1\u606f\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u7531\u4e8e\u5149\u7ebf\u662f\u5411\u56db\u9762\u516b\u65b9\u4f20\u64ad\u7684\uff0c\u6240\u4ee5\u63a5\u6536\u5230\u7684\u4fe1\u606f\u4e5f\u4e71\u4e03\u516b\u7cdf\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u901a\u8fc7\u4e00\u4e2a\u5c0f\u5b54\uff0c\u4e5f\u5c31\u662f\u5982\u4eca\u7684\u5149\u5708(aperture)\u6765\u5bf9\u5149\u7ebf\u8fdb\u884c\u4e00\u4e2a\u8fc7\u6ee4\u3002\u8fd9\u5c31\u662f\u65e9\u671f\u9488\u5b54\u6444\u50cf\u673a(pinhole camera)\u7684\u539f\u7406\u3002

    \u8fd9\u4e5f\u5c31\u662f\u6211\u4eec\u5f88\u65e9\u5c31\u5b66\u8fc7\u7684\uff0c\u5c0f\u5b54\u6210\u50cf\u539f\u7406\u3002\u800c\u5149\u5708\u8d8a\u5c0f\uff0c\u6210\u50cf\u4e5f\u4f1a\u8d8a\u6765\u8d8a\u6e05\u695a\uff0c\u4f46\u4e5f\u4e0d\u80fd\u592a\u5c0f\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4\u4eae\u5ea6\u4e0d\u8db3\u751a\u81f3\u884d\u5c04\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u955c","title":"\u900f\u955c","text":"

    \u51f8\u900f\u955c\u5177\u6709\u6c47\u805a\u5149\u7ebf\u7684\u4f5c\u7528\uff0c\u5728\u6ee1\u8db3\u7279\u5b9a\u5149\u5b66\u51e0\u4f55\u5173\u7cfb\u7684\u524d\u63d0\u4e0b\u5177\u6709\u548c\u5c0f\u5b54\u6210\u50cf\u7c7b\u4f3c\u7684\u6548\u679c\uff0c\u4f46\u662f\u80fd\u591f\u6c47\u805a\u66f4\u591a\u7684\u5149\u7ebf\u3002

    Source: https://fpcv.cs.columbia.edu/

    \u5bf9\u4e8e\u8584\u51f8\u900f\u955c\uff0c\u6709\u9ad8\u65af\u6210\u50cf\u516c\u5f0f\uff1a

    \\[ \\frac{1}{i} + \\frac{1}{o} = \\frac{1}{f} \\]

    \u5176\u4e2d \\(i\\) \u4e3a\u50cf\u8ddd(img dis)\uff0c\\(o\\) \u4e3a\u7269\u8ddd(obj dis)\uff0c\\(f\\) \u4e3a\u7126\u8ddd(focal len)\u3002

    \u800c\u5bf9\u4e8e\u5e73\u884c\u5149\uff0c\u6216\u8005\u8bf4 \\(o\\to +\\infty\\) \u65f6\uff0c\u5c31\u4f1a\u6709 \\(i=f\\)\u3002\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6d4b\u91cf\u5e73\u884c\u5149\u900f\u8fc7\u51f8\u900f\u955c\u6c47\u805a\u7684\u4f4d\u7f6e\u6765\u6d4b\u91cf\u7126\u8ddd\u3002

    \u540c\u65f6\u518d\u5f15\u5165\u4e00\u4e2a\u653e\u5927\u7387(Magnification)\uff1a\\(m=\\frac{h_i}{h_o}=\\frac{i}{o}\\)\u3002

    Source: https://fpcv.cs.columbia.edu/

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u89c6\u91ce-fovfield-of-view","title":"\u89c6\u91ce FoV(field of view)","text":"

    \u7126\u8ddd\u548c\u5e95\u7247\u7684\u7ebf\u5ea6\u5171\u540c\u51b3\u5b9a\u4e86 FoV \u7684\u5927\u5c0f\u3002

    Source: https://snapsnapsnap.photos/

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7126\u8ddd\u7684\u5927\u5c0f\u4f1a\u5f71\u54cd\u89c6\u91ce\u7684\u5927\u5c0f\u548c\u653e\u5927\u7387\u7684\u5927\u5c0f\u3002

    50mm/46\u00b0 \u4e0e\u4eba\u7684\u89c6\u91ce\u76f8\u8fd1\uff0c\u56e0\u6b64\u5b83\u88ab\u79f0\u4e3a\u6807\u51c6\u955c\u5934(standard lens).

    \u6b64\u5916\uff0c\u5373\u4f7f\u5728\u753b\u9762\u4e2d\u4fdd\u8bc1\u4e00\u4e2a\u7269\u4f53\u7684\u5927\u5c0f\u4e0d\u53d8\uff0c\u9009\u7528\u4e0d\u540c\u7684\u7126\u8ddd\u4e5f\u4f1a\u5bfc\u81f4\u753b\u9762\u7684\u53d8\u5316\u2014\u2014\u80cc\u666f\u7684\u5927\u5c0f\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u5f20\u56fe\u7684\u4e09\u4e2a\u753b\u9762\u6211\u4eec\u53ef\u4ee5\u5f88\u6e05\u6670\u7684\u611f\u53d7\u5230\u8fd9\u4e00\u70b9\u3002

    \u6b64\u5916\uff0c\u4f20\u611f\u5668\u7684\u5927\u5c0f\uff0c\u6216\u8005\u8bf4\u5e95\u7247\u7684\u5927\u5c0f\uff0c\u4e5f\u4f1a\u5f71\u54cd FoV\u3002\u800c\u4e14\u4e00\u822c\u6765\u8bf4\uff0c\u8d8a\u5927\u7684\u5e95\u7247\u80fd\u591f\u63d0\u4f9b\u66f4\u9ad8\u7684\u5206\u8fa8\u7387\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#f-\u6570","title":"F \u6570","text":"

    F \u6570(F-Number)\u7528\u6765\u63cf\u8ff0\u5149\u5708\u7684\u76f8\u5bf9\u5927\u5c0f\uff0c\u5176\u5b9a\u4e49\u5f0f\u4e3a \\(N=\\frac{f}{D}\\)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5bf9\u7126","title":"\u5bf9\u7126","text":"

    Source: https://fpcv.cs.columbia.edu/

    \u7531\u76f8\u4f3c\u4e09\u89d2\u5f62\uff0c\u6ca1\u6709\u5bf9\u4e0a\u7126\u800c\u5f62\u6210\u7684\u5149\u6591(Blur Circle)\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a\uff1a

    \\[ \\begin{align} &\\because \\frac{b}{D}=frac{|i'-i|}{i'} \\\\ &\\therefore b = \\frac{D}{i'}|i'-i|\\;,\\;\\;\\;b \\propto D \\propto \\frac{1}{N} \\end{align} \\]

    \u800c\u5bf9\u7126\uff0c\u5c31\u662f\u5c06\u5931\u7126\u7684\u5185\u5bb9\u91cd\u65b0\u6c47\u805a\u5230\u5e95\u7247\u4e0a\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u666f\u6df1-dof","title":"\u666f\u6df1 DoF","text":"

    \u6839\u636e\u4e0a\u4e00\u5c0f\u8282\u5f97\u5230\u7684\u7ed3\u8bba\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u597d\u50cf\u53ea\u6709\u6e05\u6670\u6210\u50cf\u4e00\u4e2a\u7279\u5b9a\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u76f8\u673a\u4e0a\u4f1a\u6709\u4e00\u6bb5\u8ddd\u79bb\u4e0a\u7684\u5185\u5bb9\u90fd\u662f\u6e05\u6670\u7684\uff0c\u8fd9\u6bb5\u8ddd\u79bb\u5c31\u662f\u666f\u6df1 DoF(Depth of Field)\u3002\u800c\u4e4b\u6240\u4ee5\u6709\u666f\u6df1\uff0c\u662f\u56e0\u4e3a\u5e95\u7247\u7684\u611f\u5149\u5143\u4ef6\u662f\u6709\u6781\u9650\u7684\uff0c\u5f53\u5149\u6591\u5c0f\u96e8\u8fd9\u4e2a\u6781\u9650\u65f6\uff0c\u62cd\u6444\u51fa\u6765\u7684\u5c31\u4ecd\u7136\u662f\u6e05\u6670\u7684\u3002

    \u800c\u666f\u6df1\u7684\u5927\u5c0f\u53ef\u4ee5\u8fd9\u4e48\u8ba1\u7b97\uff1a

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u666f\u6df1\u7684\u5927\u5c0f \u5927\u81f4\u4e0e \u5149\u5708\u5927\u5c0f\u3001\u7269\u50cf \u6b63\u76f8\u5173\uff0c\u4e0e \u7126\u8ddd \u8d1f\u76f8\u5173\u3002

    \u5f15\u8a00

    \u7531\u4e8e\u6211\u4eec\u8003\u8651\u7684\u662f\u6210\u50cf\u95ee\u9898\uff0c\u6240\u4ee5\u66f4\u591a\u7684\u662f\u5728\u63cf\u8ff0\u4e09\u7ef4\u771f\u5b9e\u4fe1\u606f\u4e0e\u4e8c\u7ef4\u5e73\u9762\u4fe1\u606f\u4e4b\u95f4\u7684\u4e92\u76f8\u8868\u8fbe\u3002

    \u800c\u8fd9\u79cd\u201c\u63cf\u8ff0\u201d\u9700\u8981\u57fa\u4e8e\u4e00\u4e2a\u6295\u5f71\u6a21\u578b\u3002\u6216\u8005\u8bf4\u8bf4\u4e00\u79cd\u6620\u5c04\u5173\u7cfb\uff0c\u7b80\u5355\u6765\u8bf4\u5c31\u597d\u50cf\u201c\u70b9\u5149\u6e90\u6295\u5f71\u201d\u548c\u201c\u5e73\u884c\u5149\u6e90\u6295\u5f71\u201d\u3002

    \u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u65e0\u8bba\u662f\u54ea\u4e00\u79cd\u6a21\u578b\uff0c\u7531\u4e8e\u6211\u4eec\u5c06\u4e09\u7ef4\u4fe1\u606f\u901a\u8fc7\u4e0d\u53ef\u9006\u7684\u7ebf\u6027\u53d8\u6362\u538b\u7f29\u5230\u4e86\u4e8c\u7ef4\u4fe1\u606f\uff0c\u6240\u4ee5\u4e00\u5b9a\u662f\u5b58\u5728\u4fe1\u606f\u7f3a\u5931\u7684\u3002\u901a\u5e38\u6765\u8bf4\uff0c\u6307\u7684\u662f\u6df1\u5ea6\u7f3a\u5931\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u6295\u5f71","title":"\u900f\u89c6\u6295\u5f71","text":"

    \u5982\u56fe\u662f 3D \u5750\u6807\u901a\u8fc7\u900f\u89c6\u6295\u5f71\u5230 2D \u5750\u6807\u5230\u793a\u610f\u56fe\u3002\u5176\u4e2d \\(x,y,Z\\) \u7528\u6765\u63cf\u8ff0\u7a7a\u95f4\u5750\u6807\u4fe1\u606f\uff0c\u65b9\u4fbf\u8d77\u89c1\uff0c\u6211\u4eec\u7528\u4ed6\u4eec\u8868\u793a\u76f8\u5bf9\u4e8e\u76f8\u673a\u4e2d\u5fc3(camera center)\u7684\u6b63\u4ea4\u5750\u6807\uff0c\u5176\u4e2d \\(Z\\) \u548c\u5149\u8f74(optical axis)\u65b9\u5411\u76f8\u540c\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u79f0\u4e4b\u4e3a\u6df1\u5ea6\u3002

    \u540c\u65f6\uff0c\u5149\u8f74\u5e94\u5f53\u5782\u76f4\u4e8e\u6210\u50cf\u5e73\u9762\uff0c\u800c\u5149\u8f74\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u70b9\u4e3a\u56fe\u50cf\u4e2d\u5fc3(img center)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\\(P\\) \u4e0e \\(p\\) \u7684\u5173\u7cfb\u5982\u4e0b\uff1a

    \\[ p = \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

    \u90a3\u6709\u6ca1\u6709\u529e\u6cd5\u5c06 \\(p\\) \u548c \\(P\\) \u901a\u8fc7\u7ebf\u6027\u53d8\u5316\u653e\u5728\u540c\u4e00\u4e2a\u7b49\u5f0f\u91cc\u5462\uff1f

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6709\u6ca1\u6709\u529e\u6cd5\u4f7f\u5f97\u5982\u4e0b\u7b49\u5f0f\u6210\u7acb\uff1f

    \\[ A \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\end{bmatrix} \\]

    \u5f88\u53ef\u60dc\uff0c\u7531\u4e8e\u5f0f\u5b50\u4e2d\u51fa\u73b0\u4e86 \\(\\frac{1}{Z}\\)\uff0c\u5373\u9664\u6cd5\uff0c\u5b83\u5e76\u4e0d\u662f\u4e2a\u7ebf\u6027\u53d8\u6362\u3002\u6240\u4ee5\u5373\u4f7f\u6211\u4eec\u6269\u5c55 \\(p\\) \u548c \\(P\\) \u7684\u7ef4\u5ea6\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u5c06\u5b83\u53d8\u6210\u7ebf\u6027\u53d8\u6362\u3002

    \u4f46\u662f\u4f60\u4e5f\u770b\u5230\u4e86\uff0c\u6211\u7528\u7684\u8bcd\u662f\u201c\u76f4\u63a5\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u63a5\u4e0b\u6765\u53ef\u4ee5\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5e94\u7528\u9f50\u6b21\u5750\u6807","title":"\u5e94\u7528\u9f50\u6b21\u5750\u6807","text":"

    \u8ba9\u6211\u4eec\u56de\u987e\u9f50\u6b21\u5750\u6807\u7684 \u6269\u5c55\u6027\u8d28\uff0c\u5c06\u5b83\u5e94\u7528\u4e8e\u6b64\u5f0f\uff1a

    \\[ \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\]

    \u4e8e\u662f\u6211\u4eec\u53d1\u73b0\uff0c\u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230 \\(A\\) \u4f7f\u5f97\uff1a

    \\[ A \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} \\overset{?}= \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

    \u6210\u7acb\uff0c\u4f46\u662f\u6211\u4eec\u53ef\u4ee5\u627e\u5230 \\(A=\\begin{bmatrix}f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0\\end{bmatrix}\\) \u4f7f\u5f97\uff1a

    \\[ \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ Z \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} f \\cdot x \\\\ f \\cdot y \\\\ Z \\end{bmatrix} \\cong \\begin{bmatrix} \\frac{f}{Z}\\cdot x \\\\ \\frac{f}{Z}\\cdot y \\\\ 1 \\end{bmatrix} \\]

    \u4e8e\u662f\uff0c\u6211\u4eec\u5c31\u6210\u529f\u7684\u901a\u8fc7\u7ebf\u6027\u53d8\u6362\u5c06 \\(P\\) \u548c \\(p\\) \u7edf\u4e00\u4e86\u8d77\u6765\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u53ef\u89c6\u5316\u8868\u793a","title":"\u53ef\u89c6\u5316\u8868\u793a","text":"

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

    \u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

    \u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u4fe1\u606f\u7f3a\u5931","title":"\u4fe1\u606f\u7f3a\u5931","text":"

    \u7531\u4e8e\u5728\u900f\u89c6\u6295\u5f71\u7cfb\u7edf\u4e2d\uff0c\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5927\u5c0f\u4e0e\u56fe\u50cf\u7ebf\u5ea6\u5927\u5c0f\u7684\u6bd4\u4f8b\u7531\u6df1\u5ea6\u51b3\u5b9a\uff0c\u4f46\u6df1\u5ea6\u53c8\u4e0d\u80fd\u76f4\u63a5\u4ece\u56fe\u4e2d\u83b7\u53d6\uff0c\u6240\u4ee5\u6709\u65f6\u5019\u6211\u4eec\u65e0\u6cd5\u6bd4\u8f83\u56fe\u50cf\u4e2d\u4e24\u4e2a\u7269\u4f53\u7684\u771f\u5b9e\u7ebf\u5ea6\u5dee\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u957f\u5ea6\u4fe1\u606f\u548c\u89d2\u5ea6\u4fe1\u606f\u662f\u4e22\u5931\u7684\u3002

    \uff08\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u4e00\u4e9b\u4e1c\u897f\u6765\u505a\u53c2\u8003\u7cfb\uff0c\u5224\u65ad A \u548c B \u7684\u6df1\u5ea6\u4fe1\u606f\uff0c\u518d\u5206\u6790\u4ed6\u4eec\u7684\u5b9e\u9645\u7ebf\u5ea6\u5927\u5c0f\u5173\u7cfb\u3002\uff09

    \u7136\u800c\u4ecd\u7136\u6709\u4e9b\u6027\u8d28\u662f\u4fdd\u7559\u7684\uff0c\u4f8b\u5982\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\uff0c\u5982\u679c\u4f60\u80fd\u60f3\u8c61\u7684\u8bdd\uff0c\u867d\u7136\u76f4\u7ebf\u4ecd\u7136\u662f\u76f4\u7ebf\uff0c\u4f46\u662f\u5b83\u7684\u201c\u7ebf\u5bc6\u5ea6\u201d\u4e0d\u4e00\u6837\u4e86\u3002

    \u6240\u4ee5\uff0c\u5982\u679c\u662f\u66f2\u7ebf\uff0c\u5b83\u867d\u7136\u4e0d\u4f1a\u53d8\u6210\u6298\u7ebf\uff0c\u4f46\u662f\u7279\u5f81\u53ef\u80fd\u5df2\u7ecf\u53d8\u4e86\uff0c\u6bd4\u5982\u5706\u662f\u4f1a\u626d\u66f2\u7684\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u706d\u70b9\u4e0e\u706d\u7ebf","title":"\u706d\u70b9\u4e0e\u706d\u7ebf","text":"

    \u5728\u900f\u89c6\u4e2d\u4e00\u4e2a\u5f88\u6709\u610f\u601d\u7684\u73b0\u8c61\u662f\u706d\u70b9(vanishing point)\u548c\u706d\u7ebf(vanishing line)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u56fe\u50cf\u4e2d\u4e00\u6761\u4e0d\u65ad\u884d\u751f\u7684\u76f4\u7ebf\uff0c\u5728\u50cf\u4e2d\u6700\u7ec8\u4f1a\u7ec8\u7ed3\u4e8e\u4e00\u4e2a\u70b9\uff0c\u8fd9\u4e2a\u70b9\u5c31\u662f\u201c\u706d\u70b9\u201d\u3002\u51e0\u4f55\u4e0a\uff0c\u706d\u70b9\u4e0e\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\u5e94\u5f53\u5e73\u884c\u4e8e\u8be5\u76f4\u7ebf\u3002

    \u800c\u73b0\u5b9e\u4e2d\u76f8\u4e92\u5e73\u884c\u7684\u4e24\u6761\u76f4\u7ebf\uff0c\u6700\u7ec8\u4f1a\u5728\u56fe\u50cf\u4e2d\u7ec8\u6b62\u4e8e\u540c\u4e00\u4e2a\u706d\u70b9\u3002

    \u706d\u70b9\u672a\u5fc5\u5728\u56fe\u50cf\u4e2d\uff0c\u751a\u81f3\u53ef\u80fd\u65e0\u9650\u8fdc\u3002

    \u521a\u624d\u63d0\u5230\uff0c\u5e73\u884c\u7ebf\u5171\u4eab\u706d\u70b9\u8fd9\u610f\u5473\u7740\u6709\u591a\u5c11\u7ec4\u5e73\u884c\u7ebf\u5c31\u6709\u591a\u5c11\u706d\u70b9\u3002

    \u5982\u679c\u6211\u4eec\u5c06\u4e00\u4e2a\u5e73\u9762\u50cf\u68cb\u76d8\u90a3\u6837\uff0c\u5212\u51fa\u4e24\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u4e48\u5c31\u4f1a\u5f97\u5230\u4e24\u4e2a\u706d\u70b9\uff0c\u5982\u56fe\u4e2d\u7684 \\(v_1\\) \u548c \\(v_2\\)\u3002\u8fd9\u610f\u5473\u7740\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u5e73\u9762\uff0c\u6211\u4eec\u53ef\u4ee5\u4ece\u4e2d\u53d6\u51fa\u65e0\u6570\u7ec4\u5e73\u884c\u7ebf\uff0c\u56e0\u800c\u65e0\u9650\u5927\u7684\u5e73\u9762\u4f1a\u4ea7\u751f\u65e0\u6570\u591a\u7684\u706d\u70b9\uff0c\u800c\u8fd9\u4e9b\u706d\u70b9\u8fde\u6210\u7ebf\u5c31\u6210\u4e86\u201c\u706d\u7ebf\u201d\u3002\u5e38\u89c1\u7684\u706d\u7ebf\u5c31\u6bd4\u5982\u7167\u7247\u4e0a\u7684\u6d77\u5929\u754c\u7ebf\u3002

    \u56e0\u6b64\uff0c\u5982\u679c\u8bf4\u706d\u70b9\u8c61\u5f81\u4e86\u4e00\u7ec4\u5e73\u884c\u7ebf\uff0c\u90a3\u706d\u7ebf\u5c31\u662f\u8c61\u5f81\u4e86\u4e00\u5757\u5e73\u9762\u3002\u800c\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u770b\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u51fa\u73b0\u5728\u706d\u7ebf\u4ee5\u4e0a\u8fd8\u662f\u706d\u7ebf\u4e00\u4e0b\uff0c\u6765\u5224\u65ad\u5e73\u9762\u5728\u6211\u4eec\u7684\u76f8\u673a\u4e2d\u5fc3\u4ee5\u4e0b\u8fd8\u662f\u4ee5\u4e0a\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

    Interesting Try

    \u9898\u9762\u7b54\u6848

    \u89c2\u5bdf\u5982\u4e0b\u56fe\u7247\uff0c\u5224\u65ad \ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0a\u8fd8\u662f\u4ee5\u4e0b\uff0c\u5e76\u9610\u660e\u7406\u7531\u3002

    \u663e\u7136\uff0c\ud83e\ude82(\u8df3\u4f1e\u8005) \u5728 \ud83d\udcf7 \u4ee5\u4e0b\uff08\u4f1e\u5728\u4ee5\u4e0a\uff09\uff0c\u4f9d\u636e\u662f \u4eba \u5728 \u5929\u9645\u7ebf \u4ee5\u4e0b\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u900f\u89c6\u7578\u53d8","title":"\u900f\u89c6\u7578\u53d8","text":"

    \u5728\u62cd\u6444\u8f83\u5927\u7684\u7269\u4f53\u65f6\uff0c\u6bd4\u5982\u5efa\u7b51\u7269\uff0c\u5982\u679c\u5efa\u7b51\u7269\u7684\u5899\u9762\u6ca1\u6709\u548c\u5e95\u7247\u5e73\u884c\uff0c\u5219\u4f1a\u51fa\u73b0\u900f\u89c6\u7578\u53d8\u3002

    \u5728\u5efa\u7b51\u62cd\u6444\u65b9\u9762\uff0c\u6211\u4eec\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4e0b\u79fb\u4f20\u611f\u5668\uff0c\u4f7f\u5e95\u7247\u4e2d\u5fc3\u5728\u5149\u8f74\u4ea4\u70b9\u4ee5\u4e0b\uff0c\u8fd9\u79cd\u955c\u5934\u79f0\u4e3a\u79fb\u8f74\u955c\u5934\u3002

    \u53e6\u5916\u4e00\u79cd\u900f\u89c6\u7578\u53d8\u4f53\u73b0\u5728\u66f2\u7ebf\u7684\u5f62\u53d8\u4e0a\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u5e38\u611f\u53d7\u5230\u7684\uff0c\u7ad9\u5728\u8fb9\u4e0a\u7684\u4eba\u8138\u603b\u662f\u66f4\u5927\u4e00\u70b9\u3002\u800c\u8fd9\u79cd\u7578\u53d8\u5728\u65ad\u955c\u5934\u4e0b\u66f4\u5e38\u89c1\uff0c\u6240\u4ee5\u4eba\u50cf\u66f4\u591a\u7528\u7684\u662f\u957f\u7126\u955c\u5934\uff08\u5176\u4e00\u539f\u56e0\uff0c\u5176\u4ed6\u7684\u8fd8\u6709 FoV \u5c0f\u6240\u4ee5\u80cc\u666f\u66f4\u5e72\u51c0\u7b49\uff09\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","title":"\u6795\u578b\u7578\u53d8\u548c\u6876\u578b\u7578\u53d8","text":"\\[ \\begin{align} r^2 & = {x'}_n^2 + {y'}_n^2 \\\\ {x'}_d & = {x'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ {y'}_d & = {y'}_n(1 + \\kappa_1 r^2 + \\kappa_2 r^4) \\\\ \\end{align} \\]

    \u800c\u8fd9\u79cd\u7167\u7247\u7684\u7ea0\u6b63\u529e\u6cd5\u5c31\u662f\u5bfb\u627e\u7167\u7247\u4e2d\u7684\u683c\u70b9\uff0c\u7136\u540e\u901a\u8fc7\u6570\u5b66\u65b9\u6cd5\u6765\u8fd8\u539f\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6b63\u4ea4\u6295\u5f71","title":"\u6b63\u4ea4\u6295\u5f71","text":"

    \u6b63\u4ea4\u6295\u5f71\u7684\u542b\u4e49\u5c31\u662f\uff0c\u76f4\u63a5\u62b9\u6389\u6df1\u5ea6\u4fe1\u606f\uff0c\u4e09\u7ef4\u70b9 \\(P\\) \u5230\u4e8c\u7ef4\u70b9 \\(p\\) \u7684\u6620\u5c04\u89c4\u5219\u5982\u4e0b\uff1a

    \\[ \\begin{bmatrix} 1 & 0 & 0 \\\\ 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} = \\begin{bmatrix} x \\\\ y \\end{bmatrix} \\]

    \u4e5f\u5c31\u662f\u5e73\u884c\u5149\u6e90\u6295\u5f71\u3002

    \u8fd9\u79cd\u6295\u5f71\u53ef\u80fd\u4e0d\u592a\u62df\u771f\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u4e0d\u8981\u6c42\u7cbe\u5ea6\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u603b\u662f\u4e50\u4e8e\u4f7f\u7528\u7684\u3002

    \u8fd9\u6837\u8bf4\u53ef\u80fd\u6bd4\u8f83\u62bd\u8c61\uff0c\u4f46\u662f\u5b83\u5176\u5b9e\u5f88\u5e38\u89c1\uff0c\u6bd4\u5982\u5728\u4e00\u4e9b\u4ee5\u201c\u4e0a\u5e1d\u89c6\u89d2\u201d\u5c55\u5f00\u7684\u6e38\u620f\u4e2d\uff0c\u4f8b\u5982\u201c\u5f00\u7f57\u6e38\u620f\u201d\u3001\u201c\u6a21\u62df\u90fd\u5e02\u201d\u8fd9\u79cd\uff0c\u91c7\u7528\u7684\u57fa\u672c\u90fd\u662f\u8fd9\u79cd\u6295\u5f71\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5feb\u95e8shutter","title":"\u5feb\u95e8(Shutter)","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","title":"\u5149\u5ea6\u56fe\u50cf\u751f\u6210\u4e0e\u7740\u8272","text":"

    \u5149\u5ea6\u56fe\u50cf\u751f\u6210\u8003\u8651\u7684\u4e3b\u8981\u662f\u5149\u5f3a\u548c\u989c\u8272\u4e24\u4e2a\u65b9\u9762\u7684\u95ee\u9898\u3002

    \u786c\u4ef6\u4e0a\uff0c\u5b83\u4eec\u90fd\u901a\u8fc7\u56fe\u50cf\u4f20\u611f\u5668(img sensor)\u5b9e\u73b0\u3002

    \u5f15\u5165

    \u7740\u8272(shading)\u4e2d\u6240\u8bf4\u7684\u5149\u5f3a\uff0c\u4e3b\u8981\u6709\u4e24\u4e2a\u65b9\u9762\uff1a\u4e00\u65b9\u9762\u4e0e\u8ddd\u79bb\u5149\u6e90\u7684\u8ddd\u79bb\u6709\u5173\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u7b26\u5408\u5e73\u65b9\u53cd\u6bd4\u5b9a\u5f8b\uff0c\u8fd9\u79cd\u7279\u5f81\u6211\u4eec\u79f0\u4e4b\u4e3a Light Falloff\uff1b\u53e6\u4e00\u65b9\u9762\u5b9e\u9645\u4e0a\u662f\u9700\u8981\u6211\u4eec\u8ba1\u7b97\u5149\u7684\u53cd\u5c04\u884c\u4e3a\u3002

    \u7406\u8bba\u4e0a\uff0c\u6211\u4eec\u4f1a\u9700\u8981\u53cc\u5411\u53cd\u5c04\u5206\u5e03\u51fd\u6570 BRDF(Bidirectional Reflectance Distribution Function)\u6765\u8ba1\u7b97\uff0cBRDF \u7684\u8f93\u5165\u5927\u81f4\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u51e0\u4e2a\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u9700\u8981\u5efa\u7acb\u8fd9\u6837\u4e00\u4e2a\u6a21\u578b\u662f\u5f88\u56f0\u96be\u7684\uff0c\u4e14\u8fd9\u4e2a\u6a21\u578b\u4e0d\u5e38\u7528\uff0c\u800c\u4e14\u8ba1\u7b97\u8d77\u6765\u6bd4\u8f83\u9ebb\u70e6\u3002

    \u53cd\u5c04\u4e3b\u8981\u53ef\u4ee5\u5f52\u7eb3\u4e3a\u4e24\u79cd\u7b80\u5355\u6a21\u578b\u548c\u4e00\u79cd\u6df7\u5408\u6a21\u578b\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u6f2b\u53cd\u5c04","title":"\u6f2b\u53cd\u5c04","text":"

    \u6f2b\u53cd\u5c04(diffuse reflection) \u53c8\u53eb \u6717\u4f2f\u53cd\u5c04(Lambertian reflection)\uff0c\u662f\u8868\u73b0\u5728\u7c97\u7cd9\u8868\u9762\u4e0a\u7684\u53cd\u5c04\u7279\u5f81\uff0c\u56e0\u4e3a\u6211\u4eec\u9ed8\u8ba4\u5b83\u5411\u56db\u9762\u516b\u65b9\u53cd\u5c04\u7684\u5149\u5f3a\u90fd\u4e00\u6837\uff0c\u6240\u4ee5\u5b83\u7684\u8ba1\u7b97\u76f8\u5bf9\u6bd4\u8f83\u7b80\u5355\uff08Shading independent of view direction\uff09\uff1a

    \\[ L_d = k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) \\]

    \u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

    \u5982\u4f55\u7406\u89e3\u5149\u5f3a\u5ea6\u4e0e\u89d2\u5ea6\u7684\u5173\u7cfb

    \u4e00\u5f00\u59cb\u6ca1\u4ed4\u7ec6\u60f3\u7684\u65f6\u5019\u8fd8\u89c9\u5f97\u5f88\u81ea\u7136\uff0c\u4f46\u662f\u4ed4\u7ec6\u4e00\u60f3\u4e3a\u4ec0\u4e48\u80fd\u8fd9\u6837\u8868\u8ff0\uff1f\u4e8e\u662f\u548c\u540c\u5b66\u63a2\u8ba8\u4e86\u4e00\u4e0b\uff0c\u611f\u89c9\u4e00\u4e2a\u53ef\u4ee5\u63a5\u53d7\u7684\u89e3\u91ca\u662f\u8fd9\u6837\u7684\uff1a

    \u9996\u5148\uff0c\u8fd9\u91cc\u4e0e\u5176\u8bf4\u4e0e\u89d2\u5ea6\u76f8\u5173\uff0c\u4e0d\u5982\u8bf4\u4e0e\u5355\u4f4d\u9762\u79ef\u53d7\u5230\u7684\u5149\u7167\u5f3a\u5ea6\u6709\u5173\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u540c\u4e00\u675f\u5149\uff0c\u503e\u659c\u7684\u9762\u4e0a\u4f1a\u6709\u66f4\u5927\u7684\u9762\u79ef\u88ab\u7167\u5c04\u5230\uff0c\u5747\u644a\u4e0b\u6765\u5355\u4f4d\u9762\u79ef\u4e0a\u7684\u5149\u5f3a\u5ea6\u5c31\u5c0f\uff0c\u6216\u8bb8\u53ef\u4ee5\u5c06\u5b83\u7406\u89e3\u6210\u7c7b\u4f3c\u4e8e\u201c\u5bc6\u5ea6\u201d\u7684\u6982\u5ff5\u3002

    \u5e26\u7740\u8fd9\u6837\u7684\u60f3\u6cd5\uff0c\u518d\u6765\u770b\u8fd9\u5f20\u56fe\uff0c\u5c31\u6bd4\u8f83\u6e05\u6670\u4e86\u3002

    Source: https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u9ad8\u5149\u53cd\u5c04","title":"\u9ad8\u5149\u53cd\u5c04","text":"

    \u9ad8\u5149\u53cd\u5c04(specular reflection) \u7c7b\u4f3c\u6211\u4eec\u8ba4\u77e5\u4e2d\u7684\u955c\u9762\u53cd\u5c04\uff0c\u5b83\u7684\u7279\u5f81\u662f\u57fa\u672c\u7b26\u5408\u955c\u53cd\u5c04\u7684\u89c4\u5f8b\u3002

    \u5728\u9ad8\u5149\u53cd\u5c04\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u534a\u7a0b\u5411\u91cf(half vec)\\(\\vec h = bisector(\\vec v,\\vec l) = \\frac{\\vec v + \\vec l}{||\\vec v + \\vec l||}\\)

    \u5f53 \\(\\vec h\\) \u4e0e \\(\\vec n\\) \u975e\u5e38\u63a5\u8fd1\u65f6\uff0c\u5373 \\(\\alpha = <\\vec n, \\vec h>\\) \u5f88\u5c0f\u65f6\uff0c\u6211\u4eec\u79f0\u4e4b\u7b26\u5408\u9ad8\u5149\u53cd\u5c04\u3002

    \u9ad8\u5149\u53cd\u5c04\u7684\u5f3a\u5ea6\u516c\u5f0f\u5927\u81f4\u5982\u4e0b\uff1a

    \\[ L_s = k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\cos\\alpha)^p=k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\]

    \u5bf9\u6210\u5206\u505a\u89e3\u91ca\uff1a

    \u5206\u6790\u53ef\u5f97\uff0c\\(p\\) \u8d8a\u5927\uff0c\u9ad8\u5149\u8d8a\u96c6\u4e2d\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec02/#blinn-phong-\u53cd\u5c04","title":"Blinn-Phong \u53cd\u5c04","text":"

    Blinn-Phong \u53cd\u5c04\u6a21\u578b(Blinn-Phong Reflection Model)\u53ef\u4ee5\u8bf4\u96c6\u5408\u4e86\u524d\u4e24\u8005\uff0c\u6b64\u5916\u8fd8\u5f15\u5165\u4e86\u73af\u5883\u5149(ambient part)\u3002

    \\[ L_a=k_aI_a \\]

    Blinn-Phong \u53cd\u5c04\u6a21\u578b\u7684\u5927\u81f4\u6210\u5206\u5982\u4e0b\uff1a

    \\[ \\begin{align} L & = L_a + L_d + L_s \\\\ & = k_aI_a + k_d \\cdot \\frac{I}{r^2} \\cdot \\max(0,n\\cdot l) + k_s \\cdot \\frac{I}{r^2} \\cdot \\max(0, \\vec n \\cdot \\vec h)^p \\end{align} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec02/#\u989c\u8272","title":"\u989c\u8272","text":"

    \u4e3a\u4e86\u63cf\u8ff0\u989c\u8272\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u8272\u5f69\u7a7a\u95f4(color spaces)\uff0c\u5e38\u89c1\u7684\u6709 RGB \u548c HSV \u7b49\uff0c\u5bf9\u76f8\u673a\u6765\u8bf4\u6211\u4eec\u66f4\u5e38\u7528\u7684\u662f RGB\u3002

    in py

    \u5728\u7b97\u6cd5\u4e2d\uff0c\u6211\u4eec\u7528\u77e9\u9635\u6765\u5b58\u50a8\u56fe\u50cf\u4fe1\u606f\uff0c\u5176\u4e2d\u5de6\u4e0a\u89d2\u7684\u5143\u7d20\u5750\u6807\u4e3a (0, 0, :)\uff0c\u5176\u4e2d\u7b2c\u4e09\u7ef4\u7528\u6765\u6307\u5b9a\u989c\u8272\u901a\u9053(channel)\uff0c\u6240\u4ee5\u7b2c i \u884c j \u5217\u7684\u50cf\u7d20\u70b9\u8868\u793a\u4e3a (i-1, j-1, :)\uff1b

    \u5728\u786c\u4ef6\u4e0a\uff0c\u989c\u8272\u4f20\u611f\u4e3b\u8981\u901a\u8fc7\u62dc\u5c14\u6ee4\u955c(Bayer filter)\u5b9e\u73b0\u3002\u4e5f\u5c31\u662f\u901a\u8fc7\u5728\u4f20\u611f\u5668\u524d\u5b89\u88c5\u4e00\u4e2a\u5355\u8272\u6ee4\u955c\uff0c\u6765\u63a5\u6536\u5355\u4e00\u8272\u5149\u3002\u5e38\u89c1\u7684\u505a\u6cd5\u662f\u4ee5\u7530\u5b57\u683c\u7684\u56db\u4e2a\u4f20\u611f\u5668\u4e3a\u5355\u4f4d\uff0c\u5206\u914d R*1 G*2 B*1 \u7684\u6ee4\u955c\u3002

    Source: https://en.wikipedia.org/wiki/Bayer_filter

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7eff\u8272\u7684\u6ee4\u955c\u66f4\u591a\uff0c\u56e0\u4e3a\u592a\u9633\u5149\u4e2d\u7eff\u8272\u6ce2\u6bb5\u66f4\u591a\uff0c\u4e8e\u662f\u4eba\u773c\u5bf9\u7eff\u8272\u66f4\u654f\u611f\u3002

    \u663e\u7136\uff0c\u8fd9\u6837\u5f97\u5230\u7684\u56fe\u7247\u9700\u8981\u8fdb\u884c\u63d2\u503c\u624d\u80fd\u5f97\u5230\u6700\u7ec8\u56fe\u7247\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/","title":"Lecture 3 | Image Processing","text":"

    \u7ea6 5940 \u4e2a\u5b57 3 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 30 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u57fa\u672c\u64cd\u4f5c","title":"\u57fa\u672c\u64cd\u4f5c","text":"

    \u5bf9\u56fe\u50cf\u7684\u57fa\u672c\u64cd\u4f5c\u5373\u5728\u56fe\u50cf\u7f16\u8f91\u8f6f\u4ef6\u4e2d\u5e38\u89c1\u7684\u90a3\u4e48\u51e0\u79cd\uff0c\u7a0d\u540e\u6211\u4eec\u5c06\u4f1a\u7b80\u5355\u4ecb\u7ecd\u8fd9\u51e0\u79cd\u64cd\u4f5c\u662f\u5982\u4f55\u5b9e\u73b0\u7684\u3002

    \u4e0d\u8fc7\u5728\u6b64\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5148\u4ecb\u7ecd\u4e00\u4e2a\u5de5\u5177\u2014\u2014\u5377\u79ef(convolution)\uff0c\u4e4b\u540e\u4e00\u4e9b\u64cd\u4f5c\u90fd\u4f9d\u8d56\u4e8e\u6b64\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5377\u79ef","title":"\u5377\u79ef","text":"

    \u6570\u5b66\u4e0a\u5bf9\u5377\u79ef(convolution)\u7ed9\u51fa\u7684\u5b9a\u4e49\u662f\uff1a

    \\[ (f*g)(x)=\\int_{-\\infty}^{\\infty} f(y)g(x-y)\\mathrm{d}y \\]

    \u7b2c\u4e00\u6b21\u63a5\u89e6\u8fd9\u4e2a\u5f0f\u5b50\u7684\u65f6\u5019\u6211\u4e2a\u4eba\u611f\u89c9\u662f\u4e00\u5934\u96fe\u6c34\u7684\u3002\u4f46\u662f\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u4ece\u4e00\u4e2a\u66f4\u76f4\u89c2\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u4e00\u4e0b\u8fd9\u4e2a\u5f0f\u5b50\uff1a

    \u4e00\u8a00\u4ee5\u853d\u4e4b\uff1a\\((f*g)(x)\\) \u662f \\(g(x)\\) \u5728\u6ee4\u6ce2\u89c4\u5219 \\(f(y)\\) \u4e0b\u7684\u52a0\u6743\u5747\u503c\u51fd\u6570\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u5148\u6765\u4ece\u4e00\u7ef4\u79bb\u6563\u7684\u89d2\u5ea6\u6765\u7406\u89e3\u5377\u79ef\uff0c\u5373\uff1a

    \\[ (f*a)_i = \\sum_{j=-m}^{m} f_j * a_{i+j} \\]

    \u5f53\u7136\uff0c\u4e0a\u9762\u53ef\u80fd\u51fa\u73b0 \\(f_{-1}\\) \u8fd9\u79cd\u9b3c\u755c\u7684\u4e1c\u897f\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u8fd9\u91cc\u7684 \\(f\\) \u6570\u5217\u786e\u5b9e\u662f\u5b9a\u4e49\u5728\u6574\u4e2a\u6574\u6570\u8f74\u4e0a\u7684\uff08\u5f53\u7136\u4e0b\u6807\u5565\u7684\u662f\u65e0\u6240\u8c13\u7684\uff0c\u7ec8\u70b9\u5173\u6ce8\u4e0b\u9762\u7684\u6a21\u62df\u8fc7\u7a0b\uff09

    \u6bd4\u5982\uff0c\u6211\u4eec\u6709\u539f\u59cb\u6570\u5217 \\(a_n\\) \u548c\u6ee4\u6ce2\u5668\u6570\u5217 \\(f_m\\) \u5982\u4e0b\uff1a

    \\(a_n\\) 2 4 2 6 2 \\(f_m\\) 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u624b\u52a8\u6a21\u62df\u4e00\u4e0b\u5377\u79ef\u8fc7\u7a0b\uff1a

    \u5377\u79ef\u8fc7\u7a0b \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 1 2 1 0 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times4+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 1 2 1 0 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times4+2\\times2+1\\times6\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(a_n\\) 2 4 2 6 2 \u6b63\u5728\u88ab\u5377\u7684\u6570 \u2b06\ufe0f \u2b06\ufe0f\u2b06\ufe0f \u2b06\ufe0f \\(f_m\\) 0 0 1 2 1 \\(f_m\\) \u7684\u201c\u4e2d\u5fc3\u201d \u2b06\ufe0f \u5377\u79ef\u7684\u8fc7\u7a0b \\(1\\times2+2\\times6+1\\times2\\) \u5377\u51fa\u6765\u7684\u7ed3\u679c - \\(12\\) \\(14\\) \\(16\\) -

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5982\u679c \\(f_m\\) \u6bcf\u4e00\u9879\u90fd\u9664\u4ee5 4\uff0c\u90a3\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u8fc7\u7a0b\u5c31\u662f\u5728\u6c42\u6bcf\u4e00\u9879\u4e0e\u76f8\u90bb\u4e24\u9879\u7684\u52a0\u6743\u5e73\u5747\uff08\u4e2d\u5fc3\u6743\u91cd\u66f4\u5927\uff09\u3002

    \u73b0\u5728\uff0c\u4ece\u79bb\u6563\u4f1a\u5230\u8fde\u7eed\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u4ecb\u7ecd\u6700\u7ecf\u5178\u7684\u4e00\u4e2a\u5377\u79ef\u5e94\u7528\u2014\u2014\"box function\"\uff0c\u5176\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u65f6\u5b9a\u4e49\u5982\u4e0b\uff1a

    \\[ f(x) = \\left\\{ \\begin{array}{} 1 &|x| \\leq 0.5\\\\ 0 &otherwise \\end{array} \\right. \\]

    \u800c\u5c06\u5b83\u5e26\u5165\u5377\u79ef\u7684\u8868\u8fbe\u5f0f\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a

    \\[ (f*g)(x)=\\int_{-0.5}^{0.5}g(x-y)\\mathrm{d}y \\]

    \u90a3\u5b9e\u9645\u4e0a\uff0c\u8fd9\u5c31\u662f\u5728\u6c42\u51fd\u6570\u5728\u5bbd\u5ea6\u4e3a 1 \u7684\u8303\u56f4\u5185\u7684\u5747\u503c\u3002

    \u73b0\u5728\uff0c\u6211\u4eec\u5c06\u5b83\u8fdb\u884c\u4e00\u70b9\u6269\u5c55\uff0c\u6765\u5230\u4e8c\u7ef4\uff0c\u5219\u53ef\u4ee5\u5c06\u79bb\u6563\u7684\u5377\u79ef\u8fc7\u7a0b\u7528\u8fd9\u6837\u4e00\u4e2a gif \u6765\u8868\u793a\uff1a

    \u601d\u8003

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u4e8c\u7ef4\u5377\u79ef\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u5377\u51fa\u6765\u7684\u4e1c\u897f\u8981\u6bd4\u539f\u59cb\u56fe\u50cf\u5c0f\u3002\u800c\u5176\u4e2d\u4e00\u79cd\u89e3\u51b3\u7684\u65b9\u6cd5\u662f padding\u3002\u5728\u6b64\u4e0d\u505a\u8fc7\u591a\u4ecb\u7ecd\u3002

    \u5178\u578b\u6ee4\u6ce2\u5668

    \u5176\u4ed6\u5178\u578b\u7684\u6ee4\u6ce2\u5668\u53ef\u80fd\u5c06\u5728\u4e4b\u540e\u4ecb\u7ecd\uff0c\u8fd9\u91cc\u7b80\u5355\u63d0\u51e0\u4e2a\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u589e\u52a0\u5bf9\u6bd4\u5ea6","title":"\u589e\u52a0\u5bf9\u6bd4\u5ea6","text":"

    \u589e\u52a0\u5bf9\u6bd4\u5ea6(increase contrast)\u5373\u8ba9\u753b\u9762\u4e2d\u7684\u989c\u8272\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u901a\u4fd7\u6765\u8bf4\u5c31\u662f\u9ed1\u7684\u66f4\u9ed1\uff0c\u767d\u7684\u66f4\u767d\u3002

    \u4f53\u611f\u4e0a\u8ba9\u4e00\u5f20\u96fe\u8499\u8499\u7684\u7167\u7247\u53d8\u5f97\u66f4\u52a0\u9ed1\u767d\u5206\u660e\u3002

    \u4e0a\u9762\u4e5f\u8bf4\u4e86\uff0c\u662f\u5c06\u8272\u5f69\u5411\u4e24\u4e2a\u6781\u7aef\u504f\u79fb\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u8bb2\u539f\u6765\u7684\u989c\u8272\u8fdb\u884c\u4e00\u4e2a\u6620\u5c04\uff0c\u4ee4 \\(color'(x,y) = f[color(x,y)]\\)\u3002

    \u90a3\u4e48\u4e00\u822c\u6765\u8bf4\uff0c\u6211\u4eec\u91c7\u7528S \u66f2\u7ebf(S curve)\u6765\u8fdb\u884c\u8fd9\u4e2a\u6620\u5c04\uff0c\u4e5f\u5c31\u662f\u5c06\u539f\u672c\u5747\u5300\u5206\u5e03\u7684\u70b9\u6309\u7167 S \u66f2\u7ebf\u8fdb\u884c\u62c9\u4f38\u548c\u538b\u7f29\uff0c\u8fd9\u6837\uff0c\u767d\u7684\u4f1a\u66f4\u767d\uff0c\u9ed1\u7684\u5c31\u4f1a\u66f4\u9ed1\u3002

    \u56fe\u4e2d\u6a2a\u5750\u6807\u8868\u793a\u539f\u6765\u7684\u989c\u8272\uff0c\u7eb5\u5750\u6807\u8868\u793a\u6620\u5c04\u540e\u7684\u989c\u8272\uff0c\u53ef\u4ee5\u53d1\u73b0\u9ed1\u8272\u90e8\u5206\u7684\u989c\u8272\u90fd\u5411\u9ed1\u8272\u504f\u79fb\uff0c\u767d\u8272\u90e8\u5206\u4ea6\u7136\u3002

    \u800c\u5177\u4f53\u4f7f\u7528\u7684\u66f2\u7ebf\uff0c\u5219\u9700\u8981\u6839\u636e\u9700\u6c42\u8fdb\u884c\u8c03\u6574\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cd\u8272","title":"\u53cd\u8272","text":"

    \u987e\u540d\u601d\u4e49\uff0c\u56fe\u50cf\u53d6\u53cd\u8272(image invert)\u5c31\u662f\u5c06\u989c\u8272\u53d6\u53cd\uff0c\u9ed1\u53d8\u767d\uff0c\u767d\u53d8\u9ed1\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u8fb9\u7f18\u63d0\u53d6","title":"\u8fb9\u7f18\u63d0\u53d6","text":"

    \u8fb9\u7f18\u63d0\u53d6 Edge detection

    \u5f15\u5165

    \u6a21\u7cca(blur) \u548c \u9510\u5316(sharpen) \u662f\u4e24\u4e2a\u5bf9\u5e94\u7684\u6982\u5ff5\uff0c\u5b9e\u73b0\u7684\u624b\u6bb5\u4e5f\u975e\u5e38\u7c7b\u4f3c\u3002

    \u4f7f\u7528\u5bf9\u6bd4

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6a21\u7cca","title":"\u6a21\u7cca","text":"

    \u6240\u8c13\u7684\u6a21\u7cca(blur)\uff0c\u50cf\u662f\u5c06\u67d0\u4e2a\u4f4d\u7f6e\u7684\u50cf\u7d20\u548c\u5468\u56f4\u6df7\u5408\u8d77\u6765\uff0c\u66f4\u6570\u5b66\u7684\u8868\u8ff0\u6765\u8bf4\uff0c\u9700\u8981\u4e0e\u5468\u56f4\u8fdb\u884c\u52a0\u6743\u6c42\u5e73\u5747\uff0c\u6ca1\u9519\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u5377\u79ef\u6765\u5b9e\u73b0\u3002

    Source: Stanford CS248, Winter 202

    \u4f8b\u5982\uff0c\u5047\u8bbe\u6211\u4eec\u7528\u8fd9\u6837\u4e00\u4e2a\u4e8c\u7ef4\u6ee4\u6ce2\u5668\u5bf9\u4e00\u5f20\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\uff1a

    \\[ \\begin{bmatrix} \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\\\ \\frac{1}{9} & \\frac{1}{9} & \\frac{1}{9} \\end{bmatrix} \\]

    \u90a3\u4e48\u65b0\u5f97\u5230\u7684\u56fe\u7247\u4e2d\u7684\u50cf\u7d20\u5c06\u4f1a\u7b49\u4e8e\u539f\u56fe\u7247\u8fd9\u4e2a\u50cf\u7d20\u5468\u56f4\u7684 8 \u4e2a\u50cf\u7d20\u548c\u5b83\u6c42\u5e73\u5747\u5f97\u5230\u7684\u989c\u8272\u3002

    \u518d\u6bd4\u5982\uff0c\u6ee4\u6ce2\u5668\u4f7f\u7528\u9ad8\u65af\u51fd\u6570\u7684\u9ad8\u65af\u6a21\u7cca\uff1a

    \\[ f(i,j)=\\frac{1}{2\\pi \\sigma^2}e^{-\\frac{i^2+j^2}{2\\sigma^2}} \\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\;\\; \\begin{bmatrix} 0.075 & 0.124 & 0.075 \\\\ 0.124 & 0.204 & 0.124 \\\\ 0.075 & 0.124 & 0.075 \\end{bmatrix} \\]

    \u9ad8\u65af\u6a21\u7cca\u4f1a\u66f4\u52a0\u6ce8\u91cd\u4e2d\u5fc3\u7684\u6743\u91cd\uff0c\u6240\u4ee5\u6a21\u7cca\u8d77\u6765\u76f8\u5bf9\u6765\u8bf4\u66f4\u80fd\u4fdd\u6301\u56fe\u7247\u539f\u6765\u7684\u7279\u5f81\u4e00\u70b9\u3002

    \u66f4\u4f18\u79c0\u7684\u4e00\u79cd\u6a21\u7cca

    \u4e00\u79cd\u66f4\u6709\u7528\u7684\u6a21\u7cca\u662f\uff0c\u63d0\u53d6\u8fb9\u7f18\u540e\u7684\u6a21\u7cca\uff0c\u5373\u6a21\u7cca\u8fc7\u7a0b\u4e2d\u4e0d\u5f71\u54cd\u8fb9\u7f18\uff0c\u6bd4\u5982\u4eba\u8138\u8fb9\u7f18\u6a21\u7cca\uff0c\u53ea\u5f71\u54cd\u8138\u800c\u4e0d\u5f71\u54cd\u5176\u4ed6\u90e8\u5206\u3002

    \u5177\u4f53\u5b9e\u73b0\u6211\u4eec\u5c06\u5728 \u518d\u770b\u6ee4\u6ce2\u5668 \u4e2d\u7684 \u53cc\u8fb9\u6ee4\u6ce2\u5668\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u9510\u5316","title":"\u9510\u5316","text":"

    \u6211\u4eec\u6ce8\u610f\u5230\uff0c\u6a21\u7cca\u4e2d\u7684\u6ee4\u6ce2\u5668\u57fa\u672c\u4e0a\u6bcf\u4e00\u4e2a\u5143\u7d20\u90fd\u662f\u975e\u8d1f\u6570\uff0c\u610f\u601d\u662f\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u4fdd\u7559\u4e00\u90e8\u5206\u8fd9\u4e9b\u50cf\u7d20\u7684\u7279\u5f81\u3002

    \u90a3\u5982\u679c\u6211\u4eec\u628a\u5176\u4e2d\u4e00\u90e8\u5206\u6539\u6210\u8d1f\u6570\u5462\uff1f\u90a3\u5c31\u8bf4\u660e\u5377\u79ef\u7ed3\u679c\u4e2d\u4f1a\u51cf\u53bb\u8fd9\u90e8\u5206\u7684\u7279\u5f81\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u5f88\u50cf\uff0c\u90a3\u4e48\u8fd9\u4e2a\u7279\u5f81\u5c31\u4f1a\u88ab\u524a\u5f31\uff1b\u53cd\u8fc7\u6765\u8bf4\uff0c\u5982\u679c\u6743\u503c\u4e3a\u8d1f\u6570\u7684\u50cf\u7d20\u548c\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u51e0\u4e4e\u76f8\u53cd\uff0c\u90a3\u4e48\u6743\u503c\u4e3a\u6b63\u6570\u7684\u50cf\u7d20\u7684\u7279\u5f81\u5c31\u4f1a\u88ab\u52a0\u5f3a\u3002

    \u6211\u4eec\u8003\u8651\u8fd9\u6837\u4e00\u4e2a\u7279\u6b8a\u4f8b\u5b50\uff1a

    \\[ \\begin{bmatrix} 0 & -1 & 0 \\\\ -1 & 5 & -1 \\\\ 0 & -1 & 0 \\end{bmatrix} \\]

    \u5982\u679c\u8fb9\u7f18\u7684\u70b9\u548c\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u4e0d\u4e00\u6837\uff0c\u5219\u77e9\u9635\u4e2d\u5fc3\u7684\u70b9\u7684\u7279\u5f81\u4f1a\u88ab\u5f3a\u8c03\uff0c\u5373\u4f1a\u653e\u5927\u76f8\u90bb\u70b9\u7684\u533a\u522b\uff0c\u8fd9\u5c31\u662f\u9510\u5316(sharpen)\u7684\u539f\u7406\u3002

    Source: Stanford CS248, Winter 202

    \u6a21\u7cca\u4e0e\u9510\u5316\u7684\u8054\u7cfb

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u518d\u770b\u6ee4\u6ce2\u5668","title":"\u518d\u770b\u6ee4\u6ce2\u5668","text":"

    \u4e0a\u9762\u6211\u4eec\u5df2\u7ecf\u63d0\u5230\u4e86\u7528\u4e8e\u6a21\u7cca\u7684\u6ee4\u6ce2\u5668\uff08\u6bd4\u5982\u9ad8\u65af\u6ee4\u6ce2\u5668\uff09\uff0c\u7528\u4e8e\u9510\u5316\u7684\u6ee4\u6ce2\u5668\uff0c\u63a5\u4e0b\u6765\u8ba9\u6211\u4eec\u770b\u770b\u5176\u4ed6\u7684\u6ee4\u6ce2\u5668\u7684\u76f8\u5173\u5185\u5bb9\uff1a

    \u6c34\u5e73/\u5782\u76f4\u68af\u5ea6\u63d0\u53d6

    \\[ \\begin{bmatrix} -1 & 0 & 1 \\\\ -2 & 0 & 2 \\\\ -1 & 0 & 1 \\end{bmatrix} \\] \\[ \\begin{bmatrix} -1 & -2 & -1 \\\\ 0 & 0 & 0 \\\\ 1 & 2 & 1 \\end{bmatrix} \\] \u53ef\u5206\u79bb\u6ee4\u6ce2\u5668 \u53cc\u8fb9\u6ee4\u6ce2\u5668

    \u5f15\u5165

    \u56fe\u50cf\u91c7\u6837(sampling)\u5206\u4e3a\u5411\u4e0a\u91c7\u6837(up-sampling)\u548c\u5411\u4e0b\u91c7\u6837(down-sampling)\u4e24\u79cd\u3002

    \u66f4\u901a\u4fd7\u7684\u6765\u8bf4\uff0c\u5c31\u662f\u5728\u4fdd\u6301\u56fe\u50cf\u7279\u5f81\u7684\u60c5\u51b5\u4e0b\u5bf9\u56fe\u7247\u8fdb\u884c\u7f29\u653e\u3002\u663e\u7136\uff0c\u5728\u7f29\u653e\u56fe\u50cf\u65f6\uff0c\u4f1a\u51fa\u73b0\u50cf\u7d20\u6570\u91cf\u7684\u53d8\u5316\uff0c\u90a3\u8981\u5982\u4f55\u6dfb\u52a0\u50cf\u7d20\u3001\u5982\u4f55\u51cf\u5c11\u50cf\u7d20\uff0c\u5c31\u662f\u56fe\u50cf\u91c7\u6837\u8003\u8651\u7684\u4e8b\u60c5\u3002

    \u6b64\u5916\uff0c\u5c06\u4e24\u8005\u7ed3\u5408\uff0c\u8fd8\u4f1a\u6709\u4f8b\u5982\u6539\u53d8\u56fe\u7247\u957f\u5bbd\u6bd4\uff0c\u8fdb\u884c\u62c9\u4f38\u8fd9\u79cd\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7f29\u5c0f\u56fe\u7247\u5411\u4e0b\u91c7\u6837","title":"\u7f29\u5c0f\u56fe\u7247\uff1a\u5411\u4e0b\u91c7\u6837","text":"

    \u5411\u4e0b\u91c7\u6837\u4e5f\u5c31\u662f\u8ba9\u56fe\u7247\u53d8\u5c0f\uff0c\u8fd9\u91cc\u4e3b\u8981\u9700\u8981\u8003\u8651\u7684\u95ee\u9898\u662f\u5982\u4f55\u7f29\u5c0f\u56fe\u7247\uff0c\u5982\u4f55\u907f\u514d\u51fa\u73b0\u4fe1\u53f7\u8d70\u6837\u7684\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u4fe1\u53f7\u8d70\u6837","title":"\u4fe1\u53f7\u8d70\u6837","text":"

    \u8bf4\u5230\u8ba9\u56fe\u50cf\u53d8\u5c0f\uff0c\u6700\u7b80\u5355\u7684\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u2014\u2014\u6bd4\u5982\uff0c\u8ba9\u56fe\u7247\u7684\u7ebf\u5ea6\u7f29\u5c0f\u4e00\u534a\uff0c\u53ef\u4ee5\u6bcf\u56db\u4e2a\u683c\u5b50\u5c31\u91c7\u4e00\u4e2a\u683c\u5b50\u7684\u6837\u672c\u3002

    \u800c\u8fd9\u79cd\u7c97\u66b4\u7684\u505a\u6cd5\u5219\u6709\u53ef\u80fd\u5bfc\u81f4\uff1a

    -\u6469\u5c14\u7eb9(Moir\u00e9 Patterns)\u3002 -\u9a6c\u8f66\u8f6e\u9519\u89c9(Wagon Wheel Illusion) - ...

    \u800c\u8fd9\u4e9b\u7531\u91c7\u6837\u5bfc\u81f4\u7684\u95ee\u9898\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4fe1\u53f7\u8d70\u6837(aliasing)\u3002

    \u4ece\u672c\u8d28\u4e0a\u6765\u8bf4\uff0c\u4fe1\u53f7\u8d70\u6837\u7684\u53d1\u751f\uff0c\u662f\u56e0\u4e3a\u91c7\u6837\u9891\u7387\u8ddf\u4e0d\u4e0a\u56fe\u50cf\u9891\u7387\u5bfc\u81f4\u7684\u3002

    Signals are changing too fast but sampled too slow.

    \u5982\u4f55\u7406\u89e3\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d

    \u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u4f1a\u7ed9\u51fa\u8fd9\u91cc\u7684\u201c\u9891\u7387\u201d\u7684\u6765\u6e90\u3002

    \u4f46\u662f\u4e00\u4e2a\u66f4\u76f4\u89c2\uff0c\u66f4\u6a21\u7cca\u7684\u770b\u6cd5\u662f\uff1a\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u3002\u6bd4\u5982\u56fe\u50cf\u4e2d\u6709\u4e00\u4e2a\u975e\u5e38\u5206\u660e\u7684\u8fb9\u754c\uff0c\u90a3\u4e48\u5b83\u7684\u9891\u7387\u4e00\u822c\u4e0d\u4f1a\u4f4e\u3002

    \u800c\u8fd9\u91cc\u7684\u201c\u91c7\u6837\u9891\u7387\u201d\u8861\u91cf\u4e86\u4fe1\u53f7\u53d8\u5316\u7684\u9891\u7387\u3002

    \u6bd4\u5982\uff0c\u5982\u679c\u5bf9\u4e00\u4e2a\u6b63\u5f26\u6ce2\u8fdb\u884c\u91c7\u6837\uff0c\u5373\u4ece\u4e00\u4e2a\u8fde\u7eed\u7684\u6b63\u5f26\u6a21\u62df\u4fe1\u53f7\u4e2d\u9009\u53d6\u82e5\u5e72\u70b9\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u540c\u91c7\u6837\u9891\u7387\u548c\u4e0d\u540c\u7684\u56fe\u50cf\u9891\u7387\u7684\u9009\u53d6\u65b9\u6848\u4f1a\u4ea7\u751f\u4e0d\u540c\u7684\u7ed3\u679c\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5bf9\u4e8e\u4e0a\u9762\u7684\u51e0\u4e2a\u51fd\u6570\uff0c\u91c7\u6837\u9891\u7387\u548c\u539f\u51fd\u6570\u7684\u9891\u7387\u5339\u914d\u8f83\u597d\uff0c\u6240\u4ee5\u91c7\u6837\u5f97\u5230\u7684\u70b9\u57fa\u672c\u80fd\u53cd\u6620\u51fa\u539f\u6765\u56fe\u5f62\u7684\u7279\u5f81\uff1b\u4f46\u662f\u5bf9\u4e8e\u6bd4\u8f83\u4e0b\u9762\u7684\u51e0\u4e2a\u66f2\u7ebf\uff0c\u91c7\u6837\u5c31\u4e0d\u662f\u5f88\u7406\u60f3\u4e86\u3002

    \u6bd4\u8f83\u76f4\u89c2\u7684\u4e00\u4e2a\u60f3\u6cd5\u662f\uff0c\u8fc7\u6162\u70b9\u91c7\u6837\u9891\u7387\u4f1a\u5bfc\u81f4\u4fe1\u606f\u4e22\u5931\uff0c\u751a\u81f3\u662f\u8868\u73b0\u51fa\u5176\u5b83\u9891\u7387\u7684\u4fe1\u53f7\u7684\u7279\u5f81\uff0c\u8fd9\u4e9b\u4e0d\u6b63\u5e38\u7684\u884c\u4e3a\u5c31\u5bfc\u81f4\u4e86\u4fe1\u53f7\u8d70\u6837\u3002

    \u8fd9\u4e2a\u201c\u9891\u7387\u201d\u548c\u56fe\u50cf\u6709\u4ec0\u4e48\u5173\u7cfb\uff1f

    \u9996\u5148\u6211\u4eec\u77e5\u9053\uff0c\u8981\u5411\u6709\u201c\u9891\u7387\u201d\u8fd9\u4e2a\u5c5e\u6027\uff0c\u8868\u8fbe\u5f0f\u6216\u8005\u8bf4\u51fd\u6570\u9700\u8981\u662f\u5468\u671f\u6027\u7684\u3002\u7136\u800c\u201c\u5468\u671f\u6027\u201d\u5bf9\u4e8e\u4efb\u610f\u51fd\u6570\u6765\u8bf4\u53ef\u80fd\u662f\u4e00\u4e2a\u8f83\u4e3a\u82db\u523b\u7684\u6761\u4ef6\u3002

    \u6b64\u65f6\u5c31\u8f6e\u5230\u5085\u7acb\u53f6\u53d8\u6362\u767b\u573a\u4e86\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#fourier-\u53d8\u6362","title":"Fourier \u53d8\u6362","text":"

    \u6700\u7b80\u5355\u76f4\u767d\u5730\u7406\u89e3\u5085\u7acb\u53f6\u53d8\u6362(Fourier Transform)\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5c06\u4efb\u610f\u53ef\u4ee5\u8fdb\u884c\u5085\u7acb\u53f6\u53d8\u6362\u7684\u51fd\u6570\uff0c\u53d8\u5316\u4e3a\u4e00\u4e2a\u6b63\u5f26\u3001\u4f59\u5f26\u51fd\u6570\u7ea7\u6570\u7684\u5f62\u5f0f\u3002

    \u4f8b\u5982\u6700\u7ecf\u5178\u7684\uff0c\u4f7f\u7528\u4e0d\u540c\u9891\u7387\u7684\u6b63\u5f26\u6ce2\u6765\u62df\u5408\u4e00\u4e2a\u65b9\u6ce2\u3002

    \u8fd9\u91cc\u5f15\u6d41\u4e00\u4e2a xg \u7684\u89c6\u9891\uff1ahttps://www.bilibili.com/video/BV1Y7411W73U/

    \u6b64\u65f6\u4f60\u53ef\u80fd\u4f1a\u95ee\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u7ea7\u6570\u4e5f\u4e0d\u4fdd\u8bc1\u6709\u5468\u671f\u554a\uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u7684\u76ee\u7684\u5e76\u4e0d\u662f\u627e\u5230\u4e00\u4e2a\u5468\u671f\uff0c\u800c\u662f\u80fd\u591f\u4f7f\u7528\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u7684\u67d0\u4e9b\u7279\u5f81\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u6b63\u4f59\u5f26\u51fd\u6570\u662f\u5177\u6709\u5468\u671f\u6027\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u53ef\u4ee5\u7528\u8fd9\u4e2a\u7ea7\u6570\u4e2d\u7684\u6b63\u4f59\u5f26\u51fd\u6570\u7684\u9891\u7387\u6765\u8868\u8fbe\u8fd9\u4e2a\u51fd\u6570\u3002

    \u4e0b\u9762\u8fd9\u5f20\u56fe\u7247\u5c31\u662f\u7f16\u7801\u540e\u7684\u9891\u8c31\u3002

    \u800c\u5728\u6b27\u62c9\u516c\u5f0f \\(e^{i\\theta} = \\cos\\theta + i\\sin\\theta\\) \u7684\u7edf\u4e00\u4e0b\uff0cFourier \u53d8\u6362\u53ef\u4ee5\u8868\u793a\u4e3a\uff1a

    \\[ F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x \\\\ f(x) = \\int^{\\infty}_{-\\infty} F(u) e^{i2\\pi ux} \\rm{d} u \\\\ \\text{ where 'x' refers to space, 'u' refers to frequency} \\]

    \u901a\u8fc7\u8fd9\u79cd\u5f62\u5f0f\uff0c\u6211\u4eec\u5b9e\u73b0\u4e86 spatial domain \u548c frequency domain \u4e4b\u95f4\u7684\u7edf\u4e00\u3002

    graph LR;\nA([\"spatial domain\"]) ==>|\"Fourier transform\"| B([\"frequency domain\"])\nB ===>|\"Inverse transform\"| A

    \u5c1d\u8bd5\u4f7f\u7528\u5377\u79ef\u7684\u89d2\u5ea6\u6765\u770b\u5085\u7acb\u53f6\u53d8\u6362

    \u89c2\u5bdf\u5f0f\u5b50 \\(F(u) = \\int^{\\infty}_{-\\infty} f(x) e^{-i2\\pi ux} \\rm{d} x\\)\uff0c\u662f\u4e0d\u662f\u80fd\u5c06\u5b83\u770b\u4f5c\u4e00\u4e2a\u5377\u79ef\u5f0f\u5462\uff1f

    \u4e00\u4e2a\u6709\u610f\u601d\u7684\u6027\u8d28

    \u800c\u4f7f\u7528 Fourier \u7684\u53e6\u5916\u4e00\u4e2a\u597d\u5904\u662f\uff0c\u5b83\u4e3a\u6211\u4eec\u5e26\u6765\u4e86\u8fd9\u6837\u4e00\u4e2a\u6570\u5b66\u6027\u8d28\uff1a

    Spatial Domain Frequency Domain \\(g(x) = f(x) * h(x)\\) Convolution \\(\\leftrightarrow\\) \\(G(u) = F(u)H(u)\\) Multiplication g(x)=f(x)h(x) Multiplication \\(\\leftrightarrow\\) \\(G(u) = F(u) * H(u)\\) Convolution

    \u5177\u4f53\u6765\u8bf4\uff0c\u4f8b\u5982\uff1a

    \u6211\u4eec\u5bf9\u4e00\u4e2a\u56fe\u50cf\u8fdb\u884c\u6a21\u7cca\u5904\u7406\uff0c\u5373\u5c06\u56fe\u50cf\u4e0e Blur Kernel \u8fdb\u884c\u5377\u79ef\uff0c\u5c31\u7b49\u6548\u4e8e\u5c06\u8fd9\u4e24\u4e2a\u77e9\u9635\u5728\u9891\u7387\u57df\u4e2d\u76f8\u4e58\u3002

    \u800c\u4f20\u7edf\u56fe\u50cf\u538b\u7f29\uff0c\u5bf9\u5e94\u5230\u9891\u7387\u57df\u4e0a\uff0c\u5c31\u662f\u5c06\u4ed6\u4eec\u7684\u4e8c\u7ef4\u9891\u8c31\u4e2d\u7684\u9ad8\u9891\u4e22\u6389\u3002

    \u90a3\u4e48\u5f97\u5230 Fourier \u53d8\u6362\u8fd9\u4e2a\u5de5\u5177\u4ee5\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5c06\u8f83\u96be\u5904\u7406\u7684\u50cf\u7d20\u4fe1\u606f\u8f6c\u5316\u4e3a\u9891\u7387\u4fe1\u606f\u3002

    \u5982\u4e0b\u56fe\uff0c\u5c06\u4e00\u5f20\u56fe\u7247\u4fe1\u606f\u7f16\u7801\u4e3a\u4e86\u9891\u8c31\u7684\u5f62\u5f0f\u3002\u7531\u4e8e\u8fd9\u91cc\u7684\u9891\u8c31\u662f\u4e8c\u7ef4\u7684\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u5f20\u7070\u5ea6\u56fe\u8868\u73b0\u51fa\u6765\u3002

    \u597d\uff0c\u6709\u4e86\u8fd9\u4e9b\u94fa\u57ab\uff0c\u6211\u4eec\u5728\u56de\u5934\u6765\u8bb2\u91c7\u6837\uff0c\u8fd9\u6b21\u6211\u4eec\u5c06\u5c1d\u8bd5\u7740\u540c\u65f6\u4ece Spatial domain \u548c Frequency domain \u7684\u89d2\u5ea6\u6765\u770b\u5f85\u95ee\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u91c7\u6837","title":"\u91c7\u6837","text":"

    \u9996\u5148\uff0c\u6211\u4eec\u4ece\u5b57\u9762\u610f\u601d\u4e0a\u548c\u76ee\u7684\u4e0a\u6765\u7406\u89e3\u4e00\u4e0b\u91c7\u6837\u3002

    wiki \u4e0a\u5bf9\u91c7\u6837\u7684\u5b9a\u4e49\u662f\u8fd9\u6837\u7684\uff1a

    \u5728\u4fe1\u53f7\u5904\u7406\u9886\u57df\uff0c\u91c7\u6837\u662f\u5c06\u4fe1\u53f7\u4ece\u8fde\u7eed\u65f6\u95f4\u57df\u4e0a\u7684\u6a21\u62df\u4fe1\u53f7\u8f6c\u6362\u5230\u79bb\u6563\u65f6\u95f4\u57df\u4e0a\u7684\u79bb\u6563\u4fe1\u53f7\u7684\u8fc7\u7a0b\u3002

    \u663e\u7136\uff0c\u6211\u4eec\u8fd9\u91cc\u91c7\u6837\u7684\u5b9a\u4e49\u548c\u8fd9\u91cc\u7684\u5b9a\u4e49\u5e76\u4e0d\u4e00\u6837\u3002\u4e0e\u4e4b\u4e0d\u540c\u7684\u662f\uff0c\u6211\u4eec\u9700\u8981\u4ece\u539f\u59cb\u7684\uff0c\u8fd1\u4f3c\u8fde\u7eed\u7684\u56fe\u7247\u4e2d\u63d0\u53d6\u51fa\u5177\u6709\u7279\u5f81\u7684\u4e00\u4e9b\u540c\u6837\u662f\u79bb\u6563\u7684\u7684\u4fe1\u606f\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6211\u4eec\u5c06\u56fe\u7247\u8fdb\u884c\u653e\u5927\u7f29\u5c0f\u53d8\u6362\u7684\u76ee\u7684\u3002

    \u5173\u4e8e\u91c7\u6837\u66f4\u6570\u5b66\u7684\u5b9a\u4e49\uff0c\u5c31\u662f\u4f7f\u7528\uff08\u68b3\u5f62\uff09\u8109\u51b2\u51fd\u6570(Dirac comb function)\u53bb\u4e58\u88ab\u91c7\u6837\u7684\u51fd\u6570\u3002

    \u53d6\u51b3\u4e8e\u8109\u51b2\u51fd\u6570\u7684\u9891\u7387\uff0c\u91c7\u6837\u53c8\u88ab\u5206\u4e3a\u5bc6\u96c6\u91c7\u6837(Dense sampling)\u548c\u7a00\u758f\u91c7\u6837(Sparse sampling)\uff0c\u4e5f\u5c31\u5206\u522b\u5bf9\u5e94\u7740\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u91c7\u6837\u9891\u7387\u8f83\u9ad8\u548c\u91c7\u6837\u9891\u7387\u8f83\u4f4e\u7684\u60c5\u51b5\u3002

    \u800c\u7a00\u758f\u91c7\u6837\u5bfc\u81f4\u7684\u4fe1\u53f7\u8d70\u6837\u95ee\u9898\uff0c\u5c31\u662f\u91c7\u6837\u7ed3\u679c\u518d\u9891\u7387\u57df\u4e2d\u51fa\u73b0\u4e86\u4ea4\u96c6\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u51cf\u5c11\u8d70\u6837","title":"\u51cf\u5c11\u8d70\u6837","text":"

    \u65e2\u7136\u641e\u6e05\u695a\u4e86\u8d70\u6837\u662f\u5982\u4f55\u4ea7\u751f\u7684\uff0c\u90a3\u63a5\u4e0b\u6765\u6211\u4eec\u5c31\u9700\u8981\u8003\u8651\u5982\u4f55\u51cf\u5c11\u4fe1\u53f7\u8d70\u6837\u3002

    \u603b\u4f53\u6765\u8bf4\uff0c\u6709\u8fd9\u4e48\u4e24\u79cd\u9009\u62e9\uff1a

    1. \u63d0\u9ad8\u91c7\u6837\u9891\u7387\uff1b
    2. \u5148\u8fc7\u6ee4\u9ad8\u9891\u518d\u91c7\u6837\uff1b

    \u9996\u5148\u6211\u4eec\u56de\u987e\u77e5\u9053\uff0c\u8d70\u6837\u662f\u7531\u4e8e\u91c7\u6837\u9891\u7387\u4f4e\u4e8e\u56fe\u50cf\u9ad8\u9891\u5bfc\u81f4\u7684\uff0c\u90a3\u4e48\u6211\u4eec\u53ea\u9700\u8981\u63d0\u9ad8\u91c7\u6837\u9891\u7387\u5c31\u80fd\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u4e86\u3002

    \u800c\u5177\u4f53\u9700\u8981\u63d0\u9ad8\u5230\u591a\u5c11\u5462\uff1f\u5c31\u9700\u8981\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406(Nyquies-Shannon Theorem)\u3002

    \u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406

    \u5f53\u7136\uff0c\u4e3a\u4e86\u8de8\u8fc7\u4e00\u4e2a\u66f4\u9ad8\u7684\u95e8\u69db\u6211\u4eec\u4e5f\u4e0d\u4e00\u5b9a\u9700\u8981\u589e\u957f\u81ea\u5df1\u7684\u817f\u3002\u5728\u80fd\u591f\u63a5\u53d7\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u62e9\u964d\u4f4e\u95e8\u69db\u2014\u2014\u5373\uff0c\u5148\u5c06\u9ad8\u9891\u6ee4\u6ce2\uff0c\u518d\u8fdb\u884c\u91c7\u6837\u3002

    \u66f4\u5f62\u8c61\u5730\u6765\u8bf4\uff0c\u5728\u9891\u7387\u57df\u4e2d\u53bb\u6389\u4ea4\u96c6\u7684\u624b\u6bb5\u4e3a\uff1a

    \u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f

    \u56de\u987e\u6211\u4eec\u4e00\u5f00\u59cb\u7ed9\u51fa\u7684\uff0c\u5173\u4e8e\u9891\u7387\u7684\u4e00\u4e2a\u6a21\u7cca\u7684\u7406\u89e3\uff0c\u201c\u5982\u679c\u4e00\u4e2a\u56fe\u50cf\u7684\u67d0\u4e2a\u90e8\u5206\u53d8\u5316\u8d8a\u5267\u70c8\uff0c\u4e00\u822c\u6765\u8bf4\u5176\u9891\u7387\u5c31\u4f1a\u8f83\u5927\u201d\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8981\u6d88\u53bb\u8fd9\u4e2a\u9ad8\u9891\uff0c\u6211\u4eec\u5c31\u9700\u8981\u8ba9\u62b9\u53bb\u8fd9\u4e9b\u201c\u53d8\u5316\u5267\u70c8\u201d\u7684\u6210\u5206\u3002\u518d\u63a5\u5730\u6c14\u4e00\u70b9\uff0c\u5c31\u662f\u6211\u4eec\u9700\u8981\u5c06\u8fd9\u4e9b\u68f1\u89d2\u62b9\u5f00\u2014\u2014\u6240\u4ee5\u4e00\u79cd\u624b\u6bb5\u5c31\u662f\u8fdb\u884c\u6a21\u7cca\u3002

    \u4e00\u4e2a\u76f4\u89c2\u7684 \ud83c\udf30

    \u6211\u4eec\u4ee5\u5bf9\u4e00\u4e2a\u4e09\u89d2\u5f62\u91c7\u6837\u4e3a\u4f8b\uff0c\u8bf4\u660e\u5982\u4f55\u6ee4\u9ad8\u9891\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u76f4\u63a5\u91c7\u6837\u4f1a\u5bfc\u81f4\u7ed3\u679c\u4e0d\u592a\u7406\u60f3\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u91c7\u6837\u4e4b\u524d\u8fdb\u884c\u4e00\u6b21\u6a21\u7cca\u64cd\u4f5c\uff1a

    \u5b83\u5c06\u8d85\u8fc7\u5948\u594e\u65af\u9891\u7387\u7684\u90e8\u5206\u6ee4\u6ce2\u540e\uff0c\u660e\u663e\u53d1\u73b0\u91c7\u6837\u4fdd\u7559\u7684\u539f\u672c\u56fe\u50cf\u7684\u7279\u5f81\u66f4\u591a\u4e86\u3002

    \u800c\u8fd9\u91cc\u5c31\u4ea7\u751f\u4e86\u4e00\u4e2a\u6bd4\u8f83\u8d34\u8fd1\u65e5\u5e38\u751f\u6d3b\u7684\u8bcd\uff0c\u53eb\u6297\u952f\u9f7f(anti-aliasing)\uff0c\u6216\u8005\u8bf4\u53cd\u8d70\u6837\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","title":"\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406","text":"

    \u9996\u5148\u89c4\u5b9a\u9891\u5e26\u9650\u5236\u4fe1\u53f7(band-limited signal) \\(f_0\\) \u662f\u56fe\u50cf\u9891\u7387\u7684\u4e00\u4e2a\u4e0a\u754c\uff1b\u5219\u5948\u594e\u65af\u91c7\u6837\u5b9a\u7406\u6307\u51fa\uff0c\u5982\u679c\u91c7\u6837\u9891\u7387\u5927\u4e8e \\(2f_0\\)\uff0c\u5219\u8be5\u91c7\u6837\u5f97\u5230\u7684\u7ed3\u679c\u53ef\u4ee5\u5b8c\u7f8e\u8868\u5f81\u539f\u51fd\u6570\u7684\u7279\u5f81\uff0c\u5373 \"perfectly reconstruct\"\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u653e\u5927\u56fe\u7247\u5411\u4e0a\u91c7\u6837--\u63d2\u503c","title":"\u653e\u5927\u56fe\u7247\uff1a\u5411\u4e0a\u91c7\u6837 / \u63d2\u503c","text":"

    \u56fe\u50cf\u653e\u5927(image magnification)\u662f\u56fe\u50cf\u7f29\u5c0f\u7684\u9006\u53d8\u6362(\u5e9f\u8bdd)\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u5e76\u4e0d\u80fd\u4e25\u683c\u5730\u8bf4\u662f\u9006\u53d8\u6362\uff0c\u56e0\u4e3a\u56fe\u50cf\u7f29\u5c0f\u4e0e\u56fe\u50cf\u653e\u5927\u90fd\u662f\u4e0d\u53ef\u9006\u7684\u2014\u2014\u5373\uff0c\u56fe\u7247\u7f29\u5c0f\u5fc5\u7136\u5e26\u5566\u50cf\u7d20\u635f\u5931\uff0c\u56fe\u50cf\u653e\u5927\u5fc5\u7136\u5e26\u6765\u4e00\u4e9b\u901a\u8fc7\u8ba1\u7b97\u5f97\u5230\u7684\u8fd1\u4f3c\u50cf\u7d20\uff0c\u800c\u8fd9\u4e9b\u50cf\u7d20\u5728\u53d8\u6362\u5f97\u5230\u7684\u7ed3\u679c\u56fe\u50cf\u4e2d\u4e0e\u539f\u672c\u50cf\u7d20\u662f\u65e0\u6cd5\u533a\u5206\u7684\u3002

    \u90a3\u4e48\uff0c\u5355\u5c31\u56fe\u50cf\u653e\u5927\u6765\u8bf4\uff0c\u6211\u4eec\u5c31\u9700\u8981\u6839\u636e\u5df2\u6709\u7684\u50cf\u7d20\uff0c\u8fdb\u884c\u4e00\u4e9b\u63d2\u503c(interpolation)\u64cd\u4f5c\uff0c\u4ee5\u751f\u6210\u90a3\u4e9b\u653e\u5927\u8fc7\u7a0b\u4e2d\u65b0\u51fa\u73b0\u7684\u50cf\u7d20\u3002

    \u6211\u4eec\u4ece\u5bf9\u4e00\u4e2a\u4e00\u5143\u4e00\u7ef4\u51fd\u6570\u63d2\u503c\u7684\u89d2\u5ea6\u6765\u770b\u8fd9\u4e2a\u95ee\u9898\uff0c\u5373\u628a\u8fd9\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u5728\u91c7\u6837\u5f53\u4e2d\u63d2\u5165\u70b9\u7684\u95ee\u9898\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u73b0\u5728\u6709\u4e00\u4e2a\u6765\u81ea\u4e8e\u6b63\u5f26\u51fd\u6570\u7684\u91c7\u6837\uff0c\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u5728 \\(x\\in(x_i,x_{i+1})\\) \u4e2d\u63d2\u5165\u4e00\u4e2a\u70b9 \\((x_{ip}, y_{ip})\\) \u4f7f\u5f97\u5b83\u5c3d\u53ef\u80fd\u7b26\u5408\u539f\u672c\u7684\u6b63\u5f26\u51fd\u6570\u2014\u2014\u53c8\u6216\u8005\u8bf4\uff0c\u4f7f\u5f97\u5b83\u770b\u8d77\u6765\u5c3d\u53ef\u80fd\u5408\u7406\u3002

    \u800c\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u518d\u8fdb\u4e00\u6b65\u5730\u601d\u8003\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5229\u7528\u73b0\u6709\u7684\u70b9\u53bb\u62df\u5408\u4e00\u4e2a\u65b0\u7684\u51fd\u6570\uff0c\u7136\u540e\u518d\u7528\u8fd9\u4e2a\u51fd\u6570\u4e0a\u53d6\u7684\u70b9\u4f5c\u4e3a\u63d2\u5165\u7684\u70b9\u3002

    \u90a3\u4e48\u6bd4\u8f83\u5e38\u89c1\u7684\u201c\u62df\u5408\u201d\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

    1.\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff1b 2.\u7ebf\u6027\u63d2\u503c(linear interpolation)\uff1b 3.(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\uff1b

    \u63a5\u4e0b\u6765\u6211\u4eec\u4e00\u4e00\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6700\u8fd1\u63d2\u503c","title":"\u6700\u8fd1\u63d2\u503c","text":"

    \u6240\u8c13\u7684\u6700\u8fd1\u63d2\u503c(nearest-neighbor interpolation)\uff0c\u5b9e\u9645\u4e0a\u4e0e KNN \u7684 K=1 \u7684\u7279\u6b8a\u60c5\u51b5\u3002\u5373\uff0c\\(y(x) = y(x_{\\mathop{argmin}(|x-x_i|)})\\)\u3002\u8bf4\u4eba\u8bdd\u5c31\u662f\u6a2a\u5750\u6807\u79bb\u54ea\u4e2a\u8fd1\uff0c\u5c31\u548c\u54ea\u4e2a\u4e00\u6837\u3002

    \u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

    \u89c2\u5bdf\u8fd9\u6761\u84dd\u8272\u66f2\u7ebf\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b83\u5177\u6709\u8fd9\u51e0\u4e2a\u7279\u5f81\uff1a

    \u800c\u4e14\u62cd\u8111\u74dc\u60f3\u60f3\u4e5f\u80fd\u611f\u53d7\u5230\uff0c\u8fd9\u79cd\u63d2\u503c\u7684\u65b9\u6cd5\u5e76\u4e0d\u4f18\u96c5\u2014\u2014\u4e00\u5f20\u56fe\u7247\u653e\u5927\u540e\u4e00\u4e2a\u50cf\u7d20\u7684\u989c\u8272\u53d6\u51b3\u4e8e\u6700\u8fd1\u7684\u91c7\u6837\u50cf\u7d20\u989c\u8272\u2014\u2014\u5728\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e76\u4e0d\u5e0c\u671b\u6709\u8fd9\u6837\u7684\u7ed3\u679c\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u7ebf\u6027\u63d2\u503c","title":"\u7ebf\u6027\u63d2\u503c","text":"

    \u7ebf\u6027\u63d2\u503c(linear interpolation)\u5c31\u662f\u76f4\u63a5\u505a\u8fde\u7ebf\uff0c\u5c06\u76f8\u90bb\u7684\u70b9\u4e24\u4e24\u7528\u76f4\u7ebf\u8fde\u8d77\u6765\uff0c\u7ed8\u5236\u51fa\u4e00\u4e2a\u6298\u7ebf\u56fe\u3002

    \u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u76f8\u6bd4\u4e8e\u6700\u8fd1\u63d2\u503c\uff0c\u7ebf\u6027\u63d2\u503c\u5bf9\u539f\u51fd\u6570\u7684\u62df\u5408\u6027\u76f8\u5bf9\u6765\u8bf4\u597d\u4e86\u5f88\u591a\uff0c\u800c\u4e14\u53d8\u5f97\u8fde\u7eed\u4e86\uff0c\u89c2\u5bdf\u84dd\u8272\u66f2\u7ebf\uff0c\u53d1\u73b0\u6709\u8fd9\u4e48\u51e0\u4e2a\u7279\u5f81\uff1a

    \u4e8e\u662f\u6211\u4eec\u7ee7\u7eed\u6539\u8fdb\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

    \u987e\u540d\u601d\u4e49\uff0c(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(cubic interpolation)\u5c31\u662f\u4f7f\u7528\u591a\u9879\u5f0f\u51fd\u6570\u6bb5\u6765\u62df\u5408\u91c7\u6837\u533a\u95f4\u3002

    \u8fd9\u91cc\u9700\u8981\u505a\u4e00\u4e2a\u8fa8\u6790\uff1a\u5e76\u4e0d\u662f\u7528\u4e00\u4e2a\u591a\u9879\u5f0f\u6765\u62df\u5408\u6240\u6709\u7684\u91c7\u6837\u70b9\uff0c\u800c\u662f\u7528\u591a\u9879\u5f0f\u6765\u62df\u5408\u4e00\u5bf9\u91c7\u6837\u70b9\uff0c\u5373\u4e00\u4e2a interval\u3002

    \u5176\u4e2d\u7ea2\u8272\u4e3a\u539f\u6709\u7684\u91c7\u6837\u70b9\uff0c\u84dd\u8272\u4e3a\u6211\u4eec\u7684\u6240\u6709\u63d2\u503c\u6784\u6210\u7684\u66f2\u7ebf\u3002

    \u5176\u4e2d\uff0c\u6bcf\u4e00\u6bb5 interval \u7684\u84dd\u8272\u7ebf\u6761\u90fd\u7b26\u5408 \\(f_i(x) = a_ix^3 + b_ix^2 + c_ix + d_i, x \\in [x_i, x_{i+1}]\\)\uff1b\u5e76\u4e14\u6211\u4eec\u4fdd\u8bc1\u5728\u91c7\u6837\u70b9\u5904\u5b83\u4eec\u90fd\u662f\u5149\u6ed1\u7684\uff0c\u5373\u4fdd\u8bc1 \\(\\forall i, \\frac{\\mathrm{d}f_i(x_{i+1})}{\\mathrm{d} x} = \\frac{\\mathrm{d}f_{i+1}(x_{i+1})}{\\mathrm{d} x}\\)

    \u4e8e\u662f\uff0c\u5b83\u81ea\u7136\u5c31\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

    1. \u8fde\u7eed\uff1b
    2. \u5149\u6ed1\uff1b

    \u66f4\u5177\u4f53\u7684

    \u521a\u624d\u8bb2\u7684\u90fd\u662f\u4ece\u4e00\u7ef4\u51fd\u6570\u7684\u89d2\u5ea6\u6765\u601d\u8003\u63d2\u503c\uff0c\u73b0\u5728\u6211\u4eec\u6765\u4ecb\u7ecd\u4e00\u4e9b\u5728\u4e8c\u7ef4\u5c42\u9762\u505a\u63d2\u503c\u7684\u6848\u4f8b\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc\u7ebf\u6027\u63d2\u503c","title":"\u53cc\u7ebf\u6027\u63d2\u503c","text":"

    \u53cc\u7ebf\u6027\u63d2\u503c(bilinear interpolation)\u5c31\u662f\u5728\u4e8c\u7ef4\u5e73\u9762\u5185\u505a\u7ebf\u6027\u63d2\u503c\uff0c\u601d\u8def\u975e\u5e38\u7b80\u5355\u3002

    \u5982\u56fe\uff0c\u6211\u4eec\u5e0c\u671b\u5728\u7ea2\u70b9\u5904\u8fdb\u884c\u63d2\u503c\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4f1a\u9009\u53d6\u4e0e\u4e4b\u76f8\u90bb\u7684\u56db\u4e2a\u70b9\uff0c\\(u_{ij},\\;\\; i,j\\in \\{0,1\\}\\)\uff0c\u518d\u6839\u636e\u8fd9\u4e2a\u70b9\u5728\u8fd9\u4e2a\u77e9\u9635\u4e2d\u7684\u4f4d\u7f6e\u8fdb\u884c\u6c42\u503c\u3002

    \u5177\u4f53\u8ba1\u7b97\u65b9\u6cd5

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u53cc3\u6b21\u591a\u9879\u5f0f\u63d2\u503c","title":"\u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c","text":"

    wiki \ud83d\udd17

    \u53cc(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c(bicubic interpolation)\u5373\u5728\u4e8c\u7ef4\u5e73\u9762\u505a(3\u6b21)\u591a\u9879\u5f0f\u63d2\u503c\uff0c\u5b9e\u73b0\u601d\u8def\u4e0e\u53cc\u7ebf\u6027\u63d2\u503c\u662f\u7c7b\u4f3c\u7684\u3002

    \\[ p(x,y) = \\sum_{i=0}^{3}\\sum_{j=0}^{3}a_{i,j}x^iy^j \\]

    What's '4' means here?

    \u8d85\u5206\u8fa8\u7387

    \u5728\u5f97\u5230\u8fd9\u4e9b\u63d2\u503c\u7b56\u7565\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5f15\u51fa\u8d85\u5206\u8fa8\u7387(Super-Resolution)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5373\u901a\u8fc7\u63d2\u503c\uff0c\u6211\u4eec\u5c06\u4e00\u5f20\u56fe\u7247\u7684\u5206\u8fa8\u7387\u63d0\u9ad8\uff0c\u5f97\u5230\u8d85\u8fc7\u539f\u6709\u56fe\u7247\u5206\u8fa8\u7387\u7684\u4e00\u5f20\u56fe\u7247\u3002

    \u4f8b\u5982\uff0c\u901a\u8fc7\u4e0b\u9762\u8fd9\u4e2a\u5bf9\u6bd4\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\uff0c\u591a\u9879\u5f0f\u63d2\u503c\u7684\u8868\u73b0\u6bd4\u7ebf\u6027\u63d2\u503c\u7684\u8868\u73b0\u597d\u4e0d\u5c11\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec03/#\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","title":"\u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4","text":"

    \u6539\u53d8\u56fe\u50cf\u957f\u5bbd\u6bd4(aspect ratio)\u8fd9\u4ef6\u4e8b\u8c8c\u4f3c\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u5355\u7ef4\u5ea6\u4e0a\u8fdb\u884c\u7f29\u653e\u6765\u5b9e\u73b0\uff08\u8fdb\u884c\u4e00\u7ef4\u63d2\u503cor\u91c7\u6837\uff09\uff0c\u4f46\u662f\u662f\u5426\u5b58\u5728\u522b\u7684\u65b9\u6cd5\uff0c\u4e0d\u5927\u5e45\u6539\u53d8\u6574\u4f53\u56fe\u50cf\u5f62\u72b6\u7684\u60c5\u51b5\u4e0b\uff0c\u5b9e\u73b0\u8be5\u5f7c\u5cb8\u957f\u5bbd\u6bd4\u5462\uff1f

    \u5b9e\u9645\u4e0a\uff0c\u6709\u4e00\u4e2a\u505a\u6cd5\u5c31\u662f\u5077\u5077\u5220\u6389\u51e0\u884c/\u51e0\u5217\u50cf\u7d20\uff0c\u5bf9\u4eba\u773c\u6765\u8bf4\u8fd9\u8c8c\u4f3c\u662f\u96be\u4ee5\u5bdf\u89c9\u7684\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u6765\u505a\u4e00\u4e9b\u6539\u8fdb\uff0c\u6211\u4eec\u8fd9\u6b21\u4e0d\u662f\u66b4\u529b\u7684\u5220\u9664\u4e00\u884c\u6216\u4e00\u5217\uff0c\u800c\u662f\u6709\u9009\u62e9\u6027\u7684\uff0c\u5728\u6bcf\u4e00\u884c\u91cc\u5220\u9664\u51e0\u4e2a\u50cf\u7d20\u3002\u4e3a\u4e86\u4fdd\u8bc1\u56fe\u50cf\u4e0d\u9519\u4f4d\uff0c\u6211\u4eec\u5e0c\u671b\u8fd9\u4e9b\u9009\u4e2d\u7684\u50cf\u7d20\u53ef\u4ee5\u88ab\u770b\u4f5c\u56fe\u50cf\u4e0a\u7684\u201c\u88c2\u7f1d\u201d\uff0c\u5373\u4e00\u6761\u5f2f\u5f2f\u66f2\u66f2\u7684\u66f2\u7ebf\u3002

    \u8fd9\u79cd\u505a\u6cd5\u53ebseam carving\uff0c\u6211\u4eec\u9700\u8981\u627e\u5230\u6bd4\u8f83\u4e0d\u91cd\u8981\u7684\u4e00\u8fde\u4e32\u8fde\u7eed\u50cf\u7d20\u3002\u800c\u8fd9\u91cc\u7684\u201c\u4e0d\u91cd\u8981\u201d\uff0c\u6307\u7684\u5c31\u662f\u90a3\u4e9b\u53d8\u5316\u4e0d\u90a3\u4e48\u5267\u70c8\u7684\u50cf\u7d20\uff0c\u5373\u4e0e\u5468\u56f4\u5341\u5206\u76f8\u8fd1\u7684\u70b9\u3002

    \u66f4\u6570\u5b66\u7684\u8868\u8ff0\u662f\uff1a

    \u800c\u81f3\u4e8e\u5bfb\u627e\u6700\u77ed\u8def\u7684\u7b97\u6cd5\uff0c\u5219\u662f\u4e2a dp \u95ee\u9898\uff0c\u5728\u8fd9\u91cc\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/","title":"Lecture 4 | Model Fitting and Optimization","text":"

    \u7ea6 4135 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 21 \u5206\u949f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4f18\u5316","title":"\u4f18\u5316","text":"

    \u9996\u5148\u6211\u4eec\u6765\u5b9a\u4e49\u4e00\u4e2a\u4f18\u5316(Optimization)\u95ee\u9898\u7684\u6a21\u578b\uff1a

    \u4f18\u5316\u95ee\u9898\u7684\u6a21\u578b

    \u8bbe\u76ee\u6807\u51fd\u6570\\(f_0(\\vec x)\\) \u6ee1\u8db3\u7ea6\u675f\u6761\u4ef6\uff1a

    \\[ \\left\\{ \\begin{aligned} f_i(\\vec x) &\\leq 0, &i = 1,...,m & \\text{inequality constraint functions} \\\\ g_i(\\vec x) &= 0, &i = 1,...,p & \\text{equality constraint functions}& \\end{aligned} \\right. \\]

    \u6c42 \\(\\vec x\\in \\mathrm{R}^n\\) \uff0c\u4f7f \\(f_0(\\vec{x})\\) \u6700\u5c0f\uff08\u5373\u6700\u4f18\uff09\u3002

    \u5f88\u663e\u7136\uff0c\u8fd9\u548c\u6211\u4eec\u9ad8\u4e2d\u63a5\u89e6\u7684\u7ebf\u6027\u89c4\u5212\u5f88\u50cf\uff0c\u5b9e\u9645\u4e0a\u7ebf\u6027\u89c4\u5212\u5c31\u662f\u5176\u4e2d\u4e00\u79cd\u4f18\u5316\u95ee\u9898\u3002

    \u800c\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5c1d\u8bd5\u5c06\u4e00\u4e9b\u590d\u6742\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5373\u6839\u636e\u95ee\u9898\uff0c\u5199\u51fa\u76ee\u6807\u51fd\u6570\u548c\u7ea6\u675f\u6761\u4ef6\uff0c\u5e76\u901a\u8fc7\u4e00\u4e9b\u65b9\u6cd5\u6765\u5f97\u5230\u6211\u4eec\u9700\u8981\u7684 \\(\\vec x\\)\u3002

    \ud83c\udf30 \u56fe\u50cf\u53bb\u6a21\u7cca\u95ee\u9898

    \u5728\u8fd9\u4e2a \ud83c\udf30 \u4e2d\uff0c\u6211\u4eec\u5df2\u77e5\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u548c\u6a21\u7cca\u6ee4\u6ce2\u5668(\u5377\u79ef\u6838) \\(F\\)\uff0c\u9700\u8981\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u6765\u6c42\u5377\u79ef\u8fd0\u7b97\u4e4b\u524d\u7684\u6e05\u6670\u56fe\u50cf \\(X\\)\u3002

    \u8fdb\u4e00\u6b65\u6765\u8bf4\uff0c\u5c31\u662f\u627e\u5230\u6e05\u6670\u7684\u56fe\u50cf \\(X\\)\uff0c\u4f7f\u5f97\u5b83\u505a\u6a21\u7cca\u5904\u7406\u540e\u4e0e\u5df2\u77e5\u7684\u6a21\u7cca\u56fe\u50cf \\(Y\\) \u5dee\u522b\u5c3d\u53ef\u80fd\u5c0f\uff0c\u4e8e\u662f\u95ee\u9898\u8f6c\u5316\u4e3a\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6a21\u578b\u62df\u5408","title":"\u6a21\u578b\u62df\u5408","text":"

    \u4e3a\u4e86\u7814\u7a76\u5206\u6790\u5b9e\u9645\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u4e00\u4e2a\u5efa\u6a21\uff0c\u66f4\u5177\u4f53\u7684\u6765\u8bf4\u5c31\u662f\u6839\u636e\u5b9e\u9645\u60c5\u51b5\uff0c\u5bfb\u627e\u6570\u636e\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5e76\u5efa\u7acb\u6570\u5b66\u6a21\u578b\u3002

    \u4e00\u4e2a\u6570\u5b66\u6a21\u578b(model)\u63cf\u8ff0\u95ee\u9898\u4e2d\u8f93\u5165\u548c\u8f93\u51fa\u7684\u5173\u7cfb\uff0c\u4f8b\u5982\uff1a\u7ebf\u6027\u6a21\u578b(linear model) \\(b = a^T x\\) \u5c31\u63cf\u8ff0\u4e86\u8f93\u5165(input) \\(a\\) \u548c\u8f93\u51fa(output) \\(b\\) \u5173\u4e8e\u6a21\u578b\u53c2\u6570(model parameter) \\(x\\) \u7684\u5173\u7cfb\u3002

    \u800c\u5b9e\u9645\u7684\u7ed3\u679c\u5f88\u96be\u4e25\u683c\u6ee1\u8db3\u6570\u5b66\u6a21\u578b\uff0c\u8fd9\u662f\u7531\u591a\u65b9\u539f\u56e0\u5bfc\u81f4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5f80\u5f80\u505a\u7684\u662f\u5bf9\u5b9e\u9645\u60c5\u51b5\u8fdb\u884c\u6a21\u578b\u62df\u5408(model fitting)\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u80fd\u5df2\u7ecf\u6709\u4e00\u4e2a\u5148\u9a8c\u7684\u5047\u8bbe\uff0c\u5373\u6570\u636e\u7b26\u5408\u54ea\u79cd\u6a21\u578b\uff0c\u63a5\u4e0b\u6765\u6839\u636e\u6570\u636e\u6765\u5206\u6790\u5f97\u5230\u5408\u9002\u7684 model parameters\uff0c\u800c\u8fd9\u4e2a\u6b65\u9aa4\u4e5f\u5e38\u5e38\u88ab\u79f0\u4e3a learning\u3002

    \u4e00\u79cd\u6bd4\u8f83\u7ecf\u5178\u7684\u903c\u8fd1\u65b9\u6cd5\uff08\u6700\u5c0f\u4e8c\u4e58\u6cd5\uff09\u662f\u6c42\u4f7f\u5747\u65b9\u8bef\u5dee(mean square error, MSE)\u6700\u5c0f\u7684 model parameters\uff1a

    \\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\)

    \u800c\u5982\u679c\u6211\u4eec\u5047\u8bbe\u6570\u636e\u4e2d\u7684\u566a\u58f0\u662f\u9ad8\u65af\u5206\u5e03\u7684\uff08\u5b9e\u9645\u4e0a\u5927\u90e8\u5206\u566a\u58f0\u5728\u57fa\u6570\u8db3\u591f\u5927\u7684\u60c5\u51b5\u4e0b\u90fd\u53ef\u4ee5\u770b\u4f5c\u4e3a\u9ad8\u65af\u5206\u5e03\u7684\uff09\uff0c\u90a3\u4e48\u53ef\u4ee5\u4e0e\u7edf\u8ba1\u5b66\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1(maximum likelihood estimation, MLE)\u76f8\u7edf\u4e00.

    MSE vs. MLE

    MSE vs MLE for linear regression

    \u5177\u4f53\u6765\u8bf4\uff0c\\(b_i = a_i^T x + n, \\;\\; n \\sim G(0,\\sigma)\\)\uff0c\u800c\u5bf9\u4e8e\u7ed9\u5b9a\u7684 \\(x\\)\uff0c\u5176\u4f3c\u7136(likehood)\\(P[(a_i,b_i)|x] = P[b_i-a_i^Tx] \\propto \\exp \\left( - \\frac{(b_i-a_i^Tx)^2}{2\\sigma^2} \\right)\\)\uff0c\u8868\u793a\u5728 model parameter \u4e3a \\(x\\) \u7684\u60c5\u51b5\u4e0b\uff0c\u6570\u636e\u7b26\u5408 \\((a_i,b_i)\\) \u7684\u53ef\u80fd\u6027\u3002

    Maximum Likelihood Estimation

    If the data points are independent,

    \\[ \\begin{aligned} P[(a_1, b_1)(a_2, b_2)\\dots|x] & = \\prod\\limits_iP[(a_i, b_i)|x] = \\prod\\limits_i P[b_i - a_i^T x] \\\\ & \\propto \\exp\\left(-\\frac{\\sum_i(b_i - a_i^Tx)^2}{2\\sigma^2}\\right) = \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) \\end{aligned} \\]

    That is, maximize the likelihood to find the best \\(x\\).

    \\[ \\begin{aligned} \\hat x &= \\mathop{\\arg \\max\\limits_x} P[(a_1, b_1)(a_2, b_2)\\dots|x] \\\\ &= \\mathop{\\arg \\max\\limits_x} \\exp\\left(-\\frac{||Ax-b||^2_2}{2\\sigma^2}\\right) = \\mathop{\\arg \\min\\limits_x}||Ax - b||_2^2 \\end{aligned} \\]

    MSE = MLE with Gaussian noise assumption

    \u9700\u8981\u8865\u6570\u5b66\u77e5\u8bc6\uff0c\u5b8c\u5584\u8fd9\u90e8\u5206\u5185\u5bb9

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u6570\u503c\u65b9\u6cd5","title":"\u6570\u503c\u65b9\u6cd5","text":"

    \u4e0a\u4e00\u5c0f\u8282\u4ecb\u7ecd\u4e86\u5982\u4f55\u5bf9\u5b9e\u9645\u95ee\u9898\u8fdb\u884c\u6570\u5b66\u5efa\u6a21\uff0c\u63a5\u4e0b\u6765\u9700\u8981\u4ecb\u7ecd\u7684\u662f\u5982\u4f55\u6c42\u89e3\u6570\u5b66\u6a21\u578b\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u4e00\u4e9b\u6bd4\u8f83\u7b80\u5355\u7684\u6a21\u578b\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3(analytical solution)\uff0c\u6bd4\u5982\u4f7f\u7528\u6c42\u5bfc\u7b49\u65b9\u6cd5\u3002

    \ud83c\udf30

    \u4ee5\u521a\u624d\u7684\u7ebf\u6027 MSE \u4e3a\u4f8b\uff0c\\(\\hat{x} = \\mathop{\\arg \\min\\limits_x} \\sum\\limits_i(b_i - a_i^Tx)^2\\) \u7b49\u6548\u4e8e\u6c42\u89e3\u7b49\u5f0f \\(A^TAx=A^Tb\\)\u3002

    \u7136\u800c\uff0c\u5b9e\u9645\u60c5\u51b5\u662f\u5927\u90e8\u5206\u95ee\u9898\u8fc7\u4e8e\u590d\u6742\uff0c\u6211\u4eec\u6ca1\u6cd5\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u91c7\u7528\u4e00\u4e9b\u5373\u91c7\u7528\u4e00\u4e9b\u6570\u503c\u65b9\u6cd5(numerical methods)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u68af\u5ea6\u4e0b\u964d","title":"\u68af\u5ea6\u4e0b\u964d","text":"

    \u7531\u4e8e\u76f8\u5173\u9886\u57df\u7684\u201c\u51fd\u6570\u201d\u7b49\u57fa\u672c\u4e0a\u90fd\u662f\u9ad8\u7ef4\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u4e00\u822c\u4f7f\u7528\u4e8c\u7ef4\u51fd\u6570\u56fe\u50cf\u7684\u65b9\u6cd5\u6765\u5f62\u8c61\u8868\u793a\u51fd\u6570\uff0c\u5373\u4f7f\u7528\u201c\u7b49\u9ad8\u7ebf\u201d\u7684\u5f62\u5f0f\u6765\u53ef\u89c6\u5316\u51fd\u6570\u3002

    \u867d\u7136\u6ca1\u6cd5\u76f4\u63a5\u6c42\u89e3\u6790\u89e3\uff0c\u4f46\u662f\u4e00\u822c\u51fd\u6570\u90fd\u5177\u6709\u4e00\u4e9b\u5c40\u90e8\u6027\u8d28\uff0c\u4f8b\u5982\u6781\u503c\u70b9\u4e34\u57df\u7684\u68af\u5ea6\u90fd\u6307\u5411\u6781\u503c\u70b9\u3002\u6a21\u7cca\u5730\u6765\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u968f\u7740\u201c\u68af\u5ea6\u201d\u53bb\u201c\u4e0b\u964d\u201d\uff0c\u5c31\u6709\u53ef\u80fd\u627e\u5230\u6781\u503c\u70b9\uff0c\u8fd9\u5c31\u662f\u901a\u8fc7\u68af\u5ea6\u4e0b\u964d(gradient descent)\u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u4f18\u5316\u95ee\u9898\u3002

    \u7b80\u5355\u63cf\u8ff0\u68af\u5ea6\u4e0b\u964d\u7684\u8fc7\u7a0b\uff1a

    1. \u521d\u59cb\u5316\u8d77\u70b9\u5750\u6807 x\uff1b
    2. \u76f4\u5230 x \u6536\u655b\u5230\u6211\u4eec\u6ee1\u610f\u7684\u7a0b\u5ea6\u4e4b\u524d\uff1a
      1. \u8ba1\u7b97\u4e0b\u964d\u65b9\u5411 p\uff1b
      2. \u51b3\u5b9a\u4e0b\u964d\u6b65\u957f \u237a\uff1b
      3. \u66f4\u65b0 x = x + \u237ap\uff1b

    Sourece: https://commons.wikimedia.org/w/index.php?curid=2283984

    \u5176\u4e2d\u6709\u4e09\u4ef6\u4e8b\u9700\u8981\u7279\u6b8a\u8bf4\u660e\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","title":"\u786e\u5b9a\u4e0b\u964d\u65b9\u5411","text":"

    \u5bf9\u4e8e\u6211\u4eec\u4ee5\u524d\u63a5\u89e6\u8fc7\u7684\u51fd\u6570\uff0c\u5373\u5f62\u5f0f\u76f8\u5bf9\u7b80\u5355\u7684\u51fd\u6570\uff0c\u6211\u4eec\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u6c42\u5176\u68af\u5ea6\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u3002\u7136\u800c\u5b9e\u9645\u95ee\u9898\u4e2d\u7684\u51fd\u6570\u53ef\u80fd\u975e\u5e38\u590d\u6742\uff0c\u6216\u68af\u5ea6\u89e3\u6790\u5f0f\u5f88\u96be\u5f97\u5230\u3002\u8fd9\u65f6\u5019\u6211\u4eec\u5c31\u53ea\u80fd\u9000\u800c\u6c42\u5176\u6b21\uff0c\u6c42\u5176\u201c\u8fd1\u4f3c\u201d\u68af\u5ea6\u65b9\u5411\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u627e\u5230\u4e00\u4e2a\u548c\u539f\u51fd\u6570\u5728\u5c40\u90e8\u548c\u8be5\u51fd\u6570\u5f88\u50cf\u7684\u62df\u5408\u51fd\u6570\uff0c\u5e76\u4e14\u7528\u8fd9\u4e2a\u62df\u5408\u51fd\u6570\u7684\u68af\u5ea6\u65b9\u5411\u6765\u51b3\u5b9a\u68af\u5ea6\u4e0b\u964d\u7684\u65b9\u5411\u3002

    \u4e8e\u662f\u6211\u4eec\u60f3\u5230\u6cf0\u52d2\u5c55\u5f00\uff0c\u5b83\u5c06\u51fd\u6570\u5c55\u5f00\u4e3a\u591a\u9879\u5f0f\uff0c\u800c\u591a\u9879\u5f0f\u7684\u68af\u5ea6\u662f\u76f8\u5bf9\u5bb9\u6613\u5f97\u5230\u7684\u3002

    \u5176\u4e2d\u6bd4\u8f83\u5e38\u7528\u7684\u662f\uff1a

    \u5176\u4e2d \\(J_F\\) \u662f\u96c5\u5404\u6bd4\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u7ef4\u5411\u91cf\u51fd\u6570\u7684\u5bfc\u6570\uff1b\\(H_F\\) \u662f\u6d77\u68ee\u77e9\u9635\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u591a\u4f4d\u5411\u91cf\u51fd\u6570\u7684\u4e8c\u9636\u5bfc\u6570\u3002

    \u63a5\u4e0b\u6765\u4ee5 first-order approximation \u4e3a\u4f8b\u7ee7\u7eed\u5206\u6790\u3002

    \u89c2\u5bdf \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F \\Delta x\\)\uff0c\u53d1\u73b0\u5f53 \\(J_F\\Delta x < 0\\) \u65f6\uff0c \\(F(x_0 + \\Delta x)\\) \u5927\u6982\u7387\u6bd4 \\(F(x_0)\\) \u5c0f\uff0c\u5373\u201c\u4e0b\u964d\u201d\uff0c\u6240\u4ee5\u5728 first-order approximation \u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u9009\u62e9\u65b9\u5411 \\(\\vec p = -J_F^T\\)\uff0c\u4e8e\u662f\u4f4d\u79fb\u91cf \\(movement = -J_F \\cdot J_F^T \\cdot step\\)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","title":"\u786e\u5b9a\u4e0b\u964d\u6b65\u957f","text":"

    \u5373\u4f7f\u4f46\u4ece\u4e0b\u964d\u901f\u7387\u6765\u8003\u8651\uff0c\u6b65\u957f\u592a\u957f\u6216\u592a\u5c0f\u4e5f\u90fd\u6709\u660e\u663e\u7684\u95ee\u9898\uff1a

    \u6240\u4ee5\u6b65\u957f\u7684\u9009\u62e9\u5bf9\u4e0b\u964d\u901f\u7387\u7684\u5341\u5206\u5173\u952e\u3002

    \u4e3a\u4e86\u4e13\u6ce8\u4e8e\u6b65\u957f\u7684\u9009\u62e9\uff0c\u6211\u4eec\u8bb0 \\(\\phi(\\alpha) = F(x+\\alpha h),\\;\\;\\text{where x and h fixed}, x\\geq 0\\)\u3002\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u627e\u5230\u4e00\u4e2a\u80fd\u8ba9 \\(\\phi(\\alpha)\\) \u5c3d\u53ef\u80fd\u5c0f\u4e8e \\(\\phi(0)\\) \u7684 \\(\\alpha\\)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd Backtracking Algorithm\uff1a

    1. \u521d\u59cb\u5316 \\(\\alpha\\) \u4e3a\u4e00\u4e2a\u6bd4\u8f83\u5927\u7684\u503c\uff1b
    2. \u4e0d\u65ad\u51cf\u5c0f \\(\\alpha\\) \u76f4\u5230 \\(\\phi(\\alpha) \\leq \\phi(0) + \\gamma\\phi'(0)\\alpha\\)\uff1b
      • \u5176\u4e2d \\(\\gamma\\in(0,1)\\) \u662f\u4e00\u4e2a\u56fa\u5b9a\u7684\u53c2\u6570\uff1b

    \u6362\u53e5\u8bdd\u8bf4\u5c31\u662f\uff0c\u7b26\u5408\u9884\u671f\u7684\u6700\u5927\u6b65\u957f\uff0c\u8fd9\u4e2a\u201c\u9884\u671f\u201d\uff0c\u5c31\u662f\u901a\u8fc7 \\(\\gamma\\) \u4f53\u73b0\u7684\u3002\u56fe\u4e2d\u7ea2\u8272\u865a\u7ebf\u548c\u9ed1\u8272\u7ec6\u7ebf\u5206\u522b\u662f \\(\\gamma\\) \u53d6\u8fb9\u754c\u503c\u65f6\u7684\u60c5\u51b5\uff0c\u800c\u7ea2\u8272\u5b9e\u7ebf\u5219\u8868\u793a\u6211\u4eec\u7684\u9884\u671f\u968f \\(\\alpha\\) \u7684\u53d8\u5316\u3002

    \u4e0a\u9762\u4f7f\u7528 first-order approximation \u4e3a\u4f8b\u4ecb\u7ecd\u7684\u8fd9\u5957\u65b9\u6cd5\u5c31\u662f\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5(steepest descent method)\u3002

    \u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5

    \\(\\vec p = -J_F^T\\)\uff1b

    \u8fd9\u662f\u56e0\u4e3a\uff0c\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u4e3b\u8981\u91c7\u7528\u7684\u662f first-order approximation\uff0c\u6ca1\u6709\u4f53\u73b0\u66f2\u7387\u7279\u5f81\u3002

    \u56e0\u800c\u4e00\u79cd\u5f88\u81ea\u7136\u7684\u6539\u8fdb\u65b9\u6cd5\u5c31\u662f\u4f7f\u7528 second-order approximation\uff0c\u5373\u725b\u987f\u6cd5(Newton Method)\u3002

    \u725b\u987f\u6cd5

    \\(F(x_k + \\Delta x) \\approx F(x_k) + J_F\\Delta x + \\frac{1}{2}\\Delta x^T H_F \\Delta x\\)

    \u5bf9\u5b83\u6c42\u5bfc\u5f97\u5230 \\(\\frac{\\partial F}{\\partial \\Delta x} = J_F^T+H_F\\Delta x = 0\\)\u3002

    \u6240\u4ee5\u5f97\u5230\u65b9\u5411\u4e3a \\(\\vec p = \\Delta x = -H_F^{-1}J_F^T\\)

    \u7531\u6b64\u53d1\u73b0\uff0c\u725b\u987f\u6cd5\u7684\u8868\u73b0\u4f1a\u597d\u5f88\u591a\uff0c\u5982\u679c\u80fd\u591f\u907f\u514d\u8ba1\u7b97\u9ed1\u585e\u77e9\u9635\uff0c\u5c31\u53ef\u4ee5\u8fdb\u4e00\u6b65\u63d0\u9ad8\u725b\u987f\u6cd5\u7684\u6548\u679c\uff0c\u4e8e\u662f\u5c31\u51fa\u73b0\u4e86\u9ad8\u65af\u725b\u987f\u6cd5(Gauss-Newton method)\u3002

    \u9ad8\u65af\u725b\u987f\u6cd5

    \u5bf9\u4e8e\u89e3\u51b3\u6700\u5c0f\u4e8c\u4e58\u6cd5 \\(\\hat x = \\mathop{\\arg \\min\\limits_x} ||R(x)||^2_2\\) \u7684\u95ee\u9898\u8868\u73b0\u975e\u5e38\u597d\u3002

    \u5bf9\u4e8e\u8fd9\u7c7b\u95ee\u9898\uff0c\u9ad8\u65af\u725b\u987f\u6cd5\u4f7f\u7528 \\(J_R^TJ_R\\) \u6765\u8fd1\u4f3c\u4ee3\u66ff \\(H_F\\)\uff0c\u5f97\u5230\u4e0b\u964d\u65b9\u5411\u4e3a \\(\\vec p = -(J_R^TJ_R)^{-1}J_R^T,\\;\\;\\text{where }J_R\\text{ is the Jacobian of }R(x)\\)\u3002

    Levenberg-Marquardt

    Wiki: \ud83d\udd17

    \\[ \\Delta x = -(J_R^TJ_R+\\lambda I)^{-1}J_R^TR(x_k) \\]

    \u7b80\u5355\u6765\u8bf4\uff0cLM \u5c31\u662f\u7efc\u5408\u4e86\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\u548c\u725b\u987f\u6cd5\u7684\u4f18\u70b9\uff0c\u5728\u8fdc\u79bb\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u6700\u901f\u68af\u5ea6\u4e0b\u964d\u6cd5\uff0c\u4fdd\u8bc1\u542f\u52a8\u901f\u5ea6\u5feb\uff1b\u5728\u9760\u8fd1\u76ee\u6807\u70b9\u7684\u65f6\u5019\u4f7f\u7528\u725b\u987f\u6cd5\uff0c\u4fdd\u8bc1\u6536\u655b\u901f\u5ea6\u8db3\u591f\u5feb\uff1b\u5e76\u4e14\u4fdd\u8bc1 \\(J_R^TJ_R+\\lambda I\\) \u6b63\u5b9a\uff0c\u6240\u4ee5\u59cb\u7ec8\u80fd\u591f\u4f7f\u725b\u987f\u6cd5\u6210\u7acb\u3002

    \u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898

    \u5bf9\u4e8e\u5e26\u7ea6\u675f\u7684\u4f18\u5316\u95ee\u9898(constrained optimization)\uff0c\u5219\u9700\u8981\u6839\u636e\u5b9e\u9645\u95ee\u9898\u6c42\u89e3\u3002

    \u63a8\u8350\u540c\u540d\u8bfb\u7269\uff1ahttps://web.stanford.edu/class/ee364a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","title":"\u5168\u5c40\u6700\u4f18\u548c\u5c40\u90e8\u6700\u4f18","text":"

    \u5206\u591a\u4e2a batch \u6765\u5904\u7406\uff0c\u5927\u91cf\u6492\u70b9\uff0c\u7136\u540e\u6bd4\u8f83\u6bcf\u4e00\u4e2a batch \u7684\u7ed3\u679c\uff0c\u6700\u7ec8\u53d6\u6700\u597d\u7684\u4e00\u4e2a\u5373\u53ef\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9c81\u68d2\u4f30\u8ba1","title":"\u9c81\u68d2\u4f30\u8ba1","text":"

    \u9c81\u68d2\u4f30\u8ba1(robust estimation)\u662f\u5bf9\u4ece\u5404\u79cd\u6982\u7387\u5206\u5e03\uff08\u5c24\u5176\u662f\u975e\u6b63\u6001\u5206\u5e03\uff09\u4e2d\u63d0\u53d6\u7684\u6570\u636e\u5177\u6709\u826f\u597d\u6027\u80fd\u7684\u7edf\u8ba1\u3002

    \u5728\u62df\u5408\u6a21\u578b\u4e2d\uff0c\u96be\u514d\u51fa\u73b0\u4e00\u4e9b\u4e0d\u7b26\u5408\u9884\u671f\u7684\u70b9\uff0c\u800c\u5b83\u4eec\u4f1a\u5bf9\u62df\u5408\u7ed3\u679c\u4ea7\u751f\u6216\u591a\u6216\u5c0f\u7684\u5f71\u54cd\uff0c\u800c\u5982\u4f55\u6743\u8861\u8fd9\u4e9b\u566a\u58f0\u4e0e\u771f\u6b63\u6709\u7528\u7684\u6570\u636e\u70b9\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u9c81\u68d2\u4f30\u8ba1\u7684\u8bfe\u9898\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u5185\u70b9--\u5916\u70b9","title":"\u5185\u70b9 & \u5916\u70b9","text":"

    \u9996\u5148\u6211\u4eec\u5bf9\u6570\u636e\u70b9\u8fdb\u884c\u5206\u7c7b\uff1a

    \u5916\u70b9\u7684\u5f71\u54cd

    \u7531\u4e8e\u5916\u70b9\u504f\u79bb\u5f88\u5927\uff0c\u800c\u6700\u5c0f\u4e8c\u4e58\u6cd5\u4e2d\u5b58\u5728\u5e73\u65b9\u64cd\u4f5c\uff0c\u6240\u4ee5\u6700\u5c0f\u4e8c\u4e58\u6cd5\u62df\u5408\u53d7\u8fd9\u4e9b\u5916\u70b9\u5f71\u54cd\u5f88\u5927\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","title":"\u4e0d\u540c\u7684\u635f\u5931\u51fd\u6570","text":"

    \u4e8e\u662f\u6211\u4eec\u8003\u8651\uff0c\u53ef\u4ee5\u66f4\u6362\u62df\u5408\u7684\u635f\u5931\u51fd\u6570\uff0c\u6765\u51cf\u5c0f\u5927\u504f\u5dee\u70b9\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u6bd4\u5982\u4f7f\u7528 L1 loss(\u5373\u6c42\u7edd\u5bf9\u503c)\u3002\u4e0d\u8fc7\u66f4\u597d\u7684\u662f\u4e00\u79cd\u9009\u62e9\u53eb huber loss\uff0c\u5b83\u5728\u8ddd\u79bb\u8fdc\u70b9\u8f83\u8fdc\u7684\u65f6\u5019\u6bd4\u8f83\u63a5\u8fd1 L1 loss\u3002

    L1 & L2 & Huber

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u968f\u673a\u62bd\u6837\u4e00\u81f4","title":"\u968f\u673a\u62bd\u6837\u4e00\u81f4","text":"

    \u968f\u673a\u62bd\u6837\u4e00\u81f4(random sample consensus, RANSAC)\u91c7\u7528\u8fed\u4ee3\u7684\u65b9\u5f0f\u4ece\u5305\u542b\u5916\u70b9\u7684\u6570\u636e\u4e2d\u4f30\u8ba1\u6570\u5b66\u6a21\u578b\u53c2\u6570\uff0c\u662f\u4e00\u4e2a\u5bf9\u4e8e\u5b58\u5728\u660e\u663e\u5916\u70b9\u7684\u6570\u636e\u975e\u5e38\u6709\u6548\u7684\u65b9\u6cd5\u3002

    RANSAC procedure

    1. \u9996\u5148\u968f\u673a\u627e\u4e24\u4e2a\u70b9\u62df\u5408\u4e00\u6761\u76f4\u7ebf\uff0c\u7136\u540e\u68c0\u67e5\u6709\u591a\u5c11\u70b9\u7b26\u5408\u8fd9\u6761\u76f4\u7ebf\uff0c\u5e76\u5bf9\u5176\u8fdb\u884c vote\uff1b
    2. \u91cd\u590d\u8fd9\u4e2a\u6b65\u9aa4\uff0c\u6700\u540e\u9009\u62e9\u7968\u6570\u6700\u9ad8\u7684\u62df\u5408\uff1b

    \u7531 outlier \u62df\u5408\u51fa\u6765\u7684\u76f4\u7ebf\u4e00\u822c votes \u6bd4\u8f83\u5c11\uff0c\u56e0\u4e3a outlier \u4e4b\u95f4\u5f88\u96be\u4e00\u81f4\uff1b\u4f46\u662finlier\u4e4b\u95f4\u5bb9\u6613\u4e00\u81f4\uff0c\u56e0\u800c\u5f97\u5206\u5f80\u5f80\u66f4\u9ad8\uff0c\u4e8e\u662f\u5c06\u5b83\u4eec\u533a\u5206\u5f00\u6765\u3002\u8fd9\u4e0d\u5c31\u662f Voting Tree (\u9003

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u75c5\u6001\u95ee\u9898","title":"\u75c5\u6001\u95ee\u9898","text":"

    \u5982\u679c\u4e00\u4e2a\u95ee\u9898\u7684\u89e3\u4e0d\u552f\u4e00\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898(ill-posed problem)\u3002\u7279\u522b\u7684\uff0c\u5728\u7ebf\u6027\u95ee\u9898\u4e2d\uff0c\u4e00\u4e2a\u7ebf\u6027\u65b9\u7a0b\uff08\u7ec4\uff09\u7684\u89e3\u5982\u679c\u4e0d\u552f\u4e00\uff08\u4e0d\u6ee1\u79e9\uff09\uff0c\u5219\u540c\u6837\u662f\u4e00\u4e2a\u75c5\u6001\u95ee\u9898\u3002

    \u5f53\u7136\uff0c\u5bf9\u4e8e\u7ebf\u6027\u65b9\u7a0b\u7ec4\uff0c\u6839\u636e\u7ebf\u6027\u4ee3\u6570\u7684\u77e5\u8bc6\uff0c\u6211\u4eec\u53ef\u4ee5\u589e\u52a0\u65b9\u7a0b\uff0c\u5373\u589e\u52a0\u7ea6\u675f\u3002\u800c\u8fd9\u79cd\u7ea6\u675f\u4e00\u822c\u6765\u81ea\u4e8e\u5bf9\u53d8\u91cf\u7684\u5148\u9a8c\u7ea6\u675f\uff0c\u6bd4\u5982\uff1a

    L2 regularization

    L2 norm: \\(||x||_2 = \\sum_i x_i^2\\);

    L2 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_2 \\leq 1\\);

    \u901a\u8fc7\u8ba9\u9009\u62e9\u7684\u89e3\u5c3d\u53ef\u80fd\u63a5\u8fd1\u539f\u70b9\uff0c\u800c\u8ba9\u6211\u4eec\u6ca1\u6709\u7528\u7684\u89e3\u7684\u7ef4\u5ea6\u5c3d\u53ef\u80fd\u63a5\u8fd1 0\uff0c\u4ee5\u51cf\u5c0f\u6ca1\u7528\u7684\u53d8\u91cf\u7684\u5f71\u54cd\uff0c\u6291\u5236\u5197\u4f59\u53d8\u91cf\u3002

    L1 regularization

    L1 norm: \\(||x||_1=\\sum_i|x_i|\\);

    L1 regularization: \\(\\min\\limits x ||Ax-b||^2_2\\;\\;s.t. ||x||_1 \\leq 1\\)

    L1 \u53ef\u89c6\u5316\u4e2d\u53ef\u4ee5\u53d1\u73b0\uff0c\u5750\u6807\u8f74\u4e0a\u6bd4\u8f83\u5bb9\u6613\u6293\u4f4f\u89e3\uff0c\u6b64\u65f6\u610f\u5473\u7740\u6709\u4e9b\u53d8\u91cf(\u7ef4\u5ea6)\u662f 0\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u80fd\u8ba9\u89e3\u53d8\u5f97\u201c\u7a00\u758f(sparse)\u201d\uff0c\u5373\u5728\u7ef4\u5ea6\u4e0a\u7684\u5206\u5e03\u53ea\u6bd4\u8f83\u96c6\u4e2d\u4e8e\u4e2a\u522b\u9879\u3002

    \u4e0d\u8fc7\uff0c\u5c06\u4ed6\u4eec\u4f5c\u4e3a\u7ea6\u675f\u6761\u4ef6\u53c2\u4e0e\u6c42\u89e3\uff0c\u4e0d\u5982\u76f4\u63a5\u52a0\u8fdb\u53bb\u4f5c\u4e3a\u4e00\u4e2a\u9879\uff0c\u5176\u6548\u679c\u662f\u7b49\u4ef7\u7684\uff1a

    \\[ \\begin{matrix} \\text{L2 regularization:} & | & \\text{or L1 regularization:}\\\\ \\min_{x}||Ax-b||^2_2+\\lambda ||x||_2^2 & | & \\min_{x}||Ax-b||^2_2+\\lambda ||x||_1\\\\ s.t. ||x||_2 \\leq 1 & | & s.t. ||x||_1 \\leq 1 \\\\ \\end{matrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","title":"\u8fc7\u62df\u5408\u548c\u6b20\u62df\u5408","text":"

    \u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u4e5f\u8981\u5c0f\u5fc3\u8fc7\u62df\u5408(overfitting)\u548c\u6b20\u62df\u5408(underfitting)\uff0c\u5b83\u4eec\u7684\u542b\u4e49\u975e\u5e38\u76f4\u767d\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u63d2\u503c","title":"\u63d2\u503c","text":"

    \u63d2\u503c(interpolation)\u5176\u5b9e\u5df2\u7ecf\u5728 lec 3 \u7684\u7b14\u8bb0 \u91cc\u63d0\u5230\u8fc7\u4e86\u3002

    \u8fd9\u91cc\u5148\u7565\u8fc7\u3002

    sketch

    \u7ebf\u6027\u62df\u5408\u3001\u4e8c\u6b21\u6837\u6761\u63d2\u503c\uff08\u6bcf\u4e00\u6bb5\u90fd\u662f\u4e00\u4e2a\u4e8c\u6b21\u51fd\u6570\uff09\u3001\u4e09\u6b21\u6837\u6761\u63d2\u503c\uff08\u4e00\u9636\u5bfc\u4e8c\u9636\u5bfc\u8fde\u7eed\uff0c\u4f46\u6700\u7ec8\u662f\u4e2a\u75c5\u6001\u95ee\u9898\uff0c\u9700\u8981\u989d\u5916\u518d\u7ea6\u675f\u8d77\u70b9\u548c\u7ec8\u70b9\u4e8c\u9636\u5bfc\u4e3a\u96f6\u6216\u8005\u9650\u5b9a\u7ed9\u5b9a\u659c\u7387\u7b49\uff0c\u5c31\u9700\u8981\u4fe9\u989d\u5916\u7ea6\u675f\u6761\u4ef6\uff09\u3001

    \u4e0a\u9762\u662f\u8fde\u7eed\u4f18\u5316\u95ee\u9898\uff0c\u4e0b\u9762\u662f\u79bb\u6563\u4f18\u5316\u95ee\u9898

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272--\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u56fe\u5272 & \u9a6c\u53ef\u592b\u968f\u673a\u573a","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","title":"\u56fe\u50cf\u6807\u7b7e\u95ee\u9898","text":"

    \u56fe\u50cf\u6807\u7b7e\u95ee\u9898(image labeling problems)\u5373\u901a\u8fc7\u56fe\u7247\u4fe1\u606f\u7ed9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u5206\u914d\u6807\u7b7e\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4e00\u4e2a\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u5206\u7c7b\u548c\u8bc6\u522b\u95ee\u9898\u3002

    \u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u5f3a\u7684\u5148\u9a8c(prior)\u662f\uff1a\u76f8\u90bb\u4e14\u76f8\u4f3c\u7684\u50cf\u7d20\u5e94\u5f53\u62e5\u6709\u76f8\u540c\u7684\u6807\u7b7e\u3002

    \u800c\u56fe\u5272\u548c\u9a6c\u53ef\u592b\u968f\u673a\u573a\u53ef\u4ee5\u5efa\u6a21\u8fd9\u79cd\u5148\u9a8c\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u56fe\u5272","title":"\u56fe\u5272","text":"

    \u56fe\u5272(Graphcut)\u7684\u6838\u5fc3\u601d\u60f3\u662f\uff0c\u628a\u4e00\u5f20\u56fe\u7247\u7684\u6bcf\u4e00\u4e2a\u50cf\u7d20\u770b\u4f5c\u4e00\u4e2a graph \u4e2d\u7684 vertex\uff0c\u5e76\u5728\u50cf\u7d20\u4e4b\u95f4\u5efa edge\uff0c\u5e76\u5c06 weight \u5b9a\u4e49\u4e3a\u4e24\u50cf\u7d20\u4e4b\u95f4\u7684\u76f8\u4f3c\u6027\u6216\u5173\u8054\u6027(affinity or similarity)\u3002

    measuring affinity

    \u6bd4\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd9\u6837\u8861\u91cf\u50cf\u7d20\u7684\u76f8\u4f3c\u6027\uff1a

    \u518d\u63a5\u4e0b\u6765\uff0c\u901a\u8fc7\u8fd9\u6837\u7684\u65b9\u5f0f\u5c06\u56fe\u7247\u5efa\u6210\u56fe\u540e\uff0c\u5c31\u53ef\u4ee5\u628a\u95ee\u9898\u8f6c\u5316\u4e3a\u56fe\u5272\u95ee\u9898\uff0c\u6211\u4eec\u5c06\u5c0f\u6743\u7684\u8fb9\u5220\u53bb\uff0c\u6700\u7ec8\u4f1a\u5f62\u6210\u82e5\u5e72\u8fde\u901a\u5206\u91cf\uff0c\u800c\u8fd9\u4e9b\u8fde\u901a\u5206\u91cf\u90a3\u7684\u70b9\u5219\u88ab\u89c6\u4e3a\u4e00\u4e2a\u201c\u5206\u5272\u201d\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u56fe\u5272\u7684\u4ee3\u4ef7\u4e3a\u65ad\u7684\u8fb9\u6743\u4e4b\u6743\u91cd\u548c \\(cut(V_A,V_B)= \\sum_{u\\in V_A, v\\in V_B} w(u,v)\\)\uff0c\u800c\u6211\u4eec\u9700\u8981\u627e\u4ee3\u4ef7\u5c3d\u53ef\u80fd\u5c0f\u7684\uff0c\u6ee1\u8db3\u6211\u4eec\u8981\u6c42\u7684\u56fe\u5272\u3002\u5f53\u7136\uff0c\u8fd9\u4e2a\u95ee\u9898\u4e5f\u7b49\u6548\u4e8e\u6700\u5927\u6d41\u95ee\u9898\uff1b

    Problem with min-cut

    Bias to cut small, isolated segments.

    \u7531\u4e8e min-cut \u7684\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u8861\u91cf\u8fd9\u4e2a\u5b50\u96c6\u662f\u5426\u8db3\u591f\u7a20\u5bc6\uff0c\u6240\u4ee5\u6211\u4eec\u503e\u5411\u4e8e\u4f7f\u7528 normalized-cut\u3002

    \\[ assoc(V_A,V) = \\sum_{u\\in V_A, v\\in V} w(u,v) \\\\ NCut(V_A,V_B) = \\frac{cut(V_A,V_B)}{assoc(V_A,V)} + \\frac{cut(V_A,V_B)}{assoc(V_B,V)} \\] "},{"location":"cour_note/D2QD_Intro2CV/Lec04/#\u9a6c\u53ef\u592b\u968f\u673a\u573a","title":"\u9a6c\u53ef\u592b\u968f\u673a\u573a","text":"

    \u9a6c\u53ef\u592b\u968f\u673a\u573a(Markov Random Field, MRF)\u662f\u4e00\u79cd\u66f4\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u53ef\u60dc\u6211\u7b2c\u4e00\u6b21\u6ca1\u542c\u61c2\uff0c\u7b49\u6211\u542c\u61c2\u4e86\u518d\u6765\u8865\u5145\u8fd9\u91cc\u7684\u5185\u5bb9\u3002

    sketch

    Markov chains

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/","title":"Lecture 5 | Feature Matching and Motion Estimation","text":"

    \u7ea6 3966 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 20 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u56fe\u50cf\u7279\u5f81\u5339\u914d","title":"\u56fe\u50cf\u7279\u5f81\u5339\u914d","text":"

    \u672c\u8282\u7684\u8bfe\u9898\u662f\u7279\u5f81\u5339\u914d(feature matching)\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u627e\u5230\u4e24\u5f20\u56fe\u50cf\u4e2d\u53ef\u80fd\u6307\u4ee3\u540c\u4e00\u5ba2\u4f53\u7684\u90e8\u5206\uff0c\u5173\u952e\u5728\u4e8e\u627e\u5230\u56fe\u7247\u4e4b\u95f4\u70b9\u548c\u70b9\u7684\u5339\u914d\u5173\u7cfb\u3002\u8be5\u95ee\u9898\u662f\u5f88\u591a\u95ee\u9898\u7684\u57fa\u77f3\uff0c\u4f8b\u5982\uff1a

    applications

    \u5934\u8111\u98ce\u66b4

    \u7a76\u5176\u6839\u672c\uff0c\u7279\u5f81\u5339\u914d\u201c\u8054\u901a\u201d\u4e86\u4e24\u5f20\u56fe\u7247\uff0c\u4f7f\u5b83\u4eec\u539f\u672c\u5b64\u7acb\u8868\u8fbe\u7684\u4fe1\u606f\u8fde\u7ed3\u8d77\u6765\u3002

    \u7b80\u5355\u7684\u5e94\u7528\u5982\u56fe\u50cf\u62fc\u63a5\uff0c\u518d\u5f80\u540e\uff0c\u6211\u4eec\u4f1a\u53d1\u73b0\u4e09\u7ef4\u91cd\u5efa\u4e2d\u4e5f\u4f1a\u5e94\u7528\u5230\u7279\u5f81\u5339\u914d\u5230\u76f8\u5173\u5185\u5bb9\u3002

    \u6982\u62ec\u4f20\u7edf\u7279\u5f81\u5339\u914d\u4e3b\u8981\u73af\u8282\uff0c\u5927\u6982\u53ef\u4ee5\u5206\u4e3a\u5982\u4e0b\u4e09\u6b65\uff1a

    1. \u68c0\u6d4b(detection): \u627e\u5230\u5173\u952e\u70b9(interest points)\uff0c\u5373\u53ef\u80fd\u4f1a\u88ab\u5339\u914d\u7684\u201c\u7279\u5f81\u70b9\u201d\uff1b
    2. \u8868\u8fbe(description): \u63d0\u53d6\u6bcf\u4e2a\u5173\u952e\u70b9\u5468\u56f4\u7684\u5411\u91cf\u7279\u5f81\u63cf\u8ff0\u7b26(feature descriptor)\uff0c\u5373\u5c06\u201c\u7279\u5f81\u201d\u6570\u636e\u5316\uff1b
    3. \u5339\u914d(matching): \u51b3\u5b9a\u4e24\u4e2a\u89c6\u89d2\u4e0b\u7279\u5f81\u63cf\u8ff0\u7b26\u7684\u5173\u8054\u5e76\u5339\u914d\uff0c\u5373\u6784\u5efa\u201c\u7279\u5f81\u201d\u4e4b\u95f4\u7684\u5339\u914d\u5173\u7cfb\uff1b
    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u68c0\u6d4b","title":"\u5173\u952e\u70b9\u68c0\u6d4b","text":"

    \u63a8\u8350\u9605\u8bfb

    \u3010\u8ba1\u7b97\u673a\u89c6\u89c9\u30112. \u7279\u5f81\u70b9\u68c0\u6d4b\uff1aHarris, SIFT, SURF, ORB

    \u68c0\u6d4b(detection)\u7684\u9996\u8981\u95ee\u9898\u662f\u5982\u4f55\u9009\u62e9\u5173\u952e\u70b9(interest points/feature points)\uff0c\u6216\u8005\u8bf4\uff0c\u4e00\u4e2a\u70b9\u4ec0\u4e48\u60c5\u51b5\u4e0b\u4f1a\u88ab\u8ba4\u4e3a\u662f\u4e00\u4e2a\u7279\u5f81\u70b9\u3002

    \u603b\u4f53\u6765\u8bf4\uff0c\u5173\u952e\u70b9\u9700\u8981\u7531\u8fd9\u4e48\u4e24\u4e2a\u7279\u5f81\uff1a

    1. \u72ec\u7279\u6027(uniqueness)\uff0c\u5373\u8fd9\u4e2a\u70b9\u9700\u8981\u80fd\u591f\u8868\u5f81\u4e00\u5b9a\u7279\u6027\uff1b
    2. \u5bf9\u4e8e\u53d8\u6362\u4e0d\u654f\u611f\uff0c\u5373\u5bf9\u4e8e\u4e00\u4e2a\u5ba2\u89c2\u4e0a\u7684\u5173\u952e\u70b9\uff0c\u5373\u4f7f\u56fe\u7247\u88ab\u65cb\u8f6c\u3001\u538b\u7f29\u3001\u9002\u5f53\u7684\u626d\u66f2\uff0c\u5b83\u90fd\u5e94\u5f53\uff08\u5c3d\u53ef\u80fd\u5730\uff09\u88ab\u8bc6\u522b\u4e3a\u5173\u952e\u70b9\uff1b

    \u5173\u952e\u70b9

    \u867d\u7136\u8bf4\u662f\u5173\u952e\u201c\u70b9\u201d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u4e00\u5c0f\u5757\u533a\u57df\u3002\u65e2\u7136\u4f5c\u4e3a\u4e00\u4e2a\u80fd\u8868\u8fbe\u5c40\u90e8\u7279\u5f81\u7684\u70b9\uff0c\u5b83\u5fc5\u7136\u9700\u8981\u56ca\u62ec\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u4fe1\u606f\u3002

    \u9996\u5148\u6211\u4eec\u8ba8\u8bba\u5982\u4f55\u8861\u91cf\u4e00\u4e2a\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff0c\u672c\u6587\u4f1a\u4ecb\u7ecd\u4e24\u79cd\u68c0\u6d4b\u5668\uff1a

    1. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u89d2\u70b9 - Harris corner detector\uff1b
    2. \u7740\u773c\u4e8e\u56fe\u50cf\u7684\u6591\u70b9 - Blob detector(LoG or DoG)\uff1b
    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u89d2\u70b9\u68c0\u6d4b","title":"\u89d2\u70b9\u68c0\u6d4b","text":"

    \u63a8\u8350\u9605\u8bfb

    Harris Corners @ 16-385 Computer Vision (Kris Kitani) @ Carnegie Mellon University

    \u89d2\u70b9\u68c0\u6d4b\u7684\u57fa\u672c\u601d\u8def\u662f\uff0c\u6211\u4eec\u79f0\u67d0\u4e2a\u70b9\u6bd4\u8f83\u72ec\u7279\u65f6\uff0c\u5b83\u76f8\u5bf9\u4e8e\u5468\u56f4\u4e00\u5b9a\u53c8\u4e00\u4e9b\u201c\u4e0d\u540c\u201d\u7684\u5730\u65b9\u3002\u6216\u8005\u8bf4\u5b58\u5728\u4e00\u4e9b\u9ad8\u9891\u7279\u5f81\uff0c\u800c\u4e14\u8fd9\u79cd\u9ad8\u9891\u7279\u5f81\u4e0d\u4f1a\u5404\u5411\u540c\u6027\u6216\u8005\u8bf4\u51e0\u4e2a\u5411\u540c\u6027\u3002

    \u5728\u6a21\u5f0f\u5316\u7684\u63cf\u8ff0\u8fd9\u4e2a\u601d\u8def\u5c31\u662f\uff1a

    Local measures of uniqueness(rough):

    \u6211\u4eec\u4ee5\u7a97\u53e3\u7684\u5f62\u5f0f\u5bf9\u76ee\u6807\u70b9\u53ca\u5176\u90bb\u57df\u8fdb\u884c\u91c7\u6837\uff0c\u5f53\u65e0\u8bba\u5f80\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\u7a97\u53e3\uff0c\u91c7\u6837\u7ed3\u679c\u90fd\u4f1a\u4ea7\u751f\u8f83\u5927\u53d8\u5316\u65f6\uff0c\u6211\u4eec\u5c31\u8ba4\u4e3a\u8fd9\u4e2a\u70b9\u72ec\u7279\u6027\u5f3a\u3002

    Flag Edge Corner \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4e0d\u4f1a\u6709\u592a\u5927\u53d8\u5316 \u5f53\u6cbf\u7740\u201cEdge\u201d\u7684\u65b9\u5411\u79fb\u52a8\u65f6\uff0c\u4e0d\u592a\u6709\u53d8\u5316 \u65e0\u8bba\u5411\u54ea\u4e2a\u65b9\u5411\u79fb\u52a8\uff0c\u90fd\u4f1a\u5bfc\u81f4\u8f83\u5927\u7684\u53d8\u5316

    \u4e0d\u8fc7\u8fd9\u4ecd\u7136\u662f\u4e00\u4e2a\u76f8\u5bf9\u6a21\u7cca\u7684\u5b9a\u4e49\uff0c\u4e3a\u4e86\u5bf9\u5176\u8fdb\u884c\u5efa\u6a21\uff0c\u6211\u4eec\u8fdb\u4e00\u6b65\u5730\u5bf9\u4e0a\u9762\u63d0\u5230\u7684\u201c\u53d8\u5316\u5e45\u5ea6\u201d\u8d4b\u4e88\u6570\u5b66\u542b\u4e49\uff1a

    Local measures of uniqueness(detail):

    \u6240\u8c13\u53d8\u5316\u5927\uff0c\u5b9e\u9645\u4e0a\u6307\u7684\u662f\u76f8\u540c\u7684\u5355\u4f4d\u957f\u5ea6\u91cc\uff0c\u8272\u5f69\u503c\u7684\u5dee\u66f4\u5927\uff0c\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e0d\u7528\u68af\u5ea6\u6765\u8861\u91cf\u5462\uff1f\u5173\u6ce8\u533a\u57df\u5185\u7684\u68af\u5ea6\u5206\u5e03\uff1a

    \u6839\u636e\u68af\u5ea6\u7684\u5206\u5e03\uff0c\u6211\u4eec\u53ef\u4ee5\u5927\u81f4\u89c2\u5bdf\u5230\u56fe\u5f62\u7684\u7279\u5f81\uff0c\uff0c\u5305\u62ec\u5b58\u5728\u591a\u5c11\u4e2a Edge \u4ee5\u53ca\u8fd9\u4e9b Edge \u7684\u65b9\u5411\u3002

    \u4e0d\u8fc7\u7eaf\u7cb9\u6839\u636e\u68af\u5ea6\u6765\u5bfb\u627e\u89d2\u70b9\u6709\u65f6\u5019\u53ef\u80fd\u4f1a\u6536\u5230\u566a\u58f0\u7684\u5f71\u54cd\uff0c\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4e3b\u6210\u5206\u5206\u6790(Principle Component Analysis)\u6765\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002\u3002

    Principle Component Analysis

    \u2460 Subtract off the mean for each data point.

    \u2461 Compute the covariance matrix at each point.

    \\[ H = \\sum_{(u,v)}w(u,v) \\begin{bmatrix} I_x^2 & I_xI_y \\\\ I_xI_y & I_y^2 \\end{bmatrix} \\text{ where } I_x = \\frac{\\partial f}{\\partial x}, I_y = \\frac{\\partial y}{\\partial y} \\]

    \\(w(u,v)\\) \u4e00\u822c\u662f\u9ad8\u65af\u6743\u91cd\u3002

    \u2462 Compute eigenvalues.

    \\[ H = \\begin{bmatrix} a & b \\\\ c & d \\end{bmatrix} \\;\\;\\;\\; \\lambda_{\\pm} = \\frac{1}{2}\\left( (a+d) \\pm \\sqrt{4bc + (a-d)^2} \\right) \\] error function approximation

    Carnegie Mellon University \u7684 slides P18 \u5f00\u59cb\u8fd8\u63d0\u5230\u4e86\u4e0d\u540c\u4f4d\u79fb\u4e0b\u7684\u8bef\u5dee\u51fd\u6570\uff0c\u5e76\u7ed9\u51fa\u4e86\u4e09\u79cd\u60c5\u51b5\u4e0b\u8bef\u5dee\u51fd\u6570\u7684\u70ed\u529b\u56fe\u3002

    \u2463 Components are the eigenvectors ranked by the eigenvalues.

    \u5728\u672c\u8282\u7684\u8bed\u5883\u4e0b\uff0c\u5f62\u8c61\u5730\u53d9\u8ff0\u4e3b\u6210\u5206\u5206\u6790\u5f97\u5230\u7684\u7ed3\u679c\u5c31\u662f\uff1a\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u65b9\u5dee\u6700\u5927\u7684\u65b9\u5411\uff0c\u7b2c\u4e8c\u4e2a\u4e3b\u6210\u5206\u6307\u5411\u5782\u76f4\u4e8e\u7b2c\u4e00\u4e2a\u4e3b\u6210\u5206\u7684\u65b9\u5411\uff0c\u5b83\u4eec\u7684\u5927\u5c0f\u5219\u4e0e\u8fd9\u4e9b\u65b9\u5dee\u6b63\u76f8\u5173\u3002

    \u5bf9\u4e8e\u4e0a\u9762\u7684\u4e09\u79cd\u60c5\u51b5\uff0c\u5b83\u4eec\u505a\u4e3b\u6210\u5206\u5206\u6790\u540e\u5f97\u5230\u7684\u7ed3\u679c\u662f\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u4e09\u4e2a\u60c5\u51b5\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u5f88\u5927\u3002

    \u6211\u4eec\u901a\u8fc7\u5224\u65ad\u4e24\u4e2a\u7279\u5f81\u503c\u7684\u5927\u5c0f\u5173\u7cfb\u60c5\u51b5\u6765\u5224\u65ad\u4e00\u4e2a\u533a\u57df\u662f\u5426\u5305\u542b\u4e00\u4e2a\u89d2(corner)\u3001\u8fb9(edge)\u6216\u5e73\u9762(flat)\uff0c\u53ef\u4ee5\u5c06\u4ed6\u4eec\u653e\u5230\u4e00\u4e2a\u76f4\u65b9\u56fe\u4e2d\uff0c\u6839\u636e\u4e24\u4e2a\u7279\u5f81\u503c\u5f62\u6210\u7684\u70b9\u5bf9\u5728\u6574\u4e2a\u8c61\u9650\u4e2d\u51fa\u73b0\u7684\u4f4d\u7f6e\u6765\u5224\u65ad\u89d2\u70b9\u60c5\u51b5\uff1a

    Figure from Carnegie Mellon University's slides. Corner detection.

    \u4e3a\u4e86\u80fd\u591f\u91cf\u5316\u5730\u8868\u8fbe\u4e0a\u9762\u8fd9\u5f20\u56fe\u7684\u5206\u7c7b\u89c4\u5219\uff0c\u6211\u4eec\u5f15\u5165\u54c8\u91cc\u65af\u7b97\u5b50(Harris operator):

    \\[ f = \\frac{\\lambda_1\\lambda_2}{\\lambda_1+\\lambda_2} = \\frac{determinant(H)}{trace(H)} \\]

    \u8fd9\u91cc\u7684\u4e00\u4e2a\u7279\u6027\u662f\uff0c\u5bf9\u4e8e\u4e8c\u7ef4\u77e9\u9635\u6765\u8bf4\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u5e76\u4e0d\u9700\u8981\u6309\u7167\u4e4b\u524d\u7684\u6b65\u9aa4\uff0c\u8fdb\u884c\u4e3b\u6210\u5206\u5206\u6790\u4ee5\u540e\u518d\u5f97\u5230\uff0c\u800c\u662f\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u8fd9\u4e2a\u516c\u5f0f\u5f97\u5230\u3002

    \u800c\u8fd9\u4e2a \\(f\\) \u5c31\u53eb\u505a corner response\u3002

    reminder \\[ det\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = ad-bc \\;\\;\\;\\;\\; trace\\left(\\begin{bmatrix} a & b\\\\ c & d \\end{bmatrix}\\right) = a+d \\]

    \u5982\u4e0a\u8fd9\u5957\u65b9\u6cd5\u5c31\u662fHarris corner detector\u7684\u5b9e\u73b0\u3002

    \u5f52\u7eb3\u4e00\u4e0b\uff0c\u5176\u6b65\u9aa4\u5c31\u662f\uff1a

    Harris detector

    1. \u6c42\u5bfc | Compute derivatives at each pixel.
    2. \u534f\u65b9\u5dee\u77e9\u9635 | Compute covariance matrix \\(H\\) in a Gaussian window around each pixel.
    3. \u54cd\u5e94\u51fd\u6570 | Compute corner response function \\(f\\).
    4. \u9608\u503c\u8fc7\u6ee4 | Threshold \\(f\\).
    5. \u975e\u6781\u5927\u503c\u6291\u5236 | Find local maxima of response function (nonmaximum suppression).

    \u66f4\u8be6\u7ec6\u7684\u8bf4\u660e\u53ef\u4ee5\u53c2\u8003 wiki \u4e0a\u7684\u8bf4\u660e\uff1aHarris corner detector\u3002

    \u53e6\u4e00\u4e2a\u5173\u952e\u95ee\u9898\u662f\uff0c\u901a\u8fc7\u8fd9\u4e2a\u65b9\u6cd5\u5f97\u5230\u7684\u5173\u952e\u70b9\uff0c\u5177\u6709\u5bf9\u53d8\u6362\u4e0d\u654f\u611f\u6027\u5417\uff1f

    \u5bf9\u6b64\uff0c\u7ed3\u8bba\u662f\uff1a

    1. Partially invariant to affine intensity change.
    2. Corner response is invariant w.r.t. translation.
    3. Corner response is invariant w.r.t. image rotation.
    4. Corner response is NOT invariant to scaling.

    \u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\u7684\u89e3\u51b3\u65b9\u6848

    \u9488\u5bf9\u7ed3\u8bba 4\uff0c\u7531\u4e8e Harris detector \u5bf9\u5c3a\u5ea6\u53d8\u5316\u654f\u611f\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u4f7f\u7528\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8fc7\u7a0b\u4e2d\u9700\u8981\u6ce8\u610f\u5c3a\u5ea6\uff0c\u5373\u7a97\u53e3\u7684\u5927\u5c0f\u9009\u5b9a\u3002

    \u4e00\u79cd\u8bbe\u60f3\u7684\u65b9\u6848\u662f\uff0c\u4e0d\u65ad\u5c1d\u8bd5\u4e0d\u540c\u7684 window size\uff0c\u7136\u540e\u53d6\u5f97 response \u66f2\u7ebf\uff0c\u5047\u8bbe response \u7684\u5927\u5c0f\u53ea\u4e0e scale \u6709\u5173\uff0c\u5219\u66f2\u7ebf\u90fd\u5e94\u8be5\u662f\u5355\u5cf0\u7684\uff0c\u800c\u53d6\u51fa\u8fd9\u4e2a\u5cf0\u503c\uff08\u7279\u5f81\u6700\u660e\u663e\u7684\u65f6\u5019\uff09\uff0c\u5c31\u53ef\u4ee5\u5f53\u4ed6\u4e3a\u5bf9\u5e94\u7684 scale \u4ee5\u53ca\u5bf9\u5e94\u7684 response\u3002

    \u4e0d\u8fc7\u4e00\u822c\u5b9e\u9645\u7684\u505a\u6cd5\u662f\u56fa\u5b9a\u7a97\u53e3\u5927\u5c0f\uff0c\u800c\u6539\u53d8\u56fe\u7247\u7684\u5927\u5c0f\uff0c\u518d\u5728\u5f97\u5230\u7684\u56fe\u50cf\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u8fd9\u4e2a\u65b9\u6cd5\u7684\u8ba1\u7b97\uff0c\u5373\u5bf9\u4e0d\u540c\u5206\u8fa8\u7387\u7684\u56fe\u7247\u4e0a\u5206\u522b\u8fdb\u884c\u54c8\u91cc\u65af\u68c0\u6d4b\u3002\uff08\u76f8\u5f53\u4e8e\u7ed9\u56fe\u7247\u589e\u52a0\u4e86\u4e00\u4e2a\u7ef4\u5ea6\uff0c\u672c\u8d28\u4e0a\u548c\u4e0a\u9762\u7684\u65b9\u6cd5\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7\u7528\u4e86\u4e00\u4e2a\u66f4\u5408\u7406\u7684\u5b9e\u73b0\u89d2\u5ea6\u3002\uff09

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u6591\u70b9\u68c0\u6d4b","title":"\u6591\u70b9\u68c0\u6d4b","text":"

    \u9664\u4e86\u89d2\u70b9\uff0c\u6591\u70b9(blob)\u4e5f\u662f\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u7279\u6027\uff0c\u975e\u5e38\u9002\u5408\u4f5c\u4e3a\u5173\u952e\u70b9\u3002

    \u800c\u6591\u70b9\u7684\u5bfb\u627e\u6211\u4eec\u5219\u53ef\u4ee5\u5229\u7528\u6ee4\u6ce2\u5668\u6765\u5b9e\u73b0\uff0c\u8ba9\u6211\u4eec\u56de\u987e\u7b2c\u4e09\u7ae0\u8fb9\u7f18\u63d0\u53d6\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u7c7b\u4f3c\u7684\u505a\u6cd5\uff0c\u4f7f\u7528\u4e00\u4e2a\u4e2d\u95f4\u8d1f\u56db\u5468\u6b63\u7684\u6ee4\u6ce2\u5668\u6765\u63d0\u53d6\u6591\u70b9\u3002

    \u901a\u5e38\u6765\u8bf4\uff0c\u6211\u4eec\u4f7f\u7528 Gaussian \u6ee4\u6ce2\u5668\u7684 Laplacian\uff0c\u5373 Laplacian of Gaussian Filter(LoG)\uff0c\u6765\u4f5c\u4e3a\u6ee4\u6ce2\u5668\u548c\u56fe\u50cf\u8fdb\u884c\u5377\u79ef\u3002

    \ud83d\udc49 Laplacian \u7b97\u5b50

    \u5b9e\u9645\u4e0a\u4e5f\u7b49\u6548\u4e8e\u5148\u5bf9\u56fe\u7247\u4f5c\u9ad8\u65af\u6a21\u7cca\uff08\u51cf\u5c0f\u566a\u58f0\u5f71\u54cd\uff09\uff0c\u518d\u8ba1\u7b97\u5176\u62c9\u666e\u62c9\u65af\u7b97\u5b50\uff0c\u5373\uff1a

    \\[ \\nabla^2(f*g) = f * \\nabla^2 g \\]

    \u5176\u4e2d\uff0cLoG \u7684 scale \u662f\u901a\u8fc7\u9ad8\u65af\u51fd\u6570\u7684 \\(\\sigma\\) \u63a7\u5236\u7684\uff0c\u4e5f\u540c\u6837\u901a\u8fc7\u50cf\u7d20\u91d1\u5b57\u5854\u6765\u5b9e\u73b0\u3002

    \u53c8\u6216\u8005\u53ef\u4ee5\u4f7f\u7528 Difference of Gaussian(DoG)\uff0c\u5373\u5c06 Laplacian of Gaussian Filter \u66ff\u6362\u4e3a\u4e00\u4e2a\u7531\u4e24\u4e2a\u9ad8\u65af\u51fd\u6570\u505a\u5dee\u5f97\u5230\u7684 Filter\uff0c\u76f8\u5bf9\u6765\u8bf4\u6548\u7387\u66f4\u9ad8\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u8868\u8fbe","title":"\u5173\u952e\u70b9\u8868\u8fbe","text":"

    \u9009\u5b9a\u5173\u952e\u70b9\u540e\uff0c\u6211\u4eec\u9700\u8981\u8003\u8651\u5982\u4f55\u63cf\u8ff0\u548c\u8868\u8fbe\u8fd9\u4e9b\u70b9\uff0c\u4ee5\u4f7f\u5bf9\u5e94\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fd1\uff0c\u800c\u4e0d\u76f8\u5173\u5bf9\u5173\u952e\u70b9\u8868\u8fbe\u76f8\u8fdc\u3002

    \u4e00\u79cd\u6734\u7d20\u7684\u601d\u60f3\u662f\u5c06\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u4f5c\u4e3a\u4e00\u4e2a\u7279\u6027\u5411\u91cf(feature vector)\u8fdb\u884c\u6bd4\u8f83\uff0c\u4f46\u662f\u8fd9\u6837\u505a\u5bf9\u504f\u79fb\u7684\u8bef\u5dee\u8fc7\u4e8e\u654f\u611f\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u4e5f\u8bb8\u4e24\u5f20\u56fe\u7247\u5f88\u50cf\uff0c\u4f46\u662f\u56e0\u4e3a\u4e00\u70b9\u4f4d\u79fb\u8bef\u5dee\uff0c\u5bfc\u81f4\u5411\u91cf\u521a\u597d\u9519\u5f00\uff0c\u5bfc\u81f4\u7ed3\u679c\u663e\u793a\u4e24\u4e2a\u70b9\u5dee\u522b\u5f88\u5927\u3002\u8fd9\u662f\u56e0\u4e3a\u8fd9\u79cd\u505a\u6cd5\u5bf9\u50cf\u7d20\u70b9\u5728\u7a97\u53e3\u4e2d\u7684\u4f4d\u7f6e\u5f88\u654f\u611f\uff0c\u4f46\u662f\u663e\u7136\u4f4d\u7f6e\u5e76\u4e0d\u662f\u5173\u952e\u70b9\u7684\u7279\u5f81\u4e4b\u6240\u5728\u3002

    \u53e6\u5916\u66f4\u597d\u7684\u505a\u6cd5\u662f\u5c3a\u5ea6\u4e0d\u53d8\u7684\u7279\u5f81\u53d8\u6362(Scale Invariant Feature Transform, SIFT) descriptor\uff0c\u4e0d\u518d\u4f7f\u7528\u50cf\u7d20\u503c\uff0c\u800c\u662f\u4f7f\u7528\u533a\u57df\u4e2d\u7684\u68af\u5ea6\u7684\u5206\u5e03\u4f5c\u4e3a\u4e00\u4e2a\u63cf\u8ff0\uff0c\u53ef\u4ee5\u8868\u793a\u4e3a\u4e00\u5f20 \\([0,2\\pi)\\) \u7684\uff0c\u5faa\u73af\u7684\u76f4\u65b9\u56fe\u3002\u6b64\u65f6\u5c0f\u7684\u5e73\u79fb\u548c\u7f29\u653e\u90fd\u4e0d\u4f1a\u5bf9\u5b83\u4ea7\u751f\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u65cb\u8f6c\u53ea\u4f1a\u5bfc\u81f4\u76f4\u65b9\u56fe\u7684\u5faa\u73af\u5e73\u79fb\u2014\u2014\u4e0d\u8fc7\u8fd9\u79cd\u5faa\u73af\u5e73\u79fb\u662f\u5f88\u597d\u5904\u7406\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u4e2d\u6700\u5927\u7684\u5206\u91cf\u4f5c\u4e3a\u53c2\u8003\uff0c\u5e76\u5c06\u6574\u4e2a\u76f4\u65b9\u56fe\u5e73\u79fb\u5bf9\u9f50\u3002\u76f8\u6bd4\u76f4\u63a5\u5c06\u50cf\u7d20\u8f6c\u5316\u4e3a\u7279\u5f81\u5411\u91cf SIFT \u9c81\u68d2\u6027\u66f4\u9ad8\u3002

    \u5b8c\u6574\u7684 SIFT \u662f\u5305\u62ec\u300c\u68c0\u6d4b\u300d\u6b65\u9aa4\u7684\u3002

    Other detectors and descriptors:

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u5173\u952e\u70b9\u5339\u914d","title":"\u5173\u952e\u70b9\u5339\u914d","text":"

    \u6240\u8c13\u7684\u5339\u914d(matching)\u5c31\u662f\u5b57\u9762\u4e0a\u7684\u5c06\u4e24\u5f20\u56fe\u4e2d\u5bf9\u5e94\u7684\u70b9\u5efa\u7acb\u8d77\u5339\u914d\u5173\u7cfb\u3002\u800c\u8bc4\u4f30\u65b9\u6cd5\u5c31\u662f\u5bfb\u627e\u300c\u8ddd\u79bb\u300d\u6700\u63a5\u8fd1\u7684\u70b9\u3002

    \u800c\u8fd9\u91cc\u7684\u300c\u8ddd\u79bb\u51fd\u6570\u300d\u662f\u7528\u6765\u8861\u91cf\u4e24\u4e2a\u5173\u952e\u70b9\u7684\u8868\u8fbe\u7684\u5dee\u5f02\u7684\u51fd\u6570\uff0c\u4e00\u822c\u4f7f\u7528 L2 distance\uff0c\u5373 \\(||f_1 - f_2||\\)\u3002

    \u91cd\u590d\u6027\u7eb9\u7406

    \u7136\u800c\u9700\u8981\u7279\u522b\u6ce8\u610f\u70b9\u4e00\u4e2a\u95ee\u9898\u662f\uff0c\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u67d0\u4e2a\u7279\u5f81\u56fe\u6848\u91cd\u590d\u51fa\u73b0\u7684\u60c5\u51b5\uff0c\u8fd9\u7c7b\u95ee\u9898\u53eb\u505a\u91cd\u590d\u6027\u7eb9\u7406\u95ee\u9898\u3002

    \u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u53ef\u80fd\u6709\u5f88\u591a\u5173\u952e\u70b9\u80fd\u548c\u8fd9\u4e2a\u5173\u952e\u70b9\u5b9e\u73b0\u5339\u914d\uff08\u8868\u8fbe\u76f8\u8fd1\uff09\uff0c\u8fd9\u4e2a\u65f6\u5019\u6211\u4eec\u5c31\u9700\u8981\u7528 Ratio score = \\(\\frac{ ||f_1 - f_2|| }{ ||f_1 - f_2'|| }\\)\uff0c\u6bd4\u8f83\u6700\u63a5\u8fd1\u7684\u4e24\u79cd\u5339\u914d\u3002

    \u5982\u679c Ratio score \u63a5\u8fd1 1\uff0c\u8bf4\u660e \\(f_1, F_2,f_2'\\) \u7684\u8868\u8fbe\u90fd\u5f88\u63a5\u8fd1\uff0c\u8fd9\u4e2a\u5339\u914d\u5e76\u4e0d\u53ef\u9760\uff0c\u53ea\u80fd\u4e22\u6389\u8fd9\u4e2a\u5173\u952e\u70b9\u3002

    \u5728\u4f20\u7edf CV \u6280\u672f\u4e2d\uff0c\u6211\u4eec\u5f88\u96be\u5904\u7406\u8fd9\u4e00\u7c7b\u91cd\u590d\u6027\u7eb9\u7406\u7684\u95ee\u9898\uff0c\u6240\u4ee5\u9047\u5230\u8fd9\u79cd\u96be\u4ee5\u5bfb\u627e\u5339\u914d\u5173\u7cfb\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u53ea\u80fd\u9009\u62e9\u4e0d\u5339\u914d\u5b83\u4eec\u3002

    \u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u52a0\u5339\u914d\u7684\u51c6\u786e\u6027\uff0c\u6211\u4eec\u8fd8\u6709\u4e00\u4e2a\u5224\u5b9a\u89c4\u5219\uff1a\u4e24\u70b9\u76f8\u4e92\u6700\u76f8\u4f3c\uff0c\u5219\u8be5\u5339\u914d\u5341\u5206\u53ef\u4fe1\u3002\uff08\u5728 I2 \u4e2d\u4f60\u6700\u50cf\u6211\uff0c\u5728 I1 \u4e2d\u6211\u6700\u50cf\u4f60\uff09

    "},{"location":"cour_note/D2QD_Intro2CV/Lec05/#\u8fd0\u52a8\u4f30\u8ba1","title":"\u8fd0\u52a8\u4f30\u8ba1","text":"

    \u5148\u524d\uff0c\u6211\u4eec\u7740\u773c\u4e8e\u5355\u5f20\u56fe\u7247\uff0c\u6216\u8005\u8bf4\u51e0\u5f20\u56fe\u7247\uff0c\u4ecd\u7136\u662f\u4ee5\u4e00\u4e2a\u9759\u6001\u7684\u89c6\u89d2\u6765\u89c2\u5bdf\u56fe\u50cf\u3002

    \u800c\u5f53\u6211\u4eec\u628a\u7814\u7a76\u5bf9\u8c61\u4ece\u56fe\u7247\u6539\u53d8\u4e3a\u89c6\u9891\u6216\u8005\u8bf4\u56fe\u7247\u5e8f\u5217\u7684\u65f6\u5019\uff0c\u56fe\u7247\u5c31\u88ab\u8d4b\u4e88\u4e86\u8fd0\u52a8\u7684\u5c5e\u6027\uff0c\u800c\u8fd9\u5c31\u5f15\u51fa\u4e86\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u3002

    \u9996\u5148\uff0c\u8fd0\u52a8\u6309\u7167\u6210\u56e0\u4e3b\u8981\u53ef\u4ee5\u5206\u4e3a\u76f8\u673a\u8fd0\u52a8\u548c\u573a\u666f\u8fd0\u52a8\u4e24\u4e2a\u7ef4\u5ea6\u3002

    \u76f8\u673a\u8fd0\u52a8 \u573a\u666f\u8fd0\u52a8 eg (\u5149\u7ebf\u53d8\u5316\u7b49\u5f71\u54cd\u89c6\u9891\u6bcf\u4e00\u5e27\u7684\u5185\u5bb9\u5b58\u5728\u5149\u5f71\u5dee\u5f02\u7b49) \u9759\u666f\u201c\u8fd0\u955c\u201d \u76d1\u63a7\u5f55\u50cf \u4f53\u80b2\u8d5b\u4e8b\u955c\u5934\u8ddf\u8e2a

    \u800c\u9488\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\uff0c\u6709\u8fd9\u4e48\u51e0\u79cd\u89e3\u51b3\u7684\u89c6\u89d2\uff1a

    \u800c\u4e24\u4e2a\u89c6\u89d2\u90fd\u53ef\u4ee5\u4f7f\u7528 Lucas-Kanade method \u89e3\u51b3\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u7ed9\u8fd0\u52a8\u4f30\u8ba1(motion estimation)\u95ee\u9898\u4e00\u4e2a\u66f4\u660e\u786e\u7684\u5b9a\u4e49\uff1a

    motion estimation

    Wiki: https://en.wikipedia.org/wiki/Motion_estimation

    \u8fd0\u52a8\u4f30\u8ba1\u662f\u6307\u4ece\u4e00\u4e2a 2D \u56fe\u50cf\u5230\u53e6\u4e00\u4e2a 2D \u56fe\u50cf\u7684\u8f6c\u6362\u4e2d\u786e\u5b9a\u63cf\u8ff0\u8fd0\u52a8\u7684\u8fd0\u52a8\u77e2\u91cf\u7684\u8fc7\u7a0b\uff0c\u901a\u5e38\u662f\u4ece\u89c6\u9891\u5e8f\u5217\u4e2d\u76f8\u90bb\u7684\u5e27\u4e2d\u63d0\u53d6\u3002

    \u5047\u8bbe\u6211\u4eec\u6709\u5339\u914d\u70b9 \\(P(x,y,t)\\) \u548c \\(P(x+u, y+v, t+1)\\)\uff0c\u5219\u8fd0\u52a8\u4f30\u8ba1\u5219\u662f\u6c42\u89e3 \\((u,v)\\) \u7684\u8fc7\u7a0b\u3002

    \u4e0d\u540c\u4e8e\u5173\u952e\u70b9\u7684\u5339\u914d\uff0c\u8fd0\u52a8\u4f30\u8ba1\u66f4\u4fa7\u91cd\u4e8e\u5bf9\u5173\u952e\u70b9\u7684\u65f6\u5e8f\u5173\u7cfb\u7684\u5339\u914d\u4e0e\u63cf\u8ff0\u3002

    \u800c\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u8ba8\uff0c\u90fd\u9700\u8981\u57fa\u4e8e LK \u5047\u8bbe\u5c55\u5f00\uff1a

    Key Asumptions of Lucas-Kanade

    1. [Small motion] \u76f8\u90bb\u5e27\uff0c\u5339\u914d\u70b9\u7684\u8fd0\u52a8\u8ddd\u79bb\u5c0f\uff1b
    2. [Brightness constancy] \u76f8\u90bb\u5e27\uff0c\u70b9\u7684\u4eae\u5ea6\u503e\u5411\u4e8e\u4e0d\u53d8\uff0c\u5373\u53d8\u5316\u5fae\u5c0f\uff1b
    3. [Spatial coherence] \u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\uff1b

    \u63a5\u4e0b\u6765\uff0c\u57fa\u4e8e LK \u5047\u8bbe\uff0c\u6211\u4eec\u6765\u7814\u7a76\u8fd0\u52a8\u4f30\u8ba1\u95ee\u9898\u7684\u6c42\u89e3\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u5c06\u7b2c\u4e8c\u6761\u5047\u8bbe\u8868\u8fbe\u5f0f\u5316\uff0c\u5373\u6709\uff1a

    \\[ I(x,y,t) = I(x+u, y+v, t+1) \\]

    \u4e3a\u4e86\u6c42\u89e3 \\(u\\) \u548c \\(v\\)\uff0cLK Method \u5bf9\u5176\u4f5c\u6cf0\u52d2\u5c55\u5f00\uff1a

    \\[ I(x+u,y+v,t+1) \\approx I(x,y,t) + I_x\\cdot u + I_y \\cdot v + I_t \\]

    \u79fb\u9879\uff1a

    \\[ I(x+u,y+v,t+1) - I(x,y,t) = I_x\\cdot u + I_y \\cdot v + I_t \\]

    \u6839\u636e\u5047\u8bbe 2\uff0c\u5f97\u5230\uff1a

    \\[ I_x\\cdot u + I_y \\cdot v + I_t \\approx 0 \\]

    \u5373\uff1a

    \\[ \\nabla I \\cdot \\begin{bmatrix} u & v \\end{bmatrix}^T + I_t = 0 \\]

    \u4e8e\u662f\u6211\u4eec\u5f97\u5230\u4e86\u5173\u4e8e \\(u\\) \u548c \\(v\\) \u7684\u4e00\u4e2a\u8f83\u7b80\u5355\u7684\u7b49\u5f0f\u3002

    \u7136\u800c\u6211\u4eec\u53ea\u6709\u4e00\u4e2a\u7b49\u5f0f\uff0c\u4f46\u9700\u8981\u6c42\u89e3\u7684\u672a\u77e5\u5143 \\(u\\) \u548c \\(v\\) \u6709\u4e24\u4e2a\u3002

    \u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86\u5047\u8bbe 3\uff0c\u5373\u76f8\u90bb\u7684\u70b9\u503e\u5411\u4e8e\u8fd0\u52a8\u76f8\u4f3c\u3002

    \u4e8e\u662f\u6211\u4eec\u53ef\u4ee5\u628a\u7a97\u53e3\u5185\u7684\u50cf\u7d20\u90fd\u5e26\u5165\u4e0a\u9762\u90a3\u4e2a\u7b49\u5f0f\uff0c\u5c1d\u8bd5\u6765\u6c42\u89e3\uff08\u5927\u81f4\u90fd\u76f8\u4f3c\u7684\uff09\\(u\\) \u548c \\(v\\)\u3002\u6b64\u65f6\u6211\u4eec\u7684\u65b9\u7a0b\u6570\u91cf\u5c31\u975e\u5e38\u5145\u88d5\u4e86\u3002\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u5c06\u95ee\u9898\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\u3002

    \\[ Ad=b \\rightarrow \\min\\limits_d ||Ad-b||^2 \\]

    Least squares solution(\u524d\u9762\u63d0\u5230\u8fc7\u7684\u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u8fd1\u4f3c\u89e3) for d given by \\((A^TA)d = A^Tb\\).

    \u800c\u8fd9\u4e2a\u89e3\u662f\u5426\u5b58\u5728\u7684\u6761\u4ef6\u662f\uff1a

    \\[ \\underbrace{ \\begin{bmatrix} \\sum I_x I_x & \\sum \\sum I_x I_x \\\\ \\sum I_x I_y & \\sum I_y I_y \\end{bmatrix} }_{A^T A} \\begin{bmatrix} u \\\\ v \\end{bmatrix} = \\underbrace{ \\begin{bmatrix} \\sum I_x I_t \\\\ \\sum I_y I_t \\end{bmatrix} }_{A^T b} \\]

    \u5728\u8be5\u5f0f\u4e2d\uff0c\\(A^TA\\) \u9700\u8981\u662f\u53ef\u9006\u7684\uff0c\u5e76\u4e14\u5b83\u7684\u4e24\u4e2a\u7279\u5f81\u503c\u90fd\u4e0d\u80fd\u592a\u5c0f\u3002\u4e5f\u5c31\u8be5\u70b9\u80fd\u591f\u88ab Harris corner detector \u68c0\u6d4b\u5230\u70b9\u89d2\u70b9\uff01

    \u56e0\u6b64\uff0c\u5018\u82e5\u4f7f\u7528 LK \u65b9\u6cd5\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(A^TA\\) \u53ef\u9006\uff0c\u4e14\u56fe\u50cf\u4e2d\u4e0d\u80fd\u6709\u592a\u591a\u566a\u70b9\u3002

    \u6b64\u5916\uff0c\u5173\u4e8e\u5bf9\u5047\u8bbe 1 \u7684\u7ea6\u675f\uff0c\u539f\u5219\u4e0a\u4e24\u5e27\u4e4b\u95f4\u7684\u8fd0\u52a8\u5dee\u8ddd\u5e94\u8be5\u5c0f\u4e8e\u4e00\u4e2a\u50cf\u7d20\uff0c\u7136\u800c\u8fd9\u4e2a\u6761\u4ef6\u975e\u5e38\u82db\u523b\u3002\u6240\u4ee5\u6211\u4eec\u7684\u53ef\u4ee5\u5148\u5bf9\u56fe\u7247\u8fdb\u884c\u6a21\u7cca/\u7f29\u5c0f\u5904\u7406\uff0c\u50cf\u7d20\u8db3\u591f\u201c\u5927\u201d\u4e4b\u540e\u5c31\u53ef\u4ee5\u6ee1\u8db3\u8fd9\u4e2a\u5047\u8bbe 1\u3002\u7136\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u4f1a\u4e22\u5931\u5f88\u591a\u4fe1\u606f\uff0c\u6240\u4ee5\u53ea\u6839\u636e\u8fd9\u4e2a\u6761\u4ef6\u6765\u8ba1\u7b97\u4e5f\u4e0d\u884c\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u5728\u50cf\u7d20\u91d1\u5b57\u5854\u4e0a\u8fdb\u884c\u9010\u5c42\u6b21\u4f30\u8ba1\uff0c\u518d\u4e0d\u65ad\u7ec6\u5316\u7684\u505a\u6cd5\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec06/","title":"Lecture 6 | Image Alignment and Stitching","text":"

    \u7ea6 1320 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec06/#\u56fe\u50cf\u62fc\u63a5","title":"\u56fe\u50cf\u62fc\u63a5","text":"

    \u6240\u8c13\u7684\u56fe\u50cf\u62fc\u63a5\uff0c\u6a21\u5f0f\u4e0a\u5c31\u662f\u5bfb\u627e\u82e5\u5e72\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u5e76\u5c06\u753b\u9762\u5185\u5bb9\u8fdb\u884c\u62fc\u63a5\u548c\u5ef6\u5c55\uff0c\u5176\u672c\u8d28\u662f\u6c42\u89e3\u56fe\u50cf\u4e4b\u95f4\u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u6a21\u5f0f\u62df\u5408\u7684\u95ee\u9898\u3002\u5e94\u7528\u4e0a\u6bd4\u5982 \u5168\u666f\u56fe(panorama) \u6216 360\u00b0VR\u7b49\u3002

    \u6295\u5f71\u5e73\u9762/\u66f2\u9762

    \u5e38\u89c1\u7684\u56fe\u50cf\u62fc\u63a5\u6709\u6bd4\u5982\u5c06\u5e73\u884c\u7684\u666f\u8c61\u5728\u5e73\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\uff0c\u4e5f\u6709\u5c06\u6c34\u5e73\u73af\u7ed5\u7684\u7684\u666f\u8c61\u5728\u67f1\u9762\u4e0a\u6295\u5f71\u548c\u62fc\u63a5\u7b49\u3002\u533a\u522b\u5728\u4e8e\u9700\u8981\u5bf9\u56fe\u50cf\u5185\u5bb9\u7684\u8868\u8fbe\u8fdb\u884c\u4e00\u4e2a\u201c\u53d8\u6362\u201d\uff0c\u4f46\u5b9e\u9645\u53d8\u5316\u65b9\u6cd5\u4e0d\u4f1a\u6709\u5927\u533a\u522b\uff0c\u4ecd\u7136\u662f\u5148\u68c0\u6d4b\u76f8\u540c\u90e8\u5206\u518d\u6c42\u89e3\u53d8\u6362\u5173\u7cfb\u3002

    \u5728\u8fd9\u91cc\u9700\u8981\u505a\u7684\u4e00\u4e2a\u7279\u522b\u8bf4\u660e\u662f\uff0c\u5728\u4e4b\u540e\u8be6\u7ec6\u4ecb\u7ecd\u201c\u53d8\u6362\u201d\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4f1a\u89e3\u91ca\u4e3a\u4ec0\u4e48\u624b\u673a\u62cd\u6444\u5e7f\u89d2\u7167\u7247\u65f6\uff0c\u4f1a\u8981\u6c42\u62cd\u6444\u8005\u53ea\u505a\u89c6\u89d2\u53d8\u5316\u800c\u4e0d\u505a\u4f4d\u79fb\u3002

    \u8fc7\u7a0b\u6982\u8ff0

    \u6211\u4eec\u8fd9\u91cc\u8003\u8651\u7684\u56fe\u50cf\u62fc\u63a5\u95ee\u9898\uff0c\u66f4\u591a\u6307\u7684\u662f\u4e24\u5f20\u56fe\u7247\u62e5\u6709\u5171\u540c\u523b\u753b\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u62fc\u63a5\uff0c\u5373\u4e24\u5f20\u7167\u7247\u5b58\u5728\u4ea4\u96c6\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u901a\u8fc7\u56fe\u50cf\u7279\u5f81\u5339\u914d\u76f8\u5173\u6280\u672f\uff0c\u627e\u5230\u8fd9\u4e24\u5f20\u56fe\u7247\u7684\u5171\u540c\u90e8\u5206\uff0c\u63a5\u4e0b\u6765\u901a\u8fc7\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u8fd9\u4e9b\u5171\u540c\u90e8\u5206\u5982\u4f55\u5b9e\u73b0\u8f6c\u5316\uff08\u76f8\u5f53\u4e8e\u5728\u505a\u201c\u5bf9\u9f50\u201d\uff09\u3002

    \u62fc\u63a5\u8fc7\u7a0b\u4e2d\u4f1a\u51fa\u73b0\u8fb9\u754c\uff0c\u800c\u8fd9\u4e2a\u8fb9\u754c\u6211\u4eec\u662f\u53ef\u4ee5\u4eba\u4e3a\u9009\u62e9\u7684\uff0c\u6bd4\u5982\u6211\u4eec\u53ef\u4ee5\u9009\u62e9\u8ba9\u5b83\u5dee\u8ddd\u6700\u5c0f\u7684\u5730\u65b9\u6210\u4e3a\u8fb9\u754c\uff0c\u53c8\u6216\u8005\u662f\u4e00\u4e2a\u56fe\u5272\u95ee\u9898\uff1b

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/","title":"Lecture 7 | Structure From Motion","text":"

    \u7ea6 8658 \u4e2a\u5b57 14 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 43 \u5206\u949f

    \u524d\u8a00

    \u4e2a\u4eba\u611f\u89c9\u8fd9\u4e00\u7ae0\u7684\u5185\u5bb9\u867d\u7136\u8109\u7edc\u6e05\u6670\uff0c\u4f46\u662f\u9700\u8981\u4e0d\u65ad\u5f15\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5982\u679c\u76f4\u63a5\u91c7\u7528\u201c\u7528\u5230\u4ec0\u4e48\u8bb2\u4ec0\u4e48\u201d\u7684\u987a\u5e8f\u9610\u8ff0\uff0c\u53ef\u80fd\u4f1a\u6709\u4e9b\u6742\u4e71\uff0c\u4e0d\u65b9\u4fbf\u77e5\u8bc6\u7d22\u5f15\u548c\u590d\u4e60\uff0c\u6240\u4ee5\u6211\u5927\u81f4\u6309\u7167\u62d3\u6251\u6392\u5e8f\u7684\u987a\u5e8f\u6392\u5217\u5185\u5bb9\uff0c\u503e\u5411\u4e8e\u5b8c\u6574\u5730\u4ecb\u7ecd\u4e00\u4e0b\u524d\u7f6e\uff0c\u518d\u5f15\u5165\u4e4b\u540e\u7684\u5185\u5bb9\u5e76\u9636\u6bb5\u6027\u5c0f\u7ed3\uff0c\u53ef\u80fd\u770b\u8d77\u6765\u6bd4\u8f83\u5510\u7a81\uff0c\u4f46\u662f\u5927\u6982\u5bf9\u56de\u5934\u67e5\u77e5\u8bc6\u70b9\u6bd4\u8f83\u65b9\u4fbf\u3002

    \u8bf4\u660e

    \u672c\u6587\u4e2d\u63d0\u5230\u7684\u6240\u6709\u7684\u300c\u6210\u50cf\u5e73\u9762\u300d\u6307\u7684\u90fd\u662f\u6211\u4eec\u7684\u7b80\u5316\u51e0\u4f55\u6a21\u578b\u4e2d\u7684\u865a\u62df\u6210\u50cf\u5e73\u9762\uff0c\u5e76\u4e0d\u662f\u7269\u7406\u610f\u4e49\u4e0a\u5c0f\u5b54\u6210\u50cf\u6240\u5728\u7684\u90a3\u4e2a\u6210\u53cd\u5411\u5012\u7acb\u50cf\u7684\u5e73\u9762\uff01

    \u8fd0\u52a8\u63a8\u65ad\u7ed3\u6784(Structure from Motion, SfM)\u7528\u4e8e\u4f30\u8ba1\u4e8c\u7ef4\u56fe\u50cf\u4e2d\u7684\u4e09\u7ef4\u7ed3\u6784\uff0c\u901a\u8fc7\u76f8\u673a\u8fd0\u52a8\uff08\u5e73\u79fb\u3001\u65cb\u8f6c\uff09\u5f15\u8d77\u7684\u753b\u9762\u53d8\u5316\u6765\u8ba1\u7b97\u5176\u53cd\u5e94\u7684 3D \u7ed3\u6784\u3002

    \u5728\u673a\u5668\u4eba\u9886\u57df\uff0c\u4e00\u4e2a\u76f8\u5173\u7684\u9886\u57df\u662f \u540c\u65f6\u5b9a\u4f4d\u4e0e\u5730\u56fe\u6784\u5efa(Simultaneous Localization and Mapping, SLAM)\u3002

    \u4e09\u4e2a\u5173\u952e\u95ee\u9898

    1. \u5982\u4f55\u63cf\u8ff0\u76f8\u673a\u7684\u6295\u5f71\u884c\u4e3a\uff0c\u4e5f\u5c31\u662f\u76f8\u673a\u6a21\u578b\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u672c\u5c0f\u7ed3\u6307\u900f\u89c6\u6a21\u578b\uff1b
    2. \u5982\u4f55\u901a\u8fc7\u56fe\u50cf\u6c42\u89e3\u76f8\u673a\u53c2\u6570\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u76f8\u673a\u6807\u5b9a(Camera Calibration)\uff0c\u4ee5\u53ca\u5982\u4f55\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4e0e\u671d\u5411\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u88ab\u79f0\u4e3a\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\uff1b
    3. \u5982\u4f55\u5229\u7528\u82e5\u5e72\u89c6\u89d2\u8fdb\u884c\u91cd\u5efa\uff1b

    \u5176\u4e2d\uff0c\u7b2c\u4e00\u4e2a\u547d\u9898\u7684\u5185\u5bb9\u5df2\u7ecf\u5728\u7b2c\u4e8c\u8bb2\u4e2d\u6d89\u53ca\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

    \u76f8\u673a\u6807\u5b9a(Camera Calibration)\u5373\u6c42\u89e3\u76f8\u673a\u7528\u6765\u63cf\u8ff0\u76f8\u673a\u6a21\u578b\u7684\u81ea\u8eab\u53c2\u6570\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5185\u53c2(Intrinsic Parameters)\uff1b\u800c\u4f4d\u7f6e\u4f30\u8ba1(Pose Estimation)\u6c42\u89e3\u76f8\u673a\u7684\u7a7a\u95f4\u4f4d\u7f6e\u4ee5\u53ca\u671d\u5411\uff0c\u4e0e\u5185\u53c2\u76f8\u5bf9\u5e94\u7684\uff0c\u5c31\u662f\u6c42\u89e3\u76f8\u673a\u7684\u5916\u53c2(Extrinsic Parameters)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","title":"\u6210\u50cf\u8fc7\u7a0b\u7684\u5efa\u6a21","text":"

    \u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898

    \u9996\u5148\uff0c\u4e3a\u4e86\u5c55\u5f00\u4e4b\u540e\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u9700\u8981\u5b9a\u4e49\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898(Visual Localization Problem)\uff1a\u7ed9\u5b9a\u4e00\u4e2a\u5df2\u77e5\u7684\u4e09\u7ef4\u6a21\u578b\uff0c\u4ece\u67d0\u4e2a\u4f4d\u7f6e\u5bf9\u5176\u8fdb\u884c\u62cd\u6444\uff0c\u6c42\u89e3\u62cd\u6444\u4f4d\u7f6e\u548c\u89c6\u89d2\u3002

    \u800c\u4e3a\u4e86\u5c55\u5f00\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u5bf9\u76f8\u673a\u6210\u50cf\u8fd9\u4e2a\u8fc7\u7a0b\u8fdb\u884c\u4e00\u4e2a\u6570\u5b66\u5efa\u6a21\u2014\u2014\u66f4\u8be6\u7ec6\u7684\u6765\u8bf4\uff0c\u662f\u5efa\u6a21\u4e00\u4e2a\u7a7a\u95f4 3D \u70b9\u4e0e\u76f8\u673a\u4e0a\u7279\u5b9a\u50cf\u7d20\u533a\u57df\u7684\u8f6c\u5316\u5173\u7cfb\u3002

    \u9996\u5148\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b\u6295\u5f71\u6a21\u578b\u7684\u53ef\u89c6\u5316\u8868\u793a\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\uff1a

    \u56de\u987e

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u5c0f\u5b54\u6210\u50cf\u7684\u6a21\u578b\u89c6\u56fe\u5176\u5b9e\u8fd8\u662f\u6bd4\u8f83\u9ebb\u70e6\u7684\u3002\u73b0\u5728\u6211\u4eec\u628a\u8fd9\u4e2a\u5b9a\u89d2\u76f8\u4f3c\u5bf9\u6298\uff0c\u53d8\u6210 A \u5b57\u578b\u76f8\u4f3c\u6765\u8868\u793a\u8fd9\u4e2a\u6a21\u578b\uff0c\u4ee5\u7b80\u5316\u4e0d\u5fc5\u8981\u7684\u4fe1\u606f\uff0c\u540c\u65f6\u4e5f\u80fd\u66f4\u6e05\u6670\u5730\u8868\u793a\u900f\u89c6\u5173\u7cfb\u3002

    \u89c4\u5b9a\u6211\u4eec\u8ba8\u8bba\u7684\u95ee\u9898\u4e2d\u7269\u8ddd\u603b\u662f\u5927\u4e8e\u50cf\u8ddd\uff0c\u5219\u53ef\u4ee5\u5c06\u50cf\u8868\u793a\u4e3a\u76f8\u673a\u4e2d\u5fc3\u5230\u7269\u4f53\u7684\u653e\u5c04\u8fde\u7ebf\u4e2d\u7684\u622a\u9762\u3002

    \u5b83\u6bd4\u8f83\u597d\u5730\u8868\u8fbe\u4e86\u900f\u89c6\u5173\u7cfb\uff0c\u5373 \u76f8\u673a\u4e2d\u5fc3 \u7269\u70b9B \u50cf\u70b9B' \u59cb\u7ec8\u5171\u7ebf\u3002\u8fd9\u4e5f\u662f\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u66f4\u52a0\u5e38\u89c1\u7684\u53ef\u89c6\u5316\u8868\u73b0\u65b9\u6cd5\u3002

    \u5b83\u63d0\u4f9b\u4e86\u4e00\u79cd\u5c06\u76f8\u673a\u6a21\u578b\u6210\u50cf\u539f\u7406\u53ef\u89c6\u5316\u7684\u65b9\u6cd5\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u5c06\u5b83\u653e\u5230 3D \u7a7a\u95f4\u4e2d\uff1a

    \u8fd9\u5f20\u56fe\u5927\u81f4\u63cf\u8ff0\u4e86\uff1a\u5728\u7279\u5b9a\u4f4d\u7f6e\u6709\u7740\u7279\u5b9a\u671d\u5411\u7684\u76f8\u673a\u6a21\u578b\u5982\u4f55\u62cd\u5230\u5df2\u77e5 3D \u666f\u8c61\u7684\u7279\u5b9a\u753b\u9762\uff0c\u4f46\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u300cPicture\u300d\u4ee3\u8868\u7684\u662f Image Plane\uff0c\u4e5f\u5c31\u662f\u6210\u50cf\u5e73\u9762\uff0c\u6b64\u65f6\u300c\u5750\u6807\u300d\u7684\u5355\u4f4d\u662f\u957f\u5ea6\uff0c\u5982\u6beb\u7c73\u2014\u2014\u4e0e\u4ee5\u300c\u50cf\u7d20\u300d\u4e3a\u57fa\u672c\u5355\u5143\u7684\u201c\u56fe\u7247\u201d\u6709\u4e00\u5b9a\u533a\u522b\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u4ece 3D \u4e2d\u7684\u67d0\u4e00\u4e2a\u70b9\uff0c\u5230\u56fe\u7247\u4e0a\u7684\u67d0\u5757\u50cf\u7d20\u533a\u57df\uff0c\u6709\u5927\u81f4\u5982\u4e0b\u51e0\u4e2a\u9636\u6bb5\uff1a

    graph LR\n    A[3D \u666f\u8c61] --> B[2D \u6210\u50cf\u5e73\u9762] --> C[\u50cf\u7d20\u56fe\u50cf];

    \u4e0d\u8fc7\u9700\u8981\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4e2d\u4ecb\u7ecd\u7684\u4e00\u7cfb\u5217\u5efa\u6a21\uff0c\u662f\u5efa\u7acb\u5728\u4ee5\u76f8\u673a\u4e3a\u53c2\u8003\u7cfb\u7684\u60c5\u51b5\u4e0b\u7684\uff0c\u800c\u5728\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u62e5\u6709\u7684 3D \u666f\u8c61\u4fe1\u606f\u80af\u5b9a\u4e0d\u662f\u901a\u8fc7\u76f8\u673a\u5750\u6807(Camera Coordinates)\u6765\u8868\u793a\u7684\uff0c\u800c\u662f\u7528\u4e16\u754c\u5750\u6807(World Coordinates)\uff0c\u663e\u7136\uff0c\u8fd9\u91cc\u53ea\u5305\u62ec\u5e73\u79fb\u548c\u65cb\u8f6c\uff0c\u4e5f\u5c31\u662f\u7ecf\u8fc7\u4e00\u6b21\u4eff\u5c04\u53d8\u6362\u3002

    \u6211\u4eec\u5bf9\u4e0a\u9762\u90a3\u4e2a\u6d41\u7a0b\u56fe\u7684\u7ed3\u679c\u8fdb\u884c\u4e00\u4e2a\u6539\u8fdb\uff1a

    graph LR\n    A[\"(\u4e16\u754c\u5750\u6807) 3D \u666f\u8c61\"] --> B[\"(\u76f8\u673a\u5750\u6807) 3D \u666f\u8c61\"] --> C[\"(\u6210\u50cf\u5e73\u9762) 2D \u6620\u5c04\"] --> D[\"(\u4f20\u611f\u5668\u5e73\u9762) \u50cf\u7d20\u56fe\u50cf\"];
    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e16\u754c\u5750\u6807-to-\u76f8\u673a\u5750\u6807","title":"\u4e16\u754c\u5750\u6807 to \u76f8\u673a\u5750\u6807","text":"

    \u4e3a\u4e86\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u8f6c\u6362\uff0c\u6211\u4eec\u9700\u8981\u77e5\u9053\u76f8\u673a\u5750\u6807\u5728\u4e16\u754c\u5750\u6807\u4e2d\u7684\u65b9\u5411\u4e0e\u4f4d\u7f6e\uff0c\u4e0d\u96be\u53d1\u73b0\uff0c\u5b9e\u9645\u4e0a\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u77e5\u9053\u76f8\u673a\u7684\u5916\u53c2\u3002

    \u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u5c31\u662f\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u80fd\u591f\u5b9e\u73b0\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7cfb\u4e0b\u5750\u6807\u7684\u8f6c\u6362\uff1a

    \\[ \\underbrace{\\;\\mathbf{x}_w = \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix}\\;}_{\\text{World Coordinates}} \\xrightarrow{\\text{Rotation \\& Movement}} \\underbrace{\\;\\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix}\\;}_{\\text{Camera Coordinates}} \\]

    \u6211\u4eec\u5b9a\u4e49\u5916\u53c2 \\((R,\\mathbf{c}_w)\\)\uff0c\u5206\u522b\u4ee3\u8868\u300c\u4ece\u4e16\u754c\u5750\u6807\u5411\u76f8\u673a\u5750\u6807\u7684\u65cb\u8f6c\u77e9\u9635\u300d\u548c\u300c\u5728\u4e16\u754c\u5750\u6807\u7cfb\u4e0b\u7684\u76f8\u673a\u7684\u4e2d\u5fc3\u5750\u6807\u300d\uff0c\u5219\u53d8\u6362\u540e\u7684\u5750\u6807\u5373\u4e3a\uff1a

    \\[ \\mathbf{x}_c = R(\\mathbf{x}_w - \\mathbf{c}_w) = R \\mathbf{x}_w - R \\mathbf{c}_w = R \\mathbf{x}_w + \\mathbf{t},\\ \\ \\text{ where } \\mathbf{t} = -R \\mathbf{c}_w \\\\ \\text{i.e.} \\;\\; \\mathbf{x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\]

    \u5f53\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u7edf\u4e00\uff1a

    \\[ \\mathbf{\\tilde x}_c = \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\underbrace{\\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix}}_{\\text{Extrinsic Matrix}} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

    \u5916\u53c2\u77e9\u9635

    \u5176\u4e2d\uff0c\u65b0\u5f97\u5230\u7684\u8fd9\u4e2a 44 \u7684\u77e9\u9635\u5c31\u88ab\u79f0\u4e3a\u5916\u53c2\u77e9\u9635(Extrinsic Matrix)*\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

    \\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u5750\u6807-to-\u6210\u50cf\u5e73\u9762","title":"\u76f8\u673a\u5750\u6807 to \u6210\u50cf\u5e73\u9762","text":"

    \u5b9e\u9645\u4e0a\u8fd9\u4e00\u6b65\u5c31\u662f\u6211\u4eec\u5728\u76f8\u673a\u6a21\u578b\u4ecb\u7ecd\u8fc7\u7684\u5185\u5bb9\uff0c\u6211\u4eec\u5728\u4e0a\u4e00\u6b65\u5df2\u7ecf\u505a\u597d\u4e86\u9f50\u6b21\u5750\u6807\u7684\u94fa\u57ab\uff0c\u6240\u4ee5\u8fd9\u4e00\u6b65\u683c\u5916\u7b80\u5355\u3002

    \\[ \\begin{bmatrix} \\mathbf{x}_{i_{1 \\times 2}} \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} f & 0 & 0 & 0 \\\\ 0 & f & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

    \u6ce8\u610f

    \u8fd9\u91cc 3*4 \u7684\u77e9\u9635\u8fd8\u4e0d\u662f\u5185\u53c2\u77e9\u9635\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6210\u50cf\u5e73\u9762-to-\u4f20\u611f\u5668\u5e73\u9762","title":"\u6210\u50cf\u5e73\u9762 to \u4f20\u611f\u5668\u5e73\u9762","text":"

    \u4e4b\u524d\u8bf4\u8fc7\uff0c\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u548c\u4f20\u611f\u5668\u5e73\u9762\u4e0a\u7684\u5185\u5bb9\u6700\u5927\u7684\u4e0d\u540c\u5c31\u662f\u8ba1\u91cf\u5355\u4f4d\u4e0d\u540c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5c06\u957f\u5ea6\u4fe1\u606f\u8f6c\u5316\u4e3a\u50cf\u7d20\u4fe1\u606f\uff1b\u6b64\u5916\uff0c\u4e2d\u5fc3\u5750\u6807\u4e5f\u9700\u8981\u53d8\u6362\u3002

    \u5047\u8bbe \\(m_x\\) \u548c \\(m_y\\) \u5206\u522b\u662f\u5355\u4f4d\u957f\u5ea6\u4e0a\u7684\u50cf\u7d20\u5bc6\u5ea6\uff08\u4ee5 px/mm \u4e3a\u4f8b\uff09\uff0c\\((c_x,c_y)\\) \u5206\u522b\u662f\u5728\u6210\u50cf\u5e73\u9762\u4e0b\u4f20\u611f\u5668\u5e73\u9762\u7684\u4e2d\u5fc3\u5750\u6807\uff0c\u5219\uff1a

    \\[ \\left\\{ \\begin{aligned} u &= m_x \\cdot x_i + c_x\\\\ v &= m_y \\cdot y_i + c_y \\end{aligned} \\right. \\]

    \u5e26\u5165\u4e0a\u4e00\u8282\u7684\u7ed3\u679c\uff0c\u5f97\u5230\uff08\u6ce8\u610f\uff0c\u8fd9\u91cc\u7684\u201c\u9f50\u6b21\u5750\u6807\u201d\u662f\u4e0a\u4e00\u8282\u5e26\u6765\u7684\uff0c\u8fd9\u4e00\u8282\u7684\u8ba1\u7b97\u5e76\u4e0d\u9700\u8981\u9f50\u6b21\u5750\u6807\uff09\uff1a

    \\[ \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = ... \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{{\\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix}}}_{\\text{Intrinsic Matrix}} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

    \u5185\u53c2\u77e9\u9635

    \u8fd9\u91cc\u5f97\u5230\u7684\uff0c\u5305\u542b \\(f\\) \u548c \\(m\\) \u7684\u77e9\u9635\u624d\u662f\u5185\u53c2\u77e9\u9635(Intrinsic Matrix)\uff0c\u4e5f\u88ab\u5199\u4f5c\uff1a

    \\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635\u3001\u5916\u53c2\u77e9\u9635\u4e0e\u6295\u5f71\u77e9\u9635","text":"

    \u7b80\u5355\u603b\u7ed3\u4e0a\u9762\u51e0\u4e2a\u6b65\u9aa4\u4e0e\u5185\u53c2\u5916\u53c2\u77e9\u9635\u7684\u5173\u7cfb\uff0c\u5c31\u662f\u4e0b\u9762\u8fd9\u5f20\u6d41\u7a0b\u56fe\uff1a

    graph LR\n    subgraph EM[\"Using Extrinsic Matrix\"]\n        A[\"Coordinate Transformation\"]\n    end\n    subgraph IM[\"Using Intrinsic Matrix\"]\n        B[\"Perspective Projection\"]\n        C[\"Image Plane to Image Sensor Mapping\"]\n    end\n    A ---> B\n    B ---> C
    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5185\u53c2\u77e9\u9635","title":"\u5185\u53c2\u77e9\u9635","text":"

    \u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5185\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

    \\[ M_{int} = \\begin{bmatrix} m_x f & 0 & c_x & 0 \\\\ 0 & m_y f & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\\\ or \\\\ K = \\begin{bmatrix} m_x f & 0 & c_x \\\\ 0 & m_y f & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\]

    \u5176\u4e2d\u4e3b\u8981\u6709 4 \u4e2a\u81ea\u7531\u5ea6\uff1a\\(m_x f\\)\u3001\\(m_y f\\)\u3001\\(c_x\\)\u3001\\(c_y\\)\u3002

    \u7136\u800c\u5b9e\u9645\u4e0a\u672a\u5fc5\u5982\u6b64\uff0c\u7531\u4e8e\u7578\u53d8\u7b49\u53ef\u80fd\u5b58\u5728\u7684\u539f\u56e0\uff0c\u5b9e\u9645\u7684\u5185\u53c2\u77e9\u9635\uff0c\u6216\u8005\u662f\u6c42\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\u5e76\u4e0d\u4e00\u5b9a\u5f62\u5982\u6b64\uff0c\u6211\u4eec\u5728\u540e\u9762\u4f1a\u63d0\u5230\uff0c\u7531\u4e8e\u67d0\u4e9b\u6027\u8d28\u5206\u89e3\u51fa\u6765\u7684\u5185\u53c2\u77e9\u9635\uff0c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u53f3\u4e0a\u4e09\u89d2\u9635\uff0c\u5373\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u7684\u5143\u7d20\u672a\u5fc5\u4e3a\u96f6\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5916\u53c2\u77e9\u9635","title":"\u5916\u53c2\u77e9\u9635","text":"

    \u6211\u4eec\u5728\u4e0a\u9762\u63d0\u5230\u7684\u5916\u53c2\u77e9\u9635\u957f\u8fd9\u6837\uff1a

    \\[ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\mathbf{0}_{1\\times 3} & 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\\\ or \\\\ M_{ext} = \\begin{bmatrix} R_{3\\times 3} & \\mathbf{t} \\\\ \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ \\end{bmatrix} \\]

    \u5176\u4e2d\u4e3b\u8981\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u5305\u542b\u4e86\u65cb\u8f6c\u77e9\u9635 \\(R\\) \u548c\u65cb\u8f6c\u540e\u7684\u4f4d\u79fb\u5411\u91cf \\(\\mathbf{t}\\)\u3002

    \u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u65cb\u8f6c\u77e9\u9635\uff0c\u8fd9\u91cc\u7684\u65cb\u8f6c\u77e9\u9635\u540c\u6837\u62e5\u6709 \u6b63\u4ea4 \u548c \\(||R||_2^2 = 1\\) \u7684\u6027\u8d28\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6295\u5f71\u77e9\u9635","title":"\u6295\u5f71\u77e9\u9635","text":"

    \u603b\u7ed3\u5e94\u7528\u4e24\u4e2a\u77e9\u9635\u7684\u4e24\u4e2a\u9636\u6bb5\uff1a

    Camera to Pixel: Intrinsic Matrix

    \\[ \\mathbf{\\tilde{u}} = M_{int} \\mathbf{\\tilde{x}}_c \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x & 0 \\\\ 0 & f_y & c_y & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1 \\end{bmatrix} \\]

    World to Camera: Extrinsic Matrix

    \\[ \\mathbf{\\tilde{x}}_c = M_{ext} \\mathbf{\\tilde{x}}_w \\;\\;\\;\\;i.e.\\;\\;\\;\\; \\begin{bmatrix} x_c \\\\ y_c \\\\ z_c \\\\ 1\\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y\\\\ r_{31} & r_{32} & r_{33} & t_z\\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]

    \u800c\u5c06\u5b83\u4eec\u7ed3\u5408\uff0c\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u5b8c\u6574\u7684\u6295\u5f71\u77e9\u9635(Projection Matrix)\\(P\\)\uff1a

    \\[ \\mathbf{\\tilde u} = M_{int}M_{ext} \\mathbf{\\tilde x}_w = P \\mathbf{\\tilde x} \\;\\;\\;\\; i.e. \\;\\;\\;\\; \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} \\cong \\begin{bmatrix} u' \\\\ v' \\\\ z_c \\end{bmatrix} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{\\text{Projection Matrix } P} \\begin{bmatrix} x_w \\\\ y_w \\\\ z_w \\\\ 1 \\end{bmatrix} \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1_1","title":"\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1","text":"

    \u6839\u636e\u6295\u5f71\u77e9\u9635\u6211\u4eec\u5f97\u5230\u4e86\u50cf\u7d20\u70b9\u4e0e 3D \u666f\u7269\u4e16\u754c\u5750\u6807\u7684\u8f6c\u5316\u5173\u7cfb\uff0c\u800c\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u5c31\u662f\u5229\u7528\u8fd9\u4e2a\u5173\u7cfb\u5f0f\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002\u6240\u4ee5\u8fd9\u5c31\u8981\u6c42\u6211\u4eec\u540c\u65f6\u77e5\u9053\u82e5\u5e72\u70b9\u7684\u50cf\u7d20\u70b9\u4f4d\u7f6e\u548c 3D \u666f\u7269\u4e16\u754c\u5750\u6807\uff0c\u4e00\u822c\u6765\u8bf4\u76f8\u673a\u6807\u5b9a\u4e0e\u4f4d\u7f6e\u4f30\u8ba1\u662f\u8fd9\u4e48\u5b9e\u73b0\u7684\uff1a

    \u6b65\u9aa4\u4e00

    \u7ed9\u5b9a\u4e00\u4e2a\u51e0\u4f55\u7279\u6027\u5df2\u77e5\u7684\u6807\u5b9a\u677f\uff0c\u4eba\u4e3a\u5b9a\u4e49\u5176\u4e16\u754c\u5750\u6807\u7cfb\u3002

    \u7531\u4e8e\u5750\u6807\u90fd\u662f\u7531\u6211\u4eec\u4eba\u4e3a\u7ed9\u5b9a\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u6309\u7167\u5c3d\u53ef\u80fd\u65b9\u4fbf\u7684\u539f\u5219\u8fdb\u884c\u89c4\u5212\u3002\u6b64\u5916\uff0c\u4e3a\u4e86\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\uff0c\u6807\u5b9a\u677f\u7684\u5185\u5bb9\u4e00\u822c\u662f\u7b80\u5355\u660e\u4e86\u7684\u3002

    \u4f8b\u5982\u56fe\u4e2d\uff0c\u5b9a\u4e49\u4e16\u754c\u5750\u6807\u7cfb\u540e\uff0c\u6bcf\u4e00\u683c\u7684\u8fb9\u957f\u4e3a 5cm\uff0c\u6240\u4ee5\u7d2b\u8272\u70b9\u7684\u5750\u6807\u4e3a \\((0, 15, 20) cm\\)\u3002

    \u6b65\u9aa4\u4e8c

    \u5bfb\u627e\u7279\u5b9a\u5173\u952e\u70b9\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u505a\u7279\u5f81\u5339\u914d\uff0c\u5373\u82e5\u5e72\u70b9\u5bf9\uff0c\u6bcf\u4e00\u4e2a\u70b9\u5bf9\u90fd\u662f\u4e00\u4e2a 3D \u70b9\u548c\u4e00\u4e2a 2D \u70b9\u7684\u5bf9\u5e94\u3002

    \u9700\u8981\u8bf4\u660e\u7684\u4e00\u70b9\u662f\uff0c\u6211\u4eec\u5df2\u77e5\u7684\u7279\u5f81\u5339\u914d\u662f\u5efa\u7acb\u5728\u4e24\u5f20\u4e8c\u7ef4\u56fe\u7247\u4e0a\u7684\uff0c\u800c\u73b0\u5728\u8981\u505a\u7684\u662f 3D \u5230 2D \u7684\u5339\u914d\u3002\u4e00\u79cd\u60f3\u6cd5\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 3D \u666f\u8c61\u6309\u7167\u6211\u4eec\u5e0c\u671b\u7684\u65b9\u6cd5\u6620\u5c04\u4e3a 2D \u666f\u8c61\uff0c\u4f8b\u5982\u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u62ff\u8fd9\u4e2a\u6807\u5b9a\u677f\u7684 zy \u5e73\u9762\u6765\u8fdb\u884c\u7279\u5f81\u5339\u914d\u3002

    \u6b65\u9aa4\u4e09

    \u6839\u636e\u521a\u521a\u5f97\u5230\u7684\u82e5\u5e72\u5bf9\u5174\u8da3\u70b9\uff0c\u5efa\u7acb\u65b9\u7a0b\uff0c\u6c42\u89e3\u6295\u5f71\u77e9\u9635\u3002

    \u6bcf\u4e00\u5bf9\u5173\u952e\u70b9\u53ef\u4ee5\u5206\u522b\u6839\u636e \\(u\\) \u548c \\(v\\) \u5efa\u7acb\u4e24\u4e2a\u7b49\u5f0f\uff1a

    \\[ \\underbrace{\\begin{bmatrix} u^{(i)} \\\\ v^{(i)} \\\\ 1 \\end{bmatrix}}_{known} = \\underbrace{\\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\end{bmatrix}}_{unknown} \\underbrace{\\begin{bmatrix} x_w^{(i)} \\\\ y_w^{(i)} \\\\ z_w^{(i)} \\\\ 1 \\end{bmatrix}}_{known} \\\\ i.e. \\;\\;\\;\\; \\left\\{ \\begin{aligned} u^{(i)} &= \\frac{p_{11}x_w^{(i)} + p_{12}y_w^{(i)} + p_{13}z_w^{(i)} + p_{14}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\\\ v^{(i)} &= \\frac{p_{21}x_w^{(i)} + p_{22}y_w^{(i)} + p_{23}z_w^{(i)} + p_{24}}{p_{31}x_w^{(i)} + p_{32}y_w^{(i)} + p_{33}z_w^{(i)} + p_{34}} \\end{aligned} \\right. \\]

    \u7531\u4e8e\u6295\u5f71\u77e9\u9635\u6709 12 \u4e2a\u81ea\u7531\u5ea6\uff0c\u6240\u4ee5\u81f3\u5c11\u9700\u8981 6 \u5bf9\u5173\u952e\u70b9 12 \u4e2a\u7b49\u5f0f\u3002

    \u6b65\u9aa4\u56db

    \u5c06\u82e5\u5e72\u65b9\u7a0b\u91cd\u65b0\u6392\u5217\u4e3a\u77e9\u9635\u5f62\u5f0f\uff0c\u65b9\u4fbf\u4e4b\u540e\u7684\u8ba1\u7b97\u3002

    \u5c06\u6b65\u9aa4\u4e09\u5f97\u5230\u7684\u5f0f\u5b50\u540c\u5206\u79fb\u9879\uff0c\u5f62\u6210 \\(f(...) = 0\\) \u7684\u5f62\u5f0f\uff0c\u518d\u5c06 12 \u4e2a\u5f0f\u5b50\u7ed3\u5408\u5728\u4e00\u8d77\u5c31\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e2a\u5e9e\u5927\u7684\u77e9\u9635\u65b9\u7a0b\uff1a

    \\[ \\begin{bmatrix} x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & 0 & 0 & 0 & 0 & -u_1x_w^{(1)} & -u_1y_w^{(1)} & -u_1z_w^{(1)} & -u_1 \\\\ 0 & 0 & 0 & 0 & x_w^{(1)} & y_w^{(1)} & z_w^{(1)} & 1 & -v_1x_w^{(1)} & -v_1y_w^{(1)} & -v_1z_w^{(1)} & -v_1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & 0 & 0 & 0 & 0 & -u_ix_w^{(i)} & -u_iy_w^{(i)} & -u_iz_w^{(i)} & -u_i \\\\ 0 & 0 & 0 & 0 & x_w^{(i)} & y_w^{(i)} & z_w^{(i)} & 1 & -v_ix_w^{(i)} & -v_iy_w^{(i)} & -v_iz_w^{(i)} & -v_i \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & 0 & 0 & 0 & 0 & -u_nx_w^{(n)} & -u_ny_w^{(n)} & -u_nz_w^{(n)} & -u_n \\\\ 0 & 0 & 0 & 0 & x_w^{(n)} & y_w^{(n)} & z_w^{(n)} & 1 & -v_nx_w^{(n)} & -v_ny_w^{(n)} & -v_nz_w^{(n)} & -v_n \\\\ \\end{bmatrix} \\begin{bmatrix} p_{11} \\\\ p_{12} \\\\ p_{13} \\\\ p_{14} \\\\ p_{21} \\\\ p_{22} \\\\ p_{23} \\\\ p_{24} \\\\ p_{31} \\\\ p_{32} \\\\ p_{33} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\]

    \u6211\u4eec\u5c06\u5176\u7b80\u5199\uff0c\u4e5f\u5c31\u662f \\(A\\mathbf{p} = 0\\)\u3002

    \u6b65\u9aa4\u4e94

    \u6c42\u89e3 \\(A\\mathbf{p} = 0\\) \u5f97\u5230 \\(\\mathbf{p}\\)\u3002

    \u7c7b\u4f3c\u4e8e\u4e0a\u4e00\u8282\u7684\u64cd\u4f5c\uff0c\u8fd9\u91cc\u5f97\u5230\u7684 \\(mathbf{p}\\) \u4e5f\u6709\u591a\u79cd\u53ef\u80fd\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5bf9\u5b83\u8fdb\u884c\u7ea6\u675f\uff0c\u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

    \u4e00\u822c\u6211\u4eec\u9009\u62e9\u540e\u8005\uff0c\u4e5f\u5c31\u662f\u8ba9 \\(mathbf{p}\\) \u7684\u957f\u5ea6\u4e3a 1\uff0c\u6b64\u65f6\u81ea\u7531\u5ea6\u524a\u51cf\u4e3a 11\uff0c\u4ecd\u7136\u9700\u8981\u516d\u5bf9\u5173\u952e\u70b9\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u65b9\u7a0b \\(A\\mathbf{p} = 0\\) \u8f6c\u5316\u4e3a \\(\\mathop{minimize} \\limits_\\mathbf{p} ||A\\mathbf{p}||^2 \\;\\; \\text{ such that } ||\\mathbf{p}||^2 = 1\\) \u7684\u4f18\u5316\u95ee\u9898\uff0c\u7531\u4e8e\u548c\u4e4b\u524d\u7684\u4e00\u6837\uff0c\u6240\u4ee5\u4e0d\u518d\u8d58\u8ff0\u3002

    \u5206\u89e3\u6295\u5f71\u77e9\u9635

    \u6839\u636e\u6295\u5f71\u77e9\u9635\u7684\u76f8\u5173\u5185\u5bb9\u6211\u4eec\u77e5\u9053\uff1a

    \u901a\u5e38\u6765\u8bf4\uff0c\u5c06\u4e00\u4e2a\u77e9\u9635\u5206\u89e3\u4e3a\u4e24\u4e2a\u7279\u5b9a\u77e9\u9635\u662f\u4e0d\u73b0\u5b9e\u7684\uff0c\u4f46\u662f\u6b64\u5904\u7684\u5185\u53c2\u77e9\u9635\u7684\u5b50\u5f0f\u5177\u6709\u201c\u4e0a\u4e09\u89d2\u9635\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u5916\u53c2\u77e9\u9635\u4e2d\u65cb\u8f6c\u77e9\u9635\u5b50\u5f0f\u5177\u6709\u201c\u6b63\u4ea4\u201d\u8fd9\u4e2a\u6027\u8d28\uff0c\u800c\u4e14\u89c2\u5bdf 0 \u7684\u5206\u5e03\uff0c\u6211\u4eec\u53d1\u73b0 \\([p_{11} \\sim p_{33}]\\) \u7531 \\(KR\\) \u5f97\u5230\u3002\u6240\u4ee5\u6211\u4eec\u6070\u597d\u53ef\u4ee5\u4f7f\u7528QR \u5206\u89e3\u6765\u5b9e\u73b0\uff1a

    \\[ \\begin{bmatrix} p_{11} & p_{12} & p_{13} \\\\ p_{21} & p_{22} & p_{23} \\\\ p_{31} & p_{32} & p_{33} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\\\ \\end{bmatrix} = KR \\]

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u4f7f\u7528 QR \u5206\u89e3\u5f97\u5230\u7684\u4e09\u89d2\u9635\u5e76\u4e0d\u4e00\u5b9a\u5177\u6709\u7b2c\u4e00\u884c\u7b2c\u4e8c\u5217\u5143\u7d20\u4e3a 0 \u7684\u6027\u8d28\u3002

    \u6b64\u65f6\uff0c\u6211\u4eec\u5df2\u7ecf\u77e5\u9053\u4e86\u9664\u4e86 \\(t_x,t_y,t_z\\) \u4ee5\u5916\u7684\u6240\u6709\u672a\u77e5\u5143\u4e86\uff0c\u6240\u4ee5\u5f53\u7136\u53ef\u4ee5\u56de\u8fc7\u6765\u7ee7\u7eed\u6c42\u5b83\u4eec\u3002

    \\[ \\because \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} = \\begin{bmatrix} f_x & 0 & c_x \\\\ 0 & f_y & c_y \\\\ 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} = K \\mathbf{t} \\\\ \\therefore \\mathbf{t} = K^{-1} \\begin{bmatrix} p_{14} \\\\ p_{24} \\\\ p_{34} \\end{bmatrix} \\]

    \u6ce8\u610f

    \u9700\u8981\u7279\u522b\u6ce8\u610f\u7684\u4e00\u70b9\u662f\uff0c\u5728\u6211\u4eec\u4e0a\u9762\u6d89\u53ca\u7684\u8ba8\u8bba\u4e2d\uff0c\u6211\u4eec\u90fd\u6ca1\u6709\u8003\u8651\u7578\u53d8\u5e26\u6765\u7684\u5f71\u54cd\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","title":"\u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898","text":"

    \u591a\u70b9\u900f\u89c6\u6210\u50cf\u95ee\u9898(Perspective-n-Point Problem)\uff0c\u5373 PnP \u95ee\u9898\uff0c\u6307\u7684\u662f\u5df2\u77e5\u5185\u53c2\u6c42\u5916\u53c2\u7684\u89c6\u89c9\u5b9a\u4f4d\u95ee\u9898\u3002

    \u5e38\u89c1\u7684\u89e3\u51b3\u65b9\u6848\u6709\u5982\u4e0b\u51e0\u79cd\u3002

    DLT Direct Linear Transform

    \u4e5f\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u505a\u6cd5\u3002

    P3P

    \u81f3\u5c11\u9700\u8981 3 \u7ec4\u5bf9\u5e94\u5173\u7cfb\u624d\u80fd\u6c42\u89e3\u76f8\u673a\u4f4d\u7f6e\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a\u989d\u5916\u7684\u70b9\u6765\u4fdd\u8bc1\u7b54\u6848\u7684\u552f\u4e00\u6027\uff08\u5426\u5219\u4e00\u822c\u6765\u8bf4\u4f1a\u6709\u56db\u4e2a\u89e3\uff09

    \u5176\u4e3b\u8981\u601d\u8def\u662f\u6839\u636e\u56fe\u50cf\uff0c\u4f7f\u7528\u4f59\u5f26\u5b9a\u5f8b\u8fdb\u884c\u6c42\u89e3\u3002

    \u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

    PnP

    n > 3 \u7684\u60c5\u51b5\u7684\u505a\u6cd5\u3002

    \u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u6c42\u89e3\u7406\u8bba\u548c\u5b9e\u9645\u7684\u70b9\u8bef\u5dee\u2014\u2014\u91cd\u6295\u5f71\u8bef\u5dee(reprojection error)\u6700\u5c0f\u65f6\u7684\u5916\u53c2\uff0c\u6ce8\u610f\u5c06\u9f50\u6b21\u5750\u6807\u8f6c\u5316\u4e3a\u4e8c\u7ef4\u5750\u6807\u3002

    Initialized by P3P, optimized by Gauss-Newton\u3002

    \u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

    EPnP

    \u76ee\u524d\u6700\u53d7\u6b22\u8fce\u7684\u505a\u6cd5\uff0cO(N) \u5341\u5206\u9ad8\u6548\u4e5f\u5341\u5206\u51c6\u786e\uff0c\u5927\u6982\u662f\u7528\u56db\u4e2a\u63a7\u5236\u70b9\u8868\u793a\u5176\u4ed6\u70b9\u3002

    \u61d2\u5f97\u5199\u4e86\uff0c\u76f4\u63a5\u8d34\u9ea6\u54e5\u7684\u7b14\u8bb0\u4e86\uff01

    \u8bf4\u660e

    \u672c\u8282\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\uff0c\u8bb2\u7684\u662f\u5982\u4f55\u4e09\u7ef4\u91cd\u5efa\u5f97\u5230\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u5982\u4f55\u5f97\u5230\u7a20\u5bc6\u7684\u4e09\u7ef4\u91cd\u5efa\uff0c\u5c06\u6210\u4e3a\u4e0b\u4e00\u8282\u7684\u91cd\u70b9\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

    \u53cc\u76ee\u89c6\u89c9(Stereo Vision)\uff1a\u5df2\u77e5\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\uff0c\u6839\u636e\u4e24\u5f20\u56fe\u50cf\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u7684\u5916\u53c2\u548c\u76ee\u6807\u7684 3D \u7ed3\u6784\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5bf9\u6781\u51e0\u4f55","title":"\u5bf9\u6781\u51e0\u4f55","text":"

    \u5728\u524d\u4e00\u8282\u6211\u4eec\u4ecb\u7ecd\u4e86\u5982\u4f55\u5728\u300c3D \u666f\u8c61\u6a21\u578b\u5df2\u77e5\u300d\u7684\u60c5\u51b5\u4e0b\uff0c\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\u6216\u8fdb\u884c\u672a\u77e5\u4f30\u8ba1\uff0c\u4f46\u6211\u4eec\u4ecd\u7136\u4e0d\u77e5\u9053\u5982\u4f55\u4ece 2D \u56fe\u7247\u4e2d\u91cd\u5efa\u51fa 3D \u6a21\u578b\u3002

    \u8ba9\u6211\u4eec\u8003\u8651\u53cc\u76ee\u4e09\u7ef4\u91cd\u5efa\u4e2d\u7684\u60c5\u5f62\u2014\u2014\u4e24\u4e2a\u76f8\u673a\u4e0b\u4e0d\u540c\u666f\u8c61\u4e4b\u95f4\u663e\u7136\u662f\u5b58\u5728\u4e00\u5b9a\u7684\u51e0\u4f55\u5173\u7cfb\u7684\uff0c\u800c\u5bf9\u6781\u51e0\u4f55(Epipolar Geometry)\u7740\u773c\u4e8e\u4e0b\u9762\u8fd9\u4e09\u4e2a\u76ee\u6807\u4e4b\u95f4\u7684\u51e0\u4f55\u5173\u7cfb\uff1a\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\)\uff08\u6216\u8005 \\(P\\)\uff09\u3002

    Wiki page

    https://en.wikipedia.org/wiki/Epipolar_geometry

    Epipolar geometry is the geometry of stereo vision. When two cameras view a 3D scene from two distinct positions, there are a number of geometric relations between the 3D points and their projections onto the 2D images that lead to constraints between the image points. These relations are derived based on the assumption that the cameras can be approximated by the pinhole camera model.

    \u5bf9\u6781\u51e0\u4f55\u662f\u7acb\u4f53\u89c6\u89c9\u7684\u51e0\u4f55\u5b66\u3002\u5f53\u4e24\u4e2a\u6444\u50cf\u673a\u4ece\u4e24\u4e2a\u4e0d\u540c\u7684\u4f4d\u7f6e\u67e5\u770b 3D \u573a\u666f\u65f6\uff0c3D \u70b9\u4e0e\u5b83\u4eec\u5728 2D \u56fe\u50cf\u4e0a\u7684\u6295\u5f71\u4e4b\u95f4\u5b58\u5728\u8bb8\u591a\u51e0\u4f55\u5173\u7cfb\uff0c\u5bfc\u81f4\u56fe\u50cf\u70b9\u4e4b\u95f4\u5b58\u5728\u7ea6\u675f\u3002\u8fd9\u4e9b\u5173\u7cfb\u662f\u57fa\u4e8e\u76f8\u673a\u53ef\u4ee5\u7528\u9488\u5b54\u76f8\u673a\u6a21\u578b\u8fd1\u4f3c\u7684\u5047\u8bbe\u5bfc\u51fa\u7684\u3002

    \u2014\u2014Wiki

    \u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u4ecb\u7ecd\u5bf9\u6781\u51e0\u4f55\u4e2d\u7684\u51e0\u4e2a\u6982\u5ff5\uff0c\u6211\u4eec\u5c06\u501f\u52a9\u4e0a\u56fe\u8fdb\u884c\u8bf4\u660e\u3002

    \u57fa\u7ebf

    \u57fa\u7ebf(Baseline)\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3\u7684\u8fde\u7ebf\uff0c\u5373 \\(OO'\\)\u3002

    \u5bf9\u6781\u70b9

    \u5bf9\u6781\u70b9(Epipole)\u6307\u7684\u662f\uff1a\u5176\u4e2d\u4e00\u4e2a\u76f8\u673a\u7684\u76f8\u673a\u4e2d\u5fc3\u5728 \u53e6\u5916\u4e00\u4e2a\u76f8\u673a\u7684\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u70b9\uff0c\u5373 \\(e_l\\) \u548c \\(e_r\\)\uff0c\u4e14\u4ed6\u4eec\u5728\u65e2\u5b9a\u7684\u5177\u4f53\u53cc\u76ee\u6a21\u578b\u4e0b\u662f\u552f\u4e00\u7684\u3002

    \u5bf9\u6781\u9762

    \u5bf9\u6781\u9762(Epipolar Plane)\u6307\u7684\u662f\u4e24\u4e2a\u76f8\u673a\u4e2d\u5fc3 \\(O_L\\) \u548c \\(O_R\\)\uff0c\u4ee5\u53ca\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u8fd9\u4e09\u4e2a\u70b9\u6240\u786e\u5b9a\u7684\u7a7a\u95f4\u5e73\u9762\u3002

    \u5176\u4e2d\u6709\u4e00\u4e2a\u6027\u8d28\uff0c\u5bf9\u6781\u9762\u603b\u662f\u7ecf\u8fc7\u76f8\u673a\u4e2d\u5fc3\u8fde\u7ebf \\(O_L O_R\\)\uff0c\u6240\u4ee5\u5bf9\u4e8e\u67d0\u4e2a\u666f\u7269\u4e2d\u7684\u70b9 \\(X_i\\)\uff0c\u5176\u5bf9\u6781\u9762\u90fd\u662f\u552f\u4e00\u7684\u3002\uff08\u663e\u7136\uff0c\u53cd\u8fc7\u6765\u4e0d\u6210\u7acb\u3002\uff09

    \u5bf9\u6781\u7ebf

    \u5bf9\u6781\u7ebf(Epipolar Line)\u662f\u5173\u4e8e\u52a8\u70b9 \\(X\\) \u6765\u8bf4\u7684\uff0c\u4f53\u73b0\u4e3a\u5bf9\u6781\u9762\u4e0e\u6210\u50cf\u5e73\u9762\u7684\u4ea4\u7ebf\u3002

    \u5047\u8bbe\u6211\u4eec\u53ea\u77e5\u9053 \\(X_L\\) \u800c\u4e0d\u77e5\u9053 \\(X_R\\)\uff0c\u90a3\u4e48 \\(X\\) \u53ef\u80fd\u5728 \\(O_L X_L\\) \u8fd9\u6761\u7ebf\u4e0a\u7684\u4efb\u4e00\u70b9\uff1b\u800c\u8fd9\u6761\u7ebf\u5728 \\(R\\) \u5e73\u9762\u4e0a\u7684\u6295\u5f71\u5c31\u662f\u4e00\u6761\u5bf9\u6781\u7ebf\uff0c\u5b83\u7684\u542b\u4e49\u662f\u53ef\u80fd\u7684 \\(X_R\\) \u7684\u8f68\u8ff9\u3002

    \u6b64\u5916\uff0c\u5bf9\u6781\u7ebf\u6709\u4e00\u4e2a\u6027\u8d28\uff1a\u5bf9\u6781\u7ebf\u5fc5\u5b9a\u7ecf\u8fc7\u5bf9\u6781\u70b9\uff0c\u800c\u7ecf\u8fc7\u5bf9\u6781\u70b9\u7684\u4efb\u610f\u4e00\u6761\u76f4\u7ebf\uff08\u5f53\u7136\u5f97\u5728\u6210\u50cf\u5e73\u9762\u4e0a\uff09\u90fd\u53ef\u4ee5\u662f\u5bf9\u6781\u7ebf\u3002

    \ud83d\udc49 Wiki\u3002

    \u5176\u4ed6\u8bf4\u660e

    \u56fe\u4e2d\u8fd8\u9700\u8981\u989d\u5916\u89e3\u91ca\u7684\u5c31\u662f \\(X_L\\) \u548c \\(X_R\\)\uff0c\u5b83\u4eec\u5206\u522b\u662f\u666f\u7269\u4e2d\u7684\u67d0\u4e2a\u7a7a\u95f4\u70b9 \\(X\\) \u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u50cf\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u6781\u7ebf\u7ea6\u675f","title":"\u6781\u7ebf\u7ea6\u675f","text":"

    \u73b0\u5728\u6211\u4eec\u5173\u6ce8\u5bf9\u6781\u9762\uff0c\u7740\u773c\u4e8e\u89e3\u51b3\u4e0b\u9762\u8fd9\u6837\u4e00\u4e2a\u95ee\u9898\u3002

    \u5176\u4e2d\u4e24\u4fa7\u7684\u76f8\u673a\u7406\u6240\u5f53\u7136\u7684\u90fd\u62e5\u6709\u81ea\u5df1\u7684\u5750\u6807\u7cfb\uff0c\u73b0\u5728\u6211\u4eec\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff08\u56fe\u4e2d\u8c8c\u4f3c\u6807\u9519\u4e86\u65b9\u5411\uff09\uff0c\\(\\mathbf{x}_l = \\overrightarrow{O_l P}\\) \u800c \\(\\mathbf{x}_r = \\overrightarrow{O_r P}\\) \u3002

    \u4e0b\u9762\u5f00\u59cb \u53d8\u9b54\u6cd5 \u8fdb\u884c\u4e00\u4e9b\u53d8\u5316\uff1a

    \u5f62\u5f0f \u2461 \u63a8\u7406\u8fc7\u7a0b

    \u9996\u5148\uff0c\u5728\u540c\u4e00\u4e2a\uff08\u4efb\u4f55\u4e00\u4e2a\uff09\u7b1b\u5361\u5c14\u5750\u6807\u7cfb\u4e2d\uff0c\u90fd\u6709 \\(\\mathbf{x}_l \\cdot (\\mathbf{t} \\times \\mathbf{x}_l) = 0\\)\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\\(\\mathbf{t}\\) \u548c \\(\\mathbf{x}_l\\) \u90fd\u662f\u5bf9\u6781\u9762\u5185\u7684\u4e24\u4e2a\u4e0d\u5e73\u884c\uff08\u6211\u4eec\u5047\u5b9a\u8fd9\u4e00\u70b9\u6052\u6210\u7acb\uff09\u7684\u5411\u91cf\uff0c\u90a3\u4e48 \\(\\mathbf{t} \\times \\mathbf{x}_l\\) \u7684\u7ed3\u679c\u5fc5\u7136\u662f\u4e00\u4e2a\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u7684\u5411\u91cf\u3002\u800c\u8fd9\u4e2a\u5411\u91cf\u5fc5\u7136\u5782\u76f4\u4e8e\u5bf9\u6781\u9762\u4e0a\u4efb\u610f\u4e00\u4e2a\u5411\u91cf\uff0c\u6240\u4ee5\u4e0a\u5f0f\u7ed3\u679c\u4e3a \\(0\\)\u3002\u800c\u5c06\u8fd9\u4e2a\u5f0f\u5b50\u5199\u6210\u77e9\u9635\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff0c\u5c31\u662f\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} \\right) = 0 \\;\\;\\;\\;\\;\\left( 1 \\right) \\]

    \u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u5c06 \\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\) \u4e5f\u5199\u6210\u77e9\u9635\u548c\u5411\u91cf\u8fd0\u7b97\u7684\u5f62\u5f0f\uff1a

    \\[ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\;\\;\\;\\;\\;\\left( 2 \\right) \\]

    \u6211\u4eec\u5c06 \\((2)\\) \u5f0f\u5e26\u5165 \\((1)\\) \u5f0f\uff0c\u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\left( \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} \\right) = 0 \\]

    \u7a0d\u4f5c\u53d8\u5316\uff08\u628a\u542b \\(t\\) \u7684\u65b9\u9635\u62ff\u5230\u62ec\u53f7\u91cc\u9762\uff09\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\left( \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} + \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} t_x \\\\ t_y \\\\ t_z \\end{bmatrix} }_{\\mathbf{t} \\times \\mathbf{t} = 0} \\right) = 0 \\]

    \u6211\u4eec\u5f00\u5fc3\u7684\u53d1\u73b0\u91cc\u9762\u51fa\u6765\u4e86\u4e00\u4e2a \\(0\\)\uff0c\u628a\u5b83\u6458\u6389\u4ee5\u540e\u5c31\u53d8\u6210\u4e86\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\underbrace{ \\begin{bmatrix} 0 & -t_z & t_y \\\\ t_z & 0 & -t_x \\\\ -t_y & t_x & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} \\\\ r_{21} & r_{22} & r_{23} \\\\ r_{31} & r_{32} & r_{33} \\end{bmatrix} }_{\\text{Essential Matrix E}} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u5c06\u6c42\u89e3\u8fd9\u4e2a\u95ee\u9898\uff1a

    \u5f62\u5f0f \u2460\uff1a\u5bfb\u627e\u4e00\u79cd\u53d8\u6362\uff0c\u4f7f\u5f97\uff1a\\(\\mathbf{x}_l = R\\mathbf{x}_r + \\mathbf{t}\\)\uff0c\u5176\u4e2d \\(\\mathbf{t} = \\overrightarrow{O_r O_l}\\)\uff1b

    \u5229\u7528\u5bf9\u6781\u51e0\u4f55\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u8f6c\u6362\u4e3a\u4e86\uff1a

    \u5f62\u5f0f \u2461\uff1a\u6c42\u89e3 \\(E\\) \u4f7f\u5f97 \\(\\mathbf{x}_l^T E \\mathbf{x}_r = 0\\)\uff0c\u5176\u4e2d \\(E = T_{\\times}R\\)\uff0c\u5176\u4e2d \\(T\\) \u662f \\(\\mathbf{t}\\) \u7684\u77e9\u9635\u5f62\u5f0f\uff1b

    \u7136\u800c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u8fdb\u4e00\u6b65\u53d8\u5316\u3002

    \u5f62\u5f0f \u2462 \u63a8\u7406\u8fc7\u7a0b

    \u6839\u636e\u900f\u89c6\u6295\u5f71\u7684\u76f8\u5173\u5185\u5bb9\uff0c\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\uff1a

    \\[ \\small \\begin{aligned} \\text{Left Camera} && \\text{Right Camera} \\\\ z_l \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} & = \\underbrace{ \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} \\\\ 0 & f_y^{(l)} & o_y^{(l)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_l} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\end{bmatrix} & z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\underbrace{ \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} \\\\ 0 & f_y^{(r)} & o_y^{(r)} \\\\ 0 & 0 & 1 \\end{bmatrix} }_{K_r} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} \\\\ \\mathbf{x}_l^T &= \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T & \\mathbf{x}_r &= K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} \\end{aligned} \\]

    \u5c06\u4e0a\u5f0f\u5e26\u5165\u5230\u5f62\u5f0f \u2461 \u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\]

    \u5c31\u53d8\u6210\u4e86\uff1a

    \\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} z_l (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} z_r \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

    \u8fd9\u65f6\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\\(\\mathbf{u}_l\\) \u548c \\(\\mathbf{u}_r\\) \u7ec8\u4e8e\u662f\u6211\u4eec\u5df2\u77e5\u7684\u4e1c\u897f\u4e86\uff0c\u8fd9\u4e0b\u6211\u4eec\u53ef\u4ee5\u6c42\u89e3\u57fa\u672c\u77e9\u9635 \\(F\\)\uff0c\u800c\u7531\u4e8e\u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\u4e5f\u662f\u5df2\u77e5\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u53ef\u4ee5\u5012\u8fc7\u6765\u63a5\u7740\u5f97\u5230\u672c\u5f81\u77e9\u9635 \\(E\\)\uff0c\u6700\u540e\u901a\u8fc7 SV \u5206\u89e3\u5f97\u5230\u6211\u4eec\u60f3\u8981\u7684 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6c42\u89e3\u57fa\u672c\u77e9\u9635\u3001\u672c\u5f81\u77e9\u9635\u3001\u5750\u6807\u53d8\u6362\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

    \u6c42\u89e3\u6b65\u9aa4

    \u5bf9\u4e8e\u5173\u952e\u70b9 \\(i\\)\uff0c\u6211\u4eec\u9700\u8981\u6c42\u89e3\uff1a

    \\[ \\begin{bmatrix} u_l^{(i)} & v_l^{(i)} & 1 \\end{bmatrix} \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\begin{bmatrix} u_r^{(i)} \\\\ v_r^{(i)} \\\\ 1 \\end{bmatrix} = 0 \\]

    \u5c06\u5176\u5c55\u5f00\uff1a

    \\[ \\left( f_{11} u_r^{(i)} + f_{12} v_r^{(i)} + f_13 \\right) u_l^{(i)} + \\left( f_{21} u_r^{(i)} + f_{22} v_r^{(i)} + f_23 \\right) v_l^{(i)} + f_{31} u_r^{(i)} + f_{32} v_r^{(i)} + f_33 = 0. \\]

    \u63a5\u4e0b\u6765\u5c06\u6240\u6709\u7684 \\(m\\) \u7ec4\u65b9\u7a0b\u5408\u518d\u540c\u4e00\u4e2a\u77e9\u9635\u91cc\uff08\u6211\u4eec\u81f3\u5c11\u9700\u8981\u989d\u5916\u7684 8 \u4e2a\u65b9\u7a0b\uff0c\u4e4b\u540e\u4f1a\u8bf4\uff09\uff1a

    \\[ \\underbrace{ \\begin{bmatrix} u_l^{(1)}u_r^{(1)} & u_l^{(1)}v_r^{(1)} & u_l^{(1)} & v_l^{(1)}u_r^{(1)} & v_l^{(1)}v_r^{(1)} & v_l^{(1)} & u_r^{(1)} & v_r^{(1)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(i)}u_r^{(i)} & u_l^{(i)}v_r^{(i)} & u_l^{(i)} & v_l^{(i)}u_r^{(i)} & v_l^{(i)}v_r^{(i)} & v_l^{(i)} & u_r^{(i)} & v_r^{(i)} & 1 \\\\ \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots & \\vdots \\\\ u_l^{(m)}u_r^{(m)} & u_l^{(m)}v_r^{(m)} & u_l^{(m)} & v_l^{(m)}u_r^{(m)} & v_l^{(m)}v_r^{(m)} & v_l^{(m)} & u_r^{(m)} & v_r^{(m)} & 1 \\\\ \\end{bmatrix} }_{A: \\text{ Known }} \\underbrace{ \\begin{bmatrix} f_{11} \\\\ f_{12} \\\\ f_{13} \\\\ f_{21} \\\\ f_{22} \\\\ f_{23} \\\\ f_{31} \\\\ f_{32} \\\\ f_{33} \\\\ \\end{bmatrix} }_{\\mathbf{f}: \\text{ Unknown }} = \\begin{bmatrix} 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\\\ 0 \\end{bmatrix} \\\\ \\text{i.e.} \\;\\;\\;\\; A\\mathbf{f}=0 \\]

    \u5f53\u7136\uff0c\u50cf\u4e4b\u524d\u4e00\u6837\uff0c\u7531\u4e8e\u8fd9\u4e2a\u65b9\u7a0b\u53ef\u4ee5\u89e3\u51fa \\(k\\mathbf{f}, \\forall k\\in \\text{Z}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7ed9 \\(\\mathbf{f}\\) \u4e00\u4e2a\u7ea6\u675f\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u53d6 \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u4e8e\u662f\u95ee\u9898\u5c31\u53c8\u53d8\u6210\u4e86\uff1a

    \\[ \\mathop{minimize} \\limits_{\\mathbf{f}} ||A\\mathbf{f}||^2 \\text{ such that } ||\\mathbf{f}||^2 = 1 \\]

    \u4e3a\u4e86\u6c42\u89e3 \\(F\\) \u4e2d\u7684 9 \u4e2a\u672a\u77e5\u6570\uff0c\u6211\u4eec\u5df2\u7ecf\u6709\u4e00\u4e2a\u786e\u5b9a\u7684\u7ea6\u675f\u65b9\u7a0b\u662f \\(||\\mathbf{f}||^2 = 1\\)\uff0c\u6240\u4ee5\u8fd8\u9700\u8981\u989d\u5916 8 \u4e2a\u65b9\u7a0b\u3002

    \u6c42\u89e3\u5f97\u5230 \\(F\\) \u4ee5\u540e\uff0c\u6839\u636e \\(E = K_l^T F K_r\\) \u5f97\u5230 \\(E\\)\u3002

    \u524d\u9762\u4e5f\u5df2\u7ecf\u8bf4\u8fc7\uff0c\u5bf9 \\(E\\) \u8fdb\u884c SV \u5206\u89e3\u5c31\u53ef\u4ee5\u5f97\u5230 \\(R\\) \u548c \\(T_{\\times}\\)\uff0c\u5bf9 \\(T_{\\times}\\) \u91cd\u6392\u5217\u5c31\u5f97\u5230\u4e86 \\(\\mathbf{t}\\)\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u672c\u5f81\u77e9\u9635","title":"\u672c\u5f81\u77e9\u9635","text":"

    \u66f4\u8fdb\u4e00\u6b65\u5316\u7b80\uff0c\u6211\u4eec\u53ef\u4ee5\u628a\u4e2d\u95f4\u4e24\u4e2a\u77e9\u9635\u5408\u8d77\u6765\uff0c\u5f97\u5230\u672c\u5f81\u77e9\u9635(Essential Matrix)\\(E\\)\uff1a

    \\[ E=T_{\\times}R= \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\]

    \u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} x_l & y_l & z_l \\end{bmatrix} \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} = 0 \\;\\;\\;\\text{i.e.} \\;\\;\\; \\mathbf{x}_l^T E \\mathbf{x}_r = 0 \\]

    \u672c\u5f81\u77e9\u9635\u7684\u6027\u8d28

    \u7531\u4e8e Essential Matrix \u7684\u5b9a\u4e49\u5177\u6709\u5982\u4e0b\u7279\u5f81\uff1a

    \\(T_{\\times}\\) \u53cd\u5bf9\u79f0(Skew-Symmetric)\uff0c\\(R\\) \u6b63\u4ea4(Orthonormal)\u3002

    \u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u5947\u5f02\u503c\u5206\u89e3(Singular Value Decomposition)\u6216\u8005\u8bf4 SV \u5206\u89e3\u6765\u53bb\u8026\u5408\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u57fa\u672c\u77e9\u9635","title":"\u57fa\u672c\u77e9\u9635","text":"

    \u6211\u4eec\u53ef\u4ee5\u5c06\u5e38\u6570 \\(z_l\\) \u548c \\(z_r\\) \u7ea6\u6389\uff0c\u5e76\u4e14\u5408\u5e76\u4e2d\u95f4\u7684\u4e09\u4e2a\u77e9\u9635\uff0c\u5f97\u5230\uff1a

    \\[ \\begin{bmatrix} u_l & v_l & 1 \\end{bmatrix} \\underbrace{ (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} }_{\\text{Fundamental Matrix F}} \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = 0 \\]

    \u4e8e\u662f\u5f97\u5230\u4e86\u57fa\u672c\u77e9\u9635(Fundamental Matrix)\\(F\\)\uff1a

    \\[ F = (K_l^{-1})^T E K_r^{-1} = (K_l^{-1})^T \\begin{bmatrix} e_{11} & e_{12} & e_{13} \\\\ e_{21} & e_{22} & e_{23} \\\\ e_{31} & e_{32} & e_{33} \\end{bmatrix} K_r^{-1} = \\begin{bmatrix} f_{11} & f_{12} & f_{13} \\\\ f_{21} & f_{22} & f_{23} \\\\ f_{31} & f_{32} & f_{33} \\end{bmatrix} \\]

    \u8fd9\u5c31\u662f\u6211\u4eec\u7684\u5f62\u5f0f \u2462\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u4e09\u89d2\u6d4b\u91cf","title":"\u4e09\u89d2\u6d4b\u91cf","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u5982\u679c\u5047\u8bbe\u6570\u636e\u90fd\u662f\u51c6\u786e\u7684\uff0c\u90a3\u4e48 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u5e94\u5f53\u76f8\u4ea4\u4e8e\u7a7a\u95f4\u70b9 \\(X\\)\u3002\u800c\u4e09\u89d2\u6d4b\u91cf\u63cf\u8ff0\u7684\u5c31\u662f\u5982\u4f55\u901a\u8fc7\u8fd9\u6837\u4e00\u4e2a\u8fc7\u7a0b\u5f97\u5230\u7a7a\u95f4\u70b9 \\(X\\)\u3002

    \u6211\u4eec\u5728 \u6781\u7ebf\u7ea6\u675f \u91cc\u5df2\u7ecf\u77e5\u9053\u4e86 \\(\\mathbf{x}_l\\) \u548c \\(\\mathbf{x}_r\\) \u7684\u53d8\u6362\u5173\u7cfb\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u73b0\u5728\u5df2\u7ecf\u6709\u4e86 \\(O_l X_l\\) \u548c \\(O_r X_r\\) \u7684\u65b9\u7a0b\u4e86\u3002\u90a3\u4e48\u5e94\u5f53\u80fd\u591f\u89e3\u51fa\u8fd9\u4e2a \\(X\\)\uff0c\u4e0d\u8fc7\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u6709\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u53ea\u80fd\u901a\u8fc7\u4f18\u5316\u7684\u65b9\u6cd5\u5f97\u5230\u8fd1\u4f3c\u89e3\u3002

    \u5177\u4f53\u7684\u63a8\u7406\u6b65\u9aa4\u5982\u4e0b\uff1a

    \u6c42\u89e3\u6b65\u9aa4

    \u9996\u5148\u6211\u4eec\u4f7f\u7528\u9f50\u6b21\u5750\u6807\u6539\u5199\u53d8\u6362\u65b9\u7a0b\uff0c\u5e76\u6700\u7ec8\u5199\u6210\u5173\u4e8e \\(\\mathbf{u}\\) \u7684\u5f62\u5f0f \\begin{aligned} \\text{Left Camera} \\\\ \\because \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} ,\\ \\ \\begin{bmatrix} x_l \\\\ y_l \\\\ z_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\therefore \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(l)} & 0 & o_x^{(l)} & 0 \\\\ 0 & f_y^{(l)} & o_y^{(l)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\\\ r_{21} & r_{22} & r_{23} & t_y \\\\ r_{31} & r_{32} & r_{33} & t_z \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_l &= P_l \\mathbf{\\tilde x}_r \\\\ \\text{Right Camera} \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} &= \\begin{bmatrix} f_x^{(r)} & 0 & o_x^{(r)} & 0 \\\\ 0 & f_y^{(r)} & o_y^{(r)} & 0 \\\\ 0 & 0 & 1 & 0 \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\text{i.e. } \\mathbf{\\tilde u}_r &= M_{int_r} \\mathbf{\\tilde x}_r \\end{aligned}

    \u7a0d\u4f5c\u603b\u7ed3\uff0c\u5c31\u662f\u5f97\u5230\u4e86\u4e0b\u9762\u8fd9\u4e24\u4e2a\u5173\u7cfb\uff1a

    \\[ \\mathbf{\\tilde u}_l = P_l \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_r \\\\ v_r \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14} \\\\ m_{21} & m_{22} & m_{23} & m_{24} \\\\ m_{31} & m_{32} & m_{33} & m_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\\\ \\\\ \\mathbf{\\tilde u}_l = M_{int_r} \\mathbf{\\tilde x}_r \\\\ \\begin{bmatrix} u_l \\\\ v_l \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} p_{11} & p_{12} & p_{13} & p_{14} \\\\ p_{21} & p_{22} & p_{23} & p_{24} \\\\ p_{31} & p_{32} & p_{33} & p_{34} \\\\ \\end{bmatrix} \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\\\ 1 \\end{bmatrix} \\]

    \u6211\u4eec\u53d1\u73b0\uff0c\u9664\u4e86 \\(\\mathbf{x}_r\\) \u7684\u90e8\u5206\u90fd\u662f\u5df2\u77e5\u7684\uff0c\u6b64\u65f6\u6211\u4eec\u5c31\u53ef\u4ee5\u300c\u8054\u7acb\u300d\u8fd9\u4e24\u4e2a\u65b9\u7a0b\uff0c\u5c06\u4ed6\u4eec\u91cd\u6392\u5217\u4e3a\u5982\u4e0b\u5f62\u5f0f\uff1a

    \\[ \\underbrace{ \\begin{bmatrix} u_r m_{31} - m_{11} & u_r m_{32} - m_{12} & u_r m_{33} - m_{13} \\\\ v_r m_{31} - m_{21} & v_r m_{32} - m_{22} & v_r m_{33} - m_{23} \\\\ u_l p_{31} - p_{11} & u_l p_{32} - p_{12} & u_l p_{33} - p_{13} \\\\ v_l p_{31} - p_{21} & v_l p_{32} - p_{22} & v_l p_{33} - p_{23} \\end{bmatrix} }_{A_{4\\times 3}} \\underbrace{ \\begin{bmatrix} x_r \\\\ y_r \\\\ z_r \\end{bmatrix} }_{\\mathbf{x}_r} = \\underbrace{ \\begin{bmatrix} m_{14} - m_{34} \\\\ m_{24} - m_{34} \\\\ p_{14} - p_{34} \\\\ p_{24} - p_{34} \\end{bmatrix} }_{\\mathbf{b}} \\]

    \u6211\u4eec\u5df2\u77e5 \\(A_{4 \\times 3}\\) \u548c \\(\\mathbf{b}\\)\uff0c\u9700\u8981\u6c42 \\(\\mathbf{x}_r\\)\u3002

    \u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u63d0\u5230\uff0c\u7531\u4e8e\u5b9e\u9645\u6570\u636e\u5b58\u5728\u8bef\u5dee\uff0c\u6240\u4ee5\u6211\u4eec\u6ca1\u53d1\u76f4\u63a5\u6c42\u5176\u89e3\u6790\u89e3\uff0c\u800c\u662f\u53ef\u4ee5\u4f7f\u7528\u6700\u5c0f\u4e8c\u4e58\u7684\u7ed3\u8bba\uff0c\u5f97\u5230\uff1a

    \\[ \\mathbf{x}_r = (A^TA)^{-1}A^T\\mathbf{b} \\]

    \u8fd8\u6709\u4e00\u79cd\u6539\u8fdb\uff0c\u5c31\u662f\u5c06\u5b83\u8f6c\u5316\u6210\u6700\u5c0f\u5316\u518d\u6295\u5f71\u8bef\u5dee(Reprojection Error)\u7684\u4f18\u5316\u95ee\u9898\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5c31\u662f\u6c42\u4e00\u4e2a \\(X\\) \u4f7f\u5f97\u5b83\u5728\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\u548c\u5b9e\u9645\u7684\u6295\u5f71\u4e4b\u95f4\u7684\u8bef\u5dee\u6700\u5c0f\u3002

    \u5b9a\u4e49\u518d\u6295\u5f71\u8bef\u5dee\u4e3a\uff1a

    \\[ cost(P) = dist(\\mathbf{u}_l, \\cap{\\mathbf{u}_l})^2 + dist(\\mathbf{u}_r, \\cap{\\mathbf{u}_r})^2 \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u5177\u4f53\u6b65\u9aa4","title":"\u5177\u4f53\u6b65\u9aa4","text":"

    \u524d\u63d0

    \u4e24\u4e2a\u76f8\u673a\u7684\u5185\u53c2\u77e9\u9635\\(K\\) \u5df2\u77e5\u3002

    \u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u8fd9\u4e9b\u53c2\u6570\u5c06\u76f8\u673a\u6210\u50cf\u53ef\u89c6\u5316\uff0c\u5982\u4e0b\u56fe\u3002

    \u5176\u4e2d\u4e0b\u6807\u4e3a \\(l\\) \u7684\u8868\u793a\u5de6\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\uff0c\u4e0b\u6807\u4e3a \\(r\\) \u7684\u8868\u793a\u53f3\u4fa7\u76f8\u673a\u7684\u76f8\u5173\u5173\u952e\u70b9\u3002

    \u6b65\u9aa4\u4e00

    \u5bf9\u4e24\u5f20\u56fe\u7247\u8fdb\u884c \u5173\u952e\u70b9\u5339\u914d\uff0c\u627e\u5230\u81f3\u5c11 8 \u5bf9\u5339\u914d\u7279\u5f81\u3002

    \u300c\u4e3a\u4ec0\u4e48\u9700\u8981 8 \u5bf9\u300d\u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u4e2d\u5df2\u7ecf\u8bf4\u660e\u3002

    \u6b65\u9aa4\u4e8c

    \u6309\u7167 #\u6781\u7ebf\u7ea6\u675f/\u6c42\u89e3\u8fc7\u7a0b \u63d0\u5230\u7684\u6b65\u9aa4\uff0c\u6c42\u89e3\u4e24\u4e2a\u76f8\u673a\u5750\u6807\u7684\u53d8\u6362\u53c2\u6570 \\(R\\) \u548c \\(\\mathbf{t}\\)\u3002

    \u6b65\u9aa4\u4e09

    \u63a5\u4e0b\u6765\u5bf9\u4e8e\u6bcf\u4e00\u5bf9\u5339\u914d\u7684\u5173\u952e\u70b9\uff0c\u6309\u7167 #\u4e09\u89d2\u6d4b\u91cf \u63d0\u5230\u7684\u65b9\u6cd5\uff0c\u6c42\u89e3\u7a7a\u95f4\u70b9 \\(X_i\\)\u3002

    \u4e8e\u662f\u6211\u4eec\u5c31\u5f97\u5230\u4e86\u6240\u6709\u5339\u914d\u7684\u5173\u952e\u70b9\u8ba1\u7b97\u5f97\u5230\u7684\u7a7a\u95f4\u70b9\uff0c\u6700\u7ec8\u5f97\u5230\u4e00\u4efd\u7a00\u758f\u7684\u7a7a\u95f4\u70b9\u4e91\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","title":"\u591a\u76ee\u4e09\u7ef4\u91cd\u5efa","text":"

    Sequential SfM\uff1a

    1. \u4ece\u5176\u4e2d\u4e24\u5f20\u5f00\u59cb\uff0c\u5bf9\u573a\u666f\u8fdb\u884c\u91cd\u5efa
    2. \u4e4b\u540e\u4e0d\u65ad\u62ff\u51fa\u65b0\u7684\u56fe\u50cf\uff0c\u6839\u636e\u5df2\u77e5\u8ba1\u7b97 camera pose\uff0c\u518d\u8fdb\u4e00\u6b65\u4f18\u5316\u4e4b\u524d\u91cd\u5efa\u51fa\u6765\u7684 3D \u70b9\uff0c\u4ee5\u53ca\u589e\u52a0\u4e00\u4e9b\u65b0\u7684\u70b9
    3. \u4f7f\u7528\u96c6\u675f\u4f18\u5316\u8fdb\u4e00\u6b65\u4f18\u5316\u548c\u8c03\u6574
    "},{"location":"cour_note/D2QD_Intro2CV/Lec07/#\u96c6\u675f\u4f18\u5316","title":"\u96c6\u675f\u4f18\u5316","text":"

    \u96c6\u675f\u4f18\u5316(Bundle Adjustment)\u4e5f\u5c31\u662f\u5728\u591a\u76ee\u60c5\u51b5\u4e0b\uff0c\u5bf9\u4e8e\u6240\u6709\u70b9\u7684 \u518d\u6295\u5f71\u8bef\u5dee \u4f18\u5316\u95ee\u9898\uff1a

    \\[ \\mathop{minimize} \\limits_\\mathbf{P} E(P_{proj}, \\mathbf{P}) = \\sum^m_{i=1}\\sum^n_{j=1} dist(u_j^{(i)}, P_{proj}^{(i)}\\mathbf{P}_j)^2 \\]

    \u5176\u6c42\u89e3\u53ef\u4ee5\u4f7f\u7528 LM algorithm\u3002

    A modern SfM system: COLMAP

    COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections.

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/","title":"Lecture 8 | Depth Estimation & 3D Reconstruction","text":"

    \u7ea6 5007 \u4e2a\u5b57 6 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 25 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    \u5f15\u5165

    \u5728 \u4e0a\u4e00\u7ae0 \u4e2d\uff0c\u6211\u4eec\u5df2\u7ecf\u4ecb\u7ecd\u4e86\u5982\u4f55\u91cd\u5efa\u5f97\u5230\u5173\u952e\u70b9\u7684\u70b9\u4e91\uff0c\u4f46\u662f\u6b64\u65f6\u6211\u4eec\u5f97\u5230\u7684\u53ea\u662f\u4e00\u4e2a\u7a00\u758f\u7684\u70b9\u4e91\uff0c\u800c\u672c\u7ae0\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\u5982\u4f55\u201c\u7a20\u5bc6\u201d\u5730\u8fdb\u884c\u91cd\u5efa\u3002

    \u800c\u5728\u7a20\u5bc6\u91cd\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4e0d\u80fd\u5355\u5355\u7740\u773c\u4e8e\u5173\u952e\u70b9\uff0c\u800c\u662f\u8981\u5e7f\u6cdb\u5730\u9762\u5411\u56fe\u50cf\u4e2d\u7684\u6240\u6709\u50cf\u7d20\uff0c\u800c\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4e2a\u6280\u672f\u5c31\u662f\u6df1\u5ea6\u4f30\u8ba1(Depth Estimation)\u3002

    \u300c\u6df1\u5ea6\u300d\u8fd9\u4e2a\u6982\u5ff5\u548c\u5b83\u7684\u5b57\u9762\u610f\u601d\u51e0\u4e4e\u4e00\u6837\uff0c\u800c\u5728\u300c\u6df1\u5ea6\u4f30\u8ba1\u300d\u4e2d\uff0c\u6211\u4eec\u9700\u8981\u505a\u7684\u662f\u5bf9\u4e8e\u7ed9\u5b9a\u7684\u56fe\u50cf\uff0c\u6807\u8bb0\u6bcf\u4e00\u4e2a\u50cf\u7d20\u7684\u6df1\u5ea6\u3002\u800c\u5c06\u5176\u53ef\u89c6\u5316\uff0c\u5c31\u662f\u6df1\u5ea6\u56fe\u3002

    \u53ea\u4e0d\u8fc7\u6709\u65f6\u5019\u6df1\u5ea6\u6307\u7684\u662f\u7a7a\u95f4\u70b9\u5230\u76f8\u673a\u4e2d\u95f4\u6216\u8005\u76f8\u673a\u5e73\u9762\u7684\u8ddd\u79bb\uff0c\u4e5f\u6709\u7684\u65f6\u5019\u6307\u7684\u662f\u67d0\u4e2a\u7a7a\u95f4\u5750\u6807\u8f74\u5411\u7684\u6df1\u5ea6\uff0c\u5177\u4f53\u5e94\u5f53\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u6765\u3002

    \u6309\u7167\u6df1\u5ea6\u611f\u77e5\u7684\u624b\u6bb5\u5206\u7c7b\uff0c\u6709\u4e3b\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Active depth sensing)\u548c\u88ab\u52a8\u6df1\u5ea6\u63a2\u6d4b\u65b9\u6cd5(Passive depth sensing)\u4e24\u79cd\uff0c\u5176\u4e2d\u6211\u4eec\u5c06\u8981\u5c55\u5f00\u7684\u89c6\u89c9\u65b9\u6cd5\u90fd\u662f\u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5\u3002

    \u4e3b\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u975e\u89c6\u89c9\u65b9\u6cd5

    \u88ab\u52a8\u63a2\u6d4b\u65b9\u6cd5 / \u89c6\u89c9\u65b9\u6cd5

    \u903b\u8f91\u94fe\uff1a

    (\u53cc\u76ee\u89c6\u89c9 -> \u6df1\u5ea6\u611f\u77e5) => ((\u53cc\u89c6\u89d2\u5339\u914d\u70b9 + \u89c6\u5dee -> \u6df1\u5ea6) + (\u5bf9\u6240\u6709\u50cf\u7d20\u8fdb\u884c\u5339\u914d)) => \u6781\u7ebf\u4e0a\u5bfb\u627e\u5339\u914d\u70b9

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u89c6\u89c9","title":"\u7acb\u4f53\u89c6\u89c9","text":"

    \u6211\u4eec\u5df2\u7ecf\u6709\u4e86\u7a00\u758f\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u60f3\u8981\u5f97\u5230\u7a20\u5bc6\u91cd\u5efa\u7684\u65b9\u6cd5\uff0c\u4e00\u4e2a\u6700\u66b4\u529b\u7684\u65b9\u6cd5\u5c31\u662f\u5c1d\u8bd5\u7740\u53bb\u5339\u914d\u6240\u6709\u50cf\u7d20\uff0c\u5f53\u7136\u8fd9\u770b\u8d77\u6765\u65f6\u95f4\u5f00\u9500\u975e\u5e38\u5927\u3002\u4f46\u662f\u6bcb\u5eb8\u7f6e\u7591\u7684\u662f\uff0c\u5728\u76ee\u524d\u8fd8\u6ca1\u6709\u4ecb\u5165\u4eba\u5de5\u667a\u80fd\u6280\u672f\u7684\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u50cf\u7d20\u7684\u5339\u914d\u5173\u7cfb\u3002

    \u4ee5\u53ca\u8fd8\u6709\u4e00\u4e2a\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\u5c31\u662f\uff0c\u5982\u4f55\u5f97\u5230\u5339\u914d\u70b9\u7684\u6df1\u5ea6\u4fe1\u606f\u3002

    \u6240\u4ee5\u603b\u7ed3\u4e0b\u6765\uff0c\u6709\u4e24\u4e2a\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff1a

    \u7531\u4e8e\u5339\u914d\u4e2d\u4f1a\u6709\u90e8\u5206\u4f18\u5316\u5185\u5bb9\u6d89\u53ca\u5230\u6df1\u5ea6\u8ba1\u7b97\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u6211\u60f3\u5148\u4ece\u6df1\u5ea6\u8ba1\u7b97\u5f00\u59cb\u8bb2\uff0c\u4e5f\u5c31\u662f\u4ece\u89c6\u5dee\u5f00\u59cb\u8bb2\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u89c6\u5dee","title":"\u89c6\u5dee","text":"

    \u9996\u5148\uff0c\u6211\u4eec\u90fd\u77e5\u9053\u4eba\u7684\u53cc\u773c\u8d4b\u4e88\u4e86\u4eba\u7c7b\u89c6\u89c9\u4e0a\u6df1\u5ea6\u611f\u77e5\u7684\u80fd\u529b\uff0c\u4e5f\u5c31\u662f\u7acb\u4f53\u89c6\u89c9(stereo vision)\u3002\u4e00\u4e2a\u6bd4\u8f83\u5bb6\u55bb\u6237\u6653\u7684\u5b9e\u9a8c\u5c31\u662f\u5355\u773c\u7a7f\u9488\u4f1a\u53d8\u5f97\u5341\u5206\u56f0\u96be\u3002

    \u5728\u5355\u76ee\u89c6\u89c9\u4e0b\uff0c\u4f53\u73b0\u8fdc\u8fd1\u6700\u7b80\u5355\u7684\u539f\u7406\u63cf\u8ff0\u5c31\u662f\u300c\u8fd1\u5927\u8fdc\u5c0f\u300d\uff0c\u800c\u5728\u52a8\u6001\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e5f\u4f53\u73b0\u5728\u79fb\u52a8\u76f8\u540c\u7684\u8ddd\u79bb\uff0c\u8fd1\u5904\u7684\u7269\u4f53\u79fb\u52a8\u66f4\u660e\u663e\uff0c\u800c\u8fdc\u5904\u7684\u66f4\u4e0d\u660e\u663e\u3002\u7136\u800c\u8fd9\u4e2a\u4fe1\u606f\u548c\u5355\u7eaf\u7684\u201c\u5927\u5c0f\u201d\u4fe1\u606f\u662f\u53ef\u4ee5\u6df7\u6dc6\u7684\uff0c\u6216\u8005\u8bf4\u5728\u201c\u5927\u5c0f\u201d\u53d8\u5316\u4e0d\u660e\u663e\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4fe1\u606f\u662f\u5f88\u96be\u88ab\u8bc6\u522b\u51fa\u6765\u7684\u3002

    \u800c\u5728\u53cc\u76ee\u89c6\u89c9\u4e0b\uff0c\u6211\u4eec\u6709\u6709\u4e00\u4e2a\u66f4\u8fd1\u4e00\u6b65\u7684\u539f\u7406\uff0c\u4e5f\u5c31\u662f\u89c6\u5dee(disparity)\uff0c\u901a\u8fc7\u89c6\u5dee\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u7cbe\u786e\u5730\u611f\u53d7\u5230\u201c\u8ddd\u79bb\u201d\uff08\u5b9e\u9645\u4e0a\u4e5f\u662f\u5bf9\u6781\u51e0\u4f55\u90a3\u4e00\u5957\uff09\uff0c\u63a5\u4e0b\u6765\u9610\u8ff0\u5176\u539f\u7406\u3002

    \u9996\u5148\uff0c\u6211\u4eec\u7ed8\u5236\u4e00\u4e2a\u7b80\u5355\u7684\u6a21\u578b\uff1a

    \u5728\u8fd9\u4e2a\u6a21\u578b\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe\u4e24\u4e2a\u56fe\u50cf\u4e2d\u7684\u5339\u914d\u70b9\u7b26\u5408\u4e4b\u540e\u4f1a\u5728\u7acb\u4f53\u5339\u914d\u4e00\u8282\u91cc\u63d0\u5230\u7684\u6700\u7b80\u60c5\u51b5(simplest case)\uff0c\u4f46\u662f\u53ef\u4ee5\u4e0d\u7528\u7ba1\u8fd9\u4e2a\u6700\u7b80\u60c5\u51b5\u662f\u4ec0\u4e48\uff0c\u76f4\u63a5\u5f53\u4f5c\u8fd9\u662f\u4e00\u4e2a\u4fef\u89c6\u89c6\u89d2\u4e0b\u7684\u7b80\u5316\uff0c\u76f4\u63a5\u770b\u4e0b\u9762\u7684\u6a21\u578b\u5373\u53ef\u3002

    \u8fd9\u56fe\u6211\u753b\u4e86\u81f3\u5c11\u534a\u5c0f\u65f6 T^T\uff08\u5f3a\u8feb\u75c7\u306e\u6028\u5ff5\uff09

    (1) \u4e2d OL \u548c OR \u5206\u522b\u662f\u4e24\u76f8\u673a\u4e2d\u5fc3\uff0c\u6de1\u84dd\u8272\u7ebf\u6761\u8868\u793a\u6210\u50cf\u5e73\u9762\uff0cXL \u548c XR \u5206\u522b\u8868\u793a\u5b9e\u9645\u70b9 X \u5728\u6210\u50cf\u5e73\u9762\u4e0a\u7684\u6295\u5f71\uff0c\u6a59\u8272\u7ebf\u6761\u8868\u793a\u4ed6\u4eec\u7684\u6a2a\u5411\u5750\u6807\uff08\u5047\u8bbe\u4ed6\u4eec\u90fd\u5728\u540c\u4e00\u6c34\u5e73\u7ebf\u4e0a\uff09\uff0cz \u8868\u793a\u5b9e\u9645\u70b9 X \u5230\u57fa\u7ebf\u7684\u8ddd\u79bb\uff0c\u8fd9\u91cc\u6211\u4eec\u6682\u4e14\u79f0\u4e4b\u4e3a\u201c\u6df1\u5ea6\u201d\uff08\u53cd\u6b63\u4e0d\u7ba1\u600e\u4e48\u5b9a\u4e49\u6df1\u5ea6\uff0c\u6709 z \u90fd\u80fd\u7b97\uff09\u3002

    (2) \u4e2d\u6211\u753b\u56fe\u7684\u65f6\u5019\u5fd8\u8bb0\u533a\u5206\u4e24\u4e2a XR \u4e86\uff0c\u6240\u4ee5\u5173\u4e8e (2) \u56fe\u4e2d\u7684 XR \u4e00\u5f8b\u6307\u5de6\u8fb9\u90a3\u4e2a XR\u3002

    \u6211\u4eec\u5c06 OR \u7684\u6210\u50cf\u6a21\u578b\u5e73\u79fb\u5230\u5de6\u4fa7\uff0c\u5373\u56fe (2)\uff0c\u53d1\u73b0\u6a59\u8272\u7684\u4e09\u89d2\u5f62\u548c\u7ea2\u8272\u7684\u4e09\u89d2\u5f62\u76f8\u4f3c\uff1a\\(\\Delta O X_L X_R \\cong \\Delta X O_L O_R\\) \uff08\u6ce8\u610f\uff0c\u5b9e\u9645\u60c5\u51b5\u4e0d\u4e00\u5b9a\u7b49\u8170\uff01\uff09

    \u4e8e\u662f\u6211\u4eec\u5f97\u5230\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff1a

    \\[ \\frac{\\overline{X_L X_R}}{f} = \\frac{\\overline{O_L O_R}}{z} \\\\ \\text{ i.e. }\\; disparity = \\Delta{\\mathbf{x}} = |\\mathbf{x}_l - \\mathbf{x}_r| = |x_l - x_r| = \\frac{B \\cdot f}{z} \\\\ \\text{where }B\\text{ is the length of baseline} \\\\ \\text{ i.e. }\\; z = \\frac{B \\cdot f}{|x_l-x_r|} \\]

    \u63d0\u793a

    \u867d\u7136\u662f\u4e2a\u7b80\u5316\u60c5\u51b5\uff0c\u4f46\u662f\u5728\u6700\u7b80\u60c5\u51b5(simplest case)\u4e0b\u662f\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\u7684\uff0c\u7a0d\u540e\u6211\u4f1a\u63d0\u9192\u56de\u987e\u8fd9\u4e00\u8282\u6765\u7406\u89e3\u8fd9\u4e00\u70b9\uff0c\u6240\u4ee5\u5b89\u5fc3\u987a\u7740\u8bfb\u4e0b\u53bb\u5373\u53ef\u3002

    \u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u89e3\u51b3\u4e00\u4e2a\u4e86\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7acb\u4f53\u5339\u914d","title":"\u7acb\u4f53\u5339\u914d","text":"

    \u9996\u5148\u6211\u4eec\u505a\u4e00\u4e2a\u5047\u8bbe\uff0c\u4e5f\u5c31\u662f\u5728\u5339\u914d\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u7684\u4e24\u4e2a view \u7684\u8ddd\u79bb\u76f8\u5dee\u4e0d\u5927\uff0c\u4e5f\u5c31\u662f\u8bf4\u5c40\u90e8\u7279\u5f81\u4ecd\u7136\u662f\u76f8\u4f3c\u7684\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u641c\u7d22","title":"\u641c\u7d22","text":"

    \u7acb\u4f53\u5339\u914d(Stereo Matching)\u7684\u539f\u7406\u5c31\u662f\uff0c\u9009\u5b9a\u7b2c\u4e00\u4e2a\u56fe\u50cf\u5185\u7684\u67d0\u4e00\u70b9\uff0c\u7136\u540e\u53bb\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u80fd\u591f\u548c\u5b83\u5339\u914d\u7684\u70b9\u3002\u6ca1\u9519\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u4e00\u6761\u76f4\u7ebf\u4e0a\u641c\u7d22\u627e\u5230\u5339\u914d\u7684\u70b9\u5373\u53ef\uff0c\u8fd9\u5927\u5927\u4f18\u5316\u4e86\u590d\u6742\u5ea6\u3002\u800c\u5b83\u7684\u6839\u636e\u6070\u597d\u5c31\u662f\u5bf9\u6781\u7ebf\u7684\u5b9a\u4e49\u3002

    \ud83d\udc49 \u56de\u987e\u5bf9\u6781\u51e0\u4f55\uff01

    \u6ca1\u9519\uff0c\u6211\u4eec\u73b0\u5728\u5df2\u77e5\u4e86 \\(X_L\\)\uff08\u7531\u6211\u4eec\u9009\u5b9a\u7684\uff09\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u8f68\u8ff9\u4fbf\u662f\u5bf9\u6781\u7ebf\uff0c\u4e8e\u662f\u6211\u4eec\u53ea\u9700\u8981\u5148\u627e\u5230\u6211\u4eec\u9009\u5b9a\u7684 \\(X_L\\) \u5728\u53e6\u5916\u4e00\u5f20\u56fe\u50cf\u4e0a\u5bf9\u5e94\u7684\u5bf9\u6781\u7ebf\uff0c\u7136\u540e\u518d\u5728\u8fd9\u6761\u7ebf\u4e0a\u641c\u7d22\u7279\u5f81\u4e0e \\(X_L\\) \u6700\u5339\u914d\u7684\u90a3\u4e2a\u70b9\u5373\u53ef\u3002\uff08\u8fd9\u91cc\u6211\u4eec\u4e5f\u6ca1\u6709\u5fc5\u8981\u4f7f\u7528 SIFT\uff0c\u76f4\u63a5\u505a\u5dee\u5c31\u591f\u4e86\uff09

    \u4f46\u662f\u8bdd\u53c8\u8bf4\u56de\u6765\uff0c\u8ba1\u7b97\u5bf9\u6781\u7ebf\u8fd9\u4ef6\u4e8b\u4e5f\u5e76\u975e\u5341\u5206\u7b80\u5355\uff0c\u5982\u679c\u5bf9\u4e8e\u6bcf\u4e2a\u70b9\u6211\u4eec\u90fd\u9700\u8981\u53bb\u8ba1\u7b97\u5bf9\u6781\u7ebf\uff0c\u90a3\u4e48\u5c06\u5e26\u6765\u4e0d\u5c0f\u7684\u5e38\u6570\uff0c\u800c\u4e14\u7531\u4e8e\u8fd9\u4ef6\u4e8b\u6ca1\u6cd5\u201c\u6574\u4f53\u5730\u9884\u5904\u7406\u201d\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4f18\u5316\u8fd9\u4ef6\u4e8b\u3002

    \u6700\u7b80\u60c5\u51b5

    \u9996\u5148\u8003\u8651\u6700\u7b80\u60c5\u51b5(simplest case)\u8fd9\u4e2a\u7279\u6b8a\u60c5\u51b5\uff1a

    1. \u4e24\u4e2a\u76f8\u673a\u7684\u7126\u8ddd\u76f8\u540c\uff1b
    2. \u76f8\u673a\u4f4d\u7f6e\u5728\u540c\u4e00\u6c34\u5e73\u9762\u4e0a\uff0c\u5373\u9ad8\u5ea6\u76f8\u540c\uff1b
    3. \u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u548c\u57fa\u7ebf\uff0c\u4e09\u8005\u76f8\u4e92\u5e73\u884c\uff0c\u6216\u8005\u8bf4\u4e24\u4e2a\u6210\u50cf\u5e73\u9762\u5171\u9762\uff08\u6b64\u65f6\u5bf9\u6781\u70b9\u4e0d\u5b58\u5728\uff09\uff1b

    \u6b64\u65f6\uff0c\u5bf9\u6781\u7ebf\u4e5f\u6c34\u5e73\uff0c\u800c\u4e14\u4e24\u6761\u5bf9\u6781\u7ebf\u4e5f\u5171\u7ebf\uff08\u53ef\u4ee5\u601d\u8003\u4e00\u4e0b\u4e3a\u4ec0\u4e48\uff09\u3002

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5f53\u6211\u4eec\u9009\u5b9a\u5de6\u56fe\u4e2d\u7684\u67d0\u4e2a\u70b9 \\(X_L\\)\uff0c\u90a3\u4e48 \\(X_R\\) \u7684\u5019\u9009\u4f4d\u7f6e\u5c31\u5728\u53f3\u56fe\u4e2d\u540c\u4e00\u9ad8\u5ea6\u7684\u90a3\u6761\u6c34\u5e73\u7ebf\u4e0a\u3002

    \u90a3\u4e48\u5982\u4f55\u89e3\u51b3\u8fd9\u79cd\u60c5\u51b5\u4ee5\u5916\u7684\u60c5\u51b5\u5462\uff1f\u65e2\u7136\u6211\u90fd\u8fd9\u4e48\u6392\u4e86\uff0c\u90a3\u89e3\u51b3\u529e\u6cd5\u81ea\u7136\u5c31\u662f\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\u6765\u505a\u4e86\u3002

    \u8f6c\u5316\u601d\u60f3

    \u53c8\u662f\u4e00\u4e2a\u7a81\u7136\u7684\u60f3\u6cd5\uff0c\u5f88\u591a\u65f6\u5019\u6211\u4eec\u6216\u8bb8\u53ef\u4ee5\u4e0d\u4ece\u6574\u4f53\u53bb\u601d\u8003\uff0c\u800c\u662f\u5148\u89e3\u51b3\u4e00\u4e2a\u6700\u7b80\u60c5\u51b5\uff0c\u518d\u8f6c\u5316\u95ee\u9898\u3002

    \u4e00\u822c\u60c5\u51b5

    \u8fd9\u4e2a\u95ee\u9898\u88ab\u79f0\u4e3a\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\uff0c\u8fd9\u91cc\u5e76\u4e0d\u5c55\u5f00\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1a

    C. Loop and Z. Zhang. Computing Rectifying Homographies for Stereo Vision. IEEE Conf. Computer Vision and Pattern Recognition, 1999.

    \u56de\u987e

    \u76f8\u4fe1\u73b0\u5728\u4f60\u5bf9\u201c\u6700\u7b80\u60c5\u51b5\u201d\u5df2\u7ecf\u6709\u66f4\u6df1\u523b\u7684\u7406\u89e3\u4e86\uff0c\u4e0d\u59a8\u56de\u8fc7\u5934\u53bb\u7406\u89e3\u4e00\u4e0b\u4e3a\u4ec0\u4e48\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\u90a3\u4e2a\u7b80\u5316\u7684\u89c6\u5dee\u6a21\u578b\u53ef\u4ee5\u76f4\u63a5\u632a\u7528\u7ed3\u8bba\uff1f

    \ud83d\udc49 \u89c6\u5dee

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d","title":"\u5339\u914d","text":"

    \u6240\u8c13\u7684\u5bfb\u627e\u5339\u914d\uff0c\u5c31\u662f\u5728\u5145\u65a5\u7740\u5019\u9009\u70b9\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u6700\u597d\u7684\u4e00\u4e2a\u70b9\uff0c\u6216\u8005\u8bf4\u5dee\u5f02\u6700\u5c0f\u7684\u4e00\u4e2a\u70b9\u3002

    \u5e38\u89c1\u7684\u5dee\u5f02\u8861\u91cf\u65b9\u6cd5\u6709\u8fd9\u4e48\u51e0\u79cd\uff1a

    SSD: Sum of Squared Differences

    \\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,2)|^2 \\]

    SAD: Sum of Absolute Differences

    \\[ diff = \\sum_{x,y} |W_1(x,y) - W_2(x,y)| \\]

    ZNCC: Zero-mean Normalized Cross Correlation

    \\[ diff = \\frac{(W_1(x,y)-\\overline{W_1})(W_2(x,y)-\\overline{W_2})}{\\sigma_{W_1}\\sigma_{W_2}} \\\\ \\text{where } \\overline{W_i} = \\frac{1}{n}\\sum_{x,y} W_i \\;\\;\\; \\sigma_{W_i} = \\sqrt{\\frac{1}{n}\\sum_{x,y}(W_i-\\overline{W_i})^2} \\]

    \u5176\u4e2d\uff0cZNCC \u76f8\u6bd4\u5176\u4ed6\u65b9\u6cd5\uff0c\u4f18\u8d8a\u6027\u5728\u4e8e\u5b83\u5bf9\u56fe\u50cf\u6574\u4f53\u7684\u5149\u5f3a\u5ea6\u4e0d\u654f\u611f\uff0c\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\\(W_i\\) \u5728\u53c2\u4e0e\u8ba1\u7b97\u524d\u90fd\u51cf\u53bb\u4e86 \\(\\overline{W_i}\\)\uff0c\u6240\u4ee5\u6d88\u9664\u4e86\u56fe\u50cf\u6574\u4f53\u4eae\u5ea6\u5e26\u6765\u7684\u5f71\u54cd\u3002

    \u4e2a\u4eba\u7591\u60d1

    \u8fd9\u91cc\u6240\u8c13\u7684\u201c\u6d88\u9664\u4eae\u5ea6\u5f71\u54cd\u201d\uff0c\u662f\u5426\u662f\u5bf9\u4e8e multi-view \u7684\u60c5\u51b5\u6765\u8bf4\u7684\uff1f\u56e0\u4e3a\u5982\u679c\u53ea\u6709\u4e24\u5f20\u56fe\u7247\uff0c\u4e14\u4eae\u5ea6\u5dee\u8ddd\u6574\u4f53\u6052\u5b9a\u7684\u8bdd\uff0c\u867d\u7136\u8ba1\u7b97\u51fa\u6765\u7684 diff \u4f1a\u504f\u5927\uff0c\u4f46\u662f\u6574\u4f53\u4e0a\u7684\u5927\u5c0f\u5173\u7cfb\u597d\u50cf\u4e5f\u6ca1\u6709\u53d8\u5316\uff1f\u6211\u6ca1\u6709\u60f3\u6e05\u695a\u8fd9\u4e00\u70b9\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u5339\u914d\u7684\u6539\u8fdb","title":"\u5339\u914d\u7684\u6539\u8fdb","text":"

    \u7136\u800c\uff0c\u5339\u914d\u8fc7\u7a0b\u4e2d\u8fd8\u6709\u4e00\u4e2a\u989d\u5916\u7684\u95ee\u9898\u9700\u8981\u89e3\u51b3\u3002

    \u7a97\u53e3\u641c\u7d22\u7684\u5f0a\u7aef

    \u7a97\u53e3\u641c\u7d22\u7684\u6548\u679c\u5b9e\u9645\u4e0a\u5e38\u5e38\u4e0d\u5c3d\u5982\u4eba\u610f\uff0c\u6709\u4e00\u79cd\u57fa\u4e8e\u56fe\u5272\u7684\u505a\u6cd5\uff0c\u6548\u679c\u76f8\u5bf9\u7a0d\u597d\u3002

    \u8fd9\u91cc\u6240\u8bf4\u7684\u7a97\u53e3\uff0c\u6307\u7684\u662f\u5728\u5339\u914d\u641c\u7d22\u8fc7\u7a0b\u4e2d\uff0c\u7528\u6765\u6bd4\u8f83\u76f8\u4f3c\u5ea6\u7684\u7a97\u53e3\u5927\u5c0f\u3002

    \ud83d\udc49 Boykov et al., Fast Approximate Energy Minimization via Graph Cuts, International Conference on Computer Vision 1999.

    \u8fd8\u6709\u53e6\u5916\u4e00\u4e2a\u601d\u8def\uff0c\u90a3\u5c31\u662f\u8f6c\u5316\u4e3a\u4f18\u5316\u95ee\u9898\uff0c\u5982\u679c\u8bf4\u539f\u6765\u7684\u76ee\u6807\u51fd\u6570\u662f\u4e24\u70b9\u7684\u5339\u914d\u7a0b\u5ea6\uff0c\u90a3\u4e48\u73b0\u5728\u7684\u76ee\u6807\u51fd\u6570\u53ef\u4ee5\u662f\u5339\u914d\u7a0b\u5ea6\u548c\u5e73\u6ed1\u7a0b\u5ea6\u7684\u52a0\u6743\u548c\uff1a

    \\[ \\begin{aligned} E(d) = E_d(d) + \\lambda E_s(s) \\\\ \\text{match cost: } & E_d(d) = \\sum_{(x,y)\\in I} C(x,y,d(x,y)) \\;\\;\\; \\text{e.g., SSD, SAD, ZNCC} \\\\ \\text{smoothness cost: } & E_s(d) = \\sum_{(p,q) \\in \\varepsilon} V(d_p, d_q) \\;\\;\\; \\text{where } \\varepsilon \\text{ is the set of neighboring pixels } \\end{aligned} \\]

    \u5176\u4e2d\uff0c\\(V(d_p,d_q)\\) \u4e00\u822c\u6709\u4e24\u79cd\u9009\u62e9\uff1a

    \\[ \\begin{aligned} \\begin{aligned} \\text{L_1 Distance: } \\\\ V(d_p, d_q) &= |d_p - d_q| \\end{aligned} & & \\begin{aligned} \\text{Potts Model: } \\\\ V(d_p, d_q) &= \\left\\{ \\begin{array}{*} 0 & \\text{ if } d_p = d_q \\\\ 1 & \\text{ if } d_p \\not = d_q \\end{array} \\right. \\end{aligned} \\end{aligned} \\]

    \u7279\u522b\u7684\uff0c\u5982\u679c\u6d89\u53ca\u7684\u662f\u4e00\u4e2a\u7ebf\u6027\u7684\u626b\u63cf\uff0c\u4e5f\u5c31\u662f\u5f53 \\(\\varepsilon\\) \u4e2d\u53ea\u542b\u6709\u5de6\u53f3\u4e24\u4fa7\u7684\u70b9\uff0c\u90a3\u4e48\u8fd9\u4e2a\u95ee\u9898\u53ef\u4ee5\u7528 DP \u89e3\u51b3\u3002\u800c\u8fd9\u79cd\u65b9\u5f0f\u4f18\u5316\u51fa\u6765\u7684\u56fe\u7247\u6548\u679c\u662f\u8fd9\u6837\u7684\uff1a

    \u7136\u800c\uff0c\u5982\u679c\u4e0d\u6ee1\u8db3\u7ebf\u6027\u626b\u63cf\u8fd9\u4e2a\u6761\u4ef6\u7684\u8bdd\uff0c\u8fd9\u4e2a\u95ee\u9898\u5c31\u53d8\u6210\u4e86\u4e00\u4e2a NP-hard \u95ee\u9898\uff0c\u4e0d\u8fc7\u53ef\u4ee5\u7528\u56fe\u5272\u6c42\u8fd1\u4f3c\u89e3\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u7efc\u5408","title":"\u7efc\u5408","text":"

    \u81f3\u6b64\uff0c\u6211\u4eec\u5728\u672c\u8282\u5f00\u5934\u63d0\u5230\u7684\u4e24\u4e2a\u95ee\u9898\uff0c\u5df2\u7ecf\u5168\u90e8\u89e3\u51b3\u4e86\u3002

    \u4e8e\u662f\u53cc\u76ee\u91cd\u5efa\u7684\u5927\u81f4\u6d41\u7a0b\u5982\u4e0b\u2014\u2014\u9996\u5148\u6211\u4eec\u5bf9\u76f8\u673a\u8fdb\u884c\u6807\u5b9a\uff0c\u83b7\u5f97\u76f8\u673a\u7684\u5185\u53c2\uff1b\u63a5\u4e0b\u6765\u901a\u8fc7\u7acb\u4f53\u5f71\u50cf\u77eb\u6b63\u6280\u672f\uff0c\u5c06\u4e24\u5f20\u56fe\u7247\u8f6c\u5316\u4e3a\u6700\u7b80\u60c5\u51b5\uff1b\u7136\u540e\u518d\u5bf9\u6bcf\u4e00\u4e2a\u50cf\u7d20\u8fdb\u884c\u5339\u914d\uff0c\u53ea\u9700\u8981\u5728\u540c\u9ad8\u5ea6\u7684\u5bf9\u6781\u7ebf\u4e0a\u641c\u7d22\u5339\u914d\u5c40\u90e8\u7279\u5f81\u6700\u76f8\u4f3c\u7684\u53e6\u5916\u4e00\u4e2a\u70b9\u5373\u53ef\uff1b\u63a5\u7740\u518d\u6839\u636e\u5339\u914d\u70b9\u7684\u5173\u7cfb\u8fdb\u884c\u6df1\u5ea6\u4f30\u8ba1\u5373\u53ef\u3002

    graph LR;\n    A --> B --> C --> D\n    A[\"Calibrate Cameras\"]\n    B[\"Rectify Images\"]\n    C[\"Compute Disparity\"]\n    D[\"Estimate Depth\"]
    \u5f15\u8d77\u8bef\u5dee\u7684\u53ef\u80fd\u56e0\u7d20

    \u8bfe\u7a0b\u5185\u8fd9\u4e2a\u5217\u8868\u5176\u5b9e\u662f\u7ed9\u5927\u4f5c\u4e1a\u7684\u63d0\u793a\uff0c\u4e2a\u4eba\u8ba4\u4e3a\u4e5f\u6709\u52a9\u4e8e\u68b3\u7406\u6574\u4e2a\u6d41\u7a0b\u3002

    \u4e0b\u9762\u8be6\u7ec6\u8bf4\u660e\u51e0\u4e2a\u56e0\u7d20\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd\u3002

    \u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

    \u5f53\u6211\u4eec\u4f7f\u7528\u7a97\u53e3\u641c\u7d22\u65f6\uff0c\u7a97\u53e3\u5927\u5c0f\u7684\u9009\u62e9\u4ecd\u7136\u662f\u4e2a\u96be\u9898\u2014\u2014\u7a97\u53e3\u8d8a\u5c0f\uff0c\u5f80\u5f80\u7ed3\u679c\u7684\u7ec6\u8282\u4f1a\u66f4\u591a\uff0c\u76f8\u5bf9\u7684\u566a\u58f0\u4e5f\u66f4\u591a\uff0c\u56fe\u7247\u770b\u8d77\u6765\u5c31\u5f88\u4e71\uff1b\u800c\u7a97\u53e3\u8d8a\u5927\uff0c\u5f80\u5f80\u566a\u58f0\u66f4\u5c11\u3001\u66f4\u5e73\u6ed1\uff0c\u4f46\u662f\u7ec6\u8282\u4e5f\u66f4\u5c11\uff0c\u4e5f\u5c31\u662f\u8bf4\uff0c\u8fd9\u91cc\u6709\u4e00\u4e2a\u5e73\u6ed1\u5ea6\u548c\u7cbe\u786e\u5ea6\u7684 trade off\u3002

    W \u8868\u793a\u7a97\u53e3\u5927\u5c0f\u3002

    \u57fa\u7ebf\u5927\u5c0f\u7684\u9009\u62e9\u5bf9\u7ed3\u679c\u7684\u5f71\u54cd

    \u8c28\u8bb0\u6211\u53c8\u56e0\u4e3a\u753b\u56fe\u6d6a\u8d39\u534a\u4e2a\u5c0f\u65f6\u3002

    \u4e0a\u9762\u7684\u5185\u5bb9\u7ed3\u675f\u540e\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u9057\u7559\u4e0b\u6765\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u5148\u601d\u8003\u4e00\u4e0b\u76ee\u524d\u8fd9\u4e2a\u6d41\u7a0b\u6709\u4ec0\u4e48\u95ee\u9898\uff0c\u518d\u6253\u5f00\u4e0b\u9762\u7684\u63d0\u793a\u6846\u3002

    \u4e00\u4e2a\u5c1a\u672a\u88ab\u89e3\u51b3\u7684\u95ee\u9898

    \u8ba9\u6211\u4eec\u56de\u5230\u7b2c\u4e94\u7ae0\u7684\u5173\u952e\u70b9\u5339\u914d\u2014\u2014\u4e3a\u4ec0\u4e48\u6211\u4eec\u53ea\u627e\u5173\u952e\u70b9\uff1f

    \u6211\u4e2a\u4eba\u7684\u60f3\u6cd5\u662f\uff0c\u9996\u5148\uff0c\u5173\u952e\u70b9\u80fd\u591f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u8868\u8fbe\u4e00\u4e2a\u7269\u4f53\u7684\u7279\u5f81\uff0c\u6216\u8005\u8bf4\u5b83\u662f\u52fe\u52d2\u4e00\u4e2a\u7269\u4f53\u975e\u5e38\u91cd\u8981\u7684\u4e00\u4e2a\u90e8\u5206\uff1b\u8fd8\u6709\u4e00\u4e2a\u539f\u56e0\u662f\uff0c\u5173\u952e\u70b9\u7279\u5f81\u660e\u663e\uff0c\u5176\u8868\u8fbe\u5177\u6709\u4e00\u5b9a\u7684\u72ec\u7279\u6027\uff08\u4e5f\u5c31\u662f\u5173\u952e\u70b9\u7684\u72ec\u7279\u6027(uniqueness)\uff09\u3002

    \u800c\u73b0\u5728\u6211\u4eec\u505a\u5339\u914d\u7684\u5185\u5bb9\u662f\u4efb\u610f\u7684\u3001\u5e7f\u6cdb\u7684\uff0c\u4f8b\u5982\u6211\u4eec\u73b0\u5728\u5728\u505a\u5339\u914d\u7684\u5f88\u53ef\u80fd\u662f\u4e00\u9762\u767d\u5899\u4e0a\u7684\u67d0\u4e00\u4e2a\u70b9\uff08\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u8fc7\u7684 textureless regions\uff09\uff0c\u8fd9\u6837\u7684\u70b9\u53c8\u8981\u5982\u4f55\u627e\u5230\u5b83\u7684\u5339\u914d\u70b9\u5462\uff1f

    \u7b54\u6848\u5c31\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u7ed3\u6784\u5149\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u7ed3\u6784\u5149

    \u6211\u4eec\u518d\u68b3\u7406\u4e00\u4e0b\u95ee\u9898\u7684\u8981\u70b9\uff0c\u5c31\u4ee5\u767d\u5899\u4e3a\u4f8b\u5b50\uff0c\u5b83\u96be\u4ee5\u8fdb\u884c\u5339\u914d\u662f\u56e0\u4e3a\u5b83\u7f3a\u5c11\u7279\u5f81\u3001\u7f3a\u5c11\u7eb9\u7406\uff0c\u800c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5bf9\u5176\u7ed3\u6784\u8fdb\u884c\u91cd\u5efa\u2014\u2014\u90a3\u4e48\u4e00\u4e2a\u60f3\u6cd5\u5c31\u662f\u6211\u4eec\u624b\u52a8\u7ed9\u4ed6\u300c\u4e0a\u7eb9\u7406\u300d\uff0c\u5f53\u7136\u5e76\u4e0d\u662f\u6307\u753b\u4e0a\u53bb\uff0c\u800c\u662f\u4f7f\u7528\u7ed3\u6784\u5149\uff1a

    \u4e8e\u662f\u6211\u4eec\u7684\u56fe\u50cf\u5c31\u6709\u4e86\u7eb9\u7406\uff0c\u62e5\u6709\u4e86\u201c\u7279\u5f81\u201d\u3002

    \u4e2a\u4eba\u60f3\u6cd5

    \u6211\u5f53\u65f6\u770b\u5230\u8fd9\u4e2a idea \u7684\u65f6\u5019\uff0c\u611f\u89c9\u5f88\u523a\u6fc0\uff0c\u4f46\u662f\u53c8\u89c9\u5f97\u8fd9\u7834\u574f\u4e86\u666f\u8c61\u672c\u6765\u7684\u7eb9\u7406\uff0c\u4f46\u662f\u8f6c\u5ff5\u4e00\u60f3\uff0c\u662f\u4e0d\u662f\u4f1a\u62cd\u4e24\u5f20\uff0c\u4e00\u5f20\u7528\u6765\u4e0a\u8272\uff0c\u4e00\u5f20\u7528\u6765\u5efa\u6a21\uff1f\u6211\u6682\u65f6\u8fd8\u4e0d\u77e5\u9053\uff0c\u7ebf\u653e\u4e2a\u731c\u60f3\u5728\u8fd9\u91cc\u3002

    \u4e0d\u8fc7\u6b64\u65f6\u53c8\u6709\u4e00\u4e2a\u5f15\u7533\u51fa\u6765\u7684\u70b9\uff0c\u5c31\u662f\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5176\u5b9e\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e2a\u76f8\u673a\u3002

    \u8fd9\u662f\u56e0\u4e3a\uff0c\u5047\u8bbe\u6211\u4eec\u628a camera 2 \u653e\u5728\u4e0e projector \u4e00\u6837\u7684\u4f4d\u7f6e\uff0c\u6b64\u65f6 camera 2 \u6536\u5230\u7684\u56fe\u50cf\u5e94\u5f53\u548c projector \u5c04\u51fa\u53bb\u7684\u662f\u4e00\u6837\u7684\uff0c\u6216\u8005\u8bf4\u662f\u7c7b\u4f3c\u7684\u3002

    \u5982\u4f55\u89e3\u91ca\uff1f

    \u8bf4\u5b9e\u8bdd\u6211\u8fd8\u662f\u4e0d\u592a\u80fd\u7406\u89e3\u8fd9\u4e00\u70b9\u3002\u5982\u679c\u8981\u6211\u5f3a\u884c\u7406\u89e3\u7684\u8bdd\uff0c\u6211\u89c9\u5f97\u5927\u6982\u662f\u53c8\u8fd9\u4e48\u4e24\u70b9\uff0c\u7b2c\u4e00\u70b9\u662f\u88ab\u7ed3\u6784\u5149\u7167\u5c04\u7684\u4e1c\u897f\u5bf9\u7ed3\u6784\u5149\u7684\u53cd\u5c04\u4ee5\u6f2b\u53cd\u5c04\u4e3a\u4e3b\uff0c\u800c\u4e14\u6240\u8c13\u7684\u201c\u4e00\u6837\u201d\u4e5f\u53ea\u662f\u7d2f\u6b7b\uff0c\u5e76\u4e0d\u80fd\u5305\u62ec\u9634\u5f71\u5173\u7cfb\u7b49\uff0c\u6240\u4ee5\u5bf9\u8fd9\u4e2a\u7ed3\u8bba\u7684\u6b63\u786e\u4e0e\u5426\u6211\u8868\u793a\u6000\u7591\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u591a\u89c6\u89d2","title":"\u591a\u89c6\u89d2","text":"

    \u591a\u89c6\u89d2\u7acb\u4f53(Multi-view Stereo, MVS)\u91cd\u5efa\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u5229\u7528\u66f4\u591a\u7684\u89c6\u89d2\u6765\u8fdb\u884c\u91cd\u5efa\uff0c\u76f8\u6bd4\u4e8e\u524d\u9762\u63d0\u5230\u7684\u53cc\u76ee\u6a21\u578b\uff0c\u5b83\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\u3001\u80fd\u5728\u591a\u4e2a\u5019\u9009\u4e2d\u9009\u62e9\u6700\u5408\u9002\u7684\u65b9\u6848\uff0c\u4ee5\u53ca\u80fd\u5f97\u5230\u66f4\u5b8c\u6574\u7684 3D

    \u6211\u4eec\u5728\u53cc\u76ee\u5339\u914d\u4e2d\uff0c\u9996\u5148\u5bfb\u627e\u80fd\u591f\u5339\u914d\u7684\u70b9\u5bf9\u518d\u505a\u63a5\u4e0b\u6765\u7684\u4e8b\u60c5\uff0c\u4f46\u662f\u5728\u591a\u89c6\u89d2\u4e2d\uff0c\u627e\u5230\u300c\u5339\u914d\u7684\u4e00\u7cfb\u5217\u70b9\u300d\u662f\u6bd4\u8f83\u56f0\u96be\u4e14\u8017\u65f6\u7684\uff0c\u56e0\u4e3a n \u4e2a\u70b9\u6709 \\(C_n^2\\) \u5bf9\u5339\u914d\u5173\u7cfb\u3002\u6240\u4ee5\u6211\u4eec\u8981\u53d8\u6362\u601d\u8def\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u67d0\u4e00\u4e2a\u89c6\u89d2\u4e3a\u57fa\u7840\uff0c\u5e76\u679a\u4e3e\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff0c\u8ba1\u7b97\u91cd\u6295\u5f71\u8bef\u5dee\uff0c\u627e\u5230\u4f7f\u91cd\u6295\u5f71\u8bef\u5dee\u6700\u4f18\u79c0\u7684\u90a3\u4e2a\u6df1\u5ea6\u4f5c\u4e3a\u8fd9\u4e2a\u70b9\u7684\u6df1\u5ea6\uff08\u800c\u4e0d\u662f\u5728\u6bcf\u4e00\u4e2a\u5bf9\u6781\u7ebf\u4e0a\u627e\uff0c\u53ef\u4ee5\u601d\u8003\u4e3a\u4ec0\u4e48\uff09\u3002

    \u4e2a\u4eba\u7591\u95ee

    \u8bdd\u8bf4\u8fd9\u4e2a\u91cd\u6295\u5f71\u8bef\u5dee\u6307\u7684\u662f\u4ec0\u4e48\u554a\uff0c\u662f\u9700\u8981\u5148\u7b97\u597d\u5339\u914d\u70b9\u7136\u540e L2 \u8ddd\u79bb\u7684\u8bef\u5dee\u8fd8\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff1f\u5982\u679c\u662f\u76f8\u4f3c\u5ea6\u7684\u8bef\u5dee\uff0c\u90a3\u600e\u4e48\u89e3\u51b3\u5f62\u53d8\uff1f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-reconstruction","title":"3D reconstruction","text":"

    \u5177\u4f53\u6765\u8bf4\uff0c3D \u91cd\u5efa\u5305\u62ec\u8fd9\u4e48\u4e09\u4e2a\u6b65\u9aa4\uff1a

    1. \u6df1\u5ea6\u8ba1\u7b97
    2. \u6df1\u5ea6 -> 3D\u7f51\u683c\u8868\u9762
    3. \u7eb9\u7406\u586b\u5145
    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-representations","title":"3D representations","text":"

    \u8865\u5145\u56fe\u7247

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#3d-surface-reconstruction","title":"3D surface reconstruction","text":"
    1. \u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a
    2. \u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c
    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u6df1\u5ea6---\u4f53\u7d20\u8868\u793a","title":"\u6df1\u5ea6 -> \u4f53\u7d20\u8868\u793a","text":"

    \u5e38\u7528\u65b9\u6cd5\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#depth-fusion-depth-maps-to-tsdf","title":"Depth Fusion \uff08depth maps to TSDF\uff09","text":"

    \u3010\u5bf9\u4e8e\u56fe\u4e2d\u3011\uff1a

    \u601d\u8def

    \u4e4b\u524d\u4e5f\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\u3002\u4e00\u4e2a\u603b\u7ed3\u6027\u7684\u60f3\u6cd5\u662f\uff0c\u5f53\u4f60\u9700\u8981\u628a\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u4e1c\u897f\u6295\u5f71\u5230\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u5230\u5730\u65b9\u53bb\u65f6\uff0c\u5e94\u5f53\u679a\u4e3e\u300c\u5206\u8fa8\u7387\u300d\u9ad8\u7684\u90a3\u4e00\u4fa7\u7684\u5355\u5143\uff0c\u7136\u540e\u5229\u7528\u300c\u5206\u8fa8\u7387\u300d\u4f4e\u7684\u8fd9\u4e00\u4fa7\u53bb\u8ba1\u7b97\uff0c\u800c\u4e0d\u662f\u4ece\u4f4e\u5230\u9ad8\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#poisson-reconstruction-depth-maps-to-occupancy-volume","title":"Poisson reconstruction \uff08depth maps to occupancy volume\uff09","text":"

    \u67cf\u677e\u91cd\u5efa

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#\u4f53\u7d20\u8868\u793a---\u4e09\u7ef4\u7f51\u683c","title":"\u4f53\u7d20\u8868\u793a -> \u4e09\u7ef4\u7f51\u683c","text":"

    \u5e38\u7528\u65b9\u6cd5\uff1a

    Marching cubes

    "},{"location":"cour_note/D2QD_Intro2CV/Lec08/#texture-mapping","title":"Texture mapping","text":"

    \u5c55\u5f00 get \u7eb9\u7406\u56fe\uff08\u4e8c\u7ef4\u5750\u6807\u80fd\u591f\u5bf9\u5e94\u4e00\u4e2a\u7f51\u683c\u9762\uff09 using \u53c2\u6570\u5316

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/","title":"Lecture 9 | Deep Learning","text":"

    \u7ea6 1839 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u673a\u5668\u5b66\u4e60\u6982\u8ff0","title":"\u673a\u5668\u5b66\u4e60\u6982\u8ff0","text":"

    \u8bf4\u660e

    \u672c\u8bfe\u7a0b\u4e0d\u4f1a\u8be6\u7ec6\u4ecb\u7ecd\u5173\u4e8e\u673a\u5668\u5b66\u4e60\u7684\u6240\u6709\u77e5\u8bc6\uff0c\u4f46\u4ecd\u7136\u5bf9\u57fa\u7840\u6982\u5ff5\u6709\u6240\u8981\u6c42\uff0c\u6240\u4ee5\u5728\u6b64\u4ec5\u505a\u6982\u5ff5\u6027\u5bf9\u7b80\u4ecb\u3002

    \u673a\u5668\u5b66\u4e60(Machine Learning, ML) \u7c97\u7565\u7684\u6765\u8bf4\u5c31\u662f\u901a\u8fc7\u5bf9\u5927\u91cf\u6570\u636e\u8fdb\u884c\u5b66\u4e60\uff0c\u5728\u4e00\u5b9a\u89c4\u5219\u4e0b\u751f\u6210\u7a0b\u5e8f\uff0c\u5bf9\u4e8e\u673a\u5668\u5b66\u4e60\u6765\u8bf4\uff0c\u5b66\u4e60\u51fa\u6765\u7684\u8fd9\u4e2a\u201c\u7a0b\u5e8f\u201d\u7ed3\u679c\u662f\u6a21\u578b(model)\u3002

    \u800c\u5982\u679c\u7528\u6765\u5b66\u4e60\u7684\u662f\u88ab\u6807\u6ce8\u8fc7\u7684\u6570\u636e(labeled data)\uff0c\u5219\u79f0\u4e4b\u4e3a(\u6709)\u76d1\u7763(\u7684)\u5b66\u4e60(supervised learning)\u3002

    \u65e0\u8bba\u662f\u673a\u5668\u5b66\u4e60\u6280\u672f\u8fd8\u662f\u4f20\u7edf\u7684\u7f16\u7a0b\u6280\u672f\uff0c\u90fd\u662f\u4e3a\u4e86\u89e3\u51b3\u67d0\u4e2a\u95ee\u9898\u800c\u5b58\u5728\u7684\u3002\u800c\u89e3\u51b3\u4e00\u4e2a\u590d\u6742\u95ee\u9898\u2014\u2014\u6b63\u5982\u6211\u4eec\u4e4b\u524d\u5f3a\u8c03\u7684\u2014\u2014\u9700\u8981\u5bf9\u95ee\u9898\u8fdb\u884c\u62bd\u8c61\u5efa\u6a21\u3002\u800c\u4e00\u4e2a\u673a\u5668\u5b66\u4e60\u5b66\u4e60\u51fa\u6765\u7684\u6a21\u578b(model)\u53ef\u4ee5\u88ab\u89c6\u4f5c\u4e00\u4e2a\u5173\u4e8e\u8f93\u5165\u548c\u8f93\u51fa\u7684\u63cf\u8ff0\uff1a

    \\[ \\text{Input } X \\rightarrow f_w \\rightarrow \\text{Output } Y \\]

    \u800c\u6839\u636e\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u8f93\u51fa\u201d\u7684\u4e0d\u540c\uff0c\u6309\u7167\u8fde\u7eed\u4e0e\u79bb\u6563\uff0c\u6211\u4eec\u5c06\u6240\u89e3\u51b3\u7684\u95ee\u9898\u533a\u5206\u4e3a\u56de\u5f52(regression)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u8fde\u7eed\u7684\u6570\u503c\uff09\u548c\u5206\u7c7b(classification)\u95ee\u9898\uff08\u7ed3\u679c \\(y\\) \u662f\u79bb\u6563\u7684\u6807\u7b7e\uff09\uff0c

    \u66f4\u5177\u9898\u7684\u6765\u8bf4\uff0c\u4e00\u822c\u673a\u5668\u5b66\u4e60\u7684 pipeline \u662f\u8fd9\u6837\u7684\uff1a

    1. \u5bf9\u95ee\u9898\u8fdb\u884c\u5b9a\u4e49\uff1b
    2. \u6536\u96c6\uff08\u548c\u5904\u7406\uff09\u7528\u6765\u5b66\u4e60\u7684\u6570\u636e\u96c6\uff1b
    3. \u5bf9\u95ee\u9898\u5efa\u6a21\uff0c\u5e76\u8bbe\u8ba1\u6a21\u578b\uff1b
      • \u62bd\u8c61\u5730\u6765\u8bf4\u662f\u51b3\u5b9a\u8f93\u5165\u8f93\u51fa\u7684\u5173\u8054\u5f62\u5f0f\uff1b
    4. \u6a21\u578b\u8bad\u7ec3\uff1b
      • \u8bbe\u8ba1\u635f\u5931\u51fd\u6570\u6765\u8bc4\u4f30\u6a21\u578b\u7684\u6548\u679c\uff1b
      • \u7528\u4f18\u5316\u6280\u672f\u6c42\u89e3\u4f7f\u6a21\u578b\u6548\u679c\u6700\u597d\u7684\u53c2\u6570\uff1b
    5. \u6a21\u578b\u6d4b\u8bd5\uff1b
      • \u4e5f\u5c31\u662f\u7528\u6d4b\u8bd5\u6570\u636e\u96c6\u6d4b\u8bd5\u5b83\u7684\u8868\u73b0\uff1b
    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u7ebf\u6027\u5206\u7c7b\u5668","title":"\u7ebf\u6027\u5206\u7c7b\u5668","text":"

    \u7ebf\u6027\u5206\u7c7b\u5668(Linear Classifier)\u6700\u65e9\u53eb\u611f\u77e5\u673a(Perceptron)\uff0c\u5b83\u662f ML \u4e2d\u4e00\u4e2a\u6700\u7b80\u5355\u4e5f\u662f\u6700\u57fa\u672c\u7684\u6784\u6210\u3002

    \\[ y = f(x, W) = W x + b \\\\ \\begin{aligned} & \\text{where } x \\text{ means inputs, such as image, } \\\\ & y \\text{ means outputs, such as the class of the object, } \\\\ & \\text{and } W \\text{ is the parameters matrix.} \\end{aligned} \\]

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5176\u6570\u5b66\u63cf\u8ff0\u5c31\u89e3\u91ca\u4e86\u5b83\u4e3a\u4ec0\u4e48\u53eb\u300c\u7ebf\u6027\u300d\u5206\u7c7b\u5668\u3002

    \u66f4\u8be6\u7ec6\u7684\u89e3\u91ca\u4e0d\u5728\u8fd9\u91cc\u5c55\u5f00\uff0c\u53ef\u4ee5\u67e5\u770b cs231n \u7b14\u8bb0\u7684\u76f8\u5173\u4ecb\u7ecd

    \u4f55\u65f6\u8f93\u51fa\u6bd4\u8f83\u5927\uff1f

    \u8f93\u51fa\u5927\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u67d0\u884c\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u5206\u7c7b\u5230\u8fd9\u4e00\u884c\u7684\u53ef\u80fd\u6027\u66f4\u5927\uff0c\u4e00\u822c\u662f \\(x\\) \u4e0e \\(W\\) \u7684\u5bf9\u5e94\u884c\u76f8\u4f3c\u65f6\u3002

    \u8fd9\u91cc\u6709\u4e00\u4e2a\u7279\u6b8a\u7684\u6982\u5ff5\u662f\u51b3\u7b56\u8fb9\u754c(Decision Boundary)\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training","title":"Training","text":"

    \u5982\u4f55\u627e\u5230\u6700\u4f73\u7684\u53c2\u6570\uff1f

    \u6700\u5c0f\u4e8c\u4e58\u6cd5\u7684\u7f3a\u70b9

    \u8bc4\u4ef7\u4e24\u4e2a\u6982\u7387\u5206\u5e03\u662f\u5426\u76f8\u4f3c\uff0c\u5e38\u7528\u7684\u662f\u4ea4\u53c9\u5dee\uff0ccross entropy as loss function

    \\[ S \\sim S(y) \\\\ D(S,L) = -\\sum_i L_i \\log S_i \\]"},{"location":"cour_note/D2QD_Intro2CV/Lec09/#neural-networks","title":"Neural Networks","text":"

    \u7ebf\u6027\u5206\u7c7b\u6700\u65e9\u53eb\u611f\u77e5\u673a\uff0cperceptron

    \u7136\u800c\u6709\u4e9b\u5206\u7c7b\u53ef\u80fd\u662f\u975e\u7ebf\u6027\u7684\uff0c\u5982\u56fe

    \u8fd9\u79cd\u65f6\u5019\u6211\u4eec\u53ef\u80fd\u4f1a\u4f7f\u7528\u4e00\u4e2a\u51fd\u6570\u5c06\u5b83\u4e0e\u7ebf\u6027\u5206\u7c7b\u6620\u5c04\u8d77\u6765\uff0c\u8fd9\u79cd\u51fd\u6570\u4e00\u822c\u53eb\u6fc0\u6d3b\u51fd\u6570 activation functions

    \u591a\u7c7b\u522b\u8868\u793a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u591a\u5c42\u611f\u77e5\u673a-multi-layer-perceptron","title":"\u591a\u5c42\u611f\u77e5\u673a Multi-layer perceptron","text":"\\[ \\sigma \\text{ is a nonlinear transform.} f(x) = \\sigma(w^T x + b) \\]

    hidden layers

    \u5982\u679c\u6ca1\u6709\u975e\u7ebf\u6027\u6fc0\u6d3b\u51fd\u6570\uff0c\u6700\u540e\u7b49\u4ef7\u4e8e\u4e00\u4e2a\u5355\u5c42\u7ebf\u6027\u611f\u77e5\u673a

    Neural Networks

    \u6df1\u5ea6\u795e\u7ecf\u7f51\u7edc Deep Neural Networks \u5c42\u6570\u591a =>

    \u5168\u8fde\u5c42 Fully connected layer

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#convolution-neural-networks","title":"Convolution Neural Networks","text":"

    What is CNN? What is convolution? Layer Types: 1. Convolutional layer 2. Pooling layer 3. Fully-connected layer

    \u5728 CV \u4e2d\uff0c\u6709\u65f6\u5019\u56fe\u50cf\u7684\u5c40\u90e8\u7279\u5f81\u5c31\u591f\u6211\u4eec\u8fdb\u884c\u5206\u7c7b\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u53ef\u80fd\u4e0d\u9700\u8981\u8ba9\u7f51\u7edc\u8fde\u4e0a\u6240\u6709\u7684\u90e8\u5206\u3002

    1 \u4e2a\u7f51\u7edc -> 3 \u4e2a\u7f51\u7edc\uff0cwith weight sharing\uff0c\u56e0\u4e3a 3 \u4e2a\u7f51\u7edc\u90fd\u662f\u7528\u6765\u8bc6\u522b\u540c\u6837\u7684\u4e1c\u897f\u7684\uff0c\u6216\u8005\u8bf4\u529f\u80fd\u76f8\u540c\u3002

    \\[ y = \\sigma(x \\otimes w + b) \\]

    padding & pooling & stride

    \u597d\u5904\u662f\u53c2\u6570\u6bd4\u5168\u8fde\u5c42\u5c11\u5f88\u591a

    \u611f\u53d7\u91ce Receptive fields

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6c60\u5316\u5c42","title":"\u6c60\u5316\u5c42","text":"

    \u628a\u4e0d\u540c\u5730\u996d\u7684\u7ed3\u679c\u7ed3\u5408\u5728\u4e00\u8d77\uff0c\u5c06\u54cd\u5e94\u56fe\u7684\u591a\u4e2a\u7ed3\u679c\u5408\u5e76\u4e3a\u540c\u4e00\u4e2a

    CNN \u4e00\u822c\u8fc7\u7a0b

    P71

    CNN \u7ecf\u5178\u7f51\u7edc\uff1aAlexNet, VGG,

    \u4e0d\u540c channel \u5355\u72ec\u505a ----> Batch Normalization

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#training-neural-networks","title":"Training Neural Networks","text":"

    \u867d\u7136\u6211\u4eec\u6ca1\u6cd5\u627e\u5230\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u65b9\u6cd5\u8bbe\u8ba1\u4e00\u4e2a\u201c\u6700\u4f73\u201d\u7684\u7f51\u7edc\uff0c\u4f46\u662f\u5982\u4f55\u5bfb\u627e\u5176\u4e2d\u6700\u597d\u7684\u53c2\u6570\u5219\u662f\u6709\u4e00\u7cfb\u5217\u4e25\u683c\u7684\u65b9\u6cd5\u3002

    loss function

    optimization

    \u6700\u5c0f\u5316 loss function\uff0c\u4f7f\u7528\u5404\u79cd\u68af\u5ea6\u4e0b\u964d

    This training method is called \u540e\u5411/\u53cd\u5411\u4f20\u64ad back-propagation

    \\[ \\mathbf{w}^{t+1} = \\mathbf{w}^t - \\eta_t\\frac{\\partial L}{\\partial \\mathbf{w}}\\mathbf{w}^t \\]

    \u6c42\u68af\u5ea6-\u300b\u590d\u5408\u51fd\u6570\u6c42\u5bfc-\u300b\u94fe\u5f0f\u6cd5\u5219

    \u5bf9\u4e8e\u73b0\u5728\u7684\u6df1\u5ea6\u5b66\u4e60\u5de5\u5177\u6765\u8bf4\uff0c\u53cd\u5411\u4f20\u64ad\u4e0e\u6c42\u5bfc\u7b49\u8fc7\u7a0b\u90fd\u53ef\u4ee5\u81ea\u52a8\u5b9e\u73b0\uff0c\u4e5f\u5c31\u662f\u8bf4\u6211\u4eec\u53ea\u9700\u8981\u8bbe\u8ba1\u597d\u7f51\u7edc\u7ed3\u6784\u548c loss function \u5373\u53ef\uff0c\u800c\u4f18\u5316\u90e8\u5206\u5219\u53ef\u4ee5\u901a\u8fc7\u5de5\u5177\u5b9e\u73b0\u3002

    \u968f\u673a\u68af\u5ea6\u4e0b\u964d\uff0c\u968f\u673a\u7684\u91c7\u6837\u4e00\u90e8\u5206\u70b9\uff0c\\(\\Omega\\) @P86\uff0c

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#architecture--hyper-parameters","title":"Architecture & hyper-parameters","text":"

    \u65e0\u6cd5\u901a\u8fc7\u90a3\u4e9b\u80fd\u591f\u81ea\u52a8\u8ba1\u7b97\u7684\u6743\u91cd\uff0c\u6d89\u53ca\u5230\u7f51\u7edc\u8bbe\u8ba1\u7684\u4e00\u4e9b\u5185\u5bb9\u7684\u4e00\u4e9b\u53c2\u6570\uff0c\u6210\u4e3a\u8d85\u53c2\u6570 hyper-parameters\u3002

    \u65b9\u6cd5\uff1a\u8bd5\uff08\u5f53\u7136\u4e0d\u662f\u7528\u624b\u8bd5x\uff09\uff01

    How to prevent overfitting? \u2022 Cross validation and early stop \u2022 Regularization or dropout \u2022 Data augmentation

    \u5982\u4f55\u8bc4\u4ef7\u7ed3\u679c\u201c\u597d\u201d\u8fd8\u662f\u201c\u4e0d\u597d\u201d\uff1f

    \u5982\u4f55\u5206\u5272\u6570\u636e\u96c6\uff1f(cross validation: train & validation & test)

    Data split idea * 3

    P89\uff08cs231n also\uff09

    \u4e00\u79cd\u8fdd\u548c\u611f\uff0cvalidation \u53c2\u4e0e\u81ea\u52a8\u53cd\u9988\uff0ctest \u96be\u9053\u4e0d\u7b97\u4e00\u79cd\u4eba\u4e3a\u53cd\u9988\u5417\uff1f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6b63\u5219\u5316","title":"\u6b63\u5219\u5316","text":"

    \u589e\u52a0\u7ea6\u675f\u4ee5\u51cf\u5c11 over fit

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#dropout","title":"Dropout","text":"

    \u8bad\u7ec3\u65f6\u5ffd\u7565\u4e00\u90e8\u5206\u54cd\u5e94\uff0c\u6d4b\u8bd5\u7684\u65f6\u5019\u4ecd\u7136\u4f7f\u7528

    \u65ed\u5b9d\uff1aDropout\u8bf4\u7684\u7b80\u5355\u4e00\u70b9\u5c31\u662f\uff1a\u6211\u4eec\u5728\u524d\u5411\u4f20\u64ad\u7684\u65f6\u5019\uff0c\u8ba9\u67d0\u4e2a\u795e\u7ecf\u5143\u7684\u6fc0\u6d3b\u503c\u4ee5\u4e00\u5b9a\u7684\u6982\u7387p\u505c\u6b62\u5de5\u4f5c\uff0c\u8fd9\u6837\u53ef\u4ee5\u4f7f\u6a21\u578b\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u56e0\u4e3a\u5b83\u4e0d\u4f1a\u592a\u4f9d\u8d56\u67d0\u4e9b\u5c40\u90e8\u7684\u7279\u5f81\u3002

    \u7edf\u8ba1\u4e0a\u7b49\u6548\u4e8e L2

    \u6211\uff1a\u56e0\u4e3a\u6bcf\u4e2a\u70b9\u90fd\u6709\u53ef\u80fd\u6982\u7387\u6027\u5931\u6548\uff0c\u6cdb\u5316\u6027\u66f4\u5f3a\uff0c\u8fd9\u4e5f\u8981\u6c42\u67d0\u4e00\u4e2a\u7279\u5f81\u7684contributes\u4f1a\u88ab\u201c\u5206\u644a\u201d\u5f00\u6765\uff0c\u6240\u4ee5\u6548\u679c\u4e0a\u6709\u70b9\u50cfL2\u7684\u90a3\u79cd\u8ba9\u6743\u91cd\u66f4\u5c0f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#\u6570\u636e\u589e\u5e7f-data-augmentation","title":"\u6570\u636e\u589e\u5e7f Data augmentation","text":"

    overfit \u53ca\u6570\u636e\u592a\u5c11\u8bad\u7ec3\u592a\u591a\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5bf9\u5df2\u6709\u6570\u636e\u53d8\u6362\u6765\u201c\u9020\u201d\u4e00\u4e9b\u6570\u636e\u51fa\u6765\uff0c\u6bd4\u5982\u7ffb\u8f6c\u3001\u62c9\u4f38\u2026\u2026

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#batch-normalization","title":"Batch Normalization","text":"

    \u5bf9\u591a\u4e2a channel \u5bf9\u7ed3\u679c\u8fdb\u884c\u5f52\u4e00\u5316\u64cd\u4f5c

    Reduce internal covariate shift\uff0c\u4ee5\u51cf\u5c11 channal \u4e4b\u95f4\u7684\u53d1\u6563\u6027\uff0c\u66f4\u7a33\u5b9a\u66f4\u6536\u655b

    For more: https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#deep-learning-frameworks","title":"Deep Learning Frameworks","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec09/#network-architectures","title":"Network Architectures","text":"

    \u65e9\u671f\u4e0d\u53d7\u6b22\u8fce\uff1a\u6548\u679c\u5dee & \u53ef\u63a5\u53d7\u6027\u5dee

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#resnet","title":"ResNet","text":"

    \u5047\u8bbe\u6570\u636e\u91cf\u591f\u5927\uff0c\u662f\u4e0d\u662f\u5c42\u6570\u8d8a\u591a\u8d8a\u597d\uff1f

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#densenet","title":"DenseNet","text":"

    \u66f4\u52a0\u7a20\u5bc6\u7684\u94fe\u63a5\uff0c\u672c\u5c42\u53d6\u51b3\u4e8e\u524d\u9762\u6240\u6709\u5c42

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#mobilenets","title":"MobileNets","text":"

    \u901f\u5ea6\u5feb

    NAS: Neural Architecture Search \u81ea\u52a8\u5316\u7f51\u7edc\u7ed3\u6784\u8bbe\u8ba1\uff0clearning to learn

    "},{"location":"cour_note/D2QD_Intro2CV/Lec09/#why-deep-learning-is-powerful","title":"why deep learning is powerful?","text":"

    End-to-end learning\uff0c\u7aef\u5230\u7aef\u5b66\u4e60

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/","title":"Lecture 10 | Recognition","text":"

    \u7ea6 1509 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    \u4e8c\u7ef4\u56fe\u50cf\u8bc6\u522b(Recognition)\u4e0b\u6709\u5f88\u591a\u4efb\u52a1\uff0c\u4e3b\u8981\u5206\u4e3a\u8fd9\u4e48\u51e0\u79cd\uff1a

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#semantic-segmentation","title":"Semantic segmentation","text":"

    \u6bcf\u4e2a\u50cf\u7d20\u5c5e\u4e8e\u54ea\u4e2a\u7c7b\u522b\u8fd9\u79cd\u4fe1\u606f\u53eb\u8bed\u4e49\u4fe1\u606f\u3002

    \u6700\u6734\u7d20\u7684\u505a\u6cd5\u662f sliding window\uff0c\u53d6\u51fa\u4e00\u4e2a window \u653e\u8fdb\u5206\u7c7b\u673a\u5f97\u5230\u7ed3\u679c\uff0c\u4f46\u662f\u663e\u7136\u7531\u4e8e window \u5305\u542b\u7684\u4fe1\u606f\u592a\u5c11\uff0c\u800c\u4e14\u6548\u7387\u592a\u4f4e\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u975e\u5e38 naive\u3002

    \u73b0\u5728\u6807\u51c6\u7684\u505a\u6cd5\u662f\u5168\u5377\u79ef\u7f51\u7edc(Fully Convolutional Network)

    \u5c40\u9650\u6027\uff1a

    \u6539\u8fdb\uff1a

    \u4f46\u662f\u7531\u4e8e\u6211\u4eec\u6700\u540e\u5e0c\u671b\u5f97\u5230\u7684\u662f\u4e00\u4e2a\u548c\u539f\u56fe\u4e00\u6837\u5927\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u6709\u5411\u4e0b\u91c7\u6837\u5c31\u80af\u5b9a\u4f1a\u6709\u5411\u4e0a\u91c7\u6837\uff08\u56de\u5fc6\uff1a\u63d2\u503c\uff09\u3002

    \u56fe\u50cf\u5411\u4e0a\u91c7\u6837\u4ee5\u540e\u53d8\u5927\u4ee5\u540e\u53c8\u5377\u79ef\uff0c\u8fd9\u4e2aTransposed convolution

    ppt P13

    \u4f46\u662f\u5f88\u663e\u7136\uff0c\u5728\u53d8\u5c0f\u53d8\u5927\u7684\u8fc7\u7a0b\u4e2d\u80af\u5b9a\u6709\u4fe1\u606f\u635f\u5931\u3002\u6240\u4ee5\u73b0\u5728\u4e00\u4e2a\u6bd4\u8f83\u6d41\u884c\u7684\u505a\u6cd5\u662f U-Net\uff0c\u4e5f\u5c31\u662f\u5927\u91cf\u5e94\u7528 skip-connection\u3002

    ppt P14 https://web.eecs.umich.edu/~justincj/teaching/eecs498/FA2020/

    DeepLab P15

    \u8003\u8651\u76f8\u90bb\u50cf\u7d20\u4e4b\u95f4\u7684\u5173\u8054\u6027\uff0c\u4f7f\u7528 CRF(Conditional random field) \u4f18\u5316 P16

    \u9a6c\u53ef\u592b\u968f\u673a\u573a\uff1f

    Unary potential: \u4f53\u73b0\u81ea\u5df1\u7684\u7279\u6027

    Pairwise potential: \u4f53\u73b0\u5173\u8054\u6027

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#\u8861\u91cf\u6307\u6807-evaluation-metric-per-pixel-intersection-over-union-iou","title":"\u8861\u91cf\u6307\u6807 Evaluation metric: Per-pixel Intersection-over-union (IoU)","text":"

    \\(IoU=\\frac{ \\text{Ground truth \u548c prediction \u7684\u4ea4\u96c6\u9762\u79ef} }{ \\text{Ground truth \u548c prediction \u7684\u5e76\u96c6\u9762\u79ef} }\\) P19

    mIoU \u6307\u7684\u662f\u5206\u51fa\u6765\u7684\u4e0d\u540c\u7c7b\u522b\u7684 mean IoU

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#object-detection","title":"Object detection","text":"

    Bounding box (bbox)

    \u90a3\u4e48\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u5148\u5047\u8bbe\u4e00\u5171\u53ea\u6709 1 \u4e2a\u5bf9\u8c61\uff0c\u90a3\u4e48\u6b64\u65f6\u548c\u5206\u7c7b\u4efb\u52a1\u662f\u975e\u5e38\u63a5\u8fd1\u7684\uff0c\u53ea\u9700\u8981\u518d\u989d\u5916\u6c42\u89e3\u4e00\u4e2a\u7a97\u53e3\u4f4d\u7f6e\u5373\u53ef\u3002

    \u90a3\u4e48\u591a\u4e2a\u7a97\u53e3\u5462\uff1f

    \u89e3\u51b3\u529e\u6cd5\u8fd8\u662f\u6ed1\u52a8\u7a97\u53e3\uff0c\u53ea\u4e0d\u8fc7\u4e0d\u540c\u4e4b\u524d\u7684\uff0c\u6211\u4eec\u73b0\u5728\u91c7\u7528\u7684\u65b9\u6cd5\u57fa\u672c\u4e0a\u4e5f\u662f\u57fa\u4e8e\u6ed1\u52a8\u7a97\u53e3\u5c55\u5f00\u7684\u3002\u800c\u5728\u8fd9\u79cd\u8bed\u5883\u4e0b\uff0c\u8fd9\u6837\u7684\u4e00\u4e2a\u6ed1\u52a8\u7a97\u53e3\u88ab\u79f0\u4e3a\u4e00\u4e2a\u63d0\u8bae(proposal)\u3002

    \u4f46\u662f\u663e\u7136\uff0c\u4f7f\u7528\u6700\u6734\u7d20\u7684\u6ed1\u52a8\u7a97\u53e3\u4f1a\u5bfc\u81f4\u201c\u63d0\u8bae\u201d\u8fc7\u591a\uff0c\u5bfc\u81f4\u6548\u7387\u592a\u4f4e\u3002\u6240\u4ee5\u6211\u4eec\u8981\u4f18\u5316\u8fd9\u4e2a\u8fc7\u7a0b\u3002

    \u4e00\u822c\u8fd9\u4e9b\u4f18\u5316\u7684\u65b9\u6cd5\u90fd\u662f\u542f\u53d1\u5f0f(heuristics)\u7684\u505a\u6cd5\uff0c\u4f8b\u5982 over-segmentation\uff0c

    \u800c\u8fd9\u7c7b\u65b9\u6cd5\u5c31\u662f R-CNN (region proposal & CNN) P36

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#evaluation-metric","title":"Evaluation metric","text":"

    \u5bf9\u4e8e\u5355\u4e2a\u7269\u4f53\uff0c\u4ecd\u7136\u662f IoU

    P39

    \u4e3a\u4e86\u8bc4\u4ef7\u9884\u6d4b\u7ed3\u679c\u7684\u6b63\u786e\u6027\uff0c\u6211\u4eec\u9700\u8981\u4e3a\u5b83\u8bbe\u7f6e\u4e00\u4e2a\u9608\u503c\u3002

    \u800c\u5bf9\u4e8e\u591a\u4e2a\u7269\u4f53\uff0c\u5219\u4e0d\u90a3\u4e48\u7b80\u5355\uff1aP42

    \uff08\u56de\u5fc6\u7edf\u8ba1\u5b66\u5185\u5bb9\uff09

    positive: \u80af\u5b9a\u7684\u5047\u8bbe P

    negative: \u5426\u5b9a\u7684\u5047\u8bbe N

    true: \u5047\u8bbe\u662f\u6210\u7acb\u7684 T

    false: \u5047\u8bbe\u662f\u9519\u8bef\u7684 F

    \u6211\u4eec\u901a\u8fc7\u4e0b\u9762\u4e24\u4e2a\u6807\u51c6\u6765\u8054\u5408\u5224\u65ad\u6548\u679c\u3002

    \u7cbe\u5ea6 Precision = TP/(TP+FP)\uff1a\u63cf\u8ff0\u7ed9\u5b9a\u7684 bbox \u91cc\u6709\u591a\u5c11\u662f\u6b63\u786e\u7684

    \u53ec\u56de\u7387 Recall = TP/(TP+FN)\uff1a\u63cf\u8ff0\u6240\u6709\u5bf9\u8c61\u4e2d\uff0c\u88ab\u6211\u4eec\u8bc6\u522b\u51fa\u6765\u7684\u6709\u591a\u5c11

    \u4e00\u822c\u6765\u8bf4\uff0c\u8fd9\u4fe9\u4e1c\u897f\u6709\u4e00\u4e2a trade-off\u3002\uff08\u6982\u7edf\u91cc\u5e94\u8be5\u6709\u7c7b\u4f3c\u7684\u5185\u5bb9\uff09

    https://en.wikipedia.org/wiki/Precision_and_recall

    \u800c\u6700\u7ec8\u7684\u8861\u91cf\u65b9\u6cd5\uff0c\u662f Mean Average Precision (mAP)\u3002

    1. Run object detector on all test images
    2. For each category, compute Average Precision
    3. (AP) = area under Precision vs Recall Curves

    PPT p52

    \u5148\u505a\u6240\u6709\u7c7b\u522b\u7684 AP\uff0c\u7136\u540e\u53d6\u5e73\u5747\u5c31\u662f mAP

    mAP@threshold = ...

    COCOmAP = average(mAP@threshold_i), for i \\in {0.5, 0.55, 0.6, \u2026, 0.95}

    Non-Max Suppression

    \u5bf9\u4e8e\u540c\u4e00\u4e2a\u5bf9\u8c61\uff0c\u6211\u6709\u53ef\u80fd\u8bc6\u522b\u51fa\u597d\u51e0\u4e2a\u8bc6\u522b\u540c\u4e00\u4e2a\u7269\u4f53\u7684 bbox\uff0c\u6240\u4ee5\u6211\u53ef\u4ee5\u8003\u8651\u8bbe\u8ba1\u4e00\u79cd\u7b97\u6cd5\u51cf\u5c11\u8fd9\u79cd\u8bc6\u522b\u3002

    \u7b80\u5355\u6765\u8bf4\uff0c\u505a\u6cd5\u5c31\u662f\u627e score \u6700\u5927\u7684\uff0c\u7136\u540e\u770b\u5176\u4ed6 bbox \u548c\u8fd9\u4e2a bbox \u7684 IoU\uff0c\u5927\u4e8e\u4e00\u5b9a\u6743\u91cd\u65f6\uff0c\u8ba4\u4e3a\u5b83\u4eec\u662f\u4e00\u81f4\u7684\uff0c\u5c31\u53ef\u4ee5\u628a\u8f83\u5c0f\u7684\u90a3\u4e2a\u5220\u6389\u4e86\u3002

    Fast R-CNN

    RoI pool \uff08\u6ca1\u542c\u61c2\uff0c\u6574\u7406\u7684\u65f6\u5019\u518d\u4ed4\u7ec6\u5b66\u4e00\u4e0b\uff09

    Faster R-CNN

    \u7528\u7f51\u7edc\uff08Region Proposal Network, RPN\uff09\u751f\u6210\u63d0\u8bae\u9009\u6846\uff0c

    \u951a\u70b9 anchor\uff1a

    \u5728\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\uff0c\u951a\u70b9\u662f\u7528\u4e8e\u76ee\u6807\u68c0\u6d4b\u7684\u9884\u5b9a\u4e49\u6846\u6216\u611f\u5174\u8da3\u533a\u57df\u3002\u951a\u70b9\u80fd\u591f\u5e2e\u52a9\u5377\u79ef\u795e\u7ecf\u7f51\u7edc\u8bc6\u522b\u56fe\u50cf\u4e2d\u5b58\u5728\u7684\u7269\u4f53\u53ca\u5176\u4f4d\u7f6e\uff0c\u4ece\u800c\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u7684\u51c6\u786e\u6027\u3002\u951a\u70b9\u901a\u5e38\u7531\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u957f\u5bbd\u6bd4\u548c\u5c3a\u5ea6\u5b9a\u4e49\uff0c\u8fd9\u4e9b\u56e0\u7d20\u51b3\u5b9a\u4e86\u5b83\u4eec\u7684\u5927\u5c0f\u548c\u5f62\u72b6\u3002\u5728\u8bad\u7ec3\u671f\u95f4\uff0cCNN\u5b66\u4e60\u9884\u6d4b\u76f8\u5bf9\u4e8e\u8fd9\u4e9b\u951a\u70b9\u7684\u7269\u4f53\u7684\u4f4d\u7f6e\u548c\u5927\u5c0f\u3002\u4f7f\u7528\u951a\u70b9\u53ef\u4ee5\u68c0\u6d4b\u4e0d\u540c\u5927\u5c0f\u548c\u5bbd\u9ad8\u6bd4\u7684\u7269\u4f53\uff0c\u5e76\u6709\u52a9\u4e8e\u63d0\u9ad8\u76ee\u6807\u68c0\u6d4b\u5728\u590d\u6742\u573a\u666f\u4e0b\u7684\u51c6\u786e\u6027\u3002----chatGPT

    RPN \u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u628a\u751f\u6210\u9009\u6846\u95ee\u9898\u8f6c\u5316\u4e3a\u6253\u5206\u95ee\u9898\uff0c\u5177\u4f53\u6765\u8bf4\u662f\u7ed9\u6bcf\u4e2a\u50cf\u7d20\u6253\u5728\u8be5\u4f4d\u7f6e\u6709\u4e00\u4e2a\u7279\u5b9a size \u7684\u6846\u7684\u53ef\u80fd\u6027\u7684\u5206\u3002

    \u4e8c\u9636\u6bb5\u5bf9\u8c61\u68c0\u6d4b\u7b26 two-stage object detector

    P76 \u5404\u79cd\u65b9\u6cd5\u7684\u6548\u679c\u6392\u5e8f\u3002

    \u4e00\u79cd\u5bf9 two-stage object detector \u7684\u6539\u8fdb\u662f single-stage object detector\uff0c\u5927\u6982\u5c31\u662f\u5728\u505a RPN \u7684\u540c\u65f6\u53bb\u9884\u6d4b\u8fd9\u4e2a\u6846\u6807\u8bb0\u7684\u662f\u67d0\u4e2a\u7c7b\u522b\u7684\u6982\u7387\u3002

    single-stage \u7684\u4ee3\u8868\u6027\u5de5\u4f5c\uff1aYOLO

    two-stage v.s. single-stage

    \u4f46\u662f\u6211\u4eec\u4e0a\u9762\u7684\u5de5\u4f5c\u90fd\u6ca1\u8003\u8651\u5c3a\u5ea6\u53d8\u5316\uff0cFeature pyramid network \u5728\u8fd9\u65b9\u9762\u63d0\u51fa\u4e86\u89e3\u51b3\u65b9\u6848\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#instance-segmentation","title":"Instance segmentation","text":"

    Faster R-CNN + additional head

    Mask R-CNN

    Deep snake

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#panoptic-segmentation","title":"Panoptic segmentation","text":"

    Microsoft COCO dataset

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#human-pose-estimation","title":"Human pose estimation","text":"

    keypoints

    represent joint location as the heatmap // hourglass networks

    Top-down: - Detect humans and detect keypoints in each bbox - Example: Mask R-CNN - \u6700\u5927\u7684\u95ee\u9898\u8fd8\u662f\u6162

    Bottom-up: - Detect keypoints and group keypoints to form humans - Example: OpenPose \u5148\u627e kpts\uff0c\u518d\u5229\u7528 Affinity Fields \u628a\u5c5e\u4e8e\u4e00\u4e2a\u4eba\u7684 kpts \u5408\u5728\u4e00\u8d77\u3002

    Top-down is generally more accurate Bottom-up is faster\uff0c\u800c\u4e14\u5728\u906e\u6321\u60c5\u51b5\u4e0b\u4e5f\u6709\u5b83\u7684\u4f18\u52bf

    "},{"location":"cour_note/D2QD_Intro2CV/Lec10/#optical-flow","title":"Optical flow","text":"

    \u5149\u6d41

    video classification

    \u4e00\u4e2a\u505a\u6cd5\u662f\u628a\u89c6\u9891\u5f53\u4f5c\u4e00\u4e2a 3d \u56fe\u50cf\u53bb\u505a\uff0c\u5373 3D CNN\u3002\u4f46\u662f\u6570\u636e\u7ef4\u5ea6\u975e\u5e38\u5927\u3002

    Temporal action localization

    Spatial-temporal detection

    \u505a\u6cd5\u4e5f\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a 3D \u7684 R-CNN \u53bb\u505a\u3002

    Multi-object tracking

    \u5bf9\u6bcf\u4e00\u5e27\u505a\u7269\u4f53\u68c0\u6d4b\uff0c\u7136\u540e\u5728\u6bcf\u4e00\u5e27\u4e4b\u95f4\u505a\u5173\u8054\u5339\u914d\u3002

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/","title":"Lecture 11 | 3D Deep Learning","text":"

    \u7ea6 385 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    Deep Learning for 3D reconstruction

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#feature-matching","title":"Feature matching","text":"

    recap: SfM // Colmap

    use deep learning to improve feature matching

    \u4f20\u7edf\u65b9\u6cd5\u7684\u7f3a\u70b9\u5c31\u662f\u56e0\u4e3a\u8fd9\u4e9b\u65b9\u6cd5\u90fd\u662f handcrafted \u7684\u3002\u6240\u4ee5\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u7528 deep learning \u6765\u589e\u5f3a\u6548\u679c\u3002

    example: SuperPoint\u3001SuperGlue

    \u63cf\u8ff0\u503c\uff1a

    1. contrastive loss
    2. triplet loss

    \u5b9e\u9645\u4e0a\u672c\u8d28\u7c7b\u4f3c\uff0c\u6548\u679c\u76f8\u8fd1

    \u4e3b\u6d41\u7528 MVS \u6765\u751f\u6210\u8bad\u7ec3\u6570\u636e

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#object-pose-estimation","title":"Object Pose Estimation","text":"

    \u672c\u8d28\u4e0a\u662f\u5728\u8ba8\u8bba\u7269\u4f53\u5728\u91cd\u5efa\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u548c\u76f8\u673a\u7a7a\u95f4\u4e2d\u7684\u5750\u6807\u7cfb\u7684\u53d8\u6362\u5173\u7cfb\u3002

    PnP

    \u53ef\u662f\u96be\u5c31\u96be\u5728\uff0c\u5982\u4f55\u5bfb\u627e 3D-2D \u7684\u5173\u7cfb\u5462\uff1f

    \u4e00\u4e2a idea \u662f\uff0c\u9996\u5148\u5f97\u5230\u4e00\u4e2a\u8f83\u597d\u7684\u91cd\u5efa\uff0c\u7136\u540e\u57fa\u4e8e\u8fd9\u4e2a\u91cd\u5efa\u6a21\u578b\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4ece\u522b\u7684\u601d\u8def\u6765\u770b\u8fd9\u4ef6\u4e8b\u3002

    pose refinement methods

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#human-pose-estimation","title":"Human Pose Estimation","text":"

    (Markerless) MoCap

    Monocular 3D Human Pose Estimation (eg. Vnet)

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#depth-estimation","title":"Depth Estimation","text":"

    MVSNet

    MVS

    \u79bb\u6563\u8868\u793a\u3001\u9690\u5f0f\u8868\u793a\uff08\u7528\u4e00\u4e2a\u7f51\u7edc\u6765\u8868\u793a\u4e00\u4e2a\u51fd\u6570 Implicit Neural Representations\uff0c\u4ee3\u8868\uff1aNeRF\uff09

    Replacing density field in NeRF by SDF: NeuS

    "},{"location":"cour_note/D2QD_Intro2CV/Lec11/#single-image-to-3d","title":"Single Image to 3D","text":""},{"location":"cour_note/D2QD_Intro2CV/Lec11/#deep-learning-for-3d-understanding","title":"Deep learning for 3D understanding","text":"

    \u8ba1\u7b97\u5f00\u9500\u5f88\u5927

    \u8fd1\u51e0\u5e74\u63d0\u51fa\u7684\u89e3\u51b3\u65b9\u6848\uff1aSparse ConvNets

    Octree \u516b\u53c9\u6811\uff0c\u7a7a\u95f4\u5212\u5206

    \u7a00\u758f\u5377\u79ef\uff0c\u53ea\u6709\u6709\u503c\u7684\u5730\u65b9\u8fdb\u884c\u5377\u79ef

    \u7531\u4e8e\u5377\u79ef\u7b49\u64cd\u4f5c\u662f\u5efa\u7acb\u5728\u7f51\u683c\u4e0a\u7684\uff0c\u800c\u70b9\u4e91\u5e76\u4e0d\u5b9a\u4e49\u5728\u7f51\u683c\u4e0a\uff0c\u6240\u4ee5\u5bf9\u70b9\u4e91\u8fdb\u884c\u5377\u79ef\u5219\u9700\u8981\u4e00\u4e9b\u5176\u4ed6\u65b9\u6cd5\u3002

    \u4e00\u4e2a\u76f8\u5173\u5de5\u4f5c\u662f PointNet\uff0c\u4e13\u95e8\u7528\u5728\u5bf9\u70b9\u4e91\u4e0a\u3002\u8fd8\u6709 PointNet++

    3D Semantic Segmentation

    3D Object Detection

    3D Instance Segmentation

    PointRCNN

    Frustum PointNets

    \u6570\u636e\u96c6\uff1aShapeNet, PartNet,SceneNet , ScanNet

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/","title":"Lecture 12 | Computational Photography 1","text":"

    \u7ea6 253 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    What's \u8ba1\u7b97\u6444\u5f71\uff1f

    ...

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#high-dynamic-range-imaging-hdr","title":"High Dynamic Range Imaging (HDR)","text":"

    \u6211\u4eec\u5e0c\u671b\u4eae\u7684\u548c\u6697\u7684\u5730\u65b9\u7ec6\u8282\u90fd\u5f88\u4e30\u5bcc

    \u66dd\u5149 exposure = Gain\u589e\u76ca * Irradiance\u8f90\u7167\u5ea6 * Time\u66dd\u5149\u65f6\u95f4

    \u5206\u522b\u53d6\u51b3\u4e8e\u2026\u2026

    Dynamic range

    The ratio between the largest and smallest values of a certain quantity

    HRD: \u4e0d\u540c\u4eae\u5ea6\u90fd\u62cd\u4e00\u4e9b\uff0c\u7136\u540e\u5408\u6210

    12 to 8 -> tone mapping

    Gamma compression

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#deblurring","title":"Deblurring","text":"

    \u6a21\u7cca\u7684\u4e24\u4e2a\u4e3b\u8981\u539f\u56e0\uff1adefocus and motion blur

    blurred image = clear image * blur kernel

    deblurring = deconvolution

    inverse filter

    wiener filter

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#colorization","title":"Colorization","text":"

    \u6700\u5173\u952e\u7684\u95ee\u9898\u662f\uff0c\u5982\u4f55\u51b3\u5b9a\u4e0a\u7684\u989c\u8272

    \u4e3b\u8981\u6709\u4e24\u7c7b\u65b9\u6cd5\uff1a

    1. sample-based colorization
    2. interactive colorization
    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#sample-based","title":"Sample-based","text":"

    ...

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#interactive","title":"Interactive","text":"

    ...

    \u5bf9\u4e8e\u89c6\u9891

    Colorful Image Colorization

    GAN (Generative Adversarial Network)

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#more-image-synthesis-tasks","title":"more Image synthesis tasks","text":"

    GAN \u7684\u6539\u8fdb\uff1aCycle-GAN\uff0c\u89e3\u51b3\u4e86\u7f3a\u5c11\u6210\u5bf9\u7684\u8bad\u7ec3\u6570\u636e\u7684\u95ee\u9898

    "},{"location":"cour_note/D2QD_Intro2CV/Lec12/#super-resolution","title":"Super Resolution","text":"

    up sampling

    bi-cubic

    super resolution using GAN

    "},{"location":"cour_note/D2QD_Intro2CV/Lec13/","title":"Lecture 13 | Computational Photography 2","text":"

    \u7ea6 90 \u4e2a\u5b57

    \u6ce8\u610f

    \u672c\u6587\u5c1a\u672a\u5b8c\u5168\u6574\u7406\u597d\uff01

    "},{"location":"cour_note/D2QD_Intro2CV/Lec13/#image-based-rendering","title":"Image-based Rendering","text":"

    rendering: from 3D models to images.

    Image-based Rendering: images -> 3D Models -> novel views.

    representations:

    surface-based representations

    volume-based representations

    \u81ea\u7531\u89c6\u70b9\u89c6\u9891

    "},{"location":"cour_note/D3QD_OperatingSystem/","title":"\ud83d\udc8e \u64cd\u4f5c\u7cfb\u7edf | Operating System","text":"

    \u7ea6 260 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    \u8bfe\u7a0b\u4fe1\u606f

    \u5206\u6570\u6784\u6210

    \u7b14\u8bb0\u53c2\u8003

    \u672c\u8bfe\u7a0b\u7684\u7b14\u8bb0\u4e3b\u8981\u53c2\u8003\u8fc7\u5982\u4e0b\u8d44\u6599\uff1a

    list

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/","title":"Unit 0: \u603b\u89c8 | Overview","text":"

    \u7ea6 9045 \u4e2a\u5b57 23 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 46 \u5206\u949f

    \u5bfc\u8bed

    \u672c\u5355\u5143\u4e3b\u8981\u6709\u4e24\u4e2a\u4efb\u52a1\uff1a

    1. \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u4e00\u4e2a\u8f83\u4e3a\u62bd\u8c61\u7684\u4ecb\u7ecd\uff0c\u540c\u65f6\u5efa\u7acb\u8d77\u6574\u95e8\u8bfe\u7a0b\u7684\u6846\u67b6\uff0c\u65b9\u4fbf\u8bfb\u8005\u5728\u4e4b\u540e\u7684\u5b66\u4e60\u8fc7\u7a0b\u4e2d\u80fd\u6709\u4e00\u4e2a\u6bd4\u8f83\u603b\u4f53\u7684\u8ba4\u8bc6\uff0c\u80fd\u5e26\u7740\u76ee\u7684\u53bb\u5b66\u4e60\u5177\u4f53\u7684\u77e5\u8bc6\uff1b
    2. \u4ecb\u7ecd\u4e00\u4e9b\u6bd4\u8f83\u57fa\u7840\u7684\u5185\u5bb9\uff0c\u6216\u662f\u4e00\u4e9b\u6bd4\u8f83\u7410\u788e\u3001\u4ec5\u9700\u4e86\u89e3\u7684\u5185\u5bb9\uff1b

    \u7531\u4e8e\u8bfe\u672c\u7684 Overview \u5199\u5f97\u975e\u5e38\u4e00\u8a00\u96be\u5c3d\uff0c\u6240\u4ee5\u6211\u5728\u5543\u5b8c\u540e\u8fdb\u884c\u4e86\u4e00\u4e9b\u6574\u7406\uff0c\u4f60\u53ef\u4ee5\u5728\u8fd9\u91cc\u627e\u5230\u6211\u6574\u7406\u8fc7\u7a0b\u4e2d\u5b8c\u6210\u7684\u601d\u7ef4\u5bfc\u56fe\uff0c\u4e0d\u8fc7\u8fd9\u4e2a\u601d\u7ef4\u5bfc\u56fe\u66f4\u591a\u7684\u662f\u63d0\u4f9b\u6846\u67b6\u6027\u7684\u8ba4\u77e5\uff0c\u5177\u4f53\u5230\u6bcf\u4e2a\u53f6\u5b50\u8282\u70b9\u7684\u5185\u5bb9\u5efa\u8bae\u8fd8\u662f\u4ee5\u672c\u6587\u4e3a\u4e3b\u3002\u6b64\u5916\uff0c\u672c\u6587\u5f88\u591a\u89c2\u70b9\u5177\u6709\u6bd4\u8f83\u5f3a\u70c8\u7684\u4e2a\u4eba\u7406\u89e3\u8272\u5f69\uff0c\u5982\u679c\u4f60\u5bf9\u5176\u4e2d\u7684\u8bba\u65ad\u62b1\u6709\u5f02\u8bae\uff0c\u6b22\u8fce\u8ba8\u8bba\uff01

    \u5728\u6b63\u5f0f\u5f00\u59cb\u6838\u5fc3\u5185\u5bb9\u7684\u5b66\u4e60\u4e4b\u524d\uff0c\u6211\u60f3\u5148\u505a\u4e00\u70b9\u8bf4\u660e\uff0c\u4e5f\u7b97\u662f\u4e00\u70b9\u5173\u4e8e\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ecf\u9a8c\u4e4b\u8c08\u3002

    \u201c\u5b9a\u4e49\u4e0d\u5b58\u5728\u4e86\u201d

    \u533a\u522b\u4e8e\u81ea\u7136\u79d1\u5b66\u7684\u7814\u7a76\u5bf9\u8c61\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e00\u4e2a\u5f7b\u5f7b\u5e95\u5e95\u7684\u4eba\u9020\u7269\uff0c\u5176\u5f88\u591a\u6982\u5ff5\u90fd\u5f88\u96be\u754c\u5b9a\u4e00\u4e2a\u660e\u786e\u7684\u754c\u9650\uff0c\u8fd9\u4e5f\u6b63\u662f\u6211\u5728\u5b66\u4e60\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fc7\u7a0b\u4e2d\u9047\u5230\u7684\u6700\u9996\u8981\u7684\u95ee\u9898\u3002\u6211\u4f1a\u5c3d\u529b\u7ed9\u51fa\u6211\u8ba4\u4e3a\u66f4\u7cbe\u786e\u7684\u5b9a\u4e49\uff0c\u4f46\u8fd9\u4e2a\u95ee\u9898\u4ecd\u7136\u5b58\u5728\uff0c\u6240\u4ee5\u6211\u4eec\u5c3d\u91cf\u53ea\u56f4\u7ed5\u5b9a\u4e49\u7684\u4e2d\u5fc3\u8fdb\u884c\u5b66\u4e60\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","title":"\u64cd\u4f5c\u7cfb\u7edf\u6982\u8ff0","text":"

    \u672c\u8282\u4e3b\u8981\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5f53\u4f5c\u4e00\u4e2a\u4e0d\u53ef\u62c6\u5206\u7684\u5355\u4f4d\uff0c\u6765\u8ba8\u8bba\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","title":"\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf","text":"

    \u6574\u95e8\u8bfe\u7a0b\u6211\u4eec\u9700\u8981\u89e3\u51b3\u7684\u7b2c\u4e00\u4e2a\u95ee\u9898\uff0c\u663e\u7136\u662f\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf(Operating System, OS)\u3002\u63a5\u4e0b\u6765\u6211\u5c06\u4ece\u4e24\u4e2a\u65b9\u9762\u7b80\u8ff0\u4f55\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u3002

    \u2460 \u4ece\u804c\u80fd\u4e0a\u770b

    \u4ece\u5176\u804c\u80fd\u4e0a\u770b\uff0c\u6211\u8ba4\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u662f\u4e00\u4e2a\u8d44\u6e90\u7ba1\u7406\u7cfb\u7edf\u3002

    \u53f3\u56fe\u63cf\u8ff0\u4e86\u8ba1\u7b97\u673a\u7cfb\u7edf\u7684\u62bd\u8c61\u5c42\u7ea7\uff1a\u81ea\u4e0a\u800c\u4e0b\uff0c\u7528\u6237\u901a\u8fc7\u5e94\u7528\u7a0b\u5e8f\u89e3\u51b3\u95ee\u9898\uff0c\u5e94\u7528\u7a0b\u5e8f\u5411\u64cd\u4f5c\u7cfb\u7edf\u8bf7\u6c42\u8ba1\u7b97\u673a\u8d44\u6e90\uff1b\u81ea\u4e0b\u800c\u4e0a\uff0c\u8ba1\u7b97\u673a\u786c\u4ef6\u4e3a\u8f6f\u4ef6\uff08\u5305\u62ec OS\uff09\u63d0\u4f9b\u4e86\u7269\u8d28\u57fa\u7840\uff0c\u672c\u8d28\u4e0a\uff0c\u786c\u4ef6\u63d0\u4f9b\u4e86\u8ba1\u7b97\u673a\u8d44\u6e90\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u4f5c\u4e3a\u4e2d\u95f4\u5c42\uff0c\u5411\u4e0a\u4e3a\u7528\u6237\u7a0b\u5e8f\u5206\u914d\u6613\u7528\u7684\u8d44\u6e90\uff0c\u5411\u4e0b\u76f4\u63a5\u64cd\u4f5c\u786c\u4ef6\u8d44\u6e90\u7684\uff0c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u8fd8\u9700\u8981\u516c\u5e73\u3001\u9ad8\u6548\u5730\u89e3\u51b3\u8d44\u6e90\u4e4b\u95f4\u7684\u51b2\u7a81\u95ee\u9898\u7b49\u7b49\u3002

    \u5b83\u5c31\u597d\u50cf\u836f\u623f\u67dc\u53f0\uff0c\u5404\u79cd\u836f\u54c1\u5c31\u597d\u50cf\u8ba1\u7b97\u673a\u8d44\u6e90\uff0c\u75c5\u4eba\u63d0\u4f9b\u5904\u65b9\uff0c\u67dc\u53f0\u6536\u5230\u8bf7\u6c42\uff08\u7cfb\u7edf\u8c03\u7528\uff09\u540e\u5904\u7406\u8bf7\u6c42\uff0c\u5e76\u5343\u8f9b\u4e07\u82e6\uff08\u5177\u4f53\u4f1a\u9047\u5230\u4ec0\u4e48\u95ee\u9898\u6211\u4eec\u4f1a\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u5b66\u5230\uff09\u66ff\u4f60\u51c6\u5907\u597d\u4f60\u9700\u8981\u7684\u8d44\u6e90\uff0c\u5b8c\u6210\u4f60\u7684\u8bf7\u6c42\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7ba1\u7406\u7684\u8d44\u6e90\u6709\u8fd9\u4e9b\uff1a\u2460 CPU\uff0c\u7531\u4e8e CPU \u7684\u4e00\u4e2a\u6838(core)\u5728\u7279\u5b9a\u65f6\u523b\u53ea\u80fd\u5904\u7406\u4e00\u4ef6\u4e8b\uff0c\u6240\u4ee5\u201cCPU \u80fd\u591f\u4e3a\u6211\u6240\u7528\u201d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u8d44\u6e90\uff1b\u2461 \u5185\u5b58\uff0c\u6267\u884c\u7a0b\u5e8f\u79bb\u4e0d\u5f00\u5185\u5b58\uff0c\u7528\u6237\u7a0b\u5e8f\u81ea\u7136\u4e5f\u9700\u8981\u5360\u7528\u4e00\u5b9a\u7684\u5185\u5b58\u6765\u89e3\u51b3\u95ee\u9898\uff1b\u2462 I/O \u8bbe\u5907\uff0c\u6253\u5370\u673a\u4e0d\u80fd\u540c\u65f6\u6253\u5370\u6bdb\u6982\u5386\u5e74\u5377\u548c\u8f6c\u4e13\u4e1a\u7533\u8bf7\u8868\uff1b\u2463\u2026\u2026

    \u7c97\u7565\u7684\u6765\u8bf4\uff0c\u672c\u8bfe\u7a0b\u4e4b\u540e\u7684\u5185\u5bb9\u57fa\u672c\u4e0a\u90fd\u662f\u56f4\u7ed5\u8981\u5982\u4f55\u7ef4\u62a4\u548c\u64cd\u4f5c\u5404\u79cd\u8d44\u6e90\u800c\u5c55\u5f00\u7684\u3002

    \u2461 \u4ece\u5b58\u5728\u4e0a\u770b

    \u4ece\u5176\u5b58\u5728\u6765\u770b\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8d28\u4e0a\u8fd8\u662f\u4e00\u4e2a\u8f6f\u4ef6\u7a0b\u5e8f\uff0c\u662f\u4e00\u4e2a\u4e0d\u505c\u8fd0\u884c\u7740\u7684\uff0c\u7528\u6765\u6267\u884c\u7528\u6237\u7a0b\u5e8f\u7684\u8f6f\u4ef6\u3002\u8fd9\u4e2a\u89d2\u5ea6\u7684\u672c\u8d28\u540c\u65f6\u53cd\u5e94\u4e86\u64cd\u4f5c\u7cfb\u7edf\u6700\u521d\u5b58\u5728\u7684\u76ee\u7684\uff0c\u4e3a\u4e86\u63d0\u9ad8\u8ba1\u7b97\u673a\u8d44\u6e90\u7684\u5229\u7528\u6548\u7387\uff0c\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u7a0b\u5e8f\u6765\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u8fd9\u4ef6\u4e8b\uff0c\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u81ea\u52a8\u5316\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u4e5f\u9700\u8981\u6210\u4e3a\u8ba1\u7b97\u673a\u786c\u4ef6\u7684\u201c\u4ee3\u7406\u4eba\u201d\uff0c\u638c\u63e1\u786c\u4ef6\u7684\u6240\u6709\u8d44\u6e90\uff0c\u5e76\u4e14\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8fd8\u5f97\u60f3\u65b9\u6cd5\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u57fa\u7840\u6700\u4e2d\u592e\u7684\u90e8\u5206\u662f\u5185\u6838(kernel)\uff0c\u8981\u7ed9\u51fa kernel \u7684\u7cbe\u786e\u5b9a\u4e49\u5f88\u96be\uff0c\u8fd9\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u8bbe\u8ba1\u7684\u7ed3\u6784\u6709\u5173\uff08\u53c2\u8003\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\uff09\uff0c\u5b83\u6700\u660e\u663e\u7684\u4e00\u4e2a\u7279\u70b9\u5c31\u662f\u81ea\u8ba1\u7b97\u673a\u5f00\u673a\u540e\u5c31\u4e0d\u505c\u5728\u8fd0\u884c\u3002OS \u548c kernel \u7684\u5173\u7cfb\u5c31\u597d\u50cf\u7b14\u8bb0\u672c\u7535\u8111\u548c\u5b83\u7684\u4e3b\u677f\uff0c\u5982\u679c\u5c06 OS \u4e2d\u7684\u5176\u4ed6\u90e8\u5206\u9664\u53bb\uff0ckernel \u4ecd\u7136\u81ea\u6d3d\uff0c\u4ecd\u7136\u5177\u5907\u5b83\u5e94\u6709\u7684\u5185\u5728\u7684\u529f\u80fd\uff0c\u6bd4\u5982\u5b83\u4ecd\u7136\u5177\u5907\u5bf9\u8d44\u6e90\u8fdb\u884c\u8c03\u5ea6\u7684\u80fd\u529b\uff0c\u53ea\u4e0d\u8fc7\u5b83\u53ef\u80fd\u62ff\u4e0d\u5230\u80fd\u8ba9\u5b83\u8c03\u5ea6\u7684\u8d44\u6e90\u3002\u6211\u5728\u8fd9\u91cc\u907f\u514d\u8c08\u5230 OS \u548c kernel \u7684\u533a\u522b\uff0c\u56e0\u4e3a\u8fd9\u5b9e\u5728\u96be\u4ee5\u8bf4\u6e05\uff0c\u751a\u81f3\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u90fd\u4f1a\u7528 OS \u6765\u4ee3\u66ff kernel \u7684\u6982\u5ff5\u3002

    \u81f3\u6b64\uff0c\u6211\u4eec\u4ece\u4e24\u4e2a\u65b9\u9762\u4e86\u89e3\u4e86\u4ec0\u4e48\u662f\u64cd\u4f5c\u7cfb\u7edf\uff0c\u73b0\u5728\u7528\u4e00\u53e5\u8bfe\u672c\u4e0a\u7684\u8bdd\u6765\u505a\u603b\u7ed3\u3002

    The common functions of controlling and allocating resources are then brought together into one piece of software: the operating system. --Operating System Concepts (10th edition)

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u76ee\u6807","text":"

    \u73b0\u5728\u6211\u4eec\u77e5\u9053\u64cd\u4f5c\u7cfb\u7edf\u662f\u4ec0\u4e48\u4e1c\u897f\u4e86\uff0c\u90a3\u4e48\u5728\u6b64\u57fa\u7840\u4e0a\u6211\u4eec\u6316\u6398\u4e00\u4e0b\uff0c\u600e\u6837\u624d\u7b97\u4e00\u4e2a\u597d\u7684\u64cd\u4f5c\u7cfb\u7edf\uff0c\u4e5f\u5c31\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u65b9\u5411\uff0c\u800c\u5728\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4e5f\u4f1a\u7b80\u5355\u63d0\u53ca\u4e00\u4e9b\u6211\u4eec\u4e4b\u540e\u4f1a\u8bbe\u8ba1\u7684\u5185\u5bb9\uff0c\u4ee5\u4f9b\u53c2\u8003\u3002

    \u9996\u5148\uff0c\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u9700\u8981\u6709\u8f83\u597d\u7684\u53ef\u9760\u6027\u548c\u5b89\u5168\u6027\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u7684\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u8981\u5c3d\u53ef\u80fd\u8ba9\u81ea\u5df1\u597d\u597d\u201c\u6d3b\u7740\u201d\u3002\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u826f\u597d\u7684\u5f02\u5e38\u5904\u7406\u673a\u5236\uff08\u901a\u8fc7#\u4e2d\u65ad\u673a\u5236\u5b9e\u73b0\uff09\uff0c\u8fd9\u4e2a\u201c\u4ee3\u7406\u4eba\u201d\u9700\u8981\u6709\u5f3a\u5065\u7684\u4f53\u9b44\uff0c\u4e0d\u80fd\u4e00\u522e\u98ce\u5b83\u5c31\u75c5\u5012\u4e86\uff1b\u53e6\u4e00\u65b9\u9762\u5b83\u9700\u8981\u6709\u6743\u9650\u7ba1\u7406\u7cfb\u7edf\uff08#\u7279\u6743\u6a21\u5f0f\uff09\uff0c\u4ee5\u5c4f\u853d\u6765\u81ea\u7528\u6237\u7a0b\u5e8f\u7684\u5371\u9669\u884c\u4e3a\uff0c\u7528\u6237\u53ef\u4ee5\u5411\u201c\u67dc\u53f0\u201d\u7d22\u53d6\u6297\u751f\u7d20\uff0c\u4f46\u662f\u7528\u6237\u7d22\u53d6\u5e93\u623f\u94a5\u5319\u65f6\uff0c\u5408\u683c\u7684\u201c\u67dc\u53f0\u201d\u663e\u7136\u4e0d\u80fd\u7b54\u5e94\u8fd9\u4e2a\u8bf7\u6c42\u3002

    \u5176\u6b21\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u6709\u8f83\u597d\u7684\u6613\u7528\u6027\uff0c\u5b83\u9700\u8981\u5411\u7528\u6237\u63d0\u4f9b\u7b80\u4fbf\u7684\u670d\u52a1\u4ee5\u8bf7\u6c42\u7cfb\u7edf\u8d44\u6e90\uff0c\u6bd5\u7adf\u64cd\u4f5c\u7cfb\u7edf\u7684\u76ee\u7684\u4e4b\u4e00\u5c31\u662f\u65b9\u4fbf\u7528\u6237\u4f7f\u7528\u7cfb\u7edf\u8d44\u6e90\u2014\u2014\u8fd9\u610f\u5473\u7740\u6211\u4eec\u7684\u201c\u4ee3\u7406\u4eba\u201d\u5f97\u662f\u4e2a\u597d\u4ea4\u6d41\u7684\u4eba\uff0c\u800c\u7528\u6237\u7a0b\u5e8f\u8c03\u7528\u64cd\u4f5c\u7cfb\u7edf\u8d44\u6e90\u7684\u9014\u5f84\u662f\u7cfb\u7edf\u8c03\u7528\u3002

    \u5bbd\u6cdb\u4e00\u70b9\u6765\u8bb2\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86\u547d\u4ee4\u63a5\u53e3\u548c\u7a0b\u5e8f\u63a5\u53e3\uff0c\u6709\u4e9b\u5730\u65b9\u4e5f\u4f1a\u63d0\u5230\u56fe\u5f62\u7528\u6237\u63a5\u53e3(Graphical User Interface, GUI)\uff0c\u4ee5\u53ca\u547d\u4ee4\u884c\u63a5\u53e3(Command Line Interface, CLI)\uff0c\u4f46\u662f\u6211\u4e2a\u4eba\u4e0d\u662f\u5f88\u559c\u6b22\u8fd9\u4e2a\u5206\u7c7b\u3002

    \u5f53\u7136\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u662f\u9ad8\u6548\u7684\uff0c\u4ece\u6700\u65e9\u7684\u6279\u5904\u7406\u7cfb\u7edf\u5230\u73b0\u5728\u7684\u5206\u65f6\u7cfb\u7edf\uff08#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1\uff09\uff0cCPU \u7684\u5229\u7528\u7387\u5728\u4e0d\u65ad\u63d0\u5347\uff0c\u5468\u8f6c\u65f6\u95f4\u4e5f\u5728\u4e0d\u65ad\u7f29\u77ed\uff0c\u5982\u4eca\u7684\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u5206\u65f6\u6280\u672f\u4e5f\u5b9e\u73b0\u4e86\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u63d0\u9ad8\u6548\u7387\u7684\u540c\u65f6\u4e5f\u63d0\u9ad8\u4e86\u7528\u6237\u4f53\u9a8c\u3002

    \u8fd8\u6709\u4e00\u70b9\u4e0d\u5bb9\u5ffd\u89c6\u7684\u662f\u64cd\u4f5c\u7cfb\u7edf\u7684\uff08\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u7684\uff09\u516c\u5e73\u6027\uff0c\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406\u4e2d\u6211\u4eec\u4f1a\u4e86\u89e3\u5230\uff0c\u591a\u8fdb\u7a0b\u8bed\u5883\u4e0b\u6709\u5927\u91cf\u7684\u51b2\u7a81\u95ee\u9898\u9700\u8981\u89e3\u51b3\uff0c\u800c\u6211\u4eec\u5728\u5904\u7406\u8fd9\u4e9b\u51b2\u7a81\u95ee\u9898\u7684\u65f6\u5019\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u9965\u997f(Starvation)\uff08\u5177\u4f53\u662f\u4ec0\u4e48\u8bf7\u53c2\u8003\u4e0b\u4e00\u5355\u5143\uff09\uff0c\u800c\u64cd\u4f5c\u7cfb\u7edf\u8981\u505a\u7684\u5c31\u662f\u907f\u514d\u9965\u997f\u7684\u51fa\u73b0\uff0c\u5c31\u597d\u50cf\u7e41\u5fd9\u65f6\u6bb5\u7684\u7535\u68af\uff0c\u6211\u4eec\u4e0d\u80fd\u56e0\u4e3a\u4e8c\u697c\u6d41\u91cf\u5f88\u5927\u5c31\u4e0d\u7ba1\u4e09\u697c\u4ee5\u4e0a\u7684\u4eba\u3002

    \u4e0a\u8ff0\u76ee\u6807\u5927\u591a\u662f\u9488\u5bf9\u4f7f\u7528\u8005\u800c\u8a00\u7684\uff0c\u90a3\u4e48\u5bf9\u4e8e\u5f00\u53d1\u8005\u6765\u8bf4\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u53ef\u6269\u5c55\u6027\u3001\u6613\u7ef4\u62a4\u6027\u7b49\u4e5f\u662f\u975e\u5e38\u91cd\u8981\u7684\u3002\u4e0d\u540c\u7684\u8bbe\u8ba1\u601d\u8def\u9020\u5c31\u4e86\u4e0d\u540c\u7684\u64cd\u4f5c\u7cfb\u7edf\u7ed3\u6784\uff0c\u5404\u79cd\u8bbe\u8ba1\u4e5f\u5404\u81ea\u6709\u5404\u81ea\u7684\u4e3b\u6218\u573a\uff0c\u5173\u4e8e\u8fd9\u4e9b\u5185\u5bb9\uff0c\u6211\u4eec\u4f1a\u5728#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1\u8fd9\u4e00\u90e8\u5206\u66f4\u8be6\u7ec6\u5730\u4ecb\u7ecd\u3002

    \u8fd8\u6709\u8bb8\u591a\uff0c\u4f8b\u5982\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bbe\u8ba1\u8981\u5c3d\u53ef\u80fd\u5229\u7528\u786c\u4ef6\u8d44\u6e90\u7b49\uff0c\u4f46\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u8282\u60f3\u8981\u8ba8\u8bba\u7684\u91cd\u70b9\uff0c\u6240\u6709\u5c31\u63a0\u8fc7\u4e86\u3002\u4e0a\u8ff0\u89c2\u70b9\u5e76\u4e0d\u5168\u9762\u4e5f\u4e0d\u4e00\u5b9a\u5b8c\u5168\u6b63\u786e\uff0c\u6709\u4e00\u5927\u90e8\u5206\u90fd\u662f\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0c\u8bf7\u8bfb\u8005\u8fa8\u8bc1\u5730\u770b\u5f85\uff0c\u5982\u679c\u6709\u9519\u8bef\u8bf7\u52a1\u5fc5\u544a\u8bc9\u6211\uff01

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u6574\u4f53\u8bbe\u8ba1","text":"

    \u672c\u8282\u4e3b\u8981\u5c31\u4e00\u4e9b\u5173\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6574\u4f53\u8bbe\u8ba1\u7684\u95ee\u9898\u505a\u4e00\u4e9b\u8ba8\u8bba\uff0c\u4ece\u4e00\u4e2a\u76f8\u5bf9\u6bd4\u8f83\u9ad8\u7684\u89d2\u5ea6\u8c08\u4e00\u8c08\u4e00\u4e9b\u9876\u5c42\u8bbe\u8ba1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","title":"\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784","text":"

    \u867d\u7136\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\u662f\u8f6f\u4ef6\uff0c\u4f46\u662f\u5b83\u6bd5\u7adf\u662f\u4e0e\u786c\u4ef6\u7d27\u5bc6\u5173\u8054\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u4f1a\u6d89\u53ca\u5230\u4e00\u4e9b\u5173\u4e8e\u786c\u4ef6\u7684\u5185\u5bb9\uff0c\u8fd9\u91cc\u7b80\u5355\u6d89\u53ca\u4e00\u4e9b\u5173\u4e8e\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\u7684\u5185\u5bb9\u3002

    \u6982\u5ff5\u8fa8\u6790

    \u540d\u8bcd \u5b9a\u4f4d CPU \u6267\u884c\u6307\u4ee4\u7684\u786c\u4ef6 Core CPU \u7684\u57fa\u7840\u8ba1\u7b97\u5355\u5143 Multi-core \u4e00\u4e2a CPU \u4e0a\u6709\u591a\u4e2a core Processor \u5305\u542b\u4e00\u4e2a\u6216\u591a\u4e2a CPU \u7684\u82af\u7247 Multi-processor \u591a\u4e2a processor

    \u6839\u636e\u5904\u7406\u5668\u7684\u6570\u91cf\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6211\u4eec\u8fd9\u91cc\u4ecb\u7ecd\u4e09\u79cd\u8ba1\u7b97\u673a\u7cfb\u7edf\u67b6\u6784\uff1a\u5355\u5904\u7406\u5668\u7cfb\u7edf\u3001\u591a\u5904\u7406\u5668\u7cfb\u7edf\u3001\u96c6\u7fa4\u7cfb\u7edf\u3002

    \u2460 \u5355\u5904\u7406\u5668\u7cfb\u7edf(Single-Processor System)

    \u4e66\u4e2d\u7ed9\u51fa\u7684\u5173\u4e8e\u5355\u5904\u7406\u5668\u7cfb\u7edf\u7684\u5b9a\u4e49\u662f\uff0c\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u901a\u7528\u5904\u7406\u5668(general-purpose processor)\uff0c\u5e76\u4e14\u8fd9\u4e2a processor \u53ea\u6709\u4e00\u4e2a\u6838(core)\u3002\u4f46\u5b83\u53ef\u4ee5\u6709\u82e5\u5e72\u4e13\u7528\u5904\u7406\u5668(special-purpose processor)\uff0c\u7528\u6765\u6267\u884c\u4e00\u4e9b\u7279\u5b9a\u7684\u6307\u4ee4\uff0c\u800c\u8fd9\u4e9b\u4e13\u7528\u5904\u7406\u5668\u5e76\u4e0d\u8fd0\u884c\u7ebf\u7a0b\u3002

    \u2461 \u591a\u5904\u7406\u5668\u7cfb\u7edf(Multiprocessor System)

    \u591a\u5904\u7406\u5668\u7cfb\u7edf\u662f\u6307\u6709\u591a\u4e2a\u5355\u6838\u901a\u7528\u5904\u7406\u5668\u7684\u7cfb\u7edf\uff0c\u8fd9\u4e9b\u5904\u7406\u5668\u5171\u4eab\u4e00\u5757\u4e3b\u5185\u5b58\uff0c\u5b83\u4eec\u901a\u8fc7\u603b\u7ebf\u6216\u4ea4\u6362\u7f51\u7edc\u8fde\u63a5\u5728\u4e00\u8d77\u3002

    \u663e\u800c\u6613\u89c1\u7684\u662f\uff0c\u589e\u52a0\u4e86\u5904\u7406\u5668\u7684\u6570\u91cf\u80fd\u591f\u589e\u52a0\u541e\u5410\u91cf(throughput)\uff0c\u5373\u5355\u4f4d\u65f6\u95f4\u5185\u5904\u7406\u7684\u4efb\u52a1\u6570\u91cf\uff0c\u4f46\u662f\u8fd9\u4e2a\u589e\u52a0\u5e76\u4e0d\u662f\u7ebf\u6027\u7684\uff0c\u56e0\u4e3a\u5904\u7406\u5668\u4e4b\u95f4\u7684\u901a\u4fe1\u4e5f\u9700\u8981\u65f6\u95f4\uff0c\u800c\u4e14\u8fd8\u4f1a\u6709\u4e00\u4e9b\u989d\u5916\u7684\u5f00\u9500\u3002

    \u76f8\u5173\u9605\u8bfb

    \u4f46\u662f multi-core \u7684\u8bbe\u8ba1\u5728\u901f\u5ea6\u548c\u6548\u80fd\u4e0a\u90fd\u66f4\u80dc\u4e00\u7b79\uff0c\u56e0\u4e3a on-chip \u7684\u901a\u4fe1\u6bd4 between-chip \u7684\u901a\u4fe1\u66f4\u5feb\uff0c\u800c\u4e14\u66f4\u7701\u7535\u3002

    \u2462 \u96c6\u7fa4\u7cfb\u7edf(Cluster System)

    \u96c6\u7fa4\u7cfb\u7edf\u901a\u8fc7\u5197\u4f59\u5b9e\u73b0\u9ad8\u53ef\u7528\u670d\u52a1\uff0c\u901a\u8fc7\u5e76\u884c\u5b9e\u73b0\u9ad8\u6027\u80fd\u8ba1\u7b97\uff0c\u5b83\u662f\u7531\u591a\u4e2a\u5404\u81ea\u72ec\u7acb\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4f5c\u4e3a\u8282\u70b9(node)\uff0c\u901a\u8fc7\u9ad8\u901f\u901a\u4fe1\u7f51\u7edc\u4e92\u76f8\u8fde\u63a5\u5f62\u6210\u7684\u3002

    \u96c6\u7fa4\u4e5f\u5206\u5bf9\u79f0\u548c\u4e0d\u5bf9\u79f0\u4e24\u79cd\uff0c\u5bf9\u79f0\u96c6\u7fa4\u7684\u5404\u4e2a\u8282\u70b9\u4e92\u76f8\u76d1\u7763\uff0c\u800c\u4e0d\u5bf9\u79f0\u7684\u96c6\u7fa4\u5219\u5b58\u5728\u4e00\u79cd\u7c7b\u4f3c\u201c\u66ff\u8865\u201d\u7684\u4e1c\u897f\uff0c\u7531\u201c\u66ff\u8865\u201d\u53bb\u76d1\u7763\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\uff0c\u5f53\u5de5\u4f5c\u4e2d\u7684\u8282\u70b9\u51fa\u73b0\u4e86\u95ee\u9898\uff0c\u5c31\u7531\u201c\u66ff\u8865\u201d\u6765\u63a5\u66ff\u5b83\u7684\u5de5\u4f5c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u4efb\u52a1\u6267\u884c\u8bbe\u8ba1","text":"

    \u524d\u9762\u6211\u4eec\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u88ab\u7528\u6765\u300c\u81ea\u52a8\u5316\u201c\u8ba9\u8ba1\u7b97\u673a\u5b8c\u6210\u4e00\u7cfb\u5217\u7279\u5b9a\u4efb\u52a1\u201d\u300d\u7684\u3002\u4e00\u5f00\u59cb\u8fd9\u4ef6\u4e8b\u6bd4\u8f83\u7b80\u5355\uff0c\u53ea\u9700\u8981\u50cf\u961f\u5217\u4e00\u6837\uff0c\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\u5c31\u884c\uff0c\u4f46\u662f\u6162\u6162\u7684\u968f\u7740\u8ba1\u7b97\u673a\u5e94\u7528\u8303\u56f4\u7684\u6269\u5927\u4ee5\u53ca\u5404\u79cd\u9700\u6c42\u7684\u51fa\u73b0\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u5c31\u4e0d\u592a\u5408\u7406\u4e86\u3002\u6309\u7167\u53d1\u5c55\u9636\u6bb5\u6f14\u8fdb\uff0c\u6211\u4eec\u5212\u5206\u51fa\u4e24\u4e2a\u9636\u6bb5\u4e09\u4e2a\u8bbe\u8ba1\uff1a\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing System)\u3001\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u548c\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

    \u2460 \u6279\u5904\u7406\u7cfb\u7edf\u9636\u6bb5

    \u6700\u65e9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u4efb\u52a1\u90fd\u9700\u8981\u4eba\u5de5\u624b\u52a8\u5e72\u9884\uff0c\u4f46\u662f\u8ba1\u7b97\u673a\u6267\u884c\u4efb\u52a1\u7684\u901f\u5ea6\u4e0e\u4eba\u5de5\u5e72\u9884\u7684\u901f\u5ea6\u76f8\u5dee\u592a\u5927\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u4eba\u5de5\u901f\u5ea6\u4e25\u91cd\u9650\u5236\u4e86\u8ba1\u7b97\u673a\u7684\u5de5\u4f5c\u6548\u7387\uff0c\u4e8e\u662f\u64cd\u4f5c\u7cfb\u7edf\u5f00\u59cb\u51fa\u73b0\uff0c\u5176\u4e2d\u4e00\u4e2a\u6bd4\u8f83\u539f\u59cb\u7684\u5b9e\u73b0\u5c31\u662f\u6279\u5904\u7406\u7cfb\u7edf\u3002\uff08\u4f46\u4e0d\u662f\u6700\u65e9\uff0c\u4e4b\u524d\u8fd8\u6709\u8131\u673a\u5904\u7406\u4e4b\u7c7b\u7684\u4e1c\u897f\u3002\uff09

    \u2776 \u5355\u9053\u6279\u5904\u7406\u9636\u6bb5

    \u6309\u7167\u64cd\u4f5c\u7cfb\u7edf\u53d1\u5c55\u8fdb\u7a0b\uff0c\u6211\u4eec\u9996\u5148\u4ecb\u7ecd\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf(Batch Processing)\u3002

    \u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u6709\u4e24\u4e2a\u5173\u952e\u8bcd\uff0c\u201c\u6279\u5904\u7406\u201d\u548c\u201c\u5355\u9053\u201d\u3002

    \u201c\u6279\u5904\u7406\u201d\u6307\u7684\u662f\uff0c\u7cfb\u7edf\u6267\u884c\u7684\u4efb\u52a1\u662f\u6210\u6279\u7684\uff0c\u82e5\u5e72\u4efb\u52a1\u88ab\u4f5c\u4e3a\u4e00\u6574\u6279\u4ea4\u4ed8\u7ed9\u64cd\u4f5c\u7cfb\u7edf\u3002\u5728\u5177\u4f53\u6267\u884c\u8fc7\u7a0b\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u81ea\u52a8\u6309\u987a\u5e8f\u4e32\u884c(serial)\u6267\u884c\u8fd9\u4e9b\u4efb\u52a1\u3002

    \u800c\u201c\u5355\u9053\u201d\u6307\u7684\u662f\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u53ea\u6709\u4e00\u9053\u7a0b\u5e8f\u5728\u8fd0\u884c\uff0c\u7cfb\u7edf\u53ea\u5904\u7406\u4e00\u9879\u4efb\u52a1\uff0c\u5728\u8fd9\u4e2a\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\uff0c\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u4ed6\u4efb\u52a1\u3002

    \u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u521d\u6b65\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u81ea\u52a8\u5316\u201d\uff0c\u6781\u5927\u51cf\u5c11\u4e86\u4eba\u5de5\u64cd\u4f5c\u901f\u5ea6\u5bf9\u64cd\u4f5c\u7cfb\u7edf\u7684\u5f71\u54cd\u3002\u4f46\u5b83\u5b58\u5728\u4e00\u4e2a\u975e\u5e38\u660e\u663e\u7684\u95ee\u9898\uff1a\u7531\u4e8e\u5f53\u524d\u4efb\u52a1\u7ed3\u675f\u4e4b\u524d\u4e0d\u4f1a\u5207\u6362\u5230\u5176\u5b83\u4efb\u52a1\uff0c\u6240\u4ee5\u5f53\u5f53\u524d\u4efb\u52a1\u51fa\u73b0 I/O \u8bf7\u6c42\u65f6\uff0cCPU \u5c31\u9700\u8981\u7b49\u5f85 I/O \u5b8c\u6210\u3002\u6211\u4eec\u77e5\u9053 I/O \u64cd\u4f5c\u662f\u975e\u5e38\u8017\u65f6\u7684\uff0c\u66f4\u4e25\u91cd\u7684\u662f\u4f8b\u5982\u7b49\u5f85\u952e\u76d8\u8f93\u5165\u8fd9\u79cd\u9700\u8981\u4eba\u5de5\u53c2\u4e0e\u7684 I/O\uff0c\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u6ca1\u6cd5\u907f\u514d\u8fd9\u79cd\u4eba\u5de5\u64cd\u4f5c\u5bf9\u8ba1\u7b97\u673a\u6267\u884c\u6548\u7387\u7684\u5f71\u54cd\uff0c\u8fd9\u5c31\u5bfc\u81f4 CPU \u4f1a\u957f\u65f6\u95f4\u5904\u4e8e\u7a7a\u95f2\u72b6\u6001\uff0c\u800c\u8ba9 CPU \u957f\u65f6\u95f4\u7a7a\u95f2\u8fd9\u4ef6\u4e8b\uff0c\u662f\u4e0d\u88ab\u63a5\u53d7\u7684\u3002

    \u2777 \u591a\u9053\u6279\u5904\u7406\u9636\u6bb5

    \u56e0\u6b64\uff0c\u4e3a\u4e86\u4e0d\u8ba9 CPU \u95f2\u4e0b\u6765\uff0c\u4e00\u4e2a\u7b26\u5408\u76f4\u89c9\u7684\u60f3\u6cd5\u5c31\u662f\u8ba9\u5b83\u5148\u53bb\u505a\u4e0b\u4e00\u4ef6\u4e8b\uff0c\u5c31\u597d\u50cf\u4ed3\u5e93\u6b63\u5728\u6536\u96c6\u4e0a\u4e00\u4e2a\u75c5\u4eba\u6240\u9700\u8981\u7684\u836f\u54c1\u7684\u65f6\u5019\uff0c\u67dc\u53f0\u53ef\u4ee5\u5148\u53bb\u5904\u7406\u4e0b\u4e00\u4e2a\u75c5\u4eba\u7684\u8bf7\u6c42\u3002\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf(Multiprogramming Batch Processing System)\u5e94\u8fd0\u800c\u751f\u3002

    \u4ece\u540d\u5b57\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5389\u5bb3\u5728\u8fd9\u4e2a\u201c\u591a\u9053(Multiprogramming)\u201d\uff0c\u5373\u4e00\u6bb5\u65f6\u95f4\u5185\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5728\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4e2d\uff0c\u5f53\u524d\u4efb\u52a1\u53d1\u751f IO \u8bf7\u6c42\u65f6\uff0cCPU \u8f6c\u800c\u53bb\u6267\u884c\u5176\u5b83\u4efb\u52a1\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u5c3d\u91cf\u8ba9 CPU \u59cb\u7ec8\u5728\u5de5\u4f5c\u72b6\u6001\u3002\u56e0\u6b64\uff0c\u5b8f\u89c2\u4e0a\u6765\u770b\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u5728\u4e00\u6bb5\u65f6\u95f4\u5185\u540c\u65f6\u6267\u884c\u82e5\u5e72\u4efb\u52a1\uff08\u5728\u4efb\u52a1 A \u5b8c\u6210\u4e4b\u524d\u4efb\u52a1 B \u4e5f\u53ef\u80fd\u5f00\u59cb\u4e86\uff09\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u5e76\u53d1(concurrency)\uff08\u6ce8\u610f\uff0c\u5e76\u53d1\u4e0e\u5e76\u884c\u7684\u6982\u5ff5\u5e76\u4e0d\u4e00\u81f41\uff09\uff1b\u4f46\u5728\u5fae\u89c2\u4e0a\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ecd\u7136\u662f\u987a\u5e8f\u4e32\u884c\u7684\uff0c\u53ea\u4e0d\u8fc7\u533a\u522b\u4e8e\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u4ee5\u5b8c\u6574\u7684\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\uff0c\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u662f\u5c06\u5b8c\u6574\u4efb\u52a1\u6309\u7167 I/O \u7684\u53d1\u751f\u505a\u5212\u5206\uff0c\u4ee5\u8fd9\u4e9b\u5212\u5206\u540e\u7684\u90e8\u5206\u4efb\u52a1\u4f5c\u4e3a\u4efb\u52a1\u5355\u5143\u8fdb\u884c\u987a\u5e8f\u4e32\u884c(serial)\u3002

    \u6211\u4eec\u53ef\u4ee5\u7528\u7518\u7279\u56fe\u6765\u53ef\u89c6\u5316\u591a\u9053\u6279\u5904\u7406\u7cfb\u7edf\u7684\u7b56\u7565\uff08\u4e00\u79cd\u5e38\u89c1\u7684\u9898\u578b\uff09\u3002\u4ee5\u4e0b\u9762\u7684\u9898\u76ee\u4e3a\u4f8b\uff0c\u6211\u4eec\u6765\u5b9e\u8df5\u4e00\u4e0b\u3002

    \ud83c\udf30 \u9898\u9762\u89e3\u6790

    \u73b0\u5728\u6709\u4e24\u4e2a\u7a0b\u5e8f A \u548c B\uff0c\u4ee5\u53ca\u4e24\u4e2a\u5206\u522b\u72ec\u7acb\u7684\u8bbe\u5907 X \u548c Y\uff0c\u4e14\u6211\u4eec\u53ea\u6709\u4e00\u4e2a CPU\uff1a

    \u8bf7\u8ba8\u8bba\uff1a

    1. \u5728\u5355\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\u5148\u6267\u884c A \u518d\u6267\u884c B\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f
    2. \u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0cCPU \u7684\u5229\u7528\u7387\u662f\u591a\u5c11\uff1f\u8bf7\u7ed9\u51fa\u7518\u7279\u56fe\u3002

    \u5728\u5355\u9053\u7a0b\u5e8f\u4e0b\u6267\u884c\uff0c\u5373\u6309\u987a\u5e8f\u6267\u884c A \u548c B\uff0cCPU \u7684\u5229\u7528\u7387\u5373\u5b9e\u9645 CPU \u4f7f\u7528\u65f6\u95f4\u9664\u4ee5\u5b8c\u6210\u4efb\u52a1\u7684\u603b\u65f6\u95f4\uff0c\u56e0\u6b64\uff1a

    \\[ U = \\frac{(10+5+10)+(10+5)}{(10+5+5+10+10)+(10+10+5+5+10)} = \\frac{40}{80} = 50\\% \\]

    \u800c\u5728\u591a\u9053\u7a0b\u5e8f\u73af\u5883\u4e0b\uff0c\u6211\u4eec\u5f97\u5230\u5982\u4e0b\u7518\u7279\u56fe\uff1a

    gantt\n    title Multiprogramming\n    dateFormat ss\n    axisFormat %S\n\n    section Program A\n    CPU :a,  00,  10\n    X   :b,  10,  15\n    CPU :c,  20,  25\n    Y   :d,  25,  35\n    CPU :e,  35,  45\n\n    section Program B\n    X   :g,  00,  10\n    CPU :h,  10,  20\n    Y   :i,  20,  25\n    CPU :j,  25,  30\n    Y   :k,  35,  45

    \u7531\u4e8e Mermaid \u7684\u9650\u5236\uff0c\u6211\u73b0\u5728\u662f\u628a\u6bcf\u4e2a\u7a0b\u5e8f\u7684\u4efb\u52a1\u9519\u5f00\u753b\u7684\uff0c\u5b9e\u9645\u4e0a\u505a\u9898\u7684\u65f6\u5019\u53ef\u4ee5\u76f4\u63a5\u753b\u6210\u4e24\u884c\u3002

    \u8981\u70b9\u5c31\u662f\u7eb5\u5411\u4e0d\u80fd\u540c\u65f6\u51fa\u73b0\u540c\u4e00\u4e2a\u8d44\u6e90\uff0c\u4f8b\u5982 18s \u65f6\u4e0d\u80fd A \u548c B \u90fd\u7528 CPU\uff0c\u6240\u4ee5 A \u9700\u8981\u7b49 B \u7528\u5b8c CPU \u518d\u4f7f\u7528\u3002

    \u73b0\u5728\u6211\u4eec\u518d\u6765\u7edf\u8ba1 CPU \u7684\u5229\u7528\u7387\uff1a

    \\[ U = \\frac{10+10+5+5+10}{45} = \\frac{40}{45} = 88.89\\% \\]

    \u901a\u8fc7\u8fd9\u9053\u9898\u6211\u4eec\u4e5f\u53ef\u4ee5\u53d1\u73b0\uff0c\u591a\u9053\u7a0b\u5e8f\u8bbe\u8ba1\u6280\u672f\u5bf9 CPU \u5229\u7528\u7387\u7684\u63d0\u5347\u6709\u591a\u9ad8\uff0c\u540c\u65f6\u4e5f\u53ef\u4ee5\u4ece\u8ba1\u7b97\u8fc7\u7a0b\u4e2d\u7684\u5206\u6bcd\u770b\u51fa\u5176\u5bf9\u7a0b\u5e8f\u541e\u5410\u91cf\u7684\u63d0\u5347\u6709\u591a\u9ad8\u3002

    \u591a\u9053\u6279\u5904\u7406\u89e3\u51b3\u4e86\u5355\u9053\u6279\u5904\u7406\u7cfb\u7edf\u53ef\u80fd\u8ba9 CPU \u95f2\u7f6e\u4e0b\u6765\u7684\u95ee\u9898\uff08\u5f53\u7136\u524d\u63d0\u662f\u6709\u4efb\u52a1\u8ba9\u5b83\u505a\uff09\uff0c\u63d0\u9ad8\u4e86 CPU \u7b49\u8d44\u6e90\u7684\u5229\u7528\u7387\uff0c\u589e\u52a0\u4e86\u541e\u5410\u91cf\uff0c\u4f46\u662f\u7531\u4e8e\u6d89\u53ca\u5230\u4e86\u8fdb\u7a0b\u7684\u5207\u6362\u95ee\u9898\uff0c\u6240\u4ee5\u5b9e\u9645\u5b9e\u73b0\u4f1a\u590d\u6742\u5f88\u591a\u3002\u5177\u4f53\u7684\u5185\u5bb9\u6211\u4eec\u4f1a\u5728 Unit 1: \u8fdb\u7a0b\u7ba1\u7406 \u4e2d\u8be6\u7ec6\u4ecb\u7ecd\u3002

    \u4f46\u662f\u65e0\u8bba\u5355\u9053\u8fd8\u662f\u591a\u9053\uff0c\u6279\u5904\u7406\u7cfb\u7edf\u5e76\u4e0d\u9002\u5408\u4f5c\u4e3a\u73b0\u4ee3\u8ba1\u7b97\u673a\u7cfb\u7edf\uff0c\u5176\u4e2d\u4e00\u4e2a\u6700\u5927\u7684\u95ee\u9898\u5c31\u662f\u5b83\u7684\u4ea4\u4e92\u6027\u975e\u5e38\u5dee\u3002\u7528\u6237\u7ed9\u5b9a\u4e00\u5b9a\u6279\u6b21\u7684\u4efb\u52a1\uff0c\u7136\u540e\u7cfb\u7edf\u4f1a\u81ea\u52a8\u8c03\u6574\u8fd9\u4e00\u6279\u4efb\u52a1\u7684\u6267\u884c\u987a\u5e8f\uff0c\u6700\u7ec8\u5b8c\u6210\u8fd9\u6279\u4efb\u52a1\uff0c\u7136\u800c\u5728\u8fd9\u6bb5\u65f6\u95f4\u91cc\uff0c\u7528\u6237\u5c31\u6ca1\u6cd5\u518d\u7528\u8ba1\u7b97\u673a\u505a\u5176\u5b83\u4e8b\u60c5\u4e86\uff0c\u540c\u65f6\u4f60\u4e5f\u6ca1\u6cd5\u63a7\u5236\u6b63\u5728\u6267\u884c\u7684\u4efb\u52a1\uff0c\u8fd9\u5bf9\u73b0\u4ee3\u8ba1\u7b97\u673a\u6765\u8bf4\u662f\u4e0d\u53ef\u60f3\u8c61\u7684\u3002

    \uff08\u5047\u8bbe\u6211\u4eec\u5ffd\u7565\u5173\u4e8e\u5c4f\u5e55\u663e\u793a\u7684 I/O\uff09\u8bd5\u60f3\uff0c\u4f60\u5e0c\u671b\u5728\u8dd1\u7a0b\u5e8f\u7684\u65f6\u5019\u653e\u4e00\u4e2a\u89c6\u9891\uff0c\u4f46\u662f\u7531\u4e8e\u4f60\u7684\u7a0b\u5e8f\u8fd8\u6ca1\u8dd1\u5b8c\uff0c\u4f60\u7684\u89c6\u9891\u5c31\u6ca1\u6cd5\u64ad\u653e\uff0c\u7a81\u7136\u4f60\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u4e00\u6b21 I/O\uff0cCPU \u8f6c\u800c\u64ad\u653e\u5df2\u7ecf\u5b8c\u6210 I/O \u540e\u7684\u90a3\u90e8\u5206\u89c6\u9891\uff0c\u4f46\u662f\u8fd9\u4e2a\u65f6\u5019\u4f60\u7684\u7a0b\u5e8f I/O \u5f88\u5feb\u4e5f\u5b8c\u6210\u4e86\uff0c\u5374\u9700\u8981\u7b49\u5f85\u7f13\u5b58\u4e2d\u7684\u89c6\u9891\u653e\u5b8c\u624d\u80fd\u7ee7\u7eed\u6267\u884c\uff0c\u8fd9\u79cd\u7528\u6237\u4f53\u9a8c\u51e0\u4e4e\u65e0\u6cd5\u63a5\u53d7\u3002

    \u5bf9\u4e8e\u7528\u6237\u6765\u8bf4\uff0c\u6700\u597d\u80fd\u540c\u65f6\u5b9e\u73b0\u4f53\u611f\u4e0a\u7684\u5e76\u884c\uff0c\u4e5f\u5c31\u662f\u51e0\u4ef6\u4e8b\u60c5\u81f3\u5c11\u770b\u8d77\u6765\u8981\u50cf\u662f\u540c\u65f6\u53d1\u751f\u7684\uff0c\u4e8e\u662f\u51fa\u73b0\u4e86\u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u3002

    \u2461 \u5206\u65f6\u7cfb\u7edf\u9636\u6bb5

    \u5206\u65f6\u7cfb\u7edf(Time Sharing Systems)\u662f\u591a\u4efb\u52a1(Multitasking)\u7684\u4e00\u4e2a\u5177\u4f53\u5b9e\u73b0\uff0c\u800c Multitasking \u662f Multiprogramming \u7684\u4e00\u4e2a\u903b\u8f91\u6269\u5c55\uff0c\u5373 Multitasking \u4e5f\u662f Multiprogramming \u7684\u4e00\u79cd\uff0c\u5b83\u7b26\u5408\u5185\u5b58\u4e2d\u6709\u591a\u4e2a\u8fdb\u7a0b\uff0c\u4e00\u6bb5\u65f6\u95f4\u5185\u6709\u591a\u4e2a\u4efb\u52a1\u4e00\u8d77\u6267\u884c\u7684\u7279\u70b9\u3002

    \u5206\u65f6\u7cfb\u7edf\u901a\u8fc7\u9891\u7e41\u5730\u5728\u591a\u4e2a\u8fdb\u7a0b\u95f4\u5207\u6362\u6765\u8fd1\u4f3c\u5b9e\u73b0\u5e76\u884c\uff08\u5e76\u4e0d\u662f\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\uff0c\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5e76\u884c\u9700\u8981\u901a\u8fc7\u591a\u6838/\u591a\u5904\u7406\u5668\u5b9e\u73b0\uff09\u3002\u5177\u4f53\u6765\u8bf4\u662f\u6309\u7167\u65f6\u95f4\u7247(time slice)\uff0c\u8f6e\u6d41\u5c06 CPU \u5206\u914d\u7ed9\u5404\u4e2a\u8fdb\u7a0b\uff0c\u8fd9\u6837\u53ea\u8981\u65f6\u95f4\u7247\u8db3\u591f\u77ed\uff0c\u7528\u6237\u4f53\u611f\u4e0a\u5c31\u50cf\u662f\u591a\u4e2a\u4efb\u52a1\u5e76\u884c\u6267\u884c\u3002

    \u611f\u89c9\u6bd4\u8f83\u50cf\u300a\u5341\u4e07\u4e2a\u51b7\u7b11\u8bdd\u300b\u8d85\u4eba\u8fd9\u4e00\u96c6\u7684 4:09 - 4:48\u3002

    \u5206\u65f6\u7528\u6237\u5141\u8bb8\u591a\u4e2a\u7528\u6237\u540c\u65f6\u4f7f\u7528\u540c\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u6240\u6709\u4efb\u52a1\u4e4b\u95f4\u4e92\u76f8\u72ec\u7acb\uff0c\u4e92\u4e0d\u5e72\u6270\u3001\u4e92\u4e0d\u963b\u585e\uff0c\u56e0\u6b64\u4efb\u52a1\u7684\u6700\u957f\u5468\u8f6c\u65f6\u95f4\u51cf\u5c11\uff0c\u7528\u6237\u7684\u64cd\u4f5c\u4e5f\u4f1a\u88ab\u53ca\u65f6\u54cd\u5e94\uff0c\u5b9e\u73b0\u4e86\u66f4\u65b9\u4fbf\u8fdb\u884c\u4eba\u673a\u5bf9\u8bdd\u3002

    \u76f8\u5173\u9605\u8bfb

    \u5173\u4e8e\u8fd9\u4e09\u4e2a\u6280\u672f\u7684\u8bf4\u660e\u4e5f\u53ef\u4ee5\u770b\u770b xyx \u662f\u600e\u4e48\u5199\u7684\uff1a\ud83d\udd17

    \u9664\u4e86\u8fd9\u51e0\u79cd\u7cfb\u7edf\u5916\uff0c\u738b\u9053\u91cc\u4e5f\u63d0\u5230\u4e86\u8fd9\u4e9b\u7cfb\u7edf\uff1a

    \u591a\u9053\u6280\u672f\u51fa\u73b0\u4e4b\u540e\uff0c\u867d\u7136\u8ba1\u7b97\u673a\u7684\u8868\u73b0\u4e0d\u65ad\u63d0\u5347\uff0c\u4f46\u662f\u591a\u9053\u6280\u672f\u672c\u8eab\u7684\u6280\u672f\u7279\u70b9\uff0c\u5404\u4e2a\u8fdb\u7a0b\u5728\u672a\u5b8c\u6210\u7684\u60c5\u51b5\u4e0b\u9700\u8981\u4e92\u76f8\u5207\u6362\uff0c\u4e00\u7cfb\u5217\u95ee\u9898\u63a5\u8e35\u800c\u6765\uff0c\u8fd9\u4e9b\u90fd\u662f\u6211\u4eec\u5728\u4e4b\u540e\u7684\u5355\u5143\u91cc\u8be6\u7ec6\u8ba8\u8bba\u7684\u5185\u5bb9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ed3\u6784\u8bbe\u8ba1","text":"

    \u968f\u7740\u64cd\u4f5c\u7cfb\u7edf\u7684\u529f\u80fd\u4e0d\u65ad\u6269\u5c55\u3001\u4f53\u91cf\u9010\u6e10\u53d8\u5927\uff0c\u6574\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u7684\u7ed3\u6784\u8bbe\u8ba1\u5c31\u8d8a\u53d1\u91cd\u8981\u4e86\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u8bbe\u8ba1\u601d\u8def\u3002

    \u5b8f\u5185\u6838

    \u5b8f\u5185\u6838(Monolithic-Kernels)\u4e5f\u53eb\u5355\u5185\u6838\u6216\u5927\u5185\u6838\uff0c\u5b83\u7684\u6838\u5fc3\u601d\u60f3\u5341\u5206\u7b80\u5355\u7c97\u66b4\uff0c\u5c06\u6240\u6709\u4e3b\u8981\u529f\u80fd\u90fd\u7d27\u5bc6\u8026\u5408\u5728\u4e00\u8d77\u4f5c\u4e3a\u4e00\u4e2a\u5b8c\u6574\u7684\u6574\u4f53\u3002

    \u5b8f\u5185\u6838\u5e26\u6765\u7684\u597d\u5904\u662f\u64cd\u4f5c\u7cfb\u7edf\u6548\u7387\u6781\u9ad8\uff0c\u4ece\u64cd\u4f5c\u7cfb\u7edf\u7684\u53d1\u5c55\u5386\u7a0b\u6765\u770b\uff0c\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u90fd\u662f\u4ece\u5b8f\u5185\u6838\u53d1\u5c55\u8fc7\u6765\u7684\uff08\u4e0d\u8fc7\u5982\u4eca\u7684\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u66f4\u504f\u5411\u6df7\u5408\u7cfb\u7edf\uff09\u3002

    \u4f46\u662f\u5b8f\u5185\u6838\u7684\u7f3a\u70b9\u4e5f\u662f\u5341\u5206\u660e\u663e\u7684\uff0c\u5927\u91cf\u590d\u6742\u7684\u529f\u80fd\u4e92\u76f8\u8026\u5408\uff0c\u5bfc\u81f4\u64cd\u4f5c\u7cfb\u7edf\u7684\u7ef4\u62a4\u5341\u5206\u56f0\u96be\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u4e00\u65e6\u67d0\u4e2a\u90e8\u5206\u51fa\u73b0\u4e86\u4e25\u91cd\u95ee\u9898\uff0c\u6574\u4e2a\u7cfb\u7edf\u90fd\u4f1a\u53d7\u5230\u5f71\u54cd\uff0c\u5728\u8fd9\u65b9\u9762\uff0c\u5b8f\u5185\u6838\u7684\u8868\u73b0\u90fd\u4e0d\u5982\u5fae\u5185\u6838\u3002

    \u5206\u5c42\u8bbe\u8ba1

    \u5206\u5c42\u8bbe\u8ba1(layer approach)\u7684\u6838\u5fc3\u601d\u60f3\u662f\u5c06\u7cfb\u7edf\u5206\u4e3a\u82e5\u5e72\u5c42\uff0c\u5e95\u5c42\u4e3a\u786c\u4ef6\uff0c\u9876\u5c42\u4e3a\u7528\u6237\u63a5\u53e3\uff0c\u7b2c \\(i\\) \u5c42\u53ea\u8c03\u7528 \\(i-1\\) \u5c42\u63d0\u4f9b\u7684\u63a5\u53e3\u3002\u6bcf\u4e00\u5c42\u90fd\u5b9e\u73b0\u826f\u597d\u7684\u5c01\u88c5\uff0c\u4e8e\u662f\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u53ea\u9700\u8981\u9010\u6b65\u5b9e\u73b0\u5e76\u8c03\u8bd5\u9a8c\u8bc1\u6bcf\u4e00\u5c42\uff0c\u518d\u9010\u7ea7\u5411\u4e0a\u5f00\u53d1\u5373\u53ef\uff1b\u5728\u7ef4\u62a4\u6216\u6269\u5c55\u8fc7\u7a0b\u4e2d\uff0c\u53ea\u8981\u4fee\u6539\u6bcf\u4e00\u5c42\u7684\u5185\u90e8\u5b9e\u73b0\uff0c\u800c\u4e0d\u9700\u8981\u4fee\u6539\u5176\u5b83\u5c42\u7684\u4ee3\u7801\uff0c\u8fd9\u6837\u5c31\u5927\u5927\u964d\u4f4e\u4e86\u5f00\u53d1\u548c\u7ef4\u62a4\u7684\u96be\u5ea6\u3002

    \u7136\u800c\uff0c\u7531\u4e8e\u6bcf\u6b21\u6267\u884c\u4e00\u4e2a\u529f\u80fd\u90fd\u9700\u8981\u4e0a\u4e0b\u8de8\u8d8a\u591a\u5c42\uff0c\u53d1\u751f\u591a\u6b21\u63a5\u53e3\u8c03\u7528\uff0c\u5206\u5c42\u8bbe\u8ba1\u4e0b\u7684\u7cfb\u7edf\u6548\u7387\u5f80\u5f80\u90fd\u53d7\u5230\u9650\u5236\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8981\u60f3\u771f\u6b63\u610f\u4e49\u4e0a\u5b9e\u73b0\u826f\u597d\u7684\u5206\u5c42\u8bbe\u8ba1\uff0c\u5c31\u9700\u8981\u5bf9\u5404\u5c42\u6709\u826f\u597d\u7684\u5b9a\u4e49\uff0c\u8fd9\u4e2a\u8bbe\u8ba1\u96be\u5ea6\u662f\u4e0d\u5c0f\u7684\u3002

    \u5fae\u5185\u6838

    \u5fae\u5185\u6838(Micro-Kernels)\u7684\u8bbe\u8ba1\u601d\u8def\u4e0e\u5b8f\u5185\u6838\u76f8\u53cd\uff0c\u4e3b\u5f20\u5c06\u4e0d\u662f\u5fc5\u8981\u7684\u4e1c\u897f\u90fd\u4ece\u5185\u6838\u91cc\u62ff\u51fa\u53bb\uff0c\u653e\u5230\u7528\u6237\u7a7a\u95f4\uff0c\u4ee5\u7528\u6237\u6001\u6267\u884c\u3002\u6574\u4f53\u5f62\u6210\u4e00\u79cd\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\uff0c\u6b64\u65f6\u5185\u6838\u53ea\u63d0\u4f9b\u901a\u8baf\u3001\u5185\u5b58\u7ba1\u7406\u3001\u8fdb\u7a0b\u7ba1\u7406\u7b49\u57fa\u672c\u529f\u80fd\uff0c\u4e5f\u53ea\u6709\u8fd9\u4e9b\u90e8\u5206\u76f4\u63a5\u8fd0\u884c\u5728\u5185\u6838\u6001\uff0c\u4f5c\u4e3a\u670d\u52a1\u5668\u7684\u5176\u5b83\u529f\u80fd\u90e8\u4ef6\u5219\u901a\u8fc7\u6d88\u606f\u4f20\u9012\u673a\u5236\u4e0e\u5185\u6838\u4e92\u52a8\u3002

    \u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u4f53\u79ef\u4f1a\u5927\u5927\u51cf\u5c0f\uff0c\u5185\u6838\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u4e5f\u4f1a\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\uff0c\u5fae\u5185\u6838-\u670d\u52a1\u5668\u7684\u7ed3\u6784\u4e5f\u4f7f\u529f\u80fd\u6269\u5c55\u66f4\u52a0\u5bb9\u6613\uff1b\u53e6\u5916\uff0c\u7531\u4e8e\u5185\u6838\u53ea\u63d0\u4f9b\u6700\u57fa\u672c\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u5185\u6838\u7684\u6548\u7387\u4e5f\u4f1a\u5927\u5927\u63d0\u5347\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u5404\u4e2a\u529f\u80fd\u4e4b\u95f4\u7684\u8026\u5408\u964d\u4f4e\uff0c\u4e14\u90fd\u8fd0\u884c\u5728\u7528\u6237\u6001\uff0c\u529f\u80fd\u4e4b\u95f4\u4ec5\u4f7f\u7528\u901a\u4fe1\u5efa\u7acb\u94fe\u63a5\uff0c\u5373\u4f7f\u67d0\u4e2a\u529f\u80fd\u90e8\u4ef6\u51fa\u73b0\u95ee\u9898\uff0c\u4e5f\u4e0d\u4f1a\u5bfc\u81f4\u6574\u4e2a\u7cfb\u7edf\u5d29\u6e83\uff0c\u76f8\u6bd4\u4e8e\u5b8f\u5185\u6838\uff0c\u7cfb\u7edf\u53ef\u9760\u6027\u5927\u5927\u63d0\u5347\u3002

    \u6a21\u5757\u5316\u8bbe\u8ba1

    \u6a21\u5757\u5316\u8bbe\u8ba1(Modules Approach)\u6307\u5c06\u64cd\u4f5c\u7cfb\u7edf\u5212\u5206\u4e3a\u82e5\u5e72\u5206\u7acb\u6a21\u5757\uff0c\u5e76\u89c4\u5b9a\u6a21\u5757\u4e4b\u95f4\u7684\u63a5\u53e3\uff0c\u751a\u81f3\u5355\u4e2a\u6a21\u5757\u4e0b\u4e5f\u53ef\u80fd\u662f\u7531\u591a\u4e2a\u6a21\u5757\u901a\u8fc7\u540c\u6837\u7684\u65b9\u5f0f\u7ec4\u7ec7\u800c\u6210\u7684\u3002\u8fd9\u79cd\u8bbe\u8ba1\u65b9\u6cd5\u4e5f\u88ab\u79f0\u4e3a\u6a21\u5757-\u63a5\u53e3\u6cd5\u3002

    \u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u4e0e\u5fae\u5185\u6838\u662f\u4e0d\u540c\u7684\uff0c\u9700\u8981\u6ce8\u610f\u533a\u5206\u3002\u5fae\u5185\u6838\u8bbe\u8ba1\u4ecd\u7136\u662f\u6709\u4e2d\u5fc3\uff08\u5fae\u5185\u6838\uff09\u7684\uff0c\u4f46\u662f\u6a21\u5757\u5316\u8bbe\u8ba1\u6574\u4f53\u662f\u5206\u5c42\u7f51\u72b6\u7684\u3002

    \u7406\u60f3\u7684\u6a21\u5757\u5316\u8bbe\u8ba1\u4f1a\u8ba9\u7cfb\u7edf\u8bbe\u8ba1\u53ef\u4ee5\u591a\u7ebf\u5e76\u884c\uff0c\u53ea\u9700\u8981\u4e8b\u5148\u5546\u91cf\u597d\u63a5\u53e3\uff0c\u5404\u4e2a\u5de5\u7a0b\u5e08\u5c31\u53ef\u4ee5\u72ec\u7acb\u5730\u5b9e\u73b0\u3001\u586b\u5145\u6a21\u5757\u5185\u5bb9\uff1b\u9ad8\u5185\u805a\u4f4e\u8026\u5408\u7684\u8bbe\u8ba1\u4e5f\u80fd\u8ba9\u7cfb\u7edf\u7684\u7ef4\u62a4\u548c\u6269\u5c55\u53d8\u5f97\u66f4\u52a0\u5bb9\u6613\u3002

    \u7136\u800c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5341\u5206\u56f0\u96be\uff0c\u6a21\u5757\u5316\u7684\u8bbe\u8ba1\u5e76\u6ca1\u6709\u4e00\u4e2a\u6e05\u6670\u7684\u5355\u5411\u4f9d\u8d56\u5173\u7cfb\uff0c\u56e0\u6b64\u65e0\u6cd5\u9012\u8fdb\u5f0f\u7684\u63a8\u8fdb\u4efb\u52a1\uff0c\u6574\u4e2a\u5f00\u53d1\u8fc7\u7a0b\u5c31\u597d\u50cf\u59cb\u7ec8\u60ac\u5728\u534a\u7a7a\uff1b\u9664\u6b64\u4e4b\u5916\uff0c\u5982\u4f55\u8bbe\u8ba1\u63a5\u53e3\u4f7f\u5f97\u6240\u6709\u9700\u6c42\u90fd\u80fd\u88ab\u5f88\u597d\u6ee1\u8db3\u4e5f\u662f\u4e2a\u96be\u4ee5\u89e3\u51b3\u7684\u95ee\u9898\u3002

    \u6df7\u5408\u7cfb\u7edf

    \u6df7\u5408\u7cfb\u7edf(Hybrid Systems)\u662f\u6307\u5c06\u5b8f\u5185\u6838\u548c\u5fae\u5185\u6838\u7684\u8bbe\u8ba1\u601d\u8def\u7ed3\u5408\u8d77\u6765\uff0c\u8fd9\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u66f4\u73b0\u4ee3\uff0c\u4e5f\u662f\u76ee\u524d\u4e3b\u6d41\u7684\u64cd\u4f5c\u7cfb\u7edf\u7684\u6a21\u5f0f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","title":"\u64cd\u4f5c\u7cfb\u7edf\u7684\u8fd0\u884c\u539f\u7406","text":"

    \u672c\u8282\u6211\u4eec\u6df1\u5165\u5230\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e9b\u5177\u4f53\u8fd0\u884c\u8fc7\u7a0b\uff0c\u63a2\u7a76\u4e00\u4e9b\u6b65\u9aa4\u7684\u5177\u4f53\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u4e2d\u65ad","title":"\u4e2d\u65ad","text":"

    \u4e2d\u65ad\uff08\u5e7f\u4e49\uff09\u662f\u8d2f\u7a7f\u73b0\u4ee3\u64cd\u4f5c\u7cfb\u7edf\u7684\u4e00\u4e2a\u91cd\u8981\u6280\u672f\uff0c\u5b83\u4f7f\u5f97\u201c\u8ba1\u5212\u4e4b\u5916\u201d\u7684\u4e8b\u60c5\u53ef\u4ee5\u53ca\u65f6\u7684\u88ab\u544a\u77e5\u5e76\u5904\u7406\u3002\u4f8b\u5982\uff0c\u7a0b\u5e8f\u7a81\u7136\u51fa\u73b0\u4e86\u81f4\u547d\u9519\u8bef\uff0c\u8fd9\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5e94\u8be5\u53ca\u65f6\u5bdf\u89c9\u5e76\u5904\u7406\uff1b\u53c8\u6bd4\u5982\uff0c\u7528\u6237\u5728\u547d\u4ee4\u884c\u8f93\u5165\u4e86\u6307\u4ee4\uff0c\u6309\u4e0b\u4e86\u56de\u8f66\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5e94\u5f53\u5bdf\u89c9\u5230 I/O \u5df2\u7ecf\u51c6\u5907\u597d\u4e86\u3002\u4f46\u662f\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e0d\u538c\u5176\u70e6\u5730\u8be2\u95ee\u4f60\u6709\u6ca1\u6709\u53d1\u751f\u9519\u8bef\uff0c\u53c8\u6216\u8005\u8fd9\u4e2a I/O \u662f\u5426\u5c31\u7eea\uff0c\u8fd9\u5f88\u4e0d\u5408\u7406\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u6211\u4eec\u4e0d\u5e94\u5f53\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4e8b\u65e0\u5de8\u7ec6\u5730\u53bb\u8d1f\u8d23\u68c0\u67e5\u610f\u5916\u662f\u5426\u53d1\u751f\uff0c\u800c\u662f\u5e94\u5f53\u63d0\u4f9b\u4e00\u4e2a\u4e0a\u62a5\u610f\u5916\u7684\u63a5\u53e3\uff0c\u8ba9\u4ea7\u751f\u610f\u5916\u7684\u4eba\u81ea\u884c\u4e0a\u62a5\u8fd9\u4e9b\u610f\u5916\u3002\u5728\u5177\u4f53\u786c\u4ef6\u7684\u5b9e\u73b0\u4e0a\uff0c\u4f1a\u6709\u4e24\u6761\u4e13\u95e8\u8868\u793a\u4e2d\u65ad\u4fe1\u53f7\u7684\u7ebf\uff08\u7a0d\u5019\u4f1a\u5728\u4e2d\u65ad\u5c4f\u853d\u4e2d\u8bb2\u5230\uff09\uff0cCPU \u4f1a\u5728\u6bcf\u4e00\u6761\u6307\u4ee4\u7ed3\u675f\u540e\u68c0\u6d4b\u662f\u5426\u6709\u4e2d\u65ad\u53d1\u751f\uff0c\u800c\u5728\u8f6f\u4ef6\u4e0a\u5c31\u4f53\u73b0\u4e3a\u6bcf\u5f53\u6709\u4e2d\u65ad\u53d1\u751f\u65f6\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5c31\u9700\u8981\u53bb\u5904\u7406\u3002\u7531\u4e8e\u4e2d\u65ad\u7684\u5f3a\u5927\u7279\u6027\uff0c\u4ece\u6700\u65e9\u4ec5\u7684\u5904\u7406\u786c\u4ef6\u72b6\u6001\uff0c\u5230\u5904\u7406\u8f6f\u4ef6\u9519\u8bef\u548c\u4f5c\u4e3a\u4e00\u79cd\u7c7b\u4f3c\u51fd\u6570\u7684\u624b\u6bb5\uff0c\u4e2d\u65ad\u7684\u5e94\u7528\u8303\u56f4\u8d8a\u6765\u8d8a\u5e7f\uff0c\u5b83\u7684\u6982\u5ff5\u968f\u7740\u5e94\u7528\u8303\u56f4\u4e5f\u4e0d\u65ad\u6269\u5927\u3002

    \u4e2d\u65ad\u5411\u91cf\u8868

    \u7531\u4e8e\u4e2d\u65ad\u88ab\u5e7f\u6cdb\u4f7f\u7528\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u9891\u7e41\u7684\u5904\u7406\u5404\u79cd\u4e2d\u65ad\uff0c\u5904\u7406\u6bcf\u4e00\u79cd\u4e2d\u65ad\u90fd\u9700\u8981\u4e00\u4e2a\u7279\u5b9a\u7684\u65b9\u6cd5\uff0c\u56e0\u6b64\uff0c\u4e00\u79cd\u5feb\u901f\u5b9a\u4f4d\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\u7684\u624b\u6bb5\u5c31\u663e\u5f97\u5c24\u4e3a\u91cd\u8981\u3002

    \u4e2d\u65ad\u5411\u91cf\u8868(Interrupt Vector Table)\u901a\u8fc7\u4e2d\u65ad\u53f7\u6765\u7d22\u5f15\u4e2d\u65ad\u5904\u7406\u65b9\u6cd5\uff0c\u5b9e\u73b0\u4e86\u4e00\u79cd\u201c\u968f\u673a\u8bbf\u95ee\u201d\uff0c\u5927\u5927\u52a0\u901f\u4e86\u4e2d\u65ad\u5904\u7406\u7684\u901f\u5ea6\u3002

    \u6839\u636e\u4e2d\u65ad\u662f\u5426\u7531\u7a0b\u5e8f\u4ea7\u751f\uff0c\u4e2d\u65ad\u53ef\u4ee5\u5206\u4e3a\u5916\u4e2d\u65ad\uff08\u72ed\u4e49\u7684\u4e2d\u65ad\uff0c\u7531\u786c\u4ef6\u4ea7\u751f\uff09\u548c\u5185\u4e2d\u65ad\uff08\u5f02\u5e38...\uff0c\u4e3b\u8981\u7531\u7a0b\u5e8f\u4ea7\u751f\uff09\u3002\u8fd9\u91cc\u6709\u5f88\u591a\u6982\u5ff5\uff1ainstruction, exception, trap, abort, ...\uff0c\u8fd9\u90e8\u5206\u533a\u5206\u8bf7\u5927\u5bb6\u81ea\u884c\u5bfb\u627e\u8d44\u6599\u53c2\u8003\uff0c\u6211\u5728\u8fd9\u91cc\u653e\u51e0\u4e2a\u53c2\u8003\u94fe\u63a5\u3002

    \u76f8\u5173\u9605\u8bfb

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e2d\u65ad\u4e00\u65e6\u53d1\u751f\u5c31\u7acb\u523b\u88ab\u89e3\u51b3\uff0c\u4f46\u662f\u4e2d\u65ad\u5904\u7406\u4e5f\u540c\u6837\u9700\u8981\u8d44\u6e90\uff0c\u8fd9\u610f\u5473\u7740\u4e2d\u65ad\u4e5f\u6709\u53ef\u80fd\u4ea7\u751f\u51b2\u7a81\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u9700\u8981\u4e00\u7cfb\u5217\u673a\u5236\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

    1. \u663e\u7136\uff0c\u4e2d\u65ad\u4e4b\u95f4\u4ea6\u6709\u533a\u522b\uff0c\u6709\u7684\u7a0b\u5e8f\u53d1\u751f\u4e86\u201c\u81f4\u547d\u9519\u8bef\u201d\u8fd9\u4ef6\u4e8b\uff0c\u663e\u7136\u6bd4\u6253\u5370\u673a\u5c31\u7eea\u66f4\u91cd\u8981\uff0c\u56e0\u6b64\uff0c\u4e2d\u65ad\u9700\u8981\u5206\u7ea7\u673a\u5236\uff0c\u4ee5\u533a\u5206\u4e2d\u65ad\u7684\u4f18\u5148\u7ea7\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728\u5904\u7406\u4e2d\u65ad\u65f6\uff0c\u4f18\u5148\u5904\u7406\u4f18\u5148\u7ea7\u9ad8\u7684\u4e2d\u65ad\uff1b
    2. \u4e2d\u65ad\u5e76\u4e0d\u662f\u968f\u65f6\u968f\u5730\u90fd\u80fd\u53d1\u751f\u7684\uff0c\u201c\u4ee3\u7406\u4eba\u201d\u5728\u8d70\u72ec\u6728\u6865\u65f6\u4e0d\u5e94\u5f53\u6682\u505c\u53bb\u5904\u7406\u836f\u54c1\u7f3a\u8d27\u7684\u95ee\u9898\uff0c\u5bf9\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u6765\u8bf4\uff0c\u6709\u8bb8\u591a\u539f\u5b50\u6027\u7684\u884c\u4e3a\u662f\u4e0d\u53ef\u88ab\u4e2d\u65ad\u7684\uff0c\u4e5f\u6709\u4e00\u4e9b\u91cd\u8981\u7684\u4efb\u52a1\u662f\u4e0d\u5e94\u5f53\u88ab\u666e\u901a\u7684\u4e2d\u65ad\u6253\u6270\u7684\uff0c\u8fd9\u5c31\u6d89\u53ca\u5230\u4e2d\u65ad\u5c4f\u853d\u95ee\u9898\uff1b

    \u5b58\u7591

    \u8fd9\u5c31\u9700\u8981\u6211\u4eec\u8c08\u5230\u4e2d\u65ad\u7684\u786c\u4ef6\u8bbe\u8ba1\uff0c\u4e00\u79cd\u6bd4\u8f83\u666e\u901a\u7684\u8bbe\u8ba1\u662f\uff0c\u51c6\u5907 maskable interrupt-request line \u548c non-maskable interrupt-request line \u4e24\u6761\u4e2d\u65ad\u8bf7\u6c42\u7ebf\uff0c\u524d\u8005\u7528\u4e8e\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u540e\u8005\u7528\u4e8e\u4e0d\u53ef\u5c4f\u853d\u7684\u4e2d\u65ad\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5728\u6bcf\u4e2a\u6307\u4ee4\u540e\u68c0\u67e5\u8fd9\u4e2d\u65ad\u7ebf\u4e0a\u662f\u5426\u6709\u4e2d\u65ad\u8bf7\u6c42\uff0c\u800c\u5982\u679c\u6b64\u65f6\u64cd\u4f5c\u7cfb\u7edf\u5c4f\u853d\u4e86\u4e2d\u65ad\uff0c\u90a3\u4e48\u5c31\u4e0d\u4f1a\u68c0\u67e5 maskable interrupt-request line \u4e0a\u7684\u4e2d\u65ad\u8bf7\u6c42\u3002

    \u9700\u8981\u6ce8\u610f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u53d1\u73b0\u4e2d\u65ad\u540e\u5e76\u4e0d\u662f\u4e8c\u8bdd\u4e0d\u8bf4\u9a6c\u4e0a\u53bb\u5904\u7406\u4e2d\u65ad\u7684\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u4e2d\u65ad\u5904\u7406\u5b8c\u6210\u540e\u4ecd\u80fd\u7ee7\u7eed\u5f53\u524d\u4efb\u52a1\uff0c\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u4fdd\u5b58\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\uff0c\u4ee5\u4fbf\u5b8c\u6210\u4e2d\u65ad\u5904\u7406\u540e\u6062\u590d\u5f53\u524d\u4efb\u52a1\u7684\u72b6\u6001\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u8ba1\u65f6\u5668","title":"\u8ba1\u65f6\u5668","text":"

    \u867d\u7136\u770b\u8d77\u6765\u5f88\u4e0d\u8d77\u773c\uff0c\u4f46\u8ba1\u65f6\u5668(timer)\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u662f\u4e00\u4e2a\u975e\u5e38\u91cd\u8981\u7684\u4e1c\u897f\u3002\u8ba1\u65f6\u5668\u9700\u8981\u4e00\u4e2a\u56fa\u5b9a\u9891\u7387\u7684\u65f6\u949f\u4ee5\u53ca\u4e00\u4e2a\u8ba1\u6570\u5668\uff0c\u5728\u6bcf\u4e2a\u65f6\u949f\u5468\u671f\u4ee4\u8ba1\u6570\u5668\u51cf 1\uff0c\u5f53\u8ba1\u6570\u5668\u5f52\u96f6\u65f6\u4ea7\u751f\u4e2d\u65ad\uff0c\u544a\u8bc9\u64cd\u4f5c\u7cfb\u7edf\u5b9a\u7684\u65f6\u5df2\u7ecf\u5230\u4e86\u3002

    \u5b83\u7684\u529f\u80fd\u867d\u7136\u57fa\u7840\u4f46\u662f\u5341\u5206\u91cd\u8981\uff0c\u4f8b\u5982\u5206\u65f6\u7cfb\u7edf\u4e2d\u5c31\u9700\u8981\u8ba1\u6570\u5668\u6765\u63a7\u5236\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u53c8\u6bd4\u5982\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u5b9a\u671f\u68c0\u67e5\u5185\u5b58\u4e2d\u7684\u8fdb\u7a0b\uff0c\u4ee5\u9632\u6b62\u8fdb\u7a0b\u4e00\u76f4\u5360\u7528\u7cfb\u7edf\u8d44\u6e90\uff0c\u8fd9\u4e9b\u90fd\u9700\u8981\u8ba1\u65f6\u5668\u7684\u5e2e\u52a9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7279\u6743\u6a21\u5f0f","title":"\u7279\u6743\u6a21\u5f0f","text":"

    \u6211\u4eec\u524d\u9762\u8bf4\u8fc7\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u67d0\u4e9b\u64cd\u4f5c\u662f\u5371\u9669\u7684\uff0c\u6709\u53ef\u80fd\u5a01\u80c1\u5230\u81ea\u8eab\u6b63\u5e38\u8fd0\u4f5c\u7684\uff08\u5982\u4e0e\u786c\u4ef6\u76f4\u63a5\u76f8\u5173\u7684\u884c\u4e3a\u3001\u63a7\u5236 CPU \u8fd0\u884c\u89c4\u5219\u7684\u884c\u4e3a\u7b49\uff09\uff0c\u800c\u8fd9\u4e9b\u64cd\u4f5c\u4e0d\u5e94\u5f53\u88ab\u7528\u6237\u7a0b\u5e8f\u76f4\u63a5\u6267\u884c\u3002\u4e00\u79cd\u7b80\u5355\u7684\u601d\u8def\u662f\uff0c\u6211\u4eec\u5212\u5206\u5e38\u89c4\u64cd\u4f5c\u548c\u5371\u9669\u64cd\u4f5c\uff0c\u5141\u8bb8\u7528\u6237\u7a0b\u5e8f\u6267\u884c\u5e38\u89c4\u64cd\u4f5c\uff0c\u800c\u5371\u9669\u64cd\u4f5c\u5219\u9700\u8981\u59d4\u6258\u4e13\u4e1a\u4eba\u58eb\u4ee3\u4e3a\u6267\u884c\u3002\u800c\u8fd9\u5c31\u662f\u7279\u6743\u6a21\u5f0f(Privileged Mode)\u7684\u57fa\u672c\u601d\u8def\u3002

    \u5de5\u4e1a\u4e0a\u7684\u7279\u6743\u6a21\u5f0f\u53ef\u80fd\u4f1a\u6709\u591a\u79cd\u590d\u6742\u7684\u5b9e\u73b0\u5f62\u5f0f\uff0c\u4f46\u662f\u6211\u4eec\u8fd9\u91cc\u53ea\u8bb2\u6700\u7b80\u5355\u7684\u4e00\u79cd\uff0c\u5373\u53cc\u6a21\u5f0f(Dual-Mode)\u3002\u53cc\u6a21\u5f0f\u4e0b\uff0cCPU \u6709\u4e24\u79cd\u8fd0\u884c\u6a21\u5f0f\uff0c\u4e00\u79cd\u662f\u7528\u6237\u6001(User Mode)\uff08\u76ee\u6001\uff09\uff0c\u4e00\u79cd\u662f\u5185\u6838\u6001(Kernel Mode)\uff08\u7ba1\u6001\uff0c\u6838\u5fc3\u6001\uff09\u3002Mode Bit \u4e3a 0\uff0c\u8868\u793a CPU \u5de5\u4f5c\u5728\u5185\u6838\u6001\uff0cMode Bit \u4e3a 1 \u65f6\uff0cCPU \u5de5\u4f5c\u5728\u7528\u6237\u6001\u3002

    \u540c\u65f6\uff0c\u6211\u4eec\u5c06\u90a3\u4e9b\u201c\u5371\u9669\u201d\u7684\u6307\u4ee4\u79f0\u4e3a\u7279\u6743\u6307\u4ee4(privileged instruction)\uff0c\u4f8b\u5982 I/O \u63a7\u5236\uff0c\u8ba1\u65f6\u5668\u7ba1\u7406\uff0c\u4e2d\u65ad\u7ba1\u7406\u7b49\u3002\u8fd9\u4e9b\u6307\u4ee4\u53ea\u80fd\u5728\u5185\u6838\u6001\u4e0b\u6267\u884c\uff0c\u800c\u7528\u6237\u6001\u4e0b\u6267\u884c\u8fd9\u4e9b\u6307\u4ee4\u65f6\u4f1a\u8ba4\u4e3a\u8fd9\u6761\u6307\u4ee4\u4e0d\u5b58\u5728\u3002

    \u95ee\u9898\u5c1a\u672a\u89e3\u51b3

    \u73b0\u5728\u6211\u4eec\u5c06\u5371\u9669\u64cd\u4f5c\u548c\u76f8\u5bf9\u5b89\u5168\u7684\u64cd\u4f5c\u9694\u79bb\u5f00\u6765\u4e86\uff0c\u4f46\u662f\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u7528\u6237\u7a0b\u5e8f\u5c31\u4e0d\u9700\u8981\u4f7f\u7528\u90a3\u4e9b\u5371\u9669\u64cd\u4f5c\u4e86\uff0c\u5355\u7eaf\u7684\u9694\u79bb\u5e76\u4e0d\u80fd\u89e3\u51b3\u95ee\u9898\uff0c\u7528\u6237\u7a0b\u5e8f\u4ecd\u7136\u5b58\u5728\u9700\u8981\u4f7f\u7528\u7279\u6743\u6307\u4ee4\u7684\u9700\u6c42\u3002

    \u8fd9\u4e9b\u9700\u6c42\u5f80\u5f80\u662f\u53ef\u4ee5\u88ab\u62bd\u8c61\u7684\u3001\u88ab\u5c01\u88c5\u7684\u3002\u5c31\u597d\u50cf\u300c\u201c\u7528\u6237\u201d\u5411\u201c\u67dc\u53f0\u201d\u7d22\u8981\u5e93\u623f\u94a5\u5319\uff0c\u4ee5\u4fbf ta \u80fd\u53bb\u5e93\u623f\u62ff\u7f3a\u8d27\u7684\u8d27\u7269\u300d\u8fd9\u4ef6\u4e8b\u662f\u4e0d\u5408\u7406\u7684\uff0c\u6211\u4eec\u65e0\u6cd5\u63a7\u5236\u201c\u7528\u6237\u201d\u5b9e\u9645\u62ff\u201c\u94a5\u5319\u201d\u505a\u4e86\u4ec0\u4e48\uff0c\u800c\u201c\u94a5\u5319\u201d\u7684\u6ee5\u7528\u53c8\u4f1a\u5bfc\u81f4\u201c\u67dc\u53f0\u201d\u9677\u5165\u5371\u9669\u4e2d\uff1b\u4f46\u662f\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u662f\u5408\u7406\u7684\u3002

    \u53cd\u8fc7\u6765\u8bb2\uff0c\u867d\u7136\u300c\u201c\u7528\u6237\u201d\u8bf7\u6c42\u201c\u67dc\u53f0\u201d\u53bb\u5e93\u623f\u62ff ta \u9700\u8981\u7684\u8d27\u7269\u300d\u8fd9\u4e2a\u4efb\u52a1\u5fc5\u987b\u4f7f\u7528\u5e93\u623f\u201c\u94a5\u5319\u201d\u624d\u80fd\u8fdb\u884c\uff0c\u4f46\u662f\u65e0\u8bba\u5982\u4f55\u8fd9\u4e2a\u201c\u94a5\u5319\u201d\u4e5f\u53ea\u4f1a\u88ab\u201c\u67dc\u53f0\u201d\u7528\u6765\u83b7\u53d6\u5e93\u623f\u91cc\u7684\u7279\u5b9a\u8d27\u7269\uff0c\u800c\u4e0d\u4f1a\u53d1\u751f\u8bf8\u5982\u201c\u7528\u6237\u201d\u5e26\u7740\u5341\u516b\u8f66\u9762\u5305\u4eba\u628a\u5e93\u623f\u6d17\u52ab\u4e00\u7a7a\u7684\u60c5\u51b5\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u53ea\u9700\u8981\u5c01\u88c5\u597d\u4e00\u7cfb\u5217\u7c7b\u4f3c\u8fd9\u79cd\u7684\u9700\u6c42-\u7ed3\u679c\u7684\u5904\u7406\u65b9\u6848\uff0c\u8ba9\u7528\u6237\u5728\u6709\u9700\u8981\u7684\u65f6\u5019\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u8fd9\u4e9b\u65b9\u6848\uff0c\u5728\u6267\u884c\u5f53\u524d\u4efb\u52a1\u7684\u65f6\u5019\u5c06\u63a7\u5236\u6743\u8ba9\u6e21\u7ed9\u64cd\u4f5c\u7cfb\u7edf\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5b8c\u6210\u540e\u518d\u8fd8\u56de\u63a7\u5236\u6743\uff0c\u5c31\u53ef\u4ee5\u5b9e\u73b0\u5c06\u7279\u6743\u6307\u4ee4\u9694\u79bb\u5728\u5185\u6838\u6001\uff0c\u540c\u65f6\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u5b8c\u6210\u9700\u6c42\u3002

    \u800c\u90a3\u4e48\u5728\u5177\u4f53\u5b9e\u73b0\u4e0a\uff0c\u8fd9\u4e00\u6b65\u662f\u901a\u8fc7 trap \u5b9e\u73b0\u7684\u3002

    Transition from user to kernel mode.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u7cfb\u7edf\u8c03\u7528","title":"\u7cfb\u7edf\u8c03\u7528","text":"

    Examples of W&U system calls.

    \u7cfb\u7edf\u8c03\u7528(System Call)\u662f\u7cfb\u7edf\u5411\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u670d\u52a1\u7684\u4e00\u4e2a\u63a5\u53e3\uff0c\u5b83\u4eec\u7ecf\u5e38\u4ee5 C/C++ \u51fd\u6570\u7684\u5f62\u5f0f\u5b58\u5728\uff0c\u5bf9\u4e8e\u67d0\u4e9b\u6bd4\u8f83\u63a5\u8fd1\u5e95\u5c42\u7684\u4efb\u52a1\uff0c\u4e5f\u53ef\u80fd\u662f\u901a\u8fc7\u6c47\u7f16\u7f16\u5199\u7684\u3002

    \u4f46\u8bf4\u5230\u5e95\uff0c\u7cfb\u7edf\u8c03\u7528\u8fd8\u662f\u76f8\u5bf9\u5e95\u5c42\u7684\u8bbe\u8ba1\uff0c\u901a\u5e38\u7684\u5f00\u53d1\u5e76\u4e0d\u57fa\u4e8e\u5982\u6b64\u5e95\u5c42\u7684\u8bbe\u8ba1\u5c55\u5f00\u3002\u66f4\u5e38\u89c1\u7684\u662f\u5229\u7528\u5404\u79cd\u62bd\u8c61\u5c42\u7ea7\u66f4\u9ad8\u7684 Application Programming Interface, API \u8fdb\u884c\u5f00\u53d1\u3002

    API \u662f\u4e00\u4e2a\u975e\u5e38\u5e38\u89c1\u7684\u6982\u5ff5\uff0c\u5728\u6211\u770b\u6765\u7cfb\u7edf\u8c03\u7528\u672c\u8eab\u4e5f\u662f\u4e00\u79cd API\u3002API \u7684\u6838\u5fc3\u601d\u60f3\u662f\u8ba9\u8c03\u7528\u8005\u53ea\u9700\u8981\u77e5\u9053\u5982\u4f55\u4e0e\u88ab\u8c03\u7528\u8005\u4ea4\u6d41\u4ee5\u5b9e\u73b0\u76ee\u7684\uff0c\u800c\u4e0d\u9700\u8981\u5173\u5fc3\u5176\u5177\u4f53\u5b9e\u73b0\u3002\u8fd9\u540c\u65f6\u4e5f\u6697\u793a\u7740\uff0c\u53ea\u8981 API \u4e00\u81f4\uff0c\u540c\u6837\u7684\u7a0b\u5e8f\u5728\u4e0d\u540c\u7684\u5e73\u53f0\u4e0a\u4e5f\u80fd\u76f4\u63a5\u7f16\u8bd1\u540e\u8fd0\u884c\u3002

    \u663e\u7136\uff0cAPI \u4e0e\u7f16\u7a0b\u8bed\u8a00\u5f80\u5f80\u662f\u5f3a\u76f8\u5173\u7684\uff0c\u7279\u5b9a\u7f16\u7a0b\u8bed\u8a00\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u8fd0\u884c\u4e5f\u662f\u9700\u8981\u4e00\u5b9a\u7684\u201c\u73af\u5883\u201d\u7684\uff0c\u4e5f\u5c31\u662f\u6211\u4eec\u6240\u8bf4\u7684\u8fd0\u884c\u65f6\u73af\u5883(run-time environment, RTE)\u3002RTE \u901a\u5e38\u5305\u62ec\u4e86\u7f16\u8bd1\u5668(compilers)\u3001\u89e3\u91ca\u5668(interpreters)\u3001\u5e93(libraries)\u548c\u88c5\u8f7d\u5668(loaders)\u7b49\uff0c\u5b83\u4eec\u5171\u540c\u7ec4\u6210\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684\u8fd0\u884c\u65f6\u73af\u5883\u3002

    \u76f8\u5173\u9605\u8bfb \u601d\u8003\u9898 \u9898\u9762\u89e3\u6790

    \u8fa8\u6790\u5e93\u51fd\u6570\u4e0e\u7cfb\u7edf\u8c03\u7528\uff1f

    \u5e93\u51fd\u6570\u8fd0\u884c\u5728\u7528\u6237\u7a7a\u95f4\u800c\u7cfb\u7edf\u8c03\u7528\u8fd0\u884c\u5728\u5185\u6838\u7a7a\u95f4\u3002\u5927\u90e8\u5206\u5e93\u51fd\u6570\u53ef\u80fd\u4f7f\u7528\u7cfb\u7edf\u8c03\u7528\u6765\u5b9e\u73b0\u76ee\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","title":"\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668","text":"

    The role of the linker and loader.

    \u8bf4\u4e86\u8fd9\u4e48\u591a\uff0c\u90a3\u4e48\u64cd\u4f5c\u7cfb\u7edf\u5230\u5e95\u662f\u5982\u4f55\u6267\u884c\u4e00\u4e2a\u7a0b\u5e8f\u7684\u5462\uff1f\u4ee5 C \u4e3a\u4f8b\uff0c\u4e00\u4e2a\u5199\u5b8c\u7684\u4ee3\u7801\u9700\u8981\u7ecf\u8fc7\u7f16\u8bd1\u3001\u94fe\u63a5\u3001\u88c5\u8f7d\u4e09\u4e2a\u6b65\u9aa4\uff0c\u624d\u80fd\u6210\u4e3a\u4e00\u4e2a\u5728\u5185\u5b58\u4e2d\u7684\uff0c\u53ef\u4ee5\u88ab\u6267\u884c\u7684\u7a0b\u5e8f\u3002

    \u7b80\u5355\u6765\u8bf4\uff0c\u7f16\u8bd1\u5668\u9996\u5148\u5c06\u82e5\u5e72 .c \u6e90\u6587\u4ef6\u7f16\u8bd1\u4e3a\u82e5\u5e72 .o \u6587\u4ef6\uff08\u8fd9\u91cc\u5408\u5e76\u4e86\u9884\u5904\u7406\u3001\u7f16\u8bd1\u3001\u6c47\u7f16\u6b65\u9aa4\uff09\uff0c\u8fd9\u4e9b .o \u6587\u4ef6\u88ab\u79f0\u4e3a\u53ef\u91cd\u5b9a\u4f4d\u76ee\u6807\u6587\u4ef6(relocatable object file)\uff0c\u5176\u5b58\u5728\u5f62\u5f0f\u4e3a\u673a\u5668\u7801\uff1b\u968f\u540e\u94fe\u63a5\u5668\u5c06\u82e5\u5e72 .o \u6587\u4ef6\u8fde\u5e26\u6240\u9700\u8981\u7684\u4e00\u4e9b\u5e93\u6587\u4ef6\uff08\u5982 .a \u6587\u4ef6\uff09\u94fe\u63a5\u4e3a\u4e00\u4e2a\u53ef\u6267\u884c\u76ee\u6807\u6587\u4ef6(executable object file)\u3002

    \u7279\u522b\u7684\uff0c\u94fe\u63a5\u5206\u4e3a\u9759\u6001\u94fe\u63a5\u548c\u52a8\u6001\u94fe\u63a5\u4e24\u79cd\u3002\u9759\u6001\u94fe\u63a5\u5c06\u5e93\u6587\u4ef6\u7684\u4ee3\u7801\u76f4\u63a5\u5408\u5e76\u8fdb\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u52a8\u6001\u94fe\u63a5\u4ec5\u4ec5\u5c06\u5e93\u6587\u4ef6\u7684\u5f15\u7528\u4fe1\u606f\u5199\u5165\u6700\u7ec8\u7684\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u800c\u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\u518d\u53bb\u5bfb\u627e\u8fd9\u4e9b\u5e93\u6587\u4ef6\u3002

    gcc -E main.c -o main.i # pre-process\ngcc -S main.i -o main.s # compile to assembly code\ngcc -c main.s -o main.o # assemble to object file\ngcc main.o -o main      # link\n./main                  # (load and) execute\n
    \u4e00\u4e9b\u64cd\u4f5c

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u52a8\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u6bd4\u9759\u6001\u94fe\u63a5\u5f97\u5230\u7684\u53ef\u6267\u884c\u6587\u4ef6\u8981\u5c0f\u4e0d\u5c11\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit0/#\u5f15\u5bfc","title":"\u5f15\u5bfc","text":"

    \u5728\u8ba1\u7b97\u673a\u521a\u521a\u542f\u52a8\uff0c\u64cd\u4f5c\u7cfb\u7edf\u8fd8\u672a\u5f00\u59cb\u8fd0\u884c\u4e4b\u524d\uff0c\u9700\u8981\u5f00\u673a\u540e\u7684\u7b2c\u4e00\u4e2a\u7a0b\u5e8f\u2014\u2014\u5f15\u5bfc\u52a0\u8f7d\u5668(bootstrap loader)\u6765\u4e00\u6b65\u4e00\u6b65\u5730\u521d\u59cb\u5316\u64cd\u4f5c\u7cfb\u7edf\u3002\u5bf9\u5927\u591a\u6570\u64cd\u4f5c\u7cfb\u7edf\u6765\u8bf4\uff0cbootstrap \u90fd\u4f1a\u88ab\u5b58\u50a8\u5728 ROM \u4e2d\uff0c\u5e76\u4e14\u9700\u8981\u5728\u4e00\u4e2a\u5df2\u77e5\u7684\u4f4d\u7f6e\uff08\u5426\u5219\u600e\u4e48\u627e\u5230\u5b83\u5462\uff09\u3002Bootstrap loader \u4f1a\u8f7d\u5165\u66f4\u52a0\u7231\u590d\u6742\u7684\uff0c\u5b8c\u6574\u7684 bootstrap\uff0c\u800c\u5305\u542b bootstrap \u7a0b\u5e8f\u7684\u5206\u533a\u5c31\u88ab\u79f0\u4e3a\u5f15\u5bfc\u5206\u533a(bootstrap partition)\u3002

    1. \u5e76\u53d1\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u95f4\u95f4\u9694\u5185\u53d1\u751f\uff0c\u800c\u5e76\u884c\u662f\u6307\u4e24\u4e2a\u6216\u591a\u4e2a\u4e8b\u4ef6\u5728\u540c\u4e00\u65f6\u523b\u53d1\u751f\u3002\u903b\u8f91\u4e0a\uff0c\u5e76\u884c\u662f\u5e76\u53d1\u7684\u5b50\u96c6\u3002\u00a0\u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/","title":"Unit 1: \u8fdb\u7a0b\u7ba1\u7406 | Process Management","text":"

    \u7ea6 7185 \u4e2a\u5b57 78 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 37 \u5206\u949f

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b","title":"\u8fdb\u7a0b","text":"

    \u4e00\u6bb5\u672c\u8d28\u4e0a\u7a0b\u5e8f\u662f\u9759\u6001\u7684\u3001\u5b58\u50a8\u5728\u786c\u76d8\u4e0a\u7684\u6307\u4ee4\u6570\u636e\uff0c\u800c\u5f53\u5b83\u9644\u5e26\u8fd0\u884c\u7a0b\u5e8f\u6240\u9700\u8981\u7684\u5fc5\u8981\u4fe1\u606f\u8fdb\u5165\u5185\u5b58\uff0c\u5f97\u5230\u76f8\u5173\u8d44\u6e90\u540e\uff0c\u5b83\u6210\u4e3a\u4e00\u4e2a\u52a8\u6001\u7684\u3001\u4e0e\u8ba1\u7b97\u673a\u8d44\u6e90\u4e92\u52a8\u7684\u5b9e\u4f53\uff0c\u8fd9\u4e2a\u5b9e\u4f53\u5c31\u662f\u8fdb\u7a0b(process)\u3002

    \u8fdb\u7a0b\u662f\u662f\u64cd\u4f5c\u7cfb\u7edf\u8fdb\u884c\u8d44\u6e90\u5206\u914d\u548c\u8c03\u5ea6\u7684\u4e00\u4e2a\u72ec\u7acb\u5355\u4f4d\uff0c\u5b83\u4ee5\u7279\u5b9a\u5f62\u5f0f\u5b58\u5728\u4e8e\u5185\u5b58\u4e2d\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u5c01\u95ed\u6027\uff0c\u662f\u591a\u9053\u6280\u672f\u7684\u91cd\u8981\u57fa\u7840\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u5f62\u5f0f","title":"\u8fdb\u7a0b\u7684\u5f62\u5f0f","text":"

    \u524d\u9762\u6211\u4eec\u63d0\u5230\uff0c\u8fdb\u7a0b\u52a8\u6001\u5730\u5b58\u5728\u4e8e\u5185\u5b58\u4e2d\uff0c\u56e0\u6b64\u9664\u4e86\u547d\u4ee4\u4ee5\u5916\uff0c\u8fd8\u5305\u62ec\u5176\u8fd0\u884c\u65f6\u7684\u52a8\u6001\u4fe1\u606f\u3002\u62bd\u8c61\u6765\u8bf4\uff0c\u4e3b\u8981\u5305\u542b\u8fd9\u4e09\u4e2a\u7ef4\u5ea6\uff1a\u2460 \u7528\u6765\u8dd1\u7684\u4ee3\u7801\uff1b\u2461 \u8dd1\u7684\u8fc7\u7a0b\u4e2d\uff0c\u4e0d\u65ad\u4f1a\u88ab\u66f4\u65b0\u7684\u6570\u636e\uff1b\u2462 \u7528\u6765\u7ef4\u62a4\u3001\u63a7\u5236\u8fdb\u7a0b\u7684\u63a7\u5236\u4fe1\u606f\u3002

    \u8fdb\u7a0b\u5728\u5185\u5b58\u4e2d\u5b58\u5728\u9700\u8981\u4e00\u5757\u865a\u62df\u7684\u5730\u5740\u7a7a\u95f4\u4ee5\u5b58\u50a8\u4e0a\u8ff0\u8fd9\u4e9b\u5185\u5bb9\u3002\u5176\u5305\u542b\u4e24\u4e2a\u90e8\u5206\uff0c\u5373\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7684\u7528\u6237\u90e8\u5206\u548c\u865a\u62df\u5730\u5740\u7a7a\u95f4\u7684\u5185\u6838\u90e8\u5206\u3002

    \u865a\u62df\u5730\u5740\u7a7a\u95f4\u5c06\u4f1a\u5728\u540e\u9762\u7684\u7ae0\u8282\u4e2d\u8be6\u7ec6\u8bb2\u89e3\uff0c\u8bfb\u8005\u53ef\u4ee5\u8003\u8651\u8bbf\u95ee\u94fe\u63a5\u7b80\u5355\u77a5\u4e00\u773c\u7559\u4e2a\u5370\u8c61\u3002

    \u4e0b\u56fe\u662f\u8fdb\u7a0b\u5728\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7528\u6237\u90e8\u5206\u7684\u7ec4\u6210\uff1a

    \u7528\u6237\u90e8\u5206

    \u53ef\u4ee5\u53d1\u73b0\uff0cText \u548c Data \u90e8\u5206\u6240\u9700\u8981\u7684\u7a7a\u95f4\u5728\u4e00\u5f00\u59cb\u5c31\u88ab\u786e\u5b9a\uff0c\u800c Heap \u548c Stack \u90fd\u53ef\u80fd\u52a8\u6001\u7684\u6269\u5c55\u548c\u6536\u7f29\u3002\u89c2\u5bdf\u53f3\u56fe\uff0cHeap \u548c Stack \u662f\u76f8\u5411\u6269\u5c55\u7684\uff0c\u4e8e\u662f\u6574\u4e00\u5757\u7684\u5927\u5c0f\u80fd\u591f\u56fa\u5b9a\u4e0b\u6765\uff0c\u800c\u5728\u5185\u90e8\u8fdb\u884c\u6709\u9650\u5236\u7684\u52a8\u6001\u5206\u914d\u3002\u5f53\u7136\uff0cHeap \u548c Stack \u7684\u533a\u57df\u5e76\u4e0d\u4f1a\u4ea4\u53c9\u3002

    memory layout of a C program

    \u4e4b\u6240\u4ee5\u628a\u6709\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u548c\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u5206\u5f00\u6765\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u53ef\u4ee5\u5728\u4e00\u5f00\u59cb\u53ea\u5b58\u50a8\u6ca1\u521d\u59cb\u503c\u7684\u9759\u6001\u53d8\u91cf\u7684\u5927\u5c0f\uff0c\u800c\u5728\u771f\u6b63\u7b2c\u4e00\u6b21\u8bbf\u95ee\u7684\u65f6\u5019\u624d\u5206\u914d\u5185\u5b58\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u51cf\u5c11\u5185\u5b58\u5360\u7528\u3002

    \u901a\u5e38\u6765\u8bf4\uff0c\u672a\u521d\u59cb\u5316\u7684\u9759\u6001\u53d8\u91cf\u4e00\u822c\u90fd\u88ab\u653e\u5728 .bss \u6bb5\uff0c\u800c\u5728\u88ab\u521d\u59cb\u5316\u7684\u65f6\u5019\u79fb\u52a8\u5230 .data \u6bb5\u30021

    \u800c\u653e\u5728\u5185\u6838\u90e8\u5206\u7684\u5185\u5bb9\uff0c\u5219\u66f4\u4fa7\u91cd\u4e8e\u8fdb\u7a0b\u7684\u63a7\u5236\u4fe1\u606f\uff0c\u5177\u4f53\u6765\u8bf4\u5c31\u662f\u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u3002

    \u5185\u6838\u90e8\u5206

    \u8fdb\u7a0b\u63a7\u5236\u5757(Process Control Block, PCB)\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7528\u6765\u63cf\u8ff0\u8fdb\u7a0b\u7684\u4e00\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u5b83\u5305\u542b\u4e86\u8fdb\u7a0b\u7684\u6240\u6709\u4fe1\u606f\uff0c\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u6700\u91cd\u8981\u7684\u6570\u636e\u7ed3\u6784\u4e4b\u4e00\u3002\u53ef\u4ee5\u8bf4\uff0cPCB \u662f\u8fdb\u7a0b\u5b58\u5728\u7684\u552f\u4e00\u6807\u5fd7\u3002

    \u901a\u5e38\u6765\u8bf4\uff0cPCB \u53ef\u80fd\u5305\u542b\u8fd9\u4e9b\u5185\u5bb9\uff1a

    \u4e24\u4e2a\u90e8\u5206\u5728\u903b\u8f91\u4e0a\u7684\u5173\u7cfb\u662f\uff0c\u7528\u6237\u90e8\u5206\u5212\u5206\u5e76\u5b9e\u9645\u5b58\u50a8\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u6570\u636e\u8d44\u6e90\uff08\u5305\u62ec\u7a0b\u5e8f\u8fd0\u884c\u7684\u4ee3\u7801\uff09\uff0c\u800c\u5185\u6838\u90e8\u5206\u5b58\u50a8\u8fdb\u7a0b\u7684\u5143\u6570\u636e\uff0c\u5305\u62ec\u63a7\u5236\u4fe1\u606f\u4e0e\u7528\u6237\u90e8\u5206\u4e2d\u5404\u4e2a\u90e8\u5206\u5185\u5b58\u7684\u5206\u914d\u548c\u4f7f\u7528\u60c5\u51b5\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u72b6\u6001","title":"\u8fdb\u7a0b\u7684\u72b6\u6001","text":"

    \u5728\u5355\u673a\u8bed\u5883\u4e0b\uff0c\u8fdb\u7a0b\u8c03\u5ea6\u4e00\u4e2a\u6bd4\u8f83\u6838\u5fc3\u7684\u90e8\u5206\u5c31\u662f\u5c06 CPU \u8d44\u6e90\u7ed9\u54ea\u4e2a\u4efb\u52a1\u7528\u3002\u800c\u5e76\u4e0d\u662f\u4efb\u4f55\u8fdb\u7a0b\u5728\u4efb\u4f55\u65f6\u523b\u90fd\u53ef\u4ee5\u76f4\u63a5\u83b7\u5f97 CPU \u8d44\u6e90\u5e76\u76f4\u63a5\u5f00\u59cb\u4f7f\u7528\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u9700\u8981\u5bf9\u8fdb\u7a0b\u7684\u72b6\u6001\u8fdb\u884c\u5efa\u6a21\u3002

    \u8fdb\u7a0b\u5728\u5c31\u7eea\u6001\u9700\u8981\u7b49\u5f85 CPU \u8d44\u6e90\u7684\u6d3e\u53d1(dispatch)\uff0c\u63a5\u53d7\u8c03\u5ea6\uff1b\u5728\u963b\u585e\u6001\u9700\u8981\u7b49\u5f85\u5bf9\u5e94\u7684 I/O \u5b8c\u6210\u6216\u4e8b\u4ef6\u5b8c\u6210\uff0c\u56e0\u800c\u5b58\u5728\u4e00\u79cd\u7ed3\u6784\u9700\u8981\u53bb\u7ef4\u62a4\u8fd9\u4e9b\u201c\u76f8\u5bf9\u9759\u6b62\u201d\u7684\u8fdb\u7a0b\u3002\u901a\u5e38\u4f7f\u7528\u5c31\u7eea\u961f\u5217(ready queue)\u548c\u7b49\u5f85\u961f\u5217(wait queue)\u6765\u5b9e\u73b0\uff0c\u5176\u57fa\u672c\u7ed3\u6784\u5982\u4e0b\uff1a

    \u5b9e\u9645\u5b9e\u73b0\u4e2d\uff0c\u7531\u4e8e\u7b49\u5f85\u7684 I/O \u6216\u4e8b\u4ef6\u4e0d\u540c\uff0c\u53ef\u80fd\u7ef4\u62a4\u591a\u4e2a\u7b49\u5f85\u961f\u5217\uff0c\u4e8e\u662f\u5b9e\u9645\u8fc7\u7a0b\u4e2d\u7684\u60c5\u51b5\u53ef\u80fd\u5982\u4e0b\uff1a

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7ba1\u7406","title":"\u8fdb\u7a0b\u7ba1\u7406","text":"

    \u73b0\u5728\u6211\u4eec\u5df2\u7ecf\u8ba8\u8bba\u4e86\u8fdb\u7a0b\u7684\u5f62\u5f0f\u548c\u4e00\u4e2a\u4e2a\u79bb\u6563\u7684\u72b6\u6001\uff0c\u73b0\u5728\u6211\u4eec\u6765\u8bb2\u8bb2\u8fdb\u7a0b\u5728\u51e0\u4e2a\u9636\u6bb5\u7684\u52a8\u6001\u8fc7\u7a0b\u3002

    \u7528\u6237\u8fdb\u7a0b\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u603b\u4f53\u4e0a\u6765\u8bb2\u9075\u5faa\u4e00\u4e2a\u6811\u72b6\u7684\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u552f\u4e00\u6807\u8bc6\u7b26\u8fdb\u7a0b\u53f7\uff08\u901a\u5e38\u88ab\u79f0\u4e3a pid\uff0c\u4f46\u5728\u7279\u5b9a\u8bed\u5883\u4e0b\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u542b\u4e49\uff09\u3002\u5982\u4e0b\u56fe\u662f Linux \u7684\u4e00\u4e2a\u8fdb\u7a0b\u6811\u3002

    \u4f60\u4e5f\u53ef\u4ee5\u5728 Linux \u4e2d\u4f7f\u7528 pstree \u6765\u67e5\u770b\u8fdb\u7a0b\u6811\u3002 \u8a00\u4e0b\u4e4b\u610f\u5c31\u662f\u8fdb\u7a0b\u4e4b\u95f4\u5b58\u5728\u4e00\u79cd\u7236\u5b50\u5173\u7cfb\uff0c\u5373 child \u8fdb\u7a0b\u662f\u7531 parent \u8fdb\u7a0b\u521b\u5efa\u7684\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9664\u4e86\u81ea\u5df1\u7684 pid \u8fd8\u6709 ppid \u6765\u6807\u8bc6\u5b83\u7684 parent \u8fdb\u7a0b\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u521b\u5efa","title":"\u8fdb\u7a0b\u7684\u521b\u5efa","text":"

    child \u8fdb\u7a0b\u7684\u8d44\u6e90\u53ef\u80fd\u76f4\u63a5\u6765\u81ea\u64cd\u4f5c\u7cfb\u7edf\u7684\u5206\u914d\uff0c\u4e5f\u53ef\u80fd\u6765\u81ea parent \u8fdb\u7a0b\u7684\u5206\u914d\uff0c\u9650\u5236\u4f7f\u7528\u540e\u8005\u7684\u597d\u5904\u662f\u80fd\u591f\u907f\u514d\u56e0\u4e3a\u521b\u5efa\u592a\u591a\u5b50\u8fdb\u7a0b\u800c\u5bfc\u81f4\u8d44\u6e90\u4e0d\u591f\u7528\u3002\u7279\u522b\u7684\uff0c\u6211\u4eec\u89c2\u5bdf\u5230\u8fd9\u68f5\u6811\u7684\u6839\u662f systemd\uff0c\u5386\u53f2\u4e0a\u4e5f\u66fe\u53eb\u8fc7 init\uff0c\u5b83\u662f\u64cd\u4f5c\u7cfb\u7edf\u542f\u52a8\u540e\u8fd0\u884c\u7684\u7b2c\u4e00\u4e2a\u7528\u6237\u8fdb\u7a0b\uff0c\u81f3\u5c11\u5728 Linux \u4e2d\uff0c\u5b83\u7684 pid \u88ab\u5206\u914d\u4e3a 1\uff0c\u800c\u5b83\u7684 ppid \u662f 0\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u8fd9\u4e2a\u8fdb\u7a0b\u7684 parent \u662f scheduler \u800c\u975e\u4e00\u4e2a\u8fdb\u7a0b2\u3002

    \u5728 Linux \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 fork \u6765\u521b\u5efa\u4e00\u4e2a child \u8fdb\u7a0b\uff0c\u5728\u8fd9\u91cc\u5148\u5f15\u5165\u5982\u4f55\u5b9e\u73b0\u662f\u4e3a\u4e86\u5f15\u5165\u4e00\u4e2a\u53ef\u4ee5\u501f\u6765\u63cf\u8ff0\u8fc7\u7a0b\u7684\u8bed\u8a00\uff0c\u6211\u4eec\u4ee5\u4e0b\u9762\u7684 C \u7a0b\u5e8f\u4e3a\u4f8b\u5c55\u5f00\u4e4b\u540e\u7684\u8ba8\u8bba\u3002

    #include <stdio.h>\n#include <unistd.h>\n#include <sys/wait.h>\n#include <sys/types.h>\n\nint main() {\nprintf(\"A process starts!\\n\");\n\npid_t pid;\npid = fork();\nif (pid < 0) {\nprintf(\"Fork failed!\\n\");\n} else if (pid == 0) {\n// sleep(1);\nprintf(\"pid is zero, so it's child process!\\n\");\n} else {\n// wait(NULL);\n// sleep(1);\nprintf(\"pid is nonzero thus it's parent process!\\n\");\n}\n}\n

    \u7b2c 10 \u884c\u9ad8\u4eae\u7684 fork() \u8bed\u53e5\u521b\u5efa\u4e86\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u8be5\u8fdb\u7a0b\u53ea\u6709\u8fdb\u7a0b\u53f7\u4e0e parent \u8fdb\u7a0b\u4e0d\u4e00\u6837\uff0c\u540c\u65f6\u901a\u8fc7\u68c0\u67e5\u8fd4\u56de\u503c pid \u6765\u5224\u65ad\u5c5e\u4e8e parent \u8fd8\u662f child\u3002

    \u5982\u679c\u7b2c 18 \u884c\u4ecd\u7136\u88ab\u6ce8\u91ca\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u8bf6 child \u8fdb\u7a0b\u5c06\u5e76\u53d1\u6267\u884c\uff0c\u5373\u5b8c\u6210 fork() \u540e\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u4ece 11 \u884c\u5f00\u59cb\u7ee7\u7eed\u5411\u4e0b\u5e76\u53d1\u7684\u6267\u884c\uff0c\u4e92\u4e0d\u963b\u585e\uff1b\u5982\u679c 18 \u884c\u7684\u6ce8\u91ca\u88ab\u53d6\u6d88\uff0c\u90a3\u4e48 parent \u8fdb\u7a0b\u5c06\u7b49\u5f85 child \u8fdb\u7a0b\u7ed3\u675f\u540e\u518d\u7ee7\u7eed\u3002\u8bfb\u8005\u53ef\u4ee5\u5c1d\u8bd5\u6392\u5217\u7ec4\u5408\u4e24\u4e2a\u6ce8\u91ca\u6765\u89c2\u5bdf\u7a0b\u5e8f\u8fd0\u884c\u7684\u7ed3\u679c\u4f1a\u5982\u4f55\u53d8\u5316\u3002

    \u903b\u8f91\u4e0a\u521b\u5efa\u7684\u65b0\u8fdb\u7a0b\u6709\u4e24\u79cd\u60c5\u51b5\uff1a

    1. \u590d\u5236 parent \u8fdb\u7a0b\u7684\u4ee3\u7801\u6570\u636e\uff1b
    2. \u8f7d\u5165\u65b0\u7684\u7a0b\u5e8f\u5e76\u7ee7\u7eed\u6267\u884c\uff1b

    \u800c\u5b9e\u9645\u5728 Linux \u4e2d\uff0c\u7b2c\u4e00\u79cd\u901a\u8fc7 fork() \u5b9e\u73b0\uff0c\u7b2c\u4e8c\u79cd\u901a\u8fc7 fork() \u540e execXX() \u5b9e\u73b0\uff0cexecXX() \u4f1a\u8986\u76d6\u90a3\u4e2a\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u6267\u884c\u5176\u4ed6\u7a0b\u5e8f\u30023,4

    copy on write

    \u53ef\u4ee5\u53d1\u73b0\uff0cfork \u7684\u590d\u5236\u64cd\u4f5c\u53ef\u80fd\u4f1a\u5e26\u6765\u8f83\u5927\u7684\u5f00\u9500\u3002\u6240\u4ee5\u6709\u4e00\u79cd\u6280\u672f\u79f0\u4e3a copy on write\uff0c\u4e5f\u5c31\u662f\u53ea\u6709\u5f53\u9700\u8981\u53d1\u751f\u5185\u5bb9\u4fee\u6539\u7684\u65f6\u5019\uff0c\u624d\u771f\u6b63\u53bb\u590d\u5236\u7236\u8fdb\u7a0b\u7684\u5185\u5bb9\uff0c\u4e5f\u5c31\u662f\u4e00\u79cd\u201clazy copy\u201d\u3002

    \u672c\u5757\u5185\u5bb9\u4e8e\u865a\u62df\u5185\u5b58\u76f8\u5173\u7684\u5185\u5bb9\u6709\u5173\uff0c\u5982\u679c\u8bfb\u8005\u60f3\u4e0d\u660e\u767d\u5177\u4f53\u5b9e\u73b0\uff0c\u53ef\u4ee5\u5148\u4e86\u89e3\u529f\u80fd\uff0c\u5728\u4e4b\u540e\u5b66\u4e60\u76f8\u5173\u5185\u5bb9\u540e\u6211\u4f1a\u518d\u6b21\u63d0\u9192\u8bfb\u8005\u56de\u987e\u8be5\u90e8\u5206\u5185\u5bb9\u3002

    virtual memory fork

    \u4e00\u4e9b UNIX \u7cfb\u7edf\u63d0\u4f9b\u4e86 vfork() \u8fd9\u4e2a\u521b\u5efa\u8fdb\u7a0b\u7684\u65b9\u6cd5\u3002\u4e3a\u4e86\u51cf\u5c0f\u590d\u5236\u5e26\u6765\u7684\u5f00\u9500\uff0cvfork() \u5e72\u8106\u5c31\u4e0d\u590d\u5236\u4e86\uff0c\u76f4\u63a5\u628a\u7236\u8fdb\u7a0b\u7ed9\u963b\u585e\u6389\uff0c\u7136\u540e\u81ea\u5df1\u7528\u7236\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u4e8e\u662f\u5b50\u8fdb\u7a0b\u5728\u5730\u5740\u7a7a\u95f4\u5185\u505a\u7684\u4fee\u6539\u5bf9\u7236\u8fdb\u7a0b\u662f\u53ef\u89c1\u7684\uff0c\u6240\u4ee5\uff0c\u4f7f\u7528 vfork() \u65f6\u9700\u8981\u5bf9\u6b64\u7279\u522b\u7559\u5fc3\u3002

    \u6362\u53e5\u8bdd\u8bf4\uff0c\u5728\u4e0a\u9762\u8fd9\u79cd\u8bed\u5883\u4e0b\uff0c\u53ef\u4ee5\u628a vfork() \u5f53\u4f5c\u521b\u5efa\u4e86\u4e00\u4e2a\u5bf9\u5f53\u524d\u8fdb\u7a0b\u7684 reference\uff0cvfork \u51fa\u6765\u7684\u5b50\u8fdb\u7a0b\u8fd0\u884c\u7684\u65f6\u5019\uff0c\u7236\u8fdb\u7a0b\u5176\u5b9e\u4e5f\u5728\u201c\u540c\u6b65\u201d\u5730\u8fd0\u884c\u3002

    \u53ef\u662f\u8fd9\u6709\u5565\u7528\u5462\uff1f\u6211\u521b\u5efa\u4e00\u4e2a reference \u505a\u7684\u4e8b\u60c5\u548c\u6211\u76f4\u63a5\u505a\u7684\u4e8b\u60c5\u6ca1\u5565\u533a\u522b\u554a\uff1f

    \u662f\u7684\uff0c\u6240\u4ee5 vfork() \u538b\u6839\u4e0d\u662f\u8fd9\u4e48\u7528\u7684\u3002\u5b9e\u9645\u4e0a\uff0c\u7531 vfork() \u521b\u5efa\u51fa\u6765\u7684\u5b50\u8fdb\u7a0b\u4e00\u822c\u9a6c\u4e0a\u5c31\u4f1a\u8c03\u7528 execXX() \u65cf\u7684\u63a5\u53e3\uff08\u8fd9\u91cc\u5f53\u7136\u4e0d\u4f1a\u628a\u7236\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4 overwrite \u4e86\uff0c\u800c\u662f\u76f4\u63a5\u66ff\u6362\u5f53\u524d\u8fdb\u7a0b\uff09\u3002

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u65e2\u7136\u4e00\u822c vfork() \u5b8c\u4e86\u9a6c\u4e0a\u5c31 execXX() \u7136\u540e\u66ff\u6362\u5f53\u524d\u8fdb\u7a0b\u4e86\uff0c\u90a3\u4e3a\u4ec0\u4e48 vfork() \u7684\u8fdb\u7a0b\u4f1a\u4f7f\u7528\u7236\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\uff0c\u800c\u4e0d\u662f\u6bd4\u5982\u8bf4\u968f\u4fbf\u6307\u5411\u54ea\u91cc\uff0c\u5c31\u50cf\u91ce\u6307\u9488\u4e00\u6837\u5462\uff1f

    \u63d0\u793a

    \u8fd9\u4e2a\u88ab\u521b\u5efa\u51fa\u6765\u7684\u8fdb\u7a0b\u8981\u600e\u4e48\u77e5\u9053\u63a5\u4e0b\u6765\u5b83\u8981 execXX() \u5462\uff1f

    \u672c\u5757\u5185\u5bb9\u4e8e\u865a\u62df\u5185\u5b58\u76f8\u5173\u7684\u5185\u5bb9\u6709\u5173\uff0c\u5982\u679c\u8bfb\u8005\u60f3\u4e0d\u660e\u767d\u5177\u4f53\u5b9e\u73b0\uff0c\u53ef\u4ee5\u5148\u4e86\u89e3\u529f\u80fd\uff0c\u5728\u4e4b\u540e\u5b66\u4e60\u76f8\u5173\u5185\u5bb9\u540e\u6211\u4f1a\u518d\u6b21\u63d0\u9192\u8bfb\u8005\u56de\u987e\u8be5\u90e8\u5206\u5185\u5bb9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u7684\u7ec8\u6b62","title":"\u8fdb\u7a0b\u7684\u7ec8\u6b62","text":"

    \u5f53\u8fdb\u7a0b\u8c03\u7528 exit() \u8fd9\u4e2a\u7cfb\u7edf\u8c03\u7528\u65f6\uff0c\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u88ab\u7ec8\u6b62\uff0c\u8fd9\u610f\u5473\u7740\u8fd9\u4e2a\u8fdb\u7a0b\u5c06\u4e0d\u518d\u6267\u884c\uff0c\u5176\u8d44\u6e90\u5c06\u88ab\u91ca\u653e\uff0c\u540c\u65f6\u2014\u2014\u8fd4\u56de\u72b6\u6001\u503c\uff0c\u800c\u8fd9\u4e2a\u72b6\u6001\u503c\u5c06\u88ab parent \u8fdb\u7a0b\u7684 wait() \u63a5\u6536\u3002\u7279\u522b\u7684\uff0c\u5982\u679c parent \u8fdb\u7a0b\u5c1a\u672a\u8c03\u7528 wait()\uff0c\u5219\u8fd9\u4e2a child \u8fdb\u7a0b\u8fd8\u4e0d\u4f1a\u5b8c\u5168\u6d88\u5931\uff0c\u56e0\u4e3a\u8981\u8fd4\u56de\u7684\u4e1c\u897f\u8fd8\u6ca1\u8fd4\u56de\uff0c\u8fd9\u79cd\u903b\u8f91\u4e0a\u5df2\u7ecf\u7ec8\u6b62\uff0c\u4f46\u4ecd\u7136\u5360\u6709\u4e00\u90e8\u5206\u8d44\u6e90\uff0c\u7b49\u5f85 parent \u8fdb\u7a0b\u8c03\u7528 wait() \u7684\u8fdb\u7a0b\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u50f5\u5c38\u8fdb\u7a0b(zombie)\u3002\u4e00\u4e2a\u8fdb\u7a0b\u53d8\u6210\u50f5\u5c38\u8fdb\u7a0b\u662f\u5f88\u666e\u901a\u7684\uff0c\u5173\u952e\u5728\u4e8e\uff0c\u5982\u679c parent \u8fdb\u7a0b\u4e0d\u8c03\u7528 wait()\uff0c\u90a3\u7b49 parent \u7ec8\u6b62\u540e\uff0c\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u53ef\u80fd\u4ecd\u7136\u4e00\u76f4\u5b58\u5728\uff0c\u6b64\u65f6\u8fd9\u4e2a\u50f5\u5c38\u8fdb\u7a0b\u540c\u65f6\u662f\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b(orphan)\u2014\u2014\u5373\u6ca1\u6709 parent \u8fdb\u7a0b\u7684\u8fdb\u7a0b\uff0c\u8fd9\u663e\u7136\u662f\u4e0d\u5408\u7406\u7684\uff0cUNIX \u7684\u89e3\u51b3\u529e\u6cd5\u662f\uff0c\u8ba9\u6240\u6709\u5b64\u513f\u8fdb\u7a0b\u90fd\u6210\u4e3a init/systemd \u7684 child \u8fdb\u7a0b\uff0c\u7531 init/systemd \u6765 wait() \u5b83\u4eec\u3002

    \u5728\u67d0\u4e9b\u7cfb\u7edf\u91cc\uff0c\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u7ea7\u8054\u7ec8\u6b62(cascading termination)\u6765\u907f\u514d\u5b64\u513f\u8fdb\u7a0b\u7684\u51fa\u73b0\uff0c\u5373\u5f53\u4e00\u4e2a\u8fdb\u7a0b\u88ab\u7ec8\u6b62\u65f6\uff0c\u5b83\u7684 child \u4e5f\u5e94\u5f53\u88ab\u9012\u5f52\u5730\u7ec8\u6b62\u3002

    daemon

    \u5b88\u62a4\u8fdb\u7a0bWiki\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5728\u201c\u540e\u53f0\u201d\u957f\u671f\u8fd0\u884c\uff0c\u4f8b\u5982\u67d0\u4e9b\u6570\u636e\u5e93\u670d\u52a1\u3001\u53cd\u4ee3\u7406\u670d\u52a1\u7b49\uff0c\u800c\u975e\u50cf\u666e\u901a\u7684\u7528\u6237\u7a0b\u5e8f\u4e00\u6837\u4f9d\u8d56\u4e8e\u7528\u6237\u4ea4\u4e92\u3002

    \u4e3a\u4e86\u5b9e\u73b0\u201c\u957f\u671f\u8fd0\u884c\u201d\uff0c\u6211\u4eec\u9700\u8981\u8ba9\u5b83\u4ee5 init/systemd \u4e3a parent\uff0c\u56e0\u4e3a\u4efb\u4f55\u5176\u5b83\u8fdb\u7a0b\u90fd\u6709\u53ef\u80fd\u5728\u64cd\u4f5c\u7cfb\u7edf\u8fd0\u884c\u7684\u65f6\u5019\u7ec8\u6b62\u3002

    \u90a3\u4e48\u4e00\u79cd\u529e\u6cd5\u5c31\u662f\u6211\u4eec\u9012\u5f52\u5730 fork() \u4e24\u6b21\uff0c\u7136\u540e\u7ec8\u6b62\u7b2c\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u5373\u7ec8\u6b62\u7b2c\u4e8c\u4e2a\u8fdb\u7a0b\u7684 parent\uff0c\u8fd9\u6837\u5b83\u5c31\u80fd\u6210\u4e3a\u4e00\u4e2a\u5b64\u513f\u8fdb\u7a0b\uff0c\u8fdb\u800c\u88ab init/systemd \u63a5\u7ba1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u95f4\u901a\u4fe1","title":"\u8fdb\u7a0b\u95f4\u901a\u4fe1","text":"

    \u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u53d7\u5230\u5176\u5b83\u8fdb\u7a0b\u7684\u5f71\u54cd\uff0c\u6216\u4f1a\u5f71\u54cd\u5176\u5b83\u8fdb\u7a0b\uff0c\u90a3\u4e48\u6211\u4eec\u79f0\u4e4b\u4e3a\u534f\u4f5c\u8fdb\u7a0b(cooperation process)\uff0c\u800c\u8fdb\u7a0b\u95f4\u901a\u4fe1(Inter-Process Communication, IPC)\u652f\u6301\u4e86\u8fdb\u7a0b\u534f\u4f5c\uff0c\u4ee5\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u7684\u6570\u636e\u4ea4\u6362\u3002

    Communications models. (a) Shared memory. (b) Message passing.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8fdb\u7a0b\u8c03\u5ea6","title":"\u8fdb\u7a0b\u8c03\u5ea6","text":"

    \u591a\u9053\u6280\u672f\u5f15\u5165\u540e\uff0c\u5185\u5b58\u4e2d\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\uff0c\u8fdb\u7a0b\u7684\u6570\u91cf\u6211\u4eec\u79f0\u4e4b\u4e3a\u591a\u9053\u7684\u5ea6(degree of multiprogramming)\u3002\u4e00\u6bb5\u65f6\u95f4\u5185\u82e5\u5e72\u8fdb\u7a0b\u5e76\u53d1\u6267\u884c\uff0c\u56e0\u6b64\u8c03\u5ea6\u95ee\u9898(scheduling)\u2014\u2014CPU scheduler \u5c06\u51b3\u5b9a\u5728\u4f55\u65f6\u5c06 CPU \u8d44\u6e90\u5206\u914d\u7ed9\u54ea\u4e00\u4e2a\u5c31\u7eea\u8fdb\u7a0b\uff0c\u4f7f\u4e4b\u8fdb\u5165\u8fd0\u884c\u6001\u2014\u2014\u8fd9\u4e2a\u95ee\u9898\u5c31\u5f88\u91cd\u8981\u4e86\u3002\u603b\u4f53\u6765\u8bb2\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u9ad8\u6548\u3001\u516c\u5e73\u7684\u7684\u8c03\u5ea6\uff0c\u4ee5\u6b64\u4fdd\u8bc1 CPU \u5229\u7528\u7387\u8db3\u591f\u9ad8\uff0c\u540c\u65f6\u53c8\u4fdd\u8bc1\u8ba1\u7b97\u673a\u529f\u80fd\u6b63\u5e38\u8fd0\u4f5c\u3002

    Diagram of process state.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u65f6\u673a","title":"\u8c03\u5ea6\u7684\u65f6\u673a","text":"

    \u6211\u4eec\u518d\u6b21\u5ba1\u89c6\u8fdb\u7a0b\u72b6\u6001\u7684 FSM\uff0c\u53d1\u73b0\u6240\u6709\u72b6\u6001\u90fd\u662f\u56f4\u7ed5\u7740 ready/running \u5c55\u5f00\u7684\uff0c\u800c CPU \u5177\u4f53\u8d44\u6e90\u5206\u914d\u7684\u8fc7\u7a0b\u4e5f\u6b63\u662f\u901a\u8fc7\u8fd9\u4e24\u4e2a\u72b6\u6001\u7684\u8f6c\u5316\u4f53\u73b0\u7684\u3002\u800c \u2776 \u5f53\u8fd0\u884c\u6001\u7684\u8fdb\u7a0b\u7531\u4e8e\u67d0\u4e9b\u539f\u56e0\u9700\u8981\u4e3b\u52a8\u79bb\u5f00\u8fd0\u884c\u6001\u65f6\uff0c\u6216 \u2777 \u5f53\u5c31\u7eea\u6001\u7684\u67d0\u4e2a\u8fdb\u7a0b\u9700\u8981\u7acb\u523b\u5f97\u5230 CPU \u8d44\u6e90\u65f6\uff0cscheduler \u4f1a\u8fdb\u884c\u8c03\u5ea6\u3002\u4e0a\u9762\u8fd9\u53e5\u8bdd\u53cd\u5e94\u5728\u3000FSM \u4e0a\uff0c\u5c31\u662f \u2776 \u8fdb\u7a0b\u4ece\u8fd0\u884c\u6001\u8f6c\u5316\u4e3a\u5176\u5b83\u72b6\u6001\uff0c\u5373\u7bad\u5934\u4ece running \u51fa\u53d1\u5411\u5916\uff1b\u2777 \u8fdb\u7a0b\u4ece\u5176\u5b83\u72b6\u6001\u8f6c\u5316\u4e3a\u5c31\u7eea\u6001\uff0c\u5373\u7bad\u5934\u4ece\u5916\u6307\u5411 ready\uff0c\u8fd9\u91cc\u5176\u5b9e\u8fd8\u6697\u542b\u4e86\u4e00\u4e2a ready \u6307\u5411 ready \u7684\u7bad\u5934\uff0c\u5728\u4f8b\u5982 priority aging \u7684\u60c5\u51b5\u4e0b\uff0cready \u4e2d\u53ef\u80fd\u7a81\u7136\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\u8db3\u591f\u5927\u4e86\u5c31\u4f1a\u53d1\u751f\u62a2\u5360\u5f0f\u8c03\u5ea6\u3002\u4e0a\u9762\u63cf\u8ff0\u7684\u8fd9\u4e24\u79cd\u65f6\u673a\u4e0b\u4ea7\u751f\u7684\u8c03\u5ea6\uff0c\u5c31\u5206\u522b\u5b9a\u4e49\u4e3a\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6(non-preemptive scheduling)\u548c\u62a2\u5360\u5f0f\u8c03\u5ea6(preemptive scheduling)\u3002

    Diagram of process state.

    \u4e24\u8005\u672c\u8d28\u4e0a\u7684\u533a\u522b\u5c31\u662f\uff0c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u662f\u7531\u5df2\u7ecf\u62e5\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u4e3b\u52a8\u91ca\u653e CPU \u8d44\u6e90\u5f15\u8d77\u7684\uff0c\u800c\u62a2\u5360\u5f0f\u8c03\u5ea6\u5219\u662f\u4e0d\u5360\u6709\u8d44\u6e90\u7684\u8fdb\u7a0b\u7d22\u53d6 CPU \u8d44\u6e90\u6210\u529f\u5f15\u8d77\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7684\u8fc7\u7a0b","title":"\u8c03\u5ea6\u7684\u8fc7\u7a0b","text":"

    \u7531 CPU scheduler \u9009\u62e9\u54ea\u4e00\u4e2a\u5c31\u7eea\u6001\u7684\u5c06\u8981\u88ab\u6267\u884c\u540e\uff0c\u7531 dispatcher \u6765\u5b8c\u6210\u5177\u4f53\u7684\u5207\u6362\u5de5\u4f5c\u5305\u62ec\uff1a

    1. \u5728\u4e24\u4e2a\u8fdb\u7a0b\u95f4\u8fdb\u884c\u4e0a\u4e0b\u6587\u5207\u6362\uff1b
    2. \u5207\u6362\u5230\u7528\u6237\u6001\uff1b
    3. \u8df3\u8f6c\u5230\u7528\u6237\u7a0b\u5e8f\u4e2d\u5408\u9002\u7684\u4f4d\u7f6e\u4ee5\u7ee7\u7eed\u8fdb\u7a0b\u6267\u884c\uff1b

    \u800c\u4ece dispatcher \u505c\u6b62\u4e0a\u4e00\u4e2a\u8fd0\u884c\u65f6\u7684\u8fdb\u7a0b\uff0c\u5b8c\u6210\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u5e76\u542f\u52a8\u4e0b\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5ef6\u65f6\uff0c\u79f0\u4e3a dispatch latency\u3002

    \u4e0a\u4e0b\u6587\u5207\u6362

    \u5207\u6362\u8fdb\u7a0b\u7684\u65f6\u5019\u9700\u8981\u4fdd\u5b58\u201c\u73b0\u573a\u201d\uff0c\u5e76\u5728\u4e0b\u4e00\u6b21\u62ff\u51fa\u8fd9\u4e2a\u8fdb\u7a0b\u51c6\u5907\u6267\u884c\u4e4b\u524d\u6062\u590d\u201c\u73b0\u573a\u201d\uff0c\u4ee5\u6b64\u6765\u4fdd\u8bc1\u8fdb\u7a0b\u6267\u884c\u7684\u4e00\u81f4\u6027\u3002\u8fd9\u91cc\u63d0\u5230\u7684\u201c\u73b0\u573a\u201d\u88ab\u79f0\u4e3a\u4e0a\u4e0b\u6587(context)\uff0c\u8868\u793a\u4e00\u79cd\u201c\u8bed\u5883\u201d\uff1b\u800c\u4fdd\u62a4-\u6062\u590d\u7684\u8fc7\u7a0b\uff0c\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u7684\u4e0a\u4e0b\u6587\u5207\u6362(context switch)\u3002

    \u5176\u4e2d\uff0c\u4e0a\u4e0b\u6587\u53ef\u80fd\u5305\u62ec \u2460 CPU \u5bc4\u5b58\u5668\u4e2d\u7684\u503c\uff0c\u2461 \u8fdb\u7a0b\u72b6\u6001\uff0c\u2462 \u5185\u5b58\u7684\u7ba1\u7406\u4fe1\u606f\u7b49\u3002

    \u4e0a\u4e0b\u6587\u5207\u6362\u7684\u76f8\u5173\u5185\u5bb9\u5728 Lab2 \u91cc\u6709\u6240\u6d89\u53ca\uff0c\u9700\u8981\u5b9e\u73b0\u4e00\u4e2a\u7b80\u5355\u7684\u4e0a\u4e0b\u6587\u5207\u6362\u3002

    (a) Diagram showing context switch from process to process. (b) Role of dispatcher.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8c03\u5ea6\u7b97\u6cd5","title":"\u8c03\u5ea6\u7b97\u6cd5","text":"

    \u5728\u8ba8\u8bba\u6709\u54ea\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u77e5\u9053\u600e\u6837\u7b97\u4e00\u4e2a\u597d\u7684\u8c03\u5ea6\u7b97\u6cd5\u3002\u7c7b\u4f3c\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u8bc4\u4ef7\uff0c\u8c03\u5ea6\u7b97\u6cd5\u7684\u8bc4\u4ef7\u6807\u51c6\u4e5f\u4e0d\u662f\u5355\u4e00\u7684\uff1b\u5bf9\u5e94\u7684\uff0c\u4e0d\u540c\u8c03\u5ea6\u7b97\u6cd5\u6709\u5404\u81ea\u7684\u4f18\u7f3a\u70b9\uff0c\u9700\u8981\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u548c\u9700\u6c42\u6709\u6240\u9009\u62e9\u3002\u901a\u5e38\u6765\u8bf4\u6709\u8fd9\u4e9b\u8c03\u5ea6\u7b97\u6cd5\u7684\u6307\u6807(scheduling criteria)\uff1a

    \u4e0a\u9762\u4e94\u4e2a\u524d\u4e24\u4e2a\u8d8a\u5927\u8d8a\u597d\uff0c\u540e\u4e09\u4e2a\u8d8a\u5c0f\u8d8a\u597d\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u5f00\u59cb\u4ecb\u7ecd\u5404\u79cd\u8c03\u5ea6\u7b97\u6cd5\uff0c\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5982\u4e0b\u8c03\u5ea6\u7b97\u6cd5\u4e2d\u5b58\u5728\u4e00\u4e9b\u7406\u60f3\u5316\u7684\u5efa\u6a21\uff08\u4f8b\u5982\u5047\u8bbe\u6211\u4eec\u77e5\u9053\u8fdb\u7a0b\u9700\u8981\u4f7f\u7528\u591a\u4e45 CPU\uff09\uff0c\u800c\u6211\u4eec\u91cd\u70b9\u9700\u8981\u638c\u63e1\u5b83\u7684\u601d\u8def\uff0c\u505a\u5230\u80fd\u753b\u7518\u7279\u56fe\u3001\u80fd\u7b97\u65f6\u95f4\u3002\u6b64\u5916\uff0c\u8fd9\u91cc\u6211\u4eec\u4ee5\u201c\u591a\u9053\u201d\u4e3a\u8bed\u5883\uff0c\u5373\u5982\u679c\u4e0d\u662f\u7279\u522b\u8bf4\u660e\uff0c\u4e0d\u8003\u8651\u5206\u65f6\u6280\u672f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--first-come-first-serve-fcfs","title":"\u7b97\u6cd5 | First-Come, First-Serve (FCFS)","text":"

    FCFS \u662f\u6700\u57fa\u672c\u7684\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65b9\u6cd5\u5c31\u662f\u6309\u7167\u8fdb\u7a0b\u5148\u6765\u540e\u5230\u7684\u987a\u5e8f\u8fdb\u884c\u8c03\u5ea6\uff0c\u53ef\u4ee5\u5f88\u7b80\u5355\u5730\u901a\u8fc7\u4e00\u4e2a FIFO \u7684\u961f\u5217\u5b9e\u73b0\u3002FCFS \u6700\u5927\u7684\u4f18\u70b9\u5c31\u662f\u5b9e\u73b0\u7b80\u5355\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--shortest-job-first-sjf--shortest-remaining-time-first-srtf","title":"\u7b97\u6cd5 | Shortest-Job-First (SJF) / Shortest-Remaining-Time-First (SRTF)","text":"

    SJF \u7684\u601d\u8def\u662f\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u5c0f\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u9700\u8981\u8fd0\u884c\u65f6\u95f4\u5f88\u957f\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\uff0c\u6b64\u5916\uff0c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u8fdb\u7a0b\u8fd0\u884c\u65f6\u95f4\u6709\u591a\u4e45\u3002

    \ud83c\udf30 \u9898\u9762\u89e3\u6790

    \u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

    \u73b0\u5728\u5b83\u4eec\u6309\u7167\u987a\u5e8f\u8fdb\u5165 ready queue\uff0c\u8bf7\u5206\u522b\u8ba1\u7b97 FCFS \u4e0b\u548c SJF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

    \u9996\u5148\u770b FCFS\uff0c\u5373\u6309\u7167\u987a\u5e8f\u6267\u884c\uff0c\u753b\u51fa\u7518\u7279\u56fe\uff1a

    gantt\n    title FCFS\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P1: a, 00, 24\n    P2: b, 24, 27\n    P3: c, 27, 30

    \u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 24 + 27) / 3 = 17\\)\u3002

    \u73b0\u5728\u6309\u7167 SJF \u6765\uff0c\u987a\u5e8f\u53d8\u4e3a P2 \u548c P3 \u5148\u6267\u884c\uff1a

    gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section processes\n    P2: a, 00, 03\n    P3: b, 03, 06\n    P1: c, 06, 30

    \u4e8e\u662f\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 3 + 6) / 3 = 3\\)\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4f7f\u7528 SJF \u4ee5\u540e\u5bf9\u4e8e\u8fd9\u79cd\u524d\u9762\u653e\u4e86\u4e2a\u5927\u4efb\u52a1\u7684\u60c5\u51b5\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u5927\u5927\u51cf\u5c11\u3002

    \u8fd9\u79cd\u505a\u6cd5\u53c8\u88ab\u79f0\u4e3a Shortest-Next-CPU-Burst\uff0c\u5b83\u662f\u4e00\u79cd\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u7b97\u6cd5\uff0c\u4f46\u5047\u8bbe\u6211\u4eec\u5728\u6267\u884c\u4e00\u4e2a\u8fdb\u7a0b\u7684\u8fc7\u7a0b\u4e2d\uff0c\u6709\u4e00\u4e2a\u65b0\u7684\u8fdb\u7a0b\u52a0\u5165\u4e86 ready queue\uff0c\u800c\u4e14\u8fd9\u4e2a\u8fdb\u7a0b\u7684\u6267\u884c\u65f6\u95f4\u6bd4\u6b63\u5728\u8fd0\u884c\u7684\u8fdb\u7a0b\u7684\u5269\u4f59\u65f6\u95f4\u8fd8\u8981\u77ed\uff0c\u6211\u4eec\u4ecd\u7136\u9700\u8981\u7ee7\u7eed\u6267\u884c\u5b8c\u5f53\u524d\u7684\u8fdb\u7a0b\u624d\u884c\u2014\u2014\u56e0\u4e3a\u5b83\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u800c\u663e\u7136\u8fd9\u4e2a\u8fc7\u7a0b\u662f\u53ef\u4ee5\u901a\u8fc7\u62a2\u5360\u5f0f\u8c03\u5ea6\u6765\u4f18\u5316\u7684\uff0c\u4e8e\u662f\u6211\u4eec\u5f15\u5165\u4e86 Shortest-Remaining-Time-First (SRTF)\uff0c\u5176\u8868\u8ff0\u662f\uff1a\u603b\u662f\u6267\u884c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u3002\u5176\u4f18\u7f3a\u70b9\u4e0e SJF \u4e00\u81f4\u3002

    \u6211\u4eec\u53ea\u9700\u8981\u8003\u8651\u6240\u6709\u62a2\u5360\u5f0f\u8c03\u5ea6\u548c\u975e\u62a2\u5360\u5f0f\u8c03\u5ea6\u65f6\u673a\uff0c\u5e76\u9009\u62e9\u6b64\u65f6\u7684\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u7684\u8fdb\u7a0b\u8fdb\u884c\u8c03\u5ea6\u5373\u53ef\u3002

    \u5982\u4f55\u5f97\u5230\u5269\u4f59\u65f6\u95f4

    \u6211\u4eec\u77e5\u9053\uff0c\u4e00\u4e2a\u7a0b\u5e8f\u8fd0\u884c\u6240\u9700\u8981\u7684\u65f6\u95f4\u662f\u4e00\u4e2a\u65e0\u6cd5\u5728\u8fd0\u884c\u7ed3\u675f\u524d\u5f97\u5230\u7684\u6570\u636e\uff0c\u56e0\u6b64\u4f7f\u7528\u8fd9\u4e2a\u4e1c\u897f\u8fdb\u884c\u8c03\u5ea6\u5c31\u663e\u5f97\u5341\u5206\u4e0d\u5408\u7406\u3002\u4f46\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u9884\u6d4b\u7684\u65b9\u6cd5\u4f30\u8ba1\u8fd0\u884c\u7684\u5269\u4f59\u65f6\u95f4\uff0c\u4f46\u662f\u65e2\u7136\u662f\u9884\u6d4b\u5c31\u4f1a\u6709\u4e0d\u51c6\u786e\uff0c\u6240\u4ee5 SJF/SRTF \u5e76\u4e0d\u80fd\u5b9e\u73b0\u7406\u8bba\u4e0a\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u6700\u4f18\u3002\u81f3\u4e8e\u5982\u4f55\u9884\u6d4b\uff0c\u4e66\u4e0a\u63d0\u4f9b\u4e86\u4e00\u4e2a\u53eb exponential average \u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u4e0d\u5c55\u5f00\u3002

    \ud83c\udf30 \u9898\u9762\u89e3\u6790

    \u73b0\u5728\u6709\u4e09\u4e2a\u8fdb\u7a0b\uff0c\u5b83\u4eec\u5c06\u8981\u6267\u884c\u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

    \u5b83\u4eec\u5230\u8fbe ready queue \u7684\u65f6\u95f4\u5206\u522b\u5982\u4e0b\uff1a

    \u8bf7\u5206\u522b\u8ba1\u7b97 SJF \u4e0b\u548c SRTF \u4e0b\u7684\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u3002

    \u5bf9\u4e8e SJF \u6765\u8bf4\uff0c\u5728\u7b2c 0 \u65f6\u523b\uff0c\u53ea\u6709 P1 \u53ef\u7528\uff0c\u6240\u4ee5\u53ea\u80fd\u6267\u884c P1\uff1bP1 \u6267\u884c\u7ed3\u675f\u540e\u6240\u6709\u5176\u5b83\u8fdb\u7a0b\u90fd\u53ef\u7528\u4e86\uff0c\u6b64\u65f6\u6309\u7167\u6b63\u5e38\u7684 SJF \u5373\u53ef\u5f97\u5230\u7ed3\u679c\u3002

    gantt\n    title SJF\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 08\n\n    section P2\n    ready: b, 01, 08\n    run: e, 08, 12\n\n    section P3\n    ready: c, 02, 17\n    run: 17, 26\n\n    section P4\n    ready: d, 03, 12\n    run: f, 12, 17

    \u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\((0 + 7 + 15 + 9) / 4 = 7.75\\)\u3002

    \u5bf9\u4e8e SRFT \u6765\u8bf4\uff0c\u540c\u6837\u4ece P1 \u5f00\u59cb\u6267\u884c\uff0c\u4f46\u662f\u7b2c\u4e00\u79d2 P2 \u8fdb\u5165\uff0c\u53d1\u73b0\u6b64\u65f6 P1 \u8fd8\u5269\u4e0b 7\uff0c\u800c P2 \u53ea\u9700\u8981 4\uff0c\u4e8e\u662f P2 \u9700\u8981\u62a2\u5360 P1 \u7684\u8d44\u6e90\uff1b\u4e4b\u540e\u7684\u8fc7\u7a0b\u7c7b\u4f3c

    gantt\n    dateFormat ss\n    axisFormat %S\n\n    section P1\n    run: a, 00, 01\n    ready(rest 7): e, 01, 10\n    run: g, 10, 17\n\n    section P2\n    run: b, 01, 05\n\n    section P3\n    ready(rest 9): c, 02, 17\n    run: h, 17, 26\n\n    section P4\n    ready(rest 5): d, 03, 05\n    run: f, 05, 10

    \u6b64\u65f6\u5e73\u5747\u7b49\u5f85\u65f6\u95f4\u4e3a \\(((0+9) + 0 + 15 + 2) / 4 = 6.5\\)\u3002

    \u53ef\u4ee5\u53d1\u73b0 SRTF \u80fd\u591f\u63d0\u5347 SJF \u7684\u6548\u7387\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--round-robin-rr","title":"\u7b97\u6cd5 | Round-Robin (RR)","text":"

    RR \u8c03\u5ea6\u5c31\u662f\u4f7f\u7528\u5206\u65f6\u6280\u672f\u540e\u7684 FCFS \u8c03\u5ea6\uff0c\u56e0\u6b64\u5b83\u4e5f\u662f\u975e\u62a2\u5360\u5f0f\u7684\u3002\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u6700\u591a\u8fde\u7eed\u6267\u884c\u4e00\u4e2a\u65f6\u95f4\u7247\u7684\u957f\u5ea6\uff0c\u5b8c\u6210\u540e\u88ab\u63d2\u5165\u5230 FIFO ready queue \u7684\u672b\u5c3e\uff0c\u5e76\u53d6\u51fa FIFO ready queue \u7684\u961f\u9996\u8fdb\u884c\u6267\u884c\u3002

    \u6211\u4eec\u4e4b\u524d\u63d0\u5230\u5206\u65f6\u7684\u65f6\u5019\u4e5f\u8bf4\u8fc7\uff0c\u5206\u65f6\u6280\u672f\u901a\u8fc7\u4f18\u5316\u54cd\u5e94\u65f6\u95f4\u89e3\u51b3\u4e86\u7528\u6237\u4ea4\u4e92\u95ee\u9898\uff0cRR \u8c03\u5ea6\u867d\u7136\u76f8\u6bd4 SJF \u6709\u4e86\u66f4\u957f\u7684\u7b49\u5f85\u65f6\u95f4\uff0c\u4f46\u662f\u6709\u4e86\u66f4\u77ed\u7684\u54cd\u5e94\u65f6\u95f4\uff0c\u800c\u5b9e\u9645\u76f4\u63a5\u5f71\u54cd\u7528\u6237\u4ea4\u4e92\u95ee\u9898\u7684\u5e94\u8be5\u662f\u54cd\u5e94\u65f6\u95f4\u3002

    \u4e00\u4e2a\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0cRR \u8c03\u5ea6\u6709\u4e00\u4e2a\u201c\u8d85\u53c2\u6570\u201d\uff0c\u5373\u65f6\u95f4\u7247\u7684\u957f\u5ea6\u3002\u7406\u8bba\u4e0a\uff0c\u65f6\u95f4\u7247\u7ea6\u77ed\uff0c\u54cd\u5e94\u65f6\u95f4\u8d8a\u77ed\uff1b\u4f46\u66f4\u77ed\u7684\u65f6\u95f4\u7247\u5c06\u5e26\u6765\u66f4\u9891\u7e41\u7684\u8fdb\u7a0b\u5207\u6362\uff0c\u4ece\u800c\u5e26\u6765\u66f4\u591a\u7684 dispatch latency\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7b97\u6cd5--priority-scheduling","title":"\u7b97\u6cd5 | Priority Scheduling","text":"

    \u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u601d\u8def\u662f\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u6709\u4e00\u4e2a\u4f18\u5148\u7ea7\uff0c\u5f53\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u9009\u62e9\u4f18\u5148\u7ea7\u6700\u9ad8\u7684\u8fdb\u7a0b\u5148\u8fd0\u884c\u3002\u8fd9\u79cd\u7b97\u6cd5\u7684\u4f18\u70b9\u662f\uff0c\u80fd\u591f\u4fdd\u8bc1\u4f18\u5148\u7ea7\u9ad8\u7684\u8fdb\u7a0b\u4f18\u5148\u8fd0\u884c\uff1b\u4f46\u662f\u7f3a\u70b9\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u5f88\u9ad8\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u4e00\u76f4\u88ab\u63a8\u8fdf\uff0c\u4ece\u800c\u5bfc\u81f4\u201c\u9965\u997f\u201d\u73b0\u8c61\u3002

    \u4f60\u53ef\u80fd\u53d1\u73b0\u4e86\uff0c\u5982\u679c\u628a\u4e0a\u9762\u8fd9\u53e5\u8bdd\u7684\u201c\u4f18\u5148\u7ea7\u6700\u9ad8\u201d\u6539\u6210\u201c\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d/\u201c\u5269\u4f59\u8fd0\u884c\u65f6\u95f4\u6700\u77ed\u201d\uff0c\u90a3\u5c31\u548c SJF/SRTF \u4e00\u6a21\u4e00\u6837\u4e86\uff0cSJF/SRTF \u5b9e\u9645\u4e0a\u5c31\u662f\u4f18\u5148\u7ea7\u8c03\u5ea6\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u56e0\u800c\u4f18\u5148\u7ea7\u8c03\u5ea6\u5f53\u7136\u662f\u53ef\u4ee5\u5b9e\u73b0\u62a2\u5360\u5f0f\u548c\u975e\u62a2\u5360\u5f0f\u4e24\u79cd\u7684\u3002

    \u6b64\u5916\uff0c\u4f18\u5148\u7ea7\u7684\u5206\u914d\u53ef\u4ee5\u6839\u636e\u4f7f\u7528\u9700\u6c42\u8fdb\u884c\u8bbe\u8ba1\uff0c\u5b83\u53ef\u80fd\u662f\u4e00\u4e9b\u6d4b\u91cf\u6570\u636e\uff0c\u4e5f\u53ef\u80fd\u5177\u6709\u4e00\u4e9b\u88ab\u8d4b\u4e88\u7684\u610f\u4e49\uff0c\u751a\u81f3\u53ef\u4ee5\u662f\u4e00\u4e9b\u590d\u5408\u7684\u503c\uff1b\u4f18\u5148\u7ea7\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u662f\u9759\u6001\u7684\uff0c\u5148\u524d\u6211\u4eec\u63d0\u5230\u8fc7\u7684\u9965\u997f\u95ee\u9898\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7\u52a8\u6001\u7684\u4f18\u5148\u7ea7\u6765\u89e3\u51b3\uff1a\u4f18\u5148\u7ea7\u968f\u7740\u7b49\u5f85\u65f6\u95f4\u589e\u52a0\u4e0d\u65ad\u589e\u957f\uff0c\u7b49\u5f85\u8fc7\u4e45\u7684\u4efb\u52a1\u5c31\u4f1a\u88ab\u8d4b\u4e88\u8f83\u9ad8\u7684\u4f18\u5148\u7ea7\uff0c\u4ee5\u6b64\u907f\u514d\u9965\u997f\u7684\u53d1\u751f\uff0c\u8fd9\u79cd\u7b56\u7565\u53eb priority aging\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Queue Scheduling","text":"

    \u65e2\u7136\u8c03\u5ea6\u7b97\u6cd5\u591a\u79cd\u591a\u6837\uff0c\u4ed6\u4eec\u9002\u914d\u4e0d\u540c\u7684\u9700\u6c42\uff0c\u90a3\u80fd\u5426\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u4f7f\u7528\u7279\u5b9a\u7b97\u6cd5\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06 ready queue \u5206\u6210\u591a\u4e2a\u961f\u5217\uff0c\u6bcf\u4e2a\u961f\u5217\u4f7f\u7528\u4e0d\u540c\u7684\u8c03\u5ea6\u7b97\u6cd5\uff0c\u7136\u540e\u518d\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u8fd9\u79cd\u65b9\u6cd5\u88ab\u79f0\u4e3a\u591a\u7ea7\u961f\u5217\u8c03\u5ea6(multilevel queue scheduling)\u3002

    \ud83c\udf30

    \u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u6309\u7167\u4f18\u5148\u7ea7\u5148\u540e\uff0c\u53ef\u80fd\u6709\u8fd9\u4e48\u4e9b\u961f\u5217\uff1a

    1. Real-time processes
    2. System processes
    3. Interactive processes
    4. Batch processes

    \u5b83\u4eec\u7684\u4f18\u5148\u7ea7\u968f\u7740 1 -> 4 \u9012\u51cf\uff0c\u800c\u5f53\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u4e2d\u5b58\u5728\u4efb\u52a1\u65f6\uff0c\u4f18\u5148\u7ea7\u4f4e\u7684\u961f\u5217\u4fbf\u4e0d\u4f1a\u53c2\u4e0e\u8c03\u5ea6\u3002\u4e0d\u4ec5\u5982\u6b64\uff0c\u9ad8\u4f18\u5148\u7ea7\u7684\u961f\u5217\u4e2d\u51fa\u73b0\u65b0\u7684\u4efb\u52a1\u65f6\uff0c\u4e5f\u4f1a\u62a2\u5360\u6b63\u5728\u8fd0\u884c\u7684\u4f4e\u4f18\u5148\u7ea7\u961f\u5217\u7684\u4efb\u52a1\u3002

    \ud83c\udf30

    \u53c8\u6bd4\u5982\uff0c\u4e00\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u53ef\u80fd\u5206\u524d\u53f0(foreground)\u7a0b\u5e8f\u961f\u5217\u548c\u540e\u53f0(background)\u7a0b\u5e8f\u961f\u5217\uff0c\u800c\u6211\u4eec\u4f7f\u7528\u65f6\u95f4\u7247\u6765\u8fdb\u884c\u961f\u5217\u95f4\u8c03\u5ea6\uff0c\u4f46\u524d\u53f0\u5360\u7528 80% \u7684\u65f6\u95f4\uff0c\u800c\u540e\u53f0\u5360\u7528 20% \u7684\u65f6\u95f4\u3002

    \u800c\u5728\u961f\u5217\u5185\u90e8\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u6839\u636e\u9700\u6c42\u4f7f\u7528\u4e0d\u540c\u7684\u961f\u5217\u5185\u8c03\u5ea6\u7b97\u6cd5\u3002\u5728\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u7531\u4e8e\u524d\u53f0\u7a0b\u5e8f\u5f80\u5f80\u8981\u6c42\u66f4\u597d\u7684\u54cd\u5e94\u65f6\u95f4\u8868\u73b0\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 RR \u8c03\u5ea6\uff1b\u800c\u5728\u540e\u53f0\u4f7f\u7528 FCFS \u8c03\u5ea6\u3002

    Windows XP Scheduling

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u8bbe\u8ba1--multilevel-feedback-queue-scheduling","title":"\u8bbe\u8ba1 | Multilevel Feedback Queue Scheduling","text":"

    \u66f4\u8fdb\u4e00\u6b65\uff0cMultilevel Feedback Queue Scheduling \u5728 Multilevel Queue Scheduling \u7684\u57fa\u7840\u4e0a\uff0c\u5141\u8bb8\u8fdb\u7a0b\u5728\u961f\u5217\u95f4\u8f6c\u79fb\uff0c\u4ee5\u6b64\u5b9e\u73b0\u66f4\u7075\u6d3b\u66f4\u79d1\u5b66\u7684\u8c03\u5ea6\u3002\u4f8b\u5982\uff0c\u4e00\u4e2a\u8fdb\u7a0b\u5982\u679c\u4f7f\u7528\u4e86\u8fc7\u957f\u7684 CPU \u65f6\u95f4\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u4f4e\u7684\u961f\u5217\uff1b\u76f8\u53cd\uff0c\u5982\u679c\u4e00\u4e2a\u8fdb\u7a0b\u7b49\u5f85\u4e86\u592a\u4e45\uff0c\u5b83\u53ef\u80fd\u88ab\u79fb\u52a8\u5230\u4f18\u5148\u7ea7\u66f4\u9ad8\u7684\u961f\u5217\u3002

    \u5f53\u7136\uff0c\u76f8\u5bf9\u5e94\u7684\uff0c\u7b97\u6cd5\u590d\u6742\u5ea6\u4e5f\u4f1a\u63d0\u9ad8\u4e0d\u5c11\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u7ebf\u7a0b","title":"\u7ebf\u7a0b","text":"

    \u7ebf\u7a0b\u662f\u4e00\u79cd\u8f7b\u91cf\u7ea7\u7684\u8fdb\u7a0b\uff0c\u5b83\u5728\u8fdb\u7a0b\u7684\u57fa\u7840\u4e0a\u8fdb\u884c\u5212\u5206\uff0c\u662f\u8fdb\u7a0b\u5185\u7684\u4e00\u4e2a\u53ef\u8c03\u5ea6\u7684\u6267\u884c\u5355\u5143\uff0c\u4ee5\u51cf\u5c0f\u8fdb\u7a0b folk \u548c\u5207\u6362\u7684\u5f00\u9500\u4e3a\u76ee\u7684\u3002

    \u540c\u4e00\u8fdb\u7a0b\u7684\u82e5\u5e72\u7ebf\u7a0b\u5171\u4eab\u4ee3\u7801\u3001\u6570\u636e\u7b49\u201c\u76f8\u5bf9\u9759\u6001\u201d\u7684\u8d44\u6e90\uff0c\u800c\u5404\u81ea\u7ef4\u62a4\u5bc4\u5b58\u5668\u3001\u6808\u3001PC \u7b49\u201c\u76f8\u5bf9\u52a8\u6001\u201d\u7684\u8d44\u6e90\uff1b\u6216\u8005\u8bf4\u7ebf\u7a0b\u53ea\u62e5\u6709\u4e00\u4e9b\u8fd0\u884c\u4e2d\u5fc5\u4e0d\u53ef\u7701\u7684\u8d44\u6e90\uff0c\u800c\u6240\u6709\u5176\u5b83\u8d44\u6e90\u90fd\u5c5e\u4e8e\u8fdb\u7a0b\uff0c\u7ebf\u7a0b\u4e0e\u8fdb\u7a0b\u4e2d\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8fd9\u4e9b\u8d44\u6e90\uff0c\u4ee5\u6b64\u6765\u51cf\u5c11\u8fdb\u7a0b\u521b\u5efa\u8fc7\u7a0b\u4e2d\u590d\u5236\u4ee3\u7801\u6bb5\u7b49\u8d44\u6e90\u65f6\u5e26\u6765\u7684\u4e0d\u5c0f\u5f00\u9500\u3002

    \u7ebf\u7a0b\u5929\u751f\u548c\u540c\u4e00\u8fdb\u7a0b\u5185\u7684\u5176\u5b83\u7ebf\u7a0b\u5171\u4eab\u8d44\u6e90\uff0c\u56e0\u6b64\u540c\u8fdb\u7a0b\u5185\u7ebf\u7a0b\u5929\u751f\u5c31\u6709\u7ebf\u7a0b\u95f4\u901a\u4fe1\u7684\u80fd\u529b\u3002\u540c\u65f6\uff0c\u7531\u4e8e\u5c06\u8fdb\u7a0b\u8fdb\u884c\u4e86\u518d\u5212\u5206\uff0c\u4e00\u65b9\u9762\u5728\u786c\u4ef6\u652f\u6301\u7684\u60c5\u51b5\u4e0b\u80fd\u66f4\u597d\u5730\u9002\u914d\u5e76\u884c\uff0c\u53e6\u4e00\u65b9\u9762\u4e5f\u80fd\uff08\u4ee3\u4ef7\u66f4\u5c0f\u5730\uff09\u8ba9\u4efb\u52a1\u7684\u7c92\u5ea6\u53d8\u5c0f\uff0c\u6b64\u65f6\u53ef\u4ee5\u5c06\u6574\u4e2a\u8fdb\u7a0b\u7684\u963b\u585e\u8f6c\u79fb\u5230\u5355\u4e2a\u7ebf\u7a0b\u7684\u963b\u585e\u4e0a\uff0c\u8fdb\u4e00\u6b65\u51cf\u5c11\u54cd\u5e94\u65f6\u95f4\u3002

    \u5f53\u7136\uff0c\u7531\u4e8e\u8fd9\u91cc\u5b58\u5728\u4e00\u4e2a\u90e8\u5206\u6574\u4f53\u7684\u5173\u7cfb\uff0c\u5373\u5b58\u5728\u4e00\u4e2a\u201c\u5c06\u82e5\u5e72\u9e21\u86cb\u653e\u5728\u540c\u4e00\u4e2a\u7bee\u5b50\u91cc\u201d\u7684\u95ee\u9898\uff0c\u867d\u7136\u5c06\u82e5\u5e72\u4efb\u52a1\u90fd\u653e\u5230\u4e00\u4e2a\u8fdb\u7a0b\u7684\u591a\u7ebf\u7a0b\u53ef\u4ee5\u63d0\u9ad8\u6548\u7387\uff0c\u4f46\u662f\u4e00\u65e6\u201c\u7bee\u5b50\u201d\u574f\u4e86\uff0c\u90a3\u6240\u6709\u201c\u9e21\u86cb\u201d\u90fd\u65e0\u6cd5\u5e78\u514d\uff1b\u5176\u6b21\uff0c\u867d\u7136\u5929\u7136\u7684\u5171\u4eab\u5c5e\u6027\u8ba9\u7ebf\u7a0b\u80fd\u66f4\u65b9\u4fbf\u5730\u8fdb\u884c\u7ebf\u7a0b\u95f4\u901a\u4fe1\uff0c\u4f46\u4e5f\u5e26\u6765\u4e86\u5185\u5b58\u4fdd\u62a4\u7684\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit1/#\u591a\u7ebf\u7a0b\u6a21\u578b","title":"\u591a\u7ebf\u7a0b\u6a21\u578b","text":"

    \u6309\u7167\u7ebf\u7a0b\u5212\u5206\u7684\u5b9e\u73b0\u4f4d\u7f6e\uff0c\u591a\u7ebf\u7a0b\u6a21\u578b\u5206\u4e3a\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b(user threads)\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b(kernel threads)\u3002

    \u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u5728\u7528\u6237\u7a7a\u95f4\u5b9e\u73b0\u591a\u7ebf\u7a0b\uff0c\u5373\u4f7f\u7528\u7ebf\u7a0b\u5e93(thread library)\u5229\u7528\u5355\u4e2a\u8fdb\u7a0b\u7684\u8d44\u6e90\uff0c\u5728\u7528\u6237\u7a7a\u95f4\u7ef4\u62a4\u591a\u4e2a\u7ebf\u7a0b\uff1b\u800c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5219\u662f\u7531\u5185\u6838\u652f\u6301\u591a\u7ebf\u7a0b\u64cd\u4f5c\u3002\u4e24\u8005\u5404\u6709\u4f18\u7f3a\u70b9\uff1a

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u7528\u6237\u7ea7\u591a\u7ebf\u7a0b\u548c\u5185\u6838\u7ea7\u591a\u7ebf\u7a0b\u5e76\u4e0d\u51b2\u7a81\uff0c\u56e0\u800c\u6392\u5217\u7ec4\u5408\u540e\u5f97\u5230\u591a\u7ebf\u7a0b\u4e3b\u8981\u6709\u5982\u4e0b\u4e09\u79cd\u6a21\u578b\uff1a

    (a) Many-to-many model. (b) One-to-one model. (c) Many-to-one model.

    Linux \u7ebf\u7a0b

    1. Where memory will be allocated to \"Uninitialized Static variable\" upon initialization? \u21a9

    2. What process is the parent of the init process in Linux? \u21a9

    3. Linux CreateProcess? \u21a9

    4. Differences between fork and exec? \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/","title":"U2 Part 1: \u540c\u6b65\u5de5\u5177 | Synchronization Tools","text":"

    \u7ea6 8083 \u4e2a\u5b57 216 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 43 \u5206\u949f

    \u5f15\u5165

    \u9996\u5148\u6211\u4eec\u7b80\u5355\u63cf\u8ff0\u4ec0\u4e48\u662f\u540c\u6b65\u95ee\u9898\uff0c\u8bfb\u8005\u53ef\u4ee5\u62b1\u7740\u5bf9\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u7684\u7591\u95ee\u53bb\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u5185\u5bb9\u3002

    \u4e0d\u5fc5\u5c1d\u8bd5\u7acb\u523b\u7406\u89e3\u8fd9\u6bb5\u8bdd\uff0c\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u591f\u5728\u770b\u7684\u8fc7\u7a0b\u4e2d\u4ee5\u4e0b\u9762\u8fd9\u6bb5\u8bdd\u4e3a\u4e3b\u7ebf\uff0c\u731c\u6d4b\u63a5\u4e0b\u6765\u5c06\u8981\u5c55\u5f00\u7684\u5185\u5bb9\uff0c\u53bb\u53d1\u73b0\u95ee\u9898\u3001\u601d\u8003\u89e3\u51b3\u529e\u6cd5\u3002

    \u5728\u652f\u6301\u5e76\u53d1\u751a\u81f3\u5e76\u884c\u7684\u7cfb\u7edf\u4e2d\uff0c\u867d\u7136\u8fdb\u7a0b\u4e4b\u95f4\u76f8\u5bf9\u9694\u79bb\uff0c\u5728\u4e00\u822c\u60c5\u51b5\u4e0b\u4e92\u4e0d\u76f4\u63a5\u5e72\u6270\uff0c\u81ea\u987e\u81ea\u8dd1\u2014\u2014\u5373\u662f\u5f02\u6b65\u7684\uff1b\u4f46\u7531\u4e8e\u5404\u4e9b\u539f\u56e0\uff08\u4f8b\u5982\u90fd\u9700\u8981\u5bf9\u4e00\u5171\u4eab\u8d44\u6e90\u7684\u4fee\u6539\uff09\uff0c\u8fdb\u7a0b\u4e4b\u95f4\u7684\u6267\u884c\u9700\u8981\u4e92\u76f8\u5236\u7ea6\uff0c\u9075\u5faa\u7279\u5b9a\u7684\u5148\u540e\u987a\u5e8f\uff0c\u56e0\u6b64\u8fdb\u7a0b\u9700\u8981\u901a\u8fc7\u67d0\u4e9b\u624b\u6bb5\uff0c\u8ba9\u534f\u4f5c\u8fdb\u7a0b\u80fd\u591f\u76f4\u63a5\u6216\u95f4\u63a5\u4e86\u89e3\u5230\u5176\u5b83\u76f8\u5173\u8fdb\u7a0b\u7684\u72b6\u6001\uff0c\u4ee5\u5b9e\u73b0\u5bf9\u5f53\u524d\u8fdb\u7a0b\u6267\u884c\u7684\u63a7\u5236\uff0c\u6700\u7ec8\u5728\u5b8f\u89c2\u4e0a\u5b9e\u73b0\u540c\u6b65\u63a7\u5236\u3002

    \u800c\u4e0a\u9762\u63d0\u5230\u7684\u201c\u5404\u79cd\u539f\u56e0\u201d\u548c\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6211\u4eec\u7a0d\u540e\u5c06\u8ba8\u8bba\u7684\u4e1c\u897f\uff0c\u5176\u4e2d\uff0c\u8fd9\u91cc\u7684\u201c\u67d0\u4e9b\u624b\u6bb5\u201d\uff0c\u5c31\u662f\u6307\u6211\u4eec\u7684\u5404\u79cd\u540c\u6b65\u5de5\u5177\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u540c\u6b65\u5e76\u4e0d\u662f\u67d0\u79cd\u4e2d\u592e\u8c03\u63a7\u673a\u5236\uff0c\u800c\u66f4\u50cf\u662f\u4e00\u79cd\u201c\u534f\u8bae\u201d\uff0c\u5f53\u5404\u4e2a\u8fdb\u7a0b\u53d1\u73b0\u6709\u522b\u7684\u8fdb\u7a0b\u4e0e\u81ea\u5df1\u4ea7\u751f\u7ade\u4e89\u65f6\uff0c\u5e94\u5f53\u6709\u67d0\u79cd\u624b\u6bb5\u5141\u8bb8\u5b83\u4eec\u8fbe\u6210\u534f\u5546\uff0c\u4ee5\u51b3\u5b9a\u8c01\u5148\u8c01\u540e\u3002

    \u6211\u4eec\u6309\u7167\u95ee\u9898\u7684\u590d\u6742\u7a0b\u5ea6\uff0c\u7531\u6d45\u5165\u6df1\u5730\u8ba8\u8bba\u8fd9\u4e9b\u4e1c\u897f\u3002

    \u8bed\u5883\u95ee\u9898

    \u4e00\u4e2a\u6bd4\u8f83\u5c34\u5c2c\u7684\u95ee\u9898\u662f\uff0c\u4e66\u672c\u4e0a\u4ee5\u534f\u4f5c\u8fdb\u7a0b\u7684\u8bed\u5883\u4e3a\u5f00\u7bc7\uff0c\u4f46\u63a5\u4e0b\u6765\u8bb2\u7684\u6709\u4e9b\u5185\u5bb9\u662f\u4ee5\u7ebf\u7a0b\u540c\u6b65\u4e3a\u8bed\u5883\uff08\u5bf9\u4e8e\u8fd9\u4e2a\u95ee\u9898\u6211\u5df2\u7ecf\u653e\u5f03\u53bb\u68b3\u7406\u548c\u7ea0\u6b63\u4e66\u4e2d\u7684\u63aa\u8f9e\u4e86\uff0c\u7d2f\u4e86\uff09\uff0c\u5982\u679c\u5728\u7528\u8bcd\u4e0a\u90fd\u533a\u5206\u7ebf\u7a0b\u548c\u8fdb\u7a0b\uff0c\u90a3\u4e48\u4f1a\u53d8\u5f97\u5f88\u7e41\u6742\uff0c\u6240\u4ee5\u6211\u63a5\u4e0b\u6765\u4e00\u5f8b\u7528\u8fdb\u7a0b\u8868\u793a\uff0c\u4f46\u8bfb\u8005\u5fc3\u4e2d\u5e94\u5f53\u5bf9\u8fd9\u4e2a\u8bed\u5883\u66f4\u9002\u4e8e\u7ebf\u7a0b\u8fd8\u662f\u8fdb\u7a0b\u6709\u6240\u611f\u53d7\u3002

    \u5173\u4e8e\u8fd9\u4e9b\u65b9\u6cd5\u66f4\u9002\u5408\u5728 process \u8fd8\u662f thread \u4e0a\u88ab\u5e94\u7528\uff0c\u53ef\u4ee5\u770b\u8fd9\u4e2a\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7ade\u6001\u6761\u4ef6","title":"\u7ade\u6001\u6761\u4ef6","text":"

    Links

    \u6211\u4eec\u9700\u8981\u610f\u8bc6\u5230\uff0c\u6211\u4eec\u65e0\u6cd5\u4e00\u6b65\u5230\u4f4d\u5730\u3001in-place \u5730\u53bb\u4fee\u6539\u4e00\u4e2a\u5185\u5b58\u4e2d\u7684\u6570\u636e\uff0c\u6362\u8a00\u4e4b\uff0c\u8981\u60f3\u4fee\u6539 mem[x]\uff0c\u6211\u4eec\u9700\u8981\u4e09\u4e2a\u6b65\u9aa4\uff1a

    1. reg <- mem[x]\uff1b
    2. reg <- update(reg)\uff1b
    3. mem[x] <- reg\uff1b

    \u800c\u5982\u679c\u73b0\u5728\u4e0d\u6b62\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x]\uff0c\u4f8b\u5982\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u5b83\u4eec\u90fd\u60f3\u8981\u66f4\u65b0 mem[x]\uff0c\u53c8\u597d\u5de7\u4e0d\u5de7\u7684\u5b83\u4eec\u51e0\u4e4e\u540c\u65f6\u53d1\u751f\u8bfb\u53d6\u4e86 mem[x]\uff0c\u90a3\u4e48\u5c31\u4f1a\u51fa\u73b0\u95ee\u9898\uff1a\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8bfb\u53d6 mem[x]\uff0c\u7136\u540e\u5404\u81ea\u8ba1\u7b97\u66f4\u65b0\u540e\u7684\u503c\uff0c\u7136\u540e\u5404\u81ea\u5199\u56de mem[x]\uff1b\u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6700\u7ec8\u7684 mem[x] \u4f1a\u6bd4\u539f\u6765\u5927 3\uff1b\u4f46\u73b0\u5728\u7684 mem[x] \u53ea\u6bd4\u539f\u6765\u5927 2\uff0c\u5176\u4e2d process A \u5bf9\u5b83\u7684\u4fee\u6539\u5728\u7b2c 7 \u884c\u88ab\u8986\u76d6\u4e86\u3002

    \u7a76\u5176\u6839\u672c\uff0c\u7531\u4e8e\u6211\u4eec\u5904\u5728\u5e76\u53d1\u8bed\u5883\u4e0b\uff0c\u6240\u4ee5\u4f1a\u51fa\u73b0\u82e5\u5e72\u7528\u6237\u540c\u65f6\u6301\u6709\u4e00\u4efd\u6570\u636e\u8d44\u6e90\u7684\u60c5\u51b5\uff08\u4e3a\u4e86\u53d1\u6325\u5e76\u53d1\u7684\u4f18\u52bf\uff0c\u6211\u4eec\u4e5f\u5e94\u5f53\u5c3d\u53ef\u80fd\u7684\u6ee1\u8db3\u8fd9\u79cd\u9700\u6c42\uff09\uff0c\u903b\u8f91\u4e0a\u6570\u636e\u4fee\u6539\u8fc7\u7a0b\u5e94\u5f53\u662f\u7b26\u53f7\u7684\u3001\u77ac\u95f4\u7684\u3001\u7acb\u5373\u751f\u6548\u7684\uff1b\u4f46\u5b9e\u9645\u4e0a\u6211\u4eec\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\u3002\u5728\u8fd9\u79cd\uff08\u540e\u8005\uff09\u8bed\u5883\u4e0b\uff0c\u5982\u679c\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u53d1\u751f\u53d8\u5316\uff0c\u90a3\u4e48\u8be5\u64cd\u4f5c\u5b9e\u9645\u4e0a\u662f\u4f7f\u7528\u8fc7\u65f6\u6570\u636e\u8fdb\u884c\u8ba1\u7b97\u3002

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 t0 <- mem[x] \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502 t0 <- t0 + 1 \u2502\n\u2502 mem[x] <- t0 \u2502 t0 <- t0 + 1 \u2502 mem[x] = 2, B's t0 is out of date\n\u2502              \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7b2c\u516d\u884c\u7684 t0 \u4ecd\u7136\u5728\u7528\u88ab process A \u66f4\u65b0\u4e4b\u524d\u7684 mem[x] \u505a\u8ba1\u7b97\uff0c\u56e0\u800c\u53ef\u4ee5\u8ba4\u4e3a\u6b64\u65f6 process B \u4e2d t0 \u53c2\u4e0e\u8fd0\u7b97\u7684\u3001\u6697\u542b\u7684 mem[x] \u7684\u6570\u636e\u5df2\u7ecf\u8fc7\u65f6\u3002

    race condition

    \u7c7b\u4f3c\u8fd9\u79cd\u7684\uff0c\u7531\u4e24\u4e2a\u4fe1\u53f7\u4ea7\u751f\u7ade\u4e89\uff0c\u5176\u7ade\u4e89\u60c5\u51b5\u5f71\u54cd\u6700\u7ec8\u7ed3\u679c\u7684\u60c5\u51b5\uff0c\u88ab\u79f0\u4e3a\u7ade\u6001\u6761\u4ef6(race condition)\u3002\u5728\u4e0a\u9762\u8fd9\u4e2a\u4f8b\u5b50\u4e2d\uff0c\u8c01\u540e\u6267\u884c\uff0c\u6700\u7ec8\u7ed3\u679c\u5c31\u662f\u8c01\u7684\u8f93\u51fa\uff0c\u800c\u53e6\u4e00\u4e2a\u7528\u6237\u7684\u8f93\u51fa\u5219\u4f1a\u88ab\u8986\u76d6\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u91cc\u7684\u91cd\u70b9\u5e76\u4e0d\u662f\u201c\u5982\u4f55\u63a7\u5236\u7ade\u4e89\u7ed3\u679c\u201d\uff0c\u56e0\u4e3a\u65e0\u8bba\u7ade\u4e89\u7ed3\u679c\u5982\u4f55\uff08\u751a\u81f3\u8c01\u8d62\u4e86\u7ed3\u679c\u53ef\u80fd\u90fd\u4e00\u6837\uff09\uff0c\u53ea\u8981\u8fd9\u79cd\u201c\u7ade\u4e89\u201d\u51fa\u73b0\uff0c\u90a3\u4e48\u6700\u7ec8\u7ed3\u679c\u5c31\u6709\u53ef\u80fd\u4e0d\u7b26\u5408\u9884\u671f\u7684\u3002 \u771f\u6b63\u7684\u91cd\u70b9\u5e94\u8be5\u662f\u5982\u4f55\u907f\u514d\u8fd9\u79cd\u7ade\u4e89\u7684\u51fa\u73b0\u3002\u5c31\u6bd4\u5982\u4e0a\u9762\u7684\u4f8b\u5b50\uff0c\u65e0\u8bba\u6700\u7ec8 mem[x] \u662f 3 \u8fd8\u662f 2 \u90fd\u4e0d\u5bf9\uff0c\u7406\u60f3\u60c5\u51b5\u4e0b\u5e94\u8be5\u662f 4\u2014\u2014\u65e0\u8bba\u662f\u5148\u8fdb\u884c +1 \u8fd8\u662f\u5148\u8fdb\u884c +2\u3002

    \u6ce8\u610f

    \u867d\u7136\u4e0a\u9762\u7684\u4f8b\u5b50\u4e2d\u6211\u4eec\u6a21\u62df\u7684\u4e24\u4e2a\u7a0b\u5e8f\u662f\u6309\u7167\u76f8\u540c\u901f\u5ea6\uff0c\u4e00\u884c\u4e00\u4e2a\u6307\u4ee4\u6267\u884c\u7684\uff0c\u4f46\u662f\u6211\u4eec\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u5bf9\u6240\u6709\u8fdb\u7a0b\u6267\u884c\u7684\u901f\u5ea6\u4e0d\u5e94\u5f53\u6709\u6240\u5047\u8bbe\uff0c\u5373\u8fdb\u7a0b A \u4e0d\u77e5\u9053\u8fdb\u7a0b B \u7684\u901f\u5ea6\u3002

    \u4e0d\u4ec5\u5982\u6b64\uff0c\u6211\u4eec\u4e5f\u5e76\u4e0d\u4e00\u5b9a\u8981\u5728\u5e76\u884c\u8bed\u5883\u4e0b\u8ba8\u8bba\u8fd9\u4e2a\u95ee\u9898\uff0c\u5728\u591a\u9053\u8bed\u5883\u4e0b\u8fd9\u4e2a\u95ee\u9898\u90fd\u4f1a\u51fa\u73b0\uff0c\u4f8b\u5982\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 process A    \u2502     \u2502 process B    \u2502 mem[x] = 1 (initial)\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524     \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502              \u2502     \u2502 t0 <- mem[x] \u2502 mem[x] = 1\n\u2502 t0 <- mem[x] \u2502\u25c4\u2500\u2500\u2500\u2500\u2524 <ctx switch> \u2502 mem[x] = 1\n\u2502 t0 <- t0 + 1 \u2502     \u2502              \u2502\n\u2502 mem[x] <- t0 \u2502     \u2502              \u2502 mem[x] = 2, B's t0 is out of date\n\u2502 <ctx switch> \u251c\u2500\u2500\u2500\u2500\u25ba\u2502 t0 <- t0 + 1 \u2502\n\u2502              \u2502     \u2502 t0 <- t0 + 1 \u2502 \n\u2502              \u2502     \u2502 mem[x] <- t0 \u2502 mem[x] = 3, 2 is overwritten\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u95ee\u9898\u4f9d\u65e7\u3002

    \u6839\u636e\u4e0a\u9762\u8fd9\u4e2a\u5177\u4f53\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u53d1\u73b0\uff0c\u5982\u679c\u9700\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u6709\u4e24\u79cd\u9009\u62e9\uff1a

    1. \u8fdb\u884c\u7b26\u53f7\u7684\u8fd0\u7b97\u800c\u975e\u6570\u503c\u7684\u8fd0\u7b97\uff0c\u8fd9\u6837\u8f93\u5165\u7684\u53d8\u5316\u80fd\u5728\u4efb\u610f\u65f6\u523b\u53cd\u6620\u5728\u8f93\u51fa\u4e0a\uff0c\u8fd9\u6837\u65f6\u65f6\u523b\u523b\u90fd\u662f\u201c\u6700\u65b0\u201d\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u201c\u8fc7\u65f6\u201d\uff1b
    2. \u4fdd\u8bc1\u8bfb\u5165\u6570\u503c\u5b8c\u6210\u5230\u5199\u5165\u6570\u503c\u5b8c\u6210\u7684\u8fc7\u7a0b\u4e2d\uff0cmem[x] \u4fdd\u6301\u4e0d\u53d8\uff0c\u5373\u4e24\u4e2a\u53ef\u80fd\u7ade\u4e89\u7684\u64cd\u4f5c\uff0c\u5728\u65f6\u95f4\u4e0a\u4e0d\u5e94\u8be5\u6709\u4ea4\u96c6\uff1b

    \u663e\u7136\uff0c\u6211\u4eec\u5e94\u5f53\u9009\u62e9\u7b2c\u4e8c\u79cd\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#the-critical-section-problem","title":"The Critical-Section Problem","text":"

    \u4e3a\u4e86\u66f4\u597d\u5730\u5c55\u5f00\uff0c\u6211\u4eec\u5bf9\u4e0a\u9762\u7684\u8fd9\u79cd\u60c5\u51b5\u8fdb\u884c\u5efa\u6a21\uff0c\u5e76\u7ed9\u51fa\u89e3\u51b3 race condition \u95ee\u9898\u7684\u65b9\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u8303\u5f0f\uff1a

    \u6211\u4eec\u5e94\u5f53\u4fdd\u8bc1\u5728\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4fee\u6539 mem[x] \u7684\u65f6\u5019\uff0c\u5176\u5b83\u8fdb\u7a0b\u4e0d\u5e94\u8be5\u8bfb\u53d6 mem[x]\uff08\u81f3\u5c11\u4e0d\u5e94\u4ee5\u4fee\u6539 mem[x] \u4e3a\u76ee\u7684\u6765\u8bfb\u53d6\uff09\uff0c\u76f4\u5230\u8fd9\u4e2a\u8fdb\u7a0b\u5b8c\u6210\u5bf9 mem[x] \u7684\u4fee\u6539\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0cmem[x] \u8fd9\u4e2a\u5171\u4eab\u8d44\u6e90\u5e94\u5f53\u53ea\u80fd\u88ab\u4e00\u4e2a\u7528\u6237\u6301\u6709\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u53ea\u80fd\u88ab\u81f3\u591a\u4e00\u4e2a\u7528\u6237\u5360\u6709\u7684\u8d44\u6e90\u4e3a\u4e34\u754c\u8d44\u6e90\u3002\u800c\u7a0b\u5e8f\u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u4ee3\u7801\u6bb5\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u4e34\u754c\u533a\u6bb5(critical section, CS)Wiki\u3002

    \u90a3\u4e48\uff0c\u5bf9\u4e8e\u4e4b\u524d\u63d0\u5230\u8fc7\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u62ff\u51fa\u6765\u5bf9\u6bd4\u6a21\u62df\u7684\u90e8\u5206\u5c31\u662f critical section\u3002

    \u800c CS \u95ee\u9898\uff0c\u6307\u7684\u5c31\u662f\u5982\u4f55\u4fdd\u8bc1\u6700\u591a\u53ea\u6709\u4e00\u4e2a\u7528\u6237\u5728\u6267\u884c\u4e34\u754c\u533a\u6bb5\u7684\u4ee3\u78011\u3002

    \u56f4\u7ed5\u4e34\u754c\u533a\u6bb5\uff0c\u6211\u4eec\u5b9a\u4e49\u80fd\u591f\u89e3\u51b3 CS \u95ee\u9898\u7684\u4ee3\u7801\u5e94\u5f53\u80fd\u591f\u505a\u5982\u4e0b\u5212\u5206\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Entry Section      \u2502 <-- ask for & wait for permission to enter CS\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Exit Section       \u2502 <-- release the critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u8fdb\u7a0b\u9700\u8981\u5728 entry section \u5224\u65ad\u662f\u5426\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u5373\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u5982\u679c\u4e0d\u884c\u5219\u7b49\u5f85\uff1b\u800c\u5728\u8fdb\u5165 critical section \u540e\uff0c\u8fdb\u7a0b\u9700\u8981\u5728 exit section \u91ca\u653e\u4e34\u754c\u8d44\u6e90\uff1b\u7136\u540e\u8131\u79bb CS \u95ee\u9898\u7684\u8bed\u5883\uff0c\u8fdb\u5165 remainder section \u7ee7\u7eed\u6267\u884c\u3002

    Brainstorming

    \u6574\u4e2a\u8fc7\u7a0b\u6709\u70b9\u50cf\u8c03\u5ea6\uff0c\u7b49\u5f85\u4e34\u754c\u8d44\u6e90\u7684\u8fc7\u7a0b\u5c31\u597d\u50cf ready \u6001\u7b49\u5f85\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u7684 CPU \u8d44\u6e90\uff08CPU \u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u662f\u4e00\u79cd\u4e34\u754c\u8d44\u6e90\uff0c\u53ea\u4e0d\u8fc7\u5b83\u4e0d\u662f\u7531\u8fdb\u7a0b\u4e3b\u52a8\u5904\u7406\u548c\u7d22\u53d6\uff09\u3002

    \u65e2\u7136\u5982\u6b64\u6211\u4eec\u53ef\u4ee5\u8fc1\u79fb\u201c\u72b6\u6001\u201d\u8fd9\u4e2a\u6982\u5ff5\u3002\u6211\u4eec\u53ea\u5173\u5fc3\u76f4\u63a5\u4e0e CS \u95ee\u9898\u6709\u5173\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5b9a\u4e49\uff1a\u5c31\u7eea\u3001\u4e34\u754c\u3001\u65e0\u5173\u4e09\u4e2a\u72b6\u6001\u3002

    1. \u5c31\u7eea\u6001\uff1a\u8fdb\u7a0b\u968f\u65f6\u51c6\u5907\u597d\u8fdb\u5165 critical section\uff0c\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff1b
    2. \u4e34\u754c\u6001\uff1a\u8fdb\u7a0b\u6b63\u5728\u6267\u884c critical section\uff0c\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u8fdb\u7a0b\u6267\u884c\u5b8c critical section\uff0c\u6267\u884c exit section \u6b63\u5728\u91ca\u653e\u6301\u6709\u7684\u4e34\u754c\u8d44\u6e90\u4e2d\uff1b
    3. \u65e0\u5173\u6001\uff1a\u4e0d\u5904\u4e8e\u5c31\u7eea\u6001\u4e5f\u4e0d\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4e0d\u60f3\u8981\u6301\u6709\u4e34\u754c\u8d44\u6e90\uff0c\u6216\u662f\u4f7f\u7528\u5b8c\u5df2\u7ecf\u91ca\u653e\uff1b

    \u6839\u636e\u6211\u4eec\u5148\u524d\u7ed9\u51fa\u7684\uff0c\u89e3\u6cd5\u9700\u8981\u6ee1\u8db3\u7684\u6027\u8d28\u4e2d\u7684 mutual exclusion\uff0c\u4e0d\u80fd\u540c\u65f6\u6709\u591a\u4e2a\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\uff0c\u4f46\u662f\u53ef\u4ee5\u6709\u82e5\u5e72\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\uff0c\u800c\u65e0\u5173\u6001\u5219\u8868\u793a\u4e0d\u4f1a\u4ea7\u751f\u7ade\u4e89\uff0c\u548c\u8c03\u5ea6\u8fc7\u7a0b\u5341\u5206\u76f8\u4f3c\u3002

    \u8fd9\u4e9b\u5b9a\u4e49\u5c06\u4f1a\u5728\u6211\u4eec\u4e4b\u540e\u7684\u63a2\u7d22\u4e2d\u8d77\u4f5c\u7528\u3002

    \u540c\u65f6\uff0c\u6211\u4eec\u8981\u6c42\u89e3\u51b3\u65b9\u6848\u9700\u8981\u6ee1\u8db3\u5982\u4e0b\u6027\u8d28\uff1a

    requirements for solution to CS problem

    1. \u4e34\u754c\u4e92\u65a5(mutual exclusion)\uff1a\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\u4e34\u754c\u533a\u6bb5\u5e94\u5f53\u4e92\u76f8\u6392\u65a5\uff1b
      • \u5982\u679c\u8fdb\u7a0b \\(P_i\\) \u6b63\u5728\u6267\u884c\u5176 critical section\uff0c\u90a3\u4e48\u4e0d\u5e94\u5f53\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\uff08\u64cd\u4f5c\u540c\u4e00\u4e34\u754c\u8d44\u6e90\u7684\uff09critical section\uff1b
    2. \u9009\u62e9\u65f6\u95f4\u6709\u9650(progress)\uff1a\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u64cd\u4f5c\u5e94\u5f53\u53ea\u6709\u5904\u4e8e entry/critical/exit section \u7684\u8fdb\u7a0b\u53c2\u4e0e\uff0c\u4e14\u8be5\u9009\u62e9\u5e94\u5f53\u5728\u6709\u9650\u65f6\u95f4\u5185\u88ab\u6267\u884c\uff1b
    3. \u7b49\u5f85\u65f6\u95f4\u6709\u9650(bounded waiting)\uff1a\u8fdb\u7a0b\u7b49\u5f85\u88ab\u5141\u8bb8\u8fdb\u5165 critical section \u7684\u65f6\u95f4\u5e94\u5f53\u662f\u6709\u9650\u7684\uff1b

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u4ee5\u8ba8\u8bba CS \u95ee\u9898\u662f\u5982\u4f55\u89e3\u51b3\u7684\u4e3a\u4e3b\u7ebf\uff0c\u63a2\u7d22\u5982\u4f55\u89e3\u51b3 race condition\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#for-kernel-code","title":"For Kernel Code","text":"

    \u7531\u4e8e kernel code \u4e0b\u7684 CS \u95ee\u9898\u89e3\u51b3\u8f83\u4e3a\u6e05\u6670\u76f4\u63a5\uff0c\u6240\u4ee5\u5148\u884c\u4ecb\u7ecd\u3002

    For Kernel Code

    \u5728 kernel code \u4e2d\u4e5f\u666e\u904d\u5b58\u5728\u7740 race condition \u7684\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

    Race condition when assigning a pid.

    \u4e0a\u4f8b\u4e2d \\(P_0\\) \u548c \\(P_1\\) \u540c\u65f6\u8bbf\u95ee\u4e86 next_available_pid \u8fd9\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u4ea7\u751f\u7ade\u4e89\uff0c\u5bfc\u81f4\u6700\u540e\u6709\u4e24\u4e2a\u8fdb\u7a0b\u4f7f\u7528\u4e86\u540c\u4e00\u4e2a pid\u3002

    \u6b32\u89e3\u51b3 kernel code \u4e2d\u7684 CS \u95ee\u9898\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u5728 kernel code \u4e2d\u8bbf\u95ee\u4e34\u754c\u8d44\u6e90\u7684\u884c\u4e3a\uff0c\u4ece\u800c\u89e3\u51b3 CS \u95ee\u9898\u3002

    \u5bf9\u4e8e\u5355\u5904\u7406\u5668\u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728 kernel code \u4e2d\u7981\u6b62\u4e2d\u65ad\uff0c\u5c31\u53ef\u4ee5\u4fdd\u8bc1\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode\uff1b\u800c\u5bf9\u4e8e\u591a\u5904\u7406\u5668\u6765\u8bf4\uff0c\u8fd9\u79cd\u65b9\u6cd5\u5c31\u4e0d\u90a3\u4e48\u5408\u9002\u4e86\u2014\u2014\u6211\u4eec\u9700\u8981\u540c\u65f6\u544a\u8bc9\u591a\u4e2a\u5904\u7406\u5668\u4e2d\u65ad\u88ab\u7981\u6b62\uff0c\u800c\u8fd9\u4e2a\u8fc7\u7a0b\u4e2d\u7684\u65f6\u5ef6\u4ecd\u7136\u4f1a\u4ea7\u751f\u95ee\u9898\uff1b\u4e0d\u4ec5\u5982\u6b64\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u4e5f\u4f1a\u5e26\u6765\u989d\u5916\u7684\u5f00\u9500\u3002\u5728\u591a\u5904\u7406\u5668\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u5b9e\u73b0\u62a2\u5360\u5f0f\u5185\u6838(preemptive kernels)\u548c\u975e\u62a2\u5360\u5f0f\u5185\u6838(non-preemptive kernels)\uff0c\u5173\u952e\u662f\u540e\u8005\u5b9e\u73b0\u4e86\u4e00\u6bb5\u65f6\u95f4\u5185\u53ea\u6709\u4e00\u4e2a\u8fdb\u7a0b\u53ef\u4ee5\u8fd0\u884c\u5728 kernel mode2\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u63a2\u7d22\u66f4\u4e3a\u901a\u7528\u7684\u89e3\u51b3\u65b9\u6848\u3002

    \u8bf4\u660e

    \u4e3a\u4e86\u7b80\u5316\u8bf4\u660e\u4ee3\u7801\uff0c\u6211\u4eec\u7528\u5168\u5927\u5199\u6765\u8868\u793a\u4e00\u4e2a\u5171\u4eab\u8d44\u6e90\uff0c\u4f8b\u5982 READY\uff0c\u5b83\u80fd\u591f\u88ab\u82e5\u5e72\u8fdb\u7a0b\u8bbf\u95ee\u3002\u5b9e\u9645\u4e0a\u8fd9\u4e2a\u529f\u80fd\u5e94\u5f53\u7531\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\uff0c\u5e76\u4e0d\u662f\u6211\u4eec\u5173\u6ce8\u7684\u91cd\u70b9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#petersons-algorithm","title":"Peterson\u2019s Algorithm","text":"

    Links

    Peterson's algorithm \u662f\u5bf9\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7684\u540c\u6b65\u95ee\u9898\u7684\u4e00\u4e2a\u89e3\u6cd5\uff0c\u5177\u6709\u4e00\u5b9a\u7684\u5c40\u9650\u6027\uff0c\u4f46\u5176\u8bbe\u8ba1\u76f8\u5bf9\u7b80\u5355\uff0c\u6240\u4ee5\u5148\u884c\u7ed9\u51fa\u3002\u5728\u672c\u8282\u4e2d\uff0c\u6211\u4eec\u5047\u8bbe \\(P_0\\) \u548c \\(P_1\\) \u662f\u53c2\u4e0e\u540c\u6b65\u95ee\u9898\u8ba8\u8bba\u7684\u4e24\u4e2a\u8fdb\u7a0b\u3002

    \u57fa\u4e8e Peterson's algorithm \u5bf9\u591a\u8fdb\u7a0b\u60c5\u51b5\u7684\u6269\u5c55\u88ab\u79f0\u4e3a filter algorithm\uff0c\u4f46 filter algorithm \u4e0d\u6ee1\u8db3 bounded waiting time \u7684\u6761\u4ef6\uff0c\u8bfb\u8005\u6709\u5174\u8da3\u53ef\u4ee5\u81ea\u884c\u4e86\u89e3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u7b97\u6cd5\u63cf\u8ff0","title":"\u7b97\u6cd5\u63cf\u8ff0","text":"

    \u4e3a\u4e86\u4fdd\u8bc1\u5904\u4e8e\u4e34\u754c\u6001\u7684\u8fdb\u7a0b\u81f3\u591a\u53ea\u6709\u4e00\u4e2a\uff0c\u6211\u4eec\u5e94\u5f53\u5728\u8fdb\u7a0b\u5904\u4e8e\u5c31\u7eea\u6001\u65f6\uff0c\u786e\u8ba4\u6ca1\u6709\u5176\u4ed6\u8fdb\u7a0b\u5904\u4e8e\u4e34\u754c\u6001\u540e\u518d\u8fdb\u5165\u3002\u5176\u4e2d\u6700\u91cd\u8981\u7684\u4e00\u4ef6\u4e8b\u5c31\u662f\uff0c\u5f53\u6211\u4eec\u5904\u5728 \\(P_0\\) \u65f6\uff0c\u6211\u4eec\u5982\u4f55\u77e5\u9053 \\(P_1\\) \u662f\u5426\u6b63\u5904\u4e8e\u4e34\u754c\u6001\u5462\uff1fPeterson\u2019s Algorithm \u901a\u8fc7\u5982\u4e0b\u65b9\u5f0f\u5b9e\u73b0\u4e86\u8fd9\u4ef6\u4e8b\uff1a

    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    \u9996\u5148\uff0c\u6211\u4eec\u8bf4\u660e entry section \u6ca1\u6709\u4e34\u754c\u8d44\u6e90\u3002READY \u662f\u4e00\u4e2a\u5171\u4eab\u7684\u6570\u7ec4\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u53ea\u4fee\u6539\u4e0e\u81ea\u5df1\u4e00\u4e00\u5bf9\u5e94\u7684 element\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a READY \u4e0d\u4f1a\u51fa\u73b0 race condition\uff0c\u56e0\u800c\u4e5f\u4e0d\u662f\u4e34\u754c\u8d44\u6e90\u3002\u800c TURN\uff0c\u6211\u4eec\u8fd9\u91cc\u53ea\u5bf9 TURN \u8fdb\u884c\u5199\u7684\u64cd\u4f5c\uff0c\u4f46\u662f P1 \u548c P2 \u8c01\u5148\u8dd1\u5230\u8fd9\u4e00\u884c\u4f1a\u51b3\u5b9a TURN \u6700\u540e\u7684\u503c\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u8fd9\u91cc\u6709 race condition\u3002

    \u4f46\u8fd9\u5c31\u662f Peterson\u2019s Algorithm \u5de7\u5999\u7684\u5730\u65b9\uff0cPeterson's \u5229\u7528 race condition \u8fd9\u4e2a\u201c\u540e\u8986\u76d6\u524d\u201d\u7684\u6027\u8d28\uff0c\u5b9e\u73b0\u4e86\u6807\u8bb0\u4e86\u8fd9\u4e24\u4e2a\u8fdb\u7a0b\u7684\u5148\u6765\u540e\u5230\u7684\u6548\u679c\u3002\u6211\u4eec\u90fd\u5411\u8fd9\u4e2a TURN \u5199\u4e00\u4e2a\u4e92\u5f02\u7684\u503c\uff08\u6bd4\u5982\u81ea\u5df1\u7684 id\uff0c\u6216\u8005\u5bf9\u65b9\u7684 id\uff09\uff0c\u7b49\u5927\u5bb6\u90fd\u5199\u597d\u540e\u6211\u4eec\u770b\u770b\u8fd9\u4e2a\u503c\u6700\u7ec8\u662f\u8c01\u5199\u7684\uff0c\u4e8e\u662f\u5c31\u77e5\u9053\u8c01\u540e\u5230\u3002

    \u5229\u7528\u8fd9\u4e2a\u539f\u7406\uff0cPeterson's \u8fd9\u91cc\u505a\u4e86\u4e00\u4e2a\u201c\u975e\u5e38\u6709\u4e2d\u56fd\u4eba\u6c14\u8d28\u201d\u7684\u4e8b\u60c5\uff1a\\(P_0\\) \u548c \\(P_1\\) \u4e0a\u516c\u4ea4\u8f66\u540e\u540c\u65f6\u770b\u4e0a\u4e86\u4e00\u4e2a\u5ea7\u4f4d\uff0c\\(P_0\\) \u8bf4\uff1a\u201c\u4f60\u5750\u5427\u3002\u201d\uff0c \\(P_1\\) \u81ea\u7136\u4e5f\u8981\u5ba2\u6c14\u4e00\u4e0b\uff0c\u8bf4\uff1a\u201c\u8fd8\u662f\u4f60\u5750\u5427\uff01\u201d\u3002\u73b0\u5728\u4e24\u8fb9\u90fd\u5ba2\u6c14\u8fc7\u4e86\uff0c\\(P_0\\) \u5c31\u53ef\u4ee5\u5fc3\u5b89\u7406\u5f97\u5730\u5750\u4e0b\u4e86\u3002\u5bf9\u4e0a\u8ff0\u8fc7\u7a0b\uff0c\u6211\u4eec\u7ed9\u51fa \\(P_0\\) \u83b7\u5f97\u6905\u5b50\u7684\u51c6\u786e\u6761\u4ef6\u6709\uff1a

    1. \\(P_0\\) \u60f3\u5750\u4e0b\uff0c\\(P_1\\) \u4e5f\u60f3\u5750\u4e0b\uff0c\u5426\u5219\u5c31\u6ca1\u6709\u51b2\u7a81\u4e86\uff1b
    2. \\(P_0\\) \u53d1\u73b0 \\(P_1\\) \u5728\u5ba2\u6c14\uff0c\u4f46 \\(P_0\\) \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e86\uff1b

    \u5bf9\u5e94\u5230\u4e0a\u9762\u7ed9\u51fa\u7684\u4ee3\u7801\u91cc\uff0c\u8fd9\u4e2a\u6761\u4ef6\u53ef\u4ee5\u7ffb\u8bd1\u4e3a\uff1a

    1. READY[0] = READY[1] = true\uff1b
    2. TURN \u2260 j\uff0c\u4f46\u6b64\u524d \\(P_i\\) \u5df2\u7ecf\u6267\u884c\u8fc7 TURN <- j\uff1b

    \u8bf7\u8bfb\u8005\u4ed4\u7ec6\u601d\u8003\u4e0a\u9762\u7684\u8fc7\u7a0b\uff0c\u5e76\u9002\u5f53\u8fdb\u884c\u5168\u9762\u7684\u6a21\u62df\u4ee5\u7406\u89e3 Peterson's \u662f\u5982\u4f55\u5de5\u4f5c\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u6027\u8d28\u8bc1\u660e","title":"\u6027\u8d28\u8bc1\u660e","text":"

    \u73b0\u5728\u6211\u4eec\u9700\u8981\u8bc1\u660e\u8fd9\u4e2a\u7b97\u6cd5\u6ee1\u8db3\u6027\u8d28\u3002

    \u6211\u7684\u8bc1\u660e\u6bd4\u8f83\u8be6\u7ec6\u548c\u5570\u55e6\uff0c\u4f46\u6211\u8ba4\u4e3a\u5b8c\u6574\u5730\u6a21\u62df\u66f4\u52a0\u6709\u5229\u4e8e\u76f4\u89c9\u7406\u89e3\uff0c\u5982\u679c\u4f60\u60f3\u8981\u66f4\u7b80\u6d01\u7684\u8bc1\u660e\uff0c\u53ef\u4ee5\u53c2\u8003 xyx \u7684\u7b14\u8bb0\u3002

    mutual exclusion
    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    lemma

    \u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c 7 \u884c\uff0c\u90a3\u4e48\u663e\u7136\uff1a

    1. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u60f3\u8981\u8fdb\u5165 critical section\uff0c\u5373 READY[i] \u548c READY[j] \u90fd\u4e3a true\uff1b
    2. TURN \u7684\u503c\u4e0d\u518d\u4f1a\u88ab\u66f4\u6539\uff1b
    3. \u4e24\u4e2a\u8fdb\u7a0b\u90fd\u5c1a\u672a\u8fdb\u5165 critical section\uff1b

    \u7531\u4e8e TURN \u5fc5\u5b9a\u4e5f\u53ea\u80fd\u4e3a i \u6216 j\uff0c\u6240\u4ee5 i \u548c j \u5fc5\u7136\u6709\u4e14\u4ec5\u6709\u4e00\u4e2a\u8fdb\u7a0b\u63a5\u4e0b\u6765\u4f1a break loop \u5e76\u8fdb\u5165 critical section\uff0c\u5728\u5b83\u7ed3\u675f\u4e4b\u524d\uff0c\u5373\u5728 READY[?] \u88ab\u6539\u53d8\u4e4b\u524d\uff0c\u8be5\u6761\u4ef6\u6301\u7eed\u6210\u7acb\u3002

    \u56e0\u6b64\u6211\u4eec\u5f97\u5230\u4e00\u4e2a\u7ed3\u8bba\uff1a\u5982\u679c\u6b64\u65f6 i \u548c j \u540c\u5904\u4e8e\u7b2c\u4e03\u884c\uff0c\u90a3\u4e48\u4ece\u8be5\u65f6\u523b\u5f00\u59cb\uff0c\u5230\u4e24\u4e2a\u8fdb\u7a0b\u90fd\u79bb\u5f00 critical section \u4e3a\u6b62\uff0c\u4e92\u65a5\u6027\u8d28\u90fd\u6210\u7acb\u3002

    \u73b0\u5728\u6211\u4eec\u8003\u8651 i \u5df2\u7ecf\u5148\u884c\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff0c\u800c j \u8fd8\u6ca1\u8fd0\u884c\u5230\u7b2c 7 \u884c\uff1a

    Situation 1

    \u5982\u679c j \u8fd8\u6ca1\u8fdb\u5165\u7b2c 5 \u884c\uff0c\u90a3\u4e48 READY[j] \u4e3a false\uff0c\u6b64\u65f6\u6ca1\u6709\u7ade\u4e89\uff0ci \u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6001\u3002\u5e76\u4e14 j \u4e4b\u540e\u8fd0\u884c\u5230\u7b2c 7 \u884c\u65f6\uff0cTURN == <another> \u59cb\u7ec8\u6210\u7acb\u3002\u6240\u4ee5 j \u4f55\u65f6\u8fdb\u5165 critical section \u5b8c\u5168\u53d6\u51b3\u4e8e READY[j]\uff0c\u5373 j \u4f55\u65f6\u79bb\u5f00 critical section\u3002

    \u663e\u7136\uff0c\u6b64\u65f6\u6ee1\u8db3\u4e92\u65a5\u6027\u8d28\u3002

    Situation 2

    \u5982\u679c j \u5df2\u7ecf\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\uff0c\u8fd8\u6ca1\u6267\u884c\u7b2c 6 \u884c\uff0c\u90a3\u4e48\u5bf9\u4e8e i \u6765\u8bf4\uff0c(READY[j] && TURN == j) \u4e3a true\uff0c\u6b64\u65f6 i \u5c06\u7b49\u5f85 j\uff0c\u8fdb\u5165 Situation 3\u3002

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u8981\u4e48 i \u548c j \u4e0d\u7ade\u4e89\uff0c\u8981\u4e48\u4e24\u8005\u90fd\u8fd0\u884c\u5230\u7b2c 7 \u884c\u540e\u624d\u4f1a\u6709\u8fdb\u7a0b\u8fdb\u5165 critical section

    \u8fd9\u5c31\u597d\u50cf\u4e24\u8005\u5728\u7b2c 6 \u884c\u6bd4\u8c01\u5148\u4e3e\u624b\uff0c\u7136\u540e\u7b49\u4e24\u8005\u90fd\u4e3e\u8fc7\u624b\uff08\u90fd\u8dd1\u5b8c\u7b2c 6 \u884c\uff0c\u5230\u8fbe\u7b2c 7 \u884c\uff09\u540e\uff0c\u518d\u5224\u65ad\u8c01\u8fdb\u5165 critical section\uff0c\u800c\u8fdb\u5165\u7b2c 7 \u884c\u4ee5\u540e\u6240\u6709\u7684\u5224\u65ad\u6761\u4ef6\u90fd\u662f\u76f8\u5bf9\u9759\u6b62\u7684\u3001\u4e0d\u4f1a\u518d\u88ab\u4fee\u6539\u7684\uff0c\u56e0\u800c\u907f\u514d\u751a\u81f3\u5229\u7528\u4e86 race condition \u5bf9 selection \u7684\u5f71\u54cd\uff0c\u4fdd\u8bc1\u4e86\u4e92\u65a5\u7684\u6027\u8d28\u3002

    progress

    \u8fd9\u6761\u6027\u8d28\u7684\u6210\u7acb\u6bd4\u8f83\u7b26\u5408\u76f4\u89c9\uff0c\u552f\u4e00\u9700\u8981\u8bf4\u660e\u7684\u5c31\u662f\u4e0d\u4f1a\u51fa\u73b0\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u5728 while () \u88ab\u963b\u585e\u4f4f\u7684\u60c5\u51b5\u3002\u4f46\u662f\u8fd9\u70b9\u975e\u5e38\u663e\u7136\uff0cTURN == i && TURN == j \u5fc5\u7136\u662f false\uff0c\u6240\u4ee5\u4e24\u4e2a\u5faa\u73af\u603b\u6709\u4e00\u4e2a\u4f1a\u88ab break\u3002

    bounded waiting time

    \u5728 Peterson's \u4e2d\uff0c\u7b49\u5f85\u65f6\u95f4\u4e3b\u8981\u6307\u8fd9\u90e8\u5206\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u5c24\u5176\u6307\u7b2c\u4e03\u884c\u7684 while \u5faa\u73af\u3002

    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    \u6211\u4eec\u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u65ad\u5faa\u73af\u7684\u6761\u4ef6\u662f\uff1aREADY[j] && TURN == j\uff0c\u5982\u679c\u8be5\u5faa\u73af\u4e00\u5f00\u59cb\u5c31\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u663e\u7136\u662f\u7b26\u5408 bounded waiting time \u7684\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u8fd9\u4e2a\u6761\u4ef6\u6700\u591a\u80fd\u6301\u7eed\u591a\u4e45\u3002

    A. READY[j] \u4e3a true

    \u8fd9\u9700\u8981 process j \u5df2\u7ecf\u8fd0\u884c\u8fc7\u7b2c 5 \u884c\uff0c\u5e76\u4e14\u8fd8\u6ca1\u8fd0\u884c\u7b2c 15 \u884c\uff0c\u5373 process j \u4e5f\u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\u3002

    \u8fd9\u4e00\u6761\u662f\u5728\u5224\u65ad\u662f\u5426\u6709\u51b2\u7a81\u5b58\u5728\uff0c\u5982\u73b0\u5728\u53ea\u6709 process i \u60f3\u8981\u8fdb\u5165\u4e34\u754c\u6001\uff0c\u90a3\u65e0\u9700\u7b49\u5f85\u76f4\u63a5\u8fdb\u5165\u5373\u53ef\u3002\u901a\u8fc7\u6539\u53d8\u8fd9\u4e2a\u6761\u4ef6\u800c\u8fdb\u5165\u4e34\u754c\u6001\u6709\u4e24\u79cd\u53ef\u80fd\uff1a

    1. \u4e00\u5f00\u59cb\u51b2\u7a81\u5c31\u4e0d\u5b58\u5728\uff1b
    2. process j \u521a\u79bb\u5f00\u4e34\u754c\u6001\uff0c\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff1b

    B. TURN == j \u4e3a true

    \u6709\u4e24\u79cd\u53ef\u80fd\uff1a

    1. process j \u8fd8\u6ca1\u8fd0\u884c\u7b2c 6 \u884c\uff1b
    2. process j \u5728 process i \u4e4b\u524d\u5c31\u8fd0\u884c\u4e86\u7b2c 6 \u884c\uff1b

    \u5bf9\u4e8e\u7b2c\u4e00\u79cd\u60c5\u51b5\uff0c\u7531\u4e8e A. \u6210\u7acb\u540e\u624d\u4f1a\u5224\u65ad\u8fd9\u6761\uff0c\u6240\u4ee5 process j \u7684\u72b6\u6001\u5176\u5b9e\u662f\u521a\u8fd0\u884c\u5b8c\u7b2c 5 \u884c\u8fd8\u6ca1\u8fd0\u884c\u5b8c\u7b2c 6 \u884c\uff0c\u663e\u7136\u8fd9\u4e2a\u65f6\u95f4\u662f\u6709\u754c\u7684\u3002

    \u800c\u5bf9\u4e8e\u7b2c\u4e8c\u79cd\u60c5\u51b5\uff0c\u8bf4\u660e i \u662f\u540e\u6765\u8005\uff0cj \u5df2\u7ecf\u5ba2\u6c14\u8fc7\u4e00\u6b21\u4e86\uff0c\u6240\u4ee5\u5e94\u5f53\u8ba9 j \u8fd0\u884c\uff0ci \u7b49\u5f85 j \u79bb\u5f00\u4e34\u754c\u6001\u91ca\u653e\u8d44\u6e90\uff0c\u6b64\u65f6\u901a\u8fc7 A.2. \u6765\u8fdb\u5165\u4e34\u754c\u6001\u3002\u800c process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\u4e5f\u5e94\u5f53\u6709\u9650\u7684\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0cwaiting time \u7684\u6700\u5927\u503c\u57fa\u672c\u4e0a\u53d6\u81ea\uff1a

    1. process j \u6267\u884c\u7b2c 6 \u884c\u7684\u65f6\u95f4\uff1b
    2. process j \u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u65f6\u95f4\uff1b

    \u901a\u8fc7\u4e4b\u524d\u7684\u8bba\u8ff0\u6211\u4eec\u77e5\u9053\uff0c\u8fd9\u4e24\u4e2a\u90fd\u662f\u6709\u754c\u7684\uff0c\u4e8e\u662f\u8be5\u6027\u8d28\u5f97\u8bc1\u3002

    Oops!

    \u4f46\u662f\uff0cPeterson's \u5b9e\u9645\u4e0a\u65e0\u6cd5\u9002\u7528\u4e8e\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\u3002\u4e0a\u8ff0\u505a\u6cd5\u6709\u4e00\u4e2a\u5173\u952e\uff0c\u4e5f\u662f\u6211\u4eec\u5728\u8bc1\u660e\u8fc7\u7a0b\u4e2d\u4e00\u76f4\u9ed8\u8ba4\u6210\u7acb\u7684\u4e8b\u60c5\uff1a\u8fdb\u7a0b\u603b\u662f\u5148\u6267\u884c READY[i] = true;\uff0c\u7136\u540e\u624d\u4f1a\u6267\u884c TURN = j;\uff0c\u5373\u5148\u8fdb\u5165\u5c31\u7eea\u6001\uff0c\u518d\u7d22\u53d6\u4e34\u754c\u8d44\u6e90\uff0c\u8fd9\u770b\u8d77\u6765\u662f\u4e2a\u975e\u5e38\u5408\u7406\u7684\u6761\u4ef6\u3002\u4f46\u5728\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0c\u7f16\u8bd1\u5668\u53ef\u80fd\u4f1a\u901a\u8fc7\u91cd\u6392\u5217\u90e8\u5206\u8bed\u53e5\u6765\u66f4\u597d\u5730\u5229\u7528 CPU \u8d44\u6e90\uff08\u53c2\u8003\u8ba1\u7ec4\u7684\u5404\u79cd\u7ade\u4e89\uff09\u3002\u800c\u5bf9\u7f16\u8bd1\u5668\u6765\u8bf4\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\uff08\u5c31\u7eea\u548c\u8bf7\u6c42\uff09\u5e76\u6ca1\u6709\u64cd\u4f5c\u76f8\u540c\u5185\u5bb9\uff0c\u56e0\u800c\u4ea4\u6362\u987a\u5e8f\u662f\u4e0d\u4f1a\u5f71\u54cd\u7ed3\u679c\u7684\uff0c\u6240\u4ee5\u53ef\u80fd\u88ab\u7f16\u8bd1\u5668\u4ea4\u6362\u3002\u800c\u8fd9\u5c31\u6709\u53ef\u80fd\u5bfc\u81f4\u51fa\u73b0\u95ee\u9898\uff0c\u4f8b\u5982\uff1a

    The effects of instruction reordering in Peterson\u2019s solution.

    \u5728\u68d5\u8272\u6807\u8bb0\u65f6\u523b\uff0cprocess 1 \u8fdb\u884c while \u5faa\u73af\u5224\u65ad\uff0c\u53d1\u73b0 READY[0] \u4e3a false\uff0c\u4f46\u6b64\u65f6 TURN \u6307\u5411\u5bf9\u65b9\uff0c\u6240\u4ee5\u6309\u7167\u6211\u4eec\u5148\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 1 \u4f1a\u8ba4\u4e3a process 0 \u662f\u5df2\u7ecf\u8fd0\u884c\u5b8c critical section\uff0c\u5df2\u7ecf\u91ca\u653e\u4e86\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u8fdb\u5165\u4e34\u754c\u6001\uff1b\u7136\u800c\uff0c\u5728\u7eff\u8272\u6807\u8bb0\u65f6\u523b\uff0c\u5bf9\u4e8e process 0\uff0c\u6b64\u65f6 TURN \u6307\u5411\u81ea\u5df1\uff0cprocess 1 \u8fd8\u6ca1\u8fd0\u884c\u5b8c\u6240\u4ee5 READY[1] \u8fd8\u662f true\uff0c\u6839\u636e\u6211\u4eec\u4e4b\u524d\u7684\u5206\u6790\uff0c\u6b64\u65f6 process 0 \u4f1a\u8ba4\u4e3a process 1 \u5728\u7b49\u5f85\u81ea\u5df1\uff0c\u6240\u4ee5\u4e5f\u8fdb\u5165\u4e86\u4e34\u754c\u6001\u3002\u4e8e\u662f\uff0c\u4e24\u4e2a\u8fdb\u7a0b\u540c\u65f6\u8fdb\u5165\u4e86\u4e34\u754c\u6001\uff0c\u8fdd\u53cd\u4e86 mutual exclusion \u7684\u6027\u8d28\u3002

    \u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a Peterson's Algorithm \u4ecd\u7136\u6ca1\u6709\u89e3\u51b3\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#memory-barriers","title":"Memory Barriers","text":"

    \u8be5\u65b9\u6cd5\u5b9e\u9645\u4e0a\u662f\u5bf9\u8f6f\u4ef6\u65b9\u6cd5\u7684\u8865\u8db3\u3002\u6211\u4eec\u5148\u524d\u63d0\u5230\uff0cPeterson's Algorithm \u5931\u6548\u7684\u539f\u56e0\u662f\u7f16\u8bd1\u5668\u4f1a\u6839\u636e\u9700\u6c42\u91cd\u6392\u5217\u4e00\u4e9b\u5185\u5b58\u64cd\u4f5c\uff0c\u800c memory barriers \u4fdd\u8bc1 barrier \u4e4b\u524d\u7684 S/L \u6307\u4ee4\u5fc5\u987b\u5728 barrier \u4e4b\u540e\u7684 S/L \u6307\u4ee4\u4e4b\u524d\u5b8c\u6210\uff0c\u4f7f\u6211\u4eec\u80fd\u591f\u4e3b\u52a8\u7981\u6b62\u7f16\u8bd1\u5668\u505a\u8fd9\u79cd\u91cd\u6392\u3002

    // `i` is 0 or 1, indicating current pid, while `j` is another pid.\nprocess(i) {\nj = 1 - i;\n\nREADY[i] = true;                    // \u2510\nmemory_barrier();                   // \u2502\nTURN = j;                           // \u2502\nwhile (READY[j] && TURN == j) {}    // \u251c entry section\n// i.e. wait until:             // \u2502\n//  (1) j exits,                // \u2502\n//  (2) j is slower, so it      // \u2502\n//      should run now.         // \u2518\n\n/* operate critical resources */    // - critical section\n\nREADY[i] = false;                   // - exit section\n\n/* other things */                  // - remainder section\n}\n

    Memory Model

    \u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u67b6\u6784\u53ef\u80fd\u4f1a\u5bf9\u7528\u6237\u7a0b\u5e8f\u64cd\u4f5c\u5185\u5b58\u7684\u4fdd\u8bc1\u6709\u6240\u4e0d\u540c\uff0c\u8fd9\u79cd\u4fdd\u8bc1\u88ab\u79f0\u4e3a memory model\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u5206\u4e3a\u4e24\u5927\u7c7b\uff1a

    1. \u5f3a\u6709\u5e8f(strongly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b
    2. \u5f31\u6709\u5e8f(weakly ordered)\uff1a\u8fdb\u7a0b\u5bf9\u5185\u5b58\u505a\u7684\u4fee\u6539\u4e0d\u7acb\u523b\u5bf9\u5176\u5b83\u5904\u7406\u5668\u53ef\u89c1\uff1b

    \u6211\u4eec\u77e5\u9053\uff0c\u4e3a\u4e86\u63d0\u9ad8\u5185\u5b58\u64cd\u4f5c\u7684\u6548\u7387\uff0c\u6211\u4eec\u5f15\u5165\u4e86 cache\uff0c\u5728\u591a\u5904\u7406\u5668\u60c5\u51b5\u4e0b\uff0ccache \u673a\u5236\u7684\u5b58\u5728\u53ef\u80fd\u5bfc\u81f4\u8fdb\u7a0b A \u5bf9\u5185\u5b58\u7684\u5199\u65e0\u6cd5\u5bf9\u8fdb\u7a0b B \u7acb\u523b\u53ef\u89c1\uff0c\u8fd9\u5c31\u662f\u5f31\u6709\u5e8f\u7684\u4e00\u79cd\u4f53\u73b0\u3002

    \u8865\u5145\u6750\u6599

    \u611f\u8c22 ltgg \u63d0\u4f9b\u7684\u53c2\u8003\u8d44\u6599\uff0c\u8bfb\u8005\u6709\u5174\u8da3\u53ef\u4ee5\u81ea\u884c\u9605\u8bfb\uff1a

    \u5173\u4e8e\u5f3a\u5f31\u7684\u5b9a\u4e49\uff0c\u5927\u81f4\u7684\u610f\u601d\u662f\uff1a

    A strong hardware memory model is one in which every machine instruction comes implicitly with acquire and release semantics. As a result, when one CPU core performs a sequence of writes, every other CPU core sees those values change in the same order that they were written.

    \u8fd9\u90e8\u5206\u6211\u6ca1\u6709\u5b8c\u5168\u641e\u6e05\u695a\uff0c\u4e66\u672c\u7684\u903b\u8f91\u975e\u5e38\u7684\u8be1\u5f02\uff1a\u4e66\u672c\u8ba4\u4e3a memory barrier \u662f\u5f31\u6709\u5e8f\u95ee\u9898\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u4f46\u662f\u6211\u59cb\u7ec8\u6ca1\u660e\u767d\u5b83\u4eec\u4e4b\u95f4\u7684\u903b\u8f91\u5728\u54ea\u91cc\uff0c\u4ee5\u53ca\u201c\u6709\u5e8f\u201d\u548c\u201c\u7acb\u523b\u53ef\u89c1\u201d\u7684\u6839\u672c\u8054\u7cfb\u5728\u54ea\u91cc\u3002\u8fd9\u91cc\u4e00\u5b9a\u662f\u5b58\u5728\u4e0d\u6e05\u695a\u7684\u5730\u65b9\u7684\u3002\u4f46\u662f\u8fd9\u90e8\u5206\u770b\u8d77\u6765\u4e0d\u662f\u5f88\u91cd\u8981\uff0c\u6240\u4ee5\u6211\u5c31\u5148\u653e\u7740\u4e0d\u7ba1\u4e86\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#hardware-instructions","title":"Hardware Instructions","text":"

    \u8ba8\u8bba Peterson's Algorithm \u540e\u6211\u4eec\u5e94\u5f53\u610f\u8bc6\u5230\uff0c\u540c\u6b65\u95ee\u9898\u7684\u51fa\u73b0\u662f \u24f5 \u786c\u4ef6\u64cd\u4f5c\u6570\u636e\u9700\u8981\u65f6\u95f4\uff0c\u4e0e \u24f6 \u6570\u636e\u5177\u6709\u5171\u4eab\u6027\u7684\u4e0d\u534f\u8c03\uff0c\u6240\u4ee5\u672c\u8d28\u4e0a\u662f\u786c\u4ef6\u4ea7\u751f\u7684\u95ee\u9898\u3002\u56e0\u800c\uff0c\u8981\u60f3\u66f4\u597d\u7684\u89e3\u51b3\u95ee\u9898\uff0c\u6211\u4eec\u8fd8\u662f\u5e94\u5f53\u4ece\u786c\u4ef6\u51fa\u53d1\u3002\u6211\u4eec\u5728\u8fd9\u91cc\u5f15\u5165\u539f\u5b50\u6027(atomic)\u8fd9\u4e2a\u6982\u5ff5\uff0c\u5b83\u7684\u57fa\u672c\u903b\u8f91\u662f\u8ba9\u201c\u9700\u8981\u65f6\u95f4\u7684\uff0c\u5bf9\u6570\u636e\u7684\u64cd\u4f5c\u201d\uff0c\u53d8\u6210\u4e00\u4e2a\u201c\u5728\u65f6\u95f4\u4e0a\u4e0d\u53ef\u5206\u5272\u3001\u4e0d\u53ef\u88ab\u6253\u65ad\u7684\uff0c\u5373\u539f\u5b50\u6027\u7684\u64cd\u4f5c\u201d\u3002\u4e0d\u540c\u786c\u4ef6\u53ef\u80fd\u63d0\u4f9b\u4e0d\u540c\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6211\u4eec\u8fd9\u91cc\u5c06\u5b83\u4eec\u62bd\u8c61\u4e3a test_and_set() \u548c compare_and_swap() \u4e24\u7c7b\u6765\u4ecb\u7ecd\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#test_and_set","title":"test_and_set()","text":"

    Links

    <atomic> test_and_set(bool * target) {\nbool ret = *target;\n*target = true;\nreturn ret;\n}\n

    \u8be5\u6307\u4ee4\u7684\u529f\u80fd\u5c31\u7c7b\u4f3c\u4e0a\u9762\u8fd9\u6bb5\u4ee3\u7801\uff1a\u5c06\u76ee\u6807\u8bbe\u4e3a true\uff0c\u540c\u65f6\u8fd4\u56de\u5176\u65e7\u503c\u3002\u4f46\u9664\u6b64\u4e4b\u5916\uff0c\u8fd9\u4e2a\u6307\u4ee4\u9700\u8981\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u5982\u679c\u6709\u82e5\u5e72 test_and_set() \u540c\u65f6\u53d1\u751f\uff0c\u90a3\u4e48\u65e0\u8bba\u5e76\u53d1\u8fd8\u662f\u5e76\u884c\uff0c\u5b83\u4eec\u90fd\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u5730\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u4ea7\u751f\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u79cd atomic \u7684\u64cd\u4f5c\u5929\u7136\u4fdd\u8bc1\u4e86 mutual exclusion\uff0c\u56e0\u800c\u5bf9\u4e8e\u5b9e\u73b0\u4e86 test_and_set() \u7684\u673a\u5668\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528 test_and_set() \u6765\u89e3\u51b3 CS \u95ee\u9898\u3002

    process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n\n/* other things */                  // - remainder section\n}\n

    \u5728\u7b2c 3 \u884c\uff0c\u5faa\u73af\u7b49\u5f85\u7684\u6761\u4ef6\u53d8\u4e3a test_and_set(&LOCK)\uff0c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f false\uff0c\u5219\u53ef\u4ee5\u7ee7\u7eed\uff0c\u5e76\u4e14\u6b64\u65f6 LOCK \u7684\u503c\u88ab\u539f\u5b50\u6027\u5730\u4fee\u6539\u4e3a true\uff1b\u800c\u5982\u679c LOCK \u7684\u65e7\u503c\u662f true\uff0c\u90a3\u4e48\u5b83\u7ecf\u8fc7 test_and_set(&LOCK) \u540e\u7684\u503c\u4ecd\u7136\u662f true\uff0c\u4e14\u9700\u8981\u7b49\u5f85\uff0c\u76f4\u5230\uff1a\u5c06 LOCK \u6539\u6210 true \u7684\u90a3\u4e2a\u8fdb\u7a0b\u5728 exit section \u5c06 LOCK \u6539\u56de false\uff0c\u5373\u91ca\u653e\u9501\u3002

    \u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u4e0e\u6211\u4eec\u8ba8\u8bba Peterson's Algorithm \u65f6\u7684\u8bed\u5883\u4e0d\u540c\uff0c\u6211\u4eec\u73b0\u5728\u4e0d\u518d\u5047\u8bbe\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53ea\u6709\u4e24\u4e2a\uff08\u8fd9\u662f Peterson's \u7684\u5c40\u9650\u6027\u4e4b\u4e00\uff09\u3002\u5728\u8fd9\u4e2a\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u518d\u6765\u8003\u8651\u5b83\u662f\u5426\u6ee1\u8db3\u4e09\u6761\u6027\u8d28\u3002

    mutual exclusion

    \u7531\u4e8e test_and_set() \u662f\u539f\u5b50\u6027\u7684\uff0c\u6240\u4ee5\u540c\u65f6\u6267\u884c\u7684\u4e00\u7cfb\u5217 test_and_set() \u4e2d\uff0c\u53ea\u6709\u4e00\u4e2a\u80fd\u8fd4\u56de false\uff0c\u5373\u53ea\u6709\u4e00\u4e2a\u80fd\u901a\u8fc7\u9501\uff0c\u56e0\u800c\u5929\u751f\u6ee1\u8db3\u4e86 mutual exclusion\u3002

    progress

    \u4ee3\u7801\u4e2d\u5bf9 LOCK \u7684\u4fee\u6539\u64cd\u4f5c\u662f\u95ed\u5408\u7684\uff0c\u5373\u8fdb\u5165 critical section \u4f1a\u5bfc\u81f4 LOCK \u53d8\u4e3a false\uff0c\u4f46\u79bb\u5f00 critical section \u5fc5\u5b9a\u5bfc\u81f4 LOCK \u53d8\u4e3a true\u3002\u56e0\u6b64\uff0c\u53ea\u8981\u6ca1\u6709\u8fdb\u7a0b\u5904\u4e8e critical section\uff0c\u90a3\u4e48 LOCK \u5fc5\u5b9a\u4e3a false\uff0c\u5219\u4e00\u5b9a\u6709\u5c31\u7eea\u7684\u8fdb\u7a0b\u80fd\u591f\u8fdb\u5165 critical section\uff0c\u800c\u8fd0\u884c critical section \u7684\u65f6\u95f4\u662f\u6709\u9650\u7684\uff0c\u56e0\u6b64 LOCK \u53c8\u4e00\u5b9a\u4f1a\u5728\u6709\u9650\u65f6\u95f4\u5185\u53d8\u4e3a false\uff0c\u4ece\u800c\u6ee1\u8db3 progress\u3002

    bounded waiting time

    \u5982\u679c\u53ea\u6709\u4e24\u4e2a\u8fdb\u7a0b\u53c2\u4e0e\u7ade\u4e89\uff0c\u90a3\u4e48\u901a\u8fc7\u7c7b\u4f3c\u8bc1\u660e progress \u7684\u8fc7\u7a0b\u53ef\u4ee5\u5f97\u5230 bounded waiting time \u662f\u53ef\u4ee5\u6210\u7acb\u7684\u3002A \u79bb\u5f00\u4e34\u754c\u6001\u540e\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u7684 B \u7acb\u523b\u5c31\u80fd\u8fdb\u5165 critical section\uff0c\u5373\u53ea\u6709\u4e24\u4e2a\u4eba\u6392\u961f\u662f\u4e0d\u4f1a\u88ab\u63d2\u961f\u7684\u3002

    \u4f46\u5728\u53c2\u4e0e\u7ade\u4e89\u7684\u8fdb\u7a0b\u53d8\u591a\u4ee5\u540e\uff0c\u5c31\u5f88\u6709\u53ef\u80fd\u51fa\u73b0\u7c7b\u4f3c\u4e8e\u8c03\u5ea6\u4e2d\u201c\u9965\u997f\u201d\u7684\u73b0\u8c61\uff1a

        \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \nP0  \u2502 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500 \u00b7\u00b7\u00b7\n    \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \n          \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510      \u250c\u2500\u2500\u2500\u2500\u2510\nP1  \u2500\u2500\u2500\u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502   \u2500\u2500\u2500\u2524 CS \u2502 \u00b7\u00b7\u00b7\n          \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518      \u2514\u2500\u2500\u2500\u2500\u2518\n\nP2  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \u00b7\u00b7\u00b7\n

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u7531\u4e8e P0 \u548c P1 \u603b\u662f\u8f6e\u6d41\u83b7\u5f97\u9501\uff0c\u5bfc\u81f4 P2 \u59cb\u7ec8\u5904\u4e8e\u5c31\u7eea\u6001\u7b49\u5f85\u9501\uff0c\u56e0\u800c\u5bf9\u4e8e P2 \u6765\u8bf4 waiting time \u5c31\u4e0d\u518d\u6709\u9650\u4e86\u3002

    \u7cdf\u4e86\uff0c\u770b\u8d77\u6765\u5f88\u9177\u7684\u4e00\u4e2a\u65b9\u6cd5\u8c8c\u4f3c\u4e0d\u80fd\u6ee1\u8db3 CS \u89e3\u6cd5\u7684\u6027\u8d28\uff0c\u4f46\u4ed4\u7ec6\u5206\u6790\uff0c\u8fd9\u662f\u7531\u4e8e\u9501\u7684\u5206\u914d\u673a\u5236\u662f\u4e0d\u53ef\u63a7\u7684\u2014\u2014\u5728\u4e00\u4e2a\u9501\u88ab\u91ca\u653e\u540e\uff0c\u63a5\u4e0b\u6765\u5c06\u62ff\u5230\u9501\u7684\u8fdb\u7a0b\u5e94\u5f53\u662f\u63a5\u4e0b\u6765\u7b2c\u4e00\u4e2a\u5b9e\u9645\u6267\u884c test_and_set() \u7684\u8fdb\u7a0b\uff0c\u7136\u800c\u7531\u4e8e \u2776 \u6211\u4eec\u5bf9\u6bcf\u4e2a\u8fdb\u7a0b\u7684\u8fd0\u884c\u901f\u5ea6\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u2777 \u6211\u4eec\u5bf9\u540c\u65f6\u4ea7\u751f\u7684 test_and_set() \u5c06\u6309\u4f55\u987a\u5e8f\u88ab\u5904\u7406\uff0c\u4e0d\u5e94\u5f53\u6709\u5047\u8bbe\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u624b\u52a8\u7528\u67d0\u79cd\u65b9\u6cd5\u6765\u5b9e\u73b0\u8fd9\u79cd\u201c\u9501\u7684\u8c03\u5ea6\u201d\uff1a

    // `i` is process id in [0, n), where `n` is the count of related process. \nprocess(i) {\nWAITING[i] = true;                                  // \u2510\nwhile ( WAITING[i] && test_and_set(&LOCK) ) {}      // \u251c entry sec.\n// \u2502\nWAITING[i] = false;                                 // \u2518\n\n/* operate critical resources */                    // - critical sec.\n\n// i.e. find next waiting process j                 // \u2510\nj = (i + 1) % n;                                    // \u2502\nwhile (i != j && !WAITING[j]) {                     // \u251c exit sec.\nj = (i + 1) % n;                                // \u2502\n}                                                   // \u2502\n// release j's LOCK or release whole LOCK           // \u2502\nif (i == j)     LOCK = false;                       // \u2502\nelse            WAITING[j] = false;                 // \u2518\n\n/* other things */                                  // - remainder sec.\n}\n

    \u6211\u4eec\u5f15\u5165\u4e86\u4e00\u4e2a WAITING[] \u6570\u7ec4\u6765\u8f85\u52a9 LOCK \u7ec6\u5316\u9501\u7684\u7c92\u5ea6\uff0c\u6b64\u65f6 LOCK \u8868\u793a\u7684\u201c\u662f\u5426\u5b58\u5728\u7ade\u4e89\u201d\uff0c\u800c WAITING[] \u5219\u6807\u8bc6\u4e86\u6240\u6709\u6b63\u5728\u7b49\u5f85\u7684\u8fdb\u7a0b\u3002\u533a\u522b\u4e8e\u4e4b\u524d\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0c\u8ba9\u5269\u4e0b\u7684\u8fdb\u7a0b\u53bb\u201c\u62fc\u624b\u901f\u201d\uff0c\u6211\u4eec\u8fd9\u6b21\u7531\u91ca\u653e\u9501\u7684\u8fdb\u7a0b\u6765\u9009\u62e9\u4e0b\u4e00\u4e2a\u8fdb\u5165 critical section \u7684\u662f\u8c01\u3002

    \u5728 11-14 \u884c\uff0c\u901a\u8fc7\u4e00\u4e2a\u5faa\u73af\u627e\u5230\u4e0b\u4e00\u4e2a WAITING[j] \u4e3a true \u7684 j\uff0c\u2776 \u5982\u679c\u627e\u5230\u4e86\u8fd9\u4e2a j\uff0c\u90a3\u4e48\u5c31\u5c06 WAITING[j] \u8bbe\u4e3a false\uff0819 \u884c\uff09\uff0c\u8fd9\u6837 j \u9a6c\u4e0a\u5c31\u4f1a\u5728\u7b2c 4 \u884c break\uff0c\u8fdb\u5165 critical section\uff1b\u2777 \u800c\u5982\u679c\u627e\u4e0d\u5230\u8fd9\u4e2a j\uff0c\u5373\u627e\u4e86\u4e00\u5708\u53c8\u627e\u56de\u4e86 i\uff0c\u90a3\u4e48\u8bf4\u660e i \u662f\u6700\u540e\u4e00\u4e2a\u4e86\uff0c\u6240\u4ee5\u53ef\u4ee5\u76f4\u63a5\u91ca\u653e\u6574\u4e2a\u9501\uff0817 \u884c\uff09\u3002

    \u901a\u8fc7\u4f7f\u7528\u8fd9\u79cd\u65b9\u6cd5\uff0c\u6211\u4eec\u4fdd\u8bc1\u4e86\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u6700\u591a\u53ea\u9700\u8981\u7b49\u5f85 n-1 \u4e2a\u8fdb\u7a0b\u8fd0\u884c\u5b8c critical section\uff08\u7c7b\u4f3c\u4e8e\u5b9e\u73b0\u4e86\u201cFCFS\u201d\uff09\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#compare_and_swap","title":"compare_and_swap()","text":"

    Links

    compare_and_swap() \u4e5f\u88ab\u7b80\u5199\u4e3a CAS \u6307\u4ee4\uff0c\u5b83\u7684\u529f\u80fd\u5982\u4e0b\uff1a

    <atomic> compare_and_swap(int * target, int expected, int new_val) {\nint ret = *target;\n\n// *target = (*target == expected) ? new_val : *target;\nif (*target == expected) {\n*target = new_val;\n}\n\nreturn ret;\n}\n

    CAS \u63a5\u53d7\u4e09\u4e2a\u503c\uff1a

    1. target \u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u5730\u5740\uff1b
    2. expected \u9884\u671f\u4e2d\u5f85\u4fee\u6539\u7684\u6570\u636e\u7684\u65e7\u503c\uff1b
    3. new_val \u5e0c\u671b\u5c06\u6570\u636e\u4fee\u6539\u4e3a\u7684\u65b0\u503c\uff1b

    \u800c\u5f53\u4e14\u4ec5\u5f53 *target \u7b26\u5408\u9884\u671f\uff0c\u4e0e expected \u76f8\u540c\u65f6\u5019\uff0c\u624d\u4f1a\u5c06\u5b83\u6539\u4e3a new_val\u3002\u540c\u6837\uff0cCAS \u4e5f\u5e94\u5f53\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u5373\u82e5\u5e72 CAS \u540c\u65f6\u53d1\u751f\u65f6\uff0c\u4e5f\u5e94\u5f53\u4e00\u4e2a\u4e00\u4e2a\u7684\u6267\u884c\uff0c\u800c\u4e0d\u80fd\u5b58\u5728\u65f6\u95f4\u4e0a\u7684\u4ea4\u96c6\u3002

    \u6211\u4eec\u6ce8\u610f\u5230\uff0c\u5b9e\u9645\u4e0a test_and_set(target) \u5c31\u662f compare_and_swap(target, false, true)\uff0c\u56e0\u800c\u5b9e\u9645\u4e0a CAS \u89e3\u51b3 CS \u95ee\u9898\u7684\u65b9\u6cd5\u4ee5\u53ca\u95ee\u9898\u548c\u4e0a\u4e00\u8282\u7684\u5185\u5bb9\u6ca1\u4ec0\u4e48\u5dee\u522b\u3002

    \u4f46\u662f\u6211\u4eec\u53d1\u73b0\uff0ccompare_and_swap() \u76f8\u6bd4\u4e8e test_and_set()\uff0c\u663e\u7136\u6709\u66f4\u5927\u7684\u64cd\u4f5c\u7a7a\u95f4\uff0c\u4e5f\u66f4\u6cdb\u7528\uff0c\u8003\u8651\u5230 CAS \u6307\u4ee4\u81ea\u8eab\u5df2\u7ecf\u80fd\u591f\u652f\u6301\u539f\u5b50\u6027\u7684\u4fee\u6539\u503c\uff0c\u6211\u4eec\u8003\u8651\u80fd\u5426\u8df3\u51fa CS \u95ee\u9898\u7684\u8303\u5f0f\u6765\u8003\u8651\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#atomic-variables","title":"Atomic Variables","text":"

    \u539f\u5b50\u53d8\u91cf(atomic variables)\u662f\u4e00\u79cd\u7528\u539f\u5b50\u6027\u64cd\u4f5c\u7ef4\u62a4\u7684\u53d8\u91cf\u3002\u6211\u4eec\u6240\u6709\u5bf9\u539f\u5b50\u53d8\u91cf\u7684\u64cd\u4f5c\u53ef\u4ee5\u901a\u8fc7 CAS \u6765\u5b9e\u73b0\uff0c\u4f8b\u5982\u81ea\u589e\u64cd\u4f5c\uff1a

    increment(atomic_int * v) {\nint tmp;\ndo {\ntmp = *v;\n} while ( tmp != compare_and_swap(v, tmp, tmp+1) );\n}\n

    \u4f7f\u7528 atomic variables \u540e\u5b9e\u9645\u4e0a\u5c31\u4e0d\u592a\u7b26\u5408 CS \u95ee\u9898\u7684\u6a21\u578b\u4e86\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u91cc\u5e76\u4e0d\u518d\u9700\u8981\u7ef4\u62a4\u7c7b\u4f3c LOCK \u7684\u4e1c\u897f\uff0c\u800c\u662f\u4ee5 *target \u662f\u5426\u7b26\u5408 expected \u7684\u9884\u8bbe\u6765\u5224\u65ad\u662f\u5426\u6709\u7ade\u4e89\u51fa\u73b0\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u540c\u6b65\u5de5\u5177\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u79cd\u5c01\u88c5\u540e\u7684\u539f\u5b50\u6027\u64cd\u4f5c\u6765\u89e3\u51b3 race condition\uff0c\u800c\u4e0d\u9700\u8981\u518d\u533a\u5206 entry section \u6216\u662f critical section \u7b49\u3002

    \u4e66\u672c\u4e0a\u7279\u5730\u63d0\u5230\uff0c\u5728\u4f8b\u5982 producer&consumer \u7684\u6a21\u578b\u4e2d\uff0c\u4f7f\u7528 atomic variables \u7ef4\u62a4 count \u5e76\u4e0d\u80fd\u89e3\u51b3 race condition\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u79cd\u8ba8\u8bba\u662f\u6709\u5931\u504f\u9887\u7684\uff0c\u6240\u8c13\u7684\u201c\u539f\u5b50\u6027\u201d\u5e94\u8be5\u5305\u62ec\u6240\u6709\u64cd\u4f5c\u4e34\u754c\u8d44\u6e90\u7684\u90e8\u5206\uff0c\u4e66\u4e2d\u53ea\u7ef4\u62a4 count \u4e0d\u7ef4\u62a4 buffer \u7684\u5047\u8bbe\u6211\u89c9\u5f97\u5bf9\u4e8e atomic \u8fd9\u4e2a\u6982\u5ff5\u6765\u8bf4\u5b9e\u5728\u4e0d\u591f\u516c\u5e73\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u5c31\u4e0d\u7740\u91cd\u8bf4\u660e\u8fd9\u4e2a\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#mutex-locks","title":"Mutex Locks","text":"

    \u7531\u6b64\u6211\u4eec\u5df2\u7ecf\u5f97\u5230\u4e86\u80fd\u5728\u786c\u4ef6\u5c42\u9762\u89e3\u51b3 race condition \u95ee\u9898\u7684\u6839\u6e90\u7684\u5de5\u5177\u4e86\uff0c\u4f46\u662f\u4e3a\u4e86\u80fd\u8ba9\u7528\u6237\u7a0b\u5e8f\u4e5f\u80fd\u66f4\u597d\u7684\u4f7f\u7528\uff0c\u6211\u4eec\u9700\u8981\u5c06\u5b83\u505a\u4e00\u6b21\u8f6f\u4ef6\u5c42\u9762\u7684\u5c01\u88c5\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e92\u65a5\u9501(mutex locks)\u8fd9\u4e2a\u4e1c\u897f\u3002

    \u5229\u7528\u4e92\u65a5\u9501\u907f\u514d race condition \u7684\u57fa\u672c\u601d\u8def\u4ecd\u7136\u662f\u57fa\u4e8e CS \u95ee\u9898\u7684\u5efa\u6a21\uff0c\u4f46\u5b83\u66f4\u5177\u4f53\u5730\u8ba4\u4e3a\u5728 entry section \u5c31\u8be5\u53bb\u7d22\u53d6\u4e92\u65a5\u9501\uff0c\u800c\u5728 exit section \u5c31\u5e94\u8be5\u53bb\u91ca\u653e\u4e92\u65a5\u9501\uff0c\u5373\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Acquire Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Critical Section   \u2502 <-- codes manipulating critical resources\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Release Lock       \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502  Remainder Section  \u2502 <-- other codes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u56de\u987e\u6211\u4eec\u5728\u4ecb\u7ecd test_and_set() \u90e8\u5206\u7ed9\u51fa\u7684\u8fd9\u6bb5\u4ee3\u7801\uff1a

    process(i) {\nwhile ( test_and_set(&LOCK) ) {}    // - entry section\n/* operate critical resources */    // - critical section\n\nLOCK = false;                       // - exit section\n/* other things */                  // - remainder section\n}\n

    \u6211\u4eec\u53ea\u9700\u8981\u5c06\u9ad8\u4eae\u7684\u8fd9\u4e24\u884c\u5c01\u88c5\u8d77\u6765\uff0c\u5c31\u5b9e\u73b0\u4e86 acquire LOCK \u548c release LOCK\u3002

    // `available` means whether the `LOCK` is free, or whether the related \n// resources is available\nacquire() {\nwhile ( !compare_and_swap(&available, true, false) ) {}\n}\n\nrelease() {\navailable = true;\n}\n

    \u4f60\u53ef\u80fd\u6ce8\u610f\u5230\u4e86\uff0c\u6211\u4eec\u5728 test_and_set() \u8ba8\u8bba\u4e0a\u9762\u90a3\u6bb5\u4ee3\u7801\u7684\u65f6\u5019\uff0c\u8ba8\u8bba\u8fc7\u5b83\u65e0\u6cd5\u6ee1\u8db3 bounded waiting time \u7684\u95ee\u9898\uff0c\u90a3\u65e2\u7136\u5982\u6b64\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u628a WAITING[] \u4e5f\u4e00\u8d77\u5c01\u8fdb\u53bb\u5462\uff1f

    \u8fd9\u662f\u56e0\u4e3a\u4e66\u4e0a\u76f4\u63a5\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u76f4\u5230\u5728\u4e4b\u540e\u8bb2 semaphores \u7684\u65f6\u5019\u624d\u60f3\u8d77\u6765\uff0c\u4f46 semaphores \u548c mutex lock \u53c8\u662f\u4e24\u4e2a\u8def\u5b50\uff0c\u6211\u4e5f\u4e0d\u77e5\u9053\u5b83\u5230\u5e95\u60f3\u8bf4\u660e\u4ec0\u4e48\u95ee\u9898\u3002\u4f46\u662f\u65e2\u7136\u5b83\u73b0\u5728\u5ffd\u7565\u4e86\uff0c\u6211\u4eec\u5c31\u5148\u4e0d\u7ba1\u5b83\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u8bfb\u8005\u80fd\u610f\u8bc6\u5230\u8fd9\u4e2a\u95ee\u9898\u662f\u5b58\u5728\u7684\u3002

    \u7ecf\u8fc7\u8fd9\u4e48\u957f\u7684\u94fa\u57ab\uff0c\u6211\u4eec\u73b0\u5728\u80fd\u591f\u4fdd\u8bc1\u7684\u4e00\u4ef6\u4e8b\u662f\uff0c\u6211\u4eec\u7ec8\u4e8e\u5f97\u5230\u4e86\u4e00\u4e2a\u8f6f\u4ef6\u5c42\u9762\u7684\u3001\u80fd\u591f\u907f\u514d race condition \u7684\u540c\u6b65\u5de5\u5177\u3002\u90a3\u4e48\u5b9e\u73b0\u57fa\u672c\u9700\u6c42\u4ee5\u540e\u6211\u4eec\u5c31\u5f00\u59cb\u8003\u8651\u80fd\u4e0d\u80fd\u4f18\u5316\u5b83\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u5fd9\u7b49\u5f85","title":"\u5fd9\u7b49\u5f85","text":"

    \u5982\u679c\u8bfb\u8005\u5bf9\u4ee3\u7801\u6709\u6bd4\u8f83\u654f\u611f\u7684\u55c5\u89c9\uff0c\u90a3\u53ef\u80fd\u770b\u8fd9\u51e0\u5343\u4e2a\u5b57\u5230\u73b0\u5728\uff0c\u4f60\u5df2\u7ecf\u4e3a\u6570\u4e0d\u6e05\u7684 while() \u63d0\u5fc3\u540a\u80c6\u8fc7\u5341\u591a\u6b21\u4e86\u3002\u6ca1\u9519\uff0c\u867d\u7136\u6211\u4eec\u901a\u8fc7\u903b\u8f91\u4fdd\u8bc1\u8fd9\u91cc\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u5faa\u73af\uff0c\u4f46\u5bf9\u4e8e\u7b49\u5f85\u4e2d\u7684 process\uff0c\u786e\u5b9e\u8981\u5728\u6570\u4e0d\u5c3d\u7684 while loop \u4e2d\u6d6a\u8d39 CPU\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u7b49\u5f85\u9501\u91ca\u653e\u7684\u884c\u4e3a\u4e3a\u5fd9\u7b49\u5f85(busy waiting)\uff0c\u5176\u4e2d\u201c\u5fd9\u201d\u6307\u7684\u5c31\u662f\u5728\u7b49\u5f85\u8fc7\u7a0b\u4e2d\u4ecd\u7136\u5360\u7528 CPU \u8d44\u6e90\u3002\u800c\u8fd9\u79cd\u4f7f\u7528\u5fd9\u7b49\u5f85\u7684\u4e92\u65a5\u9501\uff0c\u4e5f\u88ab\u79f0\u4e3a\u81ea\u65cb\u9501(spinlock)\u3002

    \u6211\u4eec\u5f15\u5165\u4e24\u4e2a\u8bcd\u6765\u66f4\u51c6\u786e\u7684\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\uff1a

    Lock Contention

    \u5982\u679c\u4e00\u4e2a\u7528\u6237\u8bd5\u56fe\u7d22\u53d6\u67d0\u4e2a\u9501\u65f6\uff0c\u5982\u679c\u8fd9\u4e2a\u9501\u4e0d\u662f available \u7684\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u6709\u7528\u6237\u6b63\u5728\u4f7f\u7528\u8fd9\u4e2a\u9501\uff0c\u800c\u5f53\u524d\u7528\u6237\u9700\u8981\u7b49\u5f85\u8fd9\u4e2a\u9501\u91cd\u65b0\u53ef\u7528\uff0c\u6b64\u65f6\u6211\u4eec\u79f0\u8fd9\u4e2a\u9501\u662f\u88ab\u4e89\u62a2\u7684(contended)\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u4e89\u62a2\uff0c\u6211\u4eec\u5c31\u79f0\u4e4b\u4e3a\u4e0d\u88ab\u4e89\u62a2\u7684(uncontended)\u3002

    \u5982\u679c\u73b0\u5728\u6709\u597d\u591a\u7528\u6237\u90fd\u5728\u4e89\u62a2\u4e00\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a high contention\uff1b\u53cd\u4e4b\u5982\u679c\u53ea\u6709\u96f6\u661f\u51e0\u4e2a\u7528\u6237\u5728\u4e89\u62a2\u8fd9\u4e2a\u9501\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a low contention\u3002

    \u5982\u679c\u5ef6\u7528 spinlock\uff0c\u90a3\u4e48\u4e0d\u96be\u5f97\u5230\u7ed3\u8bba\uff1ahigh contention \u4f1a\u5bfc\u81f4\u4e25\u91cd\u7684\u6027\u80fd\u95ee\u9898\uff0c\u56e0\u4e3a\u603b\u662f\u4f1a\u6709\u5927\u91cf\u5f97\u4e0d\u5230\u9501\u7684\u7528\u6237\u5904\u4e8e busy waiting \u4e2d\u3002

    \u65e2\u7136\u5b83\u4eec\u90fd\u662f\u5728\u505a\u65e0\u610f\u4e49\u7684\u7b49\u5f85\uff0c\u90a3\u6211\u4eec\u4e3a\u4ec0\u4e48\u4e0d\u5728\u8fd9\u4e2a\u65f6\u5019\u628a\u8d44\u6e90\u8ba9\u7ed9\u6709\u9700\u8981\u7684\u4eba\u5462\uff1f

    \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6682\u65f6\u5730\u5207\u6362\u8fdb\u7a0b\uff0c\u8ba9\u8fd9\u4e9b\u5904\u4e8e\u7b49\u5f85\u7684\u7528\u6237\u6682\u65f6\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5230\u6765\u518d\u5524\u9192\u5b83\u4eec\uff0c\u6b64\u65f6\u5c31\u9700\u8981\u7cfb\u7edf\u8c03\u7528\u7684\u4ecb\u51653\u3002\u800c\u5177\u4f53\u7684\u65b9\u6cd5\u6211\u4eec\u5728\u4e0b\u4e00\u8282\u7684\u907f\u514d\u5fd9\u7b49\u5f85\u4e2d\u4ecb\u7ecd\u3002

    \u4f46\u662f\u8bf7\u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u91cc\u9700\u8981\u4fdd\u6301\u5ba2\u89c2\uff1aspinlock \u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u662f\u6709\u597d\u5904\u7684\uff0c\u5728\u7b49\u5f85\u65f6\u95f4\u5e76\u4e0d\u957f\u7684\u60c5\u51b5\u4e0b\uff0c\u76f8\u6bd4\u4e8e\u62e5\u6709\u9501\u7684\u7528\u6237\u91ca\u653e\u9501\uff0c\u8fdb\u884c\u8c03\u5ea6\u9501\u9700\u8981\u7684 context switch \u7684\u5f00\u9500\u53ef\u80fd\u663e\u5f97\u8f83\u5927\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u6211\u4eec\u8fd8\u6ca1\u6765\u5f97\u53ca\u628a\u8d44\u6e90\u8ba9\u7ed9\u522b\u4eba\u9501\u5c31\u597d\u4e86\uff0c\u90a3\u4e48\u8fd9\u79cd\u8d44\u6e90\u8f6c\u8ba9\u8fd8\u4e0d\u5982\u4e0d\u8f6c\u3002\u800c\u4e8b\u5b9e\u4e0a\uff0c\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\uff0c\u81ea\u65cb\u9501\u4e5f\u786e\u5b9e\u662f\u4e00\u4e9b\u591a\u6838\u7cfb\u7edf\u7684\u9996\u9009\u3002

    \u4e0d\u8fc7\u5728\u8bb8\u591a\u8bed\u5883\u91cc mutex \u548c spinlock \u662f\u88ab\u533a\u5206\u5f00\u6765\u7684\u4e24\u4e2a\u6982\u5ff5\uff0c\u5177\u4f53\u4f7f\u7528\u54ea\u4e2a\u5219\u9700\u8981\u9002\u65f6\u5224\u65ad4\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#semaphores","title":"Semaphores","text":"

    Links

    Mutex lock \u4e3a\u7528\u6237\u7a0b\u5e8f\u63d0\u4f9b\u4e86\u7c7b\u4f3c\u4e8e\u201c\u623f\u95f4\u7533\u8bf7\u201d\u7684\u529f\u80fd\uff0c\u9501\u7ade\u4e89\u5c31\u597d\u50cf\u5927\u5bb6\u62a2\u623f\u95f4\u7684\u4f7f\u7528\u6743\u3002\u800c\u4fe1\u53f7\u91cf(semaphores)\u5219\u662f\u7c7b\u4f3c\u4e8e\u6211\u4eec\u4e4b\u524d\u63d0\u5230\u8fc7\u7684 atomic variables\uff0c\u901a\u8fc7\u63d0\u4f9b\u6807\u51c6\u5316\u7684\u539f\u5b50\u6027\u64cd\u4f5c\uff0c\u6765\u7ef4\u62a4\u4e00\u4e9b\u53d8\u91cf\uff0c\u53ea\u4e0d\u8fc7\u5b83\u989d\u5916\u5bf9\u53d8\u91cf\u7684\u503c\u6709\u4e00\u5b9a\u7684\u7ea6\u675f\u3002

    \uff08\u8bf4\u5b9e\u8bdd\u6211\u611f\u89c9\u8fd9\u4fe9\u4e1c\u897f\u672c\u8d28\u4e0a\u771f\u6ca1\u5565\u533a\u522b\u2026\u2026\uff09

    Semaphores \u53ea\u63d0\u4f9b\u4e24\u4e2a\u6807\u51c6\u5316\u7684\u63a5\u53e3\uff1await()\uff08\u6216P()\uff09 \u548c signal()\uff08\u6216V()\uff09\uff0c\u5b83\u4eec\u7684\u529f\u80fd\u5982\u4e0b\uff1a

    <atomic> wait(reference S) {\nwhile (S <= 0) {} // busy wait here\nS--;\n}\n\n<atomic> signal(reference S) {\nS++;\n}\n

    \u663e\u7136\uff0c\u8fd9\u4e24\u4e2a\u64cd\u4f5c\u7684\u5b9e\u73b0\u4e5f\u5e94\u5f53\u4fdd\u8bc1\u662f atomic \u7684\u3002

    \u533a\u522b\u4e8e\u666e\u901a\u7684 atomic variables\uff0csemaphores \u591a\u4e86\u5728\u7b2c 2 \u884c\u7684 busy wait\uff0c\u8fd9\u6697\u542b\u4e86\u4e00\u79cd\u201c\u6709\u9650\u201d\u7684\u6982\u5ff5\uff0c\u5373\u4fdd\u8bc1 \\(0 \\leq S\\)\u3002\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\uff0csemaphores \u5206\u4e3a counting semaphore \u548c binary semaphore\uff0c\u524d\u8005\u7684\u529f\u80fd\u5982\u4e0a\uff0c\u540e\u8005\u53ea\u4e0d\u8fc7\u662f\u989d\u5916\u8981\u6c42 \\(0 \\leq S \\leq 1\\)\uff0c\u4fee\u6539 loop \u7684\u6761\u4ef6\u5373\u53ef\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u4f7f\u7528","title":"\u4f7f\u7528","text":"

    \u4f8b\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u5982\u4e0b\u65b9\u5f0f\uff0c\u4fdd\u8bc1 P0() \u4e2d\u7684 section A \u5fc5\u987b\u5728 P1() \u7684 section B \u4e4b\u524d\u5b8c\u6210\uff1a

    semaphore S = 0;\n\nP0() {\n/* Section A */\nsignal(S);\n}\n\nP1() {\nwait(S);\n/* Section B */\n}\n

    \u4e0a\u9762\u7684\u4f8b\u5b50\u975e\u5e38\u5f62\u8c61\u5730\u5c55\u793a\u4e86\u4fe1\u53f7\u91cf\u662f\u5982\u4f55\u53d1\u6325\u4f5c\u7528\u7684\uff0c\u5f53\u7136\uff0c\u4e0a\u9762\u53ea\u5c55\u793a\u4e86\u7c7b\u4f3c\u8fdb\u7a0b\u95f4\u901a\u8baf\u7684\u529f\u80fd\uff0c\u4e0b\u9762\u8fd9\u4e2a\u5f62\u5f0f\u5219\u66f4\u63a5\u8fd1\u6211\u4eec\u4e0a\u6587\u4e2d\u8ba8\u8bba\u7684\u60c5\u51b5\uff0c\u5373\u5b9e\u73b0\u4e86\u4e92\u65a5\uff1a

    // `i` is process id and S is the semaphores\nprocess(i) {\nwait(S);    // i.e. release the 'LOCK'\n\n/* critical section */\n\nsignal(S);  // only one process can pass this line at once\n}\n
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part1/#\u907f\u514d\u5fd9\u7b49\u5f85","title":"\u907f\u514d\u5fd9\u7b49\u5f85","text":"

    \u6211\u4eec\u5728 mutex \u4e2d\u63d0\u51fa\u5fd9\u7b49\u5f85\u7684\u65f6\u5019\u5c31\u5df2\u7ecf\u63d0\u5230\u8fc7\uff0c\u53ef\u4ee5\u901a\u8fc7\u300c\u5728\u7b49\u5f85\u7684\u65f6\u5019\u8ba9\u8fdb\u7a0b\u4f11\u7720\uff0c\u7b49\u65f6\u673a\u5408\u9002\u7684\u65f6\u5019\u518d\u5524\u9192\u300d\u7684\u65b9\u5f0f\uff0c\u6765\u51cf\u5c0f\u8f83\u957f\u7684\u5fd9\u7b49\u5f85\u5f15\u8d77\u7684\u6027\u80fd\u964d\u4f4e\u3002\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u9700\u8981\u6269\u5c55 semaphores \u7684\u5185\u5bb9\uff0c\u5f15\u5165\u4e00\u4e2a\u94fe\u8868\u6765\u7ef4\u62a4\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u3002

    struct semaphore {\nvalue;\nwaiting_list;\n};\n\n<atomic> wait(reference S) {\nS->value--;\nif (S->value < 0) {\nS->waiting_list.push(current process);\nsleep();\n}\n}\n\n<atomic> signal(reference S) {\nS->value++;\nif (S->value <= 0) {\np = S->waiting_list.pop();\nwakeup(p);\n}\n}\n

    \u76f8\u6bd4\u4e8e\u4e4b\u524d\u7684\u903b\u8f91\uff0c\u73b0\u5728\u7684\u903b\u8f91\u7a0d\u5fae\u6709\u70b9\u53d8\u5316\uff0c\u8bf7\u8bfb\u8005\u5c1d\u8bd5\u72ec\u7acb\u5206\u6790\u5176\u4e2d\u7684\u5965\u79d8\u3002\u8fd9\u91cc\u662f\u4e00\u4e9b\u63d0\u793a\uff1a

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u601d\u8003\uff1a

    1. \u73b0\u5728\u5df2\u7ecf\u6ca1\u6709 while \u4e86\uff0c\u53ea\u4f59\u4e0b if\uff0c\u73b0\u5728\u662f\u5982\u4f55\u4fdd\u8bc1\u7b49\u5f85\u4e2d\u7684\u8fdb\u7a0b\u80fd\u591f\u88ab\u53ca\u65f6\u5524\u9192\uff1f
    2. wait \u539f\u5148\u662f\u5148\u7b49\u5f85\u518d\u4fee\u6539\uff0c\u73b0\u5728\u662f\u5148\u4fee\u6539\u3001\u518d\u7b49\u5f85\uff0c\u8fd9\u5bf9\u6574\u4f53\u903b\u8f91\u6709\u4f55\u5f71\u54cd\uff1f
    3. signal \u4e2d\u7684\u6761\u4ef6\u8bed\u53e5\uff0c\u4e3a\u4f55\u662f S->value <= 0\uff1f\u8fd9\u4e2a\u6761\u4ef6\u4e3a false \u65f6\u610f\u5473\u7740\u4ec0\u4e48\uff1f
      • \u8003\u8651\u5728 high contention \u7684\u60c5\u51b5\u4e0b\uff0c\u8d44\u6e90\u603b\u662f\u4e00\u51fa\u73b0\u5c31\u88ab\u62a2\u7a7a\u3002

    \u800c\u5b9e\u9645\u4e0a\uff0c\u73b0\u5728\u6211\u4eec\u63d0\u5230\u4fe1\u53f7\u91cf\uff0c\u9ed8\u8ba4\u6307\u7684\u5c31\u662f\u907f\u514d\u5fd9\u7b49\u5f85\u8fd9\u4e00\u8282\u4e2d\u63d0\u5230\u7684\u8fd9\u79cd\u3002

    1. The Critical Section Problem \u21a9

    2. \u4e66\u672c\u4e2d\u5bf9 preemptive kernels \u548c non-preemptive kernels \u7684\u5b9a\u4e49\u5e76\u4e0d\u51c6\u786e\uff0c\u4e24\u8005\u6700\u672c\u8d28\u7684\u533a\u522b\u662f\u540e\u8005\u5b9e\u73b0\u4e86 Giant Lock\u3002\u540c\u65f6\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff1aWhat was the reason of the non-preemptivity of older Linux kernels? | Stack Exchange \u21a9

    3. Mutex access and system call | Stack Overflow \u21a9

    4. \u2b50\ufe0f When should one use a spinlock instead of mutex? | Stack Overflow \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/","title":"U2 Part 2: \u540c\u6b65\u95ee\u9898\u4f8b\u5b50 | Synchronization Problems Examples","text":"

    \u7ea6 1567 \u4e2a\u5b57 51 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-bounded-buffer-problem","title":"The Bounded-Buffer Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f","title":"\u95ee\u9898\u80cc\u666f","text":"

    The Bounded-Buffer Problem \u53c8\u79f0 The Producer\u2013Consumer Problem\uff0c\u5728\u8be5\u95ee\u9898\u4e2d\uff0c\u6709\u4e24\u4e2a\u89d2\u8272\uff0cproducer \u548c consumer\uff1aproducer \u4f1a\u4ea7\u751f item \u5b58\u653e\u5230 buffer \u4e2d\uff0c\u800c consumer \u53ef\u4ee5\u5c06\u6570\u636e\u4ece buffer \u4e2d\u53d6\u51fa item\u3002\u5982\u679c\u6211\u4eec\u7528 \\(n = \\# items\\) \u6765\u63cf\u8ff0 buffer \u7684\u72b6\u6001\uff0c\u90a3\u4e48\u95ee\u9898\u5c06\u62bd\u8c61\u4e3a\uff1a

    void produce() {\n/* something */\n++n;\n/* something */\n}\n\nvoid consume() {\n/* something */\n--n;\n/* something */\n}\n

    \u540c\u65f6\uff0c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1 \\(0 \\leq n \\leq n_{max}\\)\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728 \\(n = 0\\) \u65f6\uff0c\u8ba9 consumer \u7b49\u5f85 \\(n > 0\\) \u518d consume()\uff1b\u5bf9\u5e94\u7684\uff0c\u5728 \\(n = n_{max}\\) \u65f6\u5019\uff0c\u8ba9 producer \u7b49\u5f85 \\(n < n_{max}\\) \u518d produce()\u3002\u4f46\u8fd9\u5e76\u4e0d\u662f\u6211\u4eec\u5728\u672c\u5355\u5143\u63d0\u53ca\u5b83\u7684\u91cd\u70b9\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u8fd9\u91cc\u8ba4\u4e3a\u5b83\u4eec\u5728 /* something */ \u4e2d\u3002

    \u5b9e\u9645\u7684 The Bounded-Buffer Problem \u4e2d\u8fd8\u6709\u4e00\u4e9b\u5176\u5b83\u7ec6\u8282\uff0c\u4f46\u662f\u8fd9\u91cc\u6211\u4eec\u5c06\u6574\u4e2a\u95ee\u9898\u62bd\u8c61\u4e3a\u6211\u4eec\u9700\u8981\u7684\u6a21\u6837\uff0c\u8bf7\u4e0d\u8981\u8ba4\u4e3a\u4e0a\u9762\u7684\u4ee3\u7801\u5c31\u662f The Bounded-Buffer Problem \u7684\u5168\u90e8\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u63cf\u8ff0","text":"

    \u8003\u8651\u5728\u5e76\u884c\u8bed\u5883\u4e0b\uff0cproduce() \u548c consume() \u540c\u65f6\u53d1\u751f\uff0c\u7531\u4e8e ++n \u548c --n \u8fd9\u4e9b\u64cd\u4f5c\u672c\u8d28\u4e0a\u662f\u6570\u503c\u7684\u3001\u9700\u8981\u4e00\u6bb5\u65f6\u95f4\u6765\u5b8c\u6210\u7684\uff0c\u6240\u4ee5\u5bb9\u6613\u51fa\u73b0 race condition\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores","title":"\u89e3\u51b3 - semaphores","text":"

    \u6211\u4eec\u4f7f\u7528\u4fe1\u53f7\u91cf\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u9700\u8981\u5b9a\u4e49\u4e09\u4e2a\u4fe1\u53f7\u91cf\uff1a

    // suppose the capacity of the buffer is n\nsemaphore mutex = 1;\nsemaphore empty = n;\nsemaphore full  = 0;\n

    \u903b\u8f91\u4e0a\u6211\u4eec\u8981\u6c42 empty + full == n \u59cb\u7ec8\u6210\u7acb\uff0c\u4f46\u662f\u5728\u5b9e\u9645\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u53ef\u80fd\u4f1a\u4ea7\u751f\u4e00\u5b9a\u8bef\u5dee\uff08\u8003\u8651\u67d0\u4e2a\u539f\u8bed\u8fd8\u6ca1\u5f7b\u5e95\u6267\u884c\u5b8c\uff09\u3002\u800c\u6211\u4eec\u8fd9\u91cc\u4e4b\u6240\u4ee5\u8981\u4f7f\u7528\u4e24\u4e2a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a buffer \u7684\u5360\u7528\u72b6\u6001\uff0c\u662f\u56e0\u4e3a\u4fe1\u53f7\u91cf\u7684\u201c\u6709\u754c\u201d\u662f\u901a\u8fc7 0 \u7ef4\u62a4\u7684\uff0c\u4e5f\u5c31\u662f\u53ea\u6709\u5728\u201c\u51cf\u5c11\u201d\u7684\u65f6\u5019\u624d\u80fd\u7ef4\u62a4\uff1b\u800c\u6211\u4eec\u7684\u8981\u6c42\u662f\uff0cbuffer \u7684\u4e0a\u4e0b\u754c\u90fd\u6709\u754c\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e24\u4e2a\u4fe1\u53f7\u91cf\u5206\u522b\u6765\u7ef4\u62a4\u4e24\u4e2a\u8fb9\u754c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-readerswriters-problem","title":"The Readers\u2013Writers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

    \u8be5\u95ee\u9898\u62bd\u8c61\u81ea\u6570\u636e\u5e93\u7684\u4f7f\u7528\u3002\u7528\u6237\u4f7f\u7528\u6570\u636e\u5e93\u4fee\u6539\u6570\u636e\uff08UPDATE\uff09\uff0c\u672c\u8d28\u4e0a\u4e5f\u662f\u6709\u4e09\u4e2a\u6b65\u9aa4\uff1a

    1. [READ] \u4ece\u6570\u636e\u5e93\u4e2d\u68c0\u7d22\u3001\u8bfb\u53d6\u6570\u636e\uff1b
    2. \u6570\u636e\u7ecf\u8fc7\u4e1a\u52a1\u903b\u8f91\u7684\u5904\u7406\uff0c\u5f97\u5230\u65b0\u503c\uff1b
    3. [WRITE] \u5c06\u65b0\u503c\u5199\u56de\u6570\u636e\u5e93\uff1b

    \u8fd9\u4e2a\u6b65\u9aa4\u4e0e\u6211\u4eec\u4fee\u6539 mem[x] \u7684\u8fc7\u7a0b\u9ad8\u5ea6\u76f8\u4f3c\uff0c\u56e0\u6b64\u9047\u5230\u7684\u95ee\u9898\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002

    \u51b2\u7a81\u4e3b\u8981\u4f53\u73b0\u5728\u4e24\u79cd\u60c5\u51b5\uff1a

    \u663e\u7136\uff0creader \u548c reader \u4e0d\u4f1a\u6709\u51b2\u7a81\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_1","title":"\u89e3\u51b3 - semaphores","text":"

    \u6709\u4e24\u79cd\u79cd\u6734\u7d20\u7684\u89e3\u51b3\u529e\u6cd5\uff1a\u24f5 writer \u603b\u662f\u7b49\u5f85 reader\uff0c\u24f6 reader \u603b\u662f\u7b49\u5f85 writer\u3002\u4f46\u662f\u8fd9\u4e24\u79cd\u89e3\u51b3\u529e\u6cd5\u90fd\u4e0d\u662f\u5f88\u597d\uff0c\u56e0\u4e3a \u24f5 \u4f1a\u5bfc\u81f4 writer \u9965\u997f\uff0c\u24f6 \u4f1a\u5bfc\u81f4 reader \u9965\u997f\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u7ed9\u51fa\u6b63\u5f0f\u7684\u89e3\u51b3\u65b9\u6cd5\uff0c\u5f15\u5165\u4e24\u4e2a\u4fe1\u53f7\u91cf\u548c\u4e00\u4e2a\u5171\u4eab\u53d8\u91cf\uff1a

    semaphores rw_mutex   = 1;\nsemaphores mutex      = 1;\nint        read_count = 0;\n

    \u8003\u8651\u5230 reader \u548c reader \u4e0d\u4f1a\u51b2\u7a81\uff0c\u6240\u4ee5 readers \u4e4b\u95f4\u4e0d\u5e94\u8be5\u4e92\u65a5\u3002\u800c\u6211\u4eec\u9700\u8981\u4fdd\u8bc1\u7684\u662f\uff1a\u5355\u4e2a writer \u548c\u82e5\u5e72 readers \u4e4b\u95f4\u4e92\u65a5\uff0c\u5355\u4e2a writer \u548c\u5355\u4e2a writer \u4e4b\u95f4\u4e92\u65a5\u3002\u800c rw_mutex \u5c31\u662f\u7528\u4e8e\u63a7\u5236\u8fd9\u79cd\u4e92\u65a5\u3002

    writer's code
    writer() {\nwait(rw_mutex);\n\n/* critical section */\nsignal(rw_mutex);\n}\n

    \u4f46\u6b64\u65f6\u5982\u4f55\u4fdd\u8bc1 readers \u4e4b\u95f4\u4e0d\u4f1a\u4e92\u65a5\u5462\uff1f\u9996\u5148\uff0c\u5f53\u7b2c\u4e00\u4e2a reader \u8bd5\u56fe\u8fdb\u5165\u4e34\u754c\u6bb5\u65f6\uff0c\u5b83\u5e94\u5f53\u83b7\u53d6\u4e00\u4e2a rw_mutex\uff0c\u4ee5\u963b\u6b62\u5176\u5b83 writer \u8fdb\u5165\u4e34\u754c\u6bb5\u3002\u800c\u5bf9\u4e8e\u4e4b\u540e\u7684 reader \u6765\u8bf4\uff0c\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a reader\uff0c\u90a3\u4e48\u5b83\u53ef\u4ee5\u76f4\u63a5\u8fdb\u5165\u4e34\u754c\u6bb5\uff1b\u5982\u679c\u76ee\u524d\u83b7\u53d6\u9501\u7684\u662f\u4e00\u4e2a writer\uff0c\u90a3\u4e48\u5b9e\u9645\u4e0a\u5b83\u624d\u662f\u7b2c\u4e00\u4e2a reader\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5bf9\u4e8e\u62ff rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5224\u65ad\u5f53\u524d\u6709\u6ca1\u6709 reader \u6b63\u5728\u4eab\u7528\u4e34\u754c\u8d44\u6e90\u5373\u53ef\uff1b\u800c\u5bf9\u4e8e\u653e rw_mutex \u6765\u8bf4\uff0c\u6211\u4eec\u9700\u8981\u5224\u65ad\u5f53\u524d\u662f\u4e0d\u662f\u6700\u540e\u4e00\u4e2a reader\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u8ba1\u6570\u5668 read_count\uff0c\u800c\u7531\u4e8e\u8fd9\u4e2a\u8ba1\u6570\u5668\u662f\u4e2a\u666e\u901a\u7684\u5171\u4eab\u53d8\u91cf\uff0c\u800c\u4e14\u8fd9\u4e2a\u8ba1\u6570\u5668\u672c\u8eab\u4e5f\u662f\u4e2a\u4e34\u754c\u8d44\u6e90\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u4e00\u4e2a mutex \u6765\u7ef4\u62a4\u5b83\u3002

    \u6240\u4ee5\uff0c\u5b9e\u9645\u4e0a reader \u7684\u4ee3\u7801\u4e2d\u542b\u6709 3 \u4e2a\u4e34\u754c\u6bb5\uff0c\u5206\u522b\u662f\uff1a\u8ba1\u6570\u5668\u589e\u3001\u8bfb\u53d6\u4e34\u754c\u8d44\u6e90\u3001\u8ba1\u6570\u5668\u51cf\u3002

    reader's code
    reader() {\nwait(mutex);            //   \u2510\nread_count++;           //   \u251c obtain `mutex` to increase\nif (read_count == 1) {  //   \u2502 `read_count`\nwait(rw_mutex);     // \u2510 \u2502\n}                       // \u2502 \u2502\nsignal(mutex);          // \u2502 \u2518\n// \u251c\u2500\u2500 readers share `rw_mutex` to\n/* critical section */  // \u2502   read critical resource\n// \u2502\nwait(mutex);            // \u2502 \u2510\nread_count--;           // \u2502 \u251c obtain `mutex` to decrease\nif (read_count == 0) {  // \u2502 \u2502 `read_count`\nsignal(rw_mutex);   // \u2518 \u2502\n}                       //   \u2502\nsignal(mutex);          //   \u2518\n}\n

    \u903b\u8f91\u4e0a\uff0c\u91ca\u653e rw_mutex \u7684 reader \u4e0d\u9700\u8981\u662f\u7533\u8bf7 rw_mutex \u7684 reader\uff0c\u8fd9\u4e5f\u5370\u8bc1\u4e86\u8fd9\u4e2a\u9501\u7ef4\u62a4\u7684\u662f\u6574\u4e2a readers \u7fa4\u4f53\u7684\u5b58\u5728\u4e0e\u5426\uff0c\u800c\u4e0d\u662f\u201c\u67d0\u4e2a reader\u201d\u7684\u5b58\u5728\u4e0e\u5426\u3002

    \u4e3a\u4ec0\u4e48 read_count \u4e0d\u4f7f\u7528\u4fe1\u53f7\u91cf\uff1f

    \u6211\u4eec\u89c2\u5bdf\u5bf9 read_count \u7684\u64cd\u4f5c\uff0c\u4e00\u5171\u6709\u4e09\u7c7b\uff1a

    1. read_count++\uff1b
    2. read_count--\uff1b
    3. read_count == k\uff1b

    \u5e76\u4e14 read_count >= 0 \u5e94\u5f53\u59cb\u7ec8\u6210\u7acb\uff0c\u6240\u4ee5\u5149\u770b\u524d\u4e24\u7c7b\uff0c\u5176\u5b9e\u5f88\u9002\u5408\u76f4\u63a5\u4f5c\u4e3a\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u3002\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\u5bf9\u4fe1\u53f7\u91cf\u8fdb\u884c\u6bd4\u8f83\u64cd\u4f5c\uff0c\u6240\u4ee5\u6211\u4eec\u662f\u7528 mutex \u7ef4\u62a4\u4e86 read_count\uff0c\u53ef\u4ee5\u53d1\u73b0\uff0c\u6240\u6709\u5bf9 read_count \u7684\u64cd\u4f5c\u90fd\u662f\u5728 mutex \u7684\u4fdd\u62a4\u4e0b\u8fdb\u884c\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u5176\u5b9e read_count \u548c mutex \u4e00\u8d77\u6784\u6210\u4e86\u4e00\u4e2a\u539f\u5b50\u53d8\u91cf\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#the-dining-philosophers-problem","title":"The Dining Philosophers Problem","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u95ee\u9898\u80cc\u666f--\u95ee\u9898\u63cf\u8ff0_1","title":"\u95ee\u9898\u80cc\u666f & \u95ee\u9898\u63cf\u8ff0","text":"

    \u5728\u8fd9\u4e2a\u95ee\u9898\u4e2d\uff0c\u6709\u4e94\u4e2a\u54f2\u5b66\u5bb6\uff0cta \u4eec\u56f4\u5750\u5728\u4e00\u5f20\u5706\u684c\u65c1\uff0c\u6bcf\u4e2a\u54f2\u5b66\u5bb6\u9762\u524d\u90fd\u6709\u4e00\u7897\u7c73\u996d\uff0c\u800c ta \u4eec\u4e24\u4e24\u4e4b\u95f4\u5206\u522b\u6709\u4e00\u6839\u7b77\u5b50\u3002

    \u6bcf\u5e27\u54f2\u5b66\u5bb6\u90fd\u80fd\u9009\u62e9\u6267\u884c\u4ee5\u4e0b\u4e24\u4e2a\u884c\u4e3a\u4e4b\u4e00\uff1a

    1. \u601d\u8003\uff1b
    2. \u62ff\u7b77\u5b50\uff1b

    \u54f2\u5b66\u5bb6\u5982\u679c\u60f3\u8981\u5e72\u996d\u5c31\u5fc5\u987b\u6709\u4e24\u6839\u7b77\u5b50\uff0cta \u540c\u65f6 \u62ff\u8d77 ta \u5de6\u53f3\u4fa7\u7b77\u5b50\u65f6\uff0c\u624d\u80fd\u5e72\u996d\u3002\u663e\u7136\uff0c\u4e24\u4e2a\u54f2\u5b66\u5bb6\u4e0d\u80fd\u540c\u65f6\u62ff\u8d77\u540c\u4e00\u6839\u7b77\u5b50\uff1b\u5e72\u5b8c\u996d\u54f2\u5b66\u5bb6\u4f1a\u653e\u4e0b\u7b77\u5b50\u3002\u5047\u8bbe\u54f2\u5b66\u5bb6\u4eec\u90fd\u4e0d\u5acc\u810f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---semaphores_2","title":"\u89e3\u51b3 - semaphores","text":"

    \u663e\u7136\uff0c\u6211\u4eec\u53ef\u4ee5\u7528\u4fe1\u53f7\u91cf\u6765\u7ef4\u62a4\u4e00\u4e2a\u7b77\u5b50\u662f\u5426\u53ef\u7528\uff0c\u5c31\u53ef\u4ee5\u5f97\u5230\u4e0b\u9762\uff08\u6709\u95ee\u9898\u7684\uff09\u89e3\u6cd5\uff1a

    process() {\nwait(chopstick[i]);\nwait(chopstick[ (i+1) % 5 ]); // i.e. the next chopstick\n\n/* eat rice */\n\nsignal(chopstick[i]);\nsignal(chopstick[ (i+1) % 5 ]);\n}\n

    \u4e0a\u8ff0\u65b9\u6848\u5b58\u5728\u95ee\u9898\uff01

    \u8003\u8651\u8fd9\u79cd\u60c5\u51b5\uff1a\u6240\u6709\u54f2\u5b66\u5bb6\u5728\u7b2c\u4e00\u5e27\u90fd\u60f3\u8981\u5e72\u996d\uff0c\u6b64\u65f6\u5b83\u4eec\u540c\u65f6\u8fd0\u884c\u5b8c\u4e86\u7b2c 2 \u884c\uff08\u4f8b\u5982\uff0c\u540c\u65f6\u62ff\u8d77\u4e86\u53f3\u624b\u8fb9\u7684\u7b77\u5b50\uff09\uff0c\u8fd9\u65f6\u6211\u4eec\u53d1\u73b0\uff0c\u6240\u6709\u7b77\u5b50\u90fd\u88ab\u5360\u6709\uff0c\u6ca1\u6709\u4efb\u4f55\u4e00\u4e2a\u4eba\u80fd\u7b49\u5230\u4e0b\u4e00\u4e2a\u7b77\u5b50\uff0c\u6b64\u65f6\uff0c\u54f2\u5b66\u5bb6\u4eec\u53d1\u751f\u4e86\u6b7b\u9501\u3002

    \u5bf9\u4e8e\u8fd9\u4e2a\u6b7b\u9501\uff0c\u4e66\u4e2d\u7ed9\u51fa\u4e86\u4e09\u79cd\u89e3\u51b3\u65b9\u6848\uff1a

    1. \u5141\u8bb8\u6700\u591a 4 \u4f4d\u54f2\u5b66\u5bb6\u540c\u65f6\u83b7\u53d6\u7b77\u5b50\uff1b
    2. \u54f2\u5b66\u5bb6\u5fc5\u987b\u540c\u65f6\u83b7\u53d6\u4e24\u4e2a\u7b77\u5b50\uff0c\u800c\u4e0d\u80fd\u6293\u4e00\u652f\u7b49\u4e00\u652f\uff1b
      • \u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e00\u70b9\uff0c\u201c\u6293\u7b77\u5b50\u201d\u8fd9\u4ef6\u4e8b\u5e94\u5f53\u5728\u4e00\u4e2a\u4e34\u754c\u6bb5\u4e2d\u5b8c\u6210\uff1b
    3. \u5947\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u5de6\u624b\u7684\u7b77\u5b50\uff0c\u5076\u6570\u54f2\u5b66\u5bb6\u5148\u62ff\u53f3\u624b\u7684\u7b77\u5b50\uff0c\u8fd9\u6837\u4e0d\u4f1a\u4ea7\u751f\u5faa\u73af\u7b49\u5f85\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part2/#\u89e3\u51b3---monitors","title":"\u89e3\u51b3 - monitors","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/","title":"U2 Part 3: \u6b7b\u9501 | Deadlocks","text":"

    \u7ea6 5209 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 26 \u5206\u949f

    \u5f15\u5165

    \u6b7b\u9501\u95ee\u9898\u5e7f\u6cdb\u5b58\u5728\u4e8e\u8ba1\u7b97\u673a\u8f6f\u4ef6\u7cfb\u7edf\u4e2d\uff0c\u800c\u6211\u4eec\u672c\u8282\u53ea\u8ba8\u8bba\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u5efa\u6a21","title":"\u6b7b\u9501\u5efa\u6a21","text":"

    \u6211\u4eec\u5728\u4e0a\u4e00\u8282\u4e2d\u5df2\u7ecf\u63d0\u5230\u4e86\u4e00\u4e2a\u6b7b\u9501\u60c5\u51b5\u3002\u672c\u8282\u6211\u4eec\u4e13\u6ce8\u4e8e\u5982\u4f55\u89e3\u51b3\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501(deadlock)\u95ee\u9898\u3002

    deadlock

    A deadlock is a situation in which every process in a set of processes is waiting for an event that can be caused only by another process in the set.

    \u5373\u5b58\u5728\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u96c6\u5408\uff0c\u5b83\u4eec\u4e92\u76f8\u7b49\u5f85\u5bf9\u65b9\u6301\u6709\u7684\u8d44\u6e90\u3002

    \u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0c\u5176\u5b9e\u8fd8\u6709\u4e00\u4e2a\u53eb\u6d3b\u9501(livelock)1\u7684\u4e1c\u897f\u3002

    \u6b7b\u9501\u4ea7\u751f\u4e8e\u8d44\u6e90\u7684\u4f7f\u7528\u8fc7\u7a0b\uff0c\u800c\u4e14\u901a\u5e38\u53ea\u5728\u7279\u5b9a\u60c5\u51b5\u4e0b\u624d\u4f1a\u53d1\u751f\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u8fd9\u79cd\u4e0d\u786e\u5b9a\u6027\uff0c\u6b7b\u9501\u95ee\u9898\u624d\u5f02\u5e38\u68d8\u624b\u3002\u4e3a\u4e86\u89e3\u51b3\u6b7b\u9501\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u7406\u89e3\u6b7b\u9501\u4ea7\u751f\u7684\u539f\u56e0\uff0c\u4ee5\u65b9\u4fbf\u5bf9\u5b83\u8fdb\u884c\u5efa\u6a21\uff0c\u8fdb\u800c\u66f4\u597d\u5730\u63cf\u8ff0\u6b7b\u9501\u3002

    \u4ece\u8d44\u6e90\u4f7f\u7528\u7684\u89d2\u5ea6\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7cfb\u7edf\u7684\u884c\u4e3a\u5206\u6210\u4e09\u4e2a\u90e8\u5206\uff1a

    1. \u7533\u8bf7\u8d44\u6e90\uff1b
    2. \u4f7f\u7528\u8d44\u6e90\uff1b
    3. \u91ca\u653e\u8d44\u6e90\uff1b

    \u5176\u4e2d\uff0c\u7533\u8bf7\u8d44\u6e90\u548c\u91ca\u653e\u8d44\u6e90\u901a\u5e38\u901a\u8fc7\u4e0d\u540c\u7684\u7cfb\u7edf\u8c03\u7528\u5b9e\u73b0\u3002\u800c\u90e8\u5206\u8d44\u6e90\u662f\u6709\u9650\u4e14\u4e92\u65a5\u7684\uff0c\u56e0\u800c\u5982\u679c\u5728\u7f3a\u4e4f\u8d44\u6e90\u7684\u60c5\u51b5\u4e0b\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u4ecd\u7136\u60f3\u8981\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u53ea\u80fd\u9677\u5165\u7b49\u5f85\u3002\u800c\u6b63\u5728\u7b49\u5f85\u7684\u8d44\u6e90\u4e5f\u53ef\u80fd\u6301\u6709\u4e00\u4e9b\u8d44\u6e90\uff0c\u4e00\u65e6\u6070\u597d\u51fa\u73b0\u4e86\u4e92\u76f8\u7b49\u5f85\u7684\u60c5\u51b5\uff0c\u5c31\u4f1a\u51fa\u73b0\u6b7b\u9501\u3002\u4f8b\u5982\uff0c\u4e92\u65a5\u9501\u548c\u4fe1\u53f7\u91cf\u8fd9\u4e9b\u4e1c\u897f\u5c31\u662f\u6b7b\u9501\u4ea7\u751f\u7684\u4e00\u5927\u91cd\u8981\u6765\u6e90\u3002

    \u8ba1\u7b97\u673a\u8d44\u6e90\u5206\u4e3a\u5f88\u591a\u7c7b\uff0c\u6bcf\u4e00\u7c7b\u4e2d\u53ef\u80fd\u6709\u82e5\u5e72\u5e73\u7b49\u7684\u201c\u5b9e\u4f8b(instance)\u201d\u3002\u5bf9\u4e8e\u4e00\u4e2a\u5408\u7406\u7684\u201c\u8d44\u6e90\u5206\u7c7b\u201d\u6765\u8bf4\uff0c\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u67d0\u79cd\u8d44\u6e90\u65f6\u5019\uff0c\u8fd9\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u7684\u4efb\u610f\u7a7a\u95f2\u5b9e\u4f8b\u90fd\u5e94\u5f53\u53ef\u4ee5\u88ab\u7528\u4e8e\u6ee1\u8db3\u8fd9\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u9700\u6c42\u3002

    \u5bfc\u8bfb

    \u4e0b\u9762\u4e24\u4e2a\u90e8\u5206\u5e76\u4e0d\u4f1a\u5f88\u5feb\u5c31\u88ab\u7528\u5230\uff0c\u5c24\u5176\u662f\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u662f\u88ab\u6211\u63d0\u524d\u653e\u5230\u8fd9\u91cc\u6765\u7684\uff0c\u8bfb\u8005\u53ef\u4ee5\u81ea\u884c\u8003\u8651\u662f\u76f4\u63a5\u987a\u5e8f\u9605\u8bfb\uff0c\u8fd8\u662f\u6682\u65f6\u8df3\u8fc7\uff08\u4e4b\u540e\u7528\u5230\u7684\u65f6\u5019\u6211\u4f1a\u7ed9\u51fa\u8df3\u56de\u94fe\u63a5\uff09\u3002

    \u6211\u4e2a\u4eba\u8ba4\u4e3a\u7ed3\u6784\u4e0a\u8fd9\u6837\u5b89\u6392\u66f4\u6e05\u6670\uff0c\u4f46\u8003\u8651\u5230\u4e24\u4e2a\u5185\u5bb9\u5b58\u5728\u4e00\u5b9a\u95f4\u9694\uff0c\u6240\u4ee5\u5f80\u540e\u653e\u7f6e\u4e5f\u6709\u5f80\u540e\u653e\u7f6e\u7684\u9053\u7406\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe","title":"\u8d44\u6e90\u5206\u914d\u56fe","text":"

    \u6839\u636e\u4e0a\u9762\u7684\u63cf\u8ff0\uff0c\u6211\u4eec\u53ef\u4ee5\u77e5\u9053\uff0c\u5efa\u6a21\u6b7b\u9501\u53ef\u4ee5\u4ece\u8ba8\u8bba\u8fdb\u7a0b/\u7ebf\u7a0b\u4e0e\u8d44\u6e90\u7684\u6c42\u53d6\u5173\u7cfb\u5165\u624b\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u8d44\u6e90\u5206\u914d\u56fe(resource-allocation graph)\u6765\u63cf\u8ff0\u8fd9\u4ef6\u4e8b\u3002

    \u9759\u6001

    \u8d44\u6e90\u5206\u914d\u56fe\u662f\u4e00\u79cd\u6709\u4e24\u7c7b\u8282\u70b9\u7684\u6709\u5411\u56fe\uff0c\u6211\u4eec\u7528\u5706\u8282\u70b9 \\(T_i\\) \u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b\uff0c\u7528\u65b9\u8282\u70b9 \\(R_j\\) \u8868\u793a\u8d44\u6e90\uff0c\u65b9\u8282\u70b9\u4e2d\u7684\u5b9e\u5fc3\u70b9\u8868\u793a\u4e00\u4e2a\u8d44\u6e90\u7c7b\u522b\u7684\u4e00\u4e2a\u5b9e\u4f8b\u3002\u540c\u65f6\uff0c\u6211\u4eec\u79f0\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b\u6307\u5411\u8d44\u6e90\u7c7b\u522b\u7684\u6709\u5411\u8fb9\u4e3a\u8bf7\u6c42\u8fb9(request edge)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6b63\u5728\u7b49\u5f85\u8fd9\u79cd\u8d44\u6e90\uff1b\u79f0\u4ece\u8d44\u6e90\u5b9e\u4f8b\u6307\u5411\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u6709\u5411\u8fb9\u4e3a\u5206\u914d\u8fb9(assignment edge)\uff0c\u8868\u793a\u8d44\u6e90 \\(R_j\\) \u88ab\u5206\u914d\u7ed9\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\)\uff0c\u5373\u76ee\u524d\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6301\u6709\u4e00\u4e2a\uff08\u4e00\u6761\u8fb9\u8868\u793a\u4e00\u4e2a\uff09\u8d44\u6e90 \\(R_j\\) \u7684\u5b9e\u4f8b\uff0c\u4f8b\u5982\u4e0b\u56fe\uff1a

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u5b58\u5728\u73af\uff0c\u662f\u7cfb\u7edf\u5904\u4e8e\u6b7b\u9501\u72b6\u6001\u7684\u5fc5\u8981\u6761\u4ef6\u3002

    \u52a8\u6001

    \u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u4eec\u8fd8\u5c06\u770b\u5230\u4e00\u4e9b\u8d44\u6e90\u5206\u914d\u56fe\u7684\u53d8\u4f53\uff1a\u5f15\u5165 claim edge \u7684\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u4ee5\u53ca\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7b49\u5f85\u5173\u7cfb\u7684 wait for graph\u3002

    \u7531\u4e8e\u552f\u4e00\u5b9e\u4f8b\u8fd9\u4e2a\u6027\u8d28\u88ab\u7834\u574f\u540e\uff0c\u6b7b\u9501\u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e0a\u4e0d\u518d\u90a3\u4e48\u76f4\u89c2\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5f15\u5165\u65b0\u7684\u5de5\u5177\u6765\u63cf\u8ff0\u6b7b\u9501\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","title":"\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001","text":"

    \u8be5\u90e8\u5206\u5185\u5bb9\u88ab\u4e66\u672c\u5b89\u6392\u5728\u6b7b\u9501\u907f\u514d\u4e2d\uff0c\u88ab\u6211\u63d0\u524d\uff0c\u53ef\u4ee5\u8003\u8651\u4e0d\u76f4\u63a5\u6df1\u5165\u800c\u662f\u7b49\u4e4b\u540e\u9047\u5230\u4e86\u518d\u770b\u3002

    \u5b89\u5168\u72b6\u6001(safe state)\u6307\u5b58\u5728\u5b89\u5168\u5e8f\u5217(safe sequence)\u7684\u72b6\u6001\uff0c\u7cfb\u7edf\u6309\u7167 safe sequence \u7684\u987a\u5e8f\u6267\u884c\u8fdb\u7a0b/\u7ebf\u7a0b\u548c\u5206\u914d\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b\u76f8\u5bf9\u5e94\u7684\uff0c\u4e0d\u662f\u5b89\u5168\u72b6\u6001\u7684\u72b6\u6001\u79f0\u4e3a\u4e0d\u5b89\u5168\u72b6\u6001(unsafe state)\u3002\u5177\u4f53\u6765\u8bf4\uff0csafe sequence \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

    safe sequence

    \u9996\u5148 high level \u5730\u8bb2\u4e00\u4e0b safe sequence \u7684\u601d\u8def\uff0csafe sequence \u4e2d\u7684\u6bcf\u4e00\u9879 \\(T_i\\) \u6240\u9700\u8981\u7684\u8d44\u6e90\uff0c\u90fd\u80fd\u901a\u8fc7\u73b0\u6709\u8d44\u6e90\u6216\u5176\u4e4b\u524d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b \\(\\forall j < i T_{j}\\) \u6267\u884c\u5b8c\u6bd5\u91ca\u653e\u7684\u8d44\u6e90\u6765\u6ee1\u8db3\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5bf9\u4e8e safe sequence \\(<T_1, T_2, \\dots, T_n>\\)\uff0c\u6211\u4eec\u5b9a\u4e49\u6bcf\u4e00\u9879\u8fd8\u9700\u8981\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(need_{i,j}\\)\u3001\u5df2\u7ecf\u88ab\u5206\u914d\u7684 \\(R_j\\) \u8d44\u6e90\u4e3a \\(allocated_{i,j}\\)\uff0c\u4ee5\u53ca\u8d44\u6e90 \\(R_j\\) \u4e2d\u8fd8\u7a7a\u95f2\u7684\u8d44\u6e90\u7684\u91cf \\(available_{j}\\)\uff0c\u5219\u5e94\u5f53\u6709\uff1a

    \\[ \\begin{aligned} \\forall i \\in \\{1, 2, \\dots, n\\},\\quad \\forall j \\in \\{1, 2, \\dots, m\\}, \\\\ available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j} \\geq need_{i,j} \\end{aligned} \\]

    \u5bf9\u4e8e\u7b2c \\(i\\) \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6765\u8bf4\uff0c\u5b9e\u9645\u8fd0\u884c\u65f6\u7684\u7a7a\u95f2\u8d44\u6e90\u53ef\u80fd\u6765\u81ea\u4e8e \\(allocated_{k,j}\\)\uff0c\u4f46\u8fd9\u91cc\u662f\u7528\u6765\u505a\u5224\u65ad\u7684\uff0c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5728\u7ebf\u7684\u8ba1\u7b97\u8fc7\u7a0b\uff0c\u6240\u4ee5\u7528 \\(available_{j} + \\sum_{k=1}^{i-1} allocated_{k,j}\\) \u8fd9\u4e2a\u5f0f\u5b50\u6765\u7ef4\u62a4\u6b64\u65f6 \\(T_i\\) \u7684\u6700\u5927\u53ef\u7528\u8d44\u6e90\u3002

    \u601d\u8003\u5982\u4f55\u5bfb\u627e\u4e00\u4e2a safe sequence

    \u8fd9\u4e2a\u95ee\u9898\u6211\u4eec\u5728\u4e4b\u540e\u6b7b\u9501\u68c0\u6d4b\u7684\u90e8\u5206\u4f1a\u7ed9\u51fa\u7b54\u6848\uff0c\u4f46\u4e0d\u59a8\u7b80\u5355\u601d\u8003\u4e00\u4e0b\u600e\u6837\u5bfb\u627e\u4e00\u4e2a safe sequence \u5462\uff1f\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\uff1f

    \u4f46\u662f\uff0csafe state \u662f\u4e00\u4e2a\u76f8\u5bf9\u8f83\u5f3a\u7684\u7ea6\u675f\uff0c\u4e0d\u5b89\u5168\u72b6\u6001\u4e0d\u4ee3\u8868\u6b7b\u9501\u4e00\u5b9a\u4f1a\u53d1\u751f\uff0c\u7528\u97e6\u6069\u56fe\u6765\u8868\u793a\u5b83\u4eec\u7684\u5173\u7cfb\u5c31\u662f\uff1a

    \u5982\u679c\u6211\u4eec\u80fd\u4fdd\u8bc1\u7cfb\u7edf\u53ea\u8fd0\u884c\u5728 safe state\uff0c\u4e5f\u5c31\u80fd\u5145\u5206\u5730\u907f\u514d\u6b7b\u9501\u7684\u53d1\u751f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u6761\u4ef6","title":"\u6b7b\u9501\u7684\u6761\u4ef6","text":"

    \u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u4e0b\u9762\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\uff1a

    1. \u4e92\u65a5(mutual exclusion)\uff1a\u6b7b\u9501\u4e2d\u7684\u8d44\u6e90\u5fc5\u987b\u662f\u975e\u5171\u4eab\u7684\uff0c\u5373\u4e00\u6b21\u53ea\u80fd\u88ab\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u4f7f\u7528\uff1b
      • \u6b63\u56e0\u4e3a\u4e92\u65a5\u8d44\u6e90\u65e0\u6cd5\u88ab\u540c\u65f6\u4f7f\u7528\uff0c\u6240\u4ee5\u9700\u8981\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u9700\u8981\u7b49\u5f85\u6301\u6709\u76ee\u6807\u8d44\u6e90\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u91ca\u653e\u8be5\u8d44\u6e90\u4ee5\u540e\u624d\u80fd\u4f7f\u7528\u76ee\u6807\u8d44\u6e90\uff1b
    2. \u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5728\u7b49\u5f85\u8d44\u6e90\u7684\u540c\u65f6\uff0c\u4e5f\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff1b
      • \u4e3a\u4e86\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\uff0c\u4e00\u4e2a\u7b49\u5f85\u5176\u5b83\u8d44\u6e90\uff08\u6709\u51fa\u8fb9\uff09\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u6301\u6709\u81f3\u5c11\u4e00\u4e2a\u8d44\u6e90\uff0c\u8fd9\u6837\u624d\u80fd\u8ba9\u5176\u5b83\u8d44\u6e90\u4e5f\u7b49\u5f85\u5b83\uff08\u6709\u5165\u8fb9\uff09\uff1b
      • \u8bf4\u767d\u4e86\u5c31\u662f\uff1a\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85
    3. \u975e\u62a2\u5360(no preemption)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u5728\u4f7f\u7528\u5b8c\u8d44\u6e90\u540e\u4e3b\u52a8\u91ca\u653e\u8d44\u6e90\uff0c\u5176\u6301\u6709\u7684\u8d44\u6e90\u65e0\u6cd5\u88ab\u5176\u5b83\u8fdb\u7a0b/\u7ebf\u7a0b\u62a2\u5360\uff1b
      • \u4e3a\u4e86\u4fdd\u8bc1\u7b49\u5f85\u5173\u7cfb\u4e0d\u4f1a\u88ab\u5f3a\u884c\u7834\u574f\uff1b
    4. \u5faa\u73af\u7b49\u5f85(circular wait)\uff1a\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b\u5b58\u5728\u73af\u72b6\u7684\u7b49\u5f85\u8d44\u6e90\u5173\u7cfb\uff0c\u5373 wait for graph \u4e2d\u5b58\u5728\u73af\uff1b
      • \u903b\u8f91\u4e0a\u5bfc\u81f4\u6b7b\u9501\u51fa\u73b0\u7684\u76f4\u63a5\u539f\u56e0\uff0c\u4e92\u76f8\u7b49\u5f85\u5bfc\u81f4\u6ca1\u6709\u8d44\u6e90\u4f1a\u88ab\u91ca\u653e\uff0c\u5bfc\u81f4\u6b7b\u9501\u72b6\u6001\u65e0\u6cd5\u88ab\u6253\u7834\uff1b

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u8fd9\u56db\u4e2a\u5173\u7cfb\u5e76\u4e0d\u5b8c\u5168\u72ec\u7acb\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u7684\u5904\u7406","title":"\u6b7b\u9501\u7684\u5904\u7406","text":"

    \u5f88\u5bb9\u6613\u8ba4\u8bc6\u5230\uff0c\u6b7b\u9501\u7684\u5371\u5bb3\u662f\u5de8\u5927\u7684\uff0c\u90a3\u4e48\u5982\u4f55\u5904\u7406\u64cd\u4f5c\u7cfb\u7edf\u4e2d\u7684\u6b7b\u9501\u95ee\u9898\u5462\uff1f\u4e3b\u8981\u6709\u8fd9\u4e48\u51e0\u4e2a\u601d\u8def\uff1a

    1. \u4e0d\u505a\u989d\u5916\u5904\u7406\uff0c\u8981\u6c42\u7a0b\u5e8f\u5458\u4fdd\u8bc1\u903b\u8f91\u4e0a\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\uff1b
    2. \u6b7b\u9501\u9884\u9632(deadlock prevention)\uff1a\u4f7f\u7528\u67d0\u79cd\u89c4\u8303\u6216\u534f\u8bae\u6765\u4fdd\u8bc1\u6b7b\u9501\u4e0d\u4f1a\u51fa\u73b0\uff1b
    3. \u6b7b\u9501\u907f\u514d(deadlock avoidance)\uff1a\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u7684\u53d1\u751f\uff1b
      • \u4e0e 2. \u7684\u6700\u4e3b\u8981\u7684\u533a\u522b\u662f\uff0c2. \u5728\u89c4\u8303\u4e0b\u7684\u6240\u6709\u884c\u4e3a\u90fd\u4e0d\u4f1a\u51fa\u73b0\u6b7b\u9501\u95ee\u9898\uff1b\u800c 3. \u5219\u662f\u4e0d\u7ea6\u675f\u884c\u4e3a\uff0c\u4f46\u662f\u7981\u6b62\u53ef\u80fd\u4ea7\u751f\u6b7b\u9501\u7684\u884c\u4e3a\u6267\u884c\uff0c\u5728\u7a0d\u5019\u4ecb\u7ecd\u5177\u4f53\u5185\u5bb9\u540e\u4f1a\u66f4\u5bb9\u6613\u7406\u89e3\uff1b
    4. \u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u5141\u8bb8\u6b7b\u9501\u7684\u51fa\u73b0\uff0c\u4f46\u662f\u5f53\u68c0\u6d4b\u5230\u6b7b\u9501\u65f6\uff0c\u9700\u8981\u53bb\u6d88\u9664\u6b7b\u9501\u95ee\u9898\uff1b

    \u4e8b\u5b9e\u4e0a\uff0c\u5728\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u4e00\u822c\u9009\u62e9\u4f7f\u7528\u7b2c\u4e00\u79cd\uff0c\u5373\u5c06\u95ee\u9898\u4ea4\u7ed9\u5f00\u53d1\u8005\u53bb\u89e3\u51b3\u3002

    \u63a5\u4e0b\u6765\u6211\u4eec\u6765\u4ecb\u7ecd\u4e0a\u9762\u63d0\u5230\u7684\u540e\u4e09\u4e2a\u65b9\u6cd5\u4e2d\u7684\u56db\u5757\u5185\u5bb9\u3002\u5176\u4e2d\u6709\u90e8\u5206\u5185\u5bb9\u6709\u8f83\u5927\u4ea4\u96c6\uff0c\u5b83\u4eec\u53ef\u80fd\u5c5e\u4e8e\u540c\u4e00\u7eb2\u9886\u4e0b\u5728\u4e0d\u540c\u65f6\u523b\u505a\u7684\u5904\u7406\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u9884\u9632","title":"\u6b7b\u9501\u9884\u9632","text":"

    \u6b7b\u9501\u9884\u9632(deadlock prevention)\u7684\u6838\u5fc3\u601d\u8def\u662f\u7834\u574f\u6b7b\u9501\u4ea7\u751f\u7684\u5fc5\u8981\u6761\u4ef6\u3002\u7531\u4e8e\u300c\u8981\u60f3\u6b7b\u9501\u51fa\u73b0\uff0c\u56db\u4e2a\u6761\u4ef6\u5fc5\u987b\u540c\u65f6\u6ee1\u8db3\u300d\uff0c\u6240\u4ee5\u6211\u4eec\u5982\u679c\u80fd\u4fdd\u8bc1\u56db\u4e2a\u6761\u4ef6\u4e2d\u67d0\u4e00\u4e2a\u4e00\u76f4\u4e0d\u6210\u7acb\uff0c\u90a3\u4e48\u6b7b\u9501\u5c06\u6c38\u8fdc\u4e0d\u4f1a\u4ea7\u751f\uff0c\u800c\u65e2\u7136\u6b7b\u9501\u4e0d\u4f1a\u4ea7\u751f\uff0c\u90a3\u4e5f\u5c31\u4e0d\u9700\u8981\u53bb\u5904\u7406\u6b7b\u9501\u95ee\u9898\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5bf9\u56db\u4e2a\u5fc5\u8981\u6761\u4ef6\u9010\u4e00\u5206\u6790\uff1a

    1. \u7834\u574f\u4e92\u65a5(mutual exclusion)\uff1a
      • \u8fd9\u4e2a\u6761\u4ef6\u51e0\u4e4e\u662f\u65e0\u6cd5\u7834\u574f\u7684\uff0c\u5f88\u591a\u8d44\u6e90\u5929\u7136\u662f\u4e92\u65a5\u7684\uff1b
      • \u6709\u4e9b\u8d44\u6599\u91cc\u4e5f\u6709\u5199\u4e00\u4e9b\u65b9\u6cd5\u6765\u7834\u574f\u8fd9\u4e2a\u6761\u4ef62\uff0c\u4f46\u662f\u6211\u611f\u89c9\u8fd8\u662f\u6709\u5c40\u9650\u6027\u7684\uff0c\u53cd\u6b63\u4e66\u672c\u91cc\u8bf4\u7684\u662f\u6ca1\u6cd5\u7834\u574f\uff1b
    2. \u7834\u574f\u6301\u6709\u5e76\u7b49\u5f85(hold & wait)\uff1a
      • \u5728\u6211\u4eec\u524d\u9762\u7684\u5206\u6790\u4e2d\u77e5\u9053\uff1a\u300c\u6301\u6709\u5bfc\u81f4\u53ef\u80fd\u88ab\u7b49\u5f85\uff0c\u7b49\u5f85\u5c31\u662f\u7b49\u5f85\uff0c\u800c\u4e00\u65e6\u4e00\u4e2a\u8282\u70b9\u65e2\u7b49\u5f85\u53c8\u88ab\u7b49\u5f85\uff0c\u5c31\u6709\u53ef\u80fd\u4fc3\u6210\u5faa\u73af\u7b49\u5f85\u300d\uff1b
      • \u4f46\u662f\uff0c\u5982\u679c\u6211\u4eec\u53ea\u5141\u8bb8\u4e00\u4e2a\u8282\u70b9\u53ea\u80fd\u5728\u201c\u88ab\u7b49\u5f85\u201d\u548c\u201c\u7b49\u5f85\u201d\u4e2d\u4e8c\u9009\u4e00\uff0c\u4e5f\u5c31\u662f\u8bf4\u8ba9\u4e00\u4e2a\u7ebf\u7a0b/\u8fdb\u7a0b\u4e00\u65e6\u7533\u8bf7\u8d44\u6e90\u5c31\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\uff0c\u5982\u679c\u6ca1\u6cd5\u4e00\u6b21\u6027\u83b7\u53d6\u6240\u6709\u8d44\u6e90\u5c31\u91ca\u653e\u5df2\u7ecf\u7533\u8bf7\u5230\u7684\u8d44\u6e90\uff0c\u901a\u8fc7\u8fd9\u79cd\u65b9\u6cd5\u907f\u514d\u4e86\u5faa\u73af\u7b49\u5f85\u7684\u4ea7\u751f\uff1b
    3. \u7834\u574f\u975e\u62a2\u5360(no preemption)\uff1a
      • \u901a\u8fc7\u5141\u8bb8\u8fdb\u7a0b/\u7ebf\u7a0b\u5f3a\u884c\u62a2\u5360\u53e6\u5916\u4e00\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u6301\u6709\u7684\u8d44\u6e90\uff0c\u53ef\u4ee5\u7834\u574f\u88ab\u52a8\u7684\u7b49\u5f85\u5173\u7cfb\uff0c\u4ece\u800c\u907f\u514d\u6b7b\u9501\uff1b
      • \u4f46\u662f\u548c\u4e92\u65a5\u5176\u5b9e\u662f\u7c7b\u4f3c\u7684\uff0c\u975e\u62a2\u5360\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u5929\u7136\u6027\uff0c\u5f3a\u884c\u62a2\u5360\u4e00\u90e8\u5206\u8d44\u6e90\u53ef\u80fd\u5bfc\u81f4\u8fdb\u884c\u5230\u4e00\u534a\u7684\u4efb\u52a1\u5931\u8d25\uff0c\u751a\u81f3\u4e00\u4e9b\u66f4\u4e25\u91cd\u7684\u540e\u679c\uff0c\u6240\u4ee5\u8fd9\u5e76\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u529e\u6cd5\uff1b
      • \u800c\u4e14\uff0c\u5141\u8bb8\u201c\u62a2\u5360\u201d\u4e5f\u4f1a\u5e26\u6765\u9965\u997f\u95ee\u9898\uff0c\u603b\u4f53\u6765\u8bf4\u96be\u4ee5\u5b9e\u73b0\u800c\u4e14\u6548\u7387\u4e0d\u9ad8\uff1b
    4. \u7834\u574f\u5faa\u73af\u7b49\u5f85(circular wait)\uff1a
      • \u901a\u8fc7\u7ed9\u8d44\u6e90\u7f16\u53f7\uff0c\u89c4\u5b9a\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7279\u5b9a\u7684\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u5c31\u4e0d\u4f1a\u51fa\u73b0\u5faa\u73af\u7b49\u5f85\u7684\u60c5\u51b5\uff1b
      • \u7531\u4e8e\u8fdb\u7a0b/\u7ebf\u7a0b\u53ea\u80fd\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u7533\u8bf7\u8d44\u6e90\uff0c\u800c\u8d44\u6e90\u7684\u7533\u8bf7\u5e94\u5f53\u662f\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u51fa\u73b0\u300c\u8fdb\u7a0b\u5927\u534a\u90e8\u5206\u53ea\u9700\u8981\u7528\u5230 \\(R_3\\)\uff0c\u4f46\u662f\u7531\u4e8e\u6700\u540e\u9700\u8981\u7528\u4e00\u4e0b \\(R_1\\)\uff0c\u6240\u4ee5\u5fc5\u987b\u5148\u7533\u8bf7 \\(R_1\\) \u518d\u7533\u8bf7 \\(R_3\\)\uff0c\u5bfc\u81f4\u8fc7\u7a0b\u4e2d \\(R_1\\) \u4e00\u76f4\u88ab\u6301\u6709\u4f46\u4e00\u76f4\u672a\u88ab\u4f7f\u7528\u300d\u7684\u60c5\u51b5\uff0c\u6548\u7387\u582a\u5fe7\uff1b
      • \u4e3a\u4e86\u89e3\u51b3\u4e0a\u9762\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u5728\u8bbe\u8ba1\u7f16\u53f7\u65f6\u5c06\u8d44\u6e90\u4f7f\u7528\u7684\u5e38\u89c4\u987a\u5e8f\u7b49\u56e0\u7d20\u7eb3\u5165\u8003\u8651\uff0c\u4f46\u7cbe\u5fc3\u8bbe\u8ba1\u7684\u8d44\u6e90\u5e8f\u53f7\u9047\u5230\u65e0\u7a77\u65e0\u5c3d\u7684\u8d44\u6e90\u7c7b\u578b\u65f6\uff0c\u53c8\u5f53\u5982\u4f55\u5462\uff1f\u7531\u4e8e\u9700\u8981\u5927\u91cf\u8bbe\u8ba1\uff0c\u6240\u4ee5\u5e26\u6765\u4e86\u8d44\u6e90\u7684\u6269\u5c55\u6027\u8f83\u5dee\u7684\u95ee\u9898\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u907f\u514d","title":"\u6b7b\u9501\u907f\u514d","text":"

    \u6b7b\u9501\u907f\u514d(deadlock avoidance)\u901a\u8fc7\u963b\u6b62\u53ef\u80fd\u8ba9\u7cfb\u7edf\u8fdb\u5165\u6b7b\u9501\u72b6\u6001\u7684\u884c\u4e3a\uff0c\u6765\u89e3\u51b3\u6b7b\u9501\u95ee\u9898\u3002\u5373\uff1a\u5982\u679c\u8fd9\u4e48\u505a\u53ef\u80fd\u5bfc\u81f4\u6b7b\u9501\uff0c\u90a3\u6211\u5c31\u4e0d\u8fd9\u4e48\u505a\uff0c\u4ee5\u6b64\u6765\u907f\u514d\u6b7b\u9501\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","title":"\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5","text":"

    \u524d\u7f6e\uff1a\u8d44\u6e90\u5206\u914d\u56fe\uff01

    \u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u8f83\u4e3a\u76f4\u63a5\uff0c\u5b83\u4e0e\u5b89\u5168\u72b6\u6001\u7684\u6982\u5ff5\u65e0\u5173\uff0c\u76f4\u63a5\u68c0\u6d4b\u67d0\u79cd\u5206\u914d\u662f\u5426\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5982\u679c\u8be5\u5206\u914d\u4f1a\u5bfc\u81f4\u6b7b\u9501\u53d1\u751f\uff0c\u5219\u4e0d\u8fdb\u884c\u8be5\u5206\u914d\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u8be5\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002\uff08\u56e0\u4e3a\u5b83\u4ee5\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u7684\u90a3\u4e2a\u7279\u4f8b\u4e3a\u539f\u7406\uff01\uff09

    \u6211\u4eec\u4e4b\u524d\u5df2\u7ecf\u5f15\u5165\u4e86\u8d44\u6e90\u5206\u914d\u56fe\u8fd9\u4e2a\u5de5\u5177\uff0c\u73b0\u5728\u6211\u4eec\u8981\u5728\u8d44\u6e90\u5206\u914d\u56fe\u7684\u57fa\u7840\u4e0a\uff0c\u5f15\u5165\u4e00\u6761\u8bc9\u6c42\u8fb9(claim edge)\uff0c\u7528\u865a\u7ebf\u8868\u793a\uff0c\u5b83\u4ece\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u6307\u5411\u8d44\u6e90 \\(R_j\\)\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u4f1a\u5728\u672a\u6765\u7533\u8bf7\u8d44\u6e90 \\(R_j\\)\u3002

    \u4e8e\u662f\uff0c\u5728\u52a8\u6001\u8fc7\u7a0b\u4e2d\uff0c\u8d44\u6e90\u5206\u914d\u56fe\u6309\u7167\u5982\u4e0b\u89c4\u5219\u53cd\u5e94\u5206\u914d\u8fc7\u7a0b\uff1a

    1. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u88ab\u6dfb\u52a0\u5230\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u65f6\u5019\uff0c\u9700\u8981\u8fde\u597d\u6240\u6709\u76f8\u5173\u7684 claim edge\uff1b
      • \u8981\u6c42\u6700\u521d\u5c31\u77e5\u9053\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\uff0c\u8fd9\u4e5f\u6784\u6210\u8fd9\u7c7b\u65b9\u6cd5\u7684\u4e00\u4e2a\u5c40\u9650\u6027\uff1b

    2. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u7533\u8bf7\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5982\u679c\u8fd9\u6761\u8fb9\u53d8\u4e3a assignment edge \u4e0d\u4f1a\u5bfc\u81f4\u6210\u73af\uff0c\u5219\u5c06 claim edge \u8f6c\u5316\u4e3a\u4e00\u6761 request edge \\(T_i \\rightarrow R_j\\)\uff1b
      • \u8bf7\u6ce8\u610f\uff0c\u8fd9\u91cc\u9700\u8981\u5224\u65ad\u7684\u662f assignment edge\uff0c\u800c\u8f6c\u5316\u7684\u662f request edge\uff1b

    3. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u83b7\u5f97\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 request edge \u8f6c\u5316\u4e3a\u4e00\u6761 assignment edge \\(R_j \\rightarrow T_i\\)\uff1b
    4. \u8fdb\u7a0b/\u7ebf\u7a0b \\(T_i\\) \u91ca\u653e\u8d44\u6e90 \\(R_j\\) \u65f6\u5019\uff0c\u5c06 assignment edge \u5220\u53bb\uff1b

    \u6211\u4eec\u5728\u4e0a\u9762\u4e5f\u8bf4\u4e86\uff1a\u300c\u8be5\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u300d\uff0c\u90a3\u4e48\u5982\u4f55\u89e3\u9664\u8fd9\u4e2a\u9650\u5236\u5462\uff1f\u8be5\u95ee\u9898\u6211\u4eec\u65e9\u5728\u8d44\u6e90\u5206\u914d\u56fe\u5c0f\u8282\u5c31\u5df2\u7ecf\u8ba8\u8bba\uff0c\u6211\u4eec\u4f7f\u7528\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u6765\u63cf\u8ff0\u4e00\u4e2a\u7ea6\u675f\u8f83\u5f3a\u7684\u3001\u4e0d\u4f1a\u4ea7\u751f\u6b7b\u9501\u7684\u72b6\u6001\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u94f6\u884c\u5bb6\u7b97\u6cd5","title":"\u94f6\u884c\u5bb6\u7b97\u6cd5","text":"

    \u524d\u7f6e\uff1a\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\uff01

    \u94f6\u884c\u5bb6\u7b97\u6cd5(Banker's algorithm)\u5f25\u8865\u4e86\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u53ea\u9002\u7528\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u90fd\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u7684\u7f3a\u9677\uff0c\u5b83\u652f\u6301\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e0d\u6b62\u4e00\u4e2a\u7684\u60c5\u51b5\uff0c\u4f46\u662f\u6548\u7387\u4e0d\u5982\u5206\u914d\u56fe\u7b97\u6cd5\u3002\u7c7b\u4f3c\u4e8e\u8d44\u6e90\u5206\u914d\u56fe\u7b97\u6cd5\u9700\u8981\u5728\u6700\u5f00\u59cb\u7ed9\u51fa\u6240\u6709 claim edge\uff0c\u94f6\u884c\u5bb6\u7b97\u6cd5\u8981\u6c42\u6bcf\u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u7ed9\u51fa\u6267\u884c\u8fc7\u7a0b\u4e2d\u6240\u9700\u8981\u7684\u5404\u7c7b\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff0c\u540c\u65f6\u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u4ee5\u52a8\u6001\u5730\u8ba1\u7b97\u5b89\u5168\u72b6\u6001\u3002High level \u5730\u6765\u8bb2\uff0c\u5c31\u662f\u9700\u8981\u52a8\u6001\u5730\u68c0\u6d4b\u67d0\u4e2a\u8d44\u6e90\u7533\u8bf7\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5982\u679c\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u5219\u7b49\u5f85\u8d44\u6e90\u8db3\u591f\u518d\u5206\u914d\u3002

    \u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u9700\u8981\u7ef4\u62a4\u8fd9\u4e9b\u4e1c\u897f\uff08\u5047\u8bbe\u95ee\u9898\u4e2d\u6709 n \u4e2a\u8fdb\u7a0b/\u7ebf\u7a0b\u548c m \u79cd\u8d44\u6e90\uff09\uff1a

    data structure

    \u94f6\u884c\u5bb6\u7b97\u6cd5\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u5206\u522b\u662f\u5b89\u5168\u7b97\u6cd5(safety algorithm)\u548c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5(resource request algorithm)\u3002\u524d\u8005\u68c0\u6d4b\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u540e\u8005\u4ee5\u524d\u8005\u4e3a\u57fa\u7840\uff0c\u5224\u65ad\u662f\u5426\u5141\u8bb8\u5f53\u524d\u8d44\u6e90\u8bf7\u6c42\u53d1\u751f\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u5b89\u5168\u7b97\u6cd5","title":"\u5b89\u5168\u7b97\u6cd5","text":"

    \u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u5bfb\u627e\u662f\u5426\u5b58\u5728\u4e00\u4e2a\u5b89\u5168\u5e8f\u5217\u6765\u5224\u65ad\u5f53\u524d\u72b6\u6001\u662f\u5426\u5904\u4e8e\u5b89\u5168\u72b6\u6001\u3002\u5148\u524d\u5728\u5b89\u5168\u72b6\u6001\u4e0e\u4e0d\u5b89\u5168\u72b6\u6001\u4e00\u8282\u4e2d\u6211\u7559\u4e0b\u8fc7\u4e00\u4e2a\u95ee\u9898\uff1a\u300c\u80fd\u5426\u8d2a\u5fc3\u5730\u6765\u6c42\u7b97\u8fd9\u6837\u4e00\u4e2a\u5e8f\u5217\u5462\u300d\uff0c\u7b54\u6848\u662f\u53ef\u4ee5\uff0c\u6211\u4eec\u4ee5\u4e00\u79cd\u8fd1\u4f3c\u8d2a\u5fc3\u5730\u7b56\u7565\u53bb\u6a21\u62df\u5b89\u5168\u5e8f\u5217\u7684\u8d44\u6e90\u5206\u914d\u8fc7\u7a0b\uff0c\u5c31\u53ef\u4ee5\u5224\u65ad\u662f\u5426\u5b58\u5728\u5b89\u5168\u7b56\u7565\u3002

    \u56e0\u4e3a\u5bf9\u4e8e\u6240\u6709\u53ef\u4ee5\u4f5c\u4e3a\u5b89\u5168\u72b6\u6001\u4e0b\u4e00\u9879\u7684 \\(T_{i_k}\\)\uff0c\u7531\u4e8e\u6267\u884c\u5b83\u4eec\u540e\uff0c\u7b49\u5230\u8fdb\u7a0b/\u7ebf\u7a0b\u8fd0\u884c\u7ed3\u675f\uff0c\u4f59\u4e0b\u7684\u8d44\u6e90\u53ea\u4f1a\u66f4\u591a\u4e0d\u4f1a\u66f4\u5c11\uff08\u5bf9\u6bd4\u8fd0\u884c\u524d\u540e\uff0c\u4f1a\u591a\u51fa\u6765\u539f\u672c\u5206\u914d\u7ed9\u8fd9\u4e9b\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u90a3\u4e9b\u8d44\u6e90\uff09\uff0c\u56e0\u800c\u53ea\u8981\u7b26\u5408\u6761\u4ef6\uff0c\u5c31\u53ef\u4ee5\u4f5c\u4e3a\u4e0b\u4e00\u9879\uff0c\u6b65\u6b65\u53ef\u884c\u6700\u7ec8\u4e5f\u53ef\u884c\u3002

    \u8bf7\u4ed4\u7ec6\u601d\u8003\u8fd9\u4e2a\u8fc7\u7a0b\u7684\u5408\u7406\u6027\uff0c\u5c24\u5176\u662f\u6211\u4e3a\u4ec0\u4e48\u5728\u8fd9\u91cc\u63d0\u5230\u4e86\u201c\u8d2a\u5fc3\u201d\uff0c\u6211\u611f\u89c9\u6211\u67e5\u5230\u7684\u8d44\u6599\u51e0\u4e4e\u90fd\u5ffd\u7565\u4e86\u8fd9\u4e2a\u95ee\u9898\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5b89\u5168\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

    algorithm

    1. \u521d\u59cb\u5316\uff1a
      • Work[m] <- Available[m]\uff0cWork[m] \u8868\u793a\u5f53\u524d\u72b6\u6001\u7684\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
      • Finish[n] <- false\uff0c\u8868\u793a\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u8fd8\u6ca1\u8fd0\u884c\uff1b
    2. \u627e\u5230\u4e00\u4e2a i \u4f7f\u5f97\uff1a
      • (Finish[i] == false) && (Need[i] <= Work)\uff08\u6ce8\u610f\uff0c\u7b2c\u4e8c\u4e2a term \u662f vector \u6bd4\u8f83\uff0c\u8981\u6c42\u6bcf\u4e00\u9879\u90fd\u6ee1\u8db3\uff09\uff0c\u6ee1\u8db3\u8be5\u6761\u4ef6\u8868\u793a\u8be5\u8fdb\u7a0b/\u7ebf\u7a0b\u6240\u9700\u8981\u7684\u8d44\u6e90\u53ef\u4ee5\u88ab\u6ee1\u8db3\uff1b
      • \u5982\u679c\u6ca1\u6709\u8fd9\u4e2a i\uff0c\u5219 goto 3.\uff1b
      • \u5982\u679c\u6709\u8fd9\u4e2a i\uff0c\u5219\u66f4\u65b0\u72b6\u6001\uff1a
        • Finish[i] <- true\uff0c\u8868\u793a\u8be5\u8fdb\u7a0b/\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\uff1b
        • Work <- Work + Allocation[i]\uff0c\u8868\u793a\u8fdb\u7a0b/\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\u540e\u91ca\u653e\u8d44\u6e90\uff1b
        • repeat 2.\uff1b
    3. \u5982\u679c\u6240\u6709\u8fdb\u7a0b/\u7ebf\u7a0b\u90fd\u6ee1\u8db3 Finish[i] == true\uff0c\u5219\u7cfb\u7edf\u5904\u4e8e\u5b89\u5168\u72b6\u6001\uff0c\u5426\u5219\u7cfb\u7edf\u5904\u4e8e\u4e0d\u5b89\u5168\u72b6\u6001\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","title":"\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5","text":"

    \u6709\u4e86\u5b89\u5168\u7b97\u6cd5\u4f5c\u4e3a\u57fa\u7840\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u5728\u5b83\u7684\u57fa\u7840\u4e0a\uff0c\u5224\u65ad\u67d0\u4e2a\u8d44\u6e90\u8bf7\u6c42\u662f\u5426\u4f1a\u5bfc\u81f4\u7cfb\u7edf\u8fdb\u5165\u4e0d\u5b89\u5168\u72b6\u6001\uff0c\u8fdb\u800c\u5f97\u5230\u5b8c\u6574\u7684\u94f6\u884c\u5bb6\u7b97\u6cd5\u4e86\u3002

    \u5b89\u5168\u7b97\u6cd5\u901a\u8fc7\u6a21\u62df\u7684\u65b9\u5f0f\u5224\u65ad\u4e00\u4e2a\u72b6\u6001\u662f\u4e0d\u662f\u5b89\u5168\u72b6\u6001\uff0c\u800c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u5219\u662f\u8d1f\u8d23\u7ef4\u62a4\u8fd9\u4e2a\u201c\u72b6\u6001\u201d\uff0c\u5e76\u6839\u636e\u5b89\u5168\u7b97\u6cd5\u8fd4\u56de\u7684\u7ed3\u679c\u6765\u5224\u65ad\u67d0\u4e2a\u8bf7\u6c42\u662f\u5426\u5e94\u5f53\u88ab\u63a5\u53d7\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u8d44\u6e90\u8bf7\u6c42\u7b97\u6cd5\u7684\u6b65\u9aa4\u5982\u4e0b\uff1a

    algorithm

    1. \u7528 Request[n][m] \u6765\u7ef4\u62a4\u8fdb\u7a0b/\u7ebf\u7a0b\u60f3\u8981\u8bf7\u6c42\u7684\u8d44\u6e90\u7684\u6570\u91cf\uff1b
    2. \u5728\u6bcf\u4e2a\u8bf7\u6c42\u4e2d\uff0c\u5982\u679c Request[i] <= Need[i]\uff08\u6ce8\u610f\u5411\u91cf\u6bd4\u8f83\uff09\uff0c\u5219\u7ee7\u7eed\uff1b\u5426\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u56e0\u4e3a\u6b64\u65f6\u5b83\u8bf7\u6c42\u7684\u91cf\u8d85\u8fc7\u4e86\u5b83\u9884\u671f\u9700\u8981\u7684\u8d44\u6e90\u7684\u6700\u5927\u91cf\uff1b
    3. \u5982\u679c Request[i] <= Available\uff0c\u8bf4\u660e\u8d44\u6e90\u8db3\u591f\uff0c\u7ee7\u7eed\uff1b\u5426\u5219\uff0c\u8fdb\u7a0b/\u7ebf\u7a0b\u5fc5\u987b\u7b49\u5f85\u8db3\u591f\u7684\u8d44\u6e90\uff1b
    4. \u5047\u8bbe\u7cfb\u7edf\u5206\u914d\u4e86\u8d44\u6e90\uff0c\u5219\u9700\u8981\u66f4\u65b0\u6a21\u62df\u72b6\u6001\uff08\u6b64\u65f6\u8d44\u6e90\u8fd8\u672a\u5b9e\u9645\u5206\u914d\uff01\u53ea\u662f\u4e3a\u4e86\u4ece\u6570\u503c\u4e0a\u6d4b\u8bd5\u662f\u5426\u5b89\u5168\u800c\u4e34\u65f6\u6784\u9020\u7684\u865a\u62df\u5c40\u9762\uff01\uff09\uff1a
      • Available <- Available - Request[i]\uff0c\u5373\u6a21\u62df\u5269\u4f59\u8d44\u6e90\u91cf\uff1b
      • Allocation[i] <- Allocation[i] + Request[i]\uff0c\u5373\u6a21\u62df\u5206\u914d\u5f97\u5230\u7684\u8d44\u6e90\uff1b
      • Need[i] <- Need[i] - Request[i]\uff0c\u5373\u6a21\u62df\u9884\u671f\u9700\u6c42\u91cf\uff1b
    5. \u4f7f\u7528\u5b89\u5168\u7b97\u6cd5\u5224\u65ad\uff1a
      • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u5b89\u5168\u7684\uff0c\u5219\u8bf7\u6c42\u88ab\u63a5\u53d7\uff1b
      • \u5982\u679c\u5f53\u524d\u72b6\u6001\u662f\u4e0d\u5b89\u5168\u7684\uff0c\u8bf7\u6c42\u4e0d\u88ab\u5141\u8bb8\uff0c\u540c\u65f6\u9700\u8981\u5c06\u8fd9\u4e9b\u77e9\u9635\u56de\u6eda\u5230\u6a21\u62df\u4e4b\u524d\u7684\u72b6\u60013\uff1b

    Limitations

    Like the other algorithms, the Banker's algorithm has some limitations when implemented.

    Specifically, it needs to know how much of each resource a process could possibly request. In most systems, this information is unavailable, making it impossible to implement the Banker's algorithm.

    Also, it is unrealistic to assume that the number of processes is static since in most systems the number of processes varies dynamically.

    Moreover, the requirement that a process will eventually release all its resources (when the process terminates) is sufficient for the correctness of the algorithm, however it is not sufficient for a practical system. Waiting for hours (or even days) for resources to be released is usually not acceptable.

    From Banker's algorithm | Wikipedia.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u68c0\u6d4b","title":"\u6b7b\u9501\u68c0\u6d4b","text":"

    \u6b7b\u9501\u68c0\u6d4b(deadlock detection)\u548c\u6b7b\u9501\u89e3\u9664(deadlock recovery)\u642d\u914d\u4f7f\u7528\uff0c\u5176\u6838\u5fc3\u601d\u8def\u662f\u4e0d\u5bf9\u8d44\u6e90\u8bf7\u6c42\u505a\u8fc7\u591a\u7ea6\u675f\uff0c\u800c\u662f\u5728\u68c0\u6d4b\u5230\u7cfb\u7edf\u4e2d\u5b58\u5728\u6b7b\u9501\u65f6\uff0c\u53bb\u5904\u7406\u6b7b\u9501\u3002\u5176\u4e2d\u7684\u7b2c\u4e00\u6b65\u5c31\u662f\u68c0\u6d4b\u5230\u6b7b\u9501\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u5355\u5b9e\u4f8b\u8d44\u6e90","text":"

    \u7b49\u5f85\u56fe(wait-for graph)\u662f\u8d44\u6e90\u5206\u914d\u56fe\u7684\u5316\u7b80\uff0c\u8be5\u7b97\u6cd5\u53ea\u80fd\u89e3\u51b3\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\u3002

    \u5728\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u6211\u4eec\u77e5\u9053\uff0c\u5bf9\u4e8e\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u60c5\u51b5\uff0c\u53ea\u8981\u6709\u73af\u5c31\u4f1a\u6709\u6b7b\u9501\uff0c\u800c\u53ea\u8981\u80fd\u68c0\u6d4b\u8fd9\u4e2a\u73af\uff0c\u5c31\u80fd\u68c0\u6d4b\u6b7b\u9501\u3002\u800c\u5b9e\u9645\u7684\u8d44\u6e90\u5206\u914d\u56fe\u4e2d\u8d44\u6e90\u548c\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\u4ece\u662f\u6210\u5bf9\u51fa\u73b0\u5728\u73af\u4e2d\uff0c\u800c wait-for graph \u5219\u662f\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u53ea\u4fdd\u7559\u8fdb\u7a0b/\u7ebf\u7a0b\u7684\u8282\u70b9\uff08\u8bf7\u8bfb\u8005\u601d\u8003\u4e3a\u4ec0\u4e48\u53ef\u4ee5\u8fd9\u6837\uff09\u4ee5\u51cf\u5c0f\u70b9\u7684\u6570\u91cf\uff0c\u63d0\u9ad8\u6548\u7387\u3002

    \u6211\u4eec\u5c06\u8d44\u6e90\u5206\u914d\u56fe\u4e00\u8282\u4e2d\u7684\u8d44\u6e90\u5206\u914d\u56fe\u6539\u4e3a\u7b49\u5f85\u56fe\uff0c\u5373\u4e3a\uff1a

    \u901a\u8fc7\u52a8\u6001\u5730\u7ef4\u62a4\u8fd9\u4e2a wait-for graph \u548c\u5b9a\u671f\u8c03\u7528\u4e00\u4e2a\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u6765\u5b9e\u73b0\u6b7b\u9501\u68c0\u6d4b\u3002

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u5c31\u7b97\u629b\u5f00\u5b83\u53ea\u652f\u6301\u6bcf\u4e2a\u8d44\u6e90\u7c7b\u522b\u4ec5\u80fd\u6709\u4e00\u4e2a\u5b9e\u4f8b\u7684\u7f3a\u70b9\uff0c\u9891\u7e41\u5730\u7ef4\u62a4\u56fe\u548c\u5b9a\u671f\u8c03\u7528\u73af\u68c0\u6d4b\u7b97\u6cd5\uff0c\u90fd\u4f1a\u5e26\u6765\u8f83\u5927\u7684\u5f00\u9500\u3002\u6240\u4ee5\uff0c\u8be5\u65b9\u6cd5\u5176\u5b9e\u8868\u73b0\u5e76\u4e0d\u7406\u60f3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","title":"\u9762\u5411\u591a\u5b9e\u4f8b\u8d44\u6e90","text":"

    \u4ece\u5355\u5b9e\u4f8b\u5411\u591a\u5b9e\u4f8b\u7684\u8fc1\u79fb\u601d\u8def\u548c\u6b7b\u9501\u907f\u514d\u4e2d\u4f7f\u7528\u7684\u8fc1\u79fb\u601d\u8def\u662f\u7c7b\u4f3c\u7684\uff0c\u4f7f\u7528\u5b89\u5168\u72b6\u6001\u6765\u5224\u65ad\u800c\u975e\u627e\u73af\u3002\u56e0\u800c\u8fd9\u4e2a\u7b97\u6cd5\u7684\u5b9e\u73b0\u548c\u94f6\u884c\u5bb6\u7b97\u6cd5\u7684\u5b9e\u73b0\u4e5f\u662f\u7c7b\u4f3c\u7684\uff08\u4f46\u662f\u6709\u4e00\u5b9a\u533a\u522b\uff0c\u53c2\u8003\u4e66\u672c P339\uff09\uff0cjjm \u8868\u793a\u4e00\u822c\u53ea\u8003\u94f6\u884c\u5bb6\u7b97\u6cd5\uff0c\u6240\u4ee5\u6211\u5728\u8fd9\u91cc\u4e5f\u4e0d\u8bb2\u8fd9\u4e2a\u7b97\u6cd5\u4e86\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit2-Part3/#\u6b7b\u9501\u89e3\u9664","title":"\u6b7b\u9501\u89e3\u9664","text":"

    \u6b7b\u9501\u89e3\u9664(deadlock recovery)\u867d\u7136\u662f \"recovery\"\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u662f\u7834\u574f\u6b7b\u9501\u800c\u5e76\u6ca1\u6709\u6062\u590d\u5230\u4e00\u4e2a\u6b7b\u9501\u4e0d\u5b58\u5728\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u7ffb\u8bd1\u4e3a\u89e3\u9664\u3002\u5bf9\u4e8e\u5df2\u7ecf\u4ea7\u751f\u7684\u6b7b\u9501\uff0c\u81f3\u5c11\u5f97\u6b7b\u4e00\u4e2a\uff0c\u6211\u4eec\u9700\u8981\u4f5c\u51fa\u51b3\u65ad\u3002\u4e66\u672c\u4e2d\u63d0\u5230\u4e86\u7ec8\u6b62\u548c\u8d44\u6e90\u62a2\u5360\u4e24\u79cd\u65b9\u6cd5\uff0c\u4f46\u6211\u8ba4\u4e3a\u672c\u8d28\u4e0a\u662f\u4e00\u6837\u7684\uff0c\u6240\u4ee5\u5e76\u5217\u5730\u7ed9\u51fa\uff1a

    1. \u90fd\u522b\u6d3b\uff0c\u6740\u6b7b\u6240\u6709\u6b7b\u9501\u4e2d\u7684\u8fdb\u7a0b/\u7ebf\u7a0b\uff1b
      • \u5f00\u9500\u5f88\u5927\uff0c\u56e0\u4e3a\u6240\u6709\u8fd9\u4e9b\u5de5\u4f5c\u90fd\u76f8\u5f53\u4e8e\u767d\u8d39\u4e86\uff0c\u800c\u4e14\u5e76\u4e0d\u662f\u968f\u968f\u4fbf\u4fbf\u5c31\u80fd\u6740\u7684\uff1b
    2. \u4e00\u4e2a\u4e00\u4e2a\u6740\uff0c\u6740\u5230\u6ca1\u6709\u6b7b\u9501\uff1b
      • \u4ee5\u7279\u5b9a\u987a\u5e8f\u6740\u8fd9\u4e9b\u8fdb\u7a0b\uff0c\u53ef\u4ee5\u4f18\u5316\u8868\u73b0\uff0c\u4f8b\u5982\u6309\u7167\u4f18\u5148\u7ea7\u4ece\u4f4e\u5230\u9ad8\u6740\uff1b
    3. \u7559\u6d3b\u547d\uff0c\u4f46\u662f\u9700\u8981\u56de\u6eda\u90e8\u5206\u8fdb\u7a0b\uff0c\u5f3a\u884c\u62a2\u5360\u5360\u6709\u7684\u8d44\u6e90\uff1b
      • \u5f88\u96be\u754c\u5b9a\u5e94\u8be5\u56de\u6eda\u5230\u54ea\u91cc\uff0c\u56de\u6eda\u4e5f\u96be\u5b9e\u73b0\uff0c\u4e3a\u4e86\u56de\u6eda\u4e5f\u9700\u8981\u5b58\u50a8\u66f4\u591a\u7684\u4fe1\u606f\uff0c\u5f00\u9500\u5f88\u5927\uff1b
      • \u53c8\u770b\u5230\u62a2\u5360\u8fd9\u4e24\u4e2a\u5b57\uff0c\u6240\u4ee5\u8fd9\u91cc\u4e5f\u4f1a\u6709\u9965\u997f\u95ee\u9898\uff0c\u89e3\u51b3\u65b9\u6cd5\u4e5f\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u901a\u8fc7\u8003\u8651\u4f18\u5148\u7ea7\uff0c\u5e76\u5c06\u88ab\u62a2\u5360\uff08\u88ab\u8feb\u56de\u6eda\uff09\u7684\u6b21\u6570\u7eb3\u5165\u4f18\u5148\u7ea7\u7684\u8003\u8651\u8303\u7574\u3002
    1. What's the difference between deadlock and livelock? \u21a9

    2. Deadlock Prevention \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u4f7f\u7528\u5047\u8131\u673a(spooling)\u7684\u65b9\u6cd5\u6765\u89e3\u9664\u6253\u5370\u673a\u8d44\u6e90\u7684\u4e92\u65a5\u6027\u3002\u00a0\u21a9

    3. Banker's Algorithm in Operating System (OS) \u4e00\u6587\u4e2d\u63d0\u5230\u4e86\u8981\u6062\u590d\u77e9\u9635\u72b6\u6001\uff0c\u4e66\u4e0a\u8c8c\u4f3c\u6ca1\u5199\u8fd9\u4e2a\u3002\u00a0\u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/","title":"U3 Part 1: \u5185\u5b58\u8bbe\u8ba1 | Memory Design","text":"

    \u7ea6 9173 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 46 \u5206\u949f

    \u5bfc\u8bfb

    \u5185\u5b58\u662f\u8ba1\u7b97\u673a\u4e2d\u6700\u91cd\u8981\u7684\u90e8\u4ef6\u4e4b\u4e00\uff0c\u5728 Von Neumann \u67b6\u6784\u4e2d\uff0c\u5185\u5b58\u662f\u7a0b\u5e8f\u548c\u6570\u636e\u7684\u8f7d\u4f53\uff0c\u4e5f\u662f CPU \u8bbf\u95ee\u6570\u636e\u7684\u91cd\u8981\u9014\u5f84\uff08CPU \u80fd\u591f\u76f4\u63a5\u8bbf\u95ee\u7684\u5b58\u50a8\u7ed3\u6784\u4e00\u822c\u53ea\u6709\u5bc4\u5b58\u5668\u548c\u5185\u5b58\uff0c\u4ee5\u53ca\u4f5c\u4e3a\u4e2d\u4ecb\u7684\u7f13\u5b58\uff09\u3002\u6b64\u5916\uff0cCPU \u6267\u884c\u7684\u6307\u4ee4(instructions)\uff0c\u53ea\u6709\u5728\u7269\u7406\u5185\u5b58\u4e2d\u65f6\u624d\u80fd\u88ab\u6267\u884c\u3002

    \u800c\u6211\u4eec\u77e5\u9053\uff0c\u5185\u5b58 I/O \u901a\u5e38\u662f\u6bd4\u8f83\u6162\u7684\uff0c\u5982\u679c\u518d\u8fdb\u4e00\u6b65\u5bf9\u5185\u5b58\u4e4b\u5916\u7684\u5b58\u50a8\u8bbe\u5907\u505a I/O\uff08\u5185\u5b58\u6bd5\u7adf\u4e5f\u662f\u6709\u9650\u7684\uff09\uff0c\u5219\u4f1a\u66f4\u6162\u3002\u56e0\u6b64\uff0c\u5c31\u50cf\u69a8\u5e72 CPU \u7684\u6027\u80fd\u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u8981\u5c3d\u53ef\u80fd\u5730\u5229\u7528\u597d\u5185\u5b58\u3002

    \u9664\u4e86\u6027\u80fd\uff0c\u5185\u5b58\u8fd8\u9700\u8981\u5b9e\u73b0\u4e00\u4e9b\u4fdd\u62a4\u63aa\u65bd\uff0c\u9632\u6b62\u7a0b\u5e8f\u8d8a\u754c\u8bbf\u95ee\u5185\u5b58\uff0c\u6216\u8005\u7a0b\u5e8f\u4e4b\u95f4\u4e92\u76f8\u5e72\u6270\u3002

    \u540c\u65f6\uff0c\u7531\u4e8e\u8ba1\u7b97\u673a\u8fd0\u884c\u7a0b\u5e8f\u662f\u4e00\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u800c\u6211\u4eec\u4f7f\u7528\u5185\u5b58\u5f80\u5f80\u9700\u8981\u7684\u662f\u8fde\u7eed\u7684\u3001\u5927\u5757\u7684\u5185\u5b58\uff0c\u6240\u4ee5\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u5982\u4f55\u4fdd\u8bc1\u5185\u5b58\u7684\u5206\u5e03\u662f\u76f8\u5bf9\u5b8c\u6574\u7684\uff0c\u4e5f\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u95ee\u9898\u3002

    \u5728\u5f15\u5165\u5e27 & \u9875\u8bbe\u8ba1\u540e\uff0c\u6211\u4eec\u4e0d\u518d\u9700\u8981\u4ee5\u8fdb\u7a0b\u4e3a\u5355\u4f4d\u53bb\u89c2\u5bdf\u5185\u5b58\uff0c\u800c\u662f\u4ee5\u9875\u4e3a\u5355\u4f4d\uff0c\u8fd9\u610f\u5473\u7740\u7c92\u5ea6\u66f4\u5c0f\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u52a0\u7075\u6d3b\u5730\u53bb\u7ba1\u7406\u5185\u5b58\u3002

    \u5728\u4ea4\u6362\u6280\u672f\u7684\u652f\u6301\u4e0b\uff0c\u4e0d\u662f\u6b63\u5728\u88ab\u4f7f\u7528\u7684\u865a\u62df\u5185\u5b58\u53ef\u4ee5\u5b9e\u9645\u88ab\u6620\u5c04\u5230\u7269\u7406\u5185\u5b58\u6216\u540e\u5907\u5b58\u50a8\u4e2d\u3002\u66f4\u5177\u4f53\u7684\u6765\u8bf4\uff0c\u6211\u4eec\u4f1a\u5c06\u201c\u6682\u65f6\u7528\u4e0d\u5230\u201d\u7684\u4e1c\u897f\u6682\u653e\u5728\u540e\u5907\u5b58\u50a8\u4e2d\uff0c\u800c\u5728\u9700\u8981\u7684\u65f6\u5019\u5c06\u5b83\u4eec\u6362\u5230\u7269\u7406\u5185\u5b58\u4e2d\u3002\u800c\u5728\u4e0b\u4e00\u8282\uff0c\u6211\u4eec\u8981\u5173\u6ce8\u7684\u91cd\u8981\u95ee\u9898\u5c31\u662f\uff0c\u8fd9\u4e9b\u64cd\u4f5c\u5177\u4f53\u5982\u4f55\u6267\u884c\u3001\u5982\u4f55\u4f18\u5316\uff0c\u4e5f\u5c31\u662f\u4ecb\u7ecd demand paging \u7cfb\u7edf\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5185\u5b58\u57fa\u7840\u8bbe\u8ba1","title":"\u5185\u5b58\u57fa\u7840\u8bbe\u8ba1","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5185\u5b58\u4fdd\u62a4","title":"\u5185\u5b58\u4fdd\u62a4","text":"

    \u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u5728\u5185\u5b58\u4e2d\u90fd\u5e94\u5f53\u6709\u4e00\u5757\u8fde\u7eed\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u800c\u5355\u4e2a\u8fdb\u7a0b\u5e94\u5f53\u53ea\u80fd\u8bbf\u95ee\u81ea\u5df1\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u800c\u4e0d\u80fd\u8bbf\u95ee\u5176\u4ed6\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\u3002\u8fd9\u5c31\u662f\u5185\u5b58\u4fdd\u62a4\u7684\u57fa\u672c\u8981\u6c42\u3002

    \u6211\u4eec\u901a\u8fc7\u5f15\u5165 base \u548c limit \u4e24\u4e2a\u5bc4\u5b58\u5668\u6765\u5b9e\u73b0\u6846\u5b9a\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u5f53\u524d\u8fdb\u7a0b\u7684\u5185\u5b58\u7a7a\u95f4\u59cb\u4e8e base \u5bc4\u5b58\u5668\u4e2d\u5b58\u50a8\u7684\u5730\u5740\uff0c\u7ec8\u4e8e base + limit \u5bf9\u5e94\u7684\u5730\u5740\uff0c\u5373\uff1a

    A base and a limit register define a logical address space. (left) Hardware address protection with base and limit registers. (right)

    \u4e24\u4e2a\u7279\u6b8a\u7684\u5bc4\u5b58\u5668\u53ea\u80fd\u7531\u5185\u6838\u901a\u8fc7\u7279\u5b9a\u7684\u7279\u6743\u6307\u4ee4\u6765\u4fee\u6539\u3002\u800c\u5185\u5b58\u7684\u4fdd\u62a4\uff0c\u901a\u8fc7\u5185\u5b58\u7ba1\u7406\u5355\u5143(memory management unit, MMU)\u6765\u5b9e\u73b0\uff0cMMU \u4f1a\u5728\u6bcf\u6b21\u8bbf\u95ee\u5185\u5b58\u65f6\uff0c\u68c0\u67e5\u8bbf\u95ee\u7684\u5730\u5740\u662f\u5426\u5728 base \u548c limit \u5bc4\u5b58\u5668\u6240\u5b9a\u4e49\u7684\u8303\u56f4\u5185\uff0c\u5982\u679c\u4e0d\u5728\uff0c\u5219\u4f1a\u4ea7\u751f\u4e00\u4e2a\u5f02\u5e38\uff0c\u4e2d\u65ad\u7a0b\u5e8f\u7684\u6267\u884c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5730\u5740\u7ed1\u5b9a","title":"\u5730\u5740\u7ed1\u5b9a","text":"

    \u6211\u4eec\u5728\u603b\u89c8#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668\u4e2d\u63d0\u5230\u8fc7\uff0c\u9759\u6001\u7684\u4ee3\u7801\u7a0b\u5e8f\u6210\u4e3a\u52a8\u6001\u7684\u8fdb\u7a0b\uff0c\u53ef\u80fd\u4f1a\u9700\u8981\u56fe\u4e2d\u8fd9\u4e48\u51e0\u6b65\u3002

    \u5177\u4f53\u6765\u8bf4\u6709\u4e09\u4e2a\u9636\u6bb5\uff1a\u7f16\u8bd1\u65f6\u95f4(compile time)\uff0c\u88c5\u8f7d\u65f6\u95f4(load time)\u548c\u6267\u884c\u65f6\u95f4(execution time)\u3002\u800c\u5185\u5b58\u4e5f\u5206\u4e09\u79cd\uff1a\u7b26\u53f7\u5730\u5740(symbolic addresses)\uff0c\u53ef\u91cd\u5b9a\u4f4d\u5730\u5740(relocatable addresses)\uff08\u7c7b\u4f3c\u4e8e\u4e00\u79cd\u76f8\u5bf9\u91cf\uff09\u548c\u7edd\u5bf9\u5730\u5740(absolute addresses)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u52a8\u6001\u88c5\u8f7d","title":"\u52a8\u6001\u88c5\u8f7d","text":"

    \u7531\u4e8e\u5f15\u5165\u4e86\u591a\u9053\u6280\u672f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u7684\u5185\u5b58\u4e2d\u53ef\u80fd\u540c\u65f6\u5b58\u5728\u591a\u4e2a\u8fdb\u7a0b\u3002\u4e3a\u4e86\u66f4\u52a0\u7075\u6d3b\u5730\u4f7f\u7528\u5185\u5b58\u8d44\u6e90\uff0c\u6211\u4eec\u5f15\u5165\u52a8\u6001\u88c5\u8f7d(dynamic loading)\u673a\u5236\u3002

    \u52a8\u6001\u88c5\u8f7d\u6307\u7684\u662f\uff0c\u5982\u679c\u4e00\u4e2a\u4f8b\u7a0b\u8fd8\u6ca1\u6709\u88ab\u8c03\u7528\uff0c\u90a3\u4e48\u5b83\u4f1a\u4ee5\u53ef\u91cd\u5b9a\u4f4d\u88c5\u8f7d\u683c\u5f0f(relocatable load format)5\u5b58\u50a8\u5728\u78c1\u76d8\u4e0a\uff1b\u5f53\u5b83\u88ab\u8c03\u7528\u65f6\uff0c\u5c31\u52a8\u6001\u5730\u88ab\u88c5\u8f7d\u5230\u5185\u5b58\u4e2d\u3002\u5373\uff0c\u4f8b\u7a0b\u53ea\u6709\u5728\u9700\u8981\u7684\u65f6\u5019\u624d\u88ab\u8f7d\u5165\u5185\u5b58\u3002\u5bf9\u4e8e\u5927\u91cf\u4f46\u4e0d\u7ecf\u5e38\u9700\u8981\u8bbf\u95ee\u7684\u4ee3\u7801\u7247\u6bb5\uff08\u4f8b\u5982\u9519\u8bef\u5904\u7406\u4ee3\u7801\uff09\uff0c\u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u8282\u7701\u5927\u91cf\u7684\u5185\u5b58\u7a7a\u95f4\u2014\u2014\u8fd9\u79cd\u53ea\u6709\u5076\u5c14\u4f1a\u88ab\u8bbf\u95ee\u7684\u4ee3\u7801\u4e5f\u4e0d\u5e94\u5f53\u957f\u4e45\u5730\u5360\u6709\u5185\u5b58\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u52a8\u6001\u88c5\u8f7d\u5e76\u4e0d\u9700\u8981\u64cd\u4f5c\u7cfb\u7edf\u7684\u652f\u6301\uff0c\u800c\u662f\u7531\u5f00\u53d1\u8005\u6765\u8d1f\u8d23\u5b9e\u73b0\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u52a8\u6001\u94fe\u63a5\u548c\u5171\u4eab\u5e93","title":"\u52a8\u6001\u94fe\u63a5\u548c\u5171\u4eab\u5e93","text":"

    \u6211\u4eec\u5728\u603b\u89c8#\u94fe\u63a5\u5668\u548c\u88c5\u8f7d\u5668\u4e2d\u5df2\u7ecf\u8c08\u8bba\u8fc7\u52a8\u6001\u94fe\u63a5\u4e86\u3002\u800c\u80fd\u88ab\u52a8\u6001\u94fe\u63a5\u7684\u5e93\u5c31\u88ab\u79f0\u4e3a\u52a8\u6001\u94fe\u63a5\u5e93(dynamically linked libraries, DDLs)\uff0c\u7531\u4e8e\u5b83\u4eec\u53ef\u4ee5\u88ab\u591a\u4e2a\u8fdb\u7a0b\u5171\u4eab\uff0c\u6240\u4ee5\u4e5f\u88ab\u79f0\u4e3a\u5171\u4eab\u5e93(shared libraries)\u3002

    \u533a\u522b\u4e8e\u52a8\u6001\u88c5\u8f7d\uff0c\u52a8\u6001\u94fe\u63a5\u9700\u8981\u64cd\u4f5c\u7cfb\u7edf\u7684\u652f\u6301\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u8fde\u7eed\u5206\u914d\u53ca\u5176\u95ee\u9898","title":"\u8fde\u7eed\u5206\u914d\u53ca\u5176\u95ee\u9898","text":"

    \u5305\u62ec\u64cd\u4f5c\u7cfb\u7edf\u672c\u8eab\uff0c\u5185\u5b58\u4e2d\u80fd\u5b58\u4e0b\u591a\u5c11\u4e1c\u897f\uff0c\u51b3\u5b9a\u4e86\u64cd\u4f5c\u7cfb\u7edf\u80fd\u540c\u65f6\u8fd0\u884c\u591a\u5c11\u8fdb\u7a0b\u3002\u800c\u8fdb\u7a0b\u9700\u8981\u7684\u5185\u5b58\u9700\u8981\u662f\u8fde\u7eed\u7684\uff0c\u800c\u5185\u5b58\u7684\u5206\u914d\u4e8e\u91ca\u653e\u53c8\u662f\u4e2a\u52a8\u6001\u7684\u8fc7\u7a0b\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u60f3\u4e00\u4e2a\u529e\u6cd5\u9ad8\u6548\u5730\u5229\u7528\u5185\u5b58\u7a7a\u95f4\u3002

    \u4e3a\u4ec0\u4e48\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u5185\u5b58\u662f\u8fde\u7eed\u7684\uff1f

    \u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u4e3a\u4ec0\u4e48\u88c5\u8f7d\u8fdb\u7a0b\u6240\u9700\u8981\u7684\u5185\u5b58\u9700\u8981\u662f\u5b8c\u6574\u3001\u8fde\u7eed\u7684\uff0c\u800c\u4e0d\u80fd\u662f\u4e1c\u4e00\u5757\u800c\u897f\u4e00\u5757\u7684\u5462\uff1f

    \u6216\u8005\u8bf4\uff0c\u5982\u679c\u4f60\u8ba4\u4e3a\u5b83\u53ef\u4ee5\u4e0d\u8fde\u7eed\uff0c\u4e3a\u4e86\u5b9e\u73b0\u8ba9\u5b83\u80fd\u6b63\u5e38\u8fd0\u4f5c\uff0c\u4f60\u53ef\u80fd\u9700\u8981\u54ea\u4e9b\u63aa\u65bd\u5462\uff1f\u4f60\u7684\u8bbe\u8ba1\u76f8\u6bd4\u4f7f\u7528\u6734\u7d20\u7684\u8fde\u7eed\u5185\u5b58\u5206\u914d\uff0c\u6709\u4ec0\u4e48\u4f18\u52bf\u548c\u52a3\u52bf\u5462\uff1f

    \u63d0\u793a

    Von Neumann \u67b6\u6784\u4e2d\uff0cCPU \u548c\u5185\u5b58\u662f\u5982\u4f55\u4e92\u52a8\uff0c\u4ece\u800c\u5b9e\u73b0\u5176\u529f\u80fd\u7684\uff1f\u5173\u6ce8\u53d6\u6307\u8fc7\u7a0b\u548c\u6c47\u7f16\u4e2d\u7684\u5730\u5740\u64cd\u4f5c\uff01

    \u901a\u5e38\u6765\u8bf4\uff0c\u4e3b\u5b58\u4f1a\u88ab\u5212\u5206\u4e3a\u7528\u6237\u7a7a\u95f4\u548c\u5185\u6838\u7a7a\u95f4\u4e24\u4e2a\u90e8\u5206\uff0c\u540e\u8005\u7528\u4e8e\u8fd0\u884c\u64cd\u4f5c\u7cfb\u7edf\u8f6f\u4ef6\u3002\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u503e\u5411\u4e8e\u5c06\u9ad8\u4f4d\u5730\u5740\u5212\u4e3a\u7ed9\u64cd\u4f5c\u7cfb\u7edf\uff0c\u6240\u4ee5\u6211\u4eec\u6b64\u5904\u7684\u8bed\u5883\u4e5f\u4f9d\u7167\u4e3b\u6d41\u8bbe\u8ba1\u3002

    \u5728\u8fde\u7eed\u5185\u5b58\u5206\u914d(contiguous memory allocation)\u95ee\u9898\u4e2d\uff0c\u6211\u4eec\u8ba4\u4e3a\u6240\u6709\u8fdb\u7a0b\u90fd\u88ab\u56ca\u62ec\u5728\u4e00\u6bb5\u5b8c\u6574\u7684\u5185\u5b58\u4e2d\u3002\u800c\u5728\u5185\u5b58\u5206\u914d\u7684\u52a8\u6001\u8fc7\u7a0b\u4e2d\uff0c\u6574\u4e2a\u5185\u5b58\u4e2d\u7a7a\u95f2\u7684\u90e8\u5206\u5c06\u6709\u53ef\u80fd\u88ab\u5206\u914d\u7ed9\u7d22\u53d6\u5185\u5b58\u7684\u8fdb\u7a0b\uff0c\u800c\u88ab\u5206\u914d\u7684\u5185\u5b58\u5728\u91ca\u653e\u4e4b\u524d\u90fd\u4e0d\u80fd\u88ab\u5206\u914d\u7ed9\u5176\u5b83\u8fdb\u7a0b\u3002\u5728\u8fdb\u7a0b\u6267\u884c\u5b8c\u6bd5\u540e\uff0c\u5185\u5b58\u4f1a\u88ab\u91ca\u653e\uff0c\u5207\u6211\u4eec\u5bf9\u4e8e\u8fdb\u7a0b\u4f55\u65f6\u91ca\u653e\u5185\u5b58\u4e0d\u505a\u5047\u8bbe\u3002

    \u6700\u7b80\u5355\u7684\u662f\u4e00\u79cd\u53ef\u53d8\u5212\u5206(variable partition)\u7684\u8bbe\u8ba1\uff0c\u5373\u4e0d\u5bf9\u5185\u5b58\u4e2d\u7684\u5212\u5206\u65b9\u5f0f\u505a\u7ea6\u675f\uff0c\u53ea\u8981\u662f\u7a7a\u95f2\u4e14\u8db3\u591f\u5927\u7684\u8fde\u7eed\u5185\u5b58\u533a\u57df\u90fd\u53ef\u4ee5\u88ab\u5206\u914d\u3002\u4f46\u6211\u4eec\u53ef\u4ee5\u60f3\u8c61\uff0c\u5728\u5185\u5b58\u88ab\u52a8\u6001\u4f7f\u7528\u7684\u8fc7\u7a0b\u4e2d\uff0c\u539f\u672c\u5b8c\u6574\u7684\u5185\u5b58\u53ef\u80fd\u53d8\u5f97\u652f\u79bb\u7834\u788e\u3002\u5982\u679c\u6211\u4eec\u8bb0\u4e00\u5757\u8fde\u7eed\u7684\u7a7a\u95f2\u5185\u5b58\u4e3a\u4e00\u4e2a hole\uff0c\u5219\u539f\u5148\u53ef\u80fd\u53ea\u6709\u4e00\u4e2a hole\uff0c\u800c\u5728\u957f\u65f6\u95f4\u7684\u8fd0\u884c\u540e\uff0c\u5185\u5b58\u4e2d\u53ef\u80fd\u5b58\u5728\u5927\u91cf\u8f83\u5c0f\u7684\uff0c\u96be\u4ee5\u5229\u7528\u7684 holes\u3002\u8fd9\u5c31\u662f\u5916\u90e8\u788e\u7247(external fragmentation)\uff0c\u5728\u6700\u574f\u7684\u60c5\u51b5\u4e0b\uff0c\u6bcf\u4e2a\u975e\u7a7a\u95f2\u7684\u5185\u5b58\u5212\u5206\u4e4b\u95f4\u90fd\u53ef\u80fd\u6709\u4e00\u5757\u4e0d\u5927\u4e0d\u5c0f\u7684 hole\uff0c\u800c\u8fd9\u4e9b hole \u5355\u72ec\u6765\u770b\u53ef\u80fd\u65e0\u6cd5\u5229\u7528\uff0c\u4f46\u5176\u603b\u548c\u53ef\u80fd\u5e76\u4e0d\u5c0f\uff0c\u8fd9\u662f\u4e2a\u975e\u5e38\u4e25\u91cd\u7684\u95ee\u9898\u3002

    Variable partition. 1 hole to 2 holes.

    \u4f46\u662f\u663e\u7136\u6211\u4eec\u4e0d\u80fd\u9891\u7e41\u5730\u8981\u6c42\u64cd\u4f5c\u7cfb\u7edf\u53bb\u91cd\u65b0\u6574\u7406\u5185\u5b58\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u60f3\u529e\u6cd5\u6765\u51cf\u5c11\u5916\u90e8\u788e\u7247\u7684\u4ea7\u751f\u3002\u6211\u4eec\u8003\u8651\u4e09\u79cd\u5206\u914d\u7b56\u7565\uff1a

    \u5173\u4e8e\u8fd9\u4e09\u4e2a\u662f\u4ec0\u4e48\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7 ADS \u7b14\u8bb0\u3002

    \u5b9e\u9a8c\u7ed3\u679c\u8868\u660e\uff0cFF \u548c BF \u7684\u901f\u5ea6\u90fd\u6bd4 WF \u5feb\uff0c\u4f46\u901a\u5e38 FF \u4f1a\u66f4\u5feb\u4e00\u4e9b\uff1b\u800c\u770b\u5185\u5b58\u7684\u5229\u7528\u6548\u7387\uff0c\u4e24\u8005\u5219\u6ca1\u6709\u660e\u663e\u7684\u533a\u522b\uff0c\u4f46\u662f FF \u548c BF \u90fd\u6df1\u53d7\u5916\u90e8\u788e\u7247\u4e4b\u5bb3\u3002

    \u9664\u4e86 variable partition \u7684\u8bbe\u8ba1\u4ee5\u5916\uff0c\u8fd8\u6709\u4e00\u4e9b\u522b\u7684\u8bbe\u8ba1\uff0c\u4f8b\u5982\u56fa\u5b9a\u5212\u5206(fixed partition)\uff0c\u5185\u5bb9\u6bd4\u8f83\u7b80\u5355\u6211\u5c31\u4e0d\u4ecb\u7ecd\u4e86\u3002\u8bfb\u8005\u53ef\u4ee5\u901a\u8fc7 xxjj \u7684\u7b14\u8bb0\u6765\u505a\u4e00\u4e9b\u4e86\u89e3\u3002

    \u5728 fixed partition \u4e2d\uff0c\u8fd8\u4f1a\u4ea7\u751f\u53e6\u5916\u4e00\u79cd\u788e\u7247\uff0c\u53eb\u5185\u90e8\u788e\u7247(internal fragmentation)\uff0c\u5b83\u6307\u7684\u662f\u5728\u7c7b\u4f3c fixed partition \u7684\u7b56\u7565\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5206\u914d\u7ed9\u8fdb\u7a0b\u7684\u5185\u5b58\u5f80\u5f80\u662f\u6210\u5757\u7684\uff0c\u8fd9\u5c31\u4f1a\u5bfc\u81f4\u9700\u6c42\u7684\u5206\u914d\u91cf\u5927\u4e8e\u8fdb\u7a0b\u5b9e\u9645\u9700\u6c42\u91cf\uff0c\u800c\u90a3\u4e9b\u88ab\u5206\u914d\u4e86\u4f46\u5b9e\u9645\u95f2\u7f6e\u7684\u5185\u5b58\uff0c\u5c31\u88ab\u79f0\u4e3a\u5185\u90e8\u788e\u7247\u3002\u6211\u4eec\u4e4b\u540e\u4ecb\u7ecd\u7684\u5206\u9875\u6280\u672f\uff0c\u4e5f\u540c\u6837\u4f1a\u4ea7\u751f\u5185\u90e8\u788e\u7247\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740","title":"\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740","text":"

    \u4e3a\u4e86\u8ba9\u5185\u5b58\u5177\u6709\u66f4\u5f3a\u7684\u7075\u6d3b\u6027\uff0c\u6211\u4eec\u533a\u5206\u5185\u5b58\u7684\u7269\u7406\u5730\u5740(physical address)\u548c\u865a\u62df\u5730\u5740(virtual address)\uff0c\u540e\u8005\u4e5f\u53eb\u903b\u8f91\u5730\u5740(logical address)\u3002

    \u7269\u7406\u5730\u5740\u5b9e\u9645\u5728\u5185\u5b58\u8bbe\u5907\u4e2d\u8fdb\u884c\u5185\u5b58\u5bfb\u5740\uff0c\u4e3b\u8981\u53cd\u5e94\u5185\u5b58\u5728\u786c\u4ef6\u5b9e\u73b0\u4e0a\u7684\u5c5e\u6027\uff1b\u800c CPU \u6240\u4f7f\u7528\u7684\u4e00\u822c\u6307\u7684\u662f\u865a\u62df\u5185\u5b58\uff0c\u4e3b\u8981\u53cd\u5e94\u5185\u5b58\u5728\u903b\u8f91\u4e0a\u7684\u5c5e\u6027\u3002\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u5b58\u5728\u6620\u5c04\u5173\u7cfb\uff0c\u800c\u5b9e\u73b0\u4ece\u865a\u62df\u5730\u5740\u5230\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u7684\u786c\u4ef6\uff0c\u662f\u5185\u5b58\u7ba1\u7406\u5355\u5143(memory management unit, MMU)\uff0c\u9664\u4e86\u662f\u5b9e\u73b0\u865a\u62df\u5730\u5740->\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u5916\uff0cMMU \u8fd8\u8d1f\u8d23\u5185\u5b58\u8bbf\u95ee\u7684\u4fdd\u62a4\u3002\u6211\u4eec\u5728\u4e4b\u540e\u4f1a\u5c06\u4e86\u89e3\u5230\uff0cTBL \u4e5f\u5c5e\u4e8e MMU \u7684\u4e00\u90e8\u5206\u3002

    Dynamic relocation using a relocation register.

    \u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u7684\u533a\u5206\u8ba9\u4f7f\u5f97\u7528\u6237\u7a0b\u5e8f\u4e0d\u518d\u9700\u8981\uff08\u4e5f\u4e0d\u88ab\u5141\u8bb8\uff09\u5173\u6ce8\u7269\u7406\u5730\u5740\u3002\u6b64\u5916\uff0c\u901a\u8fc7\u5229\u7528\u865a\u62df\u5730\u5740\u548c\u7269\u7406\u5730\u5740\u7684\u7075\u6d3b\u6620\u5c04\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5206\u9875\u6765\u5b9e\u73b0\u826f\u597d\u7684\u5185\u5b58\u7ba1\u7406\u3002

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u5c1d\u8bd5\u8bbe\u60f3\uff0c\u5229\u7528\u865a\u62df\u5730\u5740\u548c\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u6211\u4eec\u80fd\u505a\u5230\u54ea\u4e9b\u4e8b\uff1f

    \u63d0\u793a
    1. \u8003\u8651\u6570\u5b66\u4e0a\u5982\u4f55\u5206\u7c7b\u201c\u51fd\u6570\u6620\u5c04\u201d\uff1b
    2. \u8003\u8651\u5982\u4f55\u5b9e\u73b0\u5730\u5740\u8fde\u7eed\uff1b

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u7684\u957f\u5ea6\u9700\u8981\u4e00\u6837\u5417\uff1f

    \u4e00\u4e2a\u8fdb\u7a0b\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4(virtual address space)\uff0c\u6307\u7684\u662f\u5728\u865a\u62df\u5185\u5b58\u7684\u8bed\u5883\u4e0b\uff0c\u8fdb\u7a0b\u7684\u5185\u5b58\u7ed3\u6784\u3002\u901a\u5e38\u8fdb\u7a0b\u5728\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u7684\u5927\u81f4\u7ed3\u6784\u548c\u5730\u5740\u5206\u5e03\u90fd\u662f\u76f8\u540c\u7684\uff0c\u4f8b\u5982\u53ef\u80fd\u90fd\u662f\u4ece 0 \u5730\u5740\u5f00\u59cb\u653e text \u6bb5\uff0c\u6808\u5e95\u4e00\u822c\u90fd\u5728\u672b\u5c3e\u7b49\u2014\u2014\u8fd9\u5c31\u610f\u5473\u7740\u8fdb\u7a0b\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4\u5e94\u5f53\u662f\u4e92\u4e0d\u76f8\u5173\u7684\uff0c\u7531\u5c06\u82e5\u5e72\u4e92\u76f8\u9694\u79bb\u7684\u865a\u62df\u5730\u5740\u7a7a\u95f4\u6620\u5c04\u5230\u5404\u81ea\u7684\u7269\u7406\u5730\u5740\u8fd9\u4e2a\u4efb\u52a1\uff0c\u5219\u7531 MMU \u5b8c\u6210\u3002\uff08\u5728\u6211\u4eec\u4e4b\u540e\u4ecb\u7ecd\u4e86\u9875\u8868\u540e\uff0c\u8fd9\u610f\u5473\u7740\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u5e94\u5f53\u6709\u81ea\u5df1\u7684\u9875\u8868\u3002\uff09

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5206\u9875\u6280\u672f","title":"\u5206\u9875\u6280\u672f","text":"

    \u5206\u9875\u6280\u672f\u60f3\u8981\u89e3\u51b3\u7684\u95ee\u9898\u662f\u51cf\u8f7b\u8fdb\u7a0b\u201c\u5fc5\u987b\u8981\u4f7f\u7528\u8fde\u7eed\u5185\u5b58\u201d\u8fd9\u4e00\u9650\u5236\u3002\u6211\u4eec\u5728\u524d\u9762\u7684\u601d\u8003\u9898\u4e2d\u5df2\u7ecf\u63d0\u5230\uff0c\u9700\u8981\u4f7f\u7528\u8fde\u7eed\u5185\u5b58\u662f\u9700\u8981\u4e00\u79cd\u903b\u8f91\u4e0a\u7684\u8fde\u7eed\uff0c\u56e0\u6b64\uff0c\u5728\u7269\u7406\u5730\u5740\u548c\u865a\u62df\u5730\u5740\u7684\u8bed\u5883\u4e0b\uff0c\u6211\u4eec\u53ea\u9700\u8981\u4fdd\u8bc1\u865a\u62df\u5730\u5740\u662f\u8fde\u7eed\u7684\u5373\u53ef\u3002\u5f53\u7136\uff0c\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u7269\u7406\u5730\u5740\u7684\u8fde\u7eed\u5c31\u662f\u6beb\u65e0\u610f\u4e49\u7684\u4e86\uff0c\u7269\u7406\u5730\u5740\u7684\u8fde\u7eed\u662f\u5b9e\u9645\u4e0a\u63d0\u4f9b\u9ad8\u6548\u5185\u5b58\u8bbf\u95ee\u7684\u57fa\u7840\u3002

    \u663e\u7136\u8fd9\u91cc\u7684 \u201cpage\u201d \u662f\u57fa\u4e8e Definition 2\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u57fa\u672c\u8bbe\u8ba1","title":"\u57fa\u672c\u8bbe\u8ba1","text":"

    \u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u6211\u4eec\u4e0d\u518d\u4e25\u683c\u9700\u8981\u7269\u7406\u5730\u5740\u4e5f\u662f\u5b8c\u6574\u7684\u3001\u5927\u5757\u7684\u3001\u5b8c\u5168\u8fde\u7eed\u7684\u4e86\u3002\u542c\u8d77\u6765 external fragmentation \u7684\u95ee\u9898\u5df2\u7ecf\u89e3\u51b3\u4e86\uff0c\u8c8c\u4f3c\u6211\u4eec\u53ea\u9700\u8981\u6bcf\u6b21\u4ece\u91cc\u9762\u6162\u6162\u6361\u5783\u573e\uff0c\u51d1\u51fa\u4e00\u6574\u5757\u5c31\u884c\u4e86\u2026\u2026

    \u563f\uff01\u60f3\u7684\u6709\u70b9\u592a\u7f8e\u4e86\uff01\u867d\u7136\u903b\u8f91\u4e0a\u7269\u7406\u5730\u5740\u4e0d\u9700\u8981\u8fde\u7eed\uff0c\u4f46\u8fc7\u4e8e\u7a00\u788e\u7684\u7269\u7406\u5730\u5740\u4f1a\u5bfc\u81f4\u5185\u5b58\u8bbf\u95ee\u7f13\u6162\uff0c\u6361\u5783\u573e\u51d1\u51fa\u6765\u7684\u865a\u62df\u5185\u5b58\u5757\u4e5f\u50cf\u5783\u573e\u4e00\u6837\u98df\u4e4b\u65e0\u5473\u3002\u5185\u5b58\u6620\u5c04\u5173\u7cfb\u8fc7\u4e8e\u7410\u788e\uff0c\u867d\u7136\u7075\u6d3b\u6027\u4e0a\u5347\u4f46\u6548\u7387\u4e0b\u964d\uff1b\u5982\u679c\u6620\u5c04\u5173\u7cfb\u8f83\u4e3a\u5927\u5757\u3001\u5b8c\u6574\uff0c\u90a3\u4e48\u6548\u7387\u4e0a\u5347\u4f46\u7075\u6d3b\u6027\u4e0b\u964d\u3002\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u4e2d\u5eb8\u7684\u65b9\u6848\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5e27--\u9875","title":"\u5e27 & \u9875","text":"

    \u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u4e24\u8005\u7684\u4f18\u70b9\u5408\u5e76\uff0c\u6211\u4eec\u5c06\u7269\u7406\u5185\u5b58\u5212\u5206\u4e3a\u56fa\u5b9a\u5927\u5c0f\u7684\u5757\uff0c\u79f0\u4e3a\u5e27(frames)\uff08\u7c7b\u4f3c\u4e8e fixed partition\uff09\uff0c\u6bcf\u4e2a\u5e27\u5bf9\u5e94\u865a\u62df\u5730\u5740\u4e2d\u7b49\u5927\u7684\u4e00\u5757\u9875(pages)\uff0c\u7528\u8fd9\u4e9b\u5e27\u6765\u4f5c\u4e3a\u8fde\u7eed\u7684\u865a\u62df\u5730\u5740\u7684\u7269\u7406\u57fa\u7840\uff0c\u7528\u865a\u62df\u7684\u9875\u53f7\u6765\u652f\u6301\u8fde\u7eed\u865a\u62df\u5730\u5740\uff08\u9a6c\u4e0a\u5c31\u4f1a\u7ec6\u8bf4\uff09\uff0c\u8fd9\u6837\u4fdd\u8bc1\u4e86\u5728\u4e00\u5b9a\u9650\u5ea6\u5185\u9875\u5206\u914d\u7684\u81ea\u7531\u5ea6\uff0c\u5229\u7528\u4e86\u865a\u62df\u5730\u5740\u7684\u7075\u6d3b\u6027\uff1b\u53c8\u4fdd\u8bc1\u4e86\u5185\u5b58\u76f8\u5bf9\u6765\u8bf4\u8fd8\u662f\u6210\u5757\u8fde\u7eed\u7684\uff0c\u63d0\u4f9b\u4e86\u7269\u7406\u5730\u5740\u8fde\u7eed\u7684\u9ad8\u6548\u6027\u3002\u800c\u5e27\u4e0e\u9875\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u662f\u901a\u8fc7\u9875\u8868(page table)\u6765\u5b9e\u73b0\u7684\uff0c\u5728\u9875\u8868\u4e2d\uff0c\u5b9e\u9645\u4e0a\u662f\u4e00\u4e2a\u4ee5\u9875\u53f7\u4e3a\u7d22\u5f15\u7684\u5e27\u53f7\u6570\u7ec4\uff0c\u6309\u7167\u9875\u53f7\u987a\u5e8f\u6392\u5217\uff0c\u56e0\u6b64\uff0c\u9875\u53f7\u5c31\u662f\u5bf9\u5e94\u7684\u8868\u9879\u5728\u6570\u5217\u4e2d\u7684\u4f4d\u6b21\u3002

    pages v.s. frames

    \u4e0b\u9762\u7684\u5185\u5bb9\u662f\u5728\u6263\u5b9a\u4e49\u6263\u5b57\u773c\uff0c\u5982\u679c\u8bfb\u8005\u8ba4\u4e3a\u8fd9\u6beb\u65e0\u610f\u4e49\uff0c\u53ef\u4ee5\u76f4\u63a5\u8df3\u8fc7\uff0c\u4f46\u6211\u4e2a\u4eba\u8ba4\u4e3a\u8fd9\u4e9b\u4e8b\u662f\u6784\u6210\u6d41\u7545\u903b\u8f91\u7684\u4e00\u4e2a\u57fa\u7840\u3002

    \u867d\u7136\u6211\u4eec\u5df2\u7ecf\u7ed9\u51fa\u4e86\u660e\u786e\u7684 page \u548c frame \u7684\u5b9a\u4e49\uff0c\u4f46\u73b0\u5b9e\u5f88\u6df7\u4e71\uff0c\u6211\u4e3b\u8981\u67e5\u627e\u5230\u5173\u4e8e page \u548c frame \u6709\u8fde\u5957\u4e0d\u540c\u7684\u5b9a\u4e49\u3002

    Definition 1

    \u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff0c\u8fd9\u79cd\u6d41\u6d3e\u7684\u5b9a\u4e49\u5c31\u662f\u4e0a\u9762\u63d0\u5230\u8fc7\u7684\u8fd9\u79cd\uff1a

    1. page \u8868\u793a\u865a\u62df\u5185\u5b58\u4e2d\u7684\u5b8c\u6574\u4e00\u5757\uff1b
    2. frame \u8868\u793a\u7269\u7406\u5185\u5b58\u4e2d\u7684\u5b8c\u6574\u4e00\u5757\uff1b

    \u8fd9\u91cc\u6211\u4eec\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u4e0d\u51c6\u786e\u63cf\u8ff0\u662f\u600e\u6837\u201c\u5b8c\u6574\u4e00\u5757\u201d\uff0c\u4e3b\u8981\u533a\u522b\u5728\u4e8e\u52a0\u7c97\u90e8\u5206\u3002

    Definition 2

    \u53c2\u8003\u8fd9\u4e2a\u94fe\u63a5\uff0c\u8fd9\u79cd\u6d41\u6d3e\u7684\u5b9a\u4e49\u4e0d\u540c\uff0c\u5728\u8fd9\u5957\u5b9a\u4e49\u91cc\uff0c\u51c6\u786e\u7684 page \u548c frame \u4e0d\u662f\u5bf9\u7b49\u7684\u6982\u5ff5\uff0c\u800c\u662f\u8bf4\uff1a

    1. \u4f5c\u4e3a\u7f29\u5199\u7684 page \u6307\u4ee3 virtual page\uff0c\u5373\u865a\u62df\u5185\u5b58\u4e2d\u7684\u4e00\u5757\uff1b
    2. \u4f5c\u4e3a\u7f29\u5199\u7684 frame \u5168\u79f0\u662f page frame\uff0c\u4e5f\u88ab\u5b9a\u4e49\u4e3a physical page\uff1b

    \u4e3a\u4e86\u907f\u514d\u6b67\u4e49\uff0c\u672c block \u4e2d\uff0c\u6211\u4eec\u53ea\u4f7f\u7528 page\uff0cvirtual page\uff0cphysical page \u8fd9\u4e09\u4e2a\u672f\u8bed\uff01

    \u5728\u8fd9\u4e2a\u5b9a\u4e49\u91cc\uff0cpage \u8868\u793a\u7684\u5b9e\u9645\u4e0a\u662f\u62bd\u8c61\u7684\u6570\u636e\u5757\uff08\u6ce8\u610f\uff0c\u4e0d\u662f\u865a\u62df\u7684\uff09\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff1a

    1. page \u7684\u672c\u8d28\u662f\u201c\u6570\u636e\u4fe1\u606f\u201d\uff1b
    2. physical page \u662f page \u5728\u7269\u7406\u5185\u5b58\u4e0a\u7684\u5b9e\u9645\u5b58\u50a8\u5f62\u5f0f\uff1b
    3. virtual page \u662f page \u7684\u5728\u865a\u62df\u5185\u5b58\u4e0a\u7684\u903b\u8f91\u6620\u8c61\uff0c\u4e5f physical page \u7684\u4e00\u4e2a view\uff1b

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u867d\u7136\u7528\u8bcd\u6539\u53d8\uff0c\u4f46\u662f \u201cphysical page\u201d \u548c \u201cvirtual page\u201d \u7684\u5173\u7cfb\u548c\u4e4b\u524d\u662f\u4e00\u6837\u7684\uff0c\u53ea\u662f \u201cpage\u201d \u8fd9\u4e2a\u8bcd\u7684\u542b\u4e49\u4e0d\u4e00\u6837\u4e86\u3002

    \u6240\u4ee5\u6700\u8fdd\u548c\u7684\u5c31\u662f\uff0c\u4f5c\u4e3a\u7f29\u5199\u7684 page \u548c\u51c6\u786e\u7684 page \u7684\u542b\u4e49\u662f\u4e0d\u4e00\u81f4\u7684\uff0c\u751a\u81f3\u533a\u522b\u5de8\u5927\u3002\u6240\u4ee5\u6211\u4e0d\u559c\u6b22\u8fd9\u4e2a\u5b9a\u4e49\u3002\u4f46\u662f\u6ca1\u529e\u6cd5\uff0cpaging \u6280\u672f\u7684\u547d\u540d\u53cd\u800c\u5c31\u662f\u57fa\u4e8e\u8fd9\u5957\u5b9a\u4e49\u7684\uff0c\u8fd9\u91cc\u5927\u6982\u5b58\u5728\u4e00\u4e2a\u975e\u5e38\u6076\u5fc3\u7684\u5386\u53f2\u9057\u7559\u95ee\u9898\u5728\uff0c\u8bf7\u8bfb\u8005\u7559\u4e2a\u5fc3\u773c\uff0c\u5728\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\u4ed4\u7ec6\u8fa8\u522b\u3002

    \u56de\u5fc6\u865a\u62df\u5730\u5740\u7a7a\u95f4\u7684\u76f8\u5173\u6982\u5ff5\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u5e94\u5f53\u90fd\u6709\u81ea\u5df1\u7684\u9875\u8868\uff0c\u5373\u6211\u4eec\u79f0\u9875\u8868\u662f per-process data structures\u3002

    \u5934\u8111\u98ce\u66b4

    \u7531\u4e8e\u5e27\u548c\u9875\u7684\u5927\u5c0f\u662f\u56fa\u5b9a\u7684\uff0c\u6240\u4ee5\u867d\u7136\u7406\u8bba\u4e0a\u6211\u4eec\u9700\u8981\u7684\u662f\u6bcf\u4e00\u5e27\u7684\u9996\u5730\u5740\uff0c\u4f46\u6240\u8c13\u7684\u201c\u9996\u5730\u5740\u201d\u5b9e\u9645\u4e0a\u662f \\(m * FrameSize\\)\uff0c\u56e0\u6b64\uff0c\u53ea\u9700\u8981\u7528 \\(m\\) \u5c31\u53ef\u4ee5\u552f\u4e00\u786e\u5b9a\u4e86\uff08\u5c31\u50cf\u6570\u7ec4\u7684 random access\uff09\u3002

    \u73b0\u5728\uff0c\u8bf7\u8bfb\u8005\u601d\u8003\uff0c\u5f53 \\(FrameSize = 2^k\\) \u65f6\uff0c\u4f1a\u6709\u600e\u6837\u826f\u597d\u7684\u6027\u8d28\uff1f

    \u63d0\u793a

    \u8054\u7cfb\u9875 & \u865a\u62df\u5730\u5740\uff0c\u8003\u8651\u6574\u4e2a\u5730\u5740\u7684\u4e8c\u8fdb\u5236\u8868\u793a\u4e2d\u8868\u793a\u9875\u53f7\u7684\u90e8\u5206\u5728\u6574\u4e2a\u4e8c\u8fdb\u5236\u4e32\u4e2d\u7684\u6784\u6210\uff01

    Paging model of logical and physical memory. \u4ee5 page table \u4e2d\u7684\u7b2c\u4e00\u9879\u4e3a\u4f8b\uff1a0:5 \u8868\u793a\u865a\u62df\u5730\u5740\u4e2d\u7684\u7b2c 0 \u9875\u5bf9\u5e94\u7269\u7406\u5730\u5740\u4e2d\u7684\u7b2c 5 \u5e27\u3002

    \u5934\u8111\u98ce\u66b4

    \u4e0d\u77e5\u9053\u4f60\u770b\u4e86\u8fd9\u4e2a\u5bfb\u5740\u6a21\u5f0f\u662f\u5426\u611f\u89c9\u6709\u4e9b\u5fae\u5999\u7684\u70b9\uff1f\u5728\u7ee7\u7eed\u4e4b\u524d\uff0c\u8bf7\u5c1d\u8bd5\u53d1\u73b0\u8fd9\u4e2a\u8fdd\u548c\u7684\u5730\u65b9\u5728\u4f55\u5904\u3002

    \u9ec4\u6cb9\u732b\uff01

    \u9996\u5148\u4e00\u4e2a\u7ed3\u8bba\u662f\uff0c\u6211\u4eec\u663e\u7136\u4e0d\u80fd\u62ff\u7740\u865a\u62df\u5730\u5740\u53bb\u627e\u9875\u8868\uff0c\u56e0\u4e3a\u4f1a\u9677\u5165\uff1a\u300e\u627e\u9875\u8868\u9700\u8981\u8bbf\u95ee\u9875\u8868\u7684\u7269\u7406\u5730\u5740\u3001\u627e\u865a\u62df\u5730\u5740\u5bf9\u5e94\u7684\u7269\u7406\u5730\u5740\u9700\u8981\u9875\u8868\u3001\u627e\u9875\u8868\u9700\u8981\u8bbf\u95ee\u9875\u8868\u7684\u7269\u7406\u5730\u5740\u2026\u2026\u300f\u7684\u9ec4\u6cb9\u732b3\u4e2d\u3002

    \u5c31 RSICV \u6765\u8bf4\uff0c\u4f60\u53ef\u4ee5\u5728\u5b9e\u9a8c\u4e09\u7684\u624b\u518c\u91cc\u627e\u5230\u4e00\u6bb5\u63cf\u8ff0 satp \u5bc4\u5b58\u5668\u7684\u90e8\u5206\u3002

    \u6211\u4eec\u53ef\u4ee5\u6ce8\u610f\u5230\uff0csatp \u5bc4\u5b58\u5668\u7684\u672b\u5c3e\u5b58\u50a8\u7684\u662f\u7269\u7406\u9875\u53f7\uff0c\u4e5f\u5c31\u662f\u5e27\u53f7\uff0c\u6240\u4ee5\u975e\u5e38\u663e\u7136\u7684\uff0c\u6211\u4eec\u9700\u8981\u7279\u522b\u5730\u53bb\u5b58\u50a8\u9875\u8868\u7684\u7269\u7406\u5730\u5740\u4fe1\u606f\uff0c\u5e76\u7528\u8fd9\u4e2a\u7269\u7406\u5730\u5740\u6765\u8bbf\u95ee\u9875\u8868\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u9875--\u865a\u62df\u5730\u5740","title":"\u9875 & \u865a\u62df\u5730\u5740","text":"

    \u6211\u4eec\u6765\u770b\u865a\u62df\u5730\u5740\u662f\u5982\u4f55\u5728\u8fde\u7eed\u6027\u4e0a\u53d1\u6325\u4f5c\u7528\u7684\uff1a\u4e00\u4e2a\u7a0b\u5e8f\u8f7d\u5165\u5185\u5b58\u53ef\u80fd\u9700\u8981\u591a\u4e2a\u9875\uff0c\u8fd9\u4e9b\u9875\u6309\u987a\u5e8f\u88ab\u5206\u914d\u4e86\u9875\u53f7(page number)\uff0c\u5b9e\u9645\u4f7f\u7528\u7684\u5730\u5740\u4f1a\u843d\u5728\u67d0\u4e00\u9875\u4e2d\uff0c\u5c31\u901a\u8fc7 page number \u8fdb\u884c\u7d22\u5f15\u3002\u800c\u7531\u4e8e\u4e00\u9875\u4e2d\u5305\u542b\u4e00\u5927\u5757\u5185\u5b58\uff08page size \u5e38\u5e38\u53d6 4KB\uff09\uff0c\u800c\u6211\u4eec\u6240\u9700\u8981\u5bfb\u7684\u5740\u603b\u662f\u5176\u4e2d\u7684\u4e00\u4e2a Byte\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u9875\u5185\u504f\u79fb(page offset)\u6765\u7d22\u5f15\u6211\u4eec\u6240\u9700\u8981\u7684\u5730\u5740\u5728\u9875\u4e2d\u7684\u4f4d\u7f6e\uff0c\u5bf9\u4e8e page size \u4e3a 4KB \u7684\u9875\uff0cpage offset \u9700\u8981\u6709 \\(\\log_2{4096} = 12\\) \u4f4d\u3002

    \u56e0\u6b64\uff0c\u5b9e\u9645\u5728 paging \u903b\u8f91\u4e2d\uff0c\u4e00\u4e2a\u865a\u62df\u5730\u5740\u7684\u53ef\u4ee5\u88ab\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502page number    \u2502page offset   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n p: m-n bits     d: n bits\n

    \u663e\u7136\uff0c\u7531\u4e8e\u5e27\u548c\u9875\u662f\u4e00\u4f53\u4e24\u9762\u3001\u4e00\u4e00\u5bf9\u5e94\u7684\uff0c\u6240\u4ee5\u5355\u4e2a\u9875\u5185\u7684\u8fde\u7eed\u5185\u5b58\u9875\u5bf9\u5e94\u5e27\u4e0a\u7684\u8fde\u7eed\u5185\u5b58\u3002\u4f7f\u7528 page offset \u6765\u6807\u8bc6\u9875\u5185\u5730\u5740\uff0c\u5b9e\u9645\u5c31\u5f97\u5230\u4e86\u76ee\u6807\u7269\u7406\u5730\u5740\u76f8\u5bf9\u4e8e\u5e27\u4e2d\u8d77\u59cb\u5730\u5740\u7684\u504f\u79fb\u91cf\u3002\u800c\u5bf9\u4e8e\u9875\u95f4\u7684\u5730\u5740\uff0c\u5047\u8bbe\u9875\u672b\u5730\u5740\u662f\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502page number    \u250211111111111111\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n p: m-n bits     d: n bits\n

    \u7531\u4e8e\u865a\u62df\u5730\u5740\u8868\u73b0\u4e0a\u8fd8\u662f\u4e2a\u6b63\u5e38\u7684\u4e8c\u8fdb\u5236\u6570\uff0c\u6240\u4ee5\u5176\u4e0b\u4e00\u4e2a\u5730\u5740\u5c31\u662f\uff1a

    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502page number + 1\u250200000000000000\u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n p: m-n bits     d: n bits\n

    \u800c\u5176\u542b\u4e49\u5c31\u662f\u4e0b\u4e00\u5f20\u9875\u8868\u7684 0 \u53f7\u4f4d\u3002\u800c\u6211\u4eec\u77e5\u9053\uff0c\u76f8\u90bb\u9875\u5bf9\u5e94\u7684\u5e27\u4e0d\u4e00\u5b9a\u662f\u8fde\u7eed\u7684\uff0c\u4f46\u8fd9\u4e2a\u4e0d\u8fde\u7eed\u7684\u6027\u8d28\u5bf9\u865a\u62df\u5730\u5740\u662f\u900f\u660e\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u603b\u4f53\u68b3\u7406","title":"\u603b\u4f53\u68b3\u7406","text":"

    \u7a0d\u5fae\u5bf9\u4e0a\u9762\u7684\u5185\u5bb9\u505a\u4e00\u4e0b\u603b\u7ed3\uff0c\u6211\u4eec\u62e5\u6709\u4e86\u903b\u8f91\u7684\u9875\u5230\u7269\u7406\u7684\u5e27\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u8fd9\u4e2a\u6620\u5c04\u5173\u7cfb\u5b58\u5728\u9875\u8868\u91cc\uff0c\u5b9e\u73b0\u903b\u8f91\u4e0a\u8fde\u7eed\u3001\u7269\u7406\u4e0a\u79bb\u6563\u7684\u5185\u5b58\u5757\u7d22\u5f15\uff1b\u800c\u5229\u7528 page number + offset \u7684\u7ed3\u6784\u5b9a\u4f4d\u4e86\u5185\u5b58\u5757\u4e2d\u7684\u5177\u4f53\u5730\u5740\uff0c\u5176\u4e2d offset \u5728\u5e27\u548c\u9875\u4e2d\u90fd\u8868\u793a\u5bf9\u4e8e\u5757\u9996\u5730\u5740\u7684\u504f\u79fb\uff0c\u56e0\u6b64\u53ef\u4ee5\u76f4\u63a5\u8fc1\u79fb\u4f7f\u7528\u3002

    \u56e0\u6b64\uff0c\u4ece\u865a\u62df\u5730\u5740\u5230\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5728\u9875\u8868\u4e2d\u67e5\u8be2\u865a\u62df\u5730\u5740\u4e2d\u7684 page number\uff0c\u5c06\u5176\u6362\u4e3a frame number\uff0c\u518d\u76f4\u63a5\u62fc\u63a5 offset \u5c31\u884c\u4e86\u3002

    \u5b9e\u9645\u4e0a\u8fd9\u662f\u4e2a\u975e\u5e38\u81ea\u7136\u7684\u8fc7\u7a0b\uff1a\u6574\u4f53\u5730\u770b\u865a\u62df\u5730\u5740\uff0c\u5c31\u662f\u76f4\u63a5\u5728\u8fde\u7eed\u7684\u865a\u62df\u5185\u5b58\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 Byte\uff1b\u6574\u4f53\u5730\u770b\u7269\u7406\u5730\u5740\uff0c\u540c\u6837\u4e5f\u662f\u76f4\u63a5\u5728\u8fde\u7eed\u7684\u7269\u7406\u5185\u5b58\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 Byte\u3002\u73b0\u5728\u901a\u8fc7\u7f6e\u6362\u4e8c\u8fdb\u5236\u5730\u5740\u5b57\u7b26\u4e32\u7684\u524d\u7f00\uff0c\u5b9e\u73b0\u4e86\u4e00\u4e2a\u5bfb\u5740\u7a7a\u95f4\u7684\u6620\u5c04\u3002\u800c\u8fd9\u4e2a\u6620\u5c04\u4e2d\uff0c\u8868\u793a offset \u7684\u540e\u7f00\u4e0d\u53d8\uff0c\u6b63\u5bf9\u5e94\u7740\u9875\u548c\u5e27\u4e2d\u504f\u79fb\u5bfb\u5740\u89c4\u5219\u7684\u7edf\u4e00\u3002

    Protection

    \u8bf7\u6ce8\u610f\uff0c\u4f7f\u7528\u8fc7\u7a0b\u4e2d\u6709\u4e9b\u9875\u53ef\u80fd\u5c1a\u672a\u4e0e\u5b9e\u9645\u7684\u5e27\u5efa\u7acb\u6620\u5c04\u5173\u7cfb\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\u662f\u4e0d\u53ef\u7528\u7684\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u624b\u6bb5\u6765\u6807\u8bc6\u8868\u9879\u662f\u5426\u6709\u6548\uff0c\u4e8e\u662f\u5728\u9875\u8868\u4e2d\u5f15\u5165 valid bit\uff0c\u7528\u6765\u6807\u8bc6\u9875\u662f\u5426\u6709\u6548\uff0c\u5982\u679c\u8bd5\u56fe\u8bbf\u95ee invalid \u7684\u5730\u5740\uff0c\u5219\u4f1a\u51fa\u73b0\u5f02\u5e38\uff0c\u4ee5\u6b64\u5b9e\u73b0\u4e86 protection\u3002

    \u4e5f\u6709\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u901a\u8fc7\u7ef4\u62a4 page-table length register, PTLR \u6765\u5b9e\u73b0 protection\uff0c\u8fd9\u91cc\u4e0d\u91cd\u70b9\u4ecb\u7ecd\u3002

    page size \u7684\u9009\u62e9

    \u5bb9\u6613\u7406\u89e3\uff0cpage size \u8f83\u5927\u65f6\uff0c\u9875\u8868\u9879\u66f4\u5c11\uff0c\u800c\u9875\u66f4\u5bb9\u6613\u88ab\u6d6a\u8d39\uff0c\u4f46\u5bf9\u4e8e\u78c1\u76d8\u6765\u8bf4\uff0c\u5355\u6b21\u5927\u91cf\u7684\u4f20\u8f93\u6548\u7387\u66f4\u9ad8\uff1bpage size \u8f83\u5c0f\u65f6\uff0c\u9875\u8868\u9879\u66f4\u591a\uff0c\u9700\u8981\u66f4\u591a\u5185\u5b58\u548c\u65f6\u95f4\u6765\u5904\u7406\u9875\u8868\uff0c\u6240\u4ee5\u5177\u4f53 page size \u7684\u5927\u5c0f\u8981\u5177\u4f53\u95ee\u9898\u5177\u4f53\u5206\u6790\u3001\u4e0e\u65f6\u4ff1\u8fdb\u3002

    \u5728\u4e4b\u540e\u9875\u8868\u8bbe\u8ba1\u6539\u8fdb\u4e00\u8282\u4e2d\uff0c\u6211\u4eec\u5c06\u7ee7\u7eed\u5bf9\u9875\u8868\u7684\u7ed3\u6784\u8fdb\u884c\u4fee\u6539\uff0c\u4f46\u6574\u4f53\u4f7f\u7528\u903b\u8f91\u4e0d\u53d8\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u786c\u4ef6\u652f\u6301","title":"\u786c\u4ef6\u652f\u6301","text":"

    \u5bfc\u8bfb

    \u672c\u8282\u4fa7\u91cd\u4e8e\u4ece\u786c\u4ef6\u5b9e\u73b0\u7684\u89d2\u5ea6\u6765\u770b\u5206\u9875\u6280\u672f\u3002

    \u6211\u4eec\u524d\u9762\u8bf4\u8fc7\uff0c\u9875\u8868\u662f per-process data structures\uff0c\u6240\u4ee5\u9875\u8868\u5e94\u5f53\u4f5c\u4e3a\u4e00\u4e2a\u8fdb\u7a0b\u7684\u5143\u4fe1\u606f\u88ab\u7ef4\u62a4\u3002\u663e\u7136\u6211\u4eec\u4e0d\u80fd\u76f4\u63a5\u7528\u5927\u91cf\u5bc4\u5b58\u5668\u6765\u7ef4\u62a4\u9875\u8868\uff08\u7406\u8bba\u4e0a\u5f88\u5feb\uff0c\u4f46\u662f\u592a\u8d35\u3001\u8bbe\u8ba1\u4e0a\u4e5f\u4e0d\u73b0\u5b9e\uff09\uff0c\u6240\u4ee5\u9875\u8868\u5b9e\u9645\u4e0a\u5e94\u5f53\u88ab\u653e\u5728\u5185\u5b58\u4e2d\uff08\u8fdb\u4e00\u6b65\u7684\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u6548\u7387\uff0c\u6211\u4eec\u5c06\u9875\u8868\u653e\u5728\u4e3b\u5b58\u4e2d\uff09\uff0c\u6211\u4eec\u901a\u8fc7\u7528\u5bc4\u5b58\u5668\u7ef4\u62a4\u4e00\u4e2a\u6307\u5411\u9875\u8868\u7684\u6307\u9488\u6765\u7ef4\u62a4\u9875\u8868\uff0c\u8fd9\u4e2a\u7279\u6b8a\u7684\u5bc4\u5b58\u5668\u88ab\u79f0\u4e3a\u9875\u8868\u57fa\u5740\u5bc4\u5b58\u5668(page-table base register, PTBR)\uff0c\u5f53\u8fdb\u7a0b\u4e0d\u5904\u4e8e running \u6001\u65f6\uff0cPTBR \u5e94\u5f53\u88ab\u5b58\u50a8\u5728 PCB \u4e2d\uff0c\u5728 context switch \u7684\u8fc7\u7a0b\u4e2d\uff0c\u6211\u4eec\u4e5f\u5e94\u5f53\u5bf9 PTBR \u8fdb\u884c\u4ea4\u6362\u3002

    \u563f\uff01\u53ef\u662f\u5185\u5b58\u771f\u7684\u597d\u6162\uff01

    \u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u5730\u5740\u6620\u5c04\u7684\u5b9e\u73b0\u903b\u8f91\uff0c\u6211\u4eec\u9996\u5148\u9700\u8981\u5229\u7528\u9875\u8868\u67e5\u8be2\u5e27\u53f7\uff0c\u5229\u7528\u5e27\u53f7\u53bb\u5f97\u5230\u7269\u7406\u5730\u5740\uff0c\u518d\u53bb\u5185\u5b58\u91cc\u505a\u67e5\u8be2\uff0c\u8fd9\u91cc\u6709\u8db3\u8db3\u4e24\u6b21\u5185\u5b58\u8bbf\u95ee\u64cd\u4f5c\uff01

    \u4e0d\u4ec5\u5982\u6b64*2\uff0c\u4f60\u53ef\u80fd\u8fd8\u9700\u8981\u904d\u5386\u6574\u4e2a\u9875\u8868\u624d\u80fd\u8fbe\u5230\u4f60\u7684\u76ee\u7684\uff01

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#tlb","title":"TLB","text":"

    \u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u6211\u4eec\u5f15\u7528\u8ba1\u7ec4\u91cc\u5b66\u5230\u7684 Eight Great Ideas \u4e4b Make Common Case Fast\uff01\u5f15\u5165\u4e00\u4e2a\u7f13\u5b58\u6765\u52a0\u901f\u9875\u8868\u7684\u7ef4\u62a4\uff1a\u9875\u8868\u7f13\u5b58(translation look-aside buffer, TLB)\uff0c\u5b83\u5b9e\u9645\u4e0a\u662f MMU \u7684\u4e00\u90e8\u52061\uff0c\u9875\u53f7\u548c\u5e27\u53f7\u4ee5\u952e\u503c\u5bf9\u7684\u5f62\u5f0f\u5b58\u50a8\u5728 TLB \u4e2d\u3002\u9664\u4e86\u8bbf\u95ee\u901f\u5ea6\u5feb\u4ee5\u5916\uff0cTLB \u5141\u8bb8\u5e76\u884c\u5730\u67e5\u8be2\u6240\u6709\u952e\u503c\u5bf9\uff0c\u8fd9\u610f\u5473\u7740\u4f60\u4e0d\u518d\u9700\u8981\u4e00\u4e2a\u4e00\u4e2a\u904d\u5386\u9875\u8868\u4e2d\u7684\u5185\u5bb9\u4e86\uff01\u4ece\u6548\u7387\u4e0a\u6765\u8bf4\uff0c\u73b0\u4ee3\u7684 TLB \u5df2\u7ecf\u80fd\u591f\u5728\u4e00\u4e2a\u6d41\u6c34\u7ebf\u8282\u62cd\u4e2d\u5b8c\u6210\u67e5\u8be2\u64cd\u4f5c\u3002

    \u4f46\u662f\u8fd9\u4e48\u5389\u5bb3\u7684\u4e1c\u897f\u80af\u5b9a\u8fd8\u662f\u6709\u5c40\u9650\u6027\u7684\uff0cTLB \u4e00\u822c\u90fd\u6bd4\u8f83\u5c0f\uff0c\u5f80\u5f80\u53ea\u80fd\u652f\u6301 32 - 1024 \u4e2a\u8868\u9879\u3002\u800c\u4e14\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u201c\u7f13\u5b58\u201d\uff0c\u5b83\u6709\u53ef\u80fd\u4ea7\u751f miss\uff08\u5373\u6ca1\u5728 TLB \u4e2d\u627e\u5230\u5f85\u67e5\u7684\u9875\u53f7\uff09\uff0c\u5f53 TLB miss \u51fa\u73b0\u7684\u65f6\u5019\uff0c\u5c31\u9700\u8981\u8bbf\u95ee\u653e\u5728\u5185\u5b58\u4e2d\u7684\u9875\u8868\uff0c\u5e76\u505a\u6734\u7d20\u7684\u67e5\u8be2\u3002\u540c\u65f6\uff0c\u6309\u7167\u4e00\u5b9a\u7b56\u7565\uff08\u5982 LRU\u3001round-robin to random \u7b492\uff09\u5c06\u5f53\u524d\u67e5\u8be2\u7684\u952e\u503c\u5bf9\u66f4\u65b0\u5230 TLB \u4e2d\u3002

    \u6b64\u5916\uff0cTLB \u5141\u8bb8\u7279\u5b9a\u7684\u8868\u9879\u88ab\u7ebf\u56fa(wired down)\uff0c\u88ab\u7ebf\u56fa\u7684\u8868\u9879\u4e0d\u518d\u5141\u8bb8\u88ab\u66ff\u6362\u3002\uff08\u8fd9\u4e2a\u4e2d\u6587\u662f\u6211\u81ea\u5df1\u624d\u534e\u6a2a\u6ea2\u51fa\u6765\u7684\uff0c\u8bf7\u4e0d\u8981\u5230\u5904\u7528\u5bb9\u6613\u88ab\u5f53\u6ca1\u89c1\u8bc6\u3002\uff09

    \u867d\u7136\u9875\u8868\u662f per-process data structures\uff0c\u4f46 TLB \u5e76\u4e0d\u662f\uff01

    \u6b63\u56e0\u5982\u6b64\uff0c\u5728 context switch \u7684\u65f6\u5019\uff0c\u6211\u4eec\u9700\u8981\u6e05\u7a7a TLB\uff0c\u5373\u8fdb\u884c flush \u64cd\u4f5c\uff0c\u5426\u5219\u4e0b\u4e00\u4e2a\u8fdb\u7a0b\u5c31\u4f1a\u8bbf\u95ee\u5230\u4e0a\u4e00\u4e2a\u8fdb\u7a0b\u7684\u9875\u8868\u3002\u53c8\u6216\u8005\u6211\u4eec\u4e0d\u9700\u8981\u6bcf\u6b21\u90fd\u6e05\u7a7a TLB\uff0c\u800c\u662f\u5728 TLB \u7684\u8868\u9879\u4e2d\u52a0\u5165\u4e00\u4e2a\u5730\u5740\u7a7a\u95f4\u6807\u8bc6\u7b26(address-space identifier, ASIDs)\u5b57\u6bb5\uff1b\u5728\u67e5\u8be2\u9875\u53f7\u65f6\uff0c\u4e5f\u6bd4\u8f83 ASID\uff0c\u53ea\u6709 ASID \u4e00\u81f4\u624d\u7b97\u5339\u914d\u6210\u529f\u3002

    \u5b9a\u91cf\u5206\u6790

    \u6211\u4eec\u4f7f\u7528\u51fb\u4e2d\u6bd4\u4f8b(hit ratio)\u6765\u63cf\u8ff0\u6211\u4eec\u5728 TLB \u4e2d\u6210\u529f\u627e\u5230\u6211\u4eec\u9700\u8981\u7684\u9875\u5e27\u952e\u503c\u5bf9\u7684\u6982\u7387\uff0c\u90a3\u4e48\u5047\u8bbe\u8bbf\u95ee\u4e00\u6b21\u5185\u5b58\u9700\u8981 \\(t \\text{nanoseconds}\\)\uff0c\u90a3\u4e48\u4f7f\u7528\u8be5 TLB \u7684\u6709\u6548\u5185\u5b58\u8bbf\u95ee\u65f6\u95f4(effective memory-access time)\u4e3a\uff1a

    \\[ \\begin{aligned} &\\text{effective memory-access time} \\\\ &= \\underbrace{\\text{hit ratio} \\times \\text{memory-access} }_\\text{TLB hit} + \\underbrace{(1 - \\text{hit ratio}) \\times 2 \\times \\text{memory-access}}_\\text{TLB miss} \\\\ &= p_{\\text{hit}} \\times t + (1 - p_{\\text{hit}}) \\times 2t \\\\ &= (2 - p_{\\text{hit}})t \\end{aligned} \\]

    \u5728\u73b0\u4ee3\u8ba1\u7b97\u673a\u4e2d\uff0cTLB \u7684\u7ed3\u6784\u53ef\u80fd\u4f1a\u66f4\u52a0\u590d\u6742\uff08\u53ef\u80fd\u6709\u66f4\u591a\u5c42\uff09\uff0c\u6240\u4ee5\u5b9e\u9645\u7684\u8ba1\u7b97\u53ef\u80fd\u6bd4\u4e0a\u8ff0\u66f4\u52a0\u590d\u6742\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u5171\u4eab\u9875","title":"\u5171\u4eab\u9875","text":"

    \u865a\u62df\u5730\u5740\u4e0e\u7269\u7406\u5730\u5740\u7684\u6620\u5c04\u5e76\u975e\u9700\u8981\u662f\u5355\u5c04\uff0c\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u591a\u4e2a\u9875\u53ef\u4ee5\u5bf9\u5e94\u540c\u4e00\u4e2a\u5e27\uff0c\u8fd9\u5c31\u662f\u5171\u4eab\u9875(shared page)\u3002

    \u5171\u4eab\u9875\u53ef\u4ee5\u7528\u6765\u63d0\u9ad8\u4ee3\u7801\u91cd\u7528\u7387\uff0c\u4f8b\u5982\uff0c\u591a\u4e2a\u8fdb\u7a0b\u53ef\u80fd\u4f1a\u4f7f\u7528\u540c\u4e00\u4e2a\u5e93\uff0c\u90a3\u4e48\u8fd9\u4e2a\u5e93\u5c31\u53ef\u4ee5\u88ab\u5171\u4eab\uff0c\u800c\u4e0d\u9700\u8981\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u5404\u81ea\u5728\u7269\u7406\u5185\u5b58\u4e2d\u51c6\u5907\u4e00\u4efd\u3002\u5171\u4eab\u5e93\u5c31\u901a\u5e38\u662f\u4f7f\u7528\u5171\u4eab\u9875\u6765\u5b9e\u73b0\u76847,8\u3002

    \u518d\u6bd4\u5982\uff0c\u6211\u4eec\u5728\u8fdb\u7a0b\u7ba1\u7406#\u8fdb\u7a0b\u95f4\u901a\u4fe1\u4e2d\u63d0\u5230\u8fc7\u901a\u8fc7\u5171\u4eab\u5185\u5b58\u6765\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u901a\u4fe1\uff0c\u5728\u67d0\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u5171\u4eab\u5185\u5b58\u5c31\u662f\u901a\u8fc7\u5171\u4eab\u9875\u6765\u5b9e\u73b0\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u9875\u8868\u8bbe\u8ba1\u6539\u8fdb","title":"\u9875\u8868\u8bbe\u8ba1\u6539\u8fdb","text":"

    \u6211\u4eec\u56de\u987e\u4e00\u4e0b\u76ee\u524d\u7684\u9875\u8868\u7684\u8bbe\u8ba1\uff1a\u73b0\u5728\u7684\u9875\u8868\u662f\u4ee5\u9875\u53f7\u4e3a\u7d22\u5f15\u3001\u5e27\u53f7\u4e3a\u503c\u7684\u4e00\u7ef4\u6570\u7ec4\uff0c\u800c\u7531\u4e8e\u6211\u4eec\u76f4\u63a5\u5c06\u9875\u8868\u5b58\u5728\u7269\u7406\u5185\u5b58\u4e2d\uff08\u5426\u5219\u4f1a\u9ec4\u6cb9\u732b3\uff01\uff09\uff0c\u6240\u4ee5\u6211\u4eec\u5176\u5b9e\u9700\u8981\u4e00\u5757\u5b8c\u6574\u7684\u8fde\u7eed\u7269\u7406\u5185\u5b58\u6765\u5b58\u50a8\u6574\u4e2a\u9875\u8868\u2014\u2014\u6bcf\u4e00\u4e2a\u865a\u62df\u5730\u5740\u6211\u4eec\u90fd\u5f97\u5b58\u3002

    \u5047\u8bbe\u6211\u4eec\u7684\u865a\u62df\u5730\u5740\u4e00\u5171 32 \u4f4d\uff0c\u800c page size \u4e3a 4 KB = 212 B\uff0c\u5373 offset \u5bf9\u5e94\u865a\u62df\u5730\u5740 32 \u4f4d\u4e2d\u7684\u540e 12 \u4f4d\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u9700\u8981\u8fde\u7eed\u7684 220 \u4e2a\u8868\u9879\uff08\u5bf9\u5e94\u4e00\u5171 220 \u4e2a\u865a\u62df\u5730\u5740\uff09\u6765\u5b58\u50a8\u9875\u5e27\u7684\u6620\u5c04\u5173\u7cfb\u3002\u5047\u8bbe\u4e00\u4e2a\u8868\u9879 4 Bytes\uff0c\u90a3\u4e48\u5149\u4e00\u4e2a\u9875\u8868\u5c31\u8981\u5360\u636e\u6211\u4eec 4 MB \u7684\u7269\u7406\u5185\u5b58\u2014\u2014\u800c\u4e14\u662f\u8fde\u7eed\u7684\u7269\u7406\u5185\u5b58\u3002\u8fd9\u5b9e\u5728\u662f\u592a\u5938\u5f20\u4e86\uff01

    \u73b0\u5728\u6211\u4eec\u8981\u51b7\u9759\u5730\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff01\u73b0\u5728\u95ee\u9898\u6709\u4e24\u4e2a\uff1a\u24f5 \u9875\u8868\u5b9e\u5728\u592a\u5927\u4e86\uff0c\u24f6 \u5b83\u4e0d\u4ec5\u5927\uff0c\u800c\u4e14\u5fc5\u987b\u662f\u8fde\u7eed\u7684\u3002\u5176\u4e2d\u7b2c\u4e8c\u70b9\u662f\u6700\u5173\u952e\u7684\uff0c\u5728\u672c\u8282\u4e4b\u540e\u7684\u5185\u5bb9\u4e2d\uff0c\u6211\u5c06\u79f0\u4e4b\u4e3a\u201c\u8fde\u7eed\u5185\u5b58\u7ea6\u675f\u95ee\u9898\u201d\uff08\u975e\u6b63\u5f0f\u8868\u8ff0\uff09\u3002

    \u6211\u4eec\u4ecb\u7ecd\u4e09\u4e2a\u65b9\u6cd5\u6765\u89e3\u51b3\u4e0a\u8ff0\u95ee\u9898\uff1a\u5206\u5c42\u9875\u8868\u3001\u54c8\u5e0c\u9875\u8868\u548c\u53cd\u8f6c\u9875\u8868\u3002

    \u5206\u5c42\u9875\u8868

    \u540c\u6837\uff0c\u6211\u4eec\u9996\u5148\u6765\u601d\u8003\u4e3a\u4ec0\u4e48\u8fd9\u91cc\u9700\u8981\u7684\u5185\u5b58\u662f\u8fde\u7eed\u7684\u2014\u2014\u4f5c\u4e3a\u4e00\u4e2a\u4e00\u7ef4\u6570\u5b57\uff0c\u53ea\u6709\u5185\u5b58\u8fde\u7eed\u624d\u80fd\u4fdd\u8bc1 random access\u3002\u7c7b\u4f3c\u7684\u95ee\u9898\u6211\u4eec\u5728\u63a2\u7d22\u8fde\u7eed\u5206\u914d\u7684\u8fc7\u7a0b\u4e2d\u5df2\u7ecf\u9047\u5230\u8fc7\u4e86\uff1a\u5728\u7269\u7406\u5730\u5740\u7a7a\u95f4\u4e2d\u5bfb\u6c42\u8fde\u7eed\uff0c\u4e00\u4e2a\u91cd\u8981\u5c31\u662f\u56e0\u4e3a\u53ea\u6709\u7269\u7406\u5730\u5740\u7684\u8bbe\u8ba1\u4e2d\uff0c\u53ea\u6709\u4fdd\u8bc1\u8fde\u7eed\u624d\u80fd\u4fdd\u8bc1\u80fd random access \u5730\u53bb\u8bbf\u95ee\u5730\u5740\uff0c\u800c\u73b0\u5728\u8fd9\u4e2a\u4e00\u7ef4\u6570\u7ec4\u592a\u5927\u5757\u4e86\uff0c\u6211\u4eec\u5e0c\u671b\u5b83\u788e\u4e00\u70b9\uff1b\u800c\u6211\u4eec\u901a\u8fc7\u4fdd\u8bc1\u5206\u5757\u5730\u8fde\u7eed\uff08\u5e27\u5185\u7269\u7406\u5730\u5740\u7684\u8fde\u7eed\uff09\uff0c\u518d\u4fdd\u8bc1\u5757\u7d22\u5f15\u7684\u8fde\u7eed\uff08\u865a\u62df\u5730\u5740\u7a7a\u95f4\u4e2d\u9875\u53f7\u7684\u8fde\u7eed\uff09\u7684\u65b9\u5f0f\u89e3\u51b3\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c31\u597d\u50cf\u628a\u4e00\u4e2a\u4e00\u7ef4\u6570\u7ec4\u53d8\u6210\u4e86\u4e00\u4e2a\u6307\u9488\u6570\u7ec4\uff0c\u6216\u8005\u8bf4\u903b\u8f91\u4e0a\u7684\u4e8c\u7ef4\u6570\u7ec4\u3002

    \u73b0\u5728\u6211\u4eec\u9047\u5230\u7684\u95ee\u9898\u5b9e\u9645\u4e0a\u5c31\u662f\u8fd9\u4e2a\u201c\u6307\u9488\u6570\u7ec4\u201d\u4e5f\u592a\u5927\u5757\u4e86\uff0c\u5e0c\u671b\u5b83\u80fd\u788e\u4e00\u70b9\uff0c\u6240\u4ee5\u89e3\u51b3\u65b9\u6cd5\u5df2\u7ecf\u547c\u4e4b\u6b32\u51fa\u4e86\u2014\u2014\u5c06\u8fd9\u4e2a\u6307\u9488\u6570\u7ec4\u518d\u8fdb\u884c\u62c6\u5206\uff0c\u53d8\u6210\u4e00\u4e2a\u7ef4\u62a4\u6307\u9488\u6570\u7ec4\u6307\u9488\u7684\u6570\u7ec4\uff0c\u6216\u8005\u8bf4\u903b\u8f91\u4e0a\u7684\u4e09\u7ef4\u6570\u7ec4\uff1a

    page number     page offset\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 p1    \u2502 p2    \u2502 d            \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n

    \u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b83\u770b\u4f5c\u5728\u539f\u5148\u7ef4\u62a4 p2 -> d \u7684 inner \u9875\u8868\u5916\uff0c\u518d\u7ef4\u62a4\u4e00\u4e2a p1 -> inner \u7684 outer \u9875\u8868\u3002\u901a\u8fc7\u8fd9\u79cd\u65b9\u5f0f\uff0c\u6211\u4eec\u51cf\u5c11\u4e86\u5355\u4e2a\u9875\u8868\u6240\u9700\u8981\u5305\u542b\u7684\u8868\u9879\u6570\uff08\u539f\u5148\u4e00\u4e2a\u9875\u8868\u9700\u8981\u6709 2p \u4e2a\u8868\u9879\uff0c\u73b0\u5728\u53ea\u9700\u8981\u6709 2p1 \u6216 2 p2 \u4e2a\u5373\u53ef\uff09\uff1b\u9664\u6b64\u4e4b\u5916\uff0c\u867d\u7136\u770b\u8d77\u6765\u8868\u603b\u91cf\u589e\u52a0\u4e86\uff08\u73b0\u5728\u4e00\u5171\u9700\u8981 2p1+p2 + 2p1 \u4e2a\u8868\uff0c\u539f\u6765\u53ea\u9700\u8981 2p1+p2 \u4e2a\u8868\uff09\uff0c\u4f46\u662f \u24f5 \u4e00\u65b9\u9762\u8fd9\u4e2a\u589e\u52a0\u662f\u53ef\u4ee5\u5ffd\u7565\u7684\u76f8\u5bf9\u5c0f\u91cf\uff0c\u24f6 \u53e6\u5916\u4e00\u65b9\u9762\uff0c\u5b9e\u9645\u4e0a\u6211\u4eec\u5e76\u4e0d\u603b\u662f\u9700\u8981\u521b\u5efa\u6240\u6709\u7684\u8868\u2014\u2014\u5047\u8bbe\u67d0\u4e2a inner \u8868\u91cc\u7684\u865a\u62df\u5185\u5730\u5740\u6211\u4eec\u90fd\u7528\u4e0d\u5230\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u4e0d\u9700\u8981\u521b\u5efa\u8fd9\u4e2a inner \u8868\uff0c\u53ea\u9700\u8981\u5728 outer \u8868\u4e2d\u6807\u8bb0\u8fd9\u4e2a inner \u8868\u662f invalid \u5c31\u53ef\u4ee5\u4e86\u3002

    \u901a\u8fc7\u8fd9\u79cd\u8bbe\u8ba1\uff0c\u6211\u4eec\u6210\u529f\u5730\u8282\u7701\u4e86\u7ef4\u62a4\u9875\u8868\u6240\u9700\u8981\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u540c\u65f6\u51cf\u5c0f\u4e86\u8fde\u7eed\u5185\u5b58\u5bf9\u9875\u8868\u7ef4\u62a4\u7684\u7ea6\u675f\u3002

    \u5982\u4e0a\u8fd9\u79cd\u8bbe\u8ba1\uff0c\u5c31\u662f\u5206\u5c42\u5206\u9875(hierarchical paging)\uff0c\u800c\u4e0a\u9762\u8fd9\u4e2a\u5c31\u662f\u4e8c\u7ea7\u9875\u8868(two-level page table)\u8bbe\u8ba1\u3002

    \u663e\u7136\uff0c\u6709\u4e8c\u5c31\u53ef\u4ee5\u6709\u4e09\uff0c\u6709\u4e09\u5c31\u53ef\u4ee5\u6709\u56db\uff0c\u5177\u4f53\u4f7f\u7528\u54ea\u79cd\uff0c\u5e94\u5f53\u79c9\u6301\u5177\u4f53\u95ee\u9898\u5177\u4f53\u5206\u6790\u7684\u539f\u5219\u3002

    Risc-V

    \u6709\u5174\u8da3\u7684\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003 xg \u7684\u8fd9\u7bc7\u300aRISC-V \u9875\u8868\u76f8\u5173\u300b\u7b14\u8bb0\uff0c\u6765\u4e86\u89e3 Risc-V \u4e2d\u7684\u5206\u9875\u8bbe\u8ba1\uff0c\u5199\u5f97\u5f88\u6e05\u695a\uff0c\u63a8\u8350\u9605\u8bfb\u3002

    \u540c\u65f6\uff0c\u5b9e\u9a8c\u4e09\u6307\u5bfc\u624b\u518c\u4e5f\u63d0\u4f9b\u4e86\u5173\u4e8e Risc-V Sv39 \u7684\u4e00\u4e9b\u4ecb\u7ecd\u3002

    \u54c8\u5e0c\u9875\u8868

    \u7b80\u5355\u56de\u987e\u4e00\u4e0b\u6211\u4eec\u9047\u5230\u7684\u95ee\u9898\uff1a\u9875\u8868\u592a\u5927\uff0c\u800c\u4e14\u5fc5\u987b\u662f\u8fde\u7eed\u7684\u3002\u4f46\u662f\u5b9e\u9645\u4e0a\u6211\u4eec\u4f7f\u7528\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u4ece\u865a\u62df\u5730\u5740\u6765\u770b\u662f\u96c6\u4e2d\u7684\uff0c\u4ece\u7269\u7406\u5730\u5740\u6765\u770b\u662f\u7a00\u758f\u7684\uff0c\u53cd\u6b63\u9875\u8868\u4e2d\u6709\u5927\u91cf\u8868\u9879\u662f invalid \u7684\uff0c\u6240\u4ee5\u60f3\u529e\u6cd5\u4e0d\u5b58\u8fd9\u4e9b\u7528\u4e0d\u5230\u7684\u8868\u9879\uff0c\u4e5f\u662f\u4e00\u79cd\u89e3\u51b3\u601d\u8def\u3002

    Links

    \u54c8\u5e0c\u9875\u8868(hashed page table)\u7ef4\u62a4\u4e86\u4e00\u5f20\u54c8\u5e0c\u8868\uff0c\u4ee5\u9875\u53f7\u7684\u54c8\u5e0c\u4e3a\u7d22\u5f15\uff0c\u7ef4\u62a4\u4e86\u4e00\u4e2a\u94fe\u8868\uff0c\u6bcf\u4e00\u4e2a\u94fe\u8868\u9879\u5305\u542b\u9875\u53f7\u3001\u5e27\u53f7\u3001\u548c\u94fe\u8868 next \u6307\u9488\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u9875\u53f7\u5230\u5e27\u53f7\u7684\u6620\u5c04\u3002\u6b64\u65f6\uff0c\u4e00\u65b9\u9762\u6211\u4eec\u6ca1\u5fc5\u8981\u518d\u7ef4\u62a4\u4e00\u4e2a\u5927\u82e5\u865a\u62df\u5730\u5740\u603b\u6570\u7684\u8868\uff0c\u53e6\u4e00\u65b9\u9762\u7531\u4e8e\u5f15\u5165\u94fe\u8868\uff0c\u5927\u91cf\u7684\u6307\u9488\u64cd\u4f5c\u5bfc\u81f4\u5bf9\u5730\u5740\u8fde\u7eed\u6027\u7684\u8981\u6c42\u964d\u4f4e\uff0c\u4e5f\u80fd\u53d8\u76f8\u5730\u51cf\u8f7b\u8fde\u7eed\u5185\u5b58\u7ea6\u675f\u3002

    clustered page tables

    A variation of this scheme that is useful for 64-bit address spaces has been proposed. This variation uses clustered page tables, which are similar to hashed page tables except that each entry in the hash table refers to several pages (such as 16) rather than a single page.

    Therefore, a single page-table entry can store the mappings for multiple physical-page frames. Clustered page tables are particularly useful for sparse address spaces, where memory references are noncontiguous and scattered throughout the address space.

    \u53cd\u5f0f\u9875\u8868

    \u6211\u4eec\u4e4b\u524d\u7684\u9875\u8868\u901a\u8fc7\u7ef4\u62a4\u865a\u62df\u5730\u5740\u7684\u6709\u5e8f\u6765\u5b9e\u73b0\u5bf9\u9875\u53f7\u7684 random access\uff0c\u4f46\u662f\u4ee3\u4ef7\u662f\u9700\u8981\u7ef4\u62a4\u5927\u91cf\u8fde\u7eed\u865a\u62df\u5730\u5740\u3002\u53cd\u5f0f\u9875\u8868(inverted page table)\u5219\u76f4\u63a5\u5927\u9006\u4e0d\u9053\u5730\u4fee\u6539\u4e86\u6574\u5957\u601d\u8def\u2014\u2014\u4ee5\u7269\u7406\u5730\u5740\u4e3a\u7d22\u5f15\u7ef4\u62a4\u6620\u5c04\u5173\u7cfb\u3002

    \u540c\u65f6\uff0c\u5728\u8fd9\u79cd\u8bbe\u8ba1\u4e0b\uff0c\u6574\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u53ea\u7ef4\u62a4\u4e00\u5f20\u53cd\u8f6c\u9875\u8868\u3002\u7531\u4e8e\u4e0d\u9700\u8981\u6bcf\u4e2a\u8fdb\u7a0b\u90fd\u5b58\u50a8\u4e00\u5f20\u9875\u8868\uff0c\u6574\u4f53\u53ea\u5b58\u50a8\u7269\u7406\u5730\u5740\u6570\u91cf\u4e2a\u8868\u9879\uff0c\u6240\u4ee5\u76f8\u5bf9\u6765\u8bf4\u8282\u7701\u4e86\u5185\u5b58\u7a7a\u95f4\u3002

    \u4f46\u662f\u663e\u7136\uff0c\u8fd9\u6837\u505a\u6211\u4eec\u5c31\u6ca1\u6cd5\u81ea\u7136\u5730\u652f\u6301\u5171\u4eab\u9875\u4e864\uff0c\u56e0\u4e3a\u7d22\u5f15\u5e94\u5f53\u662f unique \u7684\u3002\u4e0d\u4ec5\u5982\u6b64\uff0c\u7531\u4e8e\u6211\u4eec\u53ea\u505a\u865a\u62df\u5730\u5740 -> \u7269\u7406\u5730\u5740\u7684\u67e5\u8be2\uff0c\u6240\u4ee5\u5728\u8fd9\u79cd\u7ed3\u6784\u4e0b\u6211\u4eec\u53ea\u80fd\u904d\u5386\u6574\u4e2a\u8868\u6765\u627e\u6620\u5c04\u5173\u7cfb\u3002\u8bf8\u5982\u6b64\u7c7b\u8fd8\u6709\u4e0d\u5c11\u9650\u5236\u3002

    \u603b\u800c\u8a00\u4e4b\uff0c\u6211\u89c9\u5f97\u8fd9\u4e2a\u65b9\u6cd5\u5f88\u81ed\u3002

    \u5176\u5b83

    \u53ef\u80fd\u8fd8\u4f1a\u6d89\u53ca\u4e00\u4e9b\u6bb5\u5f0f\u8bbe\u8ba1\u4ee5\u53ca\u76f8\u5173\u8bbe\u8ba1\uff0c\u4f46\u662f\u5e76\u4e0d\u4e3b\u6d41\uff0c\u4f46\u8003\u8bd5\u53ef\u80fd\u4f1a\u8003\uff0c\u5927\u5bb6\u53ef\u4ee5\u9009\u62e9\u6027\u53bb\u4e86\u89e3\u4e00\u4e0b\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#\u4ea4\u6362\u6280\u672f","title":"\u4ea4\u6362\u6280\u672f","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u53ea\u6709\u5728\u5185\u5b58\u4e2d\u7684\u6307\u4ee4(instructions)\u624d\u80fd\u88ab CPU \u6267\u884c\uff0c\u56e0\u800c\u5185\u5b58\u5927\u5c0f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u9650\u5236\u4e86\u591a\u9053\u7a0b\u5ea6(degree of multiprogramming)\u3002\u4f46\u662f\uff0c\u5927\u90e8\u5206\u5185\u5bb9\u5e76\u4e0d\u9700\u8981\u5168\u7a0b\u5f85\u5728\u5185\u5b58\u4e2d6\uff0c\u5373\u4e0d\u4f1a\u9891\u7e41\u5730\u88ab\u4f7f\u7528\u3002

    \u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u8003\u8651\u5728\u4e0d\u9700\u8981\u7684\u65f6\u5019\u5c06\u90e8\u5206\u5185\u5bb9\u653e\u5728\u540e\u5907\u5b58\u50a8(backing store)\u4e2d\uff0c\u800c\u5728\u9700\u8981\u7684\u65f6\u5019\u518d\u5c06\u5b83\u4eec\u5f04\u5230\u5185\u5b58\u91cc\u2014\u2014\u8fd9\u5c31\u662f\u4ea4\u6362(swap)\u6280\u672f\u3002\u5728\u5e94\u7528\u4ea4\u6362\u6280\u672f\u540e\uff0c\u90a3\u4e9b\u5b9e\u9645\u653e\u5728\u540e\u5907\u5b58\u50a8\u91cc\u7684 instructions\uff0c\u53ef\u4ee5\u201c\u5047\u88c5\u4e5f\u5728\u5185\u5b58\u4e2d\u201d\uff0c\u5373 high level \u7684\u770b\uff0c\u6211\u4eec\u5e76\u4e0d\u77e5\u9053\u5b83\u5230\u5e95\u662f\u653e\u5728\u5185\u5b58\u8fd8\u662f\u540e\u5907\u5b58\u50a8\u91cc\uff0c\u4f46\u662f\u4fdd\u8bc1\u5f53 CPU \u9700\u8981\u8bbf\u95ee\u8fd9\u4e00\u5757\u5185\u5bb9\u65f6\uff0c\u8fd9\u4e9b\u5185\u5bb9\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\u3002

    \u5728\u8fd9\u91cc\u6211\u4eec\u53ea\u7b80\u5355\u4ecb\u7ecd\u4e00\u4e0b\u4ea4\u6362\u7684\u601d\u60f3\uff0c\u800c\u5177\u4f53\u7684\u7ec6\u8282\u4e0e\u5b9e\u73b0\uff0c\u5c06\u4f1a\u5728\u4e4b\u540e\u8fde\u540c\u66f4\u660e\u786e\u7684\u5b9a\u4e49\u7ed9\u51fa\u3002

    Standard swapping of two processes using a disk as a backing store.

    \u5728\u6807\u51c6\u7684 swap \u64cd\u4f5c\u4e2d\uff0c\u6211\u4eec\u4ee5\u8fdb\u7a0b\u4e3a\u5355\u4f4d\u8fdb\u884c swap\uff0c\u8fd9\u610f\u5473\u7740\u6211\u4eec\u8981\u628a\u6240\u6709 per-process \u7684\u4e1c\u897f\u90fd\u4e00\u540c swap\uff0c\u76f8\u5f53\u4e8e\u201c\u51bb\u7ed3\u201d\u6574\u4e2a process \u6216\u201c\u89e3\u51bb\u201d\u4e86\u6574\u4e2a process\uff0c\u5c31\u597d\u50cf\u8de8\u5185\u5b58\u548c\u540e\u5907\u5b58\u50a8\u8fdb\u884c context switch\u3002\u53ef\u60f3\u800c\u77e5\uff0c\u8fd9\u4e2a\u5f00\u9500\u662f\u5de8\u5927\u7684\u3002

    \u5982\u4eca\u6211\u4eec\u6709\u5206\u9875\u6280\u672f\uff0c\u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u4ee5\u9875/\u5e27\u4e3a\u5355\u4f4d\u8fdb\u884c swap\uff0c\u53ea\u4e0d\u8fc7\u6211\u4eec\u79f0\u8fd9\u79cd\u4ee5\u9875/\u5e27\u4e3a\u5355\u4f4d\u7684\u4ea4\u6362(swap)\u53eb\u6362\u9875(page)\u3002

    \u663e\u7136\u8fd9\u91cc\u7684 \u201cpage\u201d \u662f\u57fa\u4e8e Definition 2\u3002

    Swapping with paging.

    \u4f18\u52bf

    \u5229\u7528\u9875\u7f6e\u6362\u6280\u672f\u548c\u865a\u62df\u5185\u5b58\u7684\u7ec4\u5408\u62f3\uff0c\u6211\u4eec\u53ef\u4ee5\u8ba9\u8fdb\u7a0b\u6240\u4f7f\u7528\u7684\u5185\u5b58\u7a7a\u95f4\u603b\u548c\u770b\u8d77\u6765\u5927\u4e8e\u786c\u4ef6\u652f\u6301\u7684\u7269\u7406\u5185\u5b58\u7a7a\u95f4\u5927\u5c0f\u4e0a\u9650\uff0c\u6269\u5c55\u62bd\u8c61\u7684\u201c\u5185\u5b58\u201d\u7684\u5bb9\u91cf\u3002

    Diagram showing virtual memory that is larger than physical memory.

    \u5b8f\u89c2\u5730\u6765\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u6293\u4f4f\u4e3b\u8981\u77db\u76fe\uff0c\u53ea\u5c06\u6bcf\u4e2a\u8fdb\u7a0b\u4e2d\u6700\u8feb\u5207\u9700\u8981\u7684\u90a3\u4e9b\u9875\u7559\u5728\u7269\u7406\u5185\u5b58\u4e2d\uff0c\u5bf9\u8fdb\u7a0b\u8fdb\u884c\u9875\u7ea7\u7684\u5185\u5b58\u7ba1\u7406\uff0c\u4e8e\u662f\u5e73\u5747\u6bcf\u4e2a\u8fdb\u7a0b\u9700\u8981\u5728\u7269\u7406\u5185\u5b58\u4e2d\u7684\u6570\u636e\u91cf\u66f4\u5c0f\u3001\u7269\u7406\u5185\u5b58\u4e2d\u53ef\u4ee5\u5b58\u653e\u7684\u201c\u8fdb\u7a0b\u201d\u6570\u91cf\u66f4\u591a\u3001\u591a\u9053\u7a0b\u5ea6(degree of multiprogramming)\u5f97\u4ee5\u63d0\u9ad8\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part1/#swap-\u7a7a\u95f4","title":"swap \u7a7a\u95f4","text":"

    \u8fdb\u884c swap \u9700\u8981\u4ece\u540e\u5907\u5b58\u50a8\u4e2d\u6765\u83b7\u53d6\u8fdb\u7a0b\u5185\u5bb9\u3002\u5728\u540e\u5907\u5b58\u50a8\u4e2d\uff0c\u6709\u4e00\u5757\u4e13\u95e8\u7528\u6765\u505a\u8fd9\u4ef6\u4e8b\u7684\u5730\u65b9\uff0c\u53eb\u4ea4\u6362\u7a7a\u95f4(swap space)\uff0c\u901a\u5e38\u548c swap space \u8fdb\u884c\u4ea4\u6362\u4f1a\u66f4\u5feb\u3002\u4f46\u662f\uff0c\u4ee3\u7801\u5e76\u4e0d\u662f\u4e00\u5f00\u59cb\u5c31\u5728\u4ea4\u6362\u7a7a\u95f4\u7684\uff0c\u6211\u4eec\u9700\u8981\u627e\u4e00\u4e2a\u65f6\u673a\u628a\u4ee3\u7801\u653e\u8fdb\u53bb\u4ee5\u540e\uff0c\u624d\u80fd\u7eb5\u4eab\u4e1d\u6ed1\u3002

    \u4e00\u79cd naive \u7684\u505a\u6cd5\u662f\uff0c\u5728\u8fdb\u7a0b\u521b\u5efa\u7684\u65f6\u5019\u5c31\u628a\u6574\u4e2a\u4ee3\u7801\u955c\u50cf\u653e\u8fdb\u4ea4\u6362\u7a7a\u95f4\uff0c\u8fd9\u4e2a\u505a\u6cd5\u7684\u7f3a\u70b9\u5c31\u662f\u5b83\u7684\u5b9a\u4e49\uff0c\u6211\u4eec\u4f1a\u9700\u8981\u5728\u4e00\u5f00\u59cb\u505a\u4e00\u4e2a\u5927\u89c4\u6a21\u7684\u590d\u5236\uff0c\u8fd9\u4e2a\u505a\u6cd5\u6709\u8bf8\u591a\u663e\u7136\u7684\u5f0a\u7aef\u3002

    \u53e6\u4e00\u79cd\u505a\u6cd5\u662f\uff0c\u5f53\u4e00\u4e2a page \u7b2c\u4e00\u6b21\u88ab\u4f7f\u7528\u7684\u65f6\u5019\uff0c\u5b83\u4ece\u6587\u4ef6\u7cfb\u7edf\u4e2d\u88ab page in\uff1b\u800c\u5728\u88ab replace \u800c page out \u7684\u65f6\u5019\uff0c\u5c06\u5b83\u5199\u5165 swap space\u3002\u8fd9\u6837\uff0c\u4e0b\u6b21\u9700\u8981\u8fd9\u4e2a page \u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u4ece swap space \u91cc page in\u3002

    \u8fd8\u6709\u4e00\u79cd\u7b56\u7565\u662f\uff0c\u5f53\u64cd\u4f5c\u7cfb\u7edf\u9700\u8981\u67d0\u4e2a\u9875\u9762\u65f6\uff0c\u5b83\u4f1a\u76f4\u63a5\u4ece\u6587\u4ef6\u7cfb\u7edf\u4e2d\u5c06\u8fd9\u4e9b\u9875\u9762\u52a0\u8f7d\u5230\u5185\u5b58\u4e2d\u3002\u8fd9\u4e9b\u9875\u9762\u5728\u5185\u5b58\u4e2d\u7684\u526f\u672c\u662f\u4e0d\u4f1a\u88ab\u4fee\u6539\u7684\uff0c\u56e0\u6b64\u5f53\u8fd9\u4e9b\u5185\u5b58\u9700\u8981\u88ab\u66ff\u6362\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u76f4\u63a5\u88ab\u8986\u76d6\u3002\uff08\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6587\u4ef6\u7cfb\u7edf\u672c\u8eab\u5c31\u50cf\u4e00\u4e2a\u540e\u5907\u5b58\u50a8\uff09\u4f46\u662f\uff0c\u5bf9\u4e8e\u90a3\u4e9b\u4e0d\u4e0e\u6587\u4ef6\u76f8\u5173\u8054\u7684\u9875\u9762\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u533f\u540d\u5185\u5b58(anonymous memory)\uff0c\u4f8b\u5982\u8fdb\u7a0b\u7684\u6808\u548c\u5806\uff0c\u4ecd\u7136\u9700\u8981\u4f7f\u7528\u4ea4\u6362\u7a7a\u95f4\u3002

    \u8fd9\u4e00\u90e8\u5206\u7684\u5185\u5bb9\u5199\u7684\u6bd4\u8f83\u7b80\u7565\uff0c\u5bf9\u5e94\u8bfe\u672c 10.2.3 \u7684\u540e\u534a\u90e8\u5206\u3002

    \u4f46\u662f\u65e0\u8bba\u5982\u4f55\uff0c\u786c\u76d8\u7684\u901f\u5ea6\u8fd8\u662f\u4e0d\u5982\u5185\u5b58\uff0c\u6240\u4ee5\u5728\u5185\u5b58\u8db3\u591f\u7684\u60c5\u51b5\u4e0b\u6211\u4eec\u4e00\u822c\u4e0d\u4f7f\u7528 swap\u3002

    \u5728\u4e0b\u4e00\u8282\uff0c\u6211\u4eec\u5f15\u5165\u4e00\u5957\u66f4\u5b8c\u5584\u7684\u865a\u62df\u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\uff1ademand paging\u3002

    1. Translation lookaside buffer | Wikipedia \u21a9

    2. Cache replacement policies | Wikipedia \u21a9

    3. \u51fa\u81ea Buttered cat paradox | Wikipedia\uff0c\u6211\u5728\u8fd9\u91cc\u8868\u793a\u6b7b\u5faa\u73af\u3002\u00a0\u21a9\u21a9

    4. how does an inverted page table deal with multiple process accessing the same frame | Stack Overflow \u21a9

    5. What is the difference between executable and relocatable in elf format? | Stack Overflow \u21a9

    6. \u4f8b\u5982 \u24f5 \u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\uff0c\u5f02\u5e38\u7c7b\u578b\u53ef\u80fd\u5f88\u591a\uff0c\u5bf9\u5e94\u7684\u5904\u7406\u65b9\u6848\u53ef\u80fd\u4e5f\u4f1a\u6709\u5f88\u591a\uff0c\u4f46\u5747\u644a\u4e0b\u6765\u6bcf\u4e00\u4e2a\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\u7684\u4f7f\u7528\u9891\u7387\u90fd\u4e0d\u4f1a\u5f88\u9ad8\uff1b\u24f6 \u6570\u7ec4\u5217\u8868\u7b49\u76f8\u5bf9\u4e0d\u90a3\u4e48\u667a\u80fd\u7684\u6570\u636e\u7ed3\u6784\u5728\u5b9a\u4e49\u58f0\u660e\u7684\u65f6\u5019\u53ef\u80fd\u5f00\u4e86\u4e00\u5927\u5757\u5185\u5b58\uff0c\u57fa\u672c\u90fd\u662f\u4e3a\u4e86 bound \u4f4f\u53ef\u80fd\u9700\u8981\u7684\u5185\u5b58\u91cf\u7684\u4e0a\u754c\uff0c\u4f46\u662f\u53ef\u80fd\u5b9e\u9645\u4e0a\u7ecf\u5e38\u78b0\u4e0d\u5230\u4e0a\u754c\uff0c\u4f8b\u5982\u6211\u7533\u8bf7\u4e86\u4e00\u4e2a 1024 \u957f\u7684 int \u6570\u7ec4\uff0c\u4f46\u662f\u6211\u53ef\u80fd\u4e00\u822c\u53ea\u4f1a\u7528\u5230\u5176\u4e2d\u7684\u524d 128 \u4e2a\u5143\u7d20\uff1b\u24f7 \u4e00\u4e9b\u53ef\u80fd\u5355\u7eaf\u4e0d\u600e\u4e48\u5e38\u7528\u7684\u529f\u80fd\uff0c\u9053\u7406\u548c\u7b2c\u4e00\u70b9\u662f\u7c7b\u4f3c\u7684\u3002\u00a0\u21a9

    7. Shared Memory \"Segment\" in Operating System | Stack Overflow \u21a9

    8. Where is linux shared memory actually located? | Stack Overflow \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/","title":"U3 Part 2: \u5185\u5b58\u7ba1\u7406 | Memory Management","text":"

    \u7ea6 7911 \u4e2a\u5b57 21 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 40 \u5206\u949f

    \u5bfc\u8bfb

    \u4e0a\u4e00\u8282\u6211\u4eec\u4ecb\u7ecd\u4e86\u5185\u5b58\u7684\u4e00\u4e9b\u57fa\u672c\u8bbe\u8ba1\uff0c\u5e76\u5728\u6700\u540e\u63d0\u51fa\u4e86 swap\uff0c\u8fd9\u4e00\u8282\u6211\u4eec\u5c06\u5229\u7528 swap \u7684\u601d\u60f3\uff0c\u63d0\u51fa\u4e00\u5957\u66f4\u5b8c\u5584\u7684\u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\uff1ademand paging\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u6309\u9700\u6362\u9875\u7cfb\u7edf\u6982\u8ff0","title":"\u6309\u9700\u6362\u9875\u7cfb\u7edf\u6982\u8ff0","text":"

    \u6309\u9700\u6362\u9875(demand paging)Wiki\u548c\u4ea4\u6362\u6280\u672f\u4e2d\u7684\u9875\u7f6e\u6362\u5f88\u7c7b\u4f3c\uff0c\u6307\u53ea\u628a\u88ab\u9700\u8981\u7684\u9875\u8f7d\u5165\u5185\u5b58\uff0c\u662f\u4e00\u79cd\u5185\u5b58\u7ba1\u7406\u7cfb\u7edf\u3002

    pure demand paging

    \u5982\u679c\u6fc0\u8fdb\u4e00\u70b9\uff0c\u5982\u679c\u5728\u88ab\u9700\u6c42\u4e4b\u524d\u9875\u4e0d\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\uff0c\u53ea\u6709\u5728\u5185\u5b58\u88ab\u9700\u6c42\u540e\u624d\u4f1a\u88ab\u8f7d\u5165\u5185\u5b58\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u7eaf\u6309\u9700\u6362\u9875(pure demand paging)\u3002

    This scheme is pure demand paging: never bring a page into memory until it is required.

    pre-paging

    Pure demand paging \u7684\u7f3a\u70b9\u5c31\u662f\u5728\u7a0b\u5e8f\u5f00\u59cb\u7684\u65f6\u5019\u4f1a\u4ea7\u751f\u5927\u91cf\u7684 page fault\u3002\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e2a\u529e\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u4e00\u5f00\u59cb\u5c06\u9700\u8981\u7684\u9875\u4e00\u8d77\u5b58\u5165\u5185\u5b58\u3002\u8fd9\u79cd\u505a\u6cd5\u53eb\u505a\u9884\u6362\u9875(pre-paging)\u3002

    \u665a\u4e9b\u6211\u4eec\u4ecb\u7ecd\u7684 working set \u7684\u8bbe\u8ba1\u601d\u8def\u53ef\u4ee5\u7528\u4e8e\u5904\u7406 pre-paging\u3002

    \u53ef\u4ee5\u60f3\u8c61\uff0c\u73b0\u5728\u7ed9\u5b9a\u4efb\u610f\u4e00\u4e2a\u865a\u62df\u5730\u5740\uff0c\u6709\u4e09\u79cd\u53ef\u80fd\uff1a

    1. \u8be5\u201c\u5730\u5740\u201d\u5728\u7269\u7406\u5185\u5b58\u4e2d\uff0c\u9875\u8868\u4e2d\u5b58\u5728\u865a\u62df\u5185\u5b58\u5230\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u662f valid \u7684\uff1b
    2. \u8be5\u201c\u5730\u5740\u201d\u5728\u540e\u5907\u5b58\u50a8\u4e2d\uff0c\u9875\u8868\u4e2d\u4e0d\u5b58\u5728\u865a\u62df\u5185\u5b58\u5230\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u662f invalid \u7684\uff1b
    3. \u8be5\u201c\u5730\u5740\u201d\u5e76\u6ca1\u6709\u88ab\u5206\u914d\uff0c\u9875\u8868\u4e2d\u4e0d\u5b58\u5728\u865a\u62df\u5185\u5b58\u5230\u7269\u7406\u5185\u5b58\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u662f invalid \u7684\uff0c\u6216\u6743\u9650\u4e0d\u7b26\uff08\u5982\u8bd5\u56fe\u5199\u5165\u4e00\u4e2a\u53ea\u8bfb\u9875\uff09\uff1b

    \u4e0e\u5f15\u5165\u4ea4\u6362\u6280\u672f\u4e4b\u524d\u7684\u9875\u8868\u8bbe\u8ba1\u76f8\u6bd4\uff0c\u591a\u51fa\u6765\u7684\u5c31\u662f\u60c5\u51b5 2.\u3002\u5982\u679c\u7cfb\u7edf\u8bbf\u95ee\u4e86\u4e00\u4e2a\u5728\u9875\u8868\u4e2d\u662f invalid \u7684\u9875\uff0c\u5c31\u4f1a\u751f\u6210\u5f02\u5e38\uff0c\u6211\u4eec\u79f0\u8fd9\u79cd\u60c5\u51b5\u4e3a\u7f3a\u9875(page fault)\u3002

    major & minor page fault

    \u5b9e\u9645\u4e0a\uff0c\u60c5\u51b5 2. \u8fd8\u53ef\u4ee5\u7ec6\u5206\u4e3a\u4e24\u79cd\uff0c\u4e00\u79cd\u662f major/hard page fault\uff0c\u4e00\u79cd\u662f minor/soft page fault\u3002

    Major page fault \u6307\u7684\u662f\u7f3a\u4e86\u7684\u9875\u4e0d\u5728\u5185\u5b58\u4e2d\u7684\u60c5\u51b5\uff1b\u800c minor page fault \u6307\u7684\u662f\u7f3a\u4e86\u7684\u9875\u5728\u5185\u5b58\u4e2d\u5b58\u5728\uff0c\u53ea\u4e0d\u8fc7\u6ca1\u5728\u5f53\u524d\u9875\u8868\u4e2d\u5efa\u7acb\u6620\u5c04\u3002

    \u8fd9\u91cc\u7a0d\u5fae\u7ec6\u8bf4\u4e00\u4e0b minor page fault\uff0c\u51fa\u73b0 minor page fault \u6709\u4e24\u79cd\u53ef\u80fd\uff1a

    1. \u8fdb\u7a0b\u53ef\u80fd\u9700\u8981\u5f15\u7528\u4e00\u4e2a\u5171\u4eab\u5e93\u7684 page\uff0c\u800c\u8fd9\u4e2a\u5171\u4eab\u5e93\u7684 page \u5df2\u7ecf\u5728\u5185\u5b58\u4e2d\uff0c\u6211\u4eec\u53ea\u9700\u8981\u66f4\u65b0\u4e00\u4e0b\u9875\u8868\u628a\u5b83\u94fe\u4e0a\u53bb\u5c31\u884c\u4e86\uff1b
    2. \u8fdb\u7a0b\u53ef\u80fd\u9700\u8981\u5f15\u7528\u4e00\u4e2a\u4e4b\u524d\u88ab\u91ca\u653e\u4e86\u7684 page\uff0c\u800c\u90a3\u4e2a\u88ab\u91ca\u653e\u7684 page \u8fd8\u6ca1\u6709\u88ab flush \u6216\u5206\u914d\u7ed9\u522b\u7684\u8fdb\u7a0b\uff0c\u6b64\u65f6\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u8fd9\u4e2a page\uff08\u6361\u5783\u573e\uff01\u4e94\u79d2\u539f\u5219\uff1f\uff09\uff1b

    \u533a\u522b\u4e8e\u4e4b\u524d\u7684\u9875\u8868\u8bbe\u8ba1\u2014\u2014\u8bbf\u95ee invalid \u7684\u8868\u9879\u662f\u4e00\u79cd\u9884\u671f\u5916\u884c\u4e3a\uff0c\u73b0\u5728\u4ea7\u751f\u7f3a\u9875\u53cd\u800c\u66f4\u591a\u662f\u4e00\u79cd\u9884\u671f\u5185\u7684\u884c\u4e3a\u2014\u2014\u7cfb\u7edf\u5bf9\u67d0\u4e2a\u88ab page out \u4e86\u7684\u9875\u4ea7\u751f\u4e86\u201c\u9700\u6c42\u201d\u3002\u5f53\u7136\uff0c\u60c5\u51b5 3. \u8fd9\u79cd\u975e\u6cd5\u64cd\u4f5c\u4e5f\u4f1a\u5f15\u8d77\u5f02\u5e38\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u5728\u4e4b\u540e\u7684\u5f02\u5e38\u5904\u7406\u8fc7\u7a0b\u4e2d\u5bf9\u6b64\u505a\u533a\u5206\u5e76\u5206\u522b\u5904\u7406\u3002

    \u8bf4\u5b9e\u8bdd\u5176\u5b9e\u6211\u611f\u89c9\u8fd9\u91cc\u7684\u903b\u8f91\u7a0d\u5fae\u6709\u70b9\u7ed5\uff0c\u53ef\u80fd\u662f\u4e00\u4e9b\u5386\u53f2\u539f\u56e0\u3002

    \u64cd\u4f5c\u7cfb\u7edf\u5c31\u9700\u8981\u53bb\u5904\u7406\u8fd9\u4e2a\u5f02\u5e38\u7684\u5927\u6982\u6d41\u7a0b\u5982\u4e0b\uff1a

    page fault \u5904\u7406\u6d41\u7a0b

    1. \u68c0\u67e5\u4e00\u5f20 PCB \u91cc\u7684\u5185\u90e8\u8868\uff0c\u6765\u533a\u5206\u8fd9\u4e2a\u5730\u5740\u5230\u5e95\u662f\u60c5\u51b5 2. \u8fd8\u662f\u60c5\u51b5 3.\uff1b
      1. \u5982\u679c\u662f\u60c5\u51b5 2.\uff0c\u5219\u7ee7\u7eed\u5982\u4e0b\u64cd\u4f5c\u4ee5\u5c06\u5176 page in\uff1b
      2. \u5982\u679c\u662f\u60c5\u51b5 3.\uff0c\u5219\u7ec8\u6b62\u8fdb\u7a0b\uff1b
    2. \u4ece\u53ef\u7528\u5e27\u5217\u8868\u91cc\u62ff\u51fa frame \u7528\u6765\u5199\u5165\uff1b
      • \u5982\u679c\u53ef\u7528\u5e27\u5217\u8868\u4e3a\u7a7a\uff0c\u5219\u8fdb\u884c\u9875\u7f6e\u6362\uff1b
    3. \u5f00\u59cb\u4ece\u540e\u5907\u5b58\u50a8\u8bfb\u53d6\u5185\u5bb9\uff0c\u5e76\u5199\u5165 frame\uff1b
    4. \u5b8c\u6210\u8bfb\u5199\u540e\uff0c\u66f4\u65b0\u5185\u90e8\u8868\u548c\u9875\u8868\u7b49\u5143\u4fe1\u606f\uff1b
    5. \u91cd\u65b0\u6267\u884c\u5f15\u8d77 page fault \u7684 instruction\uff1b
      • \u8be5\u64cd\u4f5c\u5341\u5206\u5173\u952e\uff0c\u7c7b\u4f3c\u4e8e\u6b7b\u9501\u91cc\u7684\u56de\u6eda\u64cd\u4f5c\uff0c\u652f\u6301\u8fd9\u9879\u64cd\u4f5c\u4e5f\u5177\u6709\u4e00\u5b9a\u7684\u96be\u5ea6\uff0c\u5305\u62ec\u5982\u4f55\u786e\u5207\u5730\u6062\u590d\u56de\u6307\u4ee4\u6267\u884c\u4e4b\u524d\u7684\u72b6\u6001\u3001\u5982\u4f55\u6d88\u9664\u6267\u884c\u4e86\u4e00\u534a\u7684\u6307\u4ee4\u7684\u6548\u679c\u7b49\uff1b

    Steps in handling a page fault.

    \u6211\u4eec\u53ef\u4ee5\u5728 Lab5 \u91cc\u5bf9\u8fd9\u4e00\u7cfb\u5217\u6b65\u9aa4\u6709\u8ddf\u6df1\u523b\u7684\u5f71\u54cd\uff0cLab5 \u4e2d\u7684 vma \u5927\u6982\u5c31\u662f\u8fd9\u91cc\u7684\u201c\u5185\u90e8\u8868\u201d\u3002

    \u6162\uff01

    \u60f3\u8c61\u4e00\u4e0b\uff0c\u6bcf\u5f53\u53d1\u751f\u4e00\u6b21 page fault\uff0c\u5e76\u4e14\u6211\u4eec\u5047\u8bbe\u8fd9\u4e9b page faults \u90fd\u5c5e\u4e8e\u60c5\u51b5 2.\uff0c\u90a3\u4e48\u5b83\u53ef\u80fd\u4f1a\u7ecf\u5386\u8fd9\u4e9b\u8fc7\u7a0b\uff1a

    1. \u4ea7\u751f\u5f02\u5e38\u540e\uff0c\u8fdb\u884c\u4e00\u6b21 context switch \u540e\u8fdb\u5165\u5f02\u5e38\u5904\u7406\u7a0b\u5e8f\uff1b
      1. \u5904\u7406\u5f02\u5e38\uff0c\u5305\u62ec\u51b3\u5b9a\u5f02\u5e38\u7c7b\u578b\u3001\u5728\u5185\u90e8\u8868\u91cc\u5bfb\u627e\u5730\u5740\u5bf9\u5e94\u4e8e\u540e\u5907\u5b58\u50a8\u4e2d\u7684\u4f55\u5904\uff1b
      2. \u53d1\u8d77\u540e\u5907\u5b58\u50a8 -> \u5185\u5b58\u7684 I/O \u8bf7\u6c42\uff1b
    2. \uff08\u7b49\u5f85\u8fc7\u7a0b\u4e2d CPU \u88ab\u8c03\u5ea6\uff09\uff1b
    3. I/O \u4e2d\u65ad\u4ea7\u751f\uff0c\u6b64\u65f6\u4e5f\u4f1a\u6709\u4e00\u4e2a context switch\uff1b
      • \u5904\u7406\u4e2d\u65ad\uff0c\u5305\u62ec\u51b3\u5b9a\u4e2d\u65ad\u7c7b\u578b\u3001\u66f4\u65b0\u9875\u8868\u548c\u5176\u4ed6\u5185\u90e8\u8868\uff1b
    4. \u7b49\u5f85 CPU \u518d\u6b21\u8c03\u5ea6\u5230\u8be5\u8fdb\u7a0b\uff0c\u663e\u7136\u8fd9\u91cc\u4e5f\u6709\u4e2a context switch\uff1b
      • \u505a\u4e00\u4e9b\u56de\u6eda\u64cd\u4f5c\uff0c\u7136\u540e\u91cd\u65b0\u6267\u884c\u5f15\u8d77 page fault \u7684\u6307\u4ee4\uff1b

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5904\u7406 page fault \u8d85\u6162\u7684\uff01\u56e0\u6b64\uff0c\u6211\u4eec\u5e94\u5f53\u5c3d\u53ef\u80fd\u51cf\u5c11 page fault rate\u3002

    \u601d\u8003\u9898

    \u4e0b\u9762\u4e24\u6bb5\u7a0b\u5e8f\u5c55\u793a\u7684\u4ee3\u7801\u6bb5\u7684\u6267\u884c\u6548\u7387\u662f\u5426\u6709\u533a\u522b\uff1f\u5982\u679c\u4e0e\u533a\u522b\u7684\u8bdd\uff0c\u54ea\u4e2a\u66f4\u5feb\uff1f\u4e3a\u4ec0\u4e48\uff1f

    const int N = PAGE_SIZE;\n\nvoid foo() {\n/* ... */\nfor (int i = 0; i < N; i++) {\nfor (int j = 0; j < N; j++) {\na[i][j] = 0;\n}\n}\n/* ... */\n}\n\nvoid bar() {\n/* ... */\nfor (int j = 0; j < N; j++) {\nfor (int i = 0; i < N; i++) {\na[i][j] = 0;\n}\n}\n/* ... */\n}\n
    \u63d0\u793a

    \u8003\u8651 a[i][j] \u7684\u5143\u7d20\u5728\u5185\u5b58\u4e0a\u7684\u5206\u5e03\uff0c\u8003\u8651 page fault \u7684\u6b21\u6570\uff1afoo() \u4f1a\u4ea7\u751f \\(N\\) \u6b21 page fault\uff0c\u800c bar() \u4f1a\u4ea7\u751f \\(N^2\\) \u6b21 page fault\u3002

    \u505a\u5230\u7c7b\u4f3c\u7684\u9898\u7684\u65f6\u5019\u8981\u6ce8\u610f PAGE_SIZE \u7684\u5927\u5c0f\uff0c\u4ee5\u53ca\u4f7f\u7528\u7684 replacement algorithm\u3002

    \u7a0b\u5e8f\u6267\u884c\u7684\u5c40\u90e8\u6027\u5047\u8bbe\u4e0b\uff0c\u5e94\u5f53\u4e0d\u4f1a\u56e0\u4e3a page fault \u592a\u9891\u7e41\u5bfc\u81f4\u5e26\u6765\u4e0d\u53ef\u63a5\u53d7\u7684\u989d\u5916\u5f00\u9500\u3002\u9700\u8981\u6ce8\u610f\uff0c\u5355\u6761\u6307\u4ee4\u662f\u6709\u53ef\u80fd\u5e26\u6765\u82e5\u5e72\u6b21 page fault \u7684\uff08\u4f8b\u5982\u53ef\u80fd\u5728 instruction fetch \u7684\u65f6\u5019\u4ea7\u751f\u3001\u53ef\u80fd\u5728 operand fetch \u7684\u65f6\u5019\u4ea7\u751f\u7b49\uff09\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u56de\u987e-copy-on-write","title":"\u56de\u987e copy on write","text":"

    \u6211\u4eec\u5728\u8fdb\u7a0b\u7ba1\u7406\u4e00\u8282\u4e2d\u63d0\u51fa\u4e86 copy on write \u6280\u672f\u548c vfork \u6280\u672f\uff0c\u73b0\u5728\u8bfb\u8005\u53ef\u4ee5\u5c1d\u8bd5\u518d\u56de\u987e\u4e00\u4e0b\u8fd9\u4e24\u4e2a\u77e5\u8bc6\u70b9\u4e0e\u672c\u8282\u5185\u5bb9\u7684\u8054\u7cfb\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u53ef\u7528\u5e27\u5217\u8868","title":"\u53ef\u7528\u5e27\u5217\u8868","text":"

    \u5728 demand paging \u7cfb\u7edf\u91cc\uff0c\u9875\u662f\u52a8\u6001\u5730\u88ab\u6620\u5c04\u5230\u5e27\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u53ef\u7528\u5e27\u5217\u8868(free-frame list)\uff0c\u7528\u6765\u8bb0\u5f55\u5f53\u524d\u54ea\u4e9b\u5e27\u662f\u7a7a\u95f2\u7684\u3002

    Example of free-frame list.

    \u5728\u7cfb\u7edf\u542f\u52a8\u540e\uff0c\u6211\u4eec\u9700\u8981\u5c06\u6240\u6709\u53ef\u7528\u7684\u5e27\u90fd\u52a0\u5165\u5230 free-frame list \u4e2d\uff1b\u5f53\u6709\u7528\u6237\u9700\u8981\u7269\u7406\u5185\u5b58\u65f6\u5019\uff0c\u5c31\u4ece free-frame list \u4e2d\u53d6\u51fa\u4e00\u9879\uff0c\u5bf9\u5176\u8fdb\u884c\u64e6\u9664\uff0c\u5373\u88ab\u9700\u6c42\u65f6\u6e05\u96f6(zero-fill-on-deman)\u3002

    \u8003\u8651\u4e3a\u4ec0\u4e48\u8981\u6267\u884c zero-fill-on-deman\uff01

    \u5982\u679c\u8bfb\u8005\u8db3\u591f\u654f\u9510\u5c31\u4f1a\u53d1\u73b0\uff0c\u6211\u4eec\u53ea\u8bf4\u4e86\u600e\u4e48\u53d6\u51fa free-frame\uff0c\u800c\u6ca1\u8bf4 free-frame \u5982\u4f55\u201c\u518d\u751f\u201d\u3002

    \u5f53\u6211\u4eec\u53d1\u73b0 free-frame list \u4e3a\u7a7a\uff0c\u5373\u6ca1\u6709\u7a7a\u95f2\u7684 frame \u65f6\uff0c\u6211\u4eec\u8003\u8651\u5c06\u4e00\u4e9b\u5148\u524d\u5df2\u7ecf\u88ab\u5206\u914d\u7684 frame \u7ed9 page out \u8d70\uff0c\u62ff\u6765\u7ed9\u5f53\u524d\u8fd9\u4e2a\u9875\u7528\u3002\u800c\u5177\u4f53\u5982\u4f55\u9009\u62e9\u6362\u8d70\u54ea\u4e2a frame\uff0c\u6211\u4eec\u4f1a\u5728\u7f6e\u6362\u7b56\u7565\u4e00\u8282\u4e2d\u4ecb\u7ecd\u3002

    free-frame buffer pool

    \u867d\u7136\u6211\u4eec\u8fd8\u6ca1\u4ecb\u7ecd\u7f6e\u6362\u7b56\u7565\uff0c\u4f46\u662f\u60f3\u8c61\u4e00\u4e0b\uff0c\u5982\u679c\u7b49\u5230\u6ca1\u6709 free-frame \u7684\u65f6\u5019\u518d\u53bb\u505a\u7f6e\u6362\uff0c\u90a3\u4e48\u8fdb\u7a0b\u5c31\u9700\u8981\u7b49\u5f85\u7f6e\u6362\u5b8c\u6210\u4ee5\u540e\u518d\u5206\u914d\u3002

    \u6211\u4eec\u53ef\u4ee5\u8003\u8651\u5728\u8fd9\u91cc\u5f15\u5165\u4e00\u4e2a\u62bd\u8c61\u7684 buffer\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u8bc1 free-frame list \u59cb\u7ec8\u6709\u4e00\u5b9a\u6570\u91cf\u7684\u7a7a\u95f2\u5e27\uff0c\u4f8b\u5982 3 \u4e2a\u3002\u8fd9\u6837\u5f53\u8fdb\u7a0b\u6765\u7d22\u53d6 free-frame \u7684\u65f6\u5019\uff0cfree-frame list \u5927\u6982\u7387\u603b\u662f\u80fd\u591f\u76f4\u63a5\u7ed9\u51fa\u4e00\u4e2a free-frame \u7684\uff0c\u800c\u7ed9\u51fa free-frame \u540e\uff0c\u5982\u679c\u53d1\u73b0 free-frame list \u4e2d\u7684\u5269\u4f59\u5e27\u6570\u5c0f\u4e8e 3\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u72ec\u7acb\u5730\u5f00\u59cb\u8fdb\u884c\u7f6e\u6362\uff0c\u800c\u4e0d\u5fc5\u963b\u585e\u8fdb\u7a0b\u3002

    \u53c8\u6216\u8005\uff0c\u6211\u4eec\u4e0d\u4f7f\u7528\u4e00\u4e2a\u786e\u5207\u7684\u754c\uff0c\u800c\u662f\u901a\u8fc7\u4e00\u79cd\u8d1f\u53cd\u9988\u63a7\u5236\uff0c\u7ef4\u62a4\u4e00\u4e2a\u4e0a\u754c\u548c\u4e0b\u754c\uff1a\u5f53 free-frame \u6570\u5c0f\u4e8e\u4e0b\u754c\u65f6\uff0c\u4e00\u7c7b\u53eb\u6536\u5272\u8005(reapers)\u7684\u5185\u6838\u4f8b\u7a0b\u5c31\u5f00\u59cb\u4f7f\u7528 replacement algorithm \u6765 reclaim \u5df2\u7ecf\u88ab\u5206\u914d\u7684 frame\uff0c\u76f4\u5230 free-frame \u7684\u6570\u91cf\u89e6\u78b0\u5230\u4e0a\u754c\u3002

    Reclaiming pages.

    \u8fdb\u4e00\u6b65\u7684\uff0c\u4e07\u4e00\u6b64\u65f6\u51fa\u73b0\u4e86\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u5bfc\u81f4\u5b9e\u9645\u7684 free-frame \u6570\u975e\u5e38\u5c11\uff0c\u8fbe\u5230\u4e86\u4e00\u4e2a\u975e\u5e38\u4f4e\u7684\u754c\uff0c\u6b64\u65f6\u5c31\u51fa\u73b0\u4e86 OOM(out-of-memory)\u3002\u6b64\u65f6\uff0c\u4e00\u4e2a\u53eb\u505a OOM killer \u7684\u4f8b\u7a0b\u5c31\u4f1a\u6740\u6b7b\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u4ee5\u817e\u51fa\u5185\u5b58\u7a7a\u95f4\u3002

    \u5728 Linux \u4e2d\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u4f1a\u6709\u4e00\u4e2a OOM score\uff0cOOM score \u8d8a\u9ad8\u7ea6\u5bb9\u6613\u88ab OOM killer \u76ef\u4e0a\uff0c\u800c OOM score \u4e0e\u8fdb\u7a0b\u4f7f\u7528\u7684\u5185\u5b58\u7684\u767e\u5206\u6bd4\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u5927\u6982\u7684\u611f\u89c9\u5c31\u662f\u8c01\u5185\u5b58\u7528\u7684\u6700\u591a\u5c31\u6740\u8c01\u30021\u5982\u679c\u8bfb\u8005\u5bf9 Linux \u7684 OOM \u673a\u5236\u6709\u5174\u8da3\uff0c\u53ef\u4ee5\u770b\u770b\u89d2\u6ce8 1\u3002

    \u5bfc\u8bfb

    \u51c6\u786e\u6765\u8bf4\u63a5\u4e0b\u6765\u5206\u914d\u7b56\u7565\u548c\u7f6e\u6362\u7b56\u7565\u90fd\u5e94\u5f53\u662f demand paging \u7684\u5b50\u6761\u76ee\uff0c\u4f46\u662f\u56db\u7ea7\u6807\u9898\u5b9e\u5728\u592a\u5c0f\u4e86\uff0c\u6240\u4ee5\u6211\u8bbe\u4e3a\u4e86\u4e09\u7ea7\u6807\u9898\u3002

    \u6211\u4eec\u5df2\u7ecf\u9610\u8ff0\u4e86\u4e00\u4e2a\u6b63\u5728\u8fd0\u884c\u4e2d\u7684 demand paging \u7cfb\u7edf\u662f\u5982\u4f55\u8fd0\u4f5c\u7684\uff0c\u73b0\u5728\u9700\u8981\u8865\u8db3\u4e00\u4e9b\u7ec6\u8282\u3002

    1. \u5206\u914d\u7b56\u7565\uff1a\u521d\u59cb\u5316\u65f6\uff0c\u5982\u4f55\u5206\u914d\u8fdb\u7a0b\u6240\u9700\u8981\u7684 frame\uff1f
    2. \u7f6e\u6362\u7b56\u7565\uff1a\u5f53 free-frame \u4e0d\u8db3\u65f6\uff0c\u5982\u4f55\u8fdb\u884c replacement\uff1f
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u5206\u914d\u7b56\u7565","title":"\u5206\u914d\u7b56\u7565","text":"

    \u5728 pure demand paging \u91cc\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u901a\u8fc7 page fault \u4e0d\u65ad\u201c\u8695\u98df\u201d free-frame\uff0c\u4f46\u5982\u679c\u6211\u4eec\u4e0d\u9002\u7528 pure \u7684 demand paging\uff0c\u90a3\u4e48\u5c31\u9700\u8981\u51b3\u5b9a\u4e00\u5f00\u59cb\u5206\u914d\u591a\u5c11 frames \u7ed9\u4e00\u4e2a process\u3002

    \u9996\u5148\uff0c\u5bf9\u4e8e\u5355\u4e2a\u8fdb\u7a0b\u7684\u5206\u914d\uff0c\u5b58\u5728\u4e00\u4e2a\u8f83\u4e25\u683c\u7684\u4e0a\u4e0b\u754c\uff1a

    lower bound & upper bound

    1. \u5206\u914d\u7ed9\u4e00\u4e2a process \u7684 frames \u6570\u91cf\u4e0d\u80fd\u5927\u4e8e free-frame \u603b\u91cf\uff1b
      • \u5373 the maximum number of frames per process is defined by the amount of available physical memory\uff1b
    2. \u5206\u914d\u7ed9\u4e00\u4e2a process \u7684 frames \u6570\u91cf\u4e0d\u80fd\u5c0f\u4e8e process\u300c\u6267\u884c\u6bcf\u4e00\u6761\u6307\u4ee4\u6240\u9700\u8981\u6d89\u53ca\u7684 frames\u300d\u7684\u6700\u5927\u503c\uff1b
      • \u8fd9\u53e5\u8bdd\u6709\u70b9\u7ed5\uff0c\u7a0d\u5fae\u89e3\u91ca\u4e00\u4e0b\uff1a
        • \u4e00\u4e9b\u6307\u4ee4\u53ef\u80fd\u4f1a\u9700\u8981\u5f15\u7528\u5176\u5b83 frame\uff08\u4f8b\u5982\u7684 load\uff0cmove\uff0c\u4ee5\u53ca\u4f1a\u4ea7\u751f indirect references \u7684\u6307\u4ee4\u7b49\uff09\uff0c\u800c\u4e14 instruction fetch \u4ee5\u5916\u7684\u989d\u5916 memory reference \u53ef\u80fd\u4e0d\u6b62\u4e00\u4e2a\uff1b
        • \u6211\u4eec\u5e94\u5f53\u4fdd\u8bc1\u6d89\u53ca\u7684\u82e5\u5e72 page \u90fd\u80fd\u88ab\u5b58\u5728\u5185\u5b58\u4e2d\uff1b
        • \u56e0\u6b64\uff0c\u4ece\u67d0\u79cd\u89d2\u5ea6\u6765\u8bf4\uff1athe minimum number of frames per process is defined by architecture\uff1b

    \u65e9\u671f\u5206\u914d\u7b97\u6cd5(frame-allocation algorithm)\u6309\u7167\u5206\u914d\u7684\u5e27\u7684\u5927\u5c0f\u6765\u5206\uff0c\u4e3b\u8981\u6709\u8fd9\u4e48\u4e24\u79cd\uff1a

    equal allocation

    \u987e\u540d\u601d\u4e49\uff0c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u88ab\u5206\u914d\u7684 frame \u603b\u91cf\u90fd\u76f8\u540c\uff0c\u5047\u8bbe\u5171 \\(n\\) \u4e2a process\uff0c\\(m\\) \u5757\u53ef\u7528 frame\uff0c\u90a3\u4e48\u6bcf\u4e2a\u8fdb\u7a0b\u88ab\u5206\u914d\u7684 \\(\\left\\lceil\\frac{m}{n}\\right\\rceil\\)\u3002

    proportional allocation

    \u6bd4\u4f8b\u6307\u6309\u8fdb\u7a0b\u7684\u5927\u5c0f\u6765\u5206\u914d\uff0c\u5047\u8bbe\u5171 \\(n\\) \u4e2a process\uff0c\\(m\\) \u5757\u53ef\u7528 frame\uff0c\u5176\u4e2d\u6bcf\u4e2a process \u7684\u5927\u5c0f\u4e3a \\(s_i\\)\uff0c\u90a3\u4e48\u6bcf\u4e2a\u8fdb\u7a0b\u88ab\u5206\u914d\u7684 frame \u5927\u5c0f\u4e3a \\(a_i = \\left\\lceil \\frac{s_i}{\\sum_{j}^n s_j} \\times m\\right\\rceil\\)\u3002

    proportional allocation with priority

    \u6ce8\u610f\u5230\uff0c \u76ee\u524d\u63d0\u5230\u7684\u4e24\u79cd\u505a\u6cd5\u90fd\u548c\u8fdb\u7a0b\u7684\u4f18\u5148\u7ea7\u65e0\u5173\uff0c\u4f46\u4ece\u9700\u6c42\u4e0a\u6765\u8bb2\uff0c\u6211\u4eec\u53ef\u80fd\u503e\u5411\u4e8e\u8ba9\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u88ab\u5206\u914d\u66f4\u591a\u7684 frame \u4ee5\u964d\u4f4e page fault rate \u6765\u589e\u52a0\u5b83\u4eec\u7684\u6548\u7387\u3002

    \u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u5728 proportional allocation \u7684\u57fa\u7840\u4e0a\uff0c\u5728\u8ba1\u7b97 \\(a_i\\) \u65f6\u7efc\u5408\u8003\u8651 priority\u3002

    \u6211\u4eec\u53d1\u73b0\uff0c\u4e0a\u9762\u5173\u4e8e\u5185\u5b58\u5206\u914d\u5927\u5c0f\u7684\u5f0f\u5b50\u4e2d\uff0c\u6709\u4e00\u9879 \\(n\\) \u8868\u793a #process\uff0c\u533a\u522b\u4e8e\u5176\u5b83\u76f8\u5bf9\u9759\u6001\u7684\u53c2\u6570\uff0c\u8fd9\u4e2a\u53c2\u6570\u662f\u4f1a\u5728\u8c03\u5ea6\u8fc7\u7a0b\u4e2d\u52a8\u6001\u53d8\u5316\u7684\uff0c\u6240\u4ee5\u5b9e\u9645\u4e0a\u5206\u914d\u7ed9\u6bcf\u4e2a\u8fdb\u7a0b\u7684 frame \u6570\u91cf\u4e5f\u662f\u4f1a\u52a8\u6001\u53d8\u5316\u7684\u3002

    \u5728\u591a\u6838\u8bbe\u8ba1\u4e0b\uff0c\u6709\u4e00\u79cd\u8bbe\u8ba1\u53eb\u505a NUMAWiki\uff0c\u6211\u4eec\u5728 Overview \u5176\u5b9e\u4e5f\u63d0\u5230\u8fc7\u3002\u5728\u8fd9\u79cd\u8bbe\u8ba1\u91cc\uff0c\u7531\u4e8e\u786c\u4ef6\u8bbe\u8ba1\u95ee\u9898\uff0c\u4e0d\u540c\u7684 CPU \u90fd\u6709\u81ea\u5df1\u201c\u66f4\u5feb\u201d\u8bbf\u95ee\u7684\u5185\u5b58\u3002\u8bfb\u8005\u53ef\u4ee5\u901a\u8fc7\u4e0a\u9762\u7684 Wiki \u94fe\u63a5\u505a\u8be6\u7ec6\u4e86\u89e3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u7f6e\u6362\u7b56\u7565","title":"\u7f6e\u6362\u7b56\u7565","text":"

    \u5f53 free-frame list \u4e3a\u7a7a\uff0c\u4f46\u7528\u6237\u4ecd\u7136\u9700\u8981 frame \u6765\u8fdb\u884c page in \u65f6\uff0c\u5c31\u9700\u8981\u8fdb\u884c\u9875\u7f6e\u6362(page replacement)\uff0c\u5c06\u5e76\u6ca1\u6709\u6b63\u5728\u88ab\u4f7f\u7528\u7684\u9875\u817e\u51fa\u6765\u7ed9\u9700\u8981 page in \u7684\u5185\u5bb9\u7528\uff0c\u800c\u8fd9\u4e2a\u201c\u88ab\u8981\u6c42\u817e\u51fa\u5730\u65b9\u201d\u7684\u9875\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u727a\u7272\u5e27(victim frame)\u3002

    \u663e\u7136\u8fd9\u91cc\u7684 \u201cpage\u201d \u662f\u57fa\u4e8e Definition 2\u3002

    \u6211\u4eec\u7ec6\u5316 page fault \u5904\u7406\u6d41\u7a0b\u7684 2.a. \u9879\uff0c\u5927\u6982\u662f\u5982\u4e0b\u7684\u6b65\u9aa4\uff1a

    page replacement

    1. \u5229\u7528\u7f6e\u6362\u7b97\u6cd5(replacement algorithm)\u51b3\u5b9a\u54ea\u4e2a frame \u662f victim frame\uff1b
    2. \u5982\u679c\u6709\u5fc5\u8981\uff08dirty\uff09\uff0cvictim frame -> \u540e\u5907\u5b58\u50a8\uff1b
    3. \u66f4\u65b0\u76f8\u5173\u5143\u4fe1\u606f\uff1b
    4. \u8fd4\u56de\u8fd9\u4e2a victim frame \u4f5c\u4e3a free-frame\uff1b

    \u5982\u679c\u8fd9\u4e2a victim frame \u5728\u88ab page in \u4ee5\u540e\u6ca1\u6709\u88ab\u4fee\u6539\u8fc7\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u5c06\u5b83\u8986\u76d6\uff0c\u4e0d\u9700\u8981\u5199\u56de\u540e\u5907\u5b58\u50a8\uff0c\u80fd\u8282\u7701\u4e00\u6b21\u5185\u5b58\u64cd\u4f5c\uff1b\u53cd\u4e4b\uff0c\u5982\u679c\u8fd9\u4e2a victim frame \u88ab\u4fee\u6539\u8fc7\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u5c06\u5b83\u5199\u56de\u540e\u5907\u5b58\u50a8\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u4fee\u6539\u7ed9 \u201ccommit\u201d \u4e86\u3002\u800c\u4e3a\u4e86\u5b9e\u73b0\u8fd9\u4e2a\u4f18\u5316\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u4fee\u6539\u4f4d(dirty bit \u6216 modified bit)\u6765\u8bb0\u5f55\u9875\u662f\u5426\u88ab\u4fee\u6539\u8fc7\uff0c\u5f53 frame \u521a\u88ab\u8f7d\u5165\u5185\u5b58\u65f6\uff0cdirty bit \u5e94\u5f53\u4e3a 0\uff1b\u800c\u4e00\u65e6\u5e27\u5185\u6709\u4efb\u4f55\u5199\u5165\u64cd\u4f5c\u53d1\u751f\uff0cdirty bit \u5c31\u4f1a\u88ab\u7f6e 1\u3002

    \u73b0\u5728\u6211\u4eec\u6765\u8ba8\u8bba\u5177\u4f53\u7684\u7f6e\u6362\u7b97\u6cd5(replacement algorithm)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#opt","title":"OPT","text":"

    \u7406\u8bba\u4e0a\u6700\u4f18\uff0c\u5373 \u24f5 \u80fd\u5e26\u6765\u6700\u4f4e\u7684 page fault rate\uff0c\u24f6 \u7edd\u5bf9\u4e0d\u4f1a\u906d\u53d7 Belady's anomaly \u7684\u505a\u6cd5\u662f\uff1a\u5728\u672a\u6765\u6700\u4e45\u7684\u65f6\u95f4\u5185\u4e0d\u4f1a\u88ab\u8bbf\u95ee\u5230\u7684\u9875\u4f5c\u4e3a victim frame\u3002\u8fd9\u53e5\u8bdd\u8bf4\u8d77\u6765\u6709\u70b9\u7ed5\uff0c\u7528\u82f1\u6587\u63cf\u8ff0\u662f\uff1aReplace the page that will not be used for the longest period of time.

    \u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u9009\u4e4b\u540e\u518d\u4e5f\u4e0d\u4f1a\u88ab\u7528\u5230\u7684\u6216\uff08\u5982\u679c\u6ca1\u6709\u524d\u8005\uff09\u4e0b\u4e00\u6b21\u7528\u5230\u7684\u65f6\u95f4\u6700\u665a\u7684\u9875\u4f5c\u4e3a victim frame\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u6211\u4eec\u5b9e\u9645\u4e0a\u5f88\u96be\u6765\u9884\u6d4b\u4e00\u4e2a frame \u4e0b\u4e00\u6b21\u88ab\u4f7f\u7528\u662f\u4ec0\u4e48\u65f6\u5019\uff0c\u6240\u4ee5\u8be5\u65b9\u6cd5\u53ea\u662f\u4e00\u4e2a\u7406\u8bba\u4e0a\u7684\u6700\u4f18\u5efa\u6a21\uff0c\u6211\u4eec\u5728\u540e\u9762\u5e94\u5f53\u8003\u8651\u53bb\u903c\u8fd1\u8fd9\u4e2a\u5efa\u6a21\u3002

    \u5934\u8111\u98ce\u66b4

    \u8fd9\u6bb5\u5185\u5bb9\u6709\u6ca1\u6709\u8ba9\u4f60\u60f3\u8d77\u6211\u4eec\u5df2\u7ecf\u5b66\u8fc7\u7684\u67d0\u4e2a\u4e1c\u897f\uff1f

    \u63d0\u793a

    Shortest-Job-First Scheduling!

    \u5b9e\u9645\u4e0a\uff0c\u4e0b\u9762\u4ecb\u7ecd FIFO \u4f60\u4e5f\u5e94\u5f53\u4f1a\u60f3\u8d77 FCFS \u8c03\u5ea6\u7b97\u6cd5\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#fifo","title":"FIFO","text":"

    \u5148\u5165\u5148\u51fa(first-in, first-out, FIFO)\u7b56\u7565\uff0c\u5373\u9009\u62e9\u6b63\u5728\u4f7f\u7528\u4e2d\u7684\u3001\u6700\u65e9\u8fdb\u5165\u5185\u5b58\u7684 frame \u4f5c\u4e3a victim frame\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u5728\u5185\u5b58\u4e2d\u5b8c\u6574\u5730\u7ef4\u62a4\u4e00\u4e2a FIFO \u961f\u5217\u6765\u5b9e\u73b0\u8fd9\u4e2a\u7b56\u7565\u3002

    FIFO \u7b56\u7565\u7684\u4f18\u70b9\u5c31\u662f\u7b80\u5355\uff0c\u65b9\u4fbf\u5b9e\u73b0\uff1b\u7f3a\u70b9\u662f\u5e76\u4e0d\u591f\u597d\u2014\u2014\u65e9\u88ab\u8f7d\u5165\u7684 page \u4e5f\u53ef\u80fd\u4f1a\u88ab\u9891\u7e41\u7684\u4f7f\u7528\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\uff0c\u8fd9\u4e2a\u65b9\u6cd5\u7528\u88ab\u8f7d\u5165\u7684\u65e9\u665a\u6765\u5efa\u6a21 page \u7684\u4f7f\u7528\u9891\u7387\uff0c\u4f46\u662f\u8fd9\u4e2a\u5efa\u6a21\u76f8\u6bd4 optimal \u7684\u5efa\u6a21\u5e76\u4e0d\u8db3\u591f\u63a5\u8fd1\u3002

    \u5934\u8111\u98ce\u66b4

    \u8bf7\u8bfb\u8005\u8bd5\u7740\u601d\u8003\u4e00\u4e0b\uff0c\u5047\u8bbe\u73b0\u5728\u6700\u65e9\u88ab\u8f7d\u5165\u7684 page \u6b63\u5728\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u8fd9\u65f6\u5019\u51fa\u73b0\u4e86\u4e00\u4e2a page fault\uff0c\u4f1a\u53d1\u751f\u4ec0\u4e48\uff1f\u4f1a\u5bfc\u81f4\u51fa\u73b0\u9519\u8bef\u5417\uff1f

    \u63d0\u793a

    \u4f1a\u5f71\u54cd\u6548\u7387\uff0c\u4f46\u662f\u4e0d\u4f1a\u51fa\u9519\u54e6\uff01

    Belady's anomaly

    \u8fd9\u4e00\u6bb5\u5185\u5bb9\u6ca1\u5565\u7528\uff0c\u53ea\u662f\u4e00\u4e2a\u6709\u8da3\u7684\u73b0\u8c61\u3002

    \u6709\u4e00\u79cd\u60c5\u51b5\u53eb\u505a Belady's anomaly\uff0c\u5728 FIFO \u7b56\u7565\u4e0b\uff08\u5176\u5b83 replacement algorithm \u53ef\u80fd\u4e5f\u4f1a\u53d1\u751f\uff09\uff0c\u968f\u7740 frame \u6570\u91cf\u7684\u589e\u52a0\uff0cpage fault rate \u53ef\u80fd\u4f1a\u589e\u52a0\u3002

    \u4f8b\u5982\u5982\u4e0b page \u8bbf\u95ee\u5e8f\u5217\uff1a

    \\[ 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 \\]

    \u5728 3 \u4e2a frame \u7684\u60c5\u51b5\u4e0b\uff0cpage fault rate \u4e3a \\(\\frac{9}{12} = 75.0%\\)\uff1b\u800c\u5728 4 \u4e2a frame \u7684\u60c5\u51b5\u4e0b\uff0cpage fault rate \u4e3a\\(\\frac{10}{12} = 83.3%\\)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#lru","title":"LRU","text":"

    \u6211\u4eec\u7684\u76ee\u6807\u662f\u4e3a\u4e86\u903c\u8fd1\u96be\u4ee5\u5b9e\u73b0\u7684 optimal\uff0c\u800c optimal \u4e4b\u6240\u4ee5\u96be\u4ee5\u5b9e\u73b0\uff0c\u662f\u56e0\u4e3a\u6211\u4eec\u5f88\u96be\u201c\u9884\u77e5\u672a\u6765\u201d\uff0c\u6211\u4eec\u80fd\u5229\u7528\u7684\u53ea\u6709\u5df2\u7ecf\u7ecf\u5386\u8fc7\u7684\u4e8b\u60c5\u3002

    Least recently used(LRU) \u7b97\u6cd5\u7684\u601d\u8def\u662f\uff0c\u57fa\u4e8e\u300c\u5f88\u4e45\u6ca1\u88ab\u7528\u8fc7\u7684 page \u53ef\u80fd\u5728\u77ed\u671f\u4e0d\u592a\u4f1a\u88ab\u518d\u6b21\u4f7f\u7528\uff0c\u521a\u521a\u7528\u8fc7\u7684 page \u53ef\u80fd\u5728\u77ed\u671f\u88ab\u9891\u7e41\u5730\u7528\u300d\u7684\u5047\u8bbe\uff0c\u7528\u201c\u6700\u4e45\u6ca1\u7528\u8fc7\u201d\u6765\u5efa\u6a21\u300c\u672a\u6765\u6700\u4e45\u65f6\u95f4\u5185\u4e0d\u4f1a\u88ab\u8bbf\u95ee\u300d\uff0c\u5373\u9009\u62e9\u6700\u4e45\u6ca1\u88ab\u8bbf\u95ee\u8fc7\u7684 frame \u4f5c\u4e3a victim\u3002

    LRU \u662f\u6bd4\u8f83\u5e38\u7528\u7684 replacement algorithm\uff08\u5b9e\u9645\u4e0a\u662f LRU-Approximation\uff09\uff0c\u56e0\u4e3a\u662f\u88ab\u8ba4\u4e3a\u6bd4\u8f83\u597d\u7684 replacement algorithm\u3002

    \u73b0\u5728\u6211\u4eec\u6765\u8003\u8651\u5982\u4f55\u5b9e\u73b0 LRU\uff0c\u6216\u8005\u8bf4\uff0c\u5982\u4f55\u6765\u7ef4\u62a4\u4e00\u4e2a frame \u6709\u591a\u4e45\u6ca1\u88ab\u8bbf\u95ee\u8fc7\u3002

    stack algorithms

    1. \u8ba1\u6570\u5668\uff1a\u4f7f\u7528\u4e00\u4e2a\u8ba1\u6570\u5668\u6765\u6807\u8bb0\u4e00\u4e2a\u5e27\u6709\u591a\u4e45\u6ca1\u88ab\u4f7f\u7528\u8fc7\uff1b
      1. \u5f53\u4e00\u4e2a frame \u88ab\u4f7f\u7528\u7684\u65f6\u5019\u5c06\u8ba1\u6570\u5668\u5f52\u96f6\uff1b
      2. \u9700\u8981\u8003\u8651\u6bcf\u4e2a frame \u7684\u8ba1\u6570\u5668\u90fd\u9700\u8981\u88ab\u5b9a\u671f\u66f4\u65b0\uff1b
      3. \u9700\u8981\u8003\u8651\u8ba1\u6570\u5668\u53ef\u80fd\u6ea2\u51fa\uff1b
      4. \u5728\u627e least recently used frame \u7684\u65f6\u5019\u9700\u8981\u53bb\u641c\u7d22 counter \u6700\u5927\u7684 frame\uff08\u4f60\u4e5f\u53ef\u4ee5\u8003\u8651\u7528\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u53bb\u7ef4\u62a4\u5b83\uff0c\u4f46\u662f\u4f1a\u589e\u52a0\u8bbe\u8ba1\u590d\u6742\u5ea6\uff09\uff1b
    2. \u94fe\u8868\u5e8f\u5217\uff1a\u4f7f\u7528\u4e00\u4e2a\u53cc\u5411\u94fe\u8868\u6765\u7ef4\u62a4\u4e00\u4e2a\u6709\u5e8f\u5e8f\u5217\uff0cframe \u5728\u5e8f\u5217\u4e2d\u7684\u4f4d\u7f6e\u6697\u793a\u4e86\u5b83\u4eec\u6700\u8fd1\u88ab\u4f7f\u7528\u7684\u65f6\u95f4\uff1b
      • \u8c8c\u4f3c\u4e3b\u6d41\u90fd\u7528\u201c\u6808\u201d\u6765\u5efa\u6a21\uff0c\u4f46\u6211\u89c9\u5f97\u8fd9\u4e0d\u662f\u6808\uff0c\u51b5\u4e14\u8bf4\u662f\u6808\uff0c\u5176\u5b9e\u73b0\u8fd8\u662f\u7528\u53cc\u5411\u94fe\u8868\uff1b

      • \u6bcf\u5f53\u4e00\u4e2a frame \u88ab\u4f7f\u7528\u7684\u65f6\u5019\uff1a
        1. \u5982\u679c\u5b83\u5728\u94fe\u8868\u4e2d\uff0c\u5c31\u5c06\u5b83\u79fb\u52a8\u5230\u94fe\u8868\u5934\u90e8\uff1b
        2. \u5982\u679c\u5b83\u4e0d\u5728\u94fe\u8868\u4e2d\uff0c\u5c31\u5c06\u5b83\u52a0\u5165\u5230\u94fe\u8868\u5934\u90e8\uff1b
      • \u8fd9\u79cd\u8bbe\u8ba1\u4e0b\u6bcf\u6b21\u7684 \u201cleast used frame\u201d \u603b\u662f\u4f4d\u4e8e\u5e8f\u5217\u672b\u5c3e\uff0c\u56e0\u6b64\u4e0d\u9700\u8981\u505a\u989d\u5916\u7684\u641c\u7d22\uff1b

    \u4e0a\u9762\u4e24\u79cd\u505a\u6cd5\u90fd\u88ab\u79f0\u4e3a\u6808\u7b97\u6cd5(Stack Algorithms)\u3002

    \u867d\u7136\u6211\u575a\u6301\u8ba4\u4e3a\u8fd9\u91cc\u548c\u6808\u6ca1\u5173\u7cfb\u3002

    \u4f18\u52bf

    1. LRU \u5bf9\u4e8e optimal \u7684\u62df\u5408\u662f\u6bd4\u8f83\u597d\u7684\uff1b
    2. LRU \u7b97\u6cd5\u4e0d\u4f1a\u51fa\u73b0 Belady's anomaly\uff1b

    \u7f3a\u9677

    1. \u5bf9\u4e8e\u8ba1\u6570\u5668\u505a\u6cd5\uff0c\u7ef4\u62a4\u6bcf\u4e2a frame \u7684 clock \u60f3\u60f3\u5c31\u5f88\u6162\uff0c\u9664\u975e\u6709\u7279\u5b9a\u7684\u786c\u4ef6\u6765\u4f18\u5316\u8fd9\u4e2a\u64cd\u4f5c\uff08\u4f8b\u5982\u4e0d\u9700\u8981\u7531\u64cd\u4f5c\u7cfb\u7edf\u6765\u64cd\u5fc3 clock \u7684\u7ef4\u62a4\uff09\uff1b
    2. \u5bf9\u4e8e\u4e24\u8005\uff0c\u7531\u4e8e\u6bcf\u6b21\u5185\u5b58\u88ab\u8bbf\u95ee\u7684\u65f6\u5019\u90fd\u9700\u8981\u8fdb\u884c\u7ef4\u62a4\uff0c\u5982\u679c\u901a\u8fc7 interrupt \u6765\u8c03\u7528 stack algorithms\uff0c\u90a3\u4e48\u5f00\u9500\u5c06\u4f1a\u5de8\u5927\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#lru-approx","title":"LRU Approx.","text":"

    \u7531\u4e8e\u6211\u4eec\u5728 Stack Algorithm \u91cc\u63d0\u5230\u7684\u8bf8\u591a\u5f0a\u7aef\uff0c\u6211\u4eec\u8003\u8651\u8fd1\u4f3c\u5730\uff0c\u5b9e\u73b0 LRU \u7b97\u6cd5\u2014\u2014\u5b9e\u9645\u4e0a\u662f\u8fd1\u4f3c\u5b9e\u73b0 Stack Algorithm\u3002

    \u591a\u6570\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u63d0\u4f9b\u4e00\u4e2a\u53eb reference bit \u7684\u529f\u80fd\u3002\u6240\u6709 frame \u90fd\u6709\u4e00\u4e2a\u4e0e\u4e4b\u5173\u8054\u7684 reference bit\uff0c\u5728\u521d\u59cb\u5316\u7684\u65f6\u5019\u90fd\u4f1a\u88ab\u7f6e 0\uff1b\u800c\u6bcf\u5f53 frame \u88ab\u4f7f\u7528\u65f6\uff0creference bit \u5c31\u4f1a\u88ab\u7f6e 1\u3002\u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u89c2\u5bdf reference bit \u6765\u89c2\u5bdf\u67d0\u4e9b frame \u662f\u5426\u88ab\u4f7f\u7528\u8fc7\u3002

    \u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u4eec\u5206\u6790 LRU \u7684\u9650\u5236\uff0c\u4e3b\u8981\u4f53\u73b0\u5728\u4e24\u4e2a\u65b9\u9762\uff1a\u24f5 \u9700\u8981\u5168\u90e8\u5386\u53f2\u4fe1\u606f\uff0c\u7ef4\u62a4\u6210\u672c\u8f83\u5927\uff08\u9700\u8981\u8bbe\u8ba1\u6570\u636e\u7ed3\u6784\u6765\u5b58\u50a8\uff09\uff1b\u24f6 \u6570\u636e\u7ef4\u62a4\u8fc7\u4e8e\u9891\u7e41\uff0c\u6bcf\u6b21\u4f7f\u7528 frame \u90fd\u9700\u8981\u7528\u4e00\u6bb5\u4e0d\u5c0f\u7684\u5f00\u9500\u53bb\u66f4\u65b0\u72b6\u6001\u3002

    \u5bf9\u5e94\u7684\u89e3\u51b3\u65b9\u6848\u662f\uff1a\u24f5 \u6211\u4eec\u5b8c\u5168\u53ef\u4ee5\u53ea\u5173\u6ce8\u4e00\u4e2a\u90bb\u57df\u91cc\u7684\u5386\u53f2\u4fe1\u606f\uff0c\u24f6 \u6211\u4eec\u53ef\u4ee5\u964d\u4f4e\u66f4\u65b0 frame \u4fe1\u606f\u7684\u9891\u7387\u3002\uff08\u867d\u7136\u5bf9\u4e8e\u540e\u8005\uff0c\u5b9e\u9645\u4e0a\u5982\u679c\u5bf9\u5e94\u4e8e reference bit \u7684\u66f4\u65b0\uff0c\u5176\u5b9e\u5e76\u6ca1\u6709\u964d\u4f4e\u9891\u7387\u3002\uff09

    Additional-Reference-Bits Algorithm

    \u53ea\u6709 reference bit \u7684\u8bdd\u6ca1\u6cd5\u53cd\u5e94\u51fa frame \u4f7f\u7528\u7684\u201c\u8fdc\u8fd1\u201d\uff0c\u4e5f\u5c31\u662f\u4f7f\u7528\u7684\u987a\u5e8f\u3002

    \u65e2\u7136\u7f3a\u7684\u662f\u987a\u5e8f\uff0c\u6211\u4eec\u5c31\u8003\u8651\u5efa\u6a21 frame \u7684\u4f7f\u7528\u8fdc\u8fd1\u3002\u5176\u4e2d\u6700\u9996\u8981\u7684\u4e00\u4e2a\u4efb\u52a1\u5c31\u662f\u83b7\u53d6\u5386\u53f2\u4fe1\u606f\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u7528\u4e00\u4e9b bits \u6765\u5b58\u50a8\u6bcf\u4e2a frame \u7684\u5386\u53f2\u4f7f\u7528\u4fe1\u606f\uff1b\u7136\u540e\u5b9a\u671f\uff08\u5229\u7528\u65f6\u949f\u4e2d\u65ad\uff09\u5730\u53bb\u68c0\u67e5\u3001\u5b58\u50a8\u5f53\u524d\u65f6\u95f4\u5f53\u524d frame \u7684 reference bit\uff0c\u76f8\u5f53\u4e8e\u68c0\u6d4b\u4e0a\u4e00\u4e2a\u91c7\u6837\u95f4\u9694\u4e2d\u8be5\u5e27\u6709\u6ca1\u6709\u88ab\u7528\u8fc7\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u6211\u4eec\u53ef\u4ee5\u7ed9\u6bcf\u4e2a frame \u4e00\u4e2a \\(k\\) bits \u7684 bits vector \\(h = (h_{k-1}h_{k-2} \\dots h_{1}h_{0})_2, \\quad h_i \\in \\{0, 1\\}\\) \u7528\u6765\u5b58\u50a8\u5386\u53f2\u7684 reference bits\uff1b\u7136\u540e\u6bcf\u8fc7 \\(\\Delta t\\) ms\uff0c\u5c31\u4ea7\u751f\u4e00\u6b21\u65f6\u949f\u4e2d\u65ad\uff0c\u68c0\u67e5 frame \\(f_i\\) \u7684 reference bit \\(r_{t}\\)\uff08\u4e3a\u4e86\u7b80\u6d01\u6211\u4eec\u7701\u7565\u8fd9\u4e2a \\(i\\)\uff09\uff0c\u6b64\u65f6\u6211\u4eec\u66f4\u65b0 \\(h' = (r_{i,t}h_{k-1}h_{k-2} \\dots h_{2}h_{1})_2\\)\uff0c\u5373\u5c06 \\(h\\) \u53f3\u79fb\u4e00\u4f4d\uff0c\u5728\u9ad8\u4f4d\u8865 \\(r_{i,t}\\)\u3002

    \u5b9e\u9645\u4e0a \\(h\\) \u662f\u4e00\u4e2a\u7c7b\u4f3c\u961f\u5217\u7684\u5b58\u5728\uff0c\u800c\u6bcf\u6b21\u68c0\u67e5\u4f1a\u628a reference bit \u7ed9 push \u8fdb\u8fd9\u4e2a\u961f\u5217\u91cc\u3002\u56e0\u6b64\uff0c\\(h\\) \u6362\u4e00\u4e2a\u5199\u6cd5\u5c31\u662f\uff1a\\(h' = (\\underbrace{r_{t}r_{t-1}r_{t-2}r_{t-3} \\dots }_{k\\text{ bits}})_2\\)\uff0c\u4e5f\u5c31\u662f\u6700\u8fd1\u7684 \\(k\\) \u6b21\u68c0\u6d4b\u7684\u5386\u53f2\u8bb0\u5f55\u3002

    \u800c\u4e4b\u6240\u4ee5\u4ece\u9ad8\u4f4d\u5f00\u59cb\uff0c\u662f\u56e0\u4e3a\u5728\u6570\u503c\u5927\u5c0f\u4f53\u7cfb\u4e2d\uff0c\u9ad8\u4f4d\u4ee3\u8868\u7740\u9ad8\u6743\u91cd\uff0c\u6b63\u597d\u5bf9\u5e94 reference \u51fa\u73b0\u7684\u8d8a\u8fd1\uff0cframe \u8d8a\u65b0\u3002\u6240\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u627e\u8fd9\u4e2a bits vector \u4e2d\u6700\u5c0f\u7684\u90a3\u4e2a frame \u4f5c\u4e3a victim frame\u3002

    Second-Chance Algorithm

    Second-Chance Algorithm \u53ea\u5229\u7528 reference bit \u6765\u8fdb\u884c\u7f6e\u6362\uff0c\u7c7b\u4f3c FIFO \u7684\u6539\u8fdb\u7248\uff0c\u5728 FIFO \u7684\u57fa\u7840\u4e0a\uff0c\u6211\u4eec\u5f15\u5165\u4e86 reference bit\uff0c\u5e76\u4e14\u5b9a\u671f\u64e6\u9664 reference bit\u3002

    \u6211\u4eec\u5faa\u73af\u5730\u904d\u5386 frames\uff0c\u5e76\u9010\u4e00\u68c0\u6d4b reference bit\uff1a

    1. \u5982\u679c reference bit \u4e3a 0\uff0c\u8bf4\u660e\u91c7\u6837\u95f4\u9694\u4e2d\u8fd9\u4e2a frame \u6ca1\u88ab\u7528\u8fc7\uff0c\u90a3\u4e48\u8fd9\u4e2a frame \u5c31\u662f\u6211\u4eec\u8981\u627e\u7684 victim frame\uff1b
    2. \u5982\u679c reference bit \u4e3a 1\uff0c\u8bf4\u660e\u91c7\u6837\u95f4\u9694\u4e2d\u8fd9\u4e2a frame \u88ab\u7528\u8fc7\uff0c\u4e8e\u662f\u7ed9\u8fd9\u4e2a frame \u4e00\u6b21\u201c\u8c41\u514d\u201d\u7684\u673a\u4f1a\uff0c\u5c06\u5b83\u7684 reference bit \u8bbe\u7f6e\u4e3a 0\uff0c\u5e76\u7ee7\u7eed\u5bfb\u627e\u4e0b\u4e00\u4e2a frame\uff1b

    \u5934\u8111\u98ce\u66b4

    \u5728 2. \u4e2d\u4e3a\u4ec0\u4e48\u8981\u5c06\u5b83\u7f6e 0\uff1f\u8fd9\u4e2a\u7f6e 0 \u7684\u542b\u4e49\u548c\u5728\u65f6\u949f\u4e2d\u65ad\u91c7\u6837\u7684\u65f6\u5019\u7684\u7f6e 0 \u4e00\u6837\u5417\uff1f

    \u63d0\u793a

    \u8fd9\u5c31\u662f Second-Chance Algorithm \u4e2d\u7684 \u201csecond\u201d \u7684\u6765\u6e90\u3002\u5c06\u5b83\u7f6e 0 \u540e\u4e0b\u4e00\u5faa\u73af\u518d\u78b0\u5230\u5b83\u7684\u65f6\u5019\uff0c\u5c31\u4e0d\u4f1a\u518d\u88ab\u201c\u8c41\u514d\u201d\u4e86\u3002

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u8be5\u7b97\u6cd5\u53ef\u80fd\u4f1a\u9000\u5316\u4e3a FIFO\uff0c\u751a\u81f3\u66f4\u5dee\uff0c\u627e\u5230 victim page \u4e4b\u524d\uff0c\u8be5\u7b97\u6cd5\u6700\u591a\u53ef\u80fd\u4f1a\u904d\u5386\u4e24\u904d frames\u3002\u800c\u8be5\u7b97\u6cd5\u4e5f\u53ef\u4ee5\u770b\u4f5c Additional-Reference-Bits Algorithm \u7684\u7b80\u5316\u7248\uff0c\u5982\u679c\u8bf4 Additional-Reference-Bits Algorithm \u662f\u901a\u8fc7\u6bd4\u8f83\u82e5\u5e72\u8f6e\u91c7\u6837\u7684\u5386\u53f2\u91c7\u6837\u8bb0\u5f55\u6765\u5bf9 frames \u505a\u6392\u5e8f\uff0c\u4ee5\u51b3\u5b9a\u54ea\u4e00\u4e2a\u662f \u201cLRU\u201d\uff1b\u90a3\u4e48 Second-Chance Algorithm \u5c31\u662f\u5728\u4e00\u4e2a\u91c7\u6837\u5468\u671f\u91cc\uff0c\u5c06 frames \u505a\u4e8c\u503c\u5206\u7c7b\uff0c\u5728\u201c\u8fdc\u8fd1\u201d\u8fd9\u4ef6\u4e8b\u7684\u5efa\u6a21\u4e0a\uff0c\u66f4\u52a0\u6fc0\u8fdb\u548c\u7c97\u7c92\u5ea6\u3002

    Enhanced Second-Chance Algorithm / NRU

    \u4e66\u4e2d\u6709\u4e00\u53e5\u8bdd\u4ee4\u4eba\u8d39\u89e3\uff0c\u6211\u53d1\u73b0\u5df2\u7ecf\u6709\u4eba\u5728 StackOverflow \u4e0a\u95ee\u4e86\u8fd9\u4e2a\u95ee\u9898\uff0c\u53ef\u4ee5\u53c2\u8003\u4e00\u4e0b\u8fd9\u4e2a\u95ee\u9898\u3002

    \u65e2\u7136 Second-Chance Algorithm \u7684\u5efa\u6a21\u6709\u70b9\u592a\u6fc0\u8fdb\u548c\u7c97\u7c92\u5ea6\uff0c\u90a3\u6211\u4eec\u8003\u8651\u628a\u7c92\u5ea6\u518d\u5f04\u7ec6\u4e00\u70b9\u3002

    \u4e4b\u524d\u6211\u4eec\u90fd\u53ea\u770b reference bit\uff0c\u73b0\u5728\u6211\u4eec\u628a dirty bit \u4e5f\u7eb3\u5165\u8003\u8651\u3002\u8003\u8651\u4e8c\u5143\u7ec4 \\((reference, dirty)\\)\uff0c\u4e24\u4e2a bit \u6709\u56db\u79cd\u7ec4\u5408\uff1a

    1. \\((0, 0)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4e5f\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b
    2. \\((0, 1)\\)\uff1a\u6ca1\u88ab\u7528\u8fc7\uff0c\u4f46\u88ab\u4fee\u6539\u8fc7\uff1b
    3. \\((1, 0)\\)\uff1a\u88ab\u7528\u8fc7\uff0c\u4f46\u6ca1\u88ab\u4fee\u6539\u8fc7\uff1b
    4. \\((1, 1)\\)\uff1a\u88ab\u7528\u8fc7\uff0c\u4e5f\u88ab\u4fee\u6539\u8fc7\uff1b

    \u7531\u4e8e\u88ab\u4fee\u6539\u8fc7\u7684 frame \u5728\u88ab\u7f6e\u6362\u7684\u65f6\u5019\u9700\u8981\u6267\u884c\u5199\u56de\uff0c\u6240\u4ee5\u6211\u4eec\u5e0c\u671b\u5c3d\u91cf\u665a\u4e00\u70b9\u4f7f\u7528\u8fd9\u7c7b frame\u3002\u5728\u8fd9\u79cd\u5206\u7c7b\u4e0b\uff0c\u524d\u4e24\u79cd\u5408\u5e76\uff0c\u540e\u4e24\u79cd\u5408\u5e76\uff0c\u5c31\u662f\u5148\u524d\u7684 Second-Chance Algorithm \u4e86\u3002

    \u5728 Enhanced Second-Chance Algorithm \u4e2d\uff0c\u6211\u4eec\u627e\u5230\u7b2c\u4e00\u4e2a 1. \u60c5\u51b5\u7684 frame \u4f5c\u4e3a victim\uff1b\u5982\u679c\u6ca1\u6709\uff0c\u5c31\u53bb\u627e\u7b2c\u4e00\u4e2a 2. \u60c5\u51b5\u7684 frame \u4f5c\u4e3a victim\u2026\u2026\u4ee5\u6b64\u7c7b\u63a8\u30022

    \u56e0\u6b64\uff0cEnhanced Second-Chance Algorithm \u53ef\u80fd\u6700\u591a\u4f1a\u904d\u5386 4 \u6b21 frames\u3002\u5728\u5df2\u7ecf\u4ecb\u7ecd\u7684\u4e09\u4e2a\u7b97\u6cd5\u91cc\uff0c\u5b83\u662f\u552f\u4e00\u4e00\u4e2a\u8003\u8651\u4e86 dirty bit \u7684\u3002\u4e8b\u5b9e\u4e0a\uff0c\u7531\u4e8e dirty bit \u4e5f\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u53cd\u6620\u4e86\u9875\u201c\u88ab\u4f7f\u7528\u201d\u7684\u7a0b\u5ea6\uff0c\u867d\u7136\u627e\u7684\u4e0d\u662f\u6700\u4e45\u6ca1\u88ab\u7528\u8fc7\u7684 frame\uff0c\u4f46\u80fd\u591f\u5c3d\u53ef\u80fd\u5730\u6392\u9664\u8fd1\u671f\u4f7f\u7528\u8fc7\u7684 frame\uff0c\u56e0\u6b64\uff0c\u8be5\u7b97\u6cd5\u4e5f\u53eb\u505a NRU(Not Recently Used)\uff0c\u662f\u5b9e\u8df5\u4e2d\u6bd4\u8f83\u5e38\u89c1\u7684\u4e00\u79cd\u5bf9 LRU \u7684\u8fd1\u4f3c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u57fa\u4e8e\u8ba1\u6570\u7684\u7f6e\u6362","title":"\u57fa\u4e8e\u8ba1\u6570\u7684\u7f6e\u6362","text":"

    \u6211\u4eec\u8003\u8651\u7528 counter \u6765\u8bb0\u5f55\u6b63\u5728\u4f7f\u7528\u7684 frame \u4e2d\u6bcf\u4e2a frame \u88ab\u4f7f\u7528\u7684\u6b21\u6570\uff0c\u7528 counter \u7684\u503c\u6765\u5efa\u6a21\u201c\u4f7f\u7528\u9891\u7387\u201d\u3002\u6309\u7167\u540e\u7eed\u64cd\u4f5c\u4e0d\u540c\u5206\u4e3a\u8fd9\u4e24\u79cd\uff1a

    \u7f3a\u9677

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u8fd9\u4e24\u4e2a\u8bbe\u8ba1\u5bf9 optimal \u7684\u62df\u5408\u90fd\u4e0d\u662f\u5f88\u597d\uff0c\u5f00\u9500\u4e5f\u90fd\u5f88\u5927\u3002

    \u9644\u52a0\u9605\u8bfb

    \u5efa\u8bae\u53bb\u6d4f\u89c8\u4e00\u4e0b Wiki \u7684\u5bf9\u5e94\u6761\u76ee\uff0c\u4e86\u89e3\u4e00\u4e0b\u5e38\u89c1\u7684 replacement algorithm \u6709\u54ea\u4e9b\u3002\u4e0a\u8ff0\u5206\u7c7b\u548c\u8109\u7edc\u548c Wiki \u6709\u4e00\u4e9b\u4e0d\u540c\uff0c\u5b9e\u5728\u662f\u6ca1\u65f6\u95f4\u8003\u7a76\u8fd9\u4e48\u591a\u7c98\u7a20\u7684\u8109\u7edc\u4e86\uff08\u6211\u751a\u81f3\u8fd8\u6ca1\u641e\u6e05\u695a NRU \u548c Enhanced Second Chance \u5230\u5e95\u662f\u4e0d\u662f\u540c\u4e00\u4e2a\u4e1c\u897f\uff0c\u53cd\u6b63\u5c31\u7b97\u4e0d\u4e00\u6837\u5927\u6982\u601d\u8def\u4e5f\u5dee\u4e0d\u591a\uff09\uff0c\u6240\u4ee5\u8bf7\u8bfb\u8005\u81ea\u884c\u4e86\u89e3\u66f4\u591a\u5185\u5bb9\u3002\u8fd9\u4e9b\u7b97\u6cd5\u5185\u5bb9\u90fd\u4e0d\u7b97\u5f88\u591a\uff0c\u4e86\u89e3\u4e00\u4e0b\u66f4\u597d\u3002

    \u7f6e\u6362\u8303\u56f4

    \u5728\u5206\u914d\u7684\u65f6\u5019\uff0c\u6211\u4eec\u4e3a\u8fdb\u7a0b\u5206\u914d\u4e86\u4e00\u4e9b\u5e27\u4ee5\u7528\u4e8e\u5fc5\u8981\u7684\u8fd0\u7b97\u6d3b\u52a8\u3002\u4f46\u6211\u4eec\u77e5\u9053\uff0c\u7f6e\u6362\u64cd\u4f5c\u4f1a\u52a8\u6001\u5730\u66f4\u65b0 frame \u7684\u4f7f\u7528\u60c5\u51b5\u3002\u4e0d\u77e5\u9053\u4f60\u662f\u5426\u7591\u60d1\u8fc7\uff1a\u7f6e\u6362\u7684\u65f6\u5019\uff0c\u6211\u4eec\u80fd\u5426\u7f6e\u6362\u5176\u5b83\u8fdb\u7a0b\u7684 frame\uff1f\u4ee5\u53ca\u6211\u4eec\u8981\u5982\u4f55\u5b9e\u73b0\u548c\u7ef4\u62a4\u8fd9\u4e9b\u7b56\u7565\u5462\uff1f

    \u5b9e\u9645\u4e0a\uff0creplacement \u5206\u4e3a local \u548c global \u4e24\u79cd\uff1a

    1. \u4f7f\u7528 local replacement \u65f6\uff0creplacement \u53ea\u53d1\u751f\u5728\u5c5e\u4e8e\u5f53\u524d\u8fdb\u7a0b\u7684\u5e27\u4e2d\uff0c\u56e0\u800c\u4e5f\u5c31\u4e0d\u4f1a\u5f71\u54cd\u5176\u5b83\u8fdb\u7a0b\u7684\u5185\u5b58\u4f7f\u7528\u60c5\u51b5\uff1b
    2. \u800c\u5bf9\u5e94\u7684\uff0cglobal replacement \u7684 scope \u662f\u6240\u6709\u5e27\uff0c\u751a\u81f3\u53ef\u80fd\u4e00\u90e8\u5206\u539f\u6765\u5c5e\u4e8e\u64cd\u4f5c\u7cfb\u7edf\u7684\u5e27\uff0c\u56e0\u800c\u5b83\u80fd\u5b9e\u73b0\u4e00\u4e9b\u7c7b\u4f3c\u201c\u62a2\u5360\u201d\u7684\u6548\u679c\uff1b
      • Free-frame buffer pool \u5c31\u662f\u4e00\u79cd\u5929\u7136\u7684 global replacement \u7684\u5b9e\u73b0\u65b9\u5f0f\uff1b
    3. \u5982\u679c\u6211\u4eec\u7a0d\u5fae\u505a\u4e00\u4e9b\u8bbe\u8ba1\uff0c\u6bd4\u5982\u53ea\u5141\u8bb8\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u80fd\u591f\u7f6e\u6362\u4f4e\u4f18\u5148\u7ea7\u7684 frame\uff0c\u5373 priority replacement\uff0c\u5219\u9ad8\u4f18\u5148\u7ea7\u7684\u8fdb\u7a0b\u4f7f\u7528\u7684 frame \u53ef\u80fd\u8d8a\u6765\u8d8a\u591a\uff0c\u8fdb\u800c\u4e0d\u65ad\u4f18\u5316\u9ad8\u4f18\u5148\u7ea7\u8fdb\u7a0b\u7684\u6548\u7387\uff1b

    \u5f53\u7136\uff0c\u6211\u4eec\u9700\u8981\u7ef4\u62a4\u6bcf\u4e2a\u8fdb\u7a0b\u6240\u62e5\u6709\u7684 frame \u6570\u91cf\u88ab minimum frame number \u7ed9 bound \u9650\u4f4f\u3002

    \u5bf9\u6bd4 local replacement \u548c global replacement\uff0c\u4e3b\u8981\u5c31\u662f\u4e00\u4e2a\u5c01\u95ed\u6027\u548c\u7075\u6d3b\u6027\u7684 trade-off\uff0c\u5f88\u76f4\u89c2\uff1aglobal replacement \u5206\u914d\u66f4\u7075\u6d3b\uff0c\u5185\u5b58\u7684\u5229\u7528\u7387\u66f4\u9ad8\uff0c\u4f46\u5bf9\u4e8e frame \u88ab\u201c\u62a2\u201d\u7684\u8fdb\u7a0b\u6765\u8bf4\uff0c\u6574\u4f53\u8fd0\u884c\u7684\u6548\u7387\u5c31\u4e0d\u7a33\u5b9a\u4e86\uff1b\u53cd\u89c2 local replacement\uff0c\u867d\u7136\u7531\u4e8e\u80fd\u591f\u5229\u7528\u7684\u5185\u5b58\u6709\u9650\uff0c\u53ef\u80fd\u51fa\u73b0\u522b\u7684\u8fdb\u7a0b\u7701\u4e86\u4e0d\u5c11\u4f46\u662f\u81ea\u5df1\u5f88\u5403\u7d27\u7684\u60c5\u51b5\uff0c\u51fa\u73b0\u5185\u5b58\u5229\u7528\u7387\u8f83\u4f4e\u7684\u60c5\u51b5\uff0c\u4f46\u6574\u4f53\u6765\u8bf4\u8f83\u4e3a\u7a33\u5b9a\uff0c\u8fdb\u7a0b\u4e4b\u95f4\u76f8\u5bf9\u6765\u8bf4\u4e0d\u4f1a\u4e92\u76f8\u5e72\u6270\u3002

    \u4e0a\u9762\u662f\u4e66\u4e0a\u7684\u610f\u601d\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u4e2a\u8bc4\u4ef7\u8fd8\u662f\u4e0d\u516c\u5e73\u7684\uff0c\u56e0\u4e3a\u6240\u8c13\u7684\u3001\u5c5e\u4e8e\u8fdb\u7a0b\u7684 frames \u7684\u6570\u91cf\u662f\u4f1a\u53d8\u7684\uff0c\u5728\u65b0\u7684\u8fdb\u7a0b\u88ab allocation \u540e\uff0c\u8fdb\u7a0b\u603b\u6570\u4f1a\u589e\u52a0\uff0c\u800c\u8fd9\u4e2a\u65b0\u8fdb\u7a0b\u53ea\u80fd\u4ece\u522b\u7684\u5730\u65b9\u522e\u4e00\u4e9b\u5185\u5b58\u6765\u7528\uff0c\u6240\u4ee5\u5c31\u7b97\u7528\u7684\u662f local replacement\uff0c\u4e5f\u8bf4\u4e0d\u4e0a\u7279\u522b\u7a33\u5b9a\u3002

    \u800c\u5982\u4eca\u7684\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\u7684\u4e3b\u8981\u90fd\u662f global replacement\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u6296\u52a8","title":"\u6296\u52a8","text":"

    \u5018\u82e5\u7cfb\u7edf\u7684\u591a\u9053\u7a0b\u5ea6\u8fc7\u9ad8\uff0c\u90a3\u4e48\u53ef\u80fd\u5206\u914d\u7ed9\u6bcf\u4e00\u4e2a process \u7684 frames \u6570\u91cf\u5c31\u4f1a\u6bd4\u8f83\u5c11\uff0cprocess \u6240\u4f7f\u7528\u7684 frames \u4e2d\u88ab\u9891\u7e41\u4f7f\u7528\u7684 page \u5360\u6bd4\u66f4\u5927\u3002\u8fd9\u65f6\u5019\u53ef\u80fd\u5c31\u4f1a\u4ea7\u751f\u8f83\u4e3a\u9891\u7e41\u7684 paging \u6d3b\u52a8\u2014\u2014\u51e0\u4e4e\u6240\u6709 frames \u90fd\u6b63\u5728\u88ab\u4f7f\u7528\uff0c\u76f8\u5f53\u4e8e\u6bcf\u6b21\u7f6e\u6362\u90fd\u4f1a\u5bfc\u81f4\u4e00\u4e2a\u65b0\u7684 page fault\u2014\u2014\u8fdb\u800c\u5bfc\u81f4 CPU \u7684\u5229\u7528\u7387\u4e0b\u964d\uff0c\u8fd9\u79cd\u73b0\u8c61\u88ab\u79f0\u4e3a\u6296\u52a8(thrashing)\u3002

    \u4f8b\u5982\uff0cprocess A \u53ef\u80fd\u62a2\u8d70\u4e86 process B \u7684\u6b63\u8981\u88ab\u4f7f\u7528\u7684 frame\uff0c\u4e8e\u662f\u5bfc\u81f4 process B \u4e4b\u540e\u4f1a\u4ea7\u751f\u4e00\u6b21 page fault\uff1b\u800c\u5728\u5904\u7406\u8fd9\u4e2a page fault \u7684\u65f6\u5019\uff0c\u53ef\u80fd\u53c8\u628a process C \u7684\u6b63\u8981\u4f7f\u7528\u7684 frame \u7ed9\u62a2\u8d70\u4e86\u2026\u2026

    early paging systems

    \u65e9\u671f\u7684\u8bbe\u8ba1\u4e2d\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u76d1\u63a7 CPU \u5229\u7528\u7387\uff0c\u5982\u679c\u53d1\u73b0 CPU \u5229\u7528\u7387\u4e0d\u591f\u9ad8\uff0c\u5c31\u4f1a\u8ba4\u4e3a CPU \u592a\u95f2\u4e86\uff0c\u4e8e\u662f\u5c1d\u8bd5\u589e\u52a0 degree of multiprogramming\u3002

    \u4f46\u5982\u679c CPU \u5229\u7528\u7387\u4e0b\u964d\u662f\u7531\u4e8e\u53d1\u751f thrashing\uff0c\u4ea7\u751f\u5927\u91cf I/O \u5bfc\u81f4\u7684\uff0c\u90a3 degree of multiprogramming \u7684\u589e\u52a0\u53cd\u800c\u4f1a\u52a0\u5267 thrashing\uff0c\u8fdb\u800c\u5bfc\u81f4 CPU \u5229\u7528\u7387\u4e0b\u964d\uff0c\u5f62\u6210\u6076\u6027\u5faa\u73af\u3002

    \u5728\u9047\u5230 thrashing \u95ee\u9898\u7684\u65f6\u5019\uff0c\u7406\u8bba\u4e0a\u6211\u4eec\u5e94\u5f53\u964d\u4f4e degree of multiprogramming \u624d\u5bf9\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u4f7f\u7528-priority","title":"\u4f7f\u7528 Priority","text":"

    \u53ef\u4ee5\u60f3\u8c61\u5230\uff0c\u8fd9\u91cc\u51fa\u73b0\u4e86\u4e00\u79cd\u7c7b\u4f3c\u4e8e\u4e92\u76f8\u62a2 frame \u7684\u60c5\u51b5\u3002\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u8ba9\u4e00\u65b9\u201c\u8ba9\u6b65\u201d\u6765\u89e3\u51b3\uff0c\u4f8b\u5982\u4f7f\u7528 priority replacement algorithm \u6765\u89e3\u51b3\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#working-set","title":"Working Set","text":"

    \u8fd8\u6709\u4e00\u79cd\u57fa\u4e8e\u5c40\u90e8\u6027\u5047\u8bbe\u7684\u505a\u6cd5\uff0c\u53eb working set model\u3002\u5b83\u7684\u5927\u81f4\u601d\u8def\u662f\u5c06\u300c\u6bcf\u4e00\u4e2a\u8fdb\u7a0b\u5728\u4e00\u4e2a \\(\\Delta\\) \u65f6\u95f4\u7a97\u53e3\u5185\u7528\u5230\u8fc7\u7684 frame\u300d\u5efa\u6a21\u4e3a\u4e00\u4e2a\u8fdb\u7a0b\u7684 working set \\(WS_i\\)\uff0c\u5982\u679c \\(\\sum_i |WS_i| > m\\)\uff0c\u5373\u6240\u6709\u8fdb\u7a0b\u7684 working set \u7684\u5927\u5c0f\u4e4b\u548c\u5927\u4e8e\u53ef\u7528 frame \u7684\u6570\u91cf\uff0c\u90a3\u4e48\u5c31\u53ef\u80fd\u4f1a\u51fa\u73b0 thrashing\u3002\u6b64\u65f6\u64cd\u4f5c\u7cfb\u7edf\u53ef\u80fd\u5c31\u4f1a\u9009\u62e9\u6302\u8d77\u67d0\u4e2a process\uff0c\u4ee5\u964d\u4f4e degree of multiprogramming\u3002\u8fd9\u4e2a\u505a\u6cd5\u7684\u4e00\u4e2a\u95ee\u9898\u548c LRU \u662f\u7c7b\u4f3c\u7684\uff0c\u8981\u53bb\u7ef4\u62a4 \\(WS_i\\) \u662f\u6bd4\u8f83\u5403\u529b\u7684\uff0c\u800c\u89e3\u51b3\u529e\u6cd5\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u6211\u4eec\u53ef\u4ee5\u8fd1\u4f3c\u5730\u53bb\u7ef4\u62a4 \\(WS_i\\)\u3002

    \u8be6\u7ec6\u5185\u5bb9\u4e0d\u518d\u5c55\u5f00\uff0c\u8bfb\u8005\u53ef\u4ee5\u53c2\u8003 Wiki \u505a\u66f4\u591a\u4e86\u89e3\u3002\u6b64\u5916\uff0cworking set \u7684\u601d\u8def\u53ef\u4ee5\u7528\u4e8e\u5b9e\u73b0 pre-paging\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#pff","title":"PFF","text":"

    \u6216\u8005\u4e5f\u80fd\u5229\u7528\u7f3a\u9875\u9891\u7387(Page-Fault Frequency, PFF)\u6765\u505a\u52a8\u6001\u8c03\u8282\uff0c\u7531\u4e8e PFF \u4e0e\u8fdb\u7a0b\u53ef\u7528\u7684 frames \u6570\u91cf\u5927\u81f4\u6210\u8d1f\u76f8\u5173\uff0c\u6211\u4eec\u53ef\u4ee5\u8bbe\u5b9a\u4e0a\u4e0b\u754c\u5e76\u8fdb\u884c\u8d1f\u53cd\u9988\u63a7\u5236\uff1aprocess \u7684 PFF \u8fc7\u9ad8\u65f6\u589e\u52a0\u5b83\u53ef\u7528\u7684 frames \u6570\u91cf\uff0c\u5f53 process \u7684 PFF \u8f83\u4f4e\u65f6\u53ef\u4ee5\u51cf\u5c11\u5b83\u53ef\u7528\u7684 frames \u6570\u91cf\u3002

    \u4e0d\u8fc7\uff0c\u5bf9\u4e8e\u8be5\u95ee\u9898\uff0c\u5148\u884c\u7684\u6700\u4f73\u89e3\u51b3\u65b9\u6848\u5176\u5b9e\u662f\u589e\u52a0\u7269\u7406\u5185\u5b58\uff0c\u4ece\u786c\u4ef6\u4e0a\u89e3\u51b3\u95ee\u9898\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u5185\u5b58\u538b\u7f29","title":"\u5185\u5b58\u538b\u7f29","text":"

    \u5185\u5b58\u538b\u7f29(memory compression)\u7684\u601d\u8def\u533a\u522b\u4e8e swap\uff0c\u628a frame \u6362\u5230 backing store \u91cc\uff0c\u800c\u4e14\u5c1d\u8bd5\u53bb merge \u4e00\u4e9b frame\uff0c\u5373\u5229\u7528\u5185\u90e8\u788e\u7247\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#\u5185\u6838\u5185\u5b58","title":"\u5185\u6838\u5185\u5b58","text":"

    \u6211\u4eec\u4e4b\u524d\u8ba8\u8bba\u7684\u5185\u5b58\u7ba1\u7406\u673a\u5236\uff0c\u5c24\u5176\u662f\u5185\u5b58\u7684\u5206\u914d\u548c\u7f6e\u6362\u673a\u5236\uff0c\u90fd\u662f\u9488\u5bf9 user process \u7684\u3002\u800c\u5185\u6838\u7684\u8fd0\u884c\u540c\u6837\u9700\u8981 memory\uff0c\u4f46\u5b83\u4e0d\u80fd\u4f7f\u7528\u548c user process \u76f8\u540c\u7684\u5185\u5b58\u8bbe\u8ba1\u3002\u7531\u4e8e kernel \u7a0b\u5e8f\u662f\u4e00\u76f4\u8fd0\u884c\u7684\uff0c\u6240\u4ee5\u6211\u4eec\u5fc5\u987b\u66f4\u4fdd\u5b88\u5730\u4f7f\u7528\u5185\u5b58\uff0c\u8bf8\u5185\u90e8\u788e\u7247\u7684\u95ee\u9898\u5e94\u5f53\u5c3d\u53ef\u80fd\u907f\u514d\uff0c\u4e8b\u5b9e\u4e0a\uff0c\u8bb8\u591a\u64cd\u4f5c\u7cfb\u7edf\u90fd\u5bf9 kernel \u4f7f\u7528 paging \u8bbe\u8ba1\u3002\u518d\u52a0\u4e0a\u7531\u4e8e kernel \u9700\u8981\u548c\u4e00\u4e9b\u786c\u4ef6\u505a\u4ea4\u4e92\uff0c\u800c\u8bb8\u591a\u786c\u4ef6\u8bbe\u5907\u90fd\u53ea\u76f4\u63a5\u4e0e\u7269\u7406\u5185\u5b58\u505a\u4ea4\u4e92\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u9700\u8981\u5bf9 kernel \u5185\u5b58\u5728\u7269\u7406\u5185\u5b58\u4e0a\u7684\u8fde\u7eed\u6027\u6709\u4e00\u5b9a\u4fdd\u8bc1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#buddy-\u7cfb\u7edf","title":"Buddy \u7cfb\u7edf","text":"

    Buddy systemWiki \u53ef\u4ee5\u7528\u6765\u5206\u914d\u7269\u7406\u8fde\u7eed\u7684\u5185\u5b58\uff0c\u5b83\u7531 power-of-2 allocator \u5b9e\u73b0\u3002

    \u5f53 kernel \u9700\u8981 \\(n\\) KB \u7684\u5185\u5b58\u65f6\u5019\uff0cBuddy system \u4f1a\u5206\u914d\u4e00\u5757 \\(2^k\\) KB \u7684\u7a7a\u95f4\uff0c\u5176\u4e2d \\(k = \\lceil \\log_2{n} \\rceil\\)\u3002

    \u663e\u800c\u6613\u89c1\u7684\uff0c\u8fd9\u6837\u8fd8\u662f\u5bb9\u6613\u51fa\u73b0\u5185\u90e8\u788e\u7247\uff0cBuddy system \u65e0\u6cd5\u89e3\u51b3\u8fd9\u79cd\u5185\u90e8\u788e\u7247\uff0c\u4f46\u662f\u7a0d\u5019\u63a5\u53d7\u7684 Slab allocation \u53ef\u4ee5\u3002

    \u5177\u4f53\u6765\u8bf4\uff0cBuddy system \u901a\u8fc7\u4e0d\u65ad\u4e8c\u5206\u7684\u65b9\u5f0f\u6765\u5bfb\u627e\u4e00\u5757\u5408\u9002\u7684\u5185\u5b58\uff0c\u5982\u4e0b\u56fe\uff1a

    \u4f8b\u5982 kernel \u7533\u8bf7\u4e00\u5757 21KB \u7684\u5185\u5b58\uff0c\u90a3\u4e48 \\(C_L\\) \u5c31\u662f\u6211\u4eec\u6700\u7ec8\u5206\u914d\u7684\u5185\u5b58\u3002

    Buddy system \u8fd8\u6709\u4e00\u4e2a\u7279\u70b9\u662f\uff0c\u5b83\u901a\u8fc7 coalesce \u76f8\u90bb\u7684\u7a7a\u95f2\u5757\u6765\u5f62\u6210\u66f4\u5927\u7684\u5185\u5b58\u5757\uff0c\u4f8b\u5982\u4e0a\u56fe\u53ef\u4ee5\u6309\u7167\u5206\u88c2\u7684\u65b9\u5f0f\u5408\u5e76\u56de 256 KB \u7684\u5927\u5185\u5b58\u5757\uff08\u5408\u5e76\u5927\u5185\u5b58\uff09\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit3-Part2/#slab-\u5206\u914d","title":"Slab \u5206\u914d","text":"

    Slab \u5206\u914d\u7684\u5927\u6982\u601d\u8def\u662f\u9884\u5148\u4e86\u89e3\u5230 kernel \u5185\u7684\u5e38\u89c1\u6570\u636e\u7ed3\u6784\uff08\u88ab\u79f0\u4e3a\u5404\u79cd object\uff09\u7684\u5927\u5c0f\uff0c\u5e76\u9884\u5148\u51c6\u5907\u597d\u5bf9\u5e94\u7c92\u5ea6\u7684\u5c0f\u5185\u5b58\u5757\uff0c\u6ce8\u518c\u5230\u6bcf\u7c7b object \u7684 cache \u91cc\u3002\u5f53\u4e00\u4e2a object \u9700\u8981\u4f7f\u7528\u5185\u5b58\u65f6\uff0c\u5c31\u67e5\u8be2\u5bf9\u5e94\u7684 cache \u91cc\u662f\u5426\u6709\u7a7a\u95f2\u7684\u5185\u5b58\u5757\uff0c\u5982\u679c\u6709\u5c31\u5206\u914d\u7ed9\u5b83\uff0c\u5982\u679c\u6ca1\u6709\u5c31\u5411 Buddy system \u7533\u8bf7\u3002

    \u76f8\u5f53\u4e8e\u9884\u5148\u628a\u5185\u5b58\u5206\u6210\u4e86\u82f9\u679c\u5c0f\u76d2\u3001\u51b0\u7bb1\u5927\u7bb1\u3001\u8d85\u5927\u8f66\u5e93\uff0c\u7136\u540e\u6839\u636e\u8981\u653e\u7684\u4e1c\u897f\u7684\u5927\u5c0f\u9009\u62e9\u5408\u9002\u7684\u7a7a\u95f4\u6765\u653e\u3002

    1. Linux OOM (Out-of-memory) Killer | Medium \u21a9

    2. Enhanced Second-Chance Algorithm \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/","title":"Unit 4: \u8f93\u5165/\u8f93\u51fa | I/O","text":"

    \u7ea6 1284 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u8bf4\u660e

    \u8fd9\u90e8\u5206\u5185\u5bb9\uff08\u5176\u5b9e\u4e5f\u5305\u62ec\u4e4b\u540e\u7684\u5185\u5bb9\uff09\u5199\u7684\u6bd4\u8f83\u7b80\u7565\uff0c\u56e0\u4e3a\u8bf4\u662f\u4e0d\u592a\u96be\uff0c\u4e3b\u8981\u662f\u671f\u672b\u4e86\u6211\u4e5f\u6ca1\u5fc3\u601d\u5199\u592a\u7ec6\u4e86\uff0c\u5982\u679c\u6709\u597d\u4eba\u53ef\u4ee5\u5e2e\u6211\u5b8c\u5584\u4e00\u4e0b\u3002

    \u5bfc\u8bfb

    I/O \u662f\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\u7684\u91cd\u8981\u7ec4\u6210\u90e8\u5206\uff0c\u5b83\u662f\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e0e\u5916\u90e8\u4e16\u754c\u4ea4\u6362\u4fe1\u606f\u7684\u901a\u9053\u3002I/O \u8bbe\u5907\u7684\u79cd\u7c7b\u5f88\u591a\uff0c\u5982\u78c1\u76d8\u3001\u6253\u5370\u673a\u3001\u952e\u76d8\u3001\u9f20\u6807\u3001\u663e\u793a\u5668\u3001\u7f51\u5361\u7b49\uff0c\u627f\u62c5\u4e86\u5b58\u50a8\u3001\u901a\u4fe1\u3001\u4eba\u673a\u4ea4\u4e92\u7b49\u82e5\u5e72\u529f\u80fd\u3002\u800c\u6211\u4eec\u77e5\u9053 I/O \u53c8\u662f CPU \u7684\u91cd\u8981\u74f6\u9888\uff0c\u6240\u4ee5 I/O \u7cfb\u7edf\u7684\u8bbe\u8ba1\u662f\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u95ee\u9898\u3002\uff08\u4f46\u4e0d\u662f\u4e00\u4e2a\u91cd\u8981\u7684\u8003\u70b9\uff1f\uff09

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/#io-\u6982\u8ff0","title":"I/O \u6982\u8ff0","text":"

    concepts

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/#io-\u8bbf\u95ee\u65b9\u5f0f","title":"I/O \u8bbf\u95ee\u65b9\u5f0f","text":"

    \u5f53\u8ba1\u7b97\u673a\u9700\u8981\u8bbe\u5907\u505a\u67d0\u4e9b\u4e8b\u7684\u65f6\u5019\uff0c\u53d1\u51fa\u8bf7\u6c42\uff0c\u6b64\u65f6\u8ba1\u7b97\u673a\u9700\u8981\u7b49\u5f85\u8bbe\u5907\u7684\u54cd\u5e94\uff0c\u6309\u7167\u7b49\u5f85\u65b9\u5f0f\u7684\u4e0d\u540c\uff0c\u5206\u4e3a\u8f6e\u8be2(polling)\u3001\u4e2d\u65ad(interrupt)\u4e24\u79cd\u3002

    polling

    \u8f6e\u8be2\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e0e I/O \u8bbe\u5907\u4ea4\u4e92\u7684\u6700\u7b80\u5355\u65b9\u5f0f\u3002\u901a\u5e38\u8bbe\u5907\u4f1a\u7528\u67d0\u79cd\u65b9\u5f0f\u6765\u6807\u8bc6\u8bbe\u5907\u662f\u5426\u53ef\u7528\u6216\u7a7a\u95f2\uff0c\u8f6e\u8be2\u6307\u7684\u662f CPU \u4e0d\u65ad\u5411\u8bbe\u5907\u63a7\u5236\u5668\u67e5\u8be2\u8bbe\u5907\u72b6\u6001\uff0c\u76f4\u5230\u8bbe\u5907\u5c31\u7eea\uff0c\u7136\u540e\u8fdb\u884c\u6570\u636e\u4f20\u8f93\u3002\u8fd9\u79cd\u65b9\u5f0f\u7684\u7f3a\u70b9\u662f\u9700\u8981\u8fdb\u884c busy wait\uff0c\u5728\u8bbe\u5907\u6bd4\u8f83\u7f13\u6162\u7684\u60c5\u51b5\u4e0b\u4f1a\u964d\u4f4e CPU \u7684\u5229\u7528\u7387\u3002

    interrupt

    \u6211\u4eec\u5df2\u7ecf\u5728 Overview \u8bb2\u8fc7\u4e2d\u65ad\u4e86\uff0c\u6240\u4ee5\u6709\u5173\u4e2d\u65ad\u7684\u5177\u4f53\u6280\u672f\u7ec6\u8282\u5c31\u4e0d\u518d\u5c55\u5f00\u3002

    \u73b0\u4ee3\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\uff0c\u4e2d\u65ad\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e0e I/O \u8bbe\u5907\u4ea4\u4e92\u7684\u4e3b\u8981\u65b9\u5f0f\uff0c\u8ba1\u7b97\u673a\u5411\u8bbe\u5907\u53d1\u51fa\u8bf7\u6c42\u4ee5\u540e\uff0c\u53ef\u4ee5\u5c06\u5f53\u524d\u8fdb\u7a0b\u8c03\u5ea6\u8d70\uff0c\u7b49\u5230\u8bbe\u5907\u5904\u7406\u5b8c\u6210\u540e\u4f1a\u5411 CPU \u53d1\u9001\u4e2d\u65ad\uff0c\u6b64\u65f6\u8ba1\u7b97\u673a\u518d\u5bf9\u7ed3\u679c\u505a\u5904\u7406\u3002\u4e2d\u65ad\u7684\u4f18\u70b9\u662f CPU \u4e0d\u9700\u8981\u8fdb\u884c busy wait\uff0c\u5728\u8bbe\u5907\u5904\u7406\u65f6\u95f4\u8fdc\u5927\u4e8e\u4e0a\u4e0b\u6587\u4ea4\u6362\u7684\u60c5\u51b5\u4e0b\u53ef\u4ee5\u63d0\u9ad8 CPU \u7684\u5229\u7528\u7387\u3002

    Interrupt-driven I/O cycle.

    \u5b9e\u9645\u4e0a\u4f7f\u7528\u54ea\u79cd\u65b9\u6848\uff0c\u5176\u5b9e\u4e0e \u201cbusy wait\u201d \u7684\u4f18\u52a3\u8fd9\u4e2a\u95ee\u9898\u662f\u7b49\u4ef7\u7684\uff0c\u6211\u4eec\u5df2\u7ecf\u5728\u540c\u6b65\u4e2d\u6709\u6240\u6d89\u53ca\u3002

    DMA

    \u4e0a\u9762\u63d0\u5230\u7684\u4e24\u79cd\u65b9\u6cd5\u90fd\u662f\u57fa\u4e8e CPU \u5168\u6743\u8d1f\u8d23 I/O \u4e0e\u5185\u5b58\u4ea4\u4e92\u7684\u5047\u8bbe\u3002\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e9b\u4e8b\u60c5\u53ef\u80fd\u5e76\u4e0d\u9700\u8981\u5fc5\u987b\u7531 CPU \u6765\u8d1f\u8d23\u3002DMA(direct memory access)\u5141\u8bb8\u5185\u5b58\u548c I/O \u8bbe\u5907\u4e4b\u95f4\u76f4\u63a5\u4ea4\u4e92\uff0c\u4e0d\u7ecf\u8fc7 CPU\uff0c\u8fd9\u6837\u53ef\u4ee5\u51cf\u5c11 CPU \u7684\u8d1f\u62c5\uff0c\u63d0\u9ad8 I/O \u6027\u80fd\u3002DMA \u901a\u5e38\u7531\u72ec\u7acb\u7684\u786c\u4ef6\u8bbe\u5907 DMA controller \u6765\u5b9e\u73b0\u3002

    \u5bb9\u6613\u60f3\u8c61\uff0cDMA \u6709\u4e00\u5b9a\u9650\u5236\uff0c\u901a\u5e38 DMA \u53ea\u8d1f\u8d23\u505a\u5927\u91cf\u7684\u3001\u4ee5 blocks \u4e3a\u5355\u4f4d\u7684\u6570\u636e\u4f20\u8f93\uff0c\u800c\u4e0d\u662f\u5355\u4e2a\u5b57\u8282\u7684\u4f20\u8f93\u3002CPU \u9700\u8981\u5411 DMA controller \u53d1\u51fa\u5bf9\u5e94\u7684\u547d\u4ee4\uff0c\u4e4b\u540e\u7684\u4e8b\u60c5\u5c31\u4ea4\u7ed9 DMA \u6765\u5b8c\u6210\u3002\u547d\u4ee4\u901a\u5e38\u5305\u62ec\u64cd\u4f5c\u7c7b\u578b\u3001\u8d77\u59cb\u5730\u5740\u3001\u6570\u636e\u957f\u5ea6\u7b49\uff0c\u4f20\u8f93\u65b9\u5f0f\u4e00\u822c\u662f\u628a\u8981\u6267\u884c\u7684\u6307\u4ee4\u7684\u5730\u5740\u5b58\u5230 DMA controller \u7684\u5bc4\u5b58\u5668\u4e2d\uff0c\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u59d4\u6258 DMA controller \u8fdb\u884c\u4f5c\u4e1a\uff0c\u6709\u70b9\u50cf\u56de\u8c03\u51fd\u6570\u3002

    \u5f53\u64cd\u4f5c\u5b8c\u6210\u540e\uff0cDMA controller \u4f1a\u5411 CPU \u53d1\u9001\u4e2d\u65ad\u4fe1\u53f7\uff0c\u8868\u793a\u4efb\u52a1\u5b8c\u6210\u3002

    The life cycle of an I/O request.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit4/#\u5e94\u7528\u7a0b\u5e8f-io-\u63a5\u53e3","title":"\u5e94\u7528\u7a0b\u5e8f I/O \u63a5\u53e3","text":"

    \u968f\u7740\u6280\u672f\u53d1\u5c55\uff0c\u64cd\u4f5c\u7cfb\u7edf\u5bf9\u6807\u51c6\u5316\u3001\u901a\u7528\u5316\u7684 I/O \u65b9\u5f0f\u7684\u9700\u6c42\u4e0e\u5e02\u573a\u591a\u5143\u5316\u3001\u5dee\u5f02\u5316\u7684 I/O \u8bbe\u5907\u4e4b\u95f4\u7684\u77db\u76fe\u65e5\u76ca\u7a81\u51fa\u3002\u56e0\u6b64\uff0c\u4e00\u5957\u901a\u7528\u7684\u3001\u6807\u51c6\u5316\u7684 I/O \u63a5\u53e3\u662f\u5341\u5206\u5fc5\u8981\u7684\u3002\u4e8e\u662f\uff0c\u64cd\u4f5c\u7cfb\u7edf\u80fd\u591f\u4f7f\u7528\u7cfb\u7edf\u8c03\u7528\u5c01\u88c5 I/O \u64cd\u4f5c\uff0c\u5c06\u4e0d\u540c\u64cd\u4f5c\u7684\u5dee\u5f02\u6027\u900f\u660e\u5316\uff0c\u5728 UNIX \u4e2d\uff0c\u8fd9\u4e2a\u7cfb\u7edf\u8c03\u7528\u662f ioctlWiki\u3002

    A kernel I/O structure.

    \u5177\u4f53\u6765\u8bf4\uff0c\u4e0d\u540c\u8bbe\u5907\u53ef\u80fd\u5728\u8fd9\u4e9b\u65b9\u9762\u6709\u533a\u522b\uff1a

    dimensions

    \u4fee\u6539\u81ea xyx \u7684\u64cd\u4f5c\u7cfb\u7edf\u7b14\u8bb0\u3002

    1. Bus (computing) | Wikipedia \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/","title":"Unit 5: \u5b58\u50a8 | Storage","text":"

    \u7ea6 2955 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 15 \u5206\u949f

    \u8bf4\u660e

    \u8fd9\u90e8\u5206\u5185\u5bb9\uff08\u5176\u5b9e\u4e5f\u5305\u62ec\u4e4b\u540e\u7684\u5185\u5bb9\uff09\u5199\u7684\u6bd4\u8f83\u7b80\u7565\uff0c\u56e0\u4e3a\u8bf4\u662f\u4e0d\u592a\u96be\uff0c\u4e3b\u8981\u662f\u671f\u672b\u4e86\u6211\u4e5f\u6ca1\u5fc3\u601d\u5199\u592a\u7ec6\u4e86\uff0c\u5982\u679c\u6709\u597d\u4eba\u53ef\u4ee5\u5e2e\u6211\u5b8c\u5584\u4e00\u4e0b\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u786c\u76d8","title":"\u786c\u76d8","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u7ed3\u6784","title":"\u7ed3\u6784","text":"

    \u786c\u76d8(hard disk, HD)\u662f\u5e38\u89c1\u7684\u4e8c\u7ea7\u5b58\u50a8\uff0c\u5176\u7ed3\u6784\u6309\u7167\u4ece\u5c0f\u5230\u5927\u5206\u4e3a\uff1a\u6247\u533a(sectors)\u3001\u78c1\u9053(tracks)\u3001\u67f1\u9762(cylinders)\uff0c\u4fa7\u9762\u7684\u78c1\u81c2(disk arm)\u4f1a\u4ee5\u6574\u4f53\u79fb\u52a8\u4e0a\u9762\u7684\u6240\u6709\u8bfb\u5199\u78c1\u5934(r/w heads)\u3002

    HDD moving-head disk mechanism.

    \u4ece\u786c\u76d8\u4e0a\u8bfb\u5199\u5185\u5bb9\u7684\u8fc7\u7a0b\u5982\u4e0b\uff1a

    steps

    1. \u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u67f1\u9762\uff1b
    2. \u78c1\u5934\u79fb\u52a8\u5230\u6307\u5b9a\u7684\u78c1\u9053\uff1b
    3. \u78c1\u76d8\u65cb\u8f6c\u5230\u6247\u533a\u4f4d\u4e8e\u78c1\u5934\u4e0b\u65b9\uff1b
    4. \u8bfb\u5199\u6247\u533a\u5185\u5bb9\uff1b

    \u6309\u7167\u5176\u673a\u68b0\u8fc7\u7a0b\uff0cdisk I/O \u64cd\u4f5c\u7684\u4e3b\u8981\u65f6\u95f4\u6784\u6210\u4e3a\uff1a

    components

    \u56e0\u6b64\uff0cdisk \u7684\u5e73\u5747 I/O \u64cd\u4f5c\u65f6\u95f4\u4e3a\uff1a

    \\[ \\begin{aligned} \\text{Average I/O time} &= \\underbrace{\\text{average seek time} + \\text{rotational latency}}_\\text{average access time} \\\\ &+ \\underbrace{\\frac{\\text{data to transfer}}{\\text{transfer rate}}}_{\\text{transfer time}} \\\\ &+ \\text{controller overhead} \\end{aligned} \\] \ud83c\udf30

    \u7ed9\u51fa\u4e00\u4e2a\u5305\u542b\u5177\u4f53\u53c2\u6570\u7684\u4f8b\u5b50\u6765\u611f\u53d7 I/O \u64cd\u4f5c\u6162\u5728\u54ea\u91cc

    \u4e00\u4e2a 7200 rpm \u7684\u786c\u76d8\uff08\u6240\u4ee5\u65cb\u8f6c\u65f6\u5ef6\u4e3a 4.17 ms\uff09\uff0c\u5176\u5e73\u5747\u5bfb\u9053\u65f6\u95f4\u4e3a 5 ms\uff0c\u4f20\u8f93\u901f\u7387\u4e3a 1 Gb/sec\uff0c\u63a7\u5236\u5668\u5f00\u9500\u4e3a 0.1 ms\uff0c\u90a3\u4e48\u8bfb\u53d6 4 KB \u7684\u6570\u636e\u5bf9\u5e94\u7684\u5e73\u5747 I/O \u64cd\u4f5c\u65f6\u95f4\u4e3a\uff1a

    \\[ 5 \\text{ms} + 4.17 \\text{ms} + \\frac{4 \\times 1000 \\times 8}{1 \\times 1000 \\times 1000 \\times 1000} \\text{sec} + 0.1 \\text{ms} = 9.302 \\text{ms} \\]

    \u6839\u636e\u4e0a\u9762\u7684\u5206\u6790\u6211\u4eec\u4e0d\u96be\u5f97\u5230\u5982\u4e0b\u7ed3\u8bba\uff1a

    conclusion

    1. \u5f00\u9500\u7684\u5927\u5934\u662f access time\uff1b
    2. \u8bf7\u6c42\u6d89\u53ca\u7684\u5185\u5b58\u8ddd\u79bb\u8d8a\u8fdc\uff0c\u5177\u4f53\u7684 access time \u8d8a\u5927\uff1b
    3. \u6211\u4eec\u5728\u4e0d\u8003\u8651\u66f4\u65b0\u786c\u4ef6\u80fd\u529b\u7684\u60c5\u51b5\u4e0b\uff0c\u8981\u60f3\u964d\u4f4e I/O \u65f6\u95f4\uff0c\u5c31\u9700\u8981\u8ba9 I/O \u64cd\u4f5c\u7684\u5bf9\u8c61\u5c3d\u53ef\u80fd\u201c\u987a\u5e8f\u201d\uff1b

    \u56e0\u6b64\uff0c\u6211\u4eec\u63d0\u51fa disk scheduling\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u8c03\u5ea6","title":"\u8c03\u5ea6","text":"

    \u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u5f15\u5165\u4e00\u4e2a\u5ea6\u91cf\u91cf\uff1adisk bandwidth = \u4f20\u8f93\u6570\u636e\u91cf / \u8bf7\u6c42\u5f00\u59cb\u5230\u4f20\u8f93\u5b8c\u6210\u7684\u65f6\u95f4\u95f4\u9694\u3002\u6211\u4eec\u60f3\u63d0\u9ad8 I/O \u6027\u80fd\uff0c\u5b9e\u9645\u4e0a\u662f\u60f3\u63d0\u5347 disk bandwidth\u3002

    \u5728 I/O \u8bf7\u6c42\u5341\u5206\u7a00\u758f\u7684\u65f6\u5019\uff0cI/O \u64cd\u4f5c\u603b\u662f\u7a7a\u95f2\uff0c\u6bcf\u5f53\u51fa\u73b0\u4e00\u4e2a I/O \u8bf7\u6c42\u6211\u4eec\u5c31\u76f4\u63a5\u5904\u7406\uff0c\u5904\u7406\u8fc7\u7a0b\u4e2d\u4e5f\u6ca1\u6709\u5176\u5b83 I/O \u8bf7\u6c42\u51fa\u73b0\uff0c\u6b64\u65f6\u6211\u4eec\u6ca1\u6709\u529e\u6cd5\u6765\u52a0\u901f\u8fd9\u4e2a\u8fc7\u7a0b\u3002\u4f46\u5f53 I/O \u8bf7\u6c42\u6bd4\u8f83\u5bc6\u96c6\uff0c\u6211\u4eec\u9700\u8981\u7528\u4e00\u4e2a queue \u6765\u7ef4\u62a4\u7b49\u5f85\u4e2d\u7684\u8bf7\u6c42\uff0c\u6b64\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7 disk scheduling \u6765\u8c03\u6574\u8fd9\u4e9b\u8bf7\u6c42\u88ab\u5904\u7406\u7684\u987a\u5e8f\uff0c\u6765\u63d0\u9ad8 disk bandwidth\u3002\u800c disk scheduling \u5728\u8fd9\u4e2a queue \u5b58\u5728\u7684\u60c5\u51b5\u4e0b\u624d\u6709\u610f\u4e49\u3002

    \u6bcf\u4e00\u4e2a I/O \u8bf7\u6c42\u53ef\u80fd\u5305\u62ec\u8fd9\u4e9b\u4fe1\u606f\uff1a\u24f5 \u8f93\u5165\u8fd8\u662f\u8f93\u51fa\uff1b\u24f6 \u6307\u4ee3\u76ee\u6807\u6587\u4ef6\u7684\u6587\u4ef6\u53e5\u67c4\uff1b\u24f7 \u4f20\u8f93\u6d89\u53ca\u7684\u5185\u5b58\u5730\u5740\uff1b\u24f8 \u4f20\u8f93\u7684\u6570\u636e\u91cf\u2026\u2026

    \u5982\u4eca\u7684 disk driver \u4e0d\u5728\u5bf9\u64cd\u4f5c\u7cfb\u7edf\u66b4\u9732\u64cd\u4f5c\u7684 tracks\u3001sectors \u7b49\uff0c\u800c\u662f\u63d0\u4f9b\u4e0e\u7269\u7406\u5730\u5740\u76f8\u5173\u7684 logical block address(LBA)\uff0c\u800c logical block \u662f\u6570\u636e\u4f20\u8f93\u7684\u6700\u5c0f\u5355\u5143\u3002\u867d\u7136\u4e0d\u5b8c\u5168\u7b49\u4ef7\uff0c\u4f46\u662f\u6211\u4eec\u5728\u8ba8\u8bba disk scheduling \u7684\u65f6\u5019\u53ef\u4ee5\u8ba4\u4e3a LBA \u7684\u5c40\u90e8\u6027\u548c\u987a\u5e8f\u6027\u4e0e\u7269\u7406\u5730\u5740\u7684\u5c40\u90e8\u6027\u548c\u987a\u5e8f\u6027\u662f\u4e00\u81f4\u7684\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#fcfs","title":"FCFS","text":"

    \u53c8\u89c1 FCFS\uff0c\u4ecd\u7136\u4e00\u6837\uff0c\u5148\u8fdb queue \u7684\u5148\u5904\u7406\uff0c\u662f\u6700\u57fa\u672c\u7684 disk scheduling \u7b97\u6cd5\u3002\u7531\u4e8e\u6ca1\u6709\u5bf9\u6570\u636e\u505a\u4efb\u4f55\u8c03\u6574\uff0c\u6240\u4ee5\u4e5f\u5e76\u6ca1\u6709\u4efb\u4f55\u4f18\u5316\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#sstf","title":"SSTF","text":"

    SSTF \u5373 shortest seek time first\uff0c\u7531\u4e8e seek time \u57fa\u672c\u548c\u7269\u7406\u5730\u5740\u8ddd\u79bb\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u5c31\u662f\u603b\u662f\u9009\u62e9\u8ddd\u79bb\u5f53\u524d\u78c1\u5934\u6700\u8fd1\u7684\u90a3\u4e2a\u8bf7\u6c42\u53bb\u5904\u7406\u3002

    \u4e0d\u540c\u4e8e\u4e4b\u524d\u63d0\u5230\u8fc7\u7684 short xxx first \u7b97\u6cd5\uff0cSSTF \u5e76\u4e0d\u662f\u7406\u8bba\u6700\u4f18\u65b9\u6848\uff01

    Advantages

    Disadvantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#scan--lock","title":"SCAN & LOCK","text":"

    SCAN \u7b97\u6cd5\u4e0b\u78c1\u5934\u5728\u78b0\u5230 LBA \u8fb9\u754c\u524d\u53ea\u4f1a\u5355\u5411\u79fb\u52a8\uff0c\u800c\u5728\u79fb\u52a8\u8fc7\u7a0b\u4e2d\u5904\u7406\u80fd\u591f\u5904\u7406\u7684\u8bf7\u6c42\u3002\u8fd9\u6837\u4fdd\u8bc1\u4e86\u5904\u7406\u8bf7\u6c42\u7684\u8fc7\u7a0b\u4e2d\u603b\u662f\u987a\u5e8f\u7684\u3002

    SCAN disk scheduling.

    Advantages

    Disadvantages

    \u5982\u679c\u6211\u4eec\u4e0d\u8d70\u5230\u5e95\uff0c\u800c\u662f\u8d70\u5230\u6700\u9760\u8fd1\u8fb9\u754c\u7684\u8bf7\u6c42\u5bf9\u5e94\u7684 LBA \u5c31\u63d0\u524d\u6389\u5934\uff0c\u90a3\u4e48\u5c31\u662f LOCK \u7b97\u6cd5\u3002\u663e\u800c\u6613\u89c1\u7684\uff0cLOCK \u7b97\u6cd5\u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 SCAN\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#c-scan--c-lock","title":"C-SCAN & C-LOCK","text":"

    C-SCAN \u5373 Circular SCAN\uff0cC-SCAN \u4e0e SCAN \u7684\u552f\u4e00\u533a\u522b\u662f\uff0cC-SCAN \u7684\u78c1\u5934\u79fb\u52a8\u662f\u59cb\u7ec8\u5355\u5411\u7684\uff0c\u5f53\u78c1\u5934\u8fbe\u5230 LBA \u7684\u8fb9\u754c\u65f6\uff0c\u5f84\u76f4\u8fd4\u56de\u5230\u53e6\u4e00\u7aef\uff0c\u56de\u7a0b\u4e2d\u4e0d\u54cd\u5e94\u4efb\u4f55\u8bf7\u6c42\uff0c\u7c7b\u4f3c\u4e8e\u201c\u9996\u5c3e\u76f8\u649e\u201d\u4e86\uff0c\u6240\u4ee5\u624d\u53eb \u201ccircular\u201d\u3002

    C-SCAN disk scheduling.

    Advantages

    \u7c7b\u4f3c\u7684\uff0c\u5982\u679c\u6211\u4eec\u4e0d\u8d70\u5230\u5e95\uff0c\u5728\u5904\u7406\u5b8c\u6700\u9760\u8fd1\u8fb9\u754c\u7684\u8bf7\u6c42\u540e\u5c31\u76f4\u63a5\u8fd4\u56de\uff1b\u5bf9\u5e94\u7684\uff0c\u5728\u8fd4\u7a0b\u7684\u65f6\u5019\u4e0d\u662f\u8fd4\u56de\u5230\u6700\u4f4e LBA\uff0c\u800c\u662f\u4ece\u6700\u9760\u8fd1\u8fb9\u754c\u7684\u8bf7\u6c42\u5f00\u59cb\uff0c\u90a3\u4e48\u5c31\u662f C-LOCK \u7b97\u6cd5\u3002\u540c\u6837\uff0cC-LOCK \u53ef\u4ee5\u51cf\u5c11\u4e00\u4e9b\u4e0d\u5fc5\u8981\u7684 C-SCAN\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u8c03\u5ea6\u7b97\u6cd5\u7684\u9009\u62e9","title":"\u8c03\u5ea6\u7b97\u6cd5\u7684\u9009\u62e9","text":"

    Disk scheduling \u5e94\u5f53\u88ab\u8bbe\u8ba1\u4e3a\u4e00\u4e2a\u53ef\u66ff\u6362\u7684\u6a21\u5757\uff0c\u8fd9\u6837\u6211\u4eec\u53ef\u4ee5\u6839\u636e\u4e0d\u540c\u7684\u5e94\u7528\u573a\u666f\u9009\u62e9\u4e0d\u540c\u7684\u7b97\u6cd5\u3002\u901a\u5e38\uff0cSSTF \u662f\u6bd4\u8f83\u5e38\u89c1\u7684\u9ed8\u8ba4\u9009\u62e9\uff1b\u800c\u5f53 I/O \u8f83\u4e3a\u9891\u7e41\u7684\u65f6\u5019\uff0c\u4e00\u822c\u4f7f\u7528 LOCK \u6216\u8005 C-LOCK\u3002

    \u8868\u73b0\u672c\u8eab\u4f9d\u8d56\u4e8e\u8bf7\u6c42\u7684\u6a21\u5f0f\uff0c\u800c\u8bf7\u6c42\u672c\u8eab\u53c8\u4f9d\u8d56\u4e8e\u6587\u4ef6\u5206\u914d\u7b56\u7565\u3002\u6587\u4ef6\u7cfb\u7edf\u5982\u679c\u6ce8\u91cd\u7a7a\u95f4\u5c40\u90e8\u6027\uff0c\u80fd\u591f\u63d0\u4f9b\u5f88\u597d\u7684\u8868\u73b0\u63d0\u5347\u3002\u2014\u2014xyx \u7684\u7b14\u8bb0

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u975e\u6613\u5931\u6027\u5185\u5b58","title":"\u975e\u6613\u5931\u6027\u5185\u5b58","text":"

    \u867d\u7136\u5b58\u5728\u5176\u5b83\u8bbe\u8ba1\uff0c\u4f46\u662f\u5e76\u4e0d\u5e38\u89c1\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u8ba8\u8bba\u57fa\u4e8e flash NAND die semiconductor \u7684 NVM\u3002\u5982\u679c\u662f disk-like \u7684 NVM \u8bbe\u5907\uff0c\u901a\u5e38\u88ab\u79f0\u4f5c\u56fa\u6001\u786c\u76d8(solid-state disk, SSD)\uff1b\u53c8\u6216\u8005\u662f\u4ee5 USB drive \u7684\u5f62\u5f0f\u88ab\u4f7f\u7528\u3002

    \u7531\u4e8e NVM \u7684\u5de5\u4f5c\u673a\u5236\u662f\u7535\u5b50\u7684\u800c\u975e\u673a\u68b0\u7684\uff0c\u53ef\u4ee5\u60f3\u8c61\uff0cNVM \u5e76\u6ca1\u6709 seek time \u548c rotational latency\uff0c\u6240\u4ee5\u76f8\u6bd4 HDDs \u66f4\u52a0\u53ef\u9760\uff0c\u66f4\u52a0\u5feb\u901f\uff0c\u66f4\u52a0\u5c0f\u5de7\uff0c\u529f\u8017\u4e5f\u66f4\u4f4e\u3002\u4e0d\u8fc7\u5bf9\u5e94\u7684\uff0cNVM \u4e5f\u66f4\u52a0\u6602\u8d35\uff0c\u4e0d\u8fc7\u968f\u7740\u6280\u672f\u7684\u53d1\u5c55\uff0c\u8fd9\u4e00\u52a3\u52bf\u4e5f\u5728\u9010\u6e10\u88ab\u586b\u8865\u3002\u7531\u4e8e\u8fd9\u4e9b\u6027\u8d28\uff0cNVM \u4e5f\u901a\u5e38\u4ee5 cache tier \u7684\u5f62\u5f0f\u88ab\u4f7f\u7528\u3002

    \u540c\u65f6\uff0c\u7531\u4e8e NVM \u672c\u8eab\u7684\u8bfb\u5199\u6548\u7387\u8f83\u9ad8\uff0c\u6240\u4ee5\u541e\u5410\u91cf\u7684\u74f6\u9888\u53ef\u80fd\u53cd\u800c\u5728\u6807\u51c6\u603b\u7ebf\u63a5\u53e3(standard bus interface)\u7684\u4f20\u8f93\u901f\u7387\u4e0a\u3002\u6240\u4ee5\uff0cNVM \u901a\u5e38\u4f1a\u76f4\u63a5\u8fde\u5230\u7cfb\u7edf\u603b\u7ebf(system bus)\uff0c\u4f8b\u5982 PCIeWiki\u3002

    \u56e0\u4e3a NAND semiconductor \u7684\u6027\u8d28\uff0cNVM \u7684\u548c HDDs \u5728\u4f7f\u7528\u903b\u8f91\u4e0a\u6709\u6240\u4e0d\u540c\uff1a

    1. \u867d\u7136 NVM \u652f\u6301\u4ee5 page \u7684\u7c92\u5ea6\uff08\u6bd4 block \u66f4\u5c0f\uff09\u8fdb\u884c\u8bfb\u5199\uff0c\u4f46\u5e76\u4e0d\u652f\u6301\u201c\u6570\u636e\u8986\u76d6\u201d\uff0c\u5373\u5fc5\u987b\u5148\u64e6\u9664\u6570\u636e\u624d\u80fd\u5199\u5165\u6570\u636e\uff0c\u800c\u64e6\u9664\u7684\u5f00\u9500\u76f8\u6bd4\u8bfb\u5199\u53c8\u8981\u5927\u4e00\u4e9b\u3002
    2. \u4e0d\u8fc7\uff0c\u7531\u4e8e NVM \u7531\u82e5\u5e72\u4e2a die \u7ec4\u6210\uff0c\u6240\u4ee5\u53ef\u4ee5\u5e76\u884c\u5730\u8fdb\u884c\u8bfb\u5199\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u63d0\u9ad8\u541e\u5410\u91cf\u3002
    3. \u6b64\u5916\uff0cNAND semiconductor \u5728\u8fdb\u884c\u4e00\u5b9a\u91cf\u7684\u64e6\u9664\u64cd\u4f5c\u4e4b\u540e\u5c31\u4e0d\u518d\u80fd\u5b58\u50a8\u6570\u636e\uff0c\u56e0\u6b64\u5b58\u5728\u4f7f\u7528\u5bff\u547d\u3002

    \u6240\u4ee5\uff0cNVM \u7684\u8bfb\u5199\u63a7\u5236\u7b97\u6cd5\u5e94\u5f53\u4e0e HDDs \u6709\u6240\u4e0d\u540c\uff0c\u4e0d\u8fc7\u8fd9\u901a\u5e38\u7531 NVM controller \u8d1f\u8d23\uff0c\u4e0e\u64cd\u4f5c\u7cfb\u7edf\u65e0\u5173\uff0c\u6240\u4ee5\u6211\u4eec\u4e0d\u505a\u8ba8\u8bba\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u5b58\u50a8\u4ecb\u8d28\u7ba1\u7406","title":"\u5b58\u50a8\u4ecb\u8d28\u7ba1\u7406","text":""},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u683c\u5f0f\u5316--\u5206\u533a--\u5206\u5377","title":"\u683c\u5f0f\u5316 & \u5206\u533a & \u5206\u5377","text":"

    \u5d2d\u65b0\u7684\u5b58\u50a8\u8bbe\u5907\u5728\u88ab\u4f7f\u7528\u4e4b\u524d\u9700\u8981\u7ecf\u8fc7\u4f4e\u7ea7\u683c\u5f0f\u5316(low-level formatting or physical formatting)\uff0c\u4ee5\u5c06\u5176\u5206\u4e3a\u63a7\u5236\u5668\u53ef\u4ee5\u8bfb\u5199\u7684\u6247\u533a\uff0c\u521b\u5efa\u903b\u8f91\u5757\u7684\u6620\u5c04\uff0c\u4ee5\u53ca\u521b\u5efa\u95ea\u5b58\u8f6c\u6362\u5c42(flash translation layer, FTL)Wiki\u3002\u5177\u4f53\u6765\u8bf4\uff0c\u4f4e\u7ea7\u683c\u5f0f\u5316\u7684\u65f6\u5019\u4f1a\u4e3a sectors \u6216 pages \u7ef4\u62a4\u4e00\u4e9b\u6570\u636e\u7ed3\u6784\u4fe1\u606f\uff0c\u5c06\u6570\u636e\u5305\u88c5\u4e3a header + data + tail \u7684\u5f62\u5f0f\u3002\u901a\u5e38 header \u548c tail \u4e2d\u4f1a\u5b58\u50a8\u4e00\u4e9b\u5143\u4fe1\u606f\uff0c\u4f8b\u5982\u6247/\u9875\u53f7\u548c\u6821\u9a8c/\u7ea0\u9519\u7801\u3002\u4e00\u4e2a\u6247\u533a\u7684\u5927\u5c0f\u6709\u82e5\u5e72\u53ef\u9009\u7684\u503c\uff0c\u901a\u5e38\u662f 512 B \u6216 4 KB\uff0c\u7531\u4e8e\u6247\u533a\u6570\u91cf\u4e0e header & tail \u5360\u7528\u7684\u7a7a\u95f4\u6b63\u76f8\u5173\uff0c\u6240\u4ee5\u6247\u533a\u8d8a\u5927\u4e00\u822c\u610f\u5473\u7740\u7528\u6237\u53ef\u7528\u7a7a\u95f4\u8d8a\u5927\u3002

    \u5728\u5b8c\u6210\u4f4e\u7ea7\u683c\u5f0f\u5316\u540e\uff0c\u8bbe\u5907\u5b9e\u73b0\u4e86\u81ea\u8eab\u7684\u7ed3\u6784\u5316\u7ba1\u7406\uff0c\u4f46\u4e3a\u4e86\u80fd\u8ba9\u64cd\u4f5c\u7cfb\u7edf\u4f7f\u7528\uff0c\u8fd8\u9700\u8981\u5728\u8bbe\u5907\u4e0a\u8bb0\u5f55\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u6240\u9700\u8981\u7684\u6570\u636e\u7ed3\u6784\uff08\u67d3\u4e0a\u64cd\u4f5c\u7cfb\u7edf\u7684\u989c\u8272\uff09\u3002\u8fd9\u4e2a\u8fc7\u7a0b\u5927\u81f4\u5206\u4e3a\u4e09\u6b65\uff1a

    steps

    1. \u5206\u533a(partitioning)\uff1a\u5c06\u8bbe\u5907\u7684\u5b58\u50a8\u7a7a\u95f4\u505a\u5212\u5206\uff0c\u6bcf\u4e00\u4e2a\u90fd\u88ab\u89c6\u4e3a\u4e00\u4e2a\u5355\u72ec\u7684\u5b58\u50a8\u7a7a\u95f4\uff08\u5373\u4e00\u4e2a logical disk\uff09\u3002\u5206\u533a\u4fe1\u606f\u4f1a\u4ee5\u56fa\u5b9a\u7684\u683c\u5f0f\u88ab\u5199\u5165\u5b58\u50a8\u8bbe\u5907\u7684\u56fa\u5b9a\u4f4d\u7f6e\u3002
    2. \u5377\u521b\u5efa\u4e0e\u5377\u7ba1\u7406(volume creating & management)\uff1a\u5377(volume)\u662f\u5305\u542b\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf(file system)\u7684\u5b58\u50a8\u7a7a\u95f41\uff0c\u8fd9\u4e00\u6b65\u4e3b\u8981\u662f\u5bf9\u4e0b\u4e00\u6b65\u505a\u51c6\u5907\uff0c\u5212\u5b9a\u6587\u4ef6\u7cfb\u7edf\u6240\u8986\u76d6\u7684\u8303\u56f4\u3002\u5982\u679c\u76f4\u63a5\u5728\u4e00\u4e2a\u5206\u533a\u91cc\u5b89\u88c5\u6587\u4ef6\u7cfb\u7edf\uff0c\u90a3\u5176\u5b9e\u8fd9\u4e00\u6b65\u5df2\u7ecf\u88ab\u9690\u5f0f\u5730\u5b8c\u6210\uff1b\u4f46\u5982\u679c\u4f7f\u7528\u6bd4\u5982 RAID \u6280\u672f\uff0c\u5c31\u9700\u8981\u663e\u793a\u5730\u505a\u8fd9\u4e00\u6b65\u3002
    3. \u903b\u8f91\u683c\u5f0f\u5316(logical formatting)\uff1a\u5728\u5377\u4e0a\u521b\u5efa\u548c\u521d\u59cb\u5316\u6587\u4ef6\u7cfb\u7edf\u3002

    \u540c\u65f6\uff0c\u5982\u679c\u5f53\u524d\u5206\u533a\u5305\u542b OS \u955c\u50cf\uff0c\u5219\u9700\u8981\u5bf9\u5e94\u521d\u59cb\u5316\u5f15\u5bfc\u5757(boot sector)\u3002

    raw disK

    \u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u5141\u8bb8\u90e8\u5206\u7279\u6b8a\u7a0b\u5e8f\u7ed5\u8fc7\u6587\u4ef6\u7cfb\u7edf\uff0c\u76f4\u63a5\u4f7f\u7528\u4e00\u5927\u5757\u8fde\u7eed\u7684\u903b\u8f91\u5757\uff0c\u8fd9\u79cd\u4e0d\u5305\u542b\u6587\u4ef6\u7cfb\u7edf\u6570\u636e\u7ed3\u6784\u7684\u5b58\u50a8\u7a7a\u95f4\u88ab\u79f0\u4e3a raw disk\uff0c\u5bf9\u8fd9\u79cd\u5b58\u50a8\u7a7a\u95f4\u7684\u8bbf\u95ee\u88ab\u79f0\u4e3a raw I/O\uff0c\u5bf9 raw disk \u7684\u64cd\u4f5c\u4e00\u822c\u66f4\u9ad8\u6548\u4e5f\u66f4\u7cbe\u786e\uff0c\u5b83\u53ef\u4ee5\u88ab\u7528\u6765\u5b9e\u73b0 swap \u7a7a\u95f4\uff0c\u6216\u8005\u662f\u7528\u6765\u5b58\u50a8\u6570\u636e\u5e93\u7684\u6570\u636e\u6587\u4ef6\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#\u574f\u5757","title":"\u574f\u5757","text":"

    \u524d\u9762\u5df2\u7ecf\u63d0\u5230 NVM \u6709\u4f7f\u7528\u5bff\u547d\uff1b\u4ee5\u53ca\u867d\u7136\u6211\u4eec\u6ca1\u8bf4\uff0c\u4f46\u662f HDDs \u7684\u673a\u68b0\u7ed3\u6784\u4e5f\u5fc5\u7136\u5e26\u6765\u4e0d\u5c0f\u7684\u786c\u4ef6\u635f\u8017\u3002\u6240\u4ee5\uff0c\u5b9e\u9645\u7684\u5b58\u50a8\u8bbe\u5907\u4e2d\u4e0d\u53ef\u907f\u514d\u7684\u4f1a\u51fa\u73b0\u7531\u4e8e\u786c\u4ef6\u635f\u574f\u5bfc\u81f4\u7684\u65e0\u6cd5\u4f7f\u7528\u7684\u5b58\u50a8\u7a7a\u95f4\u3002\u8fd9\u79cd\u65e0\u6cd5\u4f7f\u7528\u7684\u5b58\u50a8\u7a7a\u95f4\u88ab\u79f0\u4e3a\u574f\u5757(bad block)\u3002

    \u521a\u51fa\u5382\u7684\u786c\u76d8\u5c31\u5f88\u53ef\u80fd\u5df2\u7ecf\u5e26\u6709\u4e00\u4e9b bad block\uff0c\u4f46\u901a\u5e38\u4f1a\u5728\u505a low-level formatting \u7684\u65f6\u5019\u505a\u4e00\u4e9b\u5904\u7406\uff0clow-level formatting \u9636\u6bb5\uff0c\u4f1a\u7ef4\u62a4\u4e00\u4e9b\u64cd\u4f5c\u7cfb\u7edf\u4e0d\u53ef\u89c1\u7684\u5907\u7528\u6247\u533a\uff0c\u4e13\u95e8\u7528\u4e8e\u5c06 bad block \u6620\u5c04\u5230\u8fd9\u4e9b\u53ef\u7528\u5206\u533a\u4e2d\u6765\u4fdd\u8bc1\u903b\u8f91\u7a7a\u95f4\u4e0a\u7684\u8fde\u7eed\u6027\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit5/#raid","title":"RAID","text":"

    \u867d\u7136\u5355\u72ec\u7684\u786c\u76d8\u4fbf\u5b9c\uff0c\u4f46\u662f\u5b83\u4e0d\u53ef\u9760\u800c\u4e14\u901f\u5ea6\u6162\uff0c\u6240\u4ee5\u6211\u4eec\u8003\u8651\u4f7f\u7528\u5197\u4f59(redundancy)\u7684\u65b9\u6cd5\u6765\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002

    \u72ec\u7acb\u78c1\u76d8\u5197\u4f59\u9635\u5217(redundant array of independent disk, RAID)\u6280\u672f\u5728\u590d\u6570\u78c1\u76d8\u4e0a\u521b\u5efa\u82e5\u5e72\u6570\u636e\u7684\u955c\u50cf\uff0c\u540c\u65f6\u5141\u8bb8\u5728\u591a\u4e2a\u78c1\u76d8\u4e0a\u540c\u65f6\u8fdb\u884c\u6570\u636e\u7684\u8bfb\u53d6\uff08\u5e76\u884c\u5730\u8bfb\u53d6\u6570\u636e\u7684\u4e0d\u540c\u90e8\u5206\uff09\uff0c\u5e76\u91c7\u7528\u7279\u5b9a\u7684\u9519\u8bef\u6821\u9a8c\u7801\u6765\u4fdd\u8bc1\u6570\u636e\u7684\u53ef\u9760\u6027\u3002

    \u6309\u7167\u7ec4\u5408\u7b56\u7565\uff0cRAID \u6280\u672f\u88ab\u5206\u4e3a\u4e0d\u540c\u7684 level\uff0c\u8bfb\u8005\u53ef\u4ee5\u5728\u6b64\u548c\u505a\u8be6\u7ec6\u4e86\u89e3\u3002\u9ad8 level \u7684 RAID \u5bf9\u4f4e level \u7684 RAID \u5e76\u4e0d\u662f\u4e0a\u4f4d\u66ff\u4ee3\u7684\uff0c\u5b83\u4eec\u4e4b\u95f4\u5404\u6709\u4f18\u52a3\uff0c\u9700\u8981\u6309\u9700\u4f7f\u7528\u3002\u8bfb\u8005\u53ef\u4ee5\u5728\u6b64\u6587\u6587\u672b\u505a\u4e86\u89e3\u3002

    1. Volume (computing) | Wikipedia \u21a9

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/","title":"Unit 6: \u6587\u4ef6\u7cfb\u7edf | File System [\u672a\u5b8c\u6210]","text":"

    \u7ea6 3380 \u4e2a\u5b57 18 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 17 \u5206\u949f

    \u5bfc\u8bfb

    \u5728\u5b58\u50a8\u4e00\u7ae0\uff0c\u6211\u4eec\u63d0\u5230\u8fc7\uff0c\u5377(volume)\u505a\u521d\u59cb\u5316\u65f6\uff0c\u9700\u8981\u5efa\u7acb\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u3002\u6587\u4ef6\u7cfb\u7edf\u63d0\u4f9b\u4e86\u6570\u636e\u5b58\u50a8\u5f62\u5f0f\u7684\u903b\u8f91\u89c6\u56fe\uff0c\u5c06\u6570\u636e\u4ee5\u6587\u4ef6(file)\u7684\u5f62\u5f0f\u4ece\u786c\u4ef6\u5b58\u50a8\u4e2d\u62bd\u8c61\u51fa\u6765\uff0c\u5e76\u4f7f\u7528\u76ee\u5f55(directory)\u5bf9\u6587\u4ef6\u8fdb\u884c\u8fdb\u884c\u7ed3\u6784\u5316\u7684\u7ec4\u7ec7\u548c\u7ba1\u7406\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6","title":"\u6587\u4ef6","text":"

    \u4e00\u4e2a\u6587\u4ef6\u662f\u5b58\u50a8\u5728\u4e8c\u7ea7\u4ecb\u8d28\u4e0a\u7684\uff0c\u5177\u540d\u7684\u4e00\u7cfb\u5217\u76f8\u5173\u4fe1\u606f\u96c6\u5408\uff0c\u65e0\u8bba\u662f\u7528\u6237\u8fd8\u662f\u7a0b\u5e8f\uff0c\u90fd\u9700\u8981\u901a\u8fc7\u6587\u4ef6\u6765\u4e0e\u4e8c\u7ea7\u4ecb\u8d28\u8fdb\u884c\u4fe1\u606f\u4ea4\u6362\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u5c5e\u6027","title":"\u6587\u4ef6\u5c5e\u6027","text":"

    \u4e0d\u540c\u7684\u6587\u4ef6\u7cfb\u7edf\u4e0b\uff0c\u6587\u4ef6\u53ef\u80fd\u6709\u4e0d\u540c\u7684\u5c5e\u6027\uff0c\u4f46\u901a\u5e38\u6709\u4ee5\u4e0b\u51e0\u4e2a\uff08\u5f53\u7136\u8fd8\u6709\u5176\u5b83\u7684\uff09\uff1a

    \u8fd9\u4e9b\u4fe1\u606f\u4e5f\u88ab\u79f0\u4e3a\u6587\u4ef6\u7684\u5143\u6570\u636e(meta data)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u64cd\u4f5c","title":"\u6587\u4ef6\u64cd\u4f5c","text":"

    \u64cd\u4f5c\u7cfb\u7edf\u53ef\u4ee5\u63d0\u4f9b\u76f8\u5173\u7684\u7cfb\u7edf\u8c03\u7528\u6765\u5b8c\u6210\u4e00\u4e9b\u57fa\u672c\u7684\u6587\u4ef6\u64cd\u4f5c\uff0c\u4f8b\u5982\uff1a

    \u5728 C \u7684\u6587\u4ef6\u64cd\u4f5c\u51fd\u6570\u4e2d\uff0c\u4f60\u90fd\u80fd\u770b\u5230\u7c7b\u4f3c\u7684\u64cd\u4f5c\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6743\u9650\u4fdd\u62a4","title":"\u6743\u9650\u4fdd\u62a4","text":"

    \u4e0d\u540c\u7684\u6587\u4ef6\u64cd\u4f5c\u5bf9\u5e94\u7740\u4e0d\u540c\u7684\u6743\u9650\u3002

    \u7406\u8bba\u4e0a\uff0c\u6587\u4ef6\u7684\u6240\u5c5e\u8005\u5e94\u5f53\u80fd\u591f\u51b3\u5b9a\u80fd\u5bf9\u6587\u4ef6\u505a\u4ec0\u4e48\u64cd\u4f5c\uff0c\u4ee5\u53ca\u8c01\u5177\u6709\u8fd9\u4e9b\u6743\u9650\uff0c\u8fd9\u4e2a\u6743\u9650\u901a\u8fc7\u8bbf\u95ee\u63a7\u5236\u5217\u8868(access control list, ACL)\u6765\u7ef4\u62a4\u7528\u6237\u4eec\u5bf9\u6587\u4ef6\u6240\u5177\u6709\u7684\u6743\u9650\u3002\u4f46\u662f\u8fd9\u4e48\u505a\u7684\u574f\u5904\u662f\uff0c\u6784\u5efa ACL \u6027\u4ef7\u6bd4\u4f4e\uff0c\u800c\u4e14\u539f\u5148\u56fa\u5b9a\u957f\u7684\u8868\u9879\u53ef\u80fd\u4e0d\u5b9a\u957f\u4e86\u3002

    \u56e0\u6b64\uff0c\u53ef\u4ee5\u7cbe\u7b80\u5316\u8fd9\u4e2a\u5217\u8868\u3002\u4f8b\u5982\uff0cUnix \u548c Linux \u7cfb\u7edf\u91c7\u7528\u4e86\u8bbf\u95ee\u6743\u9650\u4f4d(access permission bits)\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\u6743\u9650\u63a7\u5236\uff1a

    \ud83c\udf30

    \u5728 Linux \u4e2d\uff0c\u6211\u4eec\u4f7f\u7528 ls -l \u5c31\u53ef\u4ee5\u770b\u5230\u5f53\u524d\u76ee\u5f55\u4e0b\u6587\u4ef6\u7684\u6743\u9650\u3002

    $ ls -l\ntotal 72\n-rw-r--r--   1 isshikih  staff  18658 Oct 18 23:51 LICENSE\n-rw-r--r--   1 isshikih  staff   1778 Dec 18 10:27 README.md\nlrwxr-xr-x   1 isshikih  staff     18 Nov 21  2022 _deploy.sh@ -> scripts/_deploy.sh\nlrwxr-xr-x   1 isshikih  staff     16 Nov 21  2022 _sync.sh@ -> scripts/_sync.sh\ndrwxr-xr-x  14 isshikih  staff    448 Oct 29 22:53 docs/\ndrwxr-xr-x  33 isshikih  staff   1056 Nov  3  2022 mkdocs-material/\n-rw-r--r--@  1 isshikih  staff  10937 Dec 21 10:01 mkdocs.yaml\ndrwxr-xr-x   3 isshikih  staff     96 Nov  2  2022 overrides/\ndrwxr-xr-x   5 isshikih  staff    160 Oct 10 15:39 scripts/\ndrwxr-xr-x  19 isshikih  staff    608 Dec 20 21:39 site/\n

    \u7b2c\u4e00\u5217\u4e2d\u6709 10 \u4e2a\u5b57\u7b26\uff0c\u5176\u542b\u4e49\u5982\u4e0b\uff1a

    A \"d\" indicates a directory. The second set of three characters represent the read, write, and execution rights of the file's owner. The next three represent the rights of the file's group, and the final three represent the rights granted to everybody else. We'll discuss this in more detail in a later lesson.3

    \u540e 9 \u4e2a\u5b57\u7b26\u5c06\u6743\u9650\u88ab\u5206\u4e3a\u4e09\u7ec4\uff0c\u5206\u522b\u4ee3\u8868\u6587\u4ef6\u6240\u6709\u8005(owner)\u3001\u6587\u4ef6\u6240\u5c5e\u7ec4(group)\u3001\u5176\u4ed6\u4eba(other)\u7684\u8bfb(r)\u3001\u5199(w)\u3001\u6267\u884c(x)\u6743\u9650\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7c7b\u578b","title":"\u6587\u4ef6\u7c7b\u578b","text":"

    \u5bf9\u64cd\u4f5c\u7cfb\u7edf\u6765\u6240\uff0c\u6587\u4ef6\u4e3b\u8981\u5206\u4e3a\u6570\u636e(data)\u548c\u7a0b\u5e8f(program)\u4e24\u5927\u7c7b\u3002\u800c\u5bf9\u7528\u6237\u6765\u8bf4\uff0c\u6211\u4eec\u901a\u5e38\u4f1a\u8ba4\u4e3a\u540e\u7f00\u6269\u5c55(extension)\u6807\u8bc6\u4e86\u4e00\u4e2a\u6587\u4ef6\u7684\u7c7b\u578b\u3002\u4f8b\u5982\u6211\u4eec\u4f1a\u8ba4\u4e3a sketch.psd \u662f Photoshop \u7684\u5de5\u7a0b\u6587\u4ef6\uff0cimg.png \u662f\u4e00\u4e2a\u56fe\u7247\u6587\u4ef6\uff0cmain.exe \u662f\u4e00\u4e2a\u53ef\u6267\u884c\u6587\u4ef6\u3002\u4f46\u5b9e\u9645\u4e0a\uff0c\u8fd9\u4e9b\u540e\u7f00\u6269\u5c55\u66f4\u591a\u7684\u53ea\u662f\u4e00\u79cd\u201c\u63d0\u793a\u201d\uff0c\u53ea\u662f\u7528\u6765\u5e2e\u52a9\u7cfb\u7edf\u9009\u62e9\u5408\u9002\u7684\u65b9\u5f0f\u6765\u6253\u5f00\u6587\u4ef6\uff0c\u800c\u4e0d\u662f\u51b3\u5b9a\u6587\u4ef6\u7684\u7c7b\u578b\uff0c\u662f\u5426\u8981\u53c2\u8003\u540e\u7f00\u540d\uff0c\u5e94\u5f53\u7531\u5f00\u53d1\u8005\u6765\u51b3\u5b9a\u3002

    UNIX \u7cfb\u7edf\u4f1a\u5728\u6587\u4ef6\u5f00\u5934\uff0c\u4f7f\u7528\u4e00\u4e32 magic number \u6765\u6807\u8bc6\u6587\u4ef6\u7684\u7c7b\u578b\uff0c\u4f8b\u5982\u56fe\u7247\u6587\u4ef6\u7684\u5f00\u5934\u901a\u5e38\u662f 0xFFD81\uff0c\u811a\u672c\u6587\u672c\u6587\u4ef6\u5f00\u5934\u4f1a\u4ee5\u7c7b\u4f3c #!bash \u7684\u5f62\u5f0f\u6765\u6307\u5b9a\u7531\u8c01\u6765\u6267\u884c\uff08\u4f8b\u5982\u8fd9\u4e2a\u662f\u7528 bash \u6267\u884c\uff09\u3002\u4f46\u662f\u9700\u8981\u6ce8\u610f\uff0c\u5e76\u975e\u6240\u6709\u6587\u4ef6\u90fd\u652f\u6301 magic number\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4ec5\u4ec5\u7528 magic number \u6765\u5b9e\u73b0\u6587\u4ef6\u7c7b\u578b\u7684\u5224\u65ad\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7ed3\u6784","title":"\u6587\u4ef6\u7ed3\u6784","text":"

    \u6587\u4ef6\u7ed3\u6784\u6307\u7684\u662f\u6587\u4ef6\u6570\u636e\u5b58\u50a8\u7684\u5f62\u5f0f\uff0c\u7531\u64cd\u4f5c\u7cfb\u7edf\u6216\u7528\u6237\u7a0b\u5e8f\u51b3\u5b9a\u3002\u5e38\u89c1\u7684\u6587\u4ef6\u7ed3\u6784\u6709\uff1a

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u8bbf\u95ee\u65b9\u5f0f","title":"\u8bbf\u95ee\u65b9\u5f0f","text":"

    \u8bbf\u95ee\u65b9\u5f0f\u5373\u6570\u636e\u7684\u5b58\u53d6\u65b9\u5f0f\uff0c\u6700\u7b80\u5355\u4e5f\u6700\u5e38\u89c1\u7684\u8bbf\u95ee\u65b9\u5f0f\u662f\u987a\u5e8f\u8bbf\u95ee(sequential access)\uff0c\u5373\u50cf\u78c1\u5e26\u90a3\u6837\uff0c\u9010 byte \u6216\u8005\u9010 record \u5730\u8bbf\u95ee\u3002

    \u53e6\u4e00\u79cd\u65b9\u6cd5\u662f\u76f4\u63a5\u8bbf\u95ee(direct access)\u6216\u76f8\u5bf9\u8bbf\u95ee(relative access)/\u968f\u673a\u8bbf\u95ee(random access)\uff0c\u5373\u652f\u6301\u4ee5\u51e0\u4e4e\u76f8\u540c\u7684\u65f6\u95f4\u8bbf\u95ee\u4efb\u610f\u4f4d\u7f6e\u3002

    \u5728\u76f4\u63a5\u8bbf\u95ee\u7684\u65b9\u6cd5\u4e4b\u4e0a\uff0c\u8fd8\u6709\u53ef\u80fd\u63d0\u4f9b\u7d22\u5f15\uff0c\u5373\u5148\u901a\u8fc7\u7d22\u5f15\u8868\u5f97\u77e5\u6240\u9700\u8bbf\u95ee\u7684\u5185\u5bb9\u5728\u54ea\u91cc\uff0c\u7136\u540e\u53bb\u8bbf\u95ee\u3002\u5728\u6b64\u4e4b\u4e0a\u8fd8\u6709\u4e00\u79cd\u7d22\u5f15\u987a\u5e8f\u8bbf\u95ee(indexed sequential-access)\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u76ee\u5f55\u7ed3\u6784","title":"\u76ee\u5f55\u7ed3\u6784","text":"

    \u76ee\u5f55\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a\u7279\u6b8a\u7684\u6587\u4ef6\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u76ee\u5f55\u4e0b\u6587\u4ef6\u7684\u5143\u4fe1\u606f\u662f\u88ab\u5b58\u50a8\u5728\u76ee\u5f55\u4e2d\u7684\u3002\u76ee\u5f55\u7684\u7ed3\u6784\u8868\u793a\u7684\u662f\u76ee\u5f55\u4e0b\u6587\u4ef6\u7684\u7ec4\u7ec7\u65b9\u5f0f\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u4ecb\u7ecd\u82e5\u5e72\u76ee\u5f55\u7ed3\u6784\u7684\u8bbe\u8ba1\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u5355\u7ea7\u76ee\u5f55","title":"\u5355\u7ea7\u76ee\u5f55","text":"

    \u6700\u539f\u59cb\u7684\u5b9e\u73b0\u65b9\u5f0f\uff0c\u4e0d\u5b58\u5728\u5206\u7ec4\u7b56\u7565\uff0c\u6240\u6709\u7684\u6587\u4ef6\u90fd\u88ab\u94fa\u5728\u6839\u76ee\u5f55\u4e0b\u3002

    Single-level directory.

    disadvantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u4e8c\u7ea7\u76ee\u5f55","title":"\u4e8c\u7ea7\u76ee\u5f55","text":"

    \u7279\u6307\u4ee5\u7528\u6237\u4e3a\u4f9d\u636e\uff0c\u5c06\u6587\u4ef6\u5206\u7ec4\u3002\u5373\u4e3b\u6587\u4ef6\u76ee\u5f55(master file directory, MFD)\u4e0b\u4e3a\u6bcf\u4e2a\u7528\u6237\u5206\u914d\u4e00\u4e2a\u7528\u6237\u6587\u4ef6\u76ee\u5f55(user file directory, UFD)\uff0c\u6bcf\u4e2a\u7528\u6237\u7684\u76ee\u5f55\u4e0b\u518d\u5b58\u653e\u8be5\u7528\u6237\u7684\u6587\u4ef6\u3002

    Two-level directory structure.

    \u7531\u4e8e\u51fa\u73b0\u4e86\u5206\u5c42\u7ed3\u6784\uff0c\u6240\u4ee5\u5bf9\u6587\u4ef6\u7684\u7d22\u5f15\u4ece\u4f9d\u8d56\u6587\u4ef6\u540d\u8f6c\u4e3a\u4f9d\u8d56\u6587\u4ef6\u8def\u5f84(path)\u3002

    advantages

    disadvantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6811\u5f62\u76ee\u5f55","title":"\u6811\u5f62\u76ee\u5f55","text":"

    \u6811\u5f62\u76ee\u5f55(tree-structured directories)\u5c06\u76ee\u5f55\u89c6\u4e3a\u4e00\u79cd\u7279\u6b8a\u6587\u4ef6\uff0c\u5373\u5c06\u201c\u76ee\u5f55\u201d\u7684\u6982\u5ff5\u901a\u7528\u5316\uff0c\u4e8e\u662f\u5141\u8bb8\u7528\u6237\u5728\u76ee\u5f55\u4e0b\u81ea\u7531\u5730\u521b\u5efa\u76ee\u5f55\u8fdb\u884c\u5206\u7ec4\uff0c\u4e8e\u662f\u603b\u4f53\u6587\u4ef6\u7ed3\u6784\u6210\u4e3a\u4e00\u79cd\u6811\u5f62\u7ed3\u6784\u3002

    Tree-structured directory structure.

    \u6587\u4ef6\u90fd\u76f8\u5f53\u4e8e\u6811\u4e0a\u7684\u4e00\u4e2a\u8282\u70b9\uff0c\u975e\u76ee\u5f55\u8282\u70b9\u90fd\u662f\u53f6\u5b50\u8282\u70b9\uff0c\u76ee\u5f55\u8282\u70b9\u90fd\u662f\u975e\u53f6\u5b50\u8282\u70b9\uff08\u4e0d\u8003\u8651\u7a7a\u76ee\u5f55\uff09\u3002\u4e3a\u4e86\u5728\u8fd9\u79cd\u7ed3\u6784\u4e0b\u627e\u5230\u552f\u4e00\u786e\u5b9a\u7684\u90a3\u4e2a\u6587\u4ef6\uff0c\u6211\u4eec\u9700\u8981\u63d0\u4f9b\u6587\u4ef6\u7684\u8def\u5f84(path)\uff0c\u5206\u4e3a\u7edd\u5bf9\u8def\u5f84(absolute path)\u548c\u76f8\u5bf9\u8def\u5f84(relative path)\u4e24\u79cd\u3002

    \u8fd9\u4e1c\u897f\u592a\u7b80\u5355\u4e86\uff0c\u53ea\u8981\u6709 Linux \u5b9e\u8df5\u7ecf\u5386\u5c31\u80af\u5b9a\u641e\u5f97\u660e\u767d\uff0c\u6240\u4ee5\u6211\u5c31\u4e0d\u5c55\u5f00\u4e86\u3002\u6ca1\u6709 Linux \u5b9e\u8df5\u7ecf\u5386\u5efa\u8bae\u5148\u6709 Linux \u5b9e\u8df5\u7ecf\u5386\u3002

    advantages

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u65e0\u73af\u56fe\u76ee\u5f55","title":"\u65e0\u73af\u56fe\u76ee\u5f55","text":"

    \u65e0\u73af\u56fe\u76ee\u5f55(acyclic-graph directories)\u662f\u5728\u6811\u5f62\u76ee\u5f55\u7684\u57fa\u7840\u4e0a\uff0c\u5141\u8bb8\u76ee\u5f55\u4e4b\u95f4\u5b58\u5728\u94fe\u63a5\u5173\u7cfb\uff0c\u94fe\u63a5\u5206\u4e3a\u8f6f\u94fe\u63a5(soft link)\u548c\u786c\u94fe\u63a5(hard link)\u4e24\u79cd\u3002

    Acyclic-graph directory structure.

    soft link

    \u8f6f\u94fe\u63a5\u53c8\u79f0\u7b26\u53f7\u94fe\u63a5(symbolic link)\uff0c\u662f\u4e00\u4e2a\u6307\u5411\u6587\u4ef6\u7684\u6307\u9488\uff0c\u7c7b\u4f3c\u4e8e Windows \u4e0b\u7684\u5feb\u6377\u65b9\u5f0f\u3002

    \u5220\u9664\u88ab\u8f6f\u94fe\u63a5\u6307\u5411\u7684\u90a3\u4e2a\u6587\u4ef6\u5e76\u4e0d\u4f1a\u8fde\u5e26\u5730\u5904\u7406\u8f6f\u94fe\u63a5\uff0c\u4f46\u662f\u539f\u5148\u7684\u8fd9\u4e2a\u8f6f\u94fe\u63a5\u5df2\u7ecf\u5931\u6548\u4e86\u3002

    \u4ece\u672c\u8d28\u4e0a\u6765\u770b\uff0c\u8f6f\u94fe\u63a5\u662f\u7279\u6b8a\u7684\u6587\u4ef6\u3002

    hard link

    \u786c\u94fe\u63a5\u662f\u590d\u5236\u94fe\u63a5\u6587\u4ef6\u76ee\u5f55\u9879\u7684\u6240\u6709\u5143\u4fe1\u606f\uff0c\u5b58\u5230\u76ee\u6807\u76ee\u5f55\u4e2d\uff0c\u6b64\u65f6\u6587\u4ef6\u5e73\u7b49\u5730\u5c5e\u4e8e\u4e24\u4e2a\u76ee\u5f55\u3002

    \u7531\u4e8e\u6b64\u65f6\u6587\u4ef6\u7b49\u4ef7\u5730\u5c5e\u4e8e\u590d\u6570\u4e2a\u76ee\u5f55\uff0c\u6240\u4ee5\u5728\u6587\u4ef6\u5143\u4fe1\u606f\u88ab\u66f4\u65b0\u65f6\uff0c\u9700\u8981\u4fdd\u8bc1\u5728\u82e5\u5e72\u76ee\u5f55\u4e0b\u8be5\u6587\u4ef6\u7684\u4fe1\u606f\u662f\u4e00\u81f4\u7684\u3002

    \u5220\u9664\u88ab\u786c\u94fe\u63a5\u7684\u6587\u4ef6\u5e76\u4e0d\u4f1a\u76f4\u63a5\u5bfc\u81f4\u6587\u4ef6\u88ab\u5220\u9664\uff0c\u53ea\u6709\u5f53\u7528\u6765\u8bb0\u5f55\u300c\u88ab\u786c\u94fe\u63a5\u6570\u91cf\u300d\u7684 reference counter \u88ab\u51cf\u81f3 0\uff0c\u5373\u4e0d\u518d\u6709\u5176\u4ed6\u786c\u94fe\u63a5\u6307\u5411\u8be5\u6587\u4ef6\u65f6\uff0c\u6587\u4ef6\u624d\u4f1a\u88ab\u5220\u9664\uff1b\u5176\u4ed6\u60c5\u51b5\u4e0b\u90fd\u53ea\u9700\u8981\u5728\u5f53\u524d\u76ee\u5f55\u4e2d\u5220\u9664\u8be5\u8868\u9879\uff0c\u5e76\u5c06 reference counter \u51cf 1\uff0c\u66f4\u65b0\u76f8\u5173\u5143\u4fe1\u606f\u5373\u53ef\u3002

    \u4ece\u672c\u8d28\u4e0a\u6765\u770b\uff0c\u786c\u94fe\u63a5\u662f\u76ee\u5f55\u8868\u9879\u3002

    \u5728\u65e0\u73af\u56fe\u76ee\u5f55(acyclic-graph directories)\u4e2d\uff0c\u4e3a\u4e86\u4fdd\u8bc1\u65e0\u73af\uff0c\u6211\u4eec\u53ea\u5141\u8bb8\u521b\u5efa\u5173\u4e8e\u6587\u4ef6\u8fd9\u79cd\u53f6\u5b50\u8282\u70b9\u7684\u786c\u94fe\u63a52\u3002\u4e0d\u8fc7\u8fd9\u4e2a\u8bf4\u6cd5\u5b58\u5728\u4e00\u4e2a\u4f8b\u5916\uff0c\u6211\u4eec\u90fd\u77e5\u9053\u901a\u5e38\u5728\u4efb\u610f\u8def\u5f84\u90fd\u4f1a\u6709 . \u548c .. \u8fd9\u4e24\u4e2a\u7279\u6b8a\u76ee\u5f55\uff0c\u5b83\u4eec\u901a\u8fc7\u786c\u94fe\u63a5\u5206\u522b\u6307\u5411\u5f53\u524d\u76ee\u5f55\u548c\u7236\u76ee\u5f55\uff08\u6839\u76ee\u5f55\u7684\u7236\u76ee\u5f55\u4e5f\u662f\u6839\u76ee\u5f55\uff09\u3002

    \u6b64\u5916\uff0c\u7531\u4e8e\u786c\u94fe\u63a5\u672c\u8d28\u4e0a\u662f\u8868\u9879\uff0c\u800c\u8868\u9879\u4e0e\u6587\u4ef6\u7cfb\u7edf\u76f8\u5173\uff0c\u6240\u4ee5\u786c\u94fe\u63a5\u53ea\u80fd\u5728\u540c\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u4e0b\u521b\u5efa\uff0c\u65e0\u6cd5\u8de8\u8d8a file-system boundary\u3002

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u901a\u7528\u56fe\u76ee\u5f55","title":"\u901a\u7528\u56fe\u76ee\u5f55","text":"

    \u65e0\u73af\u56fe\u76ee\u5f55\u901a\u8fc7\u4fdd\u8bc1\u4e0d\u5b58\u5728\u73af\u6765\u4fdd\u8bc1\u6587\u4ef6\u7cfb\u7edf\u7684\u7b80\u4ecb\u6027\uff0c\u907f\u514d\u904d\u5386\u76ee\u5f55\u65f6\u5019\u51fa\u73b0\u6b7b\u5faa\u73af\u6216\u8005\u5220\u9664\u6587\u4ef6\u65f6\u51fa\u73b0\u7684\u5faa\u73af\u4f9d\u8d56\u7b49\u95ee\u9898\u3002

    \u800c\u901a\u7528\u56fe\u76ee\u5f55(general-graph directories)\u5219\u5141\u8bb8\u76ee\u5f55\u4e4b\u95f4\u5b58\u5728\u73af\uff0c\u4f46\u662f\u5728\u5404\u79cd\u64cd\u4f5c\u65f6\uff0c\u901a\u8fc7\u7b97\u6cd5\u6765\u907f\u514d\u51fa\u73b0\u95ee\u9898\uff0c\u4f8b\u5982\u90e8\u5206\u80fd\u5904\u7406\u73af\u7684\u56fe\u904d\u5386\u7b97\u6cd5\u3001\u5783\u573e\u56de\u6536\u673a\u5236\u7b49\u3002

    General graph directory.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf","title":"\u6587\u4ef6\u7cfb\u7edf","text":"

    \u6587\u4ef6\u7cfb\u7edf(file system, FS)\u5728\u4e8c\u7ea7\u5b58\u50a8\u4e0a\uff0c\u5b83\u4e3a\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u5feb\u901f\u3001\u4fbf\u6377\u7684\uff0c\u5bf9\u786c\u76d8\u6570\u636e\u7684\u64cd\u4f5c\u3002\u6587\u4ef6\u7cfb\u7edf\u662f\u64cd\u4f5c\u7cfb\u7edf\u4e2d\uff0c\u4ee5\u6587\u4ef6\u7684\u65b9\u5f0f\u7ba1\u7406\u8ba1\u7b97\u673a\u8f6f\u4ef6\u8d44\u6e90\u7684\u8f6f\u4ef6\uff0c\u4ee5\u53ca\u88ab\u7ba1\u7406\u7684\u6587\u4ef6\u548c\u6570\u636e\u7ed3\u6784\u7684\u96c6\u5408\u3002

    common file system types "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d","title":"\u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d","text":"

    \u6587\u4ef6\u7cfb\u7edf\u6302\u8f7d(mount)\u662f\u6307\u5c06\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u7684\u6839\u76ee\u5f55\u6302\u8f7d\u5230\u53e6\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u7684\u67d0\u4e2a\u76ee\u5f55\uff08\u88ab\u79f0\u4e3a mount point\uff09\uff0c\u4f7f\u5f97\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u53ef\u4ee5\u8bbf\u95ee\u5230\u88ab\u6302\u8f7d\u7684\u6587\u4ef6\u7cfb\u7edf\u4e2d\u7684\u6587\u4ef6\u3002\u53ea\u6709\u88ab\u6302\u8f7d\u4e86\uff0c\u4e00\u4e2a\u6587\u4ef6\u7cfb\u7edf\u624d\u80fd\u88ab\u8bbf\u95ee\u3002

    Volume mounted at /users.

    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#\u6587\u4ef6\u7cfb\u7edf\u5206\u5c42\u8bbe\u8ba1","title":"\u6587\u4ef6\u7cfb\u7edf\u5206\u5c42\u8bbe\u8ba1","text":"

    \u6587\u4ef6\u7cfb\u7edf\u88ab\u5206\u4e3a\u82e5\u5e72\u5c42\uff0c\u5411\u4e0b\u4e0e device \u4ea4\u4e92\uff0c\u5411\u4e0a\u63a5\u53d7 application programs \u7684\u8bf7\u6c42\uff0c\u5982\u4e0b\u662f\u5404\u4e2a\u5206\u5c42\u7684\u8bbe\u8ba1\uff1a

    graph LR;\n    A[\"application programs\"] --> B[\"logical file system\"];\n    B --> C[\"file-organization module\"];\n    C --> D[\"basic file system\"];\n    D --> E[\"I/O control\"];\n    E --> F[\"devices\"];
    1. I/O control
      • \u5411\u4e0b\u63a7\u5236 I/O devices\uff0c\u5411\u4e0a\u4e3a\u6587\u4ef6\u7cfb\u7edf\u63d0\u4f9b I/O \u529f\u80fd\uff1b
      • \u5305\u542b device drivers \u548c interrupt handlers\uff0c\u662f\u4e0e\u5177\u4f53 device \u4ea4\u4e92\u7684\u63a5\u53e3\u5c42\uff1b4
    2. Basic file system
      • \u5411\u4e0b\u4e00\u5c42\u53d1\u5c04\u201c\u62bd\u8c61\u201d\uff08\u4e0e\u8bbe\u5907\u578b\u53f7\u65e0\u5173\uff09\u7684\u64cd\u4f5c\u6307\u4ee4\uff08\u7531\u4e0b\u4e00\u5c42\u8f6c\u5316\u4e3a\u8bbe\u5907\u76f4\u63a5\u652f\u6301\u7684\u6307\u4ee4\uff09\uff1b
      • \u4e0e I/O \u8c03\u5ea6\u6709\u5173\uff1b
      • \u7ba1\u7406\u5185\u5b58\u7f13\u51b2\u533a(memory buffer)\u548c\u7f13\u5b58(caches)\uff1b
        • Buffer \u7684\u4f5c\u7528\u53ef\u4ee5\u53c2\u8003 ADS \u4e2d\u7684\u5916\u6392\u5e8f\u4e2d\u7684\u76f8\u5173\u5185\u5bb9\u6765\u7406\u89e3\uff1b
        • Caches \u7528\u6765\u5b58\u50a8\u4e00\u4e9b\u4f1a\u88ab\u9891\u7e41\u7528\u5230\u7684\u6587\u4ef6\u7cfb\u7edf\u5143\u6570\u636e\uff0c\u4ee5\u63d0\u9ad8\u6587\u4ef6\u7cfb\u7edf\u6027\u80fd\uff1b
    3. File-organization module
      • \u4ee5 basic file system \u63d0\u4f9b\u7684\u529f\u80fd\u4e3a\u57fa\u7840\uff1b
      • \u80fd\u591f\u5b9e\u73b0 file \u7684 logical block \u5230 physical block \u7684\u6620\u5c04\uff1b4
      • \u540c\u65f6\uff0cfile-organization module \u4e5f\u56ca\u62ec\u4e86 free-space manager\uff1b
        • Free-space manager \u7ef4\u62a4\u90a3\u4e9b\u6ca1\u6709\u88ab\u5206\u914d\u7684 blocks\uff0c\u5e76\u5728 file-organization module \u8bf7\u6c42\u7684\u65f6\u5019\u63d0\u4f9b\u8fd9\u4e9b blocks\uff1b
    4. Logical file system
      • \u4ee5\u6587\u4ef6\u63a7\u5236\u5757\u7684\u5f62\u5f0f\u5b58\u50a8\u6587\u4ef6\u7cfb\u7edf\u7684\u5143\u6570\u636e\uff0c\u5373\u4e00\u4e9b\u7ed3\u6784\u4fe1\u606f\uff0c\u4e0d\u5305\u62ec\u5b9e\u9645\u7684\u6587\u4ef6\u5185\u5bb9\u4fe1\u606f\uff1b
      • \u5177\u4f53\u6765\u8bf4\uff0clogical file system \u4f1a\u7ef4\u62a4 directory \u7684\u4fe1\u606f\uff0c\u4e3a\u4e4b\u540e\u7684 file-organization module \u63d0\u4f9b\u4e00\u4e9b\u4fe1\u606f\uff0c\u4f8b\u5982\u7b26\u53f7\u6587\u4ef6\u540d\uff1b
    "},{"location":"cour_note/D3QD_OperatingSystem/Unit6/#fcb","title":"FCB","text":"

    \u6587\u4ef6\u63a7\u5236\u5757(file control block, FCB)

    1. ISO/IEC 10918-1: 1993(E) p.36\uff0c\u5176\u4e2d SOI (Start Of Image) \u7684\u503c\u4e3a 0xFFD8\u3002\u00a0\u21a9

    2. Why are hard links not allowed for directories? \u21a9

    3. File Permissions \u21a9

    4. Implementation of File Systems \u21a9\u21a9

    "},{"location":"others/","title":"\u6249\u9875","text":"

    \u7ea6 21 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u6211\u4e0d\u80fd\u4e00\u76f4\u5728\u4f60\u8eab\u8fb9\u5e2e\u52a9\u4f60\u3002 \u2014\u2014\u67e5\u7406\u00b7\u5e03\u6717

    "},{"location":"others/tools/","title":"\u5de5\u5177\u6536\u96c6","text":"

    \u7ea6 46 \u4e2a\u5b57

    "},{"location":"others/reveal-md2Slides/","title":"\u4f7f\u7528 reveal-md \u6765\u5199 Slides","text":"

    \u7ea6 4169 \u4e2a\u5b57 151 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 23 \u5206\u949f

    \u524d\u8a00

    "},{"location":"others/reveal-md2Slides/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

    reveal-md \u662f reveal.js \u7684\u4e00\u4e2a\u6269\u5c55\u5de5\u5177\uff0c\u7c7b\u4f3c\u4e8e\u4e00\u4e2a\u9884\u7f16\u8bd1\u5de5\u5177\u3002\u5229\u7528 reveal-md\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u7f16\u5199\u4e00\u4e2a Markdown \u6587\u4ef6\u6765\u5feb\u901f\u7b80\u4fbf\u5730\u751f\u6210\u4e00\u4e2a\u57fa\u4e8e\u7f51\u9875\u7684 Slides\uff0c\u4f60\u4e5f\u53ef\u4ee5\u5c06\u5b83\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u5e76\u90e8\u7f72\u5728\u7c7b\u4f3c github pages \u7b49\u5e73\u53f0\u6765\u5206\u4eab\u9759\u6001\u9875\u9762\u3002

    "},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528-ppt-\u548c\u8bed\u96c0\u6587\u6863\u6f14\u793a\u6a21\u5f0f","title":"\u4e3a\u4ec0\u4e48\u6211\u4e0d\u7528 PPT \u548c\u8bed\u96c0\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d","text":"

    \u5728\u8fd9\u7bc7\u6587\u7ae0\u548c\u8bed\u5883\u4e2d\uff0c\u6211\u60f3\u5927\u6982\u5c06\u300c\u6f14\u793a\u300d\u6240\u4f7f\u7528\u7684\u5f62\u5f0f\u5206\u4e3a\u4e09\u79cd\uff1a

    \u6070\u597d\uff0c\u8bed\u96c0\u63a8\u51fa\u6f14\u793a\u6587\u7a3f\u7684\u65f6\u5019\u6709\u8bf4\u660e\u4e3a\u4ec0\u4e48\u4ed6\u4eec\u8981\u5f00\u53d1\u8fd9\u6837\u4e00\u4e2a\u4e1c\u897f\u3002

    \u518d\u89c1PPT\uff0c\u4f60\u597d\u201c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u201d

    \u6211\u975e\u5e38\u8d5e\u540c\u8fd9\u7bc7\u6587\u7ae0\u4e2d\u5bf9\u4e8e PPT \u7684\u53d9\u8ff0\uff0c\u6211\u4e5f\u5f88\u8ba8\u538c PPT \uff0c\u5b83\u786e\u5b9e\u53ef\u4ee5\u505a\u5f88\u591a\u4e8b\uff0c\u4f46\u662f\u5bf9\u6211\u6765\u8bf4\u6ca1\u5fc5\u8981\uff0c\u6211\u4e5f\u7528\u4e0d\u5230\u3002\u800c\u4e14\u8eab\u4e3a\u7834\u5199\u4ee3\u7801\u7684\uff0c\u6211\u5bf9\u90a3\u79cd\u6240\u8c13\u7684\u9ad8\u7ea7\u611f\u5e76\u6ca1\u6709\u4ec0\u4e48\u611f\u89c9\u3002\u800c\u4e14 PPT \u6709\u4e00\u4e2a\u81f4\u547d\u7684\u7f3a\u70b9\u5c31\u662f\u5b83\u7684\u5206\u4eab\u975e\u5e38\u4e0d\u65b9\u4fbf\uff0c\u4f60\u5fc5\u987b\u8981\u901a\u8fc7\u300c\u6587\u4ef6\u300d\u6765\u4f20\u9012\u4f60\u7684\u6750\u6599\uff0c\u800c\u4e14\u8fd8\u6536\u5230\u5c55\u793a\u8bbe\u5907\u7684\u73af\u5883\u9650\u5236\uff0c\u800c\u5176\u4ed6\u4e24\u79cd\u65b9\u6cd5\u90fd\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002

    \u56de\u5230\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bda\u7136\uff0c\u5728\u67d0\u4e9b\u7279\u5b9a\u7684\u65f6\u95f4\uff0c\u6587\u6863\u6f14\u793a\u786e\u5b9e\u80fd\u4fbf\u6377\u7684\u89e3\u51b3\u8bb8\u591a\u95ee\u9898\uff0c\u4f46\u662f\u6211\u4e0d\u89c9\u5f97\u76ee\u524d\u7684\u6587\u7a3f\u6f14\u793a\u80fd\u6210\u4e3a Slides \u7684\u66ff\u4ee3\u54c1\u3002\u5b83\u786e\u5b9e\u4fbf\u6377\u4e14\u9ad8\u6548\uff0c\u4f46\u662f\u5e76\u4e0d\u597d\u770b\uff0c\u4e5f\u5e76\u4e0d\u6e05\u6670\u2014\u2014\u800c\u4e14\u8bf4\u56de\u6765\uff0c\u5176\u5b9e\u4e5f\u4e0d\u65b9\u4fbf\uff08\u4e3a\u4ec0\u4e48\u6211\u4e4b\u540e\u4f1a\u8bb2\uff09\u3002 \u7b80\u5355\u8bb2\u4e86\u4e00\u4e0b\u6211\u5bf9\u5176\u4ed6\u4e24\u79cd\u9014\u5f84\u7684\u770b\u6cd5\uff0c\u5173\u4e8e\u901a\u8fc7\u4ee3\u7801\u9014\u5f84\u7f16\u5199\u300c\u6f14\u793a\u300d\u6587\u6863\u6211\u5f53\u7136\u4e5f\u6709\u8bdd\u8bf4\uff0c\u4f46\u662f\u6211\u60f3\u628a\u4ed6\u4eec\u653e\u5728\u540e\u9762\u3002

    \u63a5\u4e0b\u6765\uff0c\u6211\u60f3\u4ece\u300c\u4f7f\u7528\u4f53\u9a8c\u300d\u7684\u89d2\u5ea6\u6765\u8bc4\u4ef7\u4e00\u4e0b\u4e0a\u9762\u5df2\u7ecf\u63d0\u8fc7\u7684\u4e24\u4e2a\u9014\u5f84\u3002

    \u5728\u6211\u770b\u6765\uff0cPPT \u4e4b\u6240\u4ee5\u7d2f\u8d58\u4e14\u4f4e\u6548\uff0c\u662f\u56e0\u4e3a\u5927\u90e8\u5206\u4eba\u6d6a\u8d39\u65f6\u95f4\u5728\u4e8e\u4e0e\u6838\u5fc3\u5185\u5bb9\u5e76\u4e0d\u76f4\u63a5\u76f8\u5173\u7684\u7f8e\u5de5\u4e0a\u3002\u800c\u4ece\u5de5\u4f5c\u6d41\u7a0b\u4e0a\u6765\u8bb2\uff0c\u9664\u975e\u6211\u7cbe\u901a PPT \u4e14\u6709\u65f6\u95f4\uff0c\u5426\u5219\u6211\u4e0d\u4f1a\u4eb2\u81ea\u53bb\u505a PPT\uff0c\u800c\u662f\u548c\u7f8e\u5de5\u5bf9\u63a5\uff0c\u8ba9\u4ed6\u4eec\u6765\u505a\u3002\u53ef\u8fd9\u6837\u4e00\u6765\u95ee\u9898\u5c31\u51fa\u73b0\u4e86\uff0c\u201c\u5bf9\u63a5\u201d\u8fd9\u4ef6\u4e8b\u672a\u5fc5\u6bd4\u505a PPT \u8f7b\u677e\u3002\u53c8\u6216\u8005\u6211\u8fd9\u4e2a PPT \u662f\u6211\u81ea\u5df1\u9700\u8981\u7684\uff0c\u90a3\u6211\u5c31\u5f97\u786c\u7740\u5934\u76ae\u82b1\u8d39\u65f6\u95f4\u53bb\u94bb\u7814\u5982\u4f55\u505a\u4e00\u4e2a\u597d\u770b\u7684 PPT\uff0c\u7ed3\u679c\u6d6a\u8d39\u5927\u628a\u65f6\u95f4\u505a\u51fa\u6765\u7684\u53ef\u80fd\u8fd8\u662f\u4e2a\u8fde\u6cb9\u817b\u90fd\u8bf4\u4e0d\u4e0a\u7684\u4e1c\u897f\u3002

    \u800c\u56de\u5230\u8bed\u96c0\u7684\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\uff0c\u8bf4\u6765\u53ef\u7b11\uff0c\u6211\u5199\u8fd9\u4e00\u884c\u7684\u65f6\u5019\u5c31\u53c8\u51fa\u4e86 bug\u3002\u8bda\u7136\u300c\u6587\u6863\u6f14\u793a\u6a21\u5f0f\u300d\u662f\u4e00\u4e2a\u5f88\u597d\u7684 Idea\uff0c\u4f46\u662f\u8bed\u96c0\u81ea\u8eab\u5927\u5927\u5c0f\u5c0f\u7684\u95ee\u9898\u5230\u5904\u90fd\u662f\uff0c\u672c\u6765\u4f5c\u4e3a\u4e00\u4e2a\u6548\u7387\u5de5\u5177\u5374\u603b\u662f\u5728\u610f\u6599\u4e4b\u5916\u7684\u5730\u65b9\u9047\u5230\u5f88\u7cdf\u5fc3\u7684 Bug \uff0c\u8fd9\u7740\u5b9e\u5f88\u5f71\u54cd\u6548\u7387\uff08\u5173\u4e8e\u8fd9\u65b9\u9762\u7684\u5410\u69fd\u6211\u5c31\u4e0d\u653e\u5728\u8fd9\u91cc\u8bf4\u4e86\uff0c\u4ee5\u9632\u504f\u9898\uff09\u3002

    \u5728\u8fd9\u6837\u4e00\u4e2a\u57fa\u7840\u4e0b\uff0c\u51fa\u73b0\u4e86\u95ee\u9898\u4f46\u662f\u6211\u4eec\u65e0\u6cd5\uff0c\u6216\u8005\u8bf4\u5feb\u901f\u6392\u67e5\uff0c\u6216\u8005\u8bf4\u662f\u9000\u800c\u6c42\u5176\u6b21\u5bfb\u627e\u522b\u7684\u5b9e\u73b0\u529e\u6cd5\uff0c\u90fd\u662f\u4e0d\u65b9\u4fbf\u7684\u3002\u6362\u53e5\u8bdd\u6765\u8bf4\u5c31\u662f\u8fd9\u4e2a\u529f\u80fd\u81ea\u8eab\u7684\u7a33\u5b9a\u6027\u5c31\u4e0d\u80fd\u4fdd\u8bc1\uff0c\u800c\u5176\u5b9e\u73b0\u5bf9\u4f7f\u7528\u8005\u6765\u8bf4\u4e5f\u5e76\u4e0d\u8db3\u591f\u7b80\u5355\u900f\u660e\uff0c\u5bfc\u81f4\u4f7f\u7528\u8d77\u6765\u4f1a\u9700\u8981\u627f\u62c5\u5f88\u591a\u4e0d\u786e\u5b9a\u7684\u98ce\u9669\u3002\uff08\u987a\u4fbf\u5410\u69fd\u4e00\u53e5\uff0c\u4f7f\u7528\u8bed\u96c0\u7684\u8fd9\u4e00\u5e74\u6211\u4f53\u611f\u4e0a\u5f71\u54cd\u4f53\u9a8c\u7684 Bug \u662f\u8d8a\u6765\u8d8a\u591a\u4e86\u2026\u2026\uff09

    "},{"location":"others/reveal-md2Slides/#\u4e3a\u4ec0\u4e48\u6211\u7528-reveal","title":"\u4e3a\u4ec0\u4e48\u6211\u7528 reveal*","text":"

    \u90a3\u4e48\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5236\u4f5c\u300c\u6f14\u793a\u300d\u6750\u6599\u53c8\u600e\u4e48\u6837\u5462\uff1f\u9996\u5148\u662f Beamer\uff0c\u5927\u6982\u4e5f\u662f\u6700\u6709\u540d\u7684\uff0c\u5176\u57fa\u4e8e \\(\\LaTeX\\) \u5b9e\u73b0\uff0c\u5176\u5728\u6392\u7248\u4e0a\u7684\u53ef\u63a7\u6027\u4e0d\u8a00\u800c\u55bb\uff0c\u4f46\u662f\u5199\u8fc7\u7684\u4eba\u90fd\u77e5\u9053 \\(\\LaTeX\\) \u5199\u8d77\u6765\u591a\u8d39\u5fc3\uff1b\u800creveal.js \u4ee5\u53ca nodeppt \u662f\u6211\u627e\u5230\u8fc7\u7684\u4e24\u4e2a\u6bd4\u8f83\u6ee1\u610f\u7684\uff0c\u901a\u8fc7\u4ee3\u7801\u6765\u5199 Slides \u7684\u5de5\u5177\u3002\u6211\u5e76\u4e0d\u6253\u7b97\u5728\u8fd9\u91cc\u628a\u4ed6\u4eec\u4e24\u4e2a\u90fd\u8be6\u7ec6\u7684\u4ecb\u7ecd\u4e00\u904d\uff0c\u4f46\u662f\u6211\u5e0c\u671b\u7b80\u5355\u8868\u8fbe\u4e00\u4e0b\u6211\u5bf9\u8fd9\u4e24\u4e2a\u4e1c\u897f\u7684\u770b\u6cd5\u3002

    \u9996\u5148\uff0c\u5728\u6211\u7684\u7406\u89e3\u4e2d\uff0cnodeppt \u5bf9\u7f8e\u5316\u662f\u6bd4 reveal.js \u8981\u597d\u4e00\u4e9b\u7684\uff0c\u5373\uff0c\u629b\u5f00\u82b1\u8d39\u5728\u91cc\u9762\u7684\u65f6\u95f4\u4e0d\u8bf4\uff0c\u5c31\u7ed3\u679c\u800c\u8a00\uff0c\u4f7f\u7528 nodeppt \u4f1a\u6bd4 reveal.js \u597d\u770b\u4e00\u4e9b\uff0c\u6392\u7248\u66f4\u81ea\u7531\u4e00\u4e9b\u3002\u4f46\u662f\u4ece\u300c\u6548\u7387\u300d\u6765\u8bf4\uff0c\u6211\u503e\u5411\u4e8e reveal.js\u3002 \u7406\u7531\u5f88\u7b80\u5355\uff0creveal.js \u7684\u5206\u9875\u903b\u8f91\u6df1\u5f97\u6211\u5fc3\uff1a

    \u6211\u81ea\u5df1\u5199\u7684\u67d0\u4e2a Slides \u7684\u7ed3\u6784\u901f\u89c8

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u9875\u9762\u6709\u7eb5\u5411\u548c\u6a2a\u5411\u4e24\u4e2a\u6269\u5c55\u65b9\u5411\uff0c\u8fd9\u975e\u5e38\u7b26\u5408\u5c42\u6b21\u5316\u7684\u601d\u7ef4\u903b\u8f91\uff0c\u4e5f\u5f88\u7b26\u5408\u6587\u6863\u7684\u7f16\u5199\u903b\u8f91\uff0c\u5e76\u4e14\u603b\u4f53\u800c\u8a00 \u6ca1\u6709\u4ec0\u4e48\u82b1\u91cc\u80e1\u54e8\u4f46\u662f\u6ca1\u5565\u7528\u7684\u4e1c\u897f\uff0c\u5177\u6709\u4e00\u79cd\u5965\u5361\u59c6\u5243\u5200\u7684\u7f8e\u611f\u3002\u7136\u800c\u8fd9\u5e76\u4e0d\u610f\u5473\u7740\u5b83\u7684\u7f8e\u5de5\u4e0a\u9650\u5f88\u4f4e\uff0c\u6070\u6070\u76f8\u53cd\uff0c\u4e0d\u4ec5 reveal.js \u7684\u5185\u7f6e\u52a8\u753b\u548c\u98ce\u683c\u5c31\u5f88\u8212\u9002\uff0c\u800c\u4e14\u65e0\u8bba\u662f reveal.js \u8fd8\u662f nodeppt\uff0c\u4ed6\u4eec\u7684\u672c\u8d28\u90fd\u662f\u9759\u6001\u7f51\u9875\uff0c\u4f60\u5927\u53ef\u4ee5\u7528\u4f60\u7684\u524d\u7aef\u6280\u80fd\u6765\u7f8e\u5316\u5b83\u2014\u2014\u5f53\u7136\uff0c \u5bf9\u6211\u6765\u8bf4\u8fd9\u4e9b\u4e1c\u897f\u5c31\u6ca1\u5565\u5fc5\u8981\u4e86\u3002 \u4ee5\u4e0a\u90fd\u662f\u5173\u4e8e\u6548\u679c\u7684\u53d9\u8ff0\uff0c\u90a3\u5b83\u662f\u5426\u771f\u7684\u5199\u8d77\u6765\u5f88\u65b9\u4fbf\u5462\uff1f\u5176\u5b9e\u6211\u611f\u89c9\u539f\u751f\u7684 reveal.js \u5199\u8d77\u6765\u5e76\u4e0d\u65b9\u4fbf\uff0c\u6211\u4e00\u5f00\u59cb\u751a\u81f3\u4e0d\u77e5\u9053\u8981\u5982\u4f55\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6587\u6863\u3002\u4f46\u662f\u6211\u540e\u6765\u53d1\u73b0\u4e86[reveal-md](https://github.com/webpro/reveal-md)\u8fd9\u4e2a\u5de5\u5177\u3002\u5229\u7528reveal-md\uff0c\u4f60\u53ef\u4ee5\u771f\u6b63\u610f\u4e49\u4e0a\u7684\u5b9e\u73b0\u4f7f\u7528markdown\u8bed\u6cd5\u6765\u5199\u4e00\u4e2a Slides\u3002

    "},{"location":"others/reveal-md2Slides/#\u5b89\u88c5\u4e0e\u6f14\u793a","title":"\u5b89\u88c5\u4e0e\u6f14\u793a","text":"

    \u786e\u4fdd\u60a8\u7684[npm](https://www.npmjs.com/)\u80fd\u591f\u6b63\u5e38\u4f7f\u7528\uff0c\u63a5\u4e0b\u6765\u5b89\u88c5reveal-md\u4f60\u53ea\u9700\u8981\u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u5373\u53ef\u3002

    npm install -g reveal-md\n

    \u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u4f60\u5c31\u53ef\u4ee5\u5c06 reveal-md \u5f53\u4f5c\u4e00\u4e2a console app \u6765\u4f7f\u7528\uff0c\u8f93\u5165 reveal-md --help \u6765\u67e5\u770b\u547d\u4ee4\u8be6\u7ec6\u7684\u4f7f\u7528\u65b9\u6cd5\u3002

    help list
    Puppeteer unavailable, unable to create featured slide image for OpenGraph metadata.\nPuppeteer unavailable, unable to generate PDF file.\nUsage: cli <slides.md> [options]\n\nSee https://github.com/webpro/reveal-md for more details.\n\nOptions:\n  -V, --version                               output the version number\n      --title <title>                         Title of the presentation\n  -s, --separator <separator>                 Slide separator [default: 3 dashes (---) surrounded by two blank lines]\n-S, --vertical-separator <separator>        Vertical slide separator [default: 4 dashes (----) surrounded by two blank lines]\n-t, --theme <theme>                         Theme [default: black]\n--highlight-theme <theme>               Highlight theme [default: zenburn]\n--css <files>                           CSS files to inject into the page\n      --scripts <files>                       Scripts to inject into the page\n      --assets-dir <dirname>                  Defines assets directory name [default: _assets]\n--preprocessor <script>                 Markdown preprocessor script\n      --template <filename>                   Template file for reveal.js\n      --listing-template <filename>           Template file for listing\n      --glob <pattern>                        Glob pattern to select markdown files for listing and conversion [default: **/*.md]\n--print [filename]                      Print to PDF file\n      --static [dir]                          Export static html to directory [_static]. Incompatible with --print.\n      --static-dirs <dirs>                    Extra directories to copy into static directory. Only used in conjunction with --static.\n  -w, --watch                                 Watch for changes in markdown file and livereload presentation\n      --disable-auto-open                     Disable auto-opening your web browser\n      --host <host>                           Host [default: localhost]\n--port <port>                           Port [default: 1948]\n--featured-slide <num>                  Capture snapshot from this slide (numbering starts from 1) and use it as og:image for static build. Defaults to first slide. Only used with --static.\n      --absolute-url <url>                    Define url used for hosting static build. This is included in OpenGraph metadata. Only used with --static.\n      --print-size                            Paper size to use in exported PDF files\n      --puppeteer-launch-args <args>          Customize how Puppeteer launches Chromium. The arguments are specified as a space separated list (for example --puppeteer-launch-args=\"--no-sandbox --disable-dev-shm-usage\"). Needed for some CI setups.\n      --puppeteer-chromium-executable <path>  Customize which Chromium executable puppeteer will launch. Allows to use a globally installed version of Chromium.\n  -h, --help                                  output usage information\n

    \u5728\u6211\u81ea\u5df1\u7684\u4f7f\u7528\u8fc7\u7a0b\u4e2d\uff0c\u6211\u8ba4\u4e3a\u6bd4\u8f83\u6838\u5fc3\u7684\u4e24\u6761\u547d\u4ee4\u5982\u4e0b\uff1a

    ## \u6700\u57fa\u7840\u7684\u547d\u4ee4\uff0c\u6839\u636e Markdown \u6587\u4ef6\u5728\u672c\u5730 1948 \u7aef\u53e3\u751f\u6210 Slides \u670d\u52a1\u3002\n$ reveal-md your-md-file.md\n\n## \u4e3a\u4e86\u5b9e\u73b0\u5728\u7ebf\u90e8\u7f72\uff0c\u9700\u8981\u5bfc\u51fa\u4e3a\u9759\u6001\u8d44\u6e90\u3002\n$ reveal-md your-md-file.md --static your-static-dir\n

    \u4e5f\u5c31\u662f\u8bf4\uff0c\u4f60\u53ea\u9700\u8981\u7f16\u5199\u4e00\u4e2amd\u6587\u4ef6\uff0c\u5e76\u4f7f\u7528\u8fd9\u4e9b\u6307\u4ee4\u5c31\u80fd\u751f\u6210 reveal.js Slides\u3002 \u63a5\u4e0b\u6765\u4ee5\u5b98\u65b9 demo \u4e3a\u4f8b\u4ecb\u7ecd\u4e00\u4e0b\u4f7f\u7528\u3002\u8fd0\u884c\u6307\u4ee4\u4ee5\u540e\u4f1a\u5728 1948 \u7aef\u53e3\u542f\u52a8\u670d\u52a1\uff0c\u4e00\u822c\u4f1a\u76f4\u63a5\u901a\u8fc7\u6d4f\u89c8\u5668\u6253\u5f00\u3002 \u5728 PC \u7aef\u53e3\uff1a

    \u6309 f \u4e4b\u524d\u3002 \u5168\u5c4f\u663e\u793a\u3002

    \u800c\u5728\u79fb\u52a8\u7aef\uff08\u6bd4\u5982\u8bbf\u95ee\u67d0\u4e2a\u5b9e\u4f8b\u7684\u5728\u7ebf\u90e8\u7f72\u65f6\uff09\uff0c\u57fa\u672c\u7684\u70b9\u51fb\u64cd\u4f5c\u662f\u4e00\u6837\u7684\uff0c\u6b64\u5916\uff0c\u5e26\u6709\u65b9\u5411\u7684\u6ed1\u52a8\u53ef\u4ee5\u5bf9\u5e94\u65b9\u5411\u952e\u529f\u80fd\u3002

    "},{"location":"others/reveal-md2Slides/#\u6587\u6863\u7f16\u5199","title":"\u6587\u6863\u7f16\u5199","text":"

    \u5728\u8fd9\u90e8\u5206\uff0c\u6211\u5e76\u4e0d\u6253\u7b97\u6309\u7167\u6a21\u5757\u5316\u3001\u7cfb\u7edf\u5316\u7684\u6d41\u7a0b\u6765\u7f16\u5199\u6559\u7a0b\uff0c\u8fd9\u4e9b\u4f60\u5728\u5b98\u65b9\u6587\u6863\u4e2d\u90fd\u80fd\u627e\u5230\u2014\u2014\u6211\u5e76\u4e0d\u89c9\u5f97\u201c\u5b57\u5178\u201d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u5b66\u4e60\u9014\u5f84\uff0c\u5c31\u50cf\u6211\u4eec\u4e00\u822c\u4e0d\u5efa\u8bae\u7528\u300aC++ Primer\u300b\u5165\u95e8 C++\uff0c\u66f4\u4e0d\u4f1a\u5efa\u8bae\u5916\u56fd\u53cb\u4eba\u901a\u8fc7\u300a\u65b0\u534e\u5b57\u5178\u300b\u6765\u5b66\u4e60\u6c49\u8bed\u3002 \u6211\u5c06\u6309\u7167\u6211\u5bf9\u8fd9\u4e2a\u5de5\u5177\u7684\u7406\u89e3\uff0c\u6309\u7167\u7531\u6d45\u5165\u6df1\uff0c\u6309\u7167\u5fc5\u8981\u7a0b\u5ea6\u6765\u4ecb\u7ecd\u5185\u5bb9\u3002\u5b83\u53ef\u80fd\u770b\u8d77\u6765\u4f1a\u53c8\u4e9b\u6df7\u4e71\uff0c\u4f46\u662f\u6211\u89c9\u5f97\u5b83\u662f\u7b26\u5408\u5b9e\u8df5\u987a\u5e8f\u7684\uff0c\u5982\u679c\u8ba9\u4f60\u89c9\u5f97\u770b\u8d77\u6765\u5f88\u8d39\u52b2\uff0c\u53ef\u4ee5\u642d\u914d\u5b98\u65b9\u6587\u6863\u6765\u4f7f\u7528\uff0c\u6216\u8005\u76f4\u63a5\u544a\u8bc9\u6211\u3002 \u6b64\u5916\uff0c\u5176\u4e2d\u53ef\u80fd\u4e0d\u4f1a\u6d89\u53ca\u4e00\u90e8\u5206\u6211\u4e2a\u4eba\u4e0d\u592a\u559c\u6b22\u7684\u4e1c\u897f\uff0c\u6bd4\u5982\u540c\u6837\u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u6587\u4ef6\u548c\u547d\u4ee4\u53c2\u6570\u7684\u884c\u4e3a\uff0c\u6211\u4f1a\u9009\u62e9\u53ea\u4ecb\u7ecd\u914d\u7f6e\u6587\u4ef6\u7684\u65b9\u6848\u3002\u5982\u679c\u4f60\u5bf9\u53e6\u5916\u4e00\u79cd\u65b9\u6848\u611f\u5174\u8da3\uff0c\u53ef\u4ee5\u8be6\u7ec6\u9605\u8bfb\u6587\u6863\u6216\u8005\u5e2e\u52a9\u83dc\u5355\u3002\u6b64\u5916\uff0c\u672c\u6587\u7ae0\u4e5f\u4e0d\u4f1a\u6d89\u53ca reveal-md \u7684\u6240\u6709\u5185\u5bb9\uff0c\u800c\u66f4\u591a\u7684\u662f\u4e00\u4e2a\u629b\u7816\u5f15\u7389\u6216\u8005\u8bf4\u57fa\u7840\u4f7f\u7528\u7684\u6559\u7a0b\u3002\u90e8\u5206\u9700\u6c42\u53ef\u80fd\u662f\u9762\u5411\u7279\u6b8a\u7528\u6237\u7fa4\u4f53\u7684\uff0c\u8fd8\u662f\u90a3\u53e5\u8bdd\uff0c\u5982\u679c\u6709\u5174\u8da3\u53ef\u4ee5\u67e5\u770b\u5b98\u65b9\u6587\u6863\u3002

    "},{"location":"others/reveal-md2Slides/#\u5206\u9875","title":"\u5206\u9875","text":"

    \u9996\u5148\uff0c\u5982\u679c\u4f60\u7528\u4e00\u4e2a\u518d\u666e\u901a\u4e0d\u8fc7\u7684 Markdown \u6587\u4ef6\u6765\u521b\u5efa Slides\uff0c\u6bd4\u5982\uff1a

    ## Part 1\n\n### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n### Part 1.2\n\n{code block here}\n\n### Part 1.3\n\n> Everthings seems ok!\n

    \u90a3\u4e48\u8fd0\u884c\u4ee5\u540e\u6211\u4eec\u4f1a\u5f97\u5230\u8fd9\u6837\u4e00\u4e2a\u9875\u9762\uff1a

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5b83\u5e76\u4e0d\u50cf\u6211\u4eec\u60f3\u7684\u90a3\u6837\uff0c\u5411\u6a2a\u5411\u548c\u7eb5\u5411\u6269\u5c55\u3002\u4f46\u662f\u8fd9\u6070\u597d\u8bf4\u660e\u6240\u6709\u4e1c\u897f\u90fd\u662f\u53ef\u63a7\u7684\uff0c\u800c\u4e0d\u662f\u83ab\u540d\u5176\u5999\u7684\u6839\u636e\u67d0\u4e2a\u6807\u9898\u5c31\u81ea\u52a8\u6362\u6389\uff0c\u8fdb\u800c\u5bfc\u81f4\u4e00\u7cfb\u5217\u8be1\u5f02\u7684\u95ee\u9898\u3002

    \u5728 reveal-md \u4e2d\uff0c\u6709\u4e24\u79cd separator \u548c vertical separator \u4e24\u79cd\uff0c\u987e\u540d\u601d\u4e49\uff0c\u5206\u522b\u5bf9\u5e94\u7740\u5de6\u53f3\u5206\u9875\u548c\u4e0a\u4e0b\u5206\u9875\u3002\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cseparator \u662f \\n---\\n\uff0c\u800c vertical separator \u662f \\n----\\n\u3002\u6240\u4ee5\u7a0d\u5fae\u5bf9\u4e0a\u9762\u7684\u6587\u6863\u8fdb\u884c\u4e00\u4e9b\u4fee\u6539\uff1a

    ### Part 1\n\n---\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n----\n\n#### Part 1.2\n\n{code block here}\n\n----\n\n#### Part 1.3\n\n> Everthings seems ok!\n

    \u518d\u6b21\u8fd0\u884c\u5c31\u80fd\u53d1\u73b0\u6211\u4eec\u7684 Slides \u5df2\u7ecf\u6709\u4e86\u4e8c\u7ef4\u7684\u5c42\u7ea7\u7ed3\u6784\uff1a

    \u867d\u7136\u8fd9\u91cc\u7684\u9884\u89c8\u56fe\u91cc\u770b\u8d77\u6765\u6392\u7248\u5f88\u4e11\uff0c\u4f46\u662f\u5b9e\u9645\u5c55\u793a\u7684\u65f6\u5019\u90fd\u662f\u9ed8\u8ba4\u5c45\u4e2d\uff0c\u4e0d\u559c\u6b22\u7684\u8bdd\u53ef\u4ee5\u6539\u76f8\u5173\u8bbe\u7f6e\u6216\u8005\u7528 html \u6807\u7b7e\u4fee\u6539\u3002

    \u90a3\u4e48\u5176\u5b9e\u5230\u6b64\u4e3a\u6b62\uff0c\u4f60\u5df2\u7ecf\u80fd\u591f\u901a\u8fc7reveal-md\u6765\u5b9e\u73b0\u975e\u5e38\u5feb\u901f\u7684 Slides \u7f16\u5199\u4e86\u3002\u4f46\u662f\u4e3a\u4e86\u5b9a\u5236\u4e3b\u9898\uff0c\u6216\u8005\u662f\u4f7f\u7528\u4e00\u4e9b\u66f4\u9ad8\u7ea7\u7684\u4e1c\u897f\uff0c\u6211\u4eec\u8fd8\u9700\u8981\u4ecb\u7ecd\u4e00\u4e9b\u522b\u7684\u4e1c\u897f\uff0c\u5305\u62ec\u5bf9\u67d0\u4e9b\u4e1c\u897f\u7684\u81ea\u5b9a\u4e49\u3001\u67d0\u4e9b\u6a21\u5757\u7684\u6269\u5c55\u529f\u80fd\u3001\u4e0e\u539f\u751freveal.js\u8bed\u6cd5\u7684\u6df7\u7528\u3002 \u5728\u6b63\u5f0f\u8fdb\u5165\u4e0b\u4e00\u4e2a\u90e8\u5206\u4e4b\u524d\uff0c\u6211\u60f3\u8865\u5145\u4ecb\u7ecd\u4e00\u4e0b\u5982\u4f55\u4fee\u6539\u9ed8\u8ba4\u7684 separator\uff1a \u6709\u4e24\u79cd\u65b9\u6848\u80fd\u5b9e\u73b0 seperator \u7684\u81ea\u5b9a\u4e49\uff0c\u4e00\u79cd\u662f\u901a\u8fc7\u5728\u547d\u4ee4\u884c\u4e2d\u7684\u9644\u52a0\u53c2\u6570\u5b9e\u73b0\uff0c\u53e6\u4e00\u79cd\u5219\u662f\u5728md\u6587\u4ef6\u5f00\u5934\u5199\u597d\u914d\u7f6e\u6587\u4ef6\u5b9e\u73b0\u3002

    ---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n

    \u8fd9\u91cc\u6211\u624d\u7528\u7b2c\u4e8c\u79cd\u65b9\u6848\u6765\u6539\u88c5\u6211\u4eec\u7684 md \u6587\u4ef6\u73b0\u5728\u5f97\u5230\uff1a

    ---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n{code block here}\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n

    \u800c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u9664\u4e86\u5f00\u5934\u914d\u7f6e\u6587\u4ef6\u7684\u90e8\u5206\uff0c\u5176\u4ed6\u7684 --- \u5219\u4f1a\u88ab\u8ba4\u4e3a\u662f md \u7684\u8bed\u6cd5\uff0c\u6e32\u67d3\u4e3a\u6b63\u5e38\u7684\u5206\u5272\u7ebf\u3002

    "},{"location":"others/reveal-md2Slides/#\u4ee3\u7801\u6846","title":"\u4ee3\u7801\u6846","text":"

    \u9996\u5148\uff0c\u5728 reveal-md \u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u548c\u5728 markdown \u4e2d\u4f7f\u7528\u662f\u4e00\u6837\u7684\uff0c\u53ea\u4e0d\u8fc7 reveal.js \u5bf9\u4ee3\u7801\u6846\u6709\u66f4\u591a\u7684\u652f\u6301\uff0c\u800c reveal-md \u5c06\u8fd9\u79cd\u652f\u6301\u878d\u5408\u8fdb\u4e86 markdown \u7684\u8bed\u6cd5\u3002\u6211\u5728\u8fd9\u91cc\u4e3b\u8981\u60f3\u4ecb\u7ecd\u7684\u662f\u4ee3\u7801\u6846\u9ad8\u4eae\u884c\u52a8\u753b\u3002

    \u4e0d\u77e5\u9053\u4f60\u6709\u6ca1\u6709\u9047\u5230\u8fc7\u8fd9\u79cd\u60c5\u51b5\uff0c\u6211\u4eec\u9700\u8981\u8d34\u51fa\u4e00\u6bb5\u4ee3\u7801\uff0c\u4f46\u662f\u6709\u4e9b\u90e8\u5206\u5e76\u4e0d\u662f\u91cd\u70b9\uff0c\u4f46\u662f\u4e0d\u653e\u4e0a\u53bb\u53c8\u89c9\u5f97\u602a\u602a\u7684\uff1b\u53c8\u6216\u8005\u4f60\u7684\u4ee3\u7801\u91cc\u6709\u591a\u4e2a\u91cd\u70b9\uff0c\u4f60\u9700\u8981\u5728\u5c55\u793a\u65f6\u624b\u52a8\u544a\u8bc9\u5927\u5bb6\u54ea\u91cc\u662f\u91cd\u70b9\uff1freveal* \u53ef\u4ee5\u505a\u5230\u6309\u884c\u9ad8\u4eae\u4ee3\u7801\uff0c\u5e76\u4e14\u80fd\u591f\u5b9e\u73b0\u52a8\u753b\u3002\u8fd9\u4e48\u8bf4\u6709\u70b9\u62bd\u8c61\uff0c\u53ef\u4ee5\u4f53\u9a8c\u4e00\u4e0b\u8fd9\u4e00\u9875 Slide\u3002

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e0d\u4ec5\u9ad8\u4eae\u4e86\uff0c\u800c\u4e14\u8fd8\u6709\u81ea\u52a8\u6eda\u52a8\u5230\u4e2d\u5fc3\u3002

    \u90a3\u4e48\u8981\u5982\u4f55\u5b9e\u73b0\u5462\uff1f\u6211\u4eec\u77e5\u9053\uff0c\u5728Markdown\u4e2d\u4f7f\u7528\u4ee3\u7801\u6846\u7684\u8bed\u6cd5\u5982\u4e0b\uff1a

    - \u524d\u9762\u7684\u6570\u5b57\u662f\u4e3a\u4e86\u6807\u8bb0\u5b83\u4eec\u5c5e\u4e8e\u4ee3\u7801\u6846\u7684\u7b2c\u51e0\u884c\u800c\u5199\u7684\uff0c\u5b9e\u9645\u4e0d\u9700\u8981\u5199\u8fd9\u4e9b\u6570\u5b57\uff08\u5e9f\u8bdd\uff09\n- \u53cd\u659c\u6760\u662f\u4e3a\u4e86\u9632\u6b62md\u6e32\u67d3\u9519\u8bef\uff0c\u5b9e\u9645\u4e0a\u4e0d\u9700\u8981\u52a0\n\n\\```cpp\n1       #include <iostream>\n2       int main(){\n3           std::cout << \"Hello World!\\n\";\n4       return 0;\n5       }\n\\```\n

    \u90a3\u4e48\uff0c\u4e3a\u4e86\u5b9e\u73b0\u9ad8\u4eae\uff0c\u6211\u4eec\u53ea\u9700\u8981\u5728\u8bed\u8a00\u540e\u9762\u52a0\u4e0a\u4e00\u4e2a\u65b9\u62ec\u53f7 [...] \u6765\u6807\u8bb0\u9ad8\u4eae\u884c\u5373\u53ef\uff0c\u6bd4\u5982 [2-5] \u5c31\u662f\u6807\u8bb0 2\uff5e5 \u884c\uff0c\u4e5f\u5c31\u662f\u6574\u4e2a main() \u51fd\u6570\u3002\u6b64\u5916\uff0c\u4f60\u8fd8\u53ef\u4ee5\u7528|\u6765\u5206\u9694\u591a\u4e2a\u9ad8\u4eae\u5757\uff0c\u6765\u5b9e\u73b0\u52a8\u753b\u7684\u6548\u679c\uff0c\u4f8b\u5982 [1|2-5] \u5c31\u662f\u5148\u9ad8\u4eae\u9884\u7f16\u8bd1\uff0c\u518d\u9ad8\u4eae main() \u51fd\u6570\u3002

    ---\nseparator: <!--s-->\nverticalSeparator: <!--v-->\n---\n\n### Part 1\n\n<!--s-->\n\n#### Part 1.1\n\n- Orderred List\n- Next Line\n\n1. Numberred List\n2. Next Line\n\n<!--v-->\n\n#### Part 1.2\n\n\\```cpp[1|2-5]\n#include <iostream>\nint main(){\n    std::cout << \"Hello World!\\n\";\n    return 0;\n}\n\\```\n\n<!--v-->\n\n#### Part 1.3\n\n> Everthings seems ok!\n
    "},{"location":"others/reveal-md2Slides/#\u683c\u5f0f\u652f\u6301","title":"\u683c\u5f0f\u652f\u6301","text":"

    \u5728\u6587\u672c\u683c\u5f0f\u6392\u7248\u65b9\u9762\uff0cMarkdown \u7684\u539f\u751f\u8bed\u6cd5\u90fd\u662f\u652f\u6301\u7684\uff0c\u6b64\u5916\u4f60\u5f53\u7136\u4e5f\u53ef\u4ee5\u4f7f\u7528 html \u6807\u7b7e\u6765\u7f16\u8f91\u4f60\u7684\u6587\u5b57\uff0c\u4f8b\u5982\u4fee\u6539\u989c\u8272\u3001\u8bbe\u7f6e\u5c45\u4e2d/\u9760\u5de6/\u9760\u53f3\u3001\u4fee\u6539\u5927\u5c0f\u2026\u2026 \u4f8b\u5982\uff0c\u4e0a\u9762\u5c55\u793a\u7684\u90a3\u5f20\u5c55\u793a\u4ee3\u7801\u9ad8\u4eae\u7684 Slide \u7684\u521d\u59cb\u4ee3\u7801\u5982\u4e0b\uff1a

    ### \u8f93\u51fa\u6d41\n\n\\```c[1-19|13-16]\n#ifndef __C_NEWBIE_HELPER__\n#define __C_NEWBIE_HELPER__\n/****************************************************\n * C Newbie Helper 1.0                              *\n * ------------------------------------------------ *\n * Github Repository Address:                       *\n * - https://github.com/IsshikiHugh/C-Newbie-Helper *\n ****************************************************/\n/*** Config Part ************************************/\n// MODE 0 : Logs will be write to 'CNH_log.txt' file.\n// MODE 1 : Logs will be print to console (colorful for normal terminal).\n// MODE 2 : Logs will be print to console (colorless but fine for CMD).\n#define CNH_MODE 2\n...\n\\```\n\n<font size=\"6\">\n\n- \u5982\u679c\u4f60\u5bf9\u547d\u4ee4\u884c<font color=\"orange\">\u6beb\u65e0\u4e86\u89e3</font>\uff0c\u90a3\u4e48\u8bf7\u68c0\u67e5 <font color=\"cyan\">CNH_MODE</font> \u88ab\u8bbe\u7f6e\u4e3a <font color=\"cyan\">2</font> \uff1b\n- \u5982\u679c\u4f60\u7684\u65e5\u5fd7\u5c06\u4f1a\u88ab\u6253\u5370\u5728\u5e38\u89c4\u7684 <font color=\"orange\">Terminal</font> \u4e0a\uff0c\u90a3\u4e48\u6211\u4eec\u63a8\u8350\u4f60\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">1</font> \uff1b\n- \u5982\u679c\u4f60\u5e0c\u671b\u4f60\u7684\u65e5\u5fd7\u5185\u5bb9\u4e0d\u88ab\u6253\u5370\uff0c\u800c\u662f\u8f93\u51fa\u5230<font color=\"orange\">\u6587\u4ef6</font>\u4e2d\uff0c\u5219\u53ef\u4ee5\u8bbe\u7f6e <font color=\"cyan\">CNH_MODE</font> \u4e3a <font color=\"cyan\">0</font> \uff0c\u4f46\u662f\u8bf7\u6ce8\u610f\uff0cCNH \u65e0\u6cd5\u6e05\u7a7a\u8f93\u51fa\u6587\u4ef6\uff0c\u8bf7\u5728\u6bcf\u6b21\u8f93\u51fa\u7684\u65f6\u5019\u624b\u52a8\u6e05\u7406 <font color=\"yellow\">CNH_log.txt</font> \uff1b\n\n</font>\n

    \u6839\u636e\u6211\u7684\u89c2\u5bdf\uff0c\u5982\u679c\u9700\u8981\u5728html\u6807\u7b7e\u91cc\u4f7f\u7528Markdown\u8bed\u6cd5\uff0c\u6700\u597d\u5728\u6807\u7b7e\u548c\u8bed\u6cd5\u4e4b\u95f4\u52a0\u7a7a\u884c\u3002

    "},{"location":"others/reveal-md2Slides/#\u5b9a\u5236\u4e0e\u7f8e\u5316","title":"\u5b9a\u5236\u4e0e\u7f8e\u5316","text":"

    \u8fd9\u91cc\u6211\u63d0\u4f9b\u4e00\u4e2a\u6211\u81ea\u5df1\u7684\u6e90md\u6587\u4ef6\u5f00\u5934\u914d\u7f6e\u7684\u6a21\u677f\uff1a

    ---\ntitle: Title\nseparator: <!--s-->\nverticalSeparator: <!--v-->\ntheme: league\nhighlightTheme: tomorrow-night-bright\nrevealOptions:\n  width: 1520\nheight: 950\nmargin: 0.04\n  transition: 'convex'\nslideNumber: true\n---\n

    \u6211\u8fd9\u91cc\u586b\u5199\u7684\u662f\u6211\u81ea\u5df1\u8ba4\u4e3a\u6bd4\u8f83\u8212\u670d\u800c\u4e14\u597d\u770b\u7684\u3002\u5f53\u7136\uff0c\u5982\u679c\u672c\u5730\u5bf9\u5e94\u8d44\u6e90\u6587\u4ef6\u91cc\u6709\u60a8\u81ea\u5df1\u7f16\u5199\u7684\u8d44\u6e90\u4e5f\u662f\u53ef\u4ee5\u7528\u7684\u3002\u4f46\u662f\u8fd9\u4e00\u5757\u6211\u7684\u94bb\u7814\u4e5f\u4e0d\u662f\u7279\u522b\u6df1\uff0c\u6211\u672c\u8eab\u4e5f\u4e0d\u662f\u524d\u7aef\u4eba\uff0c\u6240\u4ee5\u53ea\u80fd\u4ecb\u7ecd\u5230\u8fd9\u91cc\u4e86\u3002

    "},{"location":"others/reveal-md2Slides/#\u901a\u8fc7-github-pages-\u5b9e\u73b0\u9759\u6001\u90e8\u7f72","title":"\u901a\u8fc7 GitHub Pages \u5b9e\u73b0\u9759\u6001\u90e8\u7f72","text":"

    \u5728\u8fd9\u4e2a\u7ae0\u8282\u4e2d\uff0c\u6211\u5c06\u4ecb\u7ecd\u5982\u4f55\u5229\u7528 GitHub Pages \u5b9e\u73b0 Slides \u7684\u90e8\u7f72\uff0c\u5728\u8bf8\u5982 Gitee Pages \u7684\u5e73\u53f0\u5b9e\u73b0\u8fd9\u4e9b\u529f\u80fd\u7684\u6d41\u7a0b\u4e5f\u662f\u7c7b\u4f3c\u7684\u3002 \u9996\u5148\u4f60\u9700\u8981\u521b\u5efa\u4e00\u4e2a Repo \u6765\u5b58\u653e\u4f60\u7684\u9759\u6001\u8d44\u6e90\uff0c\u4f8b\u5982\u3002\u6211\u4e2a\u4eba\u7684\u505a\u6cd5\u662f\u76f4\u63a5\u628a\u521d\u59cb\u7684 md \u6587\u672c\u548c\u9759\u6001\u8d44\u6e90\u6587\u672c\u90fd\u653e\u5728\u4e00\u4e2a\u5730\u65b9\u4e86\u3002 \u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u9700\u8981\u5bfc\u51fa\u9759\u6001\u8d44\u6e90\uff0c\u4f7f\u7528\u7684\u662f\u8fd9\u6761\u6307\u4ee4\uff1a

    reveal-md your-md-file.md --static your-static-dir\n

    \u63a5\u4e0b\u6765\uff0c\u4f60\u4f1a\u5f97\u5230\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5305\u542b\u8fd9\u4e2a Slides \u6240\u9700\u8981\u7684\u6240\u6709\u8d44\u6e90\u3002\u4f60\u53ea\u9700\u8981\u5c06\u5b83\u4f20\u5230\u4f60\u7684 Repo \u91cc\u5373\u53ef\u3002 \u4f8b\u5982\u6211\u7684\u4ed3\u5e93\u4e2d\uff1a

    \u8fdb\u5165repo/.../static-dir\uff0c\u4e5f\u5c31\u662f\u4e0a\u56fe\u7684slides\uff0c\u6211\u4eec\u53ef\u4ee5\u770b\u5230\u7c7b\u4f3c\u8fd9\u6837\u7684\u4e00\u4e9b\u6587\u4ef6\uff1a

    \u5176\u4e2d\u7684 index.html \u548c slides.html \u90fd\u662f Slides \u7684 html \u6587\u4ef6\u3002\u533a\u522b\u8c8c\u4f3c\u662f index.html\u4f1a \u6709\u4e00\u4e2a\u5f39\u7a97\u544a\u8bc9\u4f60\u4f7f\u7528\u7684\u662f reveal.js\u3002

    \u63a5\u4e0b\u6765\uff0c\u8bbe\u7f6e pages \u670d\u52a1\u4ee5\u540e\u901a\u8fc7 https://<github_id>.github.io/<repo_name>/.../slides.html \u5373\u53ef\u8bbf\u95ee\u5230\u9875\u9762\u5566\uff01 \u4f8b\u5982\u4e0a\u65b9\u8fd9\u4e2a\u4ed3\u5e93\u5bf9\u5e94\u7684 URL \u662f https://isshikihugh.github.io/myReveal-md/projectsTutorial_CNewbieHelper/slides/slides.html\u3002

    \u5229\u7528 Pages \u670d\u52a1\uff0c\u5c31\u53ef\u4ee5\u5feb\u901f\u4fbf\u6377\u5730\u5206\u4eab\u4f60\u7684 Slides\uff0c\u5bf9\u4e8e\u4e0d\u61c2\u6280\u672f\u7684\u4eba\u6765\u8bf4\u4e0d\u4ec5\u8868\u73b0\u6548\u679c\u4e0d\u5dee\uff0c\u800c\u4e14\u8fd8\u6709\u4e00\u4e1d\u903c\u683c\u3002\u4e0d\u8fc7\u5728\u56fd\u5185\u6216\u8bb8\u8bbf\u95ee\u4e0d\u592a\u7a33\u5b9a\uff0c\u6240\u4ee5\u53ef\u4ee5\u8003\u8651\u4f7f\u7528 Gitee Pages \u6765\u5b9e\u73b0\u3002\u4e0d\u8fc7 Gitee Pages \u670d\u52a1\u6bcf\u4e00\u6b21\u90fd\u9700\u8981\u4f60\u81ea\u5df1\u53bb\u66f4\u65b0\u4e00\u4e0b\uff0c\u8fd8\u6709\u4e00\u4e9b\u5ba1\u6838\u673a\u5236\u3002

    "},{"location":"others/reveal-md2Slides/#\u4e00\u4e9b\u5751","title":"\u4e00\u4e9b\u5751","text":"

    reveal-md \u5df2\u7ecf\u6709\u5927\u6982\u4e00\u5e74\u7684\u65f6\u95f4\u6ca1\u6709\u7ef4\u62a4\u4e86\uff0c\u5176\u4e2d\u4e5f\u9047\u5230\u4e00\u4e9b\u95ee\u9898\uff0c\u6211\u9047\u5230\u4e86\u4e00\u4e9b\u5c31\u8bb0\u4e0b\u6765\u3002

    "},{"location":"pape_read/","title":"\u6249\u9875","text":"

    \u7ea6 31 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u4f60\u4eec\u8981\u52aa\u529b\u8fdb\u7a84\u95e8\uff0c\u56e0\u4e3a\u5bbd\u95e8\u548c\u9614\u8def\u5f15\u5411\u6c89\u6ca6\u3002 \u2014\u2014\u5b89\u5fb7\u70c8\u00b7\u7eaa\u5fb7\u300a\u7a84\u95e8\u300b

    "},{"location":"pape_read/ACTOR/","title":"[ACTOR] Action-Conditioned 3D Human Motion Synthesis with Transformer VAE","text":"

    \u7ea6 235 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    3DV Human-Motion Action-Control

    \u6587\u7ae0\u4fe1\u606f

    \u76f8\u5173\u5185\u5bb9

    "},{"location":"pape_read/ACTOR/#introduction","title":"Introduction","text":"

    In this work, our goal is to take a semantic action label like \u201cThrow\u201d and generate an infinite number of realistic 3D human motion sequences, of varying length, that look like realistic throwing (Figure 1).

    \u5e76\u4e14\u53d7\u4f7f\u7528\u573a\u666f\u9650\u5236\uff0c\u5b83\u9700\u8981\u6709\u5f3a\u7ea6\u675f\u4ee5\u53ca\u76f8\u5bf9\u7684\u9ad8\u6548\u6027\u3002

    \u6d89\u53ca\u4eba\u4f53\u76ae\u80a4\u8868\u9762\u4e0e\u4e3b\u5ba2\u4f53\u7684\u4ea4\u4e92\uff0c\u6240\u4ee5\u4f7f\u7528 SMPL \u662f\u4e00\u4e2a\u975e\u5e38\u597d\u7684\u9009\u62e9\u3002

    noisy 3D body poses

    \u540c\u6837\u91c7\u7528 Positional Encoding\uff0c\u8fd9\u4e0e NeRF \u8054\u7cfb\u8d77\u6765\u3002

    "},{"location":"pape_read/ACTOR/#related-work","title":"Related Work","text":" \u7591\u60d1

    his allows the generation of variable length sequences without the problem of the motions regressing to the mean pose. \u8fd9\u53e5\u8bdd\u662f\u4ec0\u4e48\u610f\u601d\uff1f

    Translate

    \u7ffb\u8bd1\u5185\u5bb9

    "},{"location":"pape_read/ACTOR/trans/","title":"Translate","text":"

    \u7ea6 4848 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 24 \u5206\u949f

    "},{"location":"pape_read/ACTOR/trans/#abstract","title":"Abstract","text":"

    \u6211\u4eec\u89e3\u51b3\u4e86\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u751f\u6210\u903c\u771f\u591a\u6837\u7684\u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\u7684\u95ee\u9898\u3002 \u4e0e\u5b8c\u6210\u6216\u6269\u5c55\u8fd0\u52a8\u5e8f\u5217\u7684\u65b9\u6cd5\u76f8\u6bd4\uff0c\u6b64\u4efb\u52a1\u4e0d\u9700\u8981\u521d\u59cb\u59ff\u52bf\u6216\u5e8f\u5217\u3002 \u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u901a\u8fc7\u8bad\u7ec3\u751f\u6210\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668 (VAE) \u6765\u5b66\u4e60\u4eba\u4f53\u52a8\u4f5c\u7684\u52a8\u4f5c\u611f\u77e5\u6f5c\u5728\u8868\u793a\u3002 \u901a\u8fc7\u4ece\u8fd9\u4e2a\u6f5c\u5728\u7a7a\u95f4\u4e2d\u91c7\u6837\u5e76\u901a\u8fc7\u4e00\u7cfb\u5217\u4f4d\u7f6e\u7f16\u7801\u67e5\u8be2\u67d0\u4e2a\u6301\u7eed\u65f6\u95f4\uff0c\u6211\u4eec\u5408\u6210\u4e86\u4ee5\u5206\u7c7b\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u53ef\u53d8\u957f\u5ea6\u8fd0\u52a8\u5e8f\u5217\u3002 \u5177\u4f53\u6765\u8bf4\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u67b6\u6784 ACTOR\uff0c\u7528\u4e8e\u7f16\u7801\u548c\u89e3\u7801\u4ece\u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6\u4f30\u8ba1\u7684\u4e00\u7cfb\u5217\u53c2\u6570\u5316 SMPL \u4eba\u4f53\u6a21\u578b\u3002 \u6211\u4eec\u5728 NTU RGB+D\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bc4\u4f30\u4e86\u6211\u4eec\u7684\u65b9\u6cd5\uff0c\u5e76\u5c55\u793a\u4e86\u5bf9\u73b0\u6709\u6280\u672f\u7684\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c55\u793a\u4e86\u4e24\u4e2a\u7528\u4f8b\uff1a\u901a\u8fc7\u5c06\u6211\u4eec\u7684\u5408\u6210\u6570\u636e\u6dfb\u52a0\u5230\u8bad\u7ec3\u4e2d\u6765\u6539\u8fdb\u52a8\u4f5c\u8bc6\u522b\uff0c\u4ee5\u53ca\u8fd0\u52a8\u53bb\u566a\u3002 \u4ee3\u7801\u548c\u6a21\u578b\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

    "},{"location":"pape_read/ACTOR/trans/#introduction","title":"Introduction","text":"

    \u5c3d\u7ba1\u5bf9\u4eba\u4f53\u8fd0\u52a8\u5efa\u6a21\u8fdb\u884c\u4e86\u6570\u5341\u5e74\u7684\u7814\u7a76 [4\u30015]\uff0c\u4f46\u5408\u6210\u903c\u771f\u4e14\u53ef\u63a7\u7684\u5e8f\u5217\u4ecd\u7136\u6781\u5177\u6311\u6218\u6027\u3002 \u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u91c7\u7528\u50cf\u201c\u6295\u63b7\u201d\u8fd9\u6837\u7684\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff0c\u5e76\u751f\u6210\u65e0\u9650\u6570\u91cf\u7684\u903c\u771f 3D \u4eba\u4f53\u8fd0\u52a8\u5e8f\u5217\uff0c\u957f\u5ea6\u5404\u4e0d\u76f8\u540c\uff0c\u770b\u8d77\u6765\u50cf\u771f\u5b9e\u7684\u6295\u63b7\uff08\u56fe 1\uff09\u3002\u5927\u91cf\u5148\u524d\u7684\u5de5\u4f5c\u90fd\u96c6\u4e2d\u5728\u91c7\u53d6\u4e00\u4e2a\u59ff\u52bf\u6216\u4e00\u7cfb\u5217\u59ff\u52bf\uff0c\u7136\u540e\u9884\u6d4b\u672a\u6765\u7684\u8fd0\u52a8 [3\u30016\u300122\u300171\u300174]\u3002 \u8fd9\u662f\u4e00\u4e2a\u8fc7\u4e8e\u53d7\u9650\u7684\u573a\u666f\uff0c\u56e0\u4e3a\u5b83\u5047\u8bbe\u5df2\u7ecf\u6709\u4e00\u4e2a\u8fd0\u52a8\u5e8f\u5217\u5e76\u4e14\u53ea\u9700\u8981\u66f4\u591a\u3002 \u53e6\u4e00\u65b9\u9762\uff0c\u8bb8\u591a\u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u865a\u62df\u73b0\u5b9e\u548c\u89d2\u8272\u63a7\u5236 [28\u300161] \u9700\u8981\u751f\u6210\u5177\u6709\u6307\u5b9a\u6301\u7eed\u65f6\u95f4\u7684\u7ed9\u5b9a\u7c7b\u578b\uff08\u8bed\u4e49\u52a8\u4f5c\u6807\u7b7e\uff09\u7684\u52a8\u4f5c\u3002

    \u56fe1\uff1a\u76ee\u6807\uff1a\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684 Transformer VAE\uff08ACTOR\uff09\u5b66\u4e60\u5408\u6210\u4ee5\u5206\u7c7b\u52a8\u4f5c\u548c\u6301\u7eed\u65f6\u95f4T\u4e3a\u6761\u4ef6\u7684\u4eba\u7c7b\u8fd0\u52a8\u5e8f\u5217\u3002\u5e8f\u5217\u662f\u901a\u8fc7\u4ece\u5355\u4e00\u7684\u8fd0\u52a8\u8868\u5f81\u6f5c\u4f0f\u5411\u91cfz\u4e2d\u53d6\u6837\u4ea7\u751f\u7684\uff0c\u800c\u4e0d\u662f\u5148\u524d\u5de5\u4f5c\u4e2d\u7684\u6846\u67b6\u7ea7\u5d4c\u5165\u7a7a\u95f4\u3002

    \u6211\u4eec\u901a\u8fc7\u4f7f\u7528\u5177\u6709\u76f8\u5e94\u52a8\u4f5c\u6807\u7b7e\u7684 3D \u4eba\u4f53\u8fd0\u52a8\u6570\u636e\u8bad\u7ec3\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u6765\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u3002\u7279\u522b\u662f\uff0c\u6211\u4eec\u6784\u5efa\u4e86\u4e00\u4e2a\u57fa\u4e8e Transformer \u7684\u7f16\u7801\u5668-\u89e3\u7801\u5668\u67b6\u6784\uff0c\u5e76\u4f7f\u7528 VAE \u76ee\u6807\u5bf9\u5176\u8fdb\u884c\u8bad\u7ec3\u3002 \u6211\u4eec\u4f7f\u7528 SMPL [46] \u5bf9\u4eba\u4f53\u8fdb\u884c\u53c2\u6570\u5316\uff0c\u56e0\u4e3a\u5b83\u53ef\u4ee5\u8f93\u51fa\u5173\u8282\u4f4d\u7f6e\u6216\u8eab\u4f53\u8868\u9762\u3002 \u8fd9\u4e3a\u66f4\u597d\u5730\u6a21\u62df\u4e0e\u73af\u5883\u7684\u76f8\u4e92\u4f5c\u7528\u94fa\u5e73\u4e86\u9053\u8def\uff0c\u56e0\u4e3a\u8868\u9762\u662f\u6a21\u62df\u63a5\u89e6\u6240\u5fc5\u9700\u7684\u3002 \u6b64\u5916\uff0c\u8fd9\u79cd\u8868\u793a\u5141\u8bb8\u4f7f\u7528\u591a\u79cd\u91cd\u5efa\u635f\u5931\uff1a\u7ea6\u675f\u8fd0\u52a8\u6811\u4e2d\u7684\u96f6\u4ef6\u65cb\u8f6c\u3001\u5173\u8282\u4f4d\u7f6e\u6216\u8868\u9762\u70b9\u3002\u6587\u732e [40] \u548c\u6211\u4eec\u7684\u7ed3\u679c\u8868\u660e\uff0c\u635f\u5931\u7684\u7ec4\u5408\u7ed9\u51fa\u4e86\u6700\u771f\u5b9e\u7684\u751f\u6210\u8fd0\u52a8\u3002

    \u8fd0\u52a8\u5408\u6210\u7684\u5173\u952e\u6311\u6218\u662f\u751f\u6210\u5728\u611f\u77e5\u4e0a\u903c\u771f\u7684\u540c\u65f6\u5177\u6709\u591a\u6837\u6027\u7684\u5e8f\u5217\u3002\u8bb8\u591a\u8fd0\u52a8\u751f\u6210\u65b9\u6cd5\u90fd\u91c7\u7528\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u4f8b\u5982 LSTM [16] \u548c GRU [49]\u3002\u7136\u800c\uff0c\u8fd9\u4e9b\u65b9\u6cd5\u901a\u5e38\u4f1a\u5728\u4e00\u6bb5\u65f6\u95f4\u540e\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf [49] \u5e76\u4e14\u5bb9\u6613\u6f02\u79fb\u3002 \u6211\u4eec\u7684 Transformer \u6a21\u578b\u7684\u5173\u952e\u521b\u65b0\u662f\u4e3a\u89e3\u7801\u5668\u63d0\u4f9b\u4f4d\u7f6e\u7f16\u7801\u5e76\u7acb\u5373\u8f93\u51fa\u5b8c\u6574\u5e8f\u5217\u3002 \u6700\u8fd1\u5173\u4e8e\u795e\u7ecf\u8f90\u5c04\u573a\u7684\u5de5\u4f5c\u5df2\u7ecf\u666e\u53ca\u4e86\u4f4d\u7f6e\u7f16\u7801 [50]\uff1b \u6211\u4eec\u8fd8\u6ca1\u6709\u770b\u5230\u5b83\u50cf\u6211\u4eec\u4e00\u6837\u7528\u4e8e\u8fd0\u52a8\u751f\u6210\u3002 \u8fd9\u5141\u8bb8\u751f\u6210\u53ef\u53d8\u957f\u5ea6\u5e8f\u5217\uff0c\u800c\u4e0d\u4f1a\u51fa\u73b0\u8fd0\u52a8\u56de\u5f52\u5230\u5e73\u5747\u59ff\u52bf\u7684\u95ee\u9898\u3002 \u6b64\u5916\uff0c\u636e\u6211\u4eec\u6240\u77e5\uff0c\u6211\u4eec\u7684\u65b9\u6cd5\u662f\u7b2c\u4e00\u4e2a\u521b\u5efa\u52a8\u4f5c\u6761\u4ef6\u5e8f\u5217\u7ea7\u5d4c\u5165\u7684\u65b9\u6cd5\u3002 \u6700\u63a5\u8fd1\u7684\u5de5\u4f5c\u662f Action2Motion [21]\uff0c\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u5b83\u63d0\u51fa\u4e86\u4e00\u79cd\u81ea\u56de\u5f52\u65b9\u6cd5\uff0c\u5176\u4e2d\u6f5c\u5728\u8868\u793a\u5904\u4e8e\u5e27\u7ea7\u522b\u3002 \u83b7\u5f97\u5e8f\u5217\u7ea7\u5d4c\u5165\u9700\u8981\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\uff1a\u6211\u4eec\u4e3a\u6b64\u76ee\u7684\u5f15\u5165\u4e86\u4e00\u79cd\u7ed3\u5408 Transformers \u548c VAE \u7684\u65b0\u65b9\u6cd5\uff0c\u8fd9\u4e5f\u663e\u7740\u63d0\u9ad8\u4e86\u57fa\u7ebf\u7684\u6027\u80fd\u3002

    \u6211\u4eec\u7684\u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u95ee\u9898\u7684\u4e00\u4e2a\u7279\u5b9a\u6311\u6218\u662f\u5b58\u5728\u4e0e\u4e0d\u540c\u52a8\u4f5c\u6807\u7b7e\u914d\u5bf9\u7684\u6709\u9650\u52a8\u4f5c\u6355\u6349 (MoCap) \u6570\u636e\uff0c\u901a\u5e38\u5728 10 \u4e2a\u7c7b\u522b\u4e2d [31\u300163]\u3002 \u76f8\u53cd\uff0c\u6211\u4eec\u4f9d\u9760\u5355\u76ee\u8fd0\u52a8\u4f30\u8ba1\u65b9\u6cd5 [38] \u6765\u83b7\u5f97 3D \u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u5728 UESTC \u52a8\u4f5c\u8bc6\u522b\u6570\u636e\u96c6 [32] \u7684 40 \u4e2a\u7ec6\u7c92\u5ea6\u7c7b\u522b\u4e0a\u5448\u73b0\u6709\u5e0c\u671b\u7684\u7ed3\u679c\u3002 \u4e0e[21]\u76f8\u53cd\uff0c\u6211\u4eec\u4e0d\u9700\u8981\u591a\u89c6\u89d2\u76f8\u673a\u6765\u8fdb\u884c\u5355\u76ee\u8f68\u8ff9\u4f30\u8ba1\uff0c\u8fd9\u4f7f\u5f97\u6211\u4eec\u7684\u6a21\u578b\u53ef\u80fd\u9002\u7528\u4e8e\u66f4\u5927\u7684\u5c3a\u5ea6\u3002 \u5c3d\u7ba1\u6709\u566a\u97f3\uff0c\u5355\u773c\u4f30\u8ba1\u88ab\u8bc1\u660e\u8db3\u4ee5\u7528\u4e8e\u8bad\u7ec3\uff0c\u5e76\u4e14\u4f5c\u4e3a\u6211\u4eec\u6a21\u578b\u7684\u989d\u5916\u597d\u5904\uff0c\u6211\u4eec\u80fd\u591f\u901a\u8fc7\u6211\u4eec\u5b66\u4e60\u7684\u8fd0\u52a8\u8868\u793a\u6765\u7f16\u7801\u89e3\u7801\u53bb\u566a\u4f30\u8ba1\u5e8f\u5217\u3002

    \u52a8\u4f5c\u6761\u4ef6\u751f\u6210\u6a21\u578b\u53ef\u4ee5\u589e\u5f3a\u73b0\u6709\u7684 MoCap \u6570\u636e\u96c6\uff0c\u8fd9\u4e9b\u6570\u636e\u96c6\u6602\u8d35\u4e14\u5927\u5c0f\u6709\u9650 [48,63]\u3002 \u6700\u8fd1\u7684\u7814\u7a76\u63d0\u4f9b\u4e86\u7528\u4e8e\u8bad\u7ec3\u52a8\u4f5c\u8bc6\u522b\u6a21\u578b\u7684\u5408\u6210\u4eba\u7c7b\u52a8\u4f5c\u89c6\u9891 [65]\uff0c\u663e\u793a\u4e86\u52a8\u4f5c\u591a\u6837\u6027\u548c\u6bcf\u4e2a\u52a8\u4f5c\u7684\u5927\u91cf\u6570\u636e\u7684\u91cd\u8981\u6027\u3002 \u8fd9\u79cd\u65b9\u6cd5\u53ef\u4ee5\u53d7\u76ca\u4e8e\u65e0\u9650\u6e90\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u5408\u6210\u3002 \u6211\u4eec\u901a\u8fc7\u52a8\u4f5c\u8bc6\u522b\u5b9e\u9a8c\u6765\u63a2\u8ba8\u8fd9\u4e2a\u95ee\u9898\u3002 \u6211\u4eec\u89c2\u5bdf\u5230\uff0c\u5c3d\u7ba1\u5b58\u5728 domain gap\uff0c\u4f46\u751f\u6210\u7684\u8fd0\u52a8\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\uff0c\u5c24\u5176\u662f\u5728\u4f4e\u6570\u636e\u8bbe\u7f6e\u4e2d\u3002 \u6700\u540e\uff0c\u7d27\u51d1\u7684\u52a8\u4f5c\u611f\u77e5\u4eba\u4f53\u8fd0\u52a8\u6f5c\u5728\u7a7a\u95f4\u53ef\u4ee5\u7528\u4f5c\u5176\u4ed6\u4efb\u52a1\u7684\u5148\u51b3\u6761\u4ef6\uff0c\u4f8b\u5982\u89c6\u9891\u4e2d\u7684\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002

    \u6211\u4eec\u7684\u8d21\u732e\u6709\u56db\u65b9\u9762\uff1a(i) \u6211\u4eec\u4ecb\u7ecd\u4e86 ACTOR\uff0c\u8fd9\u662f\u4e00\u79cd\u65b0\u578b\u7684\u57fa\u4e8e Transformer \u7684\u6761\u4ef6 VAE\uff0c\u5e76\u8bad\u7ec3\u5b83\u901a\u8fc7\u4ece\u5e8f\u5217\u7ea7\u6f5c\u5728\u5411\u91cf\u4e2d\u91c7\u6837\u6765\u751f\u6210\u52a8\u4f5c\u6761\u4ef6\u4eba\u4f53\u8fd0\u52a8\u3002 (ii) \u6211\u4eec\u8bc1\u660e\u53ef\u4ee5\u4f7f\u7528\u4ece\u5355\u773c\u89c6\u9891\u4f30\u8ba1\u7684\u5608\u6742 3D \u4eba\u4f53\u59ff\u52bf\u6765\u5b66\u4e60\u751f\u6210\u903c\u771f\u7684 3D \u4eba\u4f53\u8fd0\u52a8\uff1b (iii) \u6211\u4eec\u5bf9\u67b6\u6784\u548c\u635f\u5931\u7ec4\u4ef6\u8fdb\u884c\u5168\u9762\u7684\u6d88\u878d\u7814\u7a76\uff0c\u5728\u591a\u4e2a\u6570\u636e\u96c6\u4e0a\u83b7\u5f97\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff1b (iv) \u6211\u4eec\u4e3a\u52a8\u4f5c\u8bc6\u522b\u548c MoCap \u53bb\u566a\u6a21\u578b\u8bf4\u660e\u4e86\u4e24\u4e2a\u7528\u4f8b\u3002 \u8be5\u4ee3\u7801\u53ef\u5728\u6211\u4eec\u7684\u9879\u76ee\u9875\u9762 [57] \u4e0a\u627e\u5230\u3002

    "},{"location":"pape_read/ACTOR/trans/#related-work","title":"Related Work","text":"

    \u6211\u4eec\u7b80\u8981\u56de\u987e\u4e86\u6709\u5173\u8fd0\u52a8\u9884\u6d4b\u3001\u8fd0\u52a8\u5408\u6210\u3001\u5355\u773c\u8fd0\u52a8\u4f30\u8ba1\u4ee5\u53ca VAE \u80cc\u666f\u4e0b\u7684 Transformers \u7684\u76f8\u5173\u6587\u732e\u3002

    \u672a\u6765\u4eba\u4f53\u8fd0\u52a8\u9884\u6d4b\u3002\u4eba\u4f53\u8fd0\u52a8\u5206\u6790\u7684\u7814\u7a76\u5386\u53f2\u60a0\u4e45\uff0c\u53ef\u4ee5\u8ffd\u6eaf\u5230 20 \u4e16\u7eaa 80 \u5e74\u4ee3 [5,17,19,52]\u3002 \u7ed9\u5b9a\u8fc7\u53bb\u7684\u8fd0\u52a8\u6216\u521d\u59cb\u59ff\u52bf\uff0c\u9884\u6d4b\u672a\u6765\u7684\u5e27\u88ab\u79f0\u4e3a\u8fd0\u52a8\u9884\u6d4b\u3002 \u65e9\u671f\u7814\u7a76\u4e2d\u5df2\u7ecf\u91c7\u7528\u4e86\u7edf\u8ba1\u6a21\u578b [7, 18]\u3002 \u6700\u8fd1\uff0c\u968f\u7740 GANs [20] \u6216 VAEs [37] \u7b49\u795e\u7ecf\u7f51\u7edc\u751f\u6210\u6a21\u578b\u7684\u8fdb\u5c55\uff0c\u4e00\u4e9b\u5de5\u4f5c\u663e\u793a\u51fa\u53ef\u559c\u7684\u7ed3\u679c\u3002 \u793a\u4f8b\u5305\u62ec\u7528\u4e8e\u672a\u6765\u8fd0\u52a8\u9884\u6d4b\u7684 HP-GAN [6] \u548c\u5faa\u73af VAE [22]\u3002 \u5927\u591a\u6570\u5de5\u4f5c\u5c06\u8eab\u4f53\u89c6\u4e3a\u9aa8\u67b6\uff0c\u5c3d\u7ba1\u6700\u8fd1\u7684\u5de5\u4f5c\u5229\u7528\u4e86\u5b8c\u6574\u7684 3D \u8eab\u4f53\u5f62\u72b6\u6a21\u578b [3, 74]\u3002 \u4e0e [74] \u7c7b\u4f3c\uff0c\u6211\u4eec\u4e5f\u8d85\u8d8a\u4e86\u7a00\u758f\u5173\u8282\u5e76\u5c06\u9876\u70b9\u5408\u5e76\u5230\u8eab\u4f53\u8868\u9762\u3002 DLow [71] \u4fa7\u91cd\u4e8e\u4ece\u9884\u8bad\u7ec3\u6a21\u578b\u4e2d\u591a\u6837\u5316\u672a\u6765\u8fd0\u52a8\u7684\u91c7\u6837\u3002 [11] \u4f7f\u7528\u5173\u4e8e\u5bf9\u8c61\u4ea4\u4e92\u7684\u4e0a\u4e0b\u6587\u7ebf\u7d22\u6267\u884c\u6709\u6761\u4ef6\u7684\u672a\u6765\u9884\u6d4b\u3002 \u6700\u8fd1\uff0c[42] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e Transformer \u7684\u821e\u8e48\u751f\u6210\u65b9\u6cd5\uff0c\u8be5\u65b9\u6cd5\u4ee5\u97f3\u4e50\u548c\u8fc7\u53bb\u7684\u52a8\u4f5c\u4e3a\u6761\u4ef6\u3002 \u6bb5\u7b49\u3002 [14] \u4f7f\u7528\u53d8\u5f62\u91d1\u521a\u5b8c\u6210\u8fd0\u52a8\u3002 \u6709\u4e00\u4e2a\u5173\u4e8e\u8fd0\u52a8\u201c\u4e2d\u95f4\u201d\u7684\u76f8\u5173\u5de5\u4f5c\uff0c\u5b83\u91c7\u7528\u8fc7\u53bb\u548c\u672a\u6765\u7684\u59ff\u52bf\uff0c\u5e76\u201c\u4fee\u590d\u201d\u5b83\u4eec\u4e4b\u95f4\u7684\u5408\u7406\u8fd0\u52a8\uff1b \u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u89c1 [23]\u3002 \u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u5728\u6ca1\u6709\u4efb\u4f55\u8fc7\u53bb\u89c2\u5bdf\u7684\u60c5\u51b5\u4e0b\u5408\u6210\u8fd0\u52a8\u3002 \u4eba\u4f53\u8fd0\u52a8\u5408\u6210\u3002 \u867d\u7136\u6709\u5927\u91cf\u5173\u4e8e\u672a\u6765\u9884\u6d4b\u7684\u6587\u732e\uff0c\u4f46\u4ece\u5934\u5f00\u59cb\u7efc\u5408\u53d7\u5230\u7684\u5173\u6ce8\u76f8\u5bf9\u8f83\u5c11\u3002 \u975e\u5e38\u65e9\u671f\u7684\u5de5\u4f5c\u4f7f\u7528 PCA [51] \u548c GPLVM [64] \u6765\u5b66\u4e60\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u5faa\u73af\u8fd0\u52a8\u7684\u7edf\u8ba1\u6a21\u578b\u3002 \u5bf9\u591a\u79cd\u591a\u6837\u7684\u52a8\u4f5c\u8fdb\u884c\u6761\u4ef6\u7efc\u5408\u8981\u56f0\u96be\u5f97\u591a\u3002 DVGAN [43] \u8bad\u7ec3\u4e00\u4e2a\u751f\u6210\u6a21\u578b\uff0c\u8be5\u6a21\u578b\u4ee5\u8868\u793a MoCap \u6570\u636e\u96c6\u4e2d\u52a8\u4f5c\u7684\u77ed\u6587\u672c\u4e3a\u6761\u4ef6\uff0c\u4f8b\u5982 Human3.6M [30\u300131] \u548c CMU [63]\u3002 Text2Action [1] \u548c Language2Pose [2] \u540c\u6837\u63a2\u7d22\u4e86\u6839\u636e\u6587\u672c\u63cf\u8ff0\u8c03\u8282\u52a8\u4f5c\u751f\u6210\u3002 Music-to-Dance [39] \u548c [41] \u7814\u7a76\u97f3\u4e50\u6761\u4ef6\u751f\u6210\u3002 QuaterNet [56] \u4fa7\u91cd\u4e8e\u5728\u7ed9\u5b9a\u5730\u9762\u8f68\u8ff9\u548c\u5e73\u5747\u901f\u5ea6\u7684\u60c5\u51b5\u4e0b\u751f\u6210\u884c\u8d70\u548c\u8dd1\u6b65\u7b49\u8fd0\u52a8\u52a8\u4f5c\u3002 [69] \u63d0\u51fa\u4e86\u4e00\u79cd\u57fa\u4e8e\u5377\u79ef\u7684\u751f\u6210\u6a21\u578b\uff0c\u7528\u4e8e\u5728\u4e0d\u6307\u5b9a\u52a8\u4f5c\u7684\u60c5\u51b5\u4e0b\u5b9e\u73b0\u903c\u771f\u7684\u4f46\u4e0d\u53d7\u7ea6\u675f\u7684\u8fd0\u52a8\u3002 \u7c7b\u4f3c\u5730\uff0c[73] \u5408\u6210\u4efb\u610f\u5e8f\u5217\uff0c\u5173\u6ce8\u65f6\u95f4\u4e0a\u7684\u65e0\u754c\u8fd0\u52a8\u3002

    \u65e0\u7ea6\u675f\u8fd0\u52a8\u5408\u6210\u7684\u8bb8\u591a\u65b9\u6cd5\u5f80\u5f80\u4ee5\u6b65\u884c\u548c\u8dd1\u6b65\u7b49\u52a8\u4f5c\u4e3a\u4e3b\u5bfc\u3002\u76f8\u6bd4\u4e4b\u4e0b\uff0c\u6211\u4eec\u7684\u6a21\u578b\u80fd\u591f\u4ece\u66f4\u4e00\u822c\u7684\uff0c\u65e0\u5468\u671f\u7684\uff0c\u9884\u5b9a\u4e49\u7684\u884c\u52a8\u7c7b\u522b\uff0c\u4e0e\u884c\u52a8\u8bc6\u522b\u6570\u636e\u96c6\u517c\u5bb9\u7684\u6837\u672c\u3002\u5728\u8fd9\u65b9\u9762\uff0c[75]\u5f15\u5165\u4e86\u8d1d\u53f6\u65af\u65b9\u6cd5\uff0c\u5176\u4e2d\u9690\u85cf\u534a\u9a6c\u5c14\u53ef\u592b\u6a21\u578b\u7528\u4e8e\u8054\u5408\u8bad\u7ec3\u751f\u6210\u6a21\u578b\u548c\u5224\u522b\u6a21\u578b\u3002\u4e0e\u6211\u4eec\u7c7b\u4f3c\uff0c[75]\u8868\u660e\uff0c\u4ed6\u4eec\u751f\u6210\u7684\u52a8\u4f5c\u53ef\u4ee5\u4f5c\u4e3a\u989d\u5916\u7684\u8bad\u7ec3\u6570\u636e\u7684\u884c\u52a8\u8bc6\u522b\u3002\u7136\u800c\uff0c\u6839\u636e\u5224\u522b\u5668\u5206\u7c7b\u7ed3\u679c\uff0c\u5b83\u4eec\u751f\u6210\u7684\u5e8f\u5217\u662f\u4f2a\u6807\u8bb0\u7684\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u6211\u4eec\u7684\u6761\u4ef6\u6a21\u578b\u80fd\u591f\u4ee5\u4e00\u79cd\u53d7\u63a7\u7684\u65b9\u5f0f\u5408\u6210\u8fd0\u52a8\uff0c\u4f8b\u5982\u5e73\u8861\u8bad\u7ec3\u96c6\u3002\u4e0e\u6211\u4eec\u7684\u5de5\u4f5c\u6700\u76f8\u4f3c\u7684\u662f Action2Motion [21] \uff0c\u8fd9\u662f\u4e00\u4e2a\u57fa\u4e8e GRU \u67b6\u6784\u7684\u6bcf\u5e27\u64cd\u4f5c VAE\u3002\u6211\u4eec\u7684\u5e8f\u5217\u7ea7 VAE \u6f5c\u5728\u7a7a\u95f4\uff0c\u7ed3\u5408\u57fa\u4e8e\u53d8\u538b\u5668\u7684\u8bbe\u8ba1\u63d0\u4f9b\u4e86\u663e\u8457\u7684\u4f18\u52bf\uff0c\u5982\u6211\u4eec\u7684\u5b9e\u9a8c\u6240\u793a\u3002

    \u5176\u4ed6\u6700\u8fd1\u7684\u5de5\u4f5c[25,72]\u4f7f\u7528\u89c4\u8303\u5316\u6d41\u6765\u89e3\u51b3\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u548c\u751f\u6210\u95ee\u9898\u3002\u51e0\u4e2a\u4f5c\u54c1[29,36,67]\u5b66\u4e60\u4e00\u4e2a\u8fd0\u52a8\u6d41\u5f62\uff0c\u5e76\u4f7f\u7528\u5b83\u7684\u8fd0\u52a8\u53bb\u566a\uff0c\u8fd9\u662f\u6211\u4eec\u7684\u7528\u4f8b\u4e4b\u4e00\u3002\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u56fe\u5f62\u6587\u732e\u7684\u4e3b\u9898\uff0c\u8fd9\u5f80\u5f80\u96c6\u4e2d\u5728\u52a8\u753b\u5e08\u63a7\u5236\u3002\u770b\uff0c\u4f8b\u5982\uff0c[27]\u5b66\u4e60\u52a8\u4f5c\u5339\u914d\u548c[40]\u89d2\u8272\u52a8\u753b\u3002\u8fd9\u91cc\u6700\u76f8\u5173\u7684\u662f\u76f8\u51fd\u6570\u795e\u7ecf\u7f51\u7edc[28]\u548c\u795e\u7ecf\u72b6\u6001\u673a[61]\u3002\u4e24\u8005\u90fd\u5229\u7528\u4e86\u7531\u6b63\u5f26\u51fd\u6570\u76f8\u4f4d\u9a71\u52a8\u7684\u52a8\u4f5c\u7684\u6982\u5ff5\u3002\u8fd9\u4e0e\u4f4d\u7f6e\u7f16\u7801\u7684\u601d\u60f3\u6709\u5173\uff0c\u4f46\u4e0e\u6211\u4eec\u7684\u65b9\u6cd5\u4e0d\u540c\uff0c\u5b83\u4eec\u7684\u65b9\u6cd5\u9700\u8981\u4eba\u5de5\u5206\u5272\u64cd\u4f5c\u5e76\u6784\u5efa\u8fd9\u4e9b\u76f8\u51fd\u6570\u3002

    \u5355\u76ee\u4eba\u4f53\u8fd0\u52a8\u4f30\u8ba1\u3002\u6765\u81ea\u89c6\u9891\u7684\u8fd0\u52a8\u4f30\u8ba1[35,38,47]\u6700\u8fd1\u53d6\u5f97\u4e86\u91cd\u5927\u8fdb\u5c55\uff0c\u4f46\u8d85\u51fa\u4e86\u6211\u4eec\u7684\u8303\u56f4\u3002\u5728\u8fd9\u9879\u5de5\u4f5c\u4e2d\uff0c\u6211\u4eec\u91c7\u7528 VIBE [38]\u4ece\u52a8\u4f5c\u6807\u8bb0\u7684\u89c6\u9891\u6570\u636e\u96c6\u4e2d\u83b7\u5f97\u8bad\u7ec3\u8fd0\u52a8\u5e8f\u5217\u3002

    Transformer VAE\u3002Transformer \u6700\u8fd1\u5728\u8bed\u8a00\u4efb\u52a1\u65b9\u9762\u53d6\u5f97\u7684\u6210\u529f\u589e\u52a0\u4e86\u4eba\u4eec\u5bf9\u57fa\u4e8e\u6ce8\u610f\u529b\u7684\u795e\u7ecf\u7f51\u7edc\u6a21\u578b\u7684\u5174\u8da3\u3002\u4e00\u4e9b\u5de5\u7a0b\u4f7f\u7528\u53d8\u538b\u5668\u7ed3\u5408\u751f\u6210 VAE \u57f9\u8bad\u3002\u5177\u4f53\u7684\u4f8b\u5b50\u5305\u62ec\u6545\u4e8b\u751f\u6210[15] \uff0c\u60c5\u611f\u5206\u6790[10] \uff0c\u53cd\u5e94\u751f\u6210[44]\u548c\u97f3\u4e50\u751f\u6210[33]\u3002[33]\u7684\u5de5\u4f5c\u5b66\u4e60\u6bcf\u4e2a\u65f6\u95f4\u6846\u67b6\u7684\u6f5c\u5728\u5d4c\u5165\uff0c\u800c[10]\u5e73\u5747\u7684\u9690\u85cf\u72b6\u6001\uff0c\u4ee5\u83b7\u5f97\u4e00\u4e2a\u5355\u4e00\u7684\u6f5c\u5728\u4ee3\u7801\u3002\u53e6\u4e00\u65b9\u9762\uff0c[15]\u6267\u884c\u6ce8\u610f\u529b\u5e73\u5747\u6c60\u968f\u7740\u65f6\u95f4\u7684\u63a8\u79fb\u3002\u4e0e\u8fd9\u4e9b\u5de5\u4f5c\u76f8\u53cd\uff0c\u6211\u4eec\u91c7\u7528\u53ef\u5b66\u4e60\u7684\u6807\u8bb0\uff0c\u5982[12,13]\u4e2d\u6240\u793a\uff0c\u5c06\u8f93\u5165\u603b\u7ed3\u4e3a\u5e8f\u5217\u7ea7\u5d4c\u5165\u3002

    \u56fe2\uff1a\u65b9\u6cd5\u6982\u8ff0\u3002\u6211\u4eec\u8bf4\u660e\u4e86\u6211\u4eec\u57fa\u4e8eTransformer\u7684VAE\u6a21\u578b\u7684\u7f16\u7801\u5668\uff08\u5de6\uff09\u548c\u89e3\u7801\u5668\uff08\u53f3\uff09\uff0c\u8be5\u6a21\u578b\u751f\u6210\u4e86\u52a8\u4f5c\u6761\u4ef6\u7684\u8fd0\u52a8\u3002\u7ed9\u5b9a\u4e00\u4e32\u8eab\u4f53\u59ff\u52bfP1, ... , PT\u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7ea\uff0c\u7f16\u7801\u5668\u8f93\u51fa\u5206\u5e03\u53c2\u6570\uff0c\u6211\u4eec\u5728\u6b64\u57fa\u7840\u4e0a\u5b9a\u4e49KL\u635f\u5931\uff08LKL\uff09\u3002\u6211\u4eec\u4f7f\u7528\u6bcf\u4e2a\u52a8\u4f5c\u7684\u989d\u5916\u53ef\u5b66\u4e60\u6807\u8bb0\uff08\u00b5 token a \u548c \u03a3 token a \uff09\u4f5c\u4e3a\u4eceTransformer\u7f16\u7801\u5668\u83b7\u5f97\u00b5\u548c\u03a3\u7684\u65b9\u6cd5\u3002\u4f7f\u7528\u00b5\u548c\u03a3\uff0c\u6211\u4eec\u5bf9\u8fd0\u52a8\u7684\u6f5c\u5728\u8868\u5f81z\u2208M\u8fdb\u884c\u91c7\u6837\u3002\u89e3\u7801\u5668\u5c06\u6f5c\u4f0f\u5411\u91cfz\u3001\u52a8\u4f5c\u6807\u7b7ea\u548c\u6301\u7eed\u65f6\u95f4T\u4f5c\u4e3a\u8f93\u5165\u3002\u884c\u52a8\u51b3\u5b9a\u4e86\u53ef\u5b66\u4e60\u7684b\u6807\u8bb0a\u52a0\u6cd5\u6807\u8bb0\uff0c\u6301\u7eed\u65f6\u95f4\u51b3\u5b9a\u4e86\u8f93\u5165\u5230\u89e3\u7801\u5668\u7684\u4f4d\u7f6e\u7f16\u7801\uff08PE\uff09\u7684\u6570\u91cf\u3002\u89e3\u7801\u5668\u8f93\u51fa\u6574\u4e2a\u5e8f\u5217Pb1, . . . , PbT\uff0c\u5728\u6b64\u57fa\u7840\u4e0a\u8ba1\u7b97\u91cd\u5efa\u635f\u5931LP\u3002\u6b64\u5916\uff0c\u6211\u4eec\u7528\u4e00\u4e2a\u53ef\u5fae\u5206\u7684SMPL\u5c42\u8ba1\u7b97\u9876\u70b9\uff0c\u4ee5\u5b9a\u4e49\u4e00\u4e2a\u9876\u70b9\u635f\u5931\uff08LV \uff09\u3002\u5bf9\u4e8e\u8bad\u7ec3\u6765\u8bf4\uff0cz\u662f\u4f5c\u4e3a\u7f16\u7801\u5668\u7684\u8f93\u51fa\u5f97\u5230\u7684\uff1b\u5bf9\u4e8e\u751f\u6210\u6765\u8bf4\uff0c\u5b83\u662f\u4ece\u9ad8\u65af\u5206\u5e03\u4e2d\u968f\u673a\u62bd\u53d6\u7684\u3002

    "},{"location":"pape_read/ACTOR/trans/#action-conditioned-motion-generation","title":"Action-Conditioned Motion Generation","text":"

    \u95ee\u9898\u5b9a\u4e49\u3002\u8eab\u4f53\u8fd0\u52a8\u6240\u5b9a\u4e49\u7684\u52a8\u4f5c\u53ef\u4ee5\u662f\u8eab\u4f53\u90e8\u4f4d\u7684\u65cb\u8f6c\u62e5\u6709\u5c5e\u6027\uff0c\u4e0e\u8eab\u4efd\u7279\u5b9a\u7684\u8eab\u4f53\u5f62\u72b6\u65e0\u5173\u3002\u4e3a\u4e86\u80fd\u591f\u4ea7\u751f\u4e0e\u4e0d\u540c\u5f62\u6001\u7684\u884c\u4e3a\u8005\u7684\u8fd0\u52a8\uff0c\u8fd9\u662f\u7406\u60f3\u7684\u5206\u79bb\u59ff\u52bf\u548c\u5f62\u72b6\u3002\u56e0\u6b64\uff0c\u4e0d\u5931\u4e00\u822c\u6027\uff0c\u6211\u4eec\u91c7\u7528\u4e86 SMPL \u8eab\u4f53\u6a21\u578b[46] \uff0c\u8fd9\u662f\u4e00\u4e2a\u5206\u79bb\u7684\u8eab\u4f53\u8868\u793a(\u7c7b\u4f3c\u4e8e\u6700\u8fd1\u7684\u6a21\u578b[53,55,58,68])\u3002\u5ffd\u7565\u5f62\u72b6\uff0c\u6211\u4eec\u7684\u76ee\u6807\u662f\u751f\u6210\u4e00\u7cfb\u5217\u7684\u59ff\u6001\u53c2\u6570\u3002\u66f4\u6b63\u5f0f\u5730\u8bf4\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a (\u6765\u81ea\u4e00\u7ec4\u9884\u5b9a\u4e49\u7684\u52a8\u4f5c\u8303\u7574 a \u2208 A)\u548c\u4e00\u4e2a\u6301\u7eed\u65f6\u95f4 T\uff0c\u6211\u4eec\u751f\u6210\u4e00\u4e2a\u4f53\u6784\u6210\u7684\u5e8f\u5217 R1\uff0c... \uff0cRT \u548c\u4e00\u4e2a\u6839\u5173\u8282\u7684\u5e73\u79fb\u5e8f\u5217\u8868\u793a\u4e3a\u4f4d\u79fb\uff0cD1\uff0c... \uff0cDT (\u4e0e DT \u2208 R3\uff0csomething t \u2208{1\uff0c... \uff0cT })

    \u52a8\u4f5c\u8868\u73b0\u6cd5\u3002\u6bcf\u5e27 SMPL \u59ff\u6001\u53c2\u6570\u8868\u793a\u8fd0\u52a8\u5b66\u6811\u4e2d\u768423\u4e2a\u5173\u8282\u65cb\u8f6c\u548c\u4e00\u4e2a\u5168\u5c40\u65cb\u8f6c\u3002\u91c7\u7528\u8fde\u7eed6D \u65cb\u8f6c\u8868\u793a\u6cd5\u8fdb\u884c\u8bad\u7ec3[76] \uff0c\u4f7f Rt \u2208 R24 \u00d7 6\u3002\u8bbe Pt \u662f Rt \u548c Dt \u7684\u7ec4\u5408\uff0c\u8868\u793a\u5355\u5e27\u4e2d\u8eab\u4f53\u7684\u59ff\u52bf\u548c\u4f4d\u7f6e t\u3002\u5b8c\u6574\u7684\u52a8\u4f5c\u662f P1\uff0c. . \uff0cPT\u3002\u7ed9\u5b9a\u4e00\u4e2a\u751f\u6210\u5668\u8f93\u51fa\u4f4d\u59ff Pt \u548c\u4efb\u610f\u5f62\u72b6\u53c2\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u7528[46]\u53ef\u5fae\u5730\u5f97\u5230\u4f53\u7f51\u683c\u9876\u70b9(Vt)\u548c\u4f53\u5173\u8282\u5750\u6807(Jt)\u3002

    "},{"location":"pape_read/ACTOR/trans/#conditional-transformer-vae-for-motions","title":"Conditional Transformer VAE for Motions","text":"

    \u6211\u4eec\u91c7\u7528\u6761\u4ef6\u53d8\u5206\u81ea\u52a8\u7f16\u7801\u5668(CVAE)\u6a21\u578b[60] \uff0c\u5e76\u5c06\u52a8\u4f5c\u7c7b\u522b\u4fe1\u606f\u8f93\u5165\u5230\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u3002\u66f4\u5177\u4f53\u5730\u8bf4\uff0c\u6211\u4eec\u7684\u6a21\u578b\u662f\u4e00\u4e2a\u52a8\u4f5c\u6761\u4ef6\u53d8\u538b\u5668 VAE (ACTOR) \uff0c\u5176\u7f16\u7801\u5668\u548c\u89e3\u7801\u5668\u7531\u53d8\u538b\u5668\u5c42\u7ec4\u6210(\u53c2\u89c1\u56fe2\u4ee5\u83b7\u5f97\u6982\u8ff0)\u3002

    \u7f16\u7801\u5668\u3002\u8be5\u7f16\u7801\u5668\u91c7\u7528\u4efb\u610f\u957f\u5ea6\u7684\u59ff\u6001\u5e8f\u5217\uff0c\u4ee5\u52a8\u4f5c\u6807\u7b7e a \u4e3a\u8f93\u5165\uff0c\u8f93\u51fa\u8fd0\u52a8\u6f5c\u4f0f\u7a7a\u95f4\u7684\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3\u3002\u5229\u7528\u91cd\u53c2\u6570\u5316\u6280\u5de7[37] \uff0c\u6211\u4eec\u4ece\u8fd9\u4e2a\u5206\u5e03\u4e2d\u62bd\u6837\u51fa\u4e00\u4e2a\u6f5c\u5411\u91cf z \u2208 M\uff0c\u5176\u4e2d MdRd\u3002\u9996\u5148\u5c06\u6240\u6709\u8f93\u5165\u59ff\u6001\u53c2\u6570(R)\u548c\u5e73\u79fb(D)\u7ebf\u6027\u5d4c\u5165\u5230 Rd \u7a7a\u95f4\u4e2d\u3002\u5f53\u6211\u4eec\u5c06\u4efb\u610f\u957f\u5ea6\u7684\u5e8f\u5217\u5d4c\u5165\u5230\u4e00\u4e2a\u6f5c\u5728\u7a7a\u95f4(\u5e8f\u5217\u7ea7\u5d4c\u5165)\u65f6\uff0c\u6211\u4eec\u9700\u8981\u5408\u5e76\u65f6\u95f4\u7ef4\u6570\u3002\u5728\u5176\u4ed6\u9886\u57df\u4e2d\uff0c\u5df2\u7ecf\u5f15\u5165\u4e86[\u7c7b]\u4ee4\u724c\u7528\u4e8e\u6c60\u7684\u76ee\u7684\uff0c\u4f8b\u5982\uff0c\u5728\u5e26\u6709 BERT [12]\u7684 NLP \u4e2d\uff0c\u4ee5\u53ca\u6700\u8fd1\u5728\u5e26\u6709 ViT [13]\u7684\u8ba1\u7b97\u673a\u89c6\u89c9\u4e2d\u3002\u53d7\u6b64\u65b9\u6cd5\u7684\u542f\u53d1\uff0c\u6211\u4eec\u7c7b\u4f3c\u5730\u5728\u8f93\u5165\u524d\u9762\u52a0\u4e0a\u53ef\u5b66\u4e60\u7684\u4ee4\u724c\uff0c\u5e76\u4e14\u53ea\u4f7f\u7528\u76f8\u5e94\u7684\u7f16\u7801\u5668\u8f93\u51fa\u4f5c\u4e3a\u6c47\u96c6\u65f6\u95f4\u7ef4\u5ea6\u7684\u65b9\u6cd5\u3002\u4e3a\u6b64\uff0c\u6211\u4eec\u5728\u6bcf\u4e2a\u64cd\u4f5c\u4e2d\u5305\u62ec\u4e24\u4e2a\u989d\u5916\u7684\u53ef\u5b66\u4e60\u53c2\u6570: \u03bc \u6807\u8bb0 a \u548c \u03a3 \u6807\u8bb0 a\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u201c\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u201d\u3002\u6211\u4eec\u5c06\u5d4c\u5165\u7684\u59ff\u52bf\u5e8f\u5217\u9644\u52a0\u5230\u8fd9\u4e9b\u6807\u8bb0\u3002\u4ea7\u751f\u7684\u53d8\u538b\u5668\u7f16\u7801\u5668\u8f93\u5165\u662f\u4f4d\u7f6e\u7f16\u7801\u7684\u6b63\u5f26\u51fd\u6570\u5f62\u5f0f\u7684\u603b\u548c\u3002\u6211\u4eec\u901a\u8fc7\u53d6\u7f16\u7801\u5668\u7684\u524d\u4e24\u4e2a\u8f93\u51fa\u5bf9\u5e94\u4e8e\u5206\u5e03\u53c2\u6570\u6807\u8bb0\u6765\u83b7\u5f97\u5206\u5e03\u53c2\u6570 \u03bc \u548c \u03a3 (\u5373\u53bb\u6389\u5176\u4f59\u7684\u6807\u8bb0)\u3002\u89e3\u7801\u5668\u3002\u7ed9\u5b9a\u4e00\u4e2a\u6f5c\u5728\u5411\u91cf z \u548c\u4e00\u4e2a\u52a8\u4f5c\u6807\u7b7e a\uff0c\u89e3\u7801\u5668\u5728\u4e00\u6b21\u62cd\u6444\u4e2d\u5728\u7ed9\u5b9a\u7684\u6301\u7eed\u65f6\u95f4\u5185\u751f\u6210\u4e00\u4e2a\u771f\u5b9e\u7684\u4eba\u4f53\u8fd0\u52a8(\u5373\uff0c\u4e0d\u662f\u81ea\u56de\u5f52)\u3002\u6211\u4eec\u4f7f\u7528\u53d8\u538b\u5668\u89e3\u7801\u5668\u6a21\u578b\uff0c\u5176\u4e2d\u6211\u4eec\u63d0\u4f9b\u7684\u65f6\u95f4\u4fe1\u606f\u4f5c\u4e3a\u4e00\u4e2a\u67e5\u8be2(\u5728 T \u6b63\u5f26\u4f4d\u7f6e\u7f16\u7801\u7684\u5f62\u5f0f) \uff0c\u548c\u6f5c\u5728\u7684\u5411\u91cf\u7ed3\u5408\u7684\u884c\u52a8\u4fe1\u606f\uff0c\u4f5c\u4e3a\u5173\u952e\u548c\u503c\u3002\u4e3a\u4e86\u5408\u5e76\u52a8\u4f5c\u4fe1\u606f\uff0c\u6211\u4eec\u7b80\u5355\u5730\u6dfb\u52a0\u4e00\u4e2a\u53ef\u5b66\u4e60\u7684\u504f\u89c1 b \u6807\u8bb0 a \u6765\u5c06\u6f5c\u5728\u8868\u5f81\u8f6c\u79fb\u5230\u4e00\u4e2a\u52a8\u4f5c\u4f9d\u8d56\u7684\u7a7a\u95f4\u3002\u53d8\u538b\u5668\u89e3\u7801\u5668\u8f93\u51fa\u4e00\u7cfb\u5217\u7684 T \u77e2\u91cf\uff0c\u4ece\u4e2d\u6211\u4eec\u53ef\u4ee5\u5f97\u5230\u6700\u7ec8\u7684 Pb1\uff0c. . \uff0cPbT \u7684\u7ebf\u6027\u6295\u5f71\u3002\u5229\u7528\u53ef\u5fae SMPL \u5c42\u83b7\u5f97\u7ed9\u5b9a\u7684\u4f4d\u59ff\u53c2\u6570\u4f5c\u4e3a\u89e3\u7801\u5668\u8f93\u51fa\u7684\u9876\u70b9\u548c\u5173\u8282\u3002

    "},{"location":"pape_read/ACTOR/trans/#training","title":"Training","text":"

    \u6211\u4eec\u5b9a\u4e49\u4e86\u51e0\u4e2a\u635f\u5931\u9879\u6765\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b\uff0c\u5e76\u5728\u7b2c 4.2 \u8282\u4e2d\u8fdb\u884c\u4e86\u6d88\u878d\u7814\u7a76\u3002 \u59ff\u52bf\u53c2\u6570 (LP) \u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5728\u5730\u9762\u5b9e\u51b5\u59ff\u52bf P1,... \u4e4b\u95f4\u4f7f\u7528 L2 \u635f\u5931\u3002 . . , PT \u548c\u6211\u4eec\u7684\u9884\u6d4b Pb1, . . . , PbT \u4f5c\u4e3a LP = PT t=1\u2225Pt \u2212 Pbt\u2225 2 2 \u3002 \u8bf7\u6ce8\u610f\uff0c\u6b64\u635f\u5931\u5305\u542b SMPL \u65cb\u8f6c\u548c\u6839\u5e73\u79fb\u3002 \u5f53\u6211\u4eec\u901a\u8fc7\u4e22\u5f03\u5e73\u79fb\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u5c06\u8fd9\u4e2a\u672f\u8bed\u5206\u6210\u4e24\u90e8\u5206\uff1aLR \u548c LD\uff0c\u5206\u522b\u7528\u4e8e\u65cb\u8f6c\u548c\u5e73\u79fb\u3002

    \u9876\u70b9\u5750\u6807 (LV) \u4e0a\u7684\u91cd\u5efa\u635f\u5931\u3002 \u6211\u4eec\u5c06 SMPL \u59ff\u52bf Pt \u548c Pbt \u9988\u9001\u5230\u5177\u6709\u5e73\u5747\u5f62\u72b6\uff08\u5373 \u03b2 = \u20d70\uff09\u7684\u53ef\u5fae\u5206 SMPL \u5c42\uff08\u6ca1\u6709\u53ef\u5b66\u4e60\u53c2\u6570\uff09\u4ee5\u83b7\u5f97\u7f51\u683c Vt \u548c Vbt \u7684\u6839\u4e2d\u5fc3\u9876\u70b9\u3002 \u6211\u4eec\u901a\u8fc7\u4e0e\u5730\u9762\u5b9e\u51b5\u9876\u70b9 Vt \u6bd4\u8f83\u6765\u5b9a\u4e49 L2 \u635f\u5931\uff0c\u5373 LV = PT t=1\u2225Vt \u2212 Vbt\u2225 2 2 \u3002 \u6211\u4eec\u8fdb\u4e00\u6b65\u5728\u4e00\u7ec4\u66f4\u7a00\u758f\u7684\u70b9\u4e0a\u4f7f\u7528\u635f\u5931 LJ \u8fdb\u884c\u5b9e\u9a8c\uff0c\u4f8b\u5982\u901a\u8fc7 SMPL \u8054\u5408\u56de\u5f52\u5668\u83b7\u5f97\u7684\u8054\u5408\u4f4d\u7f6e Jbt\u3002 \u7136\u800c\uff0c\u6b63\u5982\u7b2c 4.2 \u8282\u6240\u793a\uff0c\u6211\u4eec\u6ca1\u6709\u5728\u6700\u7ec8\u6a21\u578b\u4e2d\u5305\u542b\u8be5\u672f\u8bed\u3002 KL\u635f\u5931\uff08LKL\uff09\u3002 \u4e0e\u6807\u51c6 VAE \u4e00\u6837\uff0c\u6211\u4eec\u901a\u8fc7\u9f13\u52b1\u6f5c\u5728\u7a7a\u95f4\u7c7b\u4f3c\u4e8e\u9ad8\u65af\u5206\u5e03\u6765\u89c4\u8303\u5316\u6f5c\u5728\u7a7a\u95f4\uff0c\u5176\u4e2d \u00b5 \u662f\u7a7a\u5411\u91cf\uff0c\u03a3 \u662f\u8eab\u4efd\u77e9\u9635\u3002 \u6211\u4eec\u6700\u5c0f\u5316\u7f16\u7801\u5668\u5206\u5e03\u548c\u8be5\u76ee\u6807\u5206\u5e03\u4e4b\u95f4\u7684 Kullback\u2013Leibler (KL) \u6563\u5ea6\u3002 \u7531\u6b64\u4ea7\u751f\u7684\u603b\u635f\u5931\u88ab\u5b9a\u4e49\u4e3a\u4e0d\u540c\u9879\u7684\u603b\u548c\uff1aL = LP + LV + \u03bbKLLKL\u3002 \u6211\u4eec\u51ed\u7ecf\u9a8c\u8bc1\u660e\u4e86\u5728\u6211\u4eec\u7684\u5b9e\u9a8c\u4e2d\u4f7f\u7528 \u03bbKL\uff08\u76f8\u5f53\u4e8e \u03b2-VAE [26] \u4e2d\u7684 \u03b2 \u9879\uff09\u8fdb\u884c\u52a0\u6743\u4ee5\u83b7\u5f97\u591a\u6837\u6027\u548c\u73b0\u5b9e\u4e3b\u4e49\u4e4b\u95f4\u7684\u826f\u597d\u6743\u8861\u7684\u91cd\u8981\u6027\uff08\u53c2\u89c1\u9644\u5f55 A.1 \u8282\uff09 ). \u5269\u4f59\u7684\u635f\u5931\u9879\u53ea\u662f\u7b80\u5355\u5730\u540c\u7b49\u52a0\u6743\uff0c\u901a\u8fc7\u8c03\u6574\u53ef\u80fd\u4f1a\u8fdb\u4e00\u6b65\u6539\u8fdb\u3002 \u6211\u4eec\u4f7f\u7528\u56fa\u5b9a\u5b66\u4e60\u7387\u4e3a 0.0001 \u7684 AdamW \u4f18\u5316\u5668\u3002 \u5c0f\u6279\u91cf\u5927\u5c0f\u8bbe\u7f6e\u4e3a 20\uff0c\u6211\u4eec\u53d1\u73b0\u6027\u80fd\u5bf9\u8fd9\u4e2a\u8d85\u53c2\u6570\u5f88\u654f\u611f\uff08\u53c2\u89c1\u9644\u5f55 A.2 \u8282\uff09\u3002 \u6211\u4eec\u5206\u522b\u5728 NTU-13\u3001HumanAct12 \u548c UESTC \u6570\u636e\u96c6\u4e0a\u8bad\u7ec3\u6211\u4eec\u7684\u6a21\u578b 2000\u30015000 \u548c 1000 \u4e2a\u65f6\u671f\u3002 \u603b\u7684\u6765\u8bf4\uff0c\u66f4\u591a\u7684\u65f6\u671f\u4f1a\u4ea7\u751f\u66f4\u597d\u7684\u6027\u80fd\uff0c\u4f46\u6211\u4eec\u505c\u6b62\u8bad\u7ec3\u4ee5\u4fdd\u6301\u8f83\u4f4e\u7684\u8ba1\u7b97\u6210\u672c\u3002 \u8bf7\u6ce8\u610f\uff0c\u4e3a\u4e86\u5141\u8bb8\u66f4\u5feb\u7684\u8fed\u4ee3\u3001\u635f\u5931\u548c\u67b6\u6784\u7684\u6d88\u878d\uff0c\u6211\u4eec\u5728 NTU-13 \u4e0a\u8bad\u7ec3\u4e86 1000 \u4e2a epoch\uff0c\u5728 UESTC \u4e0a\u8bad\u7ec3\u4e86 500 \u4e2a epoch\u3002 \u5176\u4f59\u7684\u5b9e\u65bd\u7ec6\u8282\u53ef\u4ee5\u5728\u9644\u5f55\u7684 C \u8282\u4e2d\u627e\u5230\u3002

    "},{"location":"pape_read/ACTOR/trans/#experiments","title":"Experiments","text":"

    \u6682\u7565

    "},{"location":"pape_read/ACTOR/trans/#conclusions","title":"Conclusions","text":"

    \u6211\u4eec\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u57fa\u4e8e Transformer \u7684 VAE \u6a21\u578b\u6765\u5408\u6210\u4ee5\u52a8\u4f5c\u4e3a\u6761\u4ef6\u7684\u4eba\u4f53\u8fd0\u52a8\u3002\u6211\u4eec\u63d0\u4f9b\u4e86\u8be6\u7ec6\u7684\u5206\u6790\u6765\u8bc4\u4f30\u6211\u4eec\u63d0\u8bae\u7684\u65b9\u6cd5\u7684\u4e0d\u540c\u7ec4\u6210\u90e8\u5206\u3002 \u6211\u4eec\u5728\u52a8\u4f5c\u6761\u4ef6\u8fd0\u52a8\u751f\u6210\u65b9\u9762\u83b7\u5f97\u4e86\u6700\u5148\u8fdb\u7684\u6027\u80fd\uff0c\u4e0e\u4e4b\u524d\u7684\u5de5\u4f5c\u76f8\u6bd4\u6709\u4e86\u663e\u7740\u6539\u8fdb\u3002 \u6b64\u5916\uff0c\u6211\u4eec\u63a2\u7d22\u4e86\u8fd0\u52a8\u53bb\u566a\u548c\u52a8\u4f5c\u8bc6\u522b\u4e2d\u7684\u5404\u79cd\u7528\u4f8b\u3002 \u6211\u4eec\u65b9\u6cd5\u7684\u4e00\u4e2a\u7279\u522b\u5438\u5f15\u4eba\u7684\u7279\u6027\u662f\u5b83\u5728\u5e8f\u5217\u7ea7\u6f5c\u5728\u7a7a\u95f4\u4e0a\u8fd0\u884c\u3002\u56e0\u6b64\uff0c\u672a\u6765\u7684\u5de5\u4f5c\u53ef\u4ee5\u5229\u7528\u6211\u4eec\u7684\u6a21\u578b\u5bf9\u8fd0\u52a8\u4f30\u8ba1\u6216\u52a8\u4f5c\u8bc6\u522b\u95ee\u9898\u65bd\u52a0\u5148\u9a8c\u3002

    "},{"location":"pape_read/EG3D/","title":"[EG3D] Efficient Geometry-aware 3D Generative Adversarial Networks","text":"

    \u7ea6 479 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    3DV Generation

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/EG3D/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/EG3D/#tri-plane-hybrid-3d-representation","title":"Tri-plane hybrid 3D representation","text":"

    \u8ba8\u8bba\u4e00\u4e0b NeRF \u548c Tri-plane hybrid 3D representation \u7684\u5173\u7cfb\u3002

    NeRF \u6309 ray \u4f53\u79ef\u6e32\u67d3\u8fc7\u7a0b\u4e2d\u91c7\u6837\u7684\u70b9\u4ece\u8bad\u7ec3\u597d\u7684 MLP \u91cc\u62ff\uff1b\u800c EG3D \u5219\u662f\u5f97\u5230\u4e09\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\uff0c\u6bcf\u4e00\u4e2a\u6295\u5f71\u65b9\u5411\u4e0a\u7684\u7279\u5f81\u5411\u91cf\u90fd\u662f\u6cbf\u7740\u6d88\u5931\u7684\u90a3\u4e2a\u7ef4\u5ea6\u805a\u5408\u5f97\u5230\u7684\uff0c\u53ef\u4ee5\u770b\u4f5c\u662f\u62ff\u5230\u4e86\u7a7a\u95f4\u4e2d\u4e09\u6761\u6b63\u4ea4\u7684\u7ebf\u7684\u7279\u5f81\uff0c\u800c\u4e4b\u540e\u7528\u4e00\u4e2a\u8f7b\u91cf MLP \u53bb\u4ece\u8fd9\u4e09\u4e2a\u7279\u5f81\u5411\u91cf\u91cc\u628a\u8fd9\u4e2a\u70b9\u7684\u989c\u8272\u5bc6\u5ea6\u62ff\u51fa\u6765\uff0c\u7c7b\u4f3c\u4e8e\u6c42\u4e09\u6761\u7ebf\u7684\u4ea4\u70b9\u3002

    \u76f8\u6bd4\u4e8e NeRF \u5c06\u6570\u636e\u53c2\u6570\u5316\uff0c\u6bcf\u6b21\u67e5\u8be2\u90fd\u9700\u8981\u8d70\u4e00\u8fb9 MLP\uff0cEG3D Sec3 \u5219\u663e\u793a\u7684\u5c06\u7279\u5f81\u5b58\u5728\u4e09\u4e2a\u4e8c\u7ef4\u8868\u91cc\uff0c\u6bcf\u6b21\u67e5\u8be2\u53ea\u9700\u8981 O(1) \u7684\u5f00\u9500\uff0c\u56e0\u6b64\u6548\u7387\u4e3b\u8981\u53d6\u51b3\u4e8e\u540e\u9762\u90a3\u4e2a\u8f7b\u91cf MLP\uff0c\u4ee5\u6b64\u6765\u5b9e\u73b0\u6548\u7387\u4e0a\u7684\u63d0\u9ad8\u3002

    \u800c\u5b9e\u73b0\u6548\u679c\u4e0a\uff0c\u6211\u80e1\u731c EG3D \u7684\u65b9\u6cd5\u597d\u7684\u539f\u56e0\uff1a

    1. \u7531\u4e8e\u4f7f\u7528\u4e86\u5ea7\u6807\u6295\u5f71\uff0c\u6240\u4ee5\u76f8\u5bf9\u4e8e NeRF \u7684\u53c2\u6570\u8868\u8fbe\uff0cEG3D \u5bf9\u4e8e\u67d0\u4e2a\u70b9\u7684\u7a7a\u95f4\u4f4d\u7f6e\u5177\u6709\u66f4\u5f3a\u7684\u7ea6\u675f\uff0c\u56e0\u800c\u53ef\u80fd\u5bf9\u7ec6\u8282\u7684\u628a\u63a7\u7ea6\u675f\u66f4\u76f4\u63a5\uff0c\u6216\u8005\u8bf4\u76f4\u89c9\u4e0a\u6211\u611f\u89c9 EG3D \u8fd9\u79cd\u8868\u8fbe\u5bf9\u201c\u7279\u5f81-\u5ea7\u6807\u201d\u7684\u5173\u7cfb\u66f4\u5177\u4f53\uff1b
    2. \u4e09\u4e2a\u6b63\u4ea4\u65b9\u5411\u585e\u8fdb\u5c0f MLP \u91cc\u5b66\uff0c\u53ef\u80fd\u4f1a\u66f4\u5bb9\u6613\u8ba9 MLP \u77e5\u9053\u53bb\u627e\u4ea4\u70b9\u9644\u8fd1\u7684\u90a3\u4e9b\u70b9\u53bb\u5b66\u4e60\uff0c\u611f\u89c9\u6709\u70b9\u7c7b\u4f3c\u4e8e\u5728\u4e00\u4e2a\u957f\u5f97\u50cf\u66fc\u54c8\u987f\u8ddd\u79bb\u90a3\u79cd\u7acb\u65b9\u4f53\u4e00\u6837\u7684\u7a7a\u95f4\u91cc\u53bb\u5b66\u4e60\u5468\u56f4\u7684\u4fe1\u606f\uff1b

    \u53c2\u8003\u8d44\u6599

    "},{"location":"pape_read/MAS/","title":"[MAS] Multi-view Ancestral Sampling for 3D Motion Generation Using 2D Diffusion","text":"

    \u7ea6 211 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 1 \u5206\u949f

    3DV Motion Diffusion

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/MAS/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":"

    \u5229\u7528\u4e00\u4e2a\u5728 2D \u5355\u76ee\u6570\u636e\u96c6\u4e0a train \u51fa\u6765\u7684 diffusion model \u505a 3D Motion \u7684\u751f\u6210\u3002

    "},{"location":"pape_read/NSM/","title":"[NSM] Neural State Machine for Character-Scene Interactions","text":"

    \u7ea6 1434 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    3DV Human-Motion Scene-Aware

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/NSM/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NSM/#\u6982\u8ff0","title":"\u6982\u8ff0","text":"

    NSM \u63d0\u51fa\u4e00\u79cd\u65b0\u7684\u76ee\u6807\u5bfc\u5411\u81ea\u56de\u5f52\u6a21\u578b\u6765\u89e3\u51b3\u4eba\u4f53\u52a8\u4f5c\u751f\u6210\u95ee\u9898\uff0c\u80fd\u5b9e\u73b0\u8868\u73b0\u826f\u597d\u7684\u5750\u3001\u6301\u7269\u3001\u907f\u969c\u7684\u884c\u4e3a\u3002\u8be5\u95ee\u9898\u4e3b\u8981\u96be\u70b9\u5728\u4e8e\uff0c\u5b8c\u6210\u4e00\u9879\u4efb\u52a1\u6240\u9700\u8981\u751f\u6210\u7684\u52a8\u4f5c\u5e8f\u5217\u4e2d\u5305\u542b\u5468\u671f\u6027\u548c\u975e\u5468\u671f\u6027\u7684\u90e8\u5206\uff0c\u5e76\u4e14\u9700\u8981\u5bf9\u5468\u56f4\u73af\u5883\u8fdb\u884c\u611f\u77e5\u3002\u901a\u8fc7\u4f7f\u7528\u4e8c\u7ef4\u76f8\u4f4d\u8868\u793a\u7684 Kronecker \u4e58\u79ef\u3001\u4e00\u79cd\u53cc\u5411\u63a7\u5236\uff08\u76ee\u6807\u4e2d\u5fc3\u548c\u81ea\u6211\u4e2d\u5fc3\uff09\u89c4\u5219\u3001\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\u548c\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7b49\u6280\u672f\u6765\u589e\u5f3a\u6548\u679c\uff0c\u66f4\u5b8f\u89c2\u7684\u8bf4\uff0cNSM \u4f7f\u7528\u4e86\u4e00\u79cd\u76ee\u6807\u9a71\u52a8\u7684\u6a21\u578b\u6765\u5b9e\u73b0\u6548\u679c\u826f\u597d\u7684\u52a8\u4f5c\u751f\u6210\u3002

    "},{"location":"pape_read/NSM/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u6574\u4e2a\u4efb\u52a1\u53ef\u4ee5\u5212\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff0c\u7b2c\u4e00\u90e8\u5206\u662f\u5bfb\u8def\u81f3\u76ee\u6807\uff0c\u8981\u6c42\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u89c4\u907f\u969c\u788d\u5e76\u627e\u5230\u76ee\u6807\u5e76\u4e14\u6700\u7ec8\u9762\u671d\u76ee\u6807\uff0c\u8fd9\u4e00\u90e8\u5206\u4e3b\u8981\u7684\u96be\u70b9\u5c31\u662f\u9700\u8981\u80fd\u591f\u5bf9\u73af\u5883\u8fdb\u884c\u611f\u77e5\uff0c\u4e3a\u6b64 NSM \u56e2\u961f\u9009\u62e9\u4e86\u4f53\u7d20\u8868\u8fbe\uff0c\u5e76\u8bbe\u8ba1\u4e86\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u2014\u2014\u5176\u8303\u56f4\u8986\u76d6\u4ee5\u4ee3\u7406\u4eba\u4e3a\u4e2d\u5fc3\u7684\u4e00\u4e2a\u5706\u67f1\u5f62\u533a\u57df\uff0c\u533a\u57df\u5185\u7684\u6240\u6709\u5177\u6709\u4f53\u7d20\u7684\u7269\u4f53\u90fd\u4f1a\u88ab\u7403\u5f62\u91c7\u6837\u4e3a\u4e00\u4e2a 0~1 \u548c\u4e4b\u95f4\u7684\u503c\uff0c\u5982\u8bba\u6587\u4e2d Fig5\u3002\u800c\u8fd9\u4e9b\u503c\u88ab\u79f0\u4e3a\u73af\u5883\u8f93\u5165\uff0c\u5728\u6a21\u578b\u7684 pipeline \u4e2d\u4f5c\u4e3a\u8f93\u5165\u3002\u73af\u5883\u8f93\u5165\u6709\u6548\u589e\u52a0\u4ee3\u7406\u4eba\u5bf9\u73af\u5883\u7684\u7406\u89e3\u80fd\u529b\uff0c\u6539\u5584\u4e86\u8bf8\u5982\u4e0e\u76ee\u6807\u4ea4\u4e92\u65f6\u4ece\u80cc\u540e\u7a7f\u900f\u6905\u5b50\u5750\u4e0b\u7684\u8fd9\u79cd\u95ee\u9898\uff0c\u5982 Fig14\u3002\u6b64\u5916\uff0cNSM \u56e2\u961f\u5b66\u4e60\u4e86 PFNN\uff0c\u4f7f\u7528 phase \u6765\u5b9e\u73b0\u72b6\u6001\u673a\uff0c\u4f46\u521b\u65b0\u6027\u7684\u4f7f\u7528\u4e86\u6807\u6ce8\u79bb\u6563\u7279\u5b9a\u76f8\u4f4d\uff08\u5982\u884c\u8d70\u65f6\u5de6\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\(2k\\pi\\)\uff0c\u53f3\u811a\u843d\u5730\u88ab\u6807\u6ce8\u4e3a \\((2k+1)\\pi\\)\uff0c\u800c\u4e2d\u95f4\u8fc7\u7a0b\u901a\u8fc7\u63d2\u503c\u8ba1\u7b97\uff09\uff0c\u901a\u8fc7\u7f51\u7edc\u5b66\u4e60\u63d2\u503c\u76f8\u4f4d\u7684\u5f62\u5f0f\uff0c\u89e3\u51b3\u4e86 PFNN \u4e2d\u5148\u9a8c\u76f8\u4f4d\u5e26\u6765\u7684\uff0c\u4ee3\u7406\u4eba\u8d8b\u5411\u4e8e\u4e0d\u884c\u52a8\u7684\u7f3a\u70b9\u3002\u800c\u5728\u5bfb\u627e\u76ee\u6807\u65f6\uff0c\u4f20\u7edf\u7684\u5355\u5411\u8868\u8fbe\u5bb9\u6613\u4ea7\u751f\u8bef\u5dee\u7d2f\u8ba1\uff0c\u5bfc\u81f4\u6700\u7ec8\u76ee\u6807\u5b9a\u4f4d\u504f\u79fb\uff0cNSM \u56e2\u961f\u4f7f\u7528\u76ee\u6807\u4e2d\u5fc3\u3001\u81ea\u6211\u4e2d\u5fc3\u53cc\u5411\u8868\u8fbe\uff0c\u663e\u8457\u6539\u5584\u4e86\u8be5\u95ee\u9898\uff0c\u5b9e\u9a8c\u6548\u679c\u5982 Fig11 \u4e0a\u56fe\u3002

    \u7b2c\u4e8c\u90e8\u5206\u9700\u8981\u4ee3\u7406\u4eba\u80fd\u591f\u81ea\u7136\u7684\u548c\u76ee\u6807\u8fdb\u884c\u4ea4\u4e92\uff0c\u5982\u5728\u6905\u5b50\u4e0a\u5750\u4e0b\u3001\u6253\u5f00\u95e8\u3001\u7a7f\u8fc7\u5899\u4e0a\u7684\u6d1e\u3002\u8fd9\u9700\u8981\u4ee3\u7406\u4eba\u5bf9\u4ea4\u4e92\u76ee\u6807\u5177\u6709\u7cbe\u786e\u7684\u611f\u77e5\uff0c\u4e0e\u73af\u5883\u4f53\u7d20\u4f20\u611f\u5668\u7c7b\u4f3c\uff0cNSM \u4e5f\u63d0\u51fa\u4e86\u4ea4\u4e92\u4f53\u7d20\u4f20\u611f\u5668\uff0c\u4e3a\u4e86\u63d0\u9ad8\u7cbe\u5ea6\uff0c\u4f53\u7d20\u4f20\u611f\u5668\u4ee5 8x8x8 \u7684\u4f53\u7d20\u4e3a\u5355\u4f4d\uff0c\u540c\u6837\u91c7\u6837\u4e3a 0~1 \u4e4b\u95f4\u7684\u503c\uff0c\u88ab\u4f5c\u4e3a\u6a21\u578b\u7684\u4e00\u90e8\u5206\u8f93\u5165\u3002

    \u6574\u4f53\u6a21\u578b\u4f7f\u7528\u4e86 MoE \u6280\u672f\uff0c\u5373\u591a\u4e13\u5bb6\u6a21\u578b\uff0c\u901a\u8fc7 Gating Networks \u6765\u8ba1\u7b97\u5176\u6df7\u5408\u6743\u91cd\uff0c\u5176\u8f93\u5165\u4e3b\u8981\u4e3a\u5f53\u524d\u7684\u52a8\u4f5c\u6807\u7b7e\u548c\u4e8c\u7ef4\u76f8\u4f4d\uff08\u4ee5\u89e3\u51b3\u4e00\u7ef4\u76f8\u4f4d\u5e26\u6765\u7684\u4e0d\u53ef\u5fae\u7684\u95ee\u9898\uff09\u3002\u6a21\u578b\u9884\u6d4b\u7f51\u7edc\u5206\u4e3a\u7f16\u7801\u6a21\u5757\u548c\u9884\u6d4b\u6a21\u5757\u4e24\u90e8\u5206\uff0c\u6a21\u578b\u8f93\u5165\u5305\u542b\u56db\u4e2a\u90e8\u5206\uff1a\u5173\u4e8e\u4ee3\u7406\u4eba\u7684\u5f53\u524d\u5e27\uff08\u548c\u7a97\u53e3\u5185\u9644\u8fd1\u5e27\uff09\u7684\u4fe1\u606f\u3001\u76ee\u6807\u4fe1\u606f\uff08\u4f4d\u7f6e\u3001\u671d\u5411\u3001\u4ea4\u4e92\u52a8\u4f5c\u6807\u7b7e\uff09\u4ee5\u53ca\u5148\u524d\u63d0\u5230\u7684\u73af\u5883\u8f93\u5165\u548c\u4ea4\u4e92\u8f93\u5165\u3002\u5c06\u8f93\u51fa\u9884\u6d4b\u540e\u7684\u4ee3\u7406\u4eba\u52a8\u4f5c\u4fe1\u606f\u3001\u884c\u52a8\u8f68\u8ff9\u4fe1\u606f\u3001\u76f8\u4f4d\u4fe1\u606f\u3001\u4ea4\u4e92\u63a5\u89e6\u70b9\u4fe1\u606f\u7b49\u3002\u800c\u8fd9\u6837\u7684\u8bbe\u8ba1\u7ed9\u4e86\u6a21\u578b\u826f\u597d\u7684\u5728\u4e24\u79cd\u7528\u6237\u64cd\u4f5c\u6a21\u5f0f\uff08\u624b\u52a8\u63a7\u5236\u79fb\u52a8\u65b9\u5411\u548c\u53ea\u6307\u5b9a\u4ea4\u4e92\u76ee\u6807\uff09\u4e4b\u95f4\u5207\u6362\u7684\u80fd\u529b\uff0c\u53ea\u9700\u8981\u6539\u53d8\u76ee\u6807\u8f93\u5165\u7684\u5b9a\u4e49\u5373\u53ef\u65e0\u7f1d\u8854\u63a5\u3002

    "},{"location":"pape_read/NSM/#\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","title":"\u5b9e\u9a8c\u6548\u679c\u4e0e\u548c\u76f8\u5173\u5de5\u4f5c\u7684\u5bf9\u6bd4","text":"

    \u8fd9\u79cd\u8bbe\u8ba1\u901a\u8fc7\u4e86\u5b9e\u9a8c\u9a8c\u8bc1\uff0c\u5728 NSM \u56e2\u961f\u8bbe\u8ba1\u7684\u4e00\u79cd\u7279\u6b8a\u60c5\u51b5\u4e0b\u8868\u73b0\u826f\u597d\u2014\u2014\u5750\u4e0a\u4e00\u5f20\u534a\u63d2\u8fdb\u684c\u5b50\u7684\u6905\u5b50\u3002\u5e76\u4e14\u5728\u4e0e\u5176\u4ed6\u6a21\u578b\u7684\u5bf9\u6bd4\u4e2d\uff0c\u5728\u54cd\u5e94\u65f6\u95f4\u3001\u6ed1\u6b65\uff08\u4e0d\u81ea\u7136\u7684\u8d70\u52a8\uff09\u8868\u73b0\u3001\u4f4d\u7f6e\u7cbe\u5ea6\u3001\u65cb\u8f6c\u7cbe\u5ea6\u7b49\u65b9\u9762\u603b\u4f53\u8868\u73b0\u826f\u597d\uff0c\u51e0\u4e4e\u5b8c\u5168\u8d85\u8fc7\u4e86\u4ee5\u5f80\u7684\u540c\u7c7b\u5de5\u4f5c\uff0c\u6587\u7ae0\u4e5f\u5bf9\u8868\u73b0\u826f\u597d\u7684\u539f\u56e0\u8fdb\u884c\u4e86\u4e00\u4e9b\u5206\u6790\u3002

    LSTM \u6a21\u578b\u901a\u8fc7\u751f\u6210\u5927\u91cf\u77ed\u7247\u6bb5\u7684\u52a8\u4f5c\u6765\u589e\u5f3a\u6570\u636e\uff0c\u800c\u5b9e\u9645\u4e5f\u662f\u901a\u8fc7\u5c06\u8fc7\u7a0b\u4ece\u8fd9\u4e9b\u7247\u6bb5\u4e2d\u5b66\u4e60\u7684\u5185\u5bb9\u8fdb\u884c\u7ec4\u5408\u5b9e\u73b0\uff0c\u56e0\u6b64\u6269\u5c55\u6027\u8f83\u5dee\uff0c\u4e0d\u9002\u5408\u8fd0\u52a8\u6570\u636e\u4e0d\u591f\u5145\u5206\u7684\u60c5\u51b5\u3002

    \u800c\u4e0e PFNN \u76f8\u6bd4\uff0cNSM \u9650\u5236\u66f4\u5c11\uff0c\u56e0\u4e3a PFNN \u7684\u5148\u9a8c\u7684\u5916\u90e8 phase \u63a7\u5236\u673a\u5236\u8ba9\u5b83\u65e0\u6cd5\u5f88\u597d\u7684\u89e3\u51b3\u5bf9\u975e\u5468\u671f\u6027\u52a8\u4f5c\u751f\u6210\u3002

    \u800c MANN \u867d\u7136\u76f8\u5e94\u901f\u5ea6\u5feb\uff0c\u4f46\u5b58\u5728\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\uff0c\u5e76\u4e14\u5728\u63a7\u5236\u6a21\u5f0f\u53d8\u5316\u7684\u65f6\u5019\u52a8\u4f5c\u5341\u5206\u50f5\u786c\uff0c\u800c\u6b63\u662f\u56e0\u4e3a\u52a8\u4f5c\u50f5\u786c\u800c\u4ee3\u7406\u4eba\u7684\u6839\u90e8\u79fb\u52a8\u4ecd\u7136\u5b58\u5728\uff0c\u624d\u51fa\u73b0\u4e86\u66f4\u660e\u663e\u7684\u6ed1\u6b65\u73b0\u8c61\u3002

    "},{"location":"pape_read/NSM/#\u6570\u636e\u589e\u5f3a","title":"\u6570\u636e\u589e\u5f3a","text":"

    \u6b64\u5916\uff0c\u4e3a\u4e86\u589e\u5f3a\u6a21\u578b\u7684\u53ef\u6269\u5c55\u6027\u548c\u9002\u5e94\u6027\uff0cNSM \u56e2\u961f\u4e5f\u63d0\u51fa\u4e86\u4e00\u79cd\u65b0\u7684\u6570\u636e\u589e\u5f3a\u65b9\u6848\u3002\u6784\u5efa\u573a\u666f\u540e\u91c7\u96c6\u4e00\u7cfb\u5217\u573a\u666f\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u901a\u8fc7\u955c\u50cf\u6765\u589e\u52a0\u6570\u636e\u4f53\u91cf\uff0c\u4eba\u5de5\u6807\u8bb0\u52a8\u4f5c\u6807\u7b7e\u548c\u76f8\u4f4d\u6807\u7b7e\u3002\u63a5\u4e0b\u6765\u901a\u8fc7\u6570\u636e\u589e\u5f3a\u7cfb\u7edf\u6765\u589e\u5f3a\u6570\u636e\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u5c31\u662f\u4f7f\u7528 ShapeNet \u6570\u636e\u96c6\u4e2d\u7b26\u5408\u6a21\u578b\u7684\u7269\u4f53\u4e0d\u65ad\u66ff\u6362\u8bad\u7ec3\u7269\u4f53\uff0c\u5e76\u8fdb\u884c\u53d8\u6362\uff0c\u540c\u65f6\u8981\u6ce8\u610f\u66f4\u65b0\u63a5\u89e6\u70b9\u548c\u4ea4\u4e92\u65b9\u5411\u7b49\u3002\u4ee5\u6b64\u5728\u8bad\u7ec3\u8fc7\u7a0b\u4e2d\u63d0\u9ad8\u6a21\u578b\u8303\u7528\u6027\u3002

    "},{"location":"pape_read/NeRF/","title":"[NeRF] Representing Scenes as Neural Radiance Fields for View Synthesis","text":"

    \u7ea6 1701 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    3DV Reconstruction

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/NeRF/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/NeRF/#\u8d21\u732e","title":"\u8d21\u732e","text":"
    1. \u5c06\u590d\u6742\u96c6\u5408\u5f62\u72b6\u548c\u6750\u8d28\u7684\u8fde\u7eed\u573a\u666f\u8868\u8fbe\u4e3a 5D \u795e\u7ecf\u8f90\u5c04\u573a\u7684\u65b9\u6cd5\uff0c\u5c06\u5176\u53c2\u6570\u5316\u4e3a\u57fa\u672c\u7684 MLP \u7f51\u7edc\uff1b
    2. \u57fa\u4e8e\u7ecf\u5178\u4f53\u79ef\u6e32\u67d3\u6280\u672f\u7684\u53ef\u5fae\u5206\u6e32\u67d3\u7a0b\u5e8f\uff0c\u6211\u4eec\u7528\u5b83\u4ece\u6807\u51c6 RGB \u56fe\u50cf\u4e2d\u4f18\u5316\u8fd9\u4e9b\u8868\u793a\u3002\u8fd9\u5305\u62ec\u4e00\u79cd\u5206\u5c42\u91c7\u6837\u7b56\u7565\uff0c\u5c06 MLP \u7684\u5bb9\u91cf\u5206\u914d\u7ed9\u5177\u6709\u53ef\u89c1\u573a\u666f\u5185\u5bb9\u7684\u7a7a\u95f4\uff1b
    3. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\uff0c\u5c06 5D \u5ea7\u6807\u6620\u5c04\u5230\u66f4\u9ad8\u7ef4\u7684\u7a7a\u95f4\uff0c\u4ee5\u5b9e\u73b0\u66f4\u9ad8\u9891\u7387\u7684\u573a\u666f\u5185\u5bb9\u7684\u8868\u793a\uff1b

    \u63d0\u51fa\u7684\u8868\u793a\u65b9\u6cd5\u6709\u5982\u4e0b\u597d\u5904\uff1a

    "},{"location":"pape_read/NeRF/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u4f7f\u7528\u5982\u4e0b\u4e00\u4e2a\u201c\u51fd\u6570\u201d\u6765\u8868\u793a\u4e00\u4e2a\u9759\u6001\u573a\u666f\uff1a

    \\[ \\begin{aligned} & F_{\\Theta}:(\\mathrm{x}, \\mathrm{d}) \\rightarrow (\\mathrm{c}, \\sigma) \\\\ & \\text{where } \\mathrm{x} = (x,y,z), \\; \\mathrm{d} \\text{ is a 3D Cartesian unit vector}, \\; \\mathrm{c} = (r,g,b), \\; \\sigma \\text{ is the density}. \\end{aligned} \\]

    \u4e3a\u4e86\u4fdd\u8bc1\u591a\u89c6\u89d2\u4e0b\u89c2\u5bdf\u5230\u7684\u5185\u5bb9\u5177\u6709\u4e00\u81f4\u6027\uff0c\u505a\u5982\u4e0b\u7ea6\u675f\uff1a

    \u5229\u7528\u5982\u4e0a\u201c\u51fd\u6570\u201d\uff0c\u5177\u4f53\u6765\u8bf4\u64cd\u4f5c\u5982\u4e0b\uff1a

    \u4e3a\u4e86\u80fd\u591f\u8ba9 MLP \u8868\u793a\u66f4\u9ad8\u9891\u7387\u7684\u51fd\u6570\uff0c\u5f15\u5165\u4e86\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u3002

    \u6b64\u5916\uff0c\u5173\u4e8e\u6e32\u67d3\uff0c\u4f7f\u7528\u7684\u662f\u4f20\u7edf\u7684\u4f53\u79ef\u6e32\u67d3\u65b9\u6cd5\uff0c\u7d2f\u79ef\u4e00\u6761\u5149\u7ebf\u4e0a\u7684\u989c\u8272\u548c\u5bc6\u5ea6\uff0c\u5f97\u5230\u6700\u7ec8\u7684\u989c\u8272\uff0c\u6240\u4f7f\u7528\u7684\u516c\u5f0f\u5982\u4e0b\uff1a

    \\[ \\begin{aligned} & \\mathrm{C}(\\mathrm{r})= \\int_{t_n}^{t_f} T(t) \\cdot \\sigma\\left( \\mathrm{r}(t) \\right) \\cdot \\mathrm{c} \\left( \\mathrm{r}(t), \\mathrm{d} \\right) \\cdot \\mathrm{d}t \\end{aligned},\\;\\; \\text{where } T(t) = \\exp\\left( -\\int_{t_n}^t \\sigma\\left(\\mathrm{r}(s)\\right) \\; \\mathrm{d}s \\right) \\]

    \u5bf9\u8fd9\u4e2a\u5f0f\u5b50\u7a0d\u4f5c\u89e3\u91ca\uff0c\\(t_n\\) \u548c \\(t_f\\) \u5206\u522b\u8868\u793a near \u548c far \u7684\u5149\u7ebf\u8fb9\u754c(bound)\uff0c\u5149\u7ebf\u7ed3\u679c \\(C(\\mathrm{r})\\) \u901a\u8fc7\u7d2f\u79ef\u8fd9\u4e24\u4e2a\u7aef\u70b9\u4e4b\u95f4\u7684\u6309\u6743\u7d2f\u79ef\u5f97\u5230\uff0c\u5176\u6743\u91cd\u4e3a \\(T(t)\\)\uff0c\u89c2\u5bdf\u5176\u5b9a\u4e49\u5f0f\u53ef\u53d1\u73b0\uff0c\u968f\u7740 \\(t\\) \u7684\u589e\u5927\uff0c\\(T(t) \\rightarrow 0\\)\uff0c\u5373\u7ea6\u5f80\u540e\u7684\u70b9\u7ea6\u4e0d\u5bb9\u6613\u88ab\u770b\u5230\uff0c\u8fd9\u4e5f\u662f\u7b26\u5408\u5e38\u8bc6\u7684\u3002\u800c\u7d2f\u79ef\u7684\u5bf9\u8c61\u4e3a \\(\\sigma(\\mathrm{r}(t)) \\cdot \\mathrm{c}(\\mathrm{r}(t), \\mathrm{d})\\)\uff0c\u5373\u5bc6\u5ea6\u548c\u989c\u8272\u7684\u4e58\u79ef\uff0c\u6ce8\u610f\u4e24\u4e2a\u53c2\u6570\u2014\u2014\u5bc6\u5ea6\u8868\u5f81\u5f62\u72b6\u7279\u5f81\uff0c\u4ec5\u4e0e\u7a7a\u95f4\u4f4d\u7f6e\u6709\u5173\uff1b\u800c\u989c\u8272\u540c\u65f6\u4e0e\u89c2\u5bdf\u89d2\u5ea6\u6709\u5173\uff0c\u8fd9\u6697\u542b\u7740\u5149\u5f71\u4fe1\u606f\u3002

    \u7136\u800c\uff0c\u7531\u4e8e\u79ef\u5206\u7684\u64cd\u4f5c\u6027\u5dee\uff0c\u6240\u4ee5\u4f7f\u7528\u4e00\u79cd\u79bb\u6563\u7684\u62bd\u6837\u7d2f\u79ef\u6765\u5b9e\u73b0\u8fd9\u4ef6\u4e8b\uff0c\u5c06\u5149\u7ebf\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\uff0c\u6309\u5747\u5300\u5206\u5e03\u5728\u6bcf\u4e2a\u70b9\u91c7\u6837\u4e00\u4e2a\u70b9\uff0c\u8fdb\u884c\u7d2f\u79ef\uff0c\u5373\u5bf9\u4e8e\u533a\u95f4 \\(t_i\\)\uff1a

    \\[ t_i \\sim U \\left[ t_n + \\frac{i-1}{N} \\left( t_f - t_n \\right), t_n + \\frac{i}{N} \\left( t_f - t_n \\right) \\right] \\]

    \u5bf9\u5e94\u7684\u989c\u8272\u8ba1\u7b97\u516c\u5f0f\u6539\u5199\u4e3a\uff1a

    \\[ \\begin{aligned} \\hat{C}(\\mathrm{r}) = \\sum_{i=1}^{N} T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\cdot \\mathrm{c}_i, \\;\\; \\text{where } T_i = \\exp\\left( -\\sum_{j=1}^{i-1} \\sigma_j \\delta_j \\right) \\text{ and } \\delta_i = t_{i+1} - t_i \\end{aligned} \\]

    \u5176\u4e2d\uff0c\\(\\sigma(\\mathrm{r}(t))\\) \u522b\u66ff\u6362\u4e3a \\((1-\\exp(-\\sigma_i\\delta_i))\\)\uff0c\u5728\u7ed3\u5408\u4e86\u533a\u95f4\u957f\u5ea6\u7684\u60c5\u51b5\u4e0b\u53c8\u91cd\u65b0\u5c06\u5bc6\u5ea6\u6620\u5c04\u56de\u4e86 \\([0,1]\\)\u3002

    \u5728\u4e4b\u540e\u7684\u7b56\u7565\u4e2d\uff0c\u8fd8\u4f1a\u5bf9\u91c7\u6837\u89c4\u5219\u505a\u8fdb\u4e00\u6b65\u4f18\u5316\u3002

    \u81f3\u6b64\u4e3a\u6b62\u662f NeRF \u4e3b\u8981\u7684\u65b9\u6cd5\uff0c\u4f46\u662f\u8fd9\u4e9b\u65b9\u6cd5\u4ecd\u7136\u4e0d\u8db3\u4ee5\u8ba9\u5b83\u8fbe\u5230\u6700\u5148\u8fdb\u7684\u6548\u679c\uff0c\u56e0\u6b64\u8fd9\u91cc\u5f15\u5165\u4e24\u4e2a\u6539\u8fdb\u63aa\u65bd\u3002

    1. \u4f7f\u7528\u4f4d\u7f6e\u7f16\u7801(positional encoding)\u6765\u4f7f MLP \u80fd\u591f\u652f\u6301\u66f4\u9ad8\u9891\u7684\u56fe\u50cf\u4fe1\u606f\uff1b
    2. \u4f7f\u7528\u7ed3\u6784\u5316\u7684\u91c7\u6837(hierarchical sampling)\u4f7f\u80fd\u591f\u66f4\u6709\u6548\u5730\u5bf9\u8fd9\u79cd\u9ad8\u9891\u8868\u793a\u8fdb\u884c\u91c7\u6837\uff1b

    \u4f4d\u7f6e\u7f16\u7801\u4e3a\u4e00\u4e2a \\(\\gamma : \\R \\rightarrow \\R^{2L}\\)\uff1a

    \\[ \\gamma(p) = \\left( \\sin(2^0 \\pi p), \\cos(2^0 \\pi p), \\cdots, \\sin(2^{L-1} \\pi p), \\cos(2^{L-1} \\pi p) \\right) \\]

    \u5c06 \\(\\gamma(\\cdot)\\) \u5e94\u7528\u4e8e \\(\\mathrm{x}\\) \u7684\u4e09\u4e2a\u5206\u91cf\uff08\u88ab\u6807\u51c6\u5316\u5230 \\([-1,1]\\) \u4e0a\uff09\u548c \\(\\mathrm{d}\\) \u7684\u4e24\u4e2a\u5206\u91cf\u4e0a\uff0c\u5b9e\u73b0\u7ef4\u5ea6\u63d0\u5347\uff0c\u4ee5\u6b64\u4f18\u5316\u5728\u9ad8\u9891\u5185\u5bb9\u4e0a\u7684\u8868\u73b0\u3002\u5728\u6587\u7ae0\u4e2d\u63d0\u5230\uff0c\\(L_\\mathrm{x} = 10, L_\\mathrm{d} = 4\\)\u3002

    \u800c\u5206\u5c42\u91c7\u6837\uff0c\u9488\u5bf9\u7684\u662f\u4e4b\u524d\u7684\u5747\u5300\u5212\u5206\u4e3a \\(N\\) \u4e2a\u533a\u95f4\u8fdb\u884c\u5747\u5300\u91c7\u6837\u3002\u663e\u7136\uff0c\u67d0\u4e9b\u201c\u7a7a\u6c14\u201d\u533a\u57df\u548c\u88ab\u906e\u6321\u7684\u533a\u57df\u5bf9\u6e32\u67d3\u7ed3\u679c\u5e76\u4e0d\u4f1a\u6709\u5f88\u5927\u5f71\u54cd\uff0c\u800c\u5728\u7a7a\u95f4\u4e0a\u8fd9\u4e9b\u5185\u5bb9\u53ef\u80fd\u5360\u4e86\u7edd\u5927\u90e8\u5206\uff08\u5c24\u5176\u662f\u6ca1\u6709\u534a\u900f\u660e\u7269\u4f53\u7684\u60c5\u51b5\u4e0b\uff09\uff0c\u5747\u5300\u91c7\u6837\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\u5c31\u663e\u5f97\u975e\u5e38\u4f4e\u6548\u3002

    \u5206\u5c42\u91c7\u6837\u7684\u5927\u81f4\u601d\u8def\u662f\uff0c\u9996\u5148\u4f7f\u7528\u4e00\u4e2a\u7c97\u7565(coarse)\u7684\u7f51\u7edc\uff0c\u5229\u7528 \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u7684\u5747\u5300\u91c7\u6837\u70b9\uff0c\u901a\u8fc7\u8ba1\u7b97 \\(\\hat{w}_i = normalize\\left( T_i \\cdot (1 - \\exp(-\\sigma_i \\delta_i)) \\right)\\) \u5f97\u5230\u6bcf\u4e2a\u70b9\u7684\u6743\u91cd\uff0c\u800c\u8fd9\u4e2a\u6743\u91cd\u5219\u53cd\u5e94\u4e86\u6bcf\u4e00\u4e2a\u91c7\u6837\u70b9\u9644\u8fd1\u6709\u6548\u70b9\u7684\u5206\u5e03\u60c5\u51b5\uff0c\u53ef\u4ee5\u770b\u4f5c\u4e00\u4e2a\u6982\u7387\u5bc6\u5ea6\u51fd\u6570(PDF)\u3002\u63a5\u4e0b\u6765\u6211\u4eec\u5728\u8fd9\u4e2a\u5206\u5e03\u7684\u57fa\u7840\u4e0a\u518d\u91c7\u6837\u5f97\u5230 \\(N_f\\) \u4e2a\u7cbe\u7ec6(fine)\u91c7\u6837\u70b9\uff0c\u4e0e \\(N_c\\) \u4e2a\u7c97\u7565(coarse)\u70b9\u4e00\u8d77\u653e\u5230\u7cbe\u7ec6(fine)\u7f51\u7edc\u4e2d\u8fdb\u884c\u8bad\u7ec3\u3002

    \u4f7f\u7528\u7684 loss \u5982\u4e0b\uff1a

    \\[ \\mathcal{L} = \\sum_\\mathrm{r\\in \\text{Rays}} \\left[ \\left\\| \\hat{C}_c(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 + \\left\\| \\hat{C}_f(\\mathrm{r}) - C_{g.t.}(\\mathrm{r}) \\right\\|_2^2 \\right] \\] \u53c2\u8003\u8d44\u6599

    \u793e\u533a Pytorch \u590d\u73b0\u4ee3\u7801\u7684\u6ce8\u91ca\uff1ahttps://github.com/IsshikiHugh/nerf-pytorch

    "},{"location":"pape_read/SA-MHR/","title":"[SA-HMR] Learning Human Mesh Recovery in 3D Scenes","text":"

    \u7ea6 1927 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

    3DV HMR Scene-Aware

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/SA-MHR/#\u7b14\u8bb0","title":"\u7b14\u8bb0","text":""},{"location":"pape_read/SA-MHR/#\u4efb\u52a1\u5b9a\u4e49","title":"\u4efb\u52a1\u5b9a\u4e49","text":""},{"location":"pape_read/SA-MHR/#\u4f18\u52bf\u4e0e\u8d21\u732e","title":"\u4f18\u52bf\u4e0e\u8d21\u732e","text":"

    \u6982\u62ec\u8d21\u732e\uff1a

    1. \u975e\u4f18\u5316\u505a\u6cd5\u7684\uff0c\u573a\u666f\u611f\u77e5\u7684\u3001\u5355\u7167\u7247\u3001\u9884\u7ed9\u573a\u666f\u7684\u4eba\u4f53\u7f51\u683c\u6062\u590d\u6846\u67b6\uff1b
    2. \u9884\u8bad\u7ec3\u7684 HMR \u7f51\u7edc\u4e0e\u5e73\u884c\u7f51\u7edc\u7684\u673a\u9047 cross-attention \u7684\u5904\u7406\u8bbe\u8ba1\uff0c\u662f\u897f\u5b89\u4e86\u5bf9\u4eba\u4f53\u59ff\u52bf\u548c\u573a\u666f\u51e0\u4f55\u7279\u5f81\u7684\u8054\u5408\u5b66\u4e60\uff1b
    3. \u5728\u51c6\u786e\u5ea6\u548c\u901f\u5ea6\u4e0a\u90fd\u8584\u7eb1\u4f18\u5316\u505a\u6cd5\u7684\u57fa\u7ebf\uff1b
    "},{"location":"pape_read/SA-MHR/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":""},{"location":"pape_read/SA-MHR/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":""},{"location":"pape_read/SA-MHR/#\u6548\u679c\u5ea6\u91cfmetrics","title":"\u6548\u679c\u5ea6\u91cf(metrics)","text":""},{"location":"pape_read/SAMP/","title":"[SAMP] Stochastic Scene-Aware Motion Prediction","text":"

    \u7ea6 1427 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    3DV Human-Motion Scene-Aware

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/SAMP/#\u8bba\u6587\u7b14\u8bb0","title":"\u8bba\u6587\u7b14\u8bb0","text":""},{"location":"pape_read/SAMP/#\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","title":"\u95ee\u9898\u4e0e\u73b0\u72b6\u4e0e\u8109\u7edc","text":"

    \u52a8\u4f5c\u751f\u6210\u7684\u5b9e\u73b0\u5212\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a

    1. \u5bfc\u822a\u81f3\u4ea4\u4e92\u76ee\u6807\uff1b
    2. \u5bfb\u627e\u4ea4\u4e92\u63a5\u89e6\u70b9(contact point)\uff1b
    3. \u751f\u6210\u4ea4\u4e92\u52a8\u4f5c\uff0c\u5e76\u4e14\u9700\u8981\u4fdd\u8bc1\u751f\u6210\u7ed3\u679c\u4f1a\u81ea\u7136\u53d8\u5316\uff08\u4ee5\u7b26\u5408\u73b0\u5b9e\u611f\u89c9\uff09\uff1b

    \u7531\u4e8e\u8fd9\u4e9b\u52a8\u4f5c\u4e2d\u6709\u4e00\u90e8\u5206\u662f\u201c\u5faa\u73af\u7684(cyclic)\u201d\uff0c\u4e00\u90e8\u5206\u662f\u201c\u4e0d\u5faa\u73af\u7684(acyclic)\u201d\uff0c\u6240\u4ee5\u9700\u8981\u4e00\u4e2a\u63a8\u7406\u7cfb\u7edf\u6765\u534f\u8c03\u4e24\u8005 -> \u63d0\u51fa SAMP\uff0c\u573a\u666f\u53ef\u611f\u77e5\u7684\u52a8\u4f5c\u9884\u6d4b\u7cfb\u7edf(Scene-Aware Motion Prediction)\uff1a

    "},{"location":"pape_read/SAMP/#\u8d21\u732e","title":"\u8d21\u732e","text":"
    1. \u65b0\u9896\u7684\u968f\u673a\u6a21\u578b\u4ee5\u751f\u6210\u5b9e\u65f6\u7684\u3001\u591a\u6837\u7684\u3001goal driven \u7684\u4eba\u7269\u5bf9\u573a\u666f\u7684\u4ea4\u4e92\uff1b
    2. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u7ed9\u5b9a\u76ee\u6807\u51e0\u4f55\u4f53\u540e\u751f\u6210\u53ef\u4fe1\u7684\u3001\u52a8\u4f5c\u76f8\u5173\u7684\u4ea4\u4e92\u4f4d\u7f6e\u548c\u65b9\u5411\u7684\u65b0\u5efa\u6a21\u65b9\u6cd5\uff1b
    3. \uff08\u5bf9 1. \u7684\u7ec6\u5316\uff09\u5c06\u5177\u4f53\u8def\u5f84\u89c4\u5212\u7eb3\u5165\u53d8\u5206\u8fd0\u52a8\u5408\u6210\u7f51\u7edc\uff0c\u5b9e\u73b0\u5728\u590d\u6742\u573a\u666f\u4e2d\u7684\u5bfc\u822a\uff1b
    4. \u5305\u542b\u591a\u6837\u4eba\u4f53\u573a\u666f\u4ea4\u4e92\u6570\u636e\u7684\u65b0\u7684 MoCap \u6570\u636e\u96c6\uff1b
    "},{"location":"pape_read/SAMP/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u8fd9\u4e9b\u72ec\u7acb\u7ec4\u4ef6\u4f7f SAMP \u79f0\u4e3a\u7b2c\u4e00\u4e2a\u89e3\u51b3\u751f\u6210\u591a\u6837\u52a8\u6001\u52a8\u4f5c\u5e8f\u5217\uff0c\u5e76\u4e14\u80fd\u771f\u5b9e\u5e94\u7528\u4e8e\u590d\u6742\u573a\u666f\u4e2d\u7684\u3002 - [x] \u95ee\u9898\uff1a\u8fd9\u91cc\u6700\u5173\u952e\u7684\u662f\u54ea\u4e00\u4e2a\u90e8\u5206\uff1f\u4e0e NSM \u76f8\u6bd4\u72ec\u521b\u6027\u7684\u5730\u65b9\u5177\u4f53\u5728\u54ea\u91cc\uff1f\u5230\u5e95\u5982\u4f55\u5b9a\u4e49\u201cdiverse human-scene interactions\u201d\uff0c\u548c Motion VAE \u90a3\u79cd\u751f\u6210\u5206\u5e03\u6a21\u578b\u7684\u6709\u4ec0\u4e48\u533a\u522b\uff1f\uff08Motion VAE \u662f\u5229\u7528\u5206\u5e03\u7684\u6781\u5927\u4f3c\u7136\u4f30\u8ba1\u5f97\u5230\u7ed3\u679c\u7684\uff0cMoGlow \u8c8c\u4f3c\u548c\u573a\u666f\u6ca1\u5173\u7cfb\uff09

    \u56e0\u6b64\uff0c\u8bad\u7ec3 SAMP \u6240\u9700\u7684\u6570\u636e\u96c6\u9700\u8981\u4e30\u5bcc\u4e14\u4e0d\u540c\u7684\u573a\u666f\u4ea4\u4e92\uff0c\u73b0\u6709\u6570\u636e\u96c6\u7f3a\u5c11\u4ea4\u4e92\u884c\u4e3a -> \u81ea\u5df1\u505a\u4e86\u4e00\u4e2a\u3002

    \u5982\u4f55\u8861\u91cf\u4eba\u4f53\u52a8\u4f5c\u7684\u968f\u673a\u6027(stochasticity)\u662f\u4e00\u4e2a\u6709\u5f85\u63a2\u7d22\u7684\u9886\u57df\u3002

    "},{"location":"pape_read/SAMP/#\u8bad\u7ec3\u7b56\u7565","title":"\u8bad\u7ec3\u7b56\u7565","text":"

    \u4f7f\u7528\u6b63\u5e38\u7684\u76d1\u7763\u8bad\u7ec3\u4f1a\u5bfc\u81f4\u9519\u8bef\u7d2f\u79ef(accumulation of error)\uff0c\u56e0\u4e3a\u4e00\u6b21\u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a\u8f93\u5165\u8fdb\u5165\u5230\u4e0b\u4e00\u4e2a\u7f51\u7edc\u3002\u6240\u4ee5 SAMP \u91c7\u7528\u9884\u8ba2\u91c7\u6837(scheduled sampling)\uff0c\u5b83\u80fd\u591f\u7a33\u5b9a\u751f\u6210\u957f\u65f6\u95f4\u7684\u52a8\u4f5c\u9884\u4f30\u3002

    \u5177\u4f53\u6765\u8bf4\uff0c\u4e0a\u4e00\u6b21\u7684\u9884\u6d4b\u7ed3\u679c\u4ee5 \\(1-P\\) \u7684\u6982\u7387\u4f5c\u4e3a\u4e0b\u4e00\u6b21\u9884\u6d4b\u7684\u8f93\u5165\uff0c\u5176\u4e2d \\(P\\) \u7684\u5b9a\u4e49\u5982\u4e0b\uff1a

    "},{"location":"pape_read/SAMP/#\u5b9e\u9a8c\u548c\u8bc4\u4f30","title":"\u5b9e\u9a8c\u548c\u8bc4\u4f30","text":"

    \u5728\u540c\u521d\u59cb\u6761\u4ef6\u4e0b\u591a\u6b21\u6267\u884c\u540c\u4e00\u4efb\u52a1\uff0c\u4f7f\u7528 APD(Average Pairwise Distance) \u6765\u8861\u91cf\u5176\u8fd0\u52a8\u5e45\u5ea6\uff1a

    "},{"location":"pape_read/SAMP/#\u4ee3\u7801\u9605\u8bfb","title":"\u4ee3\u7801\u9605\u8bfb","text":""},{"location":"pape_read/SAMP/#motionnet","title":"MotionNet","text":"

    \u516c\u5f0f\u63a8\u5bfc\uff1a

    \u6b63\u6001\u5206\u5e03\u7684\u71b5\u516c\u5f0f

    \u5047\u8bbe \\(x\\sim N(\\mu, \\sigma^2)\\)\uff0c\u4e8e\u662f\u6709\uff1a

    \u5e76\u4e14\u6709\u7ed3\u8bba\uff1a

    \\[ \\int_{-\\infty}^{\\infty} e^{-x^2} \\mathrm{d}x = \\sqrt{\\pi} \\]

    \u90a3\u4e48\u6709\u5176\u71b5\u516c\u5f0f\uff1a

    \\[ \\begin{aligned} -\\int_{-\\infty}^{\\infty} p(x)\\ln p(x) \\mathrm{d}x &= -\\int_{-\\infty}^{\\infty}\\frac{1}{\\sqrt{2\\pi\\sigma^2}}\\exp\\left( -\\frac{(x-\\mu)^2}{\\sqrt{2\\sigma^2}} \\right) \\ln\\left[ \\frac{1}{\\sqrt{2\\pi\\sigma^2}} \\exp\\left( -\\frac{(x-\\mu)^2}{2\\sigma^2} \\right) \\right] \\mathrm{d}x \\\\ &= \\frac{1}{2}\\left( \\ln\\left( 2\\pi\\sigma^2 \\right) + 1 \\right) \\end{aligned} \\]"},{"location":"pape_read/TRACE/","title":"[TRACE] 5D Temporal Regression of Avatars with Dynamic Cameras in 3D Environments","text":"

    \u7ea6 1352 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 7 \u5206\u949f

    3DV HMR Global-Coordinates Track

    \u6587\u7ae0\u4fe1\u606f

    "},{"location":"pape_read/TRACE/#\u4efb\u52a1--\u6311\u6218","title":"\u4efb\u52a1 & \u6311\u6218","text":""},{"location":"pape_read/TRACE/#\u80cc\u666f","title":"\u80cc\u666f","text":"

    \u867d\u7136\u76ee\u524d\u5bf9\u4e8e HPS(Human Pose & Shape) \u7684\u4f30\u8ba1\u5df2\u7ecf\u6709\u5f88\u591a\u5f88\u597d\u7684\u5de5\u4f5c\uff0c\u4f46\u662f\u90fd\u662f\u5f97\u5230\u76f8\u673a\u5ea7\u6807\u4e0b\u7684\u7ed3\u679c\uff0c\u65e0\u6cd5\u5f88\u597d\u7684\u5f97\u5230\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u7684\u7ed3\u679c\u3002\u5c24\u5176\u662f\u5728\u76f8\u673a\u79fb\u52a8\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e2a\u4efb\u52a1\u5c24\u5176\u56f0\u96be\u3002\u800c\u5f97\u5230\u6062\u590d\u51fa\u6765\u7684 Human \u7684\u5168\u5c40\u5ea7\u6807\u5177\u6709\u91cd\u5927\u610f\u4e49\u3002

    "},{"location":"pape_read/TRACE/#\u6311\u6218","title":"\u6311\u6218","text":"
    1. \u9700\u8981\u89e3\u5076 human \u7684\u8fd0\u52a8\u548c camera \u7684\u8fd0\u52a8\uff0c\u8fd9\u6837\u624d\u80fd\u5728\u5168\u5c40\u5ea7\u6807\u7cfb\u4e0b\u6062\u590d human \u7684\u8f68\u8ff9\uff1b
      1. \u4e00\u79cd\u65b9\u6cd5\uff1a\u4f7f\u7528 SfM \u6062\u590d\u51fa\u76f8\u673a\u5173\u4e8e rigid scene \u7684\u76f8\u5bf9\u8fd0\u52a8\uff0c\u4f46\u662f\u5728\u7279\u6b8a\u73af\u5883\uff08\u753b\u9762\u7684\u5927\u90e8\u5206\u90fd\u4e0d\u600e\u4e48 rigid\uff0c\u6bd4\u5982\u5927\u91cf\u4eba\u6d41\uff09\u4e0b\u975e\u5e38\u4e0d\u53ef\u9760\uff1b
      2. \u53e6\u5916\u4e00\u79cd\u6765\u81ea GLAMR \u7684\u65b9\u6cd5\uff1a\u901a\u8fc7\u5df2\u6709\u7684\u5c40\u90e8\u59ff\u6001\u6765\u63a8\u65ad\u5168\u5c40\u4f4d\u7f6e\uff0c\u5c31\u7c7b\u4f3c\u4e8e\u770b\u4f60\u8d70\u4e86\u51e0\u6b65\u7136\u540e\u4f30\u8ba1\u4f60\u52a8\u4e86\u51e0\u7c73\uff1b
      3. TRACE \u9009\u62e9\u4e86\u7b2c\u4e8c\u79cd\u65b9\u6cd5\u7684\u53d8\u79cd\uff0c\u901a\u8fc7\u4f7f\u7528\u6574\u4e2a\u753b\u9762\u6765\u9884\u6d4b\u79fb\u52a8\u8ddd\u79bb\uff0c\u6539\u5584\u4e86 GLAMR \u539f\u672c\u4e0d\u600e\u4e48\u597d\u7684\u6548\u679c\u3002\u4e0d\u4ec5\u5982\u6b64\uff0cGLAMR \u662f\u591a\u9636\u6bb5\u7684\uff0c\u9c81\u68d2\u6027\u4e0d\u654c TRACE\uff1b
    2. \u5c24\u5176\u9488\u5bf9\u4e8e\u8ffd\u8e2a\u529f\u80fd\uff0c\u5728\u5bc6\u96c6\u4eba\u7fa4\u573a\u666f\uff0c\u5b58\u5728\u5f88\u4e25\u91cd\u7684\u906e\u6321\u95ee\u9898\uff1b
      1. \u6700\u5e38\u89c1\u7684\u89e3\u51b3\u529e\u6cd5\u662f\u4f7f\u7528\u65f6\u5e8f\u5148\u9a8c\u5047\u8bbe\uff0c\u5982 Kalman filter\uff0c\u4f46\u662f\u5728\u590d\u6742\u573a\u666f\u4e0b\u4e5f\u5f88\u5bb9\u6613\u5931\u6548\uff1b
      2. \u95ee\u9898\uff1aKalman filter \u597d\u50cf\u548c\u6ee4\u6ce2\u6709\u5173\uff1f\u4e3a\u4ec0\u4e48\u8bf4\u662f temporal priors\uff1f \u4f7f\u5e73\u6ed1\u3002
      3. PHALP \u662f\u4e3a\u6570\u4e0d\u591a\u7684\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u7684\u65b9\u6cd5\u4e4b\u4e00\uff0c\u4f46\u662f\u5b83\u5e76\u975e one-stage\uff0c\u800c\u4e14\u5e76\u4e0d\u5bf9\u5e8f\u5217\u8fdb\u884c\u5168\u9762\u7684\u63a8\u7406\uff1b
      4. \u95ee\u9898\uff1a\u9700\u8981\u4e86\u89e3\u8fd9\u4e2a\u5417\uff1f \u8df3\u8fc7\u3002
    "},{"location":"pape_read/TRACE/#\u4efb\u52a1\u4e0e\u6210\u679c","title":"\u4efb\u52a1\u4e0e\u6210\u679c","text":"

    \u672c\u5de5\u4f5c\u5b9e\u73b0\u4e86\u52a8\u6001\u76f8\u673a\u89c6\u9891\uff08DC-videos\uff09\u4e0b\u5728\uff08\u865a\u62df\u7684\uff09\u7a7a\u95f4\u4e2d\u7684\u65f6\u5e8f\u7684\u5bf9\u4e8e K \u76ee\u6807\u7684\u5b9a\u4f4d\u68c0\u6d4b\u3001\u59ff\u6001\u4f30\u8ba1\u3001\u8ffd\u8e2a\u548c\u51b2\u7a81\u9002\u914d\uff0c\u5e76\u4e14\u80fd\u591f\u5f97\u5230\u5168\u5c40\u7684\u5ea7\u6807\u3002 - \u65f6\u5e8f & \u5168\u5c40\u5ea7\u6807 & \u8ffd\u8e2a\uff1b

    \u5bf9 K \u4e2a\u6709\u9650\u76ee\u6807\u8fdb\u884c\u8ffd\u8e2a\uff0c\u5373\u4f7f\u4e2d\u9014\u77ed\u6682\u7684\u5931\u914d\uff0c\u4e5f\u80fd\u5728\u4e4b\u540e\u88ab\u91cd\u65b0\u8bc6\u522b\uff08\u4e00\u5f00\u59cb\u51b3\u5b9a\u4e86\u54ea K \u4e2a\u5c31\u4e00\u76f4\u662f\u54ea K \u4e2a\u4eba\uff09\u3002

    "},{"location":"pape_read/TRACE/#\u521b\u65b0\u70b9--\u8d21\u732e","title":"\u521b\u65b0\u70b9 & \u8d21\u732e","text":""},{"location":"pape_read/TRACE/#\u65b9\u6cd5","title":"\u65b9\u6cd5","text":"

    \u53c2\u8003\u6d41\u7a0b\u56fe\u505a\u89e3\u91ca\u3002

    "},{"location":"pape_read/TRACE/#\u6570\u636e\u96c6","title":"\u6570\u636e\u96c6","text":"

    \u7565\u3002

    "},{"location":"pape_read/TRACE/#loss","title":"Loss","text":"

    \u7565\u3002

    "},{"location":"tech_accu/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/ai/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/ai/hydra/","title":"Hydra","text":"

    \u7ea6 1136 \u4e2a\u5b57 42 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u76f8\u5173\u94fe\u63a5

    \u7b80\u4ecb

    Hydra \u4ea6\u53ef\u7528\u4e8e\u5176\u5b83 Python APP\uff0c\u4f46\u672c\u6587\u53ea\u4ee5 Research \u7684\u89c6\u89d2\u6765\u8c08\u8fd9\u4e2a\u5de5\u5177\u3002

    \u5728\u8fdb\u884c\u5b9e\u9a8c\u65f6\uff0c\u6211\u4eec\u53ef\u80fd\u4f1a\u5e0c\u671b\u4e00\u4e2a\u9879\u76ee\u80fd\u652f\u6301\u5207\u6362\u5176\u4e2d\u7684\u82e5\u5e72\u90e8\u4ef6\uff0c\u5c31\u597d\u50cf\u7ed9\u673a\u5668\u4eba\u66f4\u6362\u4e0d\u540c\u7684\u90e8\u4ef6\uff0c\u6765\u6d4b\u8bd5\u5176\u6027\u80fd\u3002\u800c\u6bcf\u4e00\u4e2a\u90e8\u4ef6\u90fd\u6709\u53ef\u80fd\u6709\u81ea\u5df1\u7684\u8d85\u53c2\u6570\u9700\u8981\u8bbe\u7f6e\u3002

    \u786c\u7f16\u7801\u8bbe\u7f6e\u5f53\u7136\u4e0d\u53ef\u53d6\uff0c\u8fd9\u592a\u4e0d\u4f18\u96c5\u4e86\u3002\u6240\u4ee5\u6211\u4eec\u901a\u5e38\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\uff0c\u5373 args \u6765\u5b9e\u73b0\u8d85\u53c2\u6570\u7684\u4f20\u5165\u3002\u4f46\u968f\u7740\u6a21\u578b\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u9700\u8981\u7684\u8d85\u53c2\u6570\u8d8a\u6765\u8d8a\u591a\uff0c\u547d\u4ee4\u884c\u5c31\u4f1a\u8d8a\u6765\u8d8a\u957f\uff1b\u800c\u4e14\u4e0d\u540c\u7684\u201c\u90e8\u4ef6\u201d\u53ef\u80fd\u9700\u8981\u4e0d\u540c\u7684\u8d85\u53c2\u6570\uff0c\u56e0\u6b64\uff0c\u4f7f\u7528\u547d\u4ee4\u884c\u53c2\u6570\u7075\u6d3b\u6027\u5c31\u5927\u5927\u4e0b\u964d\u4e86\u3002

    \u56e0\u6b64\uff0c\u6211\u4eec\u8003\u8651\u628a\u8fd9\u4e9b\u4e1c\u897f\u653e\u5728\u6587\u4ef6\u91cc\uff0c\u9700\u8981\u4fee\u6539\u65f6\u5c31\u76f4\u63a5\u4fee\u6539\u6587\u4ef6\uff0c\u8fd9\u6837\u4fee\u6539\u53c2\u6570\u76f8\u5bf9\u5c31\u7075\u6d3b\u4e00\u4e9b\u3002\u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u901a\u8fc7\u5c06\u4e0d\u540c\u7684\u7ec4\u5408\u5206\u522b\u4fdd\u5b58\u4e3a\u4e00\u4e2a\u6587\u4ef6\uff0c\u7528\u6307\u5b9a\u7279\u5b9a\u6587\u4ef6\u7684\u65b9\u5f0f\u6765\u9009\u62e9\u4e00\u4e2a\u5df2\u7ecf\u8bbe\u7f6e\u597d\u7684 pipeline\u3002

    \u4f46\u662f\u8fd9\u6837\u8fd8\u6709\u4e24\u4e2a\u95ee\u9898\uff0c\u9996\u5148\uff0c\u8fd9\u6837\u5199\u7684\u8bdd\uff0c\u914d\u7f6e\u6587\u4ef6\u7684\u590d\u7528\u7387\u662f\u6bd4\u8f83\u4f4e\u7684\uff0c\u56e0\u4e3a\u5404\u4e2a\u914d\u7f6e\u4e4b\u95f4\u5dee\u522b\u53ef\u80fd\u4e0d\u5927\uff0c\u53ef\u80fd\u4e92\u76f8\u53ea\u6709\u4e00\u5c0f\u90e8\u5206\u7684\u4e0d\u540c\uff0c\u800c\u590d\u7528\u7387\u4f4e\u7684\u574f\u5904\u5c31\u4e0d\u5fc5\u591a\u8bf4\u4e86\uff1b\u5176\u6b21\uff0c\u5c31\u7b97\u6211\u4eec\u7528\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\u6765\u89e3\u51b3\u590d\u7528\u7684\u95ee\u9898\uff0c\u6211\u4eec\u5728\u5b9e\u9645\u4ee3\u7801\u91cc\u4e5f\u9700\u8981\u4f7f\u7528\u7e41\u590d\u7684\u5206\u652f\u8bed\u53e5\u624d\u80fd\u5f88\u597d\u5730\u63a7\u5236\u914d\u7f6e\u7684\u9009\u62e9\u3002

    \u4e8e\u662f\uff0cHydra \u5e94\u8fd0\u800c\u751f\u3002Hydra \u4f1a\u4ee5\u7279\u5b9a\u7684\u65b9\u5f0f\u5904\u7406\u5c42\u6b21\u5316\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u5b83\u7684\u884c\u4e3a\u5f88\u50cf Cpp \u7684 #include\uff0c\u4f1a\u628a\u9009\u4e2d\u7684\u540e\u4ee3 Group \u91cc\u7684\u914d\u7f6e\u6587\u4ef6\u5d4c\u5165\u5230\u5f53\u524d\u914d\u7f6e\u6587\u4ef6\u91cc\u3002

    \u66f4\u5177\u4f53\u7684\u5173\u4e8e Hydra \u7684\u89c4\u8303\uff0c\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff0c\u672c\u6587\u4e3b\u8981\u5bf9\u5b98\u65b9\u6587\u6863\u505a\u4e00\u4e9b\u8865\u5145\uff0c\u901a\u8fc7\u5b9e\u9a8c\u63a2\u7d22\u4e00\u4e9b Hydra \u6587\u6863\u4e2d\u6ca1\u6709\u63d0\u5230\u7684\u6027\u8d28\u3002

    "},{"location":"tech_accu/ai/hydra/#\u5173\u4e8e-ab-\u8bed\u6cd5","title":"\u5173\u4e8e +A=B \u8bed\u6cd5","text":"

    \u5728\u6587\u6863\u4e2d\uff0c\u6709\u4e24\u4e2a\u5730\u65b9\u63d0\u5230\u4e86 +A=B \u7684\u8bed\u6cd5\u3002\u7b2c\u4e00\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

    You can add config values via the command line. The + indicates that the field is new.

    $ python my_app.py +db.driver=mysql +db.user=omry +db.password=secret\ndb:\n  driver: mysql\n  user: omry\n  password: secret\n
    files my_app.py
    from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

    \u7b2c\u4e8c\u6b21\u662f\u5728\u8fd9\u91cc\uff1a

    Select an item from a config group with +GROUP=OPTION, e.g:

    $ python my_app.py +db=postgresql\ndb:\n  driver: postgresql\n  pass: drowssap\n  timeout: 10\n  user: postgres_user\n
    files Directory layout
        \u251c\u2500 conf\n    \u2502  \u2514\u2500 db\n    \u2502      \u251c\u2500 mysql.yaml\n    \u2502      \u2514\u2500 postgresql.yaml\n    \u2514\u2500\u2500 my_app.py\n
    db/mysql.yaml
    driver: mysql\nuser: omry\npassword: secret\n
    db/postgresql.yaml
    driver: postgresql\nuser: postgres_user\npassword: drowssap\ntimeout: 10\n
    my_app.py
    from omegaconf import DictConfig, OmegaConf\nimport hydra\n\n@hydra.main(version_base=None)\ndef my_app(cfg: DictConfig) -> None:\n    print(OmegaConf.to_yaml(cfg))\n\nif __name__ == \"__main__\":\n    my_app()\n

    \u524d\u8005\u8868\u793a\u589e\u52a0\u4e00\u4e2a field\uff0c\u540e\u8005\u8868\u793a\u6307\u5b9a\u4e00\u4e2a group\uff0c\u5176\u542b\u4e49\u662f\u4e0d\u540c\u7684\uff0c\u800c\u770b\u8d77\u6765\u662f\u6709\u6b67\u4e49\u7684\u3002

    \u6839\u636e\u6211\u7684\u6d4b\u8bd5\uff0c+A=B \u5177\u4f53\u662f\u54ea\u4e00\u79cd\uff0c\u53d6\u51b3\u4e8e\u662f\u5426\u5b58\u5728\u540d\u4e3a A \u7684 folder\u3002\u5373\uff1a

    \u66f4\u8fdb\u4e00\u6b65\u7684\uff0c\u53ea\u8981\u5f53\u524d\u76ee\u5f55\u5b58\u5728\u540d\u4e3a A \u7684 folder\uff0c\u90a3\u4e48\u5728\u5f53\u524d yaml \u6587\u4ef6\u4e2d\u5c31\u65e0\u6cd5\u5c06 A \u4f5c\u4e3a\u4e00\u4e2a field \u7684 key\u3002

    \u4e4b\u6240\u4ee5\u5f3a\u8c03\u5f53\u524d\uff0c\u662f\u56e0\u4e3a\u5b83\u53ef\u4ee5\u88ab\u7236\u6bcd\u7684 yaml \u6587\u4ef6\u4e2d\u7684\uff0c\u4ee5 A \u4e3a key \u7684 k-v \u5bf9\u8986\u76d6\u3002

    \u4f8b\u5982\uff0c\u867d\u7136\u6dfb\u52a0 A=1 \u66ff\u6362\u4f5c\u4e3a group \u7684 A \u4f1a\u62a5\u9519\uff0c\u4f46\u662f\u6dfb\u52a0 A.B=1 \u5374\u53ef\u4ee5\u8986\u76d6 A \u4e0b\u7684\u4f5c\u4e3a group \u7684 B\uff1b\u4ea6\u6216\u5728\u6700\u7684 config.yaml \u91cc\u6dfb\u52a0\u8fd9\u6837\u4e00\u6bb5\u4e5f\u53ef\u4ee5\u8d77\u5230\u540c\u6837\u7684\u6548\u679c\uff1a

    A:\nB: 1\n

    \u5373\uff0c\u5bf9\u4e8e\u201c\u65e0\u6cd5\u5c06 group \u8986\u76d6\u4e3a field\u201d\u8fd9\u4ef6\u4e8b\u7684\u4fdd\u62a4\uff0c\u53ea\u6709\u76ee\u5f55\u4e00\u5c42\u5185\u6709\u6548\u3002

    "},{"location":"tech_accu/ai/hydra/#\u8986\u76d6\u5173\u7cfb","title":"\u8986\u76d6\u5173\u7cfb","text":"

    \u9996\u5148\uff0c\u9664\u4e86\u5728\u4e0a\u4e00\u8282\u63d0\u5230\u7684\u5173\u4e8e field \u548c group \u7684\u8986\u76d6\u5173\u7cfb\uff0c\u66f4\u91cd\u8981\u7684\u662f\u5728\u4e0d\u540c\u5c42\u7684 yaml \u4e4b\u95f4\uff0c\u76f8\u540c\u952e\u7684\u503c\u7684\u8986\u76d6\u5173\u7cfb\u3002

    \u9996\u5148\uff0c\u5355\u770b defaults\uff0c\u5b98\u65b9\u5728\u6587\u6863\u4e2d\u6709\u63d0\u5230\u89c4\u5219\uff1a

    The defaults are ordered:

    \u6b64\u5916\uff0c\u5982\u679c\u5df2\u7ecf\u5728\u5185\u5c42 defaults \u8bbe\u7f6e\u4e86\u952e\u7684\u9ed8\u8ba4\u503c\uff0c\u5c31\u4e0d\u80fd\u5728\u5916\u5c42\u4e3a\u8fd9\u4e2a\u952e\u8bbe\u7f6e\u9ed8\u8ba4\u503c\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002

    \ud83c\udf30

    \u4f8b\u5982\u4e0b\u9762\u8fd9\u4e24\u4e2a\u6587\u4ef6\u4e2d\uff0c- group1/group2: option1_1 \u548c - group2: option1_1 \u8fd9\u4e24\u884c\u662f\u51b2\u7a81\u7684\uff0c\u53ea\u80fd\u9009\u5176\u4e00\u7684\u3002

    config.yaml
    defaults:\n- group1: option1\n- group1/group2: option1_1\n
    group1/option1.yaml
    defaults:\n- group2: option1_1\n

    \u56e0\u6b64\uff0c\u4e00\u822c\u6765\u8bf4\u5c3d\u91cf\u907f\u514d\u8ba9\u914d\u7f6e\u5c42\u6570\u8d85\u8fc7\u4e24\u5c42\u3002

    \u800c\u5173\u4e8e defaults \u4ee5\u5916\u7684\u90e8\u5206\uff0c\u89c4\u5219\u5982\u4e0b\uff1a

    1. \u5f53\u6700\u5916\u5c42\u7684 config.yaml \u548c\u5728 defaults: \u91cc\u6307\u5b9a\u7684 yaml \u914d\u7f6e\u6587\u4ef6\u5b58\u5728\u51b2\u7a81\u7684\u952e\u65f6\uff0c\u4ee5 config.yaml \u91cc\u7684\u4e3a\u51c6\uff0c\uff08\u65e0\u8bba\u662f\u5426\u6709 GROUP=OPTION \u9009\u9879\uff09\uff1b
    2. \u5f53\u952e\u4e0d\u5b58\u5728\u4e8e defaults: \u4e2d\uff0c\u800c\u53ea\u5728\u547d\u4ee4\u884c\u4e2d\u901a\u8fc7 +GROUP=OPTION \u9009\u4e2d\u65f6\uff0c\u4ee5 OPTION.yaml \u91cc\u7684\u4e3a\u51c6\uff1b
    "},{"location":"tech_accu/ai/pytorch/","title":"PyTorch","text":"

    \u7ea6 565 \u4e2a\u5b57 48 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 3 \u5206\u949f

    \u5f03\u5751\u4e86\uff0c\u611f\u89c9\u6ca1\u5565\u5199\u7684\u5fc5\u8981

    \u53c2\u8003\u8d44\u6599 "},{"location":"tech_accu/ai/pytorch/#\u5b89\u88c5","title":"\u5b89\u88c5","text":"

    \u6839\u636e \u8fd9\u91cc \u63d0\u4f9b\u7684\u65b9\u6cd5\u83b7\u53d6\u5b89\u88c5\u9014\u5f84\uff0c\u6ce8\u610f\u9009\u62e9\u4e0e\u60a8\u7684\u73af\u5883\u76f8\u7b26\u7684\u6761\u4ef6\u3002

    \u4f9d\u8d56\u4e4b\u7c7b\u7684\u90fd\u5df2\u7ecf\u5728\u8be5\u9875\u9762\u5199\u7684\u5f88\u6e05\u695a\u4e86\u3002

    \u5b8c\u6210\u5b89\u88c5\u540e\uff0c\u6211\u4eec\u901a\u8fc7\u5982\u4e0b\u65b9\u6cd5\u6765\u68c0\u6d4b\u662f\u5426\u5b89\u88c5\u6210\u529f\uff1a

    $ python\n>>> import torch\n>>> x = torch.rand(5, 3)\n>>> print(x)\ntensor([[0.8577, 0.6416, 0.2632],\n        [0.3853, 0.8534, 0.4877],\n        [0.0628, 0.2360, 0.8810],\n        [0.1766, 0.8024, 0.5447],\n        [0.3938, 0.9232, 0.4407]])\n
    "},{"location":"tech_accu/ai/pytorch/#\u5f20\u91cf--tensors","title":"\u5f20\u91cf | Tensors","text":"

    Tensors \u662f NumPy \u4e2d ndarrys \u7684\u4e00\u79cd\u65e0\u75db\u66ff\u4ee3\uff0c\u53ea\u4e0d\u8fc7 tensors \u80fd\u591f\u6709\u6548\u5229\u7528 GPU \u8fdb\u884c\u52a0\u901f\u3002

    "},{"location":"tech_accu/ai/pytorch/#\u521d\u59cb\u5316","title":"\u521d\u59cb\u5316","text":"

    \u663e\u7136\uff0c\u521d\u59cb\u5316\u6709\u5f88\u591a\u65b9\u6cd5\uff0c\u8fd9\u91cc\u63d0\u4f9b\u51e0\u79cd\u3002

    \u901a\u8fc7\u6570\u636e\u751f\u6210\u901a\u8fc7 NumPy array \u751f\u6210\u901a\u8fc7\u53e6\u5916\u4e00\u4e2a tensor \u751f\u6210\u4f7f\u7528\u5e38\u6570\u6216\u968f\u673a\u521d\u59cb\u5316

    data = [[1, 2], [3, 4]]\nx_data = torch.tensor(data)\nprint(x_data)\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    tensor([[1, 2],\n        [3, 4]])\n

    np_array = np.array(data)\nx_np = torch.from_numpy(np_array)\nprint(x_np)\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    tensor([[1, 2],\n        [3, 4]])\n

    x_ones = torch.ones_like(x_data) # retains the properties of x_data\nprint(f\"Ones Tensor: \\n {x_ones} \\n\")\n\nx_rand = torch.rand_like(x_data, dtype=torch.float) # overrides the datatype of x_data\nprint(f\"Random Tensor: \\n {x_rand} \\n\")\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    Ones Tensor:\ntensor([[1, 1],\n        [1, 1]])\n\nRandom Tensor:\ntensor([[0.4557, 0.7406],\n        [0.5935, 0.1859]])\n

        shape = (2, 3)\n    rand_tensor = torch.rand(shape)\n    ones_tensor = torch.ones(shape)\n    zeros_tensor = torch.zeros(shape)\n\n    print(f\"Random Tensor: \\n {rand_tensor} \\n\")\n    print(f\"Ones Tensor: \\n {ones_tensor} \\n\")\n    print(f\"Zeros Tensor: \\n {zeros_tensor}\")\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    Random Tensor:\n tensor([[0.4434, 0.1717, 0.7331],\n        [0.4211, 0.8945, 0.2239]])\n\nOnes Tensor:\n tensor([[1., 1., 1.],\n        [1., 1., 1.]])\n\nZeros Tensor:\n tensor([[0., 0., 0.],\n        [0., 0., 0.]])\n
    "},{"location":"tech_accu/ai/pytorch/#\u5c5e\u6027","title":"\u5c5e\u6027","text":"

    \u8fd9\u91cc\u4e3b\u8981\u6d89\u53ca\u7684\u5f20\u91cf\u7684\u5c5e\u6027\u4e3a \u5f62\u72b6(shape)\u3001\u6570\u636e\u7c7b\u578b(dtype) \u548c \u6570\u636e\u6240\u5b58\u50a8\u5728\u7684\u786c\u4ef6\u8bbe\u5907(device)\u3002

    tensor = torch.rand(3, 4)\n\nprint(f\"Shape of tensor: {tensor.shape}\")\nprint(f\"Datatype of tensor: {tensor.dtype}\")\nprint(f\"Device tensor is stored on: {tensor.device}\")\n

    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    Shape of tensor: torch.Size([3, 4])\nDatatype of tensor: torch.float32\nDevice tensor is stored on: cpu\n
    "},{"location":"tech_accu/ai/pytorch/#\u65b9\u6cd5\u4e0e\u64cd\u4f5c","title":"\u65b9\u6cd5\u4e0e\u64cd\u4f5c","text":"

    \u5bf9\u5f20\u91cf\u7684\u64cd\u4f5c\u65b9\u6cd5\u975e\u5e38\u4e4b\u591a\uff0c\u5f88\u96be\u5728\u672c\u6587\u4e2d\u5168\u90e8\u6d89\u53ca\uff0c\u56e0\u800c\u4e5f\u53ea\u662f\u653e\u4e2a \u6587\u6863 \u5728\u8fd9\u8fb9\uff0c\u5728\u6b64\u53ea\u4ecb\u7ecd\u6bd4\u8f83\u57fa\u7840\u7684\u51e0\u4e2a\u3002

    "},{"location":"tech_accu/ai/pytorch/#\u4f7f\u7528-gpu-\u52a0\u901f","title":"\u4f7f\u7528 GPU \u52a0\u901f","text":"

    \u4ee4\u4eba\u5e78\u559c\u7684\u662f\uff0c\u5bf9\u5f20\u91cf\u7684\u8fd9\u4e9b\u64cd\u4f5c\u90fd\u53ef\u4ee5\u4f7f\u7528 GPU \u6765\u8fdb\u884c\u52a0\u901f\uff0c\u5f53\u7136\u5728\u6b64\u4e4b\u524d\u6211\u4eec\u9700\u8981\u5c06\u5b83\u8f6c\u79fb\u5230 GPU \u4e0a\u2014\u2014\u5982\u679c\u53ef\u4ee5\u7684\u8bdd\u3002

    # We move our tensor to the GPU if available\nif torch.cuda.is_available():\n    tensor = tensor.to('cuda')\n    print(f\"Device tensor is stored on: {tensor.device}\")\n

    Output

    Device tensor is stored on: cuda:0\n
    "},{"location":"tech_accu/ai/pytorch/#\u8fd0\u7b97","title":"\u8fd0\u7b97","text":"

    \u6ce8\u610f

    \u5982\u679c\u4e00\u4e2a tensor \u7684\u65b9\u6cd5\u4ee5 _ \u7ed3\u5c3e\uff0c\u90a3\u4e48\u8bf4\u660e\u8fd9\u4e2a\u8fd0\u7b97\u4f1a\u4fee\u6539\u8fd9\u4e2a tensor \u81ea\u8eab\u3002

    \u5373\uff0cx.method_(...) \u5c06\u4f1a\u4fee\u6539 x \u672c\u8eab\u3002

    PyTorch \u5bf9\u56db\u5219\u8fd0\u7b97\u7b26\u8fdb\u884c\u4e86\u4e00\u4e9b\u91cd\u8f7d\uff0c\u5176\u4e0e\u6b63\u5e38\u65b9\u6cd5\u7684\u6620\u5c04\u5173\u7cfb\u5982\u4e0b\uff1a

    \u8fd0\u7b97\u7b26 \u7b49\u4ef7\u65b9\u6cd5 + torch.add() - torch.sub() * torch.mul() / torch.div()"},{"location":"tech_accu/ai/pytorch/#\u7d22\u5f15\u4e0e\u5207\u7247","title":"\u7d22\u5f15\u4e0e\u5207\u7247","text":"

    tensor = torch.ones(4, 4)\ntensor[:,1] = 0\nprint(tensor)\n
    \u9884\u671f\u8f93\u51fa\u5982\u4e0b\uff1a

    Output

    tensor([[1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.],\n        [1., 0., 1., 1.]])\n
    "},{"location":"tech_accu/language/cpp/","title":"Cpp about OOP","text":"

    \u7ea6 53 \u4e2a\u5b57

    \u76f8\u5173\u4fe1\u606f

    \u8fd9\u4e2a\u6761\u76ee\u653e\u7684\u4e3b\u8981\u662f Cpp \u5173\u4e8e OOP \u7684\u4e00\u4e9b\u8bed\u6cd5\u3002

    \u4e3b\u8981\u8fc1\u79fb\u81ea\u5927\u4e00\u7684 yuque \u6587\u6863\uff0c\u518d\u4e4b\u540e\u4e5f\u4f1a\u6709\u4e00\u4e9b\u4fee\u6539\u3002

    \u8fc1\u79fb\u524d\u7684\u6587\u4ef6

    "},{"location":"tech_accu/language/cpp/Part0/","title":"[pre] \u524d\u7f6e\u4e0e\u6742\u9879","text":"

    \u7ea6 1746 \u4e2a\u5b57 74 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 10 \u5206\u949f

    "},{"location":"tech_accu/language/cpp/Part0/#1x-\u5f15\u7528reference","title":"[1.x] \u5f15\u7528reference","text":"

    1.\u521b\u5efabinding\u5173\u7cfb

    \u9700\u8981\u7406\u89e3\u7684\u662f\uff0c\u5f15\u7528\u672c\u8d28\u5c31\u662f\u6307\u9488\u3002\u5b83\u662f\u6307\u9488\u7684\u7cd6\u3002

    typename & refname = name; \u521b\u5efa\u4e86 (typename)name \u7684\u5f15\u7528 (reference)refname

    \u5728bingding\u5173\u7cfb\u5efa\u7acb\u540e\uff0c\u5728 name \u548c refname \u7684\u4f5c\u7528\u57df\u5185 refname \u548c name \u57fa\u672c\u7b49\u6548\uff08\u662f\u53d8\u91cf\u7684\u7ed1\u5b9a\u5173\u7cfb\uff0c\u800c\u975e\u50cf #define \u90a3\u6837\u7684\u5b57\u7b26\u66ff\u6362\u5173\u7cfb

    int x = 1, y = 10, *p = &x, &ref = *p;\n// \u6b64\u65f6 x = 1, y = 10, *p = 1, ref = 1\n\n*p = 2;\n// \u6b64\u65f6 x = 2, y = 10, *p = 2, ref = 2\n\np = &y;\n// \u6b64\u65f6 x = 2, y = 10, *p = 10, ref = 2\n

    2.\u5229\u7528reference\u4f20\u53c2

    \u5229\u7528reference\u53ef\u4ee5\u7c7b\u4f3c\u4f20\u6307\u9488\u4e00\u6837\uff0c\u5728\u53d8\u91cf\u539f\u672c\u7684\u4f5c\u7528\u57df\u5916\u5bf9\u53d8\u91cf\u8fdb\u884c\u4fee\u6539

    void f(int &x){\nx = 1;\n}\n\nint main(){\nint p = 0;\n// \u6b64\u65f6 p = 0\nf(p);\n// \u6b64\u65f6 p = 1\n}\n

    \u4f46\u6b64\u65f6\uff0c\u4f20\u5165 f(p) \u7684\u5b9e\u53c2 p \u5fc5\u987b\u4e3a\u4e00\u4e2a\u53d8\u91cf\uff0c\u4e0d\u53ef\u4ee5\u662f\u5e38\u91cf\u3001\u8868\u8fbe\u5f0f\u7b49\u3002

    3.reference \u4e0e const

    \u8fdb\u884c const int &refA = A; \u64cd\u4f5c\u540e\uff0c\u6211\u4eec\u53d1\u73b0 refA \u4e0d\u53ef\u4fee\u6539\uff0c\u4f46 A \u53ef\u4ee5\u4fee\u6539

    \u5982\u679c A \u5982\u6b64\u5b9a\u4e49\uff1aconst int A = 1;\uff0c\u90a3\u4e48\uff1a

    "},{"location":"tech_accu/language/cpp/Part0/#2x-\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","title":"[2.x] \u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26resolver","text":"
    #include<iostream>\nusing namespace std;\n\nclass S{\npublic:\nvoid f();\nprivate:\nint a;\n};\n\nint a;\n\nvoid f(){\ncout << \"qwq\\n\";\n}\n\nvoid S::f(){ // \u8fd9\u91cc\u6b63\u5728\u5b9a\u4e49\u4e00\u4e2a\u5c5e\u4e8e\u7c7bS\u7684\u7684\u51fd\u6570\n++a;     // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u7c7bS\u7684\u6210\u5458\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\n::f();   // \u8fd9\u91cc\u8c03\u7528\u4e86\u4e00\u4e2a\u5168\u5c40\u4e0b\u7684\u81ea\u7531\u51fd\u6570\n++::a;   // \u8fd9\u91cc\u5bf9\u4e00\u4e2a\u5168\u5c40\u53d8\u91cfa\u8fdb\u884c\u4e86\u81ea\u589e\u64cd\u4f5c\ncout << a << \" \" << ::a << \"\\n\";\n}\n\nint main(){\nS k;\nk.f(); }\n
    "},{"location":"tech_accu/language/cpp/Part0/#3x-\u51fd\u6570\u7684\u91cd\u8f7doverload","title":"[3.x] \u51fd\u6570\u7684\u91cd\u8f7dOverload","text":"

    \u53ef\u4ee5\u5b58\u5728\u51fd\u6570\u540d\u76f8\u540c\u4f46\u662f\u53c2\u6570\u8868\u4e0d\u540c\u7684\u591a\u4e2a\u51fd\u6570\uff0c\u5373\u51fd\u6570\u7684\u91cd\u8f7d\u3002

    \u7c7b\u4f3cGolang\u7684interface\uff0c\u53c2\u6570\u8868\u5b8c\u5168\u7b26\u5408\u54ea\u4e2a\u5c31\u6267\u884c\u54ea\u4e2a(\u51fa\u73b0\u6b67\u4e49\u65f6\u4f1a\u629b\u51fa\u9519\u8bef)

    int k(int x){ return x; }\n\nchar k(long x){ return 'a'; }\n\nint main(){\ncout << k(1L);   // \u8f93\u51fa\uff1aa\ncout << k(1);    // \u8f93\u51fa\uff1a1\n}\n
    "},{"location":"tech_accu/language/cpp/Part0/#4x-\u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570default-argument","title":"[4.x] \u51fd\u6570\u7684\u9ed8\u8ba4\u53c2\u6570Default Argument","text":"

    \u5f62\u5f0f\uff1avoid fun(int a = 0);

    // \u5408\u6cd5\nvoid fun(int x,int y);\n\nvoid fun(int x = 1,int y = 2){\n// ...\n}\n
    // \u975e\u6cd5\uff0c\u56e0\u4e3ax\u4e0d\u80fd\u5728y\u524d\nvoid fun(int x = 1,int y); void fun(int x,int y = 2){\n// ...\n}\n
    // \u5408\u6cd5\nvoid fun(int x = 1,int y = 2);\n\nvoid fun(int x,int y){\n// ...\n}\n
    "},{"location":"tech_accu/language/cpp/Part0/#5x-\u5185\u8054\u51fd\u6570inline","title":"[5.x] \u5185\u8054\u51fd\u6570inline","text":"

    \u4e3b\u8981\u4f5c\u7528\u662f\u5728\u51fd\u6570\u4f18\u5316\u4e0a\uff0c\u6548\u679c\u662f\u727a\u7272\u7a7a\u95f4\u6362\u6548\u7387\uff0c\u9002\u7528\u4e8e\u77ed\u5c0f\u4e14\u9891\u7e41\u4f7f\u7528\u7684\u51fd\u6570\u4ee3\u7801

    \u5b9e\u73b0\u5c31\u662f\u7f16\u8bd1\u5668\u628a\u51fd\u6570\u5185\u5bb9\u8d34\u5230\u8c03\u7528\u51fd\u6570\u7684\u5730\u65b9\u6765\u51cf\u5c11\u6808\u6d88\u8017

    "},{"location":"tech_accu/language/cpp/Part0/#6x-const","title":"[6.x] const","text":"

    const\u5bf9\u6570\u636e\u7684\u4fdd\u62a4\u51fa\u73b0\u5728\u7f16\u8bd1\u65f6\u523b\uff0c\u5982\u679c\u5f3a\u884c\u901a\u8fc7\u67d0\u79cd\u624b\u6bb5\u83b7\u53d6\u5176\u5730\u5740\uff0c\u4ecd\u7136\u53ef\u4ee5\u4fee\u6539\uff0c\u7f16\u8bd1\u5668\u4ec5\u4ec5\u4fdd\u8bc1const\u4fee\u9970\u8fc7\u7684\u53d8\u91cf\u9664\u4e86\u5b9a\u4e49\u65f6\uff0c\u4e0d\u80fd\u4f5c\u4e3a\u5de6\u503c

    "},{"location":"tech_accu/language/cpp/Part0/#7x-static","title":"[7.x] static","text":"

    \u867d\u7136\u5728\u5355\u4e2a\u6587\u4ef6\u5185\uff0c\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u58f0\u660e\u987a\u5e8f\u53ef\u4ee5\u786e\u8ba4\uff0c\u4f46\u6587\u4ef6\u95f4\u7684\u987a\u5e8f\u65e0\u6cd5\u786e\u8ba4\uff0c\u8fd9\u53ef\u80fd\u9020\u6210\u4f9d\u8d56\u95ee\u9898\uff0c\u6240\u4ee5\u5c3d\u53ef\u80fd\u907f\u514d\u591a\u6587\u4ef6\u9759\u6001\u5168\u5c40\u53d8\u91cf\u7684\u4f9d\u8d56\u5173\u7cfb

    "},{"location":"tech_accu/language/cpp/Part0/#8x-\u547d\u540d\u7a7a\u95f4namespace--using\u5173\u952e\u5b57","title":"[8.x] \u547d\u540d\u7a7a\u95f4namespace & using\u5173\u952e\u5b57","text":"

    \u53ef\u4ee5\u7528namespace\u6765\u5c01\u88c5\u4ee3\u7801

    namespace <Space Name>{\n// \u5185\u5bb9\n} 

    \u5728\u4e4b\u540e\u4f7f\u7528\u91cc\u9762\u7684\u53d8\u91cf/\u51fd\u6570\u9700\u8981\u4f7f\u7528\u8303\u56f4\u89e3\u6790\u8fd0\u7b97\u7b26::\uff0c\u5373<Space Name>::<Function Name>();

    "},{"location":"tech_accu/language/cpp/Part0/#9x-\u5de6\u503c\u4e0e\u53f3\u503c\u53f3\u503c\u5f15\u7528","title":"[9.x] \u5de6\u503c\u4e0e\u53f3\u503c&\u53f3\u503c\u5f15\u7528","text":""},{"location":"tech_accu/standard/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/standard/BVH_format/","title":"BVH \u683c\u5f0f\u8be6\u89e3","text":"

    \u7ea6 1312 \u4e2a\u5b57 116 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 8 \u5206\u949f

    "},{"location":"tech_accu/standard/BVH_format/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

    BVH \u8868\u793a Biovision Hierarchy Data\uff0c\u662f Biovision \u52a8\u6355\u8bbe\u5907\u7684\u6570\u636e\u8f93\u51fa\u683c\u5f0f\uff0c\u662f BVA \u683c\u5f0f\u7684\u6539\u8fdb\uff0c\u5e7f\u6cdb\u5e94\u7528\u4e8e\u52a8\u753b\u5236\u4f5c\u8f6f\u4ef6\u3002\u800c\u8be5\u683c\u5f0f\u4ee5\u6587\u672c\u5f62\u5f0f\u50a8\u5b58\uff0c\u6240\u4ee5\u4fbf\u4e8e\u5f00\u53d1\u3002 \u4ece\u9700\u6c42\u7684\u89d2\u5ea6\u6765\u8bb2\uff0c\u4e3a\u4e86\u4f18\u96c5\u5730\u89e3\u51b3\u52a8\u753b\u5236\u4f5c\u95ee\u9898\uff0c\u5b83\u88ab\u5206\u4e3a\u4e86\u201c\u8499\u76ae\u201d\u548c\u201c\u9aa8\u9abc\u201d\u4e24\u4e2a\u90e8\u5206\u3002\u800c BVH \u5c31\u8d1f\u8d23\u5b58\u50a8 \u9aa8\u9abc\u67b6\u7ed3\u6784 \u548c \u52a8\u4f5c\u4fe1\u606f\u3002 BVH \u683c\u5f0f\u603b\u4f53\u6765\u8bf4\u6bd4\u8f83\u4f18\u79c0\uff0c\u4f46\u662f\u7f3a\u4e4f\u5bf9\u8fd0\u52a8\u65f6\u7684\u9aa8\u67b6\u59ff\u52bf\u7684\u5b8c\u6574\u89e3\u91ca\u3002\u56e0\u4e3a BVH \u662f\u901a\u8fc7 \u504f\u79fb(Offset) \u6765\u63cf\u8ff0\u8fd0\u52a8\u7684\uff0c\u5373\u4fdd\u5b58\u7684\u662f\u6bcf\u4e00\u5e27\u5173\u952e\u8282\u70b9\u5bf9\u4e8e\u7236\u8282\u70b9\u7684\u76f8\u5bf9\u4f4d\u79fb\u3002

    "},{"location":"tech_accu/standard/BVH_format/#\u6587\u4ef6\u89e3\u6790","title":"\u6587\u4ef6\u89e3\u6790","text":"

    A BVH file has two parts, a header section which describes the hierarchy and initial pose of the skeleton; and a data section which contains the motion data.

    BVH \u6587\u4ef6\u6570\u636e\u5206\u4e3a\u4e24\u4e2a\u90e8\u5206\uff1a

    \u5e76\u4e14\u4ee5\u9012\u5f52\u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002 \u4e0b\u9762\u7ed9\u51fa\u4e00\u4e2a\u793a\u4f8b\u6587\u4ef6\uff0c\u7136\u540e\u505a\u8fdb\u4e00\u6b65\u5206\u6790\u3002

    Summary
    HIERARCHY\nROOT Hips\n{\nOFFSET  0.00    0.00    0.00\nCHANNELS 6 Xposition Yposition Zposition Zrotation Xrotation Yrotation\nJOINT Chest\n{\nOFFSET   0.00    5.21    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Neck\n{\nOFFSET   0.00    18.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT Head\n{\nOFFSET   0.00    5.45    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00    3.87    0.00\n}\n}\n}\nJOINT LeftCollar\n{\nOFFSET   1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftUpArm\n{\nOFFSET   5.54    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowArm\n{\nOFFSET   0.00   -11.96   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftHand\n{\nOFFSET   0.00   -9.93    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\nJOINT RightCollar\n{\nOFFSET  -1.12    16.23   1.87\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightUpArm\n{\nOFFSET  -6.07    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowArm\n{\nOFFSET   0.00   -11.82   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightHand\n{\nOFFSET   0.00   -10.65   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -7.00    0.00\n}\n}\n}\n}\n}\n}\nJOINT LeftUpLeg\n{\nOFFSET   3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftLowLeg\n{\nOFFSET   0.00   -18.34   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT LeftFoot\n{\nOFFSET   0.00   -17.37   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.46    0.00\n}\n}\n}\n}\nJOINT RightUpLeg\n{\nOFFSET  -3.91    0.00    0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightLowLeg\n{\nOFFSET   0.00   -17.63   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nJOINT RightFoot\n{\nOFFSET   0.00   -17.14   0.00\nCHANNELS 3 Zrotation Xrotation Yrotation\nEnd Site {\nOFFSET   0.00   -3.75    0.00\n}\n}\n}\n}\n}\nMOTION\nFrames:    2\nFrame Time: 0.033333\n8.03     35.01   88.36  -3.41    14.78  -164.35  13.09   40.30  -24.60   7.88    43.80   0.00   -3.61   -41.45   5.82    10.08   0.00    10.21   97.95  -23.53  -2.14   -101.86 -80.77  -98.91   0.69    0.03    0.00   -14.04   0.00   -10.50  -85.52  -13.72  -102.93  61.91  -61.18   65.18  -1.57    0.69    0.02    15.00   22.78  -5.92    14.93   49.99   6.60    0.00   -1.14    0.00   -16.58  -10.51  -3.11    15.38   52.66  -21.80   0.00   -23.95   0.00   7.81     35.10   86.47  -3.78    12.94  -166.97  12.64   42.57  -22.34   7.67    43.61   0.00   -4.23   -41.41   4.89    19.10   0.00    4.16    93.12  -9.69   -9.43    132.67 -81.86   136.80  0.70    0.37    0.00   -8.62    0.00   -21.82  -87.31  -27.57  -100.09  56.17  -61.56   58.72  -1.63    0.95    0.03    13.16   15.44  -3.56    7.97    59.29   4.97    0.00    1.64    0.00   -17.18  -10.02  -3.08    13.56   53.38  -18.07   0.00   -25.93   0.00   

    \u8be5\u6837\u4f8b\u7ed9\u51fa\u4e86\u8fd9\u6837\u4e00\u4e2a\u9aa8\u67b6\uff1a

    \\[ vR = vYXZ\\\\ vM= vM_{child}M_{parent}M_{grandparent}... \\]"},{"location":"tech_accu/standard/BVH_format/#header-section","title":"header section","text":"

    HIERARCHY\u5173\u952e\u5b57\u6807\u8bc6header section\u7684\u5f00\u59cb\uff0c\u968f\u540e\u5728\u4e0b\u4e00\u884c\u5b9a\u4e49\u4e86\u6839\u8282\u70b9ROOT\uff0c\u800cHips\u5219\u662f\u8be5\u8282\u70b9\u7684\u540d\u79f0\u3002\u89c2\u5bdf\u4e0a\u65b9\u7ed9\u51fa\u7684\u9aa8\u67b6\u793a\u610f\u56fe\uff0cHips\u8282\u70b9\u4f5c\u4e3a\u6574\u4e2a\u9aa8\u67b6\u7684\u6839\u8282\u70b9\uff0c\u4fdd\u8bc1\u4e86\u6574\u4e2a\u6811\u5f62\u56fe\u7684\u6700\u5927\u6df1\u5ea6\u76f8\u5bf9\u8f83\u5c0f\uff0c\u51cf\u5c0f\u8bef\u5dee\u3002

    \u5176\u540e\u7ed9\u51fa\u4e86OFFSET\u548cCHANNELS\u4e24\u4e2a\u5c5e\u6027\u3002

    \u800c\u5728\u5176\u540e\uff0c\u4ee5JOINT\u4e3a\u5173\u952e\u5b57\u53c8\u8868\u793a\u4e86\u5176\u5b50\u8282\u70b9\u7684\u5b9a\u4e49\uff0c\u5373\u4ee5 \u9012\u5f52 \u7684\u5f62\u5f0f\u7ed9\u51fa\u5b9a\u4e49\u3002

    \u53ef\u4ee5\u8fd9\u4e48\u7406\u89e3\uff1a

    \u800c\u5728\u9012\u5f52\u5b9a\u4e49\u7684\u672b\u7aef\uff0c\u4f60\u4f1a\u53d1\u73b0\u4e00\u4e2aEnd Site\uff0c\u5b83\u53ea\u6709OFFSET\u5c5e\u6027\u800c\u6ca1\u6709CHANNELS\u5c5e\u6027\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    One last note about the BVH hierarchy, the world space is defined as a right handed coordinate system with the Y axis as the world up vector. Thus you will typically find that BVH skeletal segments are aligned along the Y or negative Y axis (since the characters are often have a zero pose where the character stands straight up with the arms straight down to the side).

    \u5373\u4e16\u754c\u5750\u6807\u7cfb\u4e00\u822c\u662f\u4e00\u4e2a\\(y\\)\u8f74\u671d\u4e0a\u7684\u53f3\u624b\u7cfb\uff0c\u5e76\u4e14\u9aa8\u67b6\u7684\u521d\u59cb\u59ff\u52bf\u603b\u662f T-Pose \uff0c\u5373\u4eba\u6253\u5f00\u53cc\u624b\uff0c\u50cf\u5b57\u6bcdT\u4e00\u6837\u7ad9\u5728\u5730\u4e0a\u3002

    "},{"location":"tech_accu/standard/BVH_format/#data-section","title":"data section","text":"

    MOTION\u5173\u952e\u5b57\u6807\u8bc6data section\u7684\u5f00\u59cb\uff0c\u4e4b\u540e\u4e24\u884c\u5206\u522b\u662fFrames\u548cFrame Time\uff0c\u8868\u793a \u5e27\u6570 \u548c \u5e27\u6570\u957f\u5ea6\uff08\u5373\u5e27\u7387\u5012\u6570\uff0c0.033333\u5c31\u662f30\u5e27\uff09\u3002 \u800c\u518d\u4e4b\u540e\uff0c\u5219\u662f\u771f\u6b63\u7684\u52a8\u753b\u6570\u636e\uff0c\u6839\u636eheader section\u7ed9\u51fa\u7684\u901a\u9053\u5b9a\u4e49\u4f9d\u6b21\u6765\u7ed9\u51fa\u6bcf\u4e00\u5e27\u7684\u76f8\u5bf9\u53d8\u5316\u6570\u636e\u3002

    "},{"location":"tech_accu/standard/BVH_format/#\u7406\u89e3","title":"\u7406\u89e3","text":"

    \u6839\u636e\u6211\u7684\u4e2a\u4eba\u7406\u89e3\uff0cheader section\u7c7b\u4f3c\u4e8e\u5c06\u4e00\u6839\u6839\u68d2\u710a\u63a5\u5728\u80fd\u591f\u81ea\u7531\u65cb\u8f6c\u7684\u8282\u70b9\u4e0a\uff0c\u5e76\u89c4\u5b9a\u6570\u636e\u7684\u7ec4\u7ec7\u987a\u5e8f\uff0c\u5373\u89e3\u51b3\u4e86\u9aa8\u67b6\u201c\u957f\u4ec0\u4e48\u6837\u201d\u7684\u95ee\u9898\uff0c\u5e76\u6307\u5bfc\u5982\u4f55\u63cf\u8ff0\u9aa8\u67b6\u201c\u600e\u4e48\u52a8\u201d\uff1b \u800cdata section\u5219\u7c7b\u4f3c\u4e8e\u6309\u7167header section\u7ed9\u51fa\u7684\u5b9a\u4e49\uff0c\u5177\u4f53\u8be5\u5982\u4f55\u6539\u53d8\u5404\u4e2a\u8282\u70b9\u7684\u72b6\u6001\u3002 \u9664\u4e86\u53d1\u9001\u7ed9ROOT\u7684\u4f4d\u7f6e\u5750\u6807\u6765\u8868\u793a\u9aa8\u67b6\u7684\u4f4d\u79fb\uff08\u5e73\u79fb\u77e9\u9635\uff09\uff0c\u4e4b\u540e\u7684\u4e00\u7cfb\u5217\u6570\u636e\u90fd\u8868\u793a\u8be5\u8282\u70b9\u8be5\u5982\u4f55\u65cb\u8f6c\uff08\u65cb\u8f6c\u77e9\u9635\uff09\uff0c\u90a3\u4e48\u7406\u6240\u5f53\u7136\u7684\uff0c\u8fd9\u4e2a\u8282\u70b9\u7684\u6240\u6709\u5b50\u8282\u70b9\u90fd\u4f1a\u4ee5\u8fd9\u4e2a\u8282\u70b9\u4e3a\u4e2d\u5fc3\u8fdb\u884c\u76f8\u5e94\u7684\u65cb\u8f6c\uff1b\u6bcf\u6b21\u9012\u5f52\u90fd\u91cd\u590d\u8fd9\u6837\u7684\u64cd\u4f5c\uff0c\u6700\u7ec8\u6307\u6325\u6574\u4e2a\u9aa8\u67b6\u7684\u53d8\u6362\u3002 \u90a3\u4e48\uff0c\u5b9e\u9645\u4e0a\uff0c\u6bcf\u4e00\u4e2a\u8282\u70b9\u76f8\u5bf9\u4e8e\u6839\u8282\u70b9\u7684\u53d8\u5316\u5c31\u53ef\u4ee5\u901a\u8fc7\u8fd9\u4e9b\u53d8\u6362\u77e9\u9635\u6309\u7167\u987a\u5e8f\u7d2f\u4e58\u5f97\u5230\u3002

    "},{"location":"tech_accu/standard/BVH_format/#\u53c2\u8003\u8d44\u6599","title":"\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/","title":"\u6249\u9875","text":"

    \u7ea6 15 \u4e2a\u5b57

    \u300e\u305d\u306e\u6642\u3092\u5f85\u3064\u3088\u300f \u9761\u4e0d\u6709\u521d\uff0c\u9c9c\u514b\u6709\u7ec8\u3002 \u2014\u2014\u300a\u8bd7\u7ecf\u300b

    "},{"location":"tech_accu/tool/Colab/","title":"Google Colaboratory","text":"

    \u7ea6 477 \u4e2a\u5b57 6 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 2 \u5206\u949f

    \u7b80\u4ecb

    Google Colab \u662f\u4e00\u4e2a\u5141\u8bb8\u7f16\u5199\u548c\u6267\u884c\u4ee3\u7801\u7684\u4ea4\u4e92\u5f0f\u73af\u5883\uff0c\u4ee5\u4e0b\u662f\u5206\u522b\u4e3a Colab \u7684\u7f51\u5740\u4ee5\u53ca\u5b98\u65b9 Q&A\u3002

    \u5bf9\u6211\u6765\u8bf4\uff0cGolab \u4e3a\u6211\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6bd4\u8f83\u65b9\u4fbf\u4e14\u6709\u4e00\u5b9a\u7b97\u529b\u7684\u5728\u7ebf\u5e73\u53f0\uff0c\u800c\u4e14\u6211\u89c9\u5f97\u4f5c\u4e3a\u7b14\u8bb0\u672c\u8c8c\u4f3c\u4e5f\u633a\u597d\u7528\u7684\u3002

    \u7b80\u5355\u6765\u8bf4\uff0cColab \u4e2d\u5b58\u5728 \u6587\u672c\u5355\u5143 \u548c \u4ee3\u7801\u5355\u5143 \u8fd9\u4e24\u79cd\u6a21\u5757\u3002

    \u4ece\u7528\u9014\u4e0a\u6765\u8bb2\uff0cColab \u5728\u6570\u636e\u79d1\u5b66\u548c\u673a\u5668\u5b66\u4e60\u8fd9\u4e24\u65b9\u9762\u6709\u8f83\u5927\u7528\u5904\u3002

    "},{"location":"tech_accu/tool/Colab/#\u6587\u4ef6\u4e92\u52a8","title":"\u6587\u4ef6\u4e92\u52a8","text":"

    Colab \u81ea\u5e26\u6587\u4ef6\u6d4f\u89c8\u754c\u9762

    \u901a\u8fc7\u8fd9\u4e09\u4e2a\u6309\u94ae\u53ef\u4ee5\u5b9e\u73b0 \u4e0a\u4f20\u6587\u4ef6\u3001\u5237\u65b0\u3001\u88c5\u8f7d Google \u4e91\u76d8\uff1a

    "},{"location":"tech_accu/tool/Colab/#\u786c\u4ef6\u52a0\u901f","title":"\u786c\u4ef6\u52a0\u901f","text":"

    \u5173\u4e8eGPU\u52a0\u901f\u7684\u5177\u4f53\u4fe1\u606f\uff0c\u8bf7\u67e5\u770b\u8fd9\u91cc \ud83d\udd17\u3002

    "},{"location":"tech_accu/tool/Colab/#\u8d44\u6e90\u9650\u5236","title":"\u8d44\u6e90\u9650\u5236","text":""},{"location":"tech_accu/tool/Colab/#\u5947\u6280\u6deb\u5de7","title":"\u5947\u6280\u6deb\u5de7","text":""},{"location":"tech_accu/tool/Colab/#\u5360\u7528\u663e\u5b58","title":"\u5360\u7528\u663e\u5b58","text":"

    \u5f53\u4f60\u7684\u6574\u4e2a\u9879\u76ee\u9700\u8981GPU\u4f46\u662f\u73b0\u5728\u4e0d\u592a\u9700\u8981\u7684\u65f6\u5019\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e0b\u9762\u8fd9\u6837\u4e00\u6bb5\u4ee3\u7801\u6765\u5148\u5360\u7528\u4e00\u90e8\u5206\u663e\u5b58\u3002

    import torch\n## about 1.1 GB\na = torch.Tensor([1000, 1000, 1000]).cuda()\n
    "},{"location":"tech_accu/tool/Colab/#\u67e5\u770b\u663e\u5361\u4fe1\u606f","title":"\u67e5\u770b\u663e\u5361\u4fe1\u606f","text":"
    !nvidia-smi\n
    "},{"location":"tech_accu/tool/Colab/#\u6302\u8f7d-google-drive","title":"\u6302\u8f7d Google Drive","text":"
    from google.colab import drive\ndrive.mount('/content/drive/')\n
    "},{"location":"tech_accu/tool/Colab/#\u53ef\u53c2\u8003\u8d44\u6599","title":"\u53ef\u53c2\u8003\u8d44\u6599","text":""},{"location":"tech_accu/tool/Colab/#\u5176\u4ed6\u8d44\u6599","title":"\u5176\u4ed6\u8d44\u6599","text":""},{"location":"tech_accu/tool/Git/","title":"Git","text":"

    \u7ea6 67 \u4e2a\u5b57

    Git \u662f\u4ee3\u7801\u534f\u4f5c\u7684\u91cd\u8981\u5de5\u5177\uff0c\u540c\u65f6\u4e5f\u5bf9\u4e2a\u4eba\u4ee3\u7801\u7684\u7248\u672c\u7ba1\u7406\u6709\u91cd\u8981\u4f5c\u7528\uff0c\u56e0\u6b64\u53ef\u4ee5\u8bf4 Git \u662f\u7834\u5199\u4ee3\u7801\u7684\u4eba\u7684\u5fc5\u5907\u6280\u80fd\u4e4b\u4e00\u3002

    List

    "},{"location":"tech_accu/tool/Git/Commands/","title":"Git Commands","text":"

    \u7ea6 1464 \u4e2a\u5b57 110 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 9 \u5206\u949f

    \u7b80\u4ecb

    \u672c\u6587\u5185\u5bb9\u57fa\u4e8e\u6211\u81ea\u5df1\u7684\u7406\u89e3\u548c\u4e00\u4e9b\u6587\u7ae0\uff0c\u662f\u5b66\u4e60\u7b14\u8bb0\uff0c\u4f46\u540c\u65f6\u6211\u4e5f\u5e0c\u671b\u5b83\u80fd\u88ab\u4f5c\u4e3a\u4e00\u4e2a\u5b66\u4e60\u53c2\u8003\u8d44\u6599\u3002

    \u6240\u4ee5\u5982\u679c\u6709\u9519\u8bef\u8bf7\u53ca\u65f6\u8bc4\u8bba\u6216\u8005\u8054\u7cfb\u6211\uff0c\u5e0c\u671b\u80fd\u4e3a\u5927\u5bb6\u63d0\u4f9b\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u5b66\u4e60\u53c2\u8003\uff01

    \u56e0\u4e3a\u6211\u81ea\u5df1\u7684\u5f00\u53d1\u7ecf\u5386\u6709\u9650\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u81ea\u5df1\u7684\u7406\u89e3\u662f\u5408\u9002\u4e14\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u5e0c\u671b\u5927\u5bb6\u72e0\u72e0\u5730 educate \u6211\uff01

    \u672c\u6761\u76ee\u5c06\u628a\u76ee\u5149\u653e\u5728\u5177\u4f53\u7684git \u547d\u4ee4 \u7684\u4ecb\u7ecd\u4e0e\u4f7f\u7528\uff0c\u65e8\u5728\u6307\u5bfc\u8fdb\u884c\u5177\u4f53\u7684\u5de5\u4f5c\u3002

    Git \u6709\u8bb8\u591a\u547d\u4ee4\uff0c\u4f46\u662f\u5176\u5b9e\u5e38\u7528\u7684\u5c31\u56fe\u4e2d\u7684\u8fd9\u4e48\u51e0\u4e2a\uff0c\u751a\u81f3\u5728 \u521a\u5f00\u59cb \u5b66\u4e60\u4f7f\u7528\u7684\u65f6\u5019\u53ea\u9700\u8981\u8bb0\u4f4f\u5176\u4e2d\u7684\u4e00\u4e24\u4e2a\uff0c\u4f46\u662f

    \u8fd9\u5e76\u4e0d\u662f\u8bf4\u5176\u4ed6\u547d\u4ee4\u5c31\u662f\u6ca1\u7528\u7684\uff0c\u6211\u4f1a\u5728\u8fd9\u91cc\u6309\u7167\u4f7f\u7528\u573a\u666f\u5206\u7c7b\uff0c\u5c3d\u53ef\u80fd\u5730\u4ecb\u7ecd Git \u547d\u4ee4\u3002

    \u5e38\u7528\u547d\u4ee4

    \u7531\u4e8e\u4e00\u822c\u6765\u8bf4\u8fd0\u884c\u547d\u4ee4\u90fd\u662f\u4ee5\u672c\u5730\u89c6\u89d2\uff0c\u6240\u4ee5\u8fd9\u91cc\u7684\u300c\u4f7f\u7528\u573a\u666f\u300d\u7684\u5212\u5206\u4e5f\u662f\u4ee5\u672c\u5730\u89c6\u89d2\u5c55\u5f00\u7684\u3002 \u5e76\u4e14\u5728\u67d0\u4e9b\u9700\u8981\u6d89\u53ca\u8fdc\u7a0b\u4ed3\u5e93\u7684\u5730\u65b9\u4e3b\u8981\u4ee5 Github \u7684\u4f7f\u7528\u4e3a\u53c2\u8003\u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u7b80\u6d01\u7248\u672c","title":"\u7b80\u6d01\u7248\u672c","text":"

    \u8be5\u6761\u76ee\u4e3b\u8981\u9002\u7528\u4e8e\u521d\u5b66\u4e0e\u7b80\u5355\u4f7f\u7528 Git \uff0c\u5e76\u4e0d\u9002\u5408\u957f\u671f\u7ef4\u62a4\u7684\u5927\u578b\u9879\u76ee\u3002

    \u5feb\u9910
    # \u5728 Github \u521b\u5efa\u4ed3\u5e93\n# \u83b7\u53d6\u4ed3\u5e93\u7684 http / SSH clone \u547d\u4ee4\n\n# \u4ece\u8fdc\u7a0b\u5c06\u4ed3\u5e93\u514b\u9686\u5230\u672c\u5730\ngit clone <repo-url>\n\n# \u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u540e\u5c06\u4fee\u6539\u6dfb\u52a0\u5230\u6682\u5b58\u533a\ngit add -A # \u6dfb\u52a0\u6240\u6709\u4fee\u6539\ngit add .  # \u6dfb\u52a0\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u4fee\u6539\n\n# \u63d0\u4ea4\u4fee\u6539\ngit commit -m \"Write commit message here.\"\n\n# push \u5230\u8fdc\u7a0b\u4ed3\u5e93\ngit push origin\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u914d\u7f6e","title":"\u914d\u7f6e","text":"

    Git \u7684\u914d\u7f6e\u6587\u4ef6\u540d\u53eb .gitconfig\uff0c\u7528\u6765\u5b58\u653e\u4e00\u4e9b\u914d\u7f6e\u4fe1\u606f\uff0c\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u7684\u4e3a\u5168\u5c40\u914d\u7f6e\u4fe1\u606f\uff0c\u800c\u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u7684\u5219\u4e3a\u9879\u76ee\u914d\u7f6e\u4fe1\u606f\u3002

    # \u663e\u793a\u914d\u7f6e\ngit config --list\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u751f\u6210\u672c\u5730\u4ed3\u5e93","title":"\u751f\u6210\u672c\u5730\u4ed3\u5e93","text":"

    \u672c\u5730\u751f\u6210\u4ed3\u5e93\u4e3b\u8981\u6709\u4e24\u79cd\u9014\u5f84\uff0c\u4e00\u662f\u5728\u672c\u5730\u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\uff0c\u800c\u662f\u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\u3002

    # \u5728\u5f53\u524d\u76ee\u5f55 . \u65b0\u5efa\u4e00\u4e2a\u4ed3\u5e93\ngit init\n\n# \u521b\u5efa\u4e00\u4e2a\u540d\u4e3a <dir-name> \u7684\u76ee\u5f55\uff0c\u5c06\u5176\u521d\u59cb\u5316\u4e3a\u4e00\u4e2a Git \u4ed3\u5e93\ngit init <dir-name>\n\n# \u4ece <repo-url> \u514b\u9686\u4e00\u4e2a\u8fdc\u7a0b\u4ed3\u5e93\uff08\u5305\u62ec\u6240\u6709\u7684 git \u4fe1\u606f\uff09\ngit clone <repo-url>\n

    \u4ece\u6587\u4ef6\u89d2\u5ea6\u6765\u8bb2\uff0c\u5b9e\u9645\u4e0a\u5b83\u662f\u751f\u6210\u4e86\u4e00\u4e2a\u6709.git\u6587\u4ef6\u5939\u7684\u6587\u4ef6\u5939\uff0c\u800c.git\u6587\u4ef6\u5939\u5b58\u50a8\u4e86 Git \u6240\u9700\u8981\u7684\u5927\u90e8\u5206\u4fe1\u606f\u3002 \u4f7f\u7528\u5e38\u89c1\u7684 shell \u8fdb\u5165\u4ed3\u5e93\u6587\u4ef6\u5939\u540e\uff0c\u4e00\u822c\u4f1a\u6709\u4e00\u4e2a label \u8868\u793a\u4f60\u5df2\u7ecf\u8fdb\u5165\u4e86\u4e00\u4e2a\u4ed3\u5e93\u7684\u67d0\u4e2a\u5206\u652f\u4e86\u3002\u6bd4\u5982\u8fdb\u5165\u4e00\u4e2a\u65b0\u7684\u4ed3\u5e93\u65f6\uff0c\u4f1a\u6709\u4e00\u4e2amaster\u7684 label \uff0c\u5177\u4f53\u8868\u73b0\u5f62\u5f0f\u4e3b\u8981\u770b\u4f60\u7684 shell \u548c\u4e3b\u9898\u4e86\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u672c\u5730\u76f4\u63a5\u521b\u5efa\u7684\u4ed3\u5e93\u4ec5\u4ec5\u53ea\u662f\u4e00\u4e2a\u672c\u5730\u4ed3\u5e93\uff0c\u4e0d\u5177\u5907\u8fdc\u7a0b\u534f\u4f5c\u529f\u80fd\uff0c\u9700\u8981\u8fdb\u884c\u5bf9\u5e94\u7684\u914d\u7f6e\uff0c\u53c2\u8003 \"Git Workflow\" \u6761\u76ee\uff1b\u800c\u4e00\u822c\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u514b\u9686\u4e0b\u6765\u7684\u4ed3\u5e93\u90fd\u5df2\u7ecf\u7ecf\u8fc7\u8bbe\u7f6e\uff0c\u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u8fdc\u7a0b\u534f\u4f5c\u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u7248\u672c\u7ba1\u7406","title":"\u7248\u672c\u7ba1\u7406","text":"

    Git \u57fa\u4e8e\u7248\u672c\u4e4b\u95f4\u7684\u5dee\u5f02\u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\uff0c\u4f7f\u7528 Git \u8fdb\u884c\u4ee3\u7801\u7ba1\u7406\u4e3b\u8981\u6307\u5728\u505a\u5b8c\u7279\u5b9a\u4fee\u6539\u4ee5\u540e\u5c06\u5176\u6dfb\u52a0\u5230\u5bf9\u5e94\u5206\u652f\u4e2d\u3002 \u5728\u8003\u8651 Git \u64cd\u4f5c\u4e4b\u524d\uff0c\u4f60\u53ef\u4ee5\u653e\u5fc3\u5730\u8fdb\u884c\u4f60\u7684\u4ee3\u7801\u7f16\u8f91\u5de5\u4f5c\uff0c\u4e0d\u8fc7\u8bb0\u5f97\u5728\u5408\u9002\u7684\u65f6\u673a\u8fdb\u884c\u7248\u672c\u7ba1\u7406\u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","title":"\u67e5\u770b\u5dee\u5f02\u6587\u4ef6","text":"

    \u901a\u8fc7\u5982\u4e0b\u6307\u4ee4\u53ef\u4ee5 \u67e5\u770b\u5dee\u5f02\u6587\u4ef6\uff1a

    # \u663e\u793a\u68c0\u6d4b\u5230\u5dee\u5f02\u7684\u6587\u4ef6\uff0c\u5b83\u4eec\u6b63\u5728\u7b49\u5f85\u88ab\u63d0\u4ea4\ngit status\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u6dfb\u52a0\u5230\u6682\u5b58\u533a","title":"\u6dfb\u52a0\u5230\u6682\u5b58\u533a","text":"

    \u5728\u5b8c\u6210\u4ee3\u7801\u4fee\u6539\u5de5\u4f5c\u540e\u9700\u8981\u5c06\u4ee3\u7801 \u6dfb\u52a0 \u5230\u6682\u5b58\u533a\uff1a

    # \u5c06 <target> \u4e2d\u7684\u4fee\u6539\u6dfb\u52a0\u7684\u6682\u5b58\u533a\uff0c\u6587\u4ef6\u5939\u548c\u6587\u4ef6\u540c\u7406\uff0c'.' \u540c\u7406 \ngit add <target>\n\n# \u5bf9\u4e8e\u6240\u6709\u7684\u4fee\u6539\u4f9d\u6b21\u8fdb\u884c\u6dfb\u52a0\u786e\u8ba4\uff08\u5305\u62ec\u5355\u4e00\u6587\u4ef6\u7684\u591a\u5904\u4fee\u6539\uff09\ngit add -p\n\n# \u7528\u4ea4\u4e92\u5f0f\u7684\u65b9\u6cd5\u8fdb\u884c\u6dfb\u52a0\ngit add -i\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u63d0\u4ea4\u5230\u4ed3\u5e93","title":"\u63d0\u4ea4\u5230\u4ed3\u5e93","text":"

    \u6dfb\u52a0\u5b8c\u540e\u9700\u8981\u8fdb\u884c \u63d0\u4ea4\uff0c\u5728\u4ed3\u5e93\u4e2d\u5f62\u6210\u4e00\u4e2a\u8282\u70b9\uff1a

    # \u63d0\u4ea4\u5230\u4ed3\u5e93\ngit commit -m \"Write commit message here.\"\n\n# \u4fee\u6b63\u4e0a\u4e00\u6b21\u63d0\u4ea4\uff0c\u610f\u601d\u662f\u8bf4\u4f1a\u6269\u5145\u5e76\u66ff\u4ee3\u4e0a\u4e00\u6b21\u63d0\u4ea4\n# \u5e94\u7528\u573a\u666f\u5982\uff1a\u4e0a\u4e00\u6b21\u63d0\u4ea4\u6709\u9057\u6f0f\u3001\u4e0a\u4e00\u6b21\u63d0\u4ea4\u7684\u63d0\u4ea4\u4fe1\u606f\u6709\u95ee\u9898\u7b49\ngit commit --amend -m \"Write commit message here.\"\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","title":"\u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55","text":"

    \u5b8c\u6210\u63d0\u4ea4\u540e\u8fd9\u4e00\u6b21\u4fee\u6539\u5c31\u4f1a\u88ab\u5199\u5165\u5386\u53f2\u8bb0\u5f55\u4e2d\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7log\u6765 \u67e5\u770b\uff1a

    git log\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u56de\u6eaf--\u62b5\u6d88\u8bb0\u5f55","title":"\u56de\u6eaf / \u62b5\u6d88\u8bb0\u5f55","text":"

    \u5728log\u4e2d\u53ef\u4ee5\u67e5\u8be2\u5f97\u5230\u6bcf\u4e00\u6b21commit\u7684\u54c8\u5e0c\uff0c\u5f97\u5230\u8fd9\u4e9b\u54c8\u5e0c(\u4e5f\u53ef\u4ee5\u4f7f\u7528\u6807\u7b7e)\u4ee5\u540e\u6211\u4eec\u53ef\u4ee5\u7528\u5b83\u6765\u8fdb\u884c \u56de\u6eaf \u548c \u62b5\u6d88 \u64cd\u4f5c\uff1a

    # \u56de\u6eaf\u5230\u7279\u5b9a commit \uff0c\u6bd4\u8f83\u5371\u9669\ngit reset HEAD                  # \u56de\u6eaf\u5230\u4e0a\u4e00\u4e2a commit \uff0c\u6548\u679c\u4e0a\u6e05\u7a7a\u4e86\u6682\u5b58\u533a\uff0c\u4e0d\u5f71\u54cd\u5de5\u4f5c\u533a\ngit reset --hard <commit-id>    # \u629b\u5f03\u5f53\u524d\u7684\u5de5\u4f5c\u533a\u5e76\u56de\u6eaf\u5230\u67d0\u4e2a\u7248\u672c\n\n# \u62b5\u6d88\u4e00\u6b21 commit \uff0c\u4ea7\u751f\u4e00\u4e2a\u4e0e\u76ee\u6807 commit \u4e92\u9006\u7684 commit\ngit revert HEAD                     # \u62b5\u6d88\u4e0a\u4e00\u6b21 commit\ngit revert <commit-id>              # \u62b5\u6d88\u7279\u5b9a commit\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5220\u9664--\u79fb\u52a8\u91cd\u547d\u540d","title":"\u5220\u9664 / \u79fb\u52a8(\u91cd\u547d\u540d)","text":"

    \u5220\u9664 \u6587\u4ef6\u548c \u79fb\u52a8(\u91cd\u547d\u540d) \u6587\u4ef6\u53ef\u4ee5\u4f7f\u7528rm\u548cmv\uff0c\u5173\u4e8erm(mv)\u548cgit rm(git mv)\u7684\u533a\u522b\u53ef\u4ee5\u770b\u8fd9\u91cc\u3002 \u7b80\u5355\u6765\u8bf4\u5c31\u662f\uff0cgit rm <file>\u7b49\u4ef7\u4e8erm <file> ; git add <file>\uff1bmv\u540c\u7406\uff0c\u4f46\u662f\u4f60\u65e0\u6cd5\u628a\u4e00\u4e2a\u6587\u4ef6\u901a\u8fc7git mv\u79fb\u52a8\u5230 repo dir \u4e4b\u5916\u3002

    # \u5220\u9664\u67d0\u4e2a\u6587\u4ef6\ngit rm <file>\n# \u79fb\u52a8(\u91cd\u547d\u540d)\u67d0\u4e2a\u6587\u4ef6\ngit mv <from> <to>\n\n# \u4f7f\u7528\u5982\u4e0b\u547d\u4ee4\u8fd8\u53ef\u4ee5\u505c\u6b62\u5bf9\u67d0\u4e2a\u6587\u4ef6\u7684\u8ffd\u8e2a\uff0c\u6700\u5e38\u7528\u7684\u60c5\u51b5\u4e00\u822c\u548c`.gitignore`\u6709\u5173\ngit rm --cache <file>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u6807\u7b7e\u64cd\u4f5c","title":"\u6807\u7b7e\u64cd\u4f5c","text":"

    \u4e0a\u9762\u8bb8\u591a\u6d89\u53ca\u5b9a\u4f4d\u7279\u5b9a commit \u7684\u64cd\u4f5c\u90fd\u9700\u8981\u83b7\u53d6 commit \u7684\u54c8\u5e0c\u3002\u4e0d\u8fc7\u5982\u679c\u5bf9\u67d0\u4e9b\u7279\u5b9a\u7248\u672c\u8fdb\u884c\u4e00\u4e9b\u6807\u7b7e\u7ba1\u7406\uff0c\u90a3\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u8bbf\u95ee\u6807\u7b7e\u6765\u7d22\u5f15\u7279\u5b9a commit \uff0c\u56e0\u800c\uff0ctag \u5b9e\u9645\u4e0a\u662f\u4e0d\u53ef\u91cd\u590d\u7684\u3002

    # \u4e3a\u7279\u5b9a commit \u6dfb\u52a0 tag\ngit tag <tag name> <commit id>\n\n# \u5220\u9664\u7279\u5b9a tag\ngit tag -d <tag name>\n

    \u53e6\u5916\uff0c\u9700\u8981\u63d0\u9192\u7684\u662f\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0bgit push\u4e0d\u4f1a\u5c06 tag \u4e0a\u4f20\u5230\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u9700\u8981\u5728\u547d\u4ee4\u540e\u52a0\u5165--tags\u6765\u4e00\u6b21\u6027 push \u6240\u6709\u7684 tag \u6216\u8005\u6dfb\u52a0<tag name>\u6765\u4e0a\u4f20 tag \u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u534f\u4f5c","title":"\u8fdc\u7a0b\u534f\u4f5c","text":"

    \u8fdc\u7a0b\u7ba1\u7406\u4e3b\u8981\u6307\u591a\u4eba\u9879\u76ee\u65f6\u9700\u8981\u901a\u8fc7\u8fdc\u7a0b\u4ed3\u5e93\u6765\u5b8c\u6210\u534f\u4f5c\u3002\u8fd9\u91cc\u4ee5 GitHub \u4e3a\u4f8b\u3002 \u5f53\u4f60\u5728 Github \u521b\u5efa\u4e00\u4e2a\u7a7a repo \u4ee5\u540e\uff0c\u4f1a\u6709\u8fd9\u6837\u4e00\u4e2a\u9ed8\u8ba4\u9875\u9762\uff1a

    IsshikiHugh \u662f\u6211\u7684 User ID\uff0cnothing \u662f\u6211\u7684 Repo Name

    \u6211\u4eec\u91cd\u70b9\u5173\u6ce8\u4e2d\u95f4\u4e24\u4e2a\u4ee3\u7801\u6846\uff0c\u5199\u7684\u5df2\u7ecf\u975e\u5e38\u6e05\u695a\u4e86\u3002

    create a new repository on the command line\u6307\u5bfc\u4f60\u5728\u672c\u5730\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7a7a\u4ed3\u5e93\uff0c\u5e76\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\u94fe\u63a5\uff1b

    push an existing repository from the command line\u6307\u5bfc\u4f60\u5982\u4f55\u5c06\u8fdc\u7a0b\u4ed3\u5e93\u548c\u672c\u5730\u4ed3\u5e93\u94fe\u63a5\u8d77\u6765\uff0c\u5e76 push \u3002

    "},{"location":"tech_accu/tool/Git/Commands/#\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","title":"\u8fdc\u7a0b\u4ed3\u5e93\u7ba1\u7406","text":"

    \u6765\u81ea GitHub \u7684\u6307\u5bfc\u6587\u4ef6\u4e2d\u6700\u6838\u5fc3\u7684\u4e00\u6761\u6307\u4ee4\u662f\u5982\u4f55\u94fe\u63a5\u672c\u5730\u4ed3\u5e93\u4e0e\u8fdc\u7a0b\u4ed3\u5e93\uff1a

    # \u5728\u672c\u5730\u6dfb\u52a0\u8fdc\u7a0b\u4ed3\u5e93\uff0c\u547d\u540d\u4e3a <remote name> \uff0c\u6ce8\u610f\u8fd9\u91cc\u7684 <url> \u5e76\u4e0d\u662f\u6d4f\u89c8\u5668\u4e0a\u9762\n# \u90a3\u4e2a\uff0c\u800c\u662f\u4ece github \u590d\u5236\u8fc7\u6765\u7684 http \u6216\u8005 ssh \u63a8\u9001\ngit remote add <remote name> <url>\n# \u5e38\u7528\u7684 <remote name> \u662f origin\n
    \u9664\u6b64\u4e4b\u5916\uff0c\u5173\u4e8e\u8fdc\u7a0b\u4ed3\u5e93\u7684\u76f8\u5173\u547d\u4ee4\u8fd8\u6709\u5982\u4e0b\uff1a
    git remote -v                  # \u663e\u793a\u8fdc\u7a0b\u4ed3\u5e93(\u8be6\u7ec6\u4fe1\u606f)\ngit remote rm <remote name>    # \u89e3\u9664\u4e0e\u5bf9\u5e94\u8fdc\u7a0b\u4ed3\u5e93\u7684\u7ed1\u5b9a\u5173\u7cfb\ngit remote rename <from> <to>  # \u91cd\u547d\u540d\u7279\u5b9a\u8fdc\u7a0b\u4ed3\u5e93\n

    "},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","title":"\u672c\u5730\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u5185\u5bb9","text":"

    \u4e3b\u8981\u6709\u4e24\u79cd\u65b9\u5f0f\uff0c\u5373pull\u548cfetch\uff0c\u533a\u522b\u5728\u4e8efetch\u5e76\u4e0d\u4f1a\u5408\u5e76\u5185\u5bb9\uff0c\u800c\u4ec5\u4ec5\u662f\u4e0b\u8f7d\u8fdc\u7a0b\u4ed3\u5e93\u4e2d\u7684\u53d8\u52a8\u4fe1\u606f\u3002\u7b80\u5355\u6765\u8bf4\u5c31\u662fpull\u7b49\u6548\u4e8efetch\u5e76merge\u3002

    # \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u4e0b\u8f7d\u53d8\u52a8\u5185\u5bb9\ngit fetch <remote name>\n\n# \u4ece\u8fdc\u7a0b\u4ed3\u5e93\u62c9\u53d6\u53d8\u52a8\u5185\u5bb9\u5e76\u4e14\u5408\u5e76\u5230\u6307\u5b9a\u5206\u652f\ngit pull <remote name> <branch>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","title":"\u672c\u5730\u5411\u8fdc\u7a0b\u4ed3\u5e93\u63a8\u9001\u5185\u5bb9","text":"

    \u5728\u672c\u5730\u5b8c\u6210 commit \u64cd\u4f5c\u540e\uff0c\u5c31\u53ef\u4ee5 push \u5230\u8fdc\u7a0b\u4ed3\u5e93\uff1a

    # \u63a8\u9001 <branch> \u7684\u5185\u5bb9\u5230 <remote> \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\uff0c\u8fd9\u610f\u5473\u7740\u5728\u8fd9\u4e2a\u5206\u652f\u91cc\uff0c\n# \u4e0b\u4e00\u6b21 push \u53ea\u9700\u8981\u8f93\u5165 git push \u5373\u53ef\ngit push -u <remote> <branch>\n# eg: \u63a8\u9001 master \u5206\u652f\u7684\u5185\u5bb9\u5230 origin \uff0c\u5e76\u81ea\u52a8\u8bbe\u7f6e\u4e0a\u6e38\ngit push -u origin master\n\ngit push --force    # \u5f3a\u5236\u63a8\u9001\u5f53\u524d\u5206\u652f\uff0c\u5373\u4f7f\u6709\u51b2\u7a81\u5b58\u5728\n--all      # \u63a8\u9001\u6240\u6709\u5206\u652f\u7684\u5185\u5bb9\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u7ba1\u7406","title":"\u5206\u652f\u7ba1\u7406","text":""},{"location":"tech_accu/tool/Git/Commands/#\u67e5\u770b\u5206\u652f","title":"\u67e5\u770b\u5206\u652f","text":"
    git branch        # \u663e\u793a\u672c\u5730\u6240\u6709\u5206\u652f\n-r     # \u663e\u793a\u8fdc\u7a0b\u6240\u6709\u5206\u652f\n-a     # \u663e\u793a\u6240\u6709\u5206\u652f\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u65b0\u5efa\u5206\u652f--\u5207\u6362\u5206\u652f--\u8bbe\u7f6e\u4e0a\u6e38","title":"\u65b0\u5efa\u5206\u652f / \u5207\u6362\u5206\u652f / \u8bbe\u7f6e\u4e0a\u6e38","text":"
    # \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\uff0c\u4f46\u4e0d\u5207\u6362\ngit branch <branch name>\n# \u901a\u8fc7 checkout \u6765\u5207\u6362\u5206\u652f\uff0c\u6bd4\u5982\u8fdb\u5165\u5230\u521a\u521a\u521b\u5efa\u7684\u5206\u652f\u6c47\u603b\ngit checkout <branch>         # \u8be5\u547d\u4ee4\u4f1a\u66f4\u65b0\u5de5\u4f5c\u533a\n# \u521b\u5efa\u5b8c\u5206\u652f\u540e\u901a\u8fc7\u5982\u4e0b\u547d\u4ee4\u8bbe\u7f6e\u4e0a\u6e38\ngit branch --set-upstream <local branch> <remote branch>\n\n# \u5c06\u4e0a\u9762\u7684\u547d\u4ee4\u8fdb\u884c\u96c6\u6210\uff0c\u6709\uff1a\n\n# \u76f4\u63a5\u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <branch name> \u7684\u65b0\u5206\u652f\u5e76\u5207\u6362\ngit checkout -b <branch name>\n# \u65b0\u5efa\u4e00\u4e2a\u540d\u4e3a <local branch> \u7684\u65b0\u5206\u652f\uff0c\u5e76\u8bbe <remote branch> \u4e3a\u4e0a\u6e38\ngit branch --track <local branch> <remote branch>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5408\u5e76","title":"\u5206\u652f\u5408\u5e76","text":"
    # \u5c06\u6307\u5b9a\u5206\u652f\u5408\u5e76\u5230\u5f53\u524d\u5206\u652f\uff0c\u9700\u8981\u5904\u7406\u51b2\u7a81\u90e8\u5206\uff08\u6c9f\u901a\u534f\u5546\u3001\u624b\u52a8\u89e3\u51b3\uff09\ngit merge <branch>\n\n# \u5c06\u7279\u5b9a commit \u5408\u5e76\u8fdb\u5f53\u524d\u5206\u652f\ngit cherry-pick <commit id>\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u5206\u652f\u5220\u9664","title":"\u5206\u652f\u5220\u9664","text":"
    # \u5220\u9664\u672c\u5730\u5206\u652f\ngit branch -d <branch>\n\n# \u5220\u9664\u8fdc\u7a0b\u5206\u652f\ngit push <remote> --delete <branch>\ngit branch -dr <remote>/<branch>\n# eg:\ngit branch -dr origin/testbrach\n
    "},{"location":"tech_accu/tool/Git/Commands/#\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684--\u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","title":"\u4f60\u53ef\u80fd\u8fd8\u8981\u4e86\u89e3\u7684 / \u672c\u6587\u8fd8\u6ca1\u8bb2\u7684\u4e1c\u897f","text":""},{"location":"tech_accu/tool/Git/Commands/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Git/Workflow/","title":"Git Workflow","text":"

    \u7ea6 1267 \u4e2a\u5b57 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 6 \u5206\u949f

    \u7b80\u4ecb

    \u672c\u6587\u5185\u5bb9\u57fa\u4e8e\u6211\u81ea\u5df1\u7684\u7406\u89e3\u548c\u4e00\u4e9b\u6587\u7ae0\uff0c\u662f\u5b66\u4e60\u7b14\u8bb0\uff0c\u4f46\u540c\u65f6\u6211\u4e5f\u5e0c\u671b\u5b83\u80fd\u88ab\u4f5c\u4e3a\u4e00\u4e2a\u5b66\u4e60\u53c2\u8003\u8d44\u6599\u3002

    \u6240\u4ee5\u5982\u679c\u6709\u9519\u8bef\u8bf7\u53ca\u65f6\u8bc4\u8bba\u6216\u8005\u8054\u7cfb\u6211\uff0c\u5e0c\u671b\u80fd\u4e3a\u5927\u5bb6\u63d0\u4f9b\u4e00\u4e2a\u6bd4\u8f83\u597d\u7684\u5b66\u4e60\u53c2\u8003\uff01

    \u56e0\u4e3a\u6211\u81ea\u5df1\u7684\u5f00\u53d1\u7ecf\u5386\u6709\u9650\uff0c\u6240\u4ee5\u5e76\u4e0d\u80fd\u4fdd\u8bc1\u81ea\u5df1\u7684\u7406\u89e3\u662f\u5408\u9002\u4e14\u6b63\u786e\u7684\uff0c\u6240\u4ee5\u5e0c\u671b\u5927\u5bb6\u72e0\u72e0\u5730 educate \u6211\uff01

    \u672c\u6761\u76ee\u4e3b\u8981\u4ecb\u7ecd\u6709\u5173 Git Workflow \u7684\u6982\u5ff5\u6027\u8d28\u548c\u6307\u5bfc\u6027\u8d28\u7684\u4e00\u4e9b\u5185\u5bb9\uff0c\u5b83\u4eec\u5e76\u4e0d\u5177\u4f53\uff0c\u4f46\u662f\u4f1a\u6307\u5bfc\u60a8\u7684\u4f7f\u7528\u3002

    \u7531\u4e8e mkdocs \u5e76\u6ca1\u6709\u6807\u7b7e\u529f\u80fd\uff0c\u6240\u4ee5\u5176\u5b9e\u8fd8\u662f\u8bed\u96c0\u4e0a\u7684\u6587\u7ae0\u66f4\u597d\u770b\uff0c\u4f46\u662f\u6211\u5e76\u4e0d\u6253\u7b97\u66f4\u65b0\u8bed\u96c0\u4e86\uff0c\u6545\u8fd9\u91cc\u53ea\u653e\u4e00\u4e2a\u4ee5\u524d\u7684\u6307\u8def\u94fe\u63a5\uff1a\ud83d\udd17\u3002

    Git branch \u53ef\u89c6\u5316\u7ec3\u4e60\u7f51\u7ad9\uff1ahttps://note.isshikih.top/tech_accu/tool/Git/Workflow/

    "},{"location":"tech_accu/tool/Git/Workflow/#\u4f55\u4e3a-git-workflow","title":"\u4f55\u4e3a 'Git Workflow'","text":"

    Git Workflow \u662f\u4e00\u79cd\u89c4\u8303\u7684\u5de5\u4f5c\u6d41\u7a0b\uff0c\u800c\u5e76\u4e0d\u662f\u4e00\u4e2a\u5177\u4f53\u7684\u5de5\u5177\u6216\u8005\u6280\u672f\uff0c\u5f53\u7136\u8c8c\u4f3c\u6709\u4e00\u4e2a\u53eb\u505a Gitflow \u7684\u5de5\u5177\uff0c\u4f46\u5728\u672c\u6587\u4e2d\u6682\u65f6\u4e0d\u4ecb\u7ecd\u3002 \u73b0\u5728\u88ab\u5e7f\u6cdb\u4f7f\u7528\u7684 Workflow \u4e3b\u8981\u6709\u4e09\u79cd\uff1a

    \u4ed6\u4eec\u7684\u5173\u7cfb\u662f\uff0c\u4f9d\u6b21\u5438\u6536\u4e0e\u6539\u8fdb\uff0c\u5404\u6709\u7279\u70b9\uff0c\u4e14\u4e0e\u5bf9\u5e94\u7684\u4f7f\u7528\u5e73\u53f0\u76f8\u9002\u5e94\uff0c\u4e0b\u9762\u5c06\u5206\u6761\u6982\u8ff0\u3002 \u5728\u4e0d\u540c\u7684 Workflow \u4e2d\uff0c\u6700\u4e3b\u8981\u7684\u533a\u522b\u5c31\u662f\u4e0d\u540c\u5206\u652f\u95f4\u7684\u5408\u4f5c\u5f62\u5f0f\u548c\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u5982\u679c\u4f60\u5bf9 Git \u7684\u5206\u652f\u8fd8\u4e0d\u662f\u5f88\u719f\u6089\uff0c\u8bf7\u5148\u53c2\u8003 Git Commands \u7684\u90e8\u5206\u5185\u5bb9\uff0c\u7b80\u5355\u4e86\u89e3\u4e00\u4e0b\u57fa\u7840\u6307\u4ee4\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#git-workflow_1","title":"Git Workflow","text":"

    [Source] https://gitbook.tw/chapters/gitflow/why-need-git-flow

    Tips: \u5728\u9605\u8bfb\u63a5\u4e0b\u6765\u7684\u4e00\u4e9b\u8bf4\u660e\u65f6\uff0c\u53ef\u4ee5\u8054\u7cfb\u4e0a\u65b9\u8fd9\u5f20\u56fe\u8fdb\u884c\u7406\u89e3\u3002

    \u5728 Git Workflow \u4e2d\uff0c\u4e3b\u8981\u6709 5 \u7c7b\u5206\u652f\uff0c\u4ed6\u4eec\u5206\u522b\u662f master hotfix release develop feature\uff0c\u5b83\u4eec\u6709\u7740\u4e0d\u540c\u7684\u4f5c\u7528\u548c\u4f7f\u7528\u89c4\u8303\u3002\u5176\u4e2dmasterdevelop\u662f\u957f\u671f\u5206\u652f\uff0c\u4ed6\u4eec\u4f1a\u968f\u7740\u9879\u76ee\u7684\u7ef4\u62a4\u4e00\u76f4\u5b58\u5728\uff0c\u800chotfixreleasefeature\u8fd9\u4e9b\u77ed\u671f\u5206\u652f\u5219\u4f1a\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u88ab\u5408\u5e76\u6216\u8005\u5220\u9664\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#master-\u5206\u652f\u4e3b\u5206\u652f","title":"Master \u5206\u652f\uff08\u4e3b\u5206\u652f\uff09","text":"

    \u76f4\u63a5\u9762\u5411\u4f7f\u7528\u65b9\u7684\u5206\u652f\uff0c\u5728master\u4e2d\u5b58\u653e\u7684\u5e94\u5f53\u662f\u53ef\u4ee5\u4f7f\u7528\u7684\u7a33\u5b9a\u7248\u672c\uff0c\u56e0\u800c\u901a\u5e38\u4e5f\u4f1a\u5728\u5176\u4e2d\u6dfb\u52a0\u7248\u672c\u7f16\u53f7\u3002 \u6211\u4eec\u5e0c\u671b master \u4e2d\u7684\u4ee3\u7801\u603b\u662f\u4ece\u522b\u7684\u5206\u652f\u4e2d\u5408\u5e76\u8fc7\u6765\u7684\uff0c\u800c\u5e76\u4e0d\u5e0c\u671b\u4efb\u4f55\u4eba\u76f4\u63a5 commit \u5230 master \u4e2d\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#develop-\u5206\u652f\u5f00\u53d1\u5206\u652f","title":"Develop \u5206\u652f\uff08\u5f00\u53d1\u5206\u652f\uff09","text":"

    \u6240\u6709\u5f00\u53d1\u5de5\u4f5c\u90fd\u57fa\u4e8e\u8be5\u5206\u652f\u8fdb\u884c\uff0c\u53ef\u4ee5\u7406\u89e3\u4e3a\u9879\u76ee\u4ee3\u7801\u7684\u6c47\u6d41\u5904\uff0c\u800c master \u5219\u662f develop \u4e2d\u7279\u5b9a\u8282\u70b9\u53ef\u7528\u53d1\u884c\u3002 \u5f53\u9700\u8981\u6dfb\u52a0\u65b0\u7684\u529f\u80fd\u65f6\uff0c\u6211\u4eec\u9700\u8981\u65b0\u5efa\u4e00\u4e2a feature (\u5982\u56fe)\uff0c\u7136\u540e\u5728\u5b8c\u6210\u5bf9\u5e94\u5f00\u53d1\u540e\u5408\u5e76\u56de develop\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#hotfix-\u5206\u652f\u8865\u4e01\u5206\u652f","title":"Hotfix \u5206\u652f\uff08\u8865\u4e01\u5206\u652f\uff09","text":"

    \u5f53 master \u4e2d\u51fa\u73b0\u95ee\u9898\uff0c\u6211\u4eec\u9700\u8981\u4ee5\u51fa\u95ee\u9898\u7684\u8282\u70b9\u4e3a\u57fa\u7840\u521b\u5efa\u4e00\u4e2a hotfix\uff0c\u7136\u540e\u5728\u8fd9\u4e2a hotfix \u4e2d\u8fdb\u884c bug \u7684\u4fee\u590d\u5de5\u4f5c\u3002 \u5728\u5b8c\u6210\u4fee\u590d\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a\u8fd9\u4e2a hotfix \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop(\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8be5 bug\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#release-\u5206\u652f\u9884\u53d1\u5206\u652f","title":"Release \u5206\u652f\uff08\u9884\u53d1\u5206\u652f\uff09","text":"

    \u5f53 develop \u8db3\u591f\u6210\u719f\u65f6\uff0c\u6211\u4eec\u4f1a\u5e0c\u671b\u5b83\u88ab\u5408\u5e76\u5230 master \u4e2d\u4f5c\u4e3a\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53d1\u5e03\uff0c\u4f46\u5728\u8fd9\u4e4b\u524d\uff0c\u6211\u4eec\u9700\u8981\u5728 release \u4e2d\u8fdb\u884c\u6700\u540e\u7684\u6d4b\u8bd5\u548c\u4fee\u6b63\u3002 \u5728\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u6211\u4eec\u9700\u8981\u628a release \u540c\u65f6\u5408\u5e76\u5230 master \u548c develop (\u5982\u56fe)\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u4e0b\u4e00\u4e2a\u7a33\u5b9a\u7248\u672c\u53ef\u7528\uff0c\u4e00\u65b9\u9762\u786e\u4fdd\u672a\u6765\u7684\u7248\u672c\u4e5f\u4fee\u590d\u4e86\u8fd9\u4e9b\u95ee\u9898\u3002

    hotfix\u548crelease\u662f\u7c7b\u4f3c\u7684\uff0c\u4ed6\u4eec\u4e00\u4e2a\u662f\u57fa\u4e8emaster\u5bf9\u4e24\u4e2a\u957f\u671f\u5206\u652f\u8fdb\u884c\u7ef4\u62a4\uff0c\u4e00\u4e2a\u662f\u57fa\u4e8edevelop\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#feature-\u5206\u652f\u529f\u80fd\u5206\u652f","title":"Feature \u5206\u652f\uff08\u529f\u80fd\u5206\u652f\uff09","text":"

    \u5f53\u6211\u4eec\u9700\u8981\u5f00\u53d1\u65b0\u7684\u529f\u80fd\uff0c\u6216\u8005\u8bf4\u5bf9\u4e8e\u5927\u90e8\u5206\u5f00\u53d1\u5de5\u4f5c\uff0c\u5728\u5408\u7406\u7684\u6a21\u5757\u5212\u5206\u540e\uff0c\u5c31\u9700\u8981\u521b\u5efa\u5408\u9002\u7684 feature \u5206\u652f\u6765\u8fdb\u884c\u5bf9\u5e94\u7684\u5f00\u53d1\u5de5\u4f5c\u3002\u56e0\u4e3a feature \u5f80\u5f80\u6bd4\u8f83\u591a\uff0c\u6240\u4ee5\u8981\u6c42\u5404\u4e2afeature\u4e4b\u95f4\u8026\u5408\u7a0b\u5ea6\u4e0d\u5b9c\u8fc7\u9ad8\uff0c\u4ee5\u51cf\u5c11\u51b2\u7a81\uff0c\u8fd9\u5c31\u9700\u8981\u8fdb\u884c\u5408\u7406\u7684\u5212\u5206\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#github-workflow","title":"Github Workflow","text":"

    Github Workflow \u5bf9 Git Workflow \u8fdb\u884c\u4e86\u7b80\u5316\uff0c\u5728 Github Workflow \u4e0b\u4ec5\u4ec5\u533a\u5206 master \u548c branch\uff0c\u800c\u5177\u4f53\u529f\u80fd\u7531\u5404\u4e2a branch \u7684\u547d\u540d\u6765\u4f53\u73b0\uff0c\u5373\u8981\u6c42 branch \u7684\u547d\u540d\u5177\u6709\u53d9\u4e8b\u6027\u3002

    \u6700\u91cd\u8981\u7684\u662f\uff0c\u6ca1\u6709\u4e86 develop \u5206\u652f\u4ee5\u540e\uff0c\u957f\u671f\u7ef4\u62a4\u7684\u5c31\u53ea\u6709 master \u4e86\uff0c\u8fd9\u5c31\u610f\u5473\u7740\u53d1\u5e03\u7684\u4ee3\u7801\u4e00\u822c\u90fd\u662f\u8fdb\u5ea6\u6700\u65b0\u7684\u4ee3\u7801\u3002\u800c\u8fd9\u4ef6\u4e8b\u662f\u6709\u597d\u6709\u574f\u7684\u3002 \u57fa\u4e8e Github Workflow \u7684\u5de5\u4f5c\u6d41\u7a0b\u4e3b\u8981\u5982\u4e0b\uff1a

    1. \u521b\u5efa\u5206\u652f (create a branch or fork)\uff1b
    2. \u5728\u5206\u652f\u4e2d\u8fdb\u884c\u5f00\u53d1\u5e76\u5b8c\u6210\u63d0\u4ea4 (add commits)\uff1b
    3. \u53d1\u9001 Pull Request (open a pull request)\uff1b
    4. \u4eba\u5de5\u5ba1\u6838\u4ee3\u7801\u3001\u6c9f\u901a\u4ea4\u6d41\uff0c\u4ee5\u53ca\u5fc5\u8981\u7684\u6d4b\u8bd5 (discuss and review)\uff1b
    5. \u5408\u5e76\u8fdb master (merge)

    \u56e0\u800c\uff0c\u5728\u8fd9\u6837\u4e00\u4e2a\u5de5\u4f5c\u6d41\u7a0b\u4e0b\uff0c\u5408\u4f5c\u8005\u4e4b\u95f4\u7684\u4ea4\u6d41\u5c31\u66f4\u52a0\u91cd\u8981\u4e86\u3002

    "},{"location":"tech_accu/tool/Git/Workflow/#gitlab-workflow","title":"Gitlab Workflow","text":""},{"location":"tech_accu/tool/Git/Workflow/#\u53c2\u8003\u8d44\u6599--ref","title":"\u53c2\u8003\u8d44\u6599 | Ref","text":""},{"location":"tech_accu/tool/Shell/","title":"Shell","text":"

    \u7ea6 4930 \u4e2a\u5b57 462 \u884c\u4ee3\u7801 \u9884\u8ba1\u9605\u8bfb\u65f6\u95f4 30 \u5206\u949f

    \u6587\u7ae0\u76ee\u6807

    \u5728\u5b8c\u6210\u672c\u6587\u5b66\u4e60\u540e\uff0c\u6211\u4eec\u671f\u5f85\u60a8\u5bf9 Shell \u80fd\u6709\u66f4\u5177\u4f53\u7684\u8ba4\u8bc6\uff0c\u5e76\u80fd\u505a\u5230\u901a\u8fc7 Command Line \u5b9e\u73b0\u57fa\u7840\u4ea4\u4e92\u5e76\u4e86\u89e3\u5982\u4f55\u5b66\u4e60 Shell\u3002\u9664\u6b64\u4e4b\u5916\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u64b0\u5199 Shell \u811a\u672c\u6765\u5b9e\u73b0\u4e00\u4e9b\u81ea\u52a8\u5316\u3002

    \u6b64\u5916\uff0c\u4ece Shell \u5165\u95e8\u5230\u547d\u4ee4\u884c\u5927\u5e08\uff0c\u5176\u4e2d\u80af\u5b9a\u6709\u5f88\u957f\u7684\u8def\u8981\u8d70\uff0c\u6211\u4eec\u6ca1\u6cd5\u6d89\u53ca Shell \u7684\u5168\u90e8\u77e5\u8bc6\u70b9\uff0c\u5149\u547d\u4ee4\u5c31\u80fd\u8bb2\u4e0a\u5f88\u4e45\uff0c\u6240\u4ee5\u4e00\u5b9a\u8981\u5b66\u4f1a\u5982\u4f55\u5229\u7528\u624b\u518c\u548c\u6587\u6863\u7b49\u67e5\u8be2\u547d\u4ee4\u7684\u4f7f\u7528\u65b9\u6cd5\uff0c\u672c\u6587\u5e0c\u671b\u505a\u5230\u7684\u662f\u6388\u4eba\u4ee5\u6e14\u800c\u975e\u6388\u4eba\u4ee5\u9c7c\u3002

    \u6b64\u5916\uff0c\u6211\u4f1a\u5728\u6587\u4e2d\u591a\u6b21\u5c06 Shell \u4e0e C \u8bed\u8a00\u7684\u4e00\u4e9b\u5185\u5bb9\u76f8\u8054\u7cfb\uff0c\u5982\u679c\u60a8\u6709 C \u7684\u57fa\u7840\uff0c\u90a3\u5c06\u518d\u597d\u4e0d\u8fc7\u3002

    "},{"location":"tech_accu/tool/Shell/#\u6982\u8ff0","title":"\u6982\u8ff0","text":""},{"location":"tech_accu/tool/Shell/#\u7b80\u4ecb","title":"\u7b80\u4ecb","text":"

    Shell \u7684\u4e2d\u6587\u540d\u79f0\u4e3a\u201c\u58f3\u5c42\u201d\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u201c\u6700\u5916\u5c42\u201d\u3002Wiki \u5bf9\u5176\u63cf\u8ff0\u4e3a\uff1a

    It is named a shell because it is the outermost layer around the operating system.

    \u7b80\u5355\u6765\u8bf4\uff0cShell \u5c06\u8bfb\u5165\u6765\u81ea Keyboard \u7684\u5185\u5bb9\uff0c\u5e76\u5c06\u6307\u4ee4\u53d1\u9001\u7ed9 OS \u4ee5\u8c03\u7528\u7cfb\u7edf\u670d\u52a1\u3002

    \u5728\u5e38\u89c1\u7684\u65e5\u7528\u64cd\u4f5c\u7cfb\u7edf\uff0c\u5982 Windows \u4e0e MacOS\uff0c\u4f60\u53ef\u80fd\u5c1d\u8bd5\u8fc7\u4f7f\u7528 GUI(Graphical User Interface)\uff0c\u5373\u56fe\u5f62\u7528\u6237\u754c\u9762\u6765\u4e0e\u4f60\u7684\u7cfb\u7edf\u6109\u5feb\u73a9\u800d\uff1b\u4e0e\u4e4b\u5bf9\u5e94\u7684\uff0cShell \u5219\u662f\u4e00\u79cd CLI(Command Line Interface)\uff0c\u4e0d\u540c\u4e8e GUIs \u901a\u8fc7\u70b9\u51fb\u6309\u94ae\u7b49\u64cd\u4f5c\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u7b49\u65b9\u5f0f\uff0cCLI \u8981\u6c42\u7528\u6237\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u4e0e\u7cfb\u7edf\u4ea4\u4e92\u3002\u800c\u4f5c\u4e3a\u4e00\u4e2a\u5408\u683c\u7684\u7a0b\u5e8f\u5458\uff0c\u6211\u4eec\u63a5\u89e6\u5230\u7684\u5927\u591a\u6570\u751f\u4ea7\u573a\u666f\u4e2d\uff0c\u4f7f\u7528 CLI \u662f\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\u7684\u9009\u62e9\uff0c\u4e8b\u5b9e\u4e0a\u4f60\u4e5f\u5f88\u96be\u907f\u514d\u5b83\u2014\u2014\u56e0\u800c\uff0c\u6211\u4eec\u9700\u8981\u638c\u63e1 Shell \u7684\u57fa\u672c\u4f7f\u7528\u3002

    \u5982\u4eca\uff0c\u5df2\u7ecf\u6709\u975e\u5e38\u591a\u7684 Shell \u53ef\u4ee5\u4f7f\u7528\uff0c\u800c\u4ed6\u4eec\u57fa\u672c\u4e0a\u90fd\u4ee5 sh \u7ed3\u5c3e\uff0c\u4f8b\u5982\u5e38\u89c1\u7684 bash \u548c zsh ,\u518d\u6bd4\u5982\u8bb8\u591a\u57fa\u4e8e Alpine \u7684 Docker Image\uff0c\u5185\u7f6e\u7684 Shell \u90fd\u662f sh\u3002\u5176\u4ed6\u7684\u8fd8\u6709 dash csh ksh \u7b49\u7b49\u3002

    "},{"location":"tech_accu/tool/Shell/#shell-vs-terminal","title":"Shell vs Terminal","text":"

    \u5728\u6b63\u5f0f\u5f00\u59cb\u4ecb\u7ecd Shell \u4e4b\u524d\uff0c\u6211\u8ba4\u4e3a\u6709\u5fc5\u8981\u505a\u4e00\u4e9b\u8fa8\u6790\u3002

    \u5728\u73b0\u4ee3\u7684\u8ba1\u7b97\u673a\u7cfb\u7edf\u4e2d\uff0c\u60f3\u8981\u4f7f\u7528 Shell\uff0c\u4f60\u9700\u8981\u501f\u52a9 Terminal\uff0c\u5373\u7ec8\u7aef\uff08\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u662f terminal emulator\uff0c\u4e0d\u8fc7\u5728\u672c\u6587\u4e2d\u6211\u4eec\u5e76\u4e0d\u4f1a\u5c31\u6b64\u5c55\u5f00\uff09\u3002Terminal \u4e4b\u4e8e Shell\uff0c\u5c31\u597d\u50cf\u7535\u8bdd\u4e4b\u4e8e\u901a\u8baf\u670d\u52a1\u3002

    \u4f8b\u5982\uff0c\u56fe\u4e2d\u6253\u5f00\u7684\u8fd9\u4e2a\u201c\u7a97\u53e3\u201d\u5c31\u662f\u4e00\u4e2a\u53eb\u505a iTerm2 \u7684 terminal emulator\uff0c\u800c\u6211\u4f7f\u7528\u7684 fish \u5219\u662f\u4e00\u79cd Shell\u3002

    \u80fd\u4e0e\u8fd9\u4e24\u4e2a\u4e1c\u897f\u8fdb\u884c\u6bd4\u8f83\u548c\u8fa8\u6790\u7684\u4e1c\u897f\u5176\u5b9e\u8fd8\u6709\u5f88\u591a\uff0c\u4f46\u5e76\u975e\u672c\u6587\u4e3b\u9898\uff0c\u6240\u4ee5\u4e0d\u518d\u5c55\u5f00\u3002

    "},{"location":"tech_accu/tool/Shell/#\u4ee5-bash-\u4e3a\u4f8b","title":"\u4ee5 Bash \u4e3a\u4f8b","text":"

    bash \u5168\u79f0 Bourne Again Shell\uff0c\u662f\u5982\u4eca\u6700\u5e38\u7528\u7684 Shell \u4e4b\u4e00\uff0c\u4e14\u5927\u90e8\u5206 Linux \u90fd\u4f1a\u5185\u7f6e bash\uff0c\u8fd9\u4e5f\u907f\u514d\u4e86\u66f4\u591a\u7684\u73af\u5883\u914d\u7f6e\u8d1f\u62c5\uff0c\u6240\u4ee5\u5728\u672c\u7ae0\u79cd\uff0c\u6211\u4eec\u5c06\u4ee5 bash \u4e3a\u4f8b\uff0c\u4ecb\u7ecd\u4e00\u4e9b Shell \u5e38\u7528\u6307\u4ee4\u548c\u6280\u5de7\u3002

    \u6b64\u5916\uff0c\u6211\u4eec\u63a5\u4e0b\u6765\u63d0\u4f9b\u7684\u5927\u591a\u6570\u8bba\u65ad\u4e3b\u8981\u57fa\u4e8e Linux \u7cfb\u7edf\u3002\u90e8\u5206\u7ed3\u8bba\u5728 Windows \u7b49\u7cfb\u7edf\u4e2d\u53ef\u80fd\u5e76\u4e0d\u6210\u7acb\u3002\u5982\u679c\u60a8\u6709\u5174\u8da3\uff0c\u53ef\u4ee5\u81ea\u884c\u67e5\u8be2\u8d44\u6599\u3002

    "},{"location":"tech_accu/tool/Shell/#\u51c6\u5907\u5de5\u4f5c","title":"\u51c6\u5907\u5de5\u4f5c","text":"

    \u5728\u5f00\u59cb\u4e4b\u524d\uff0c\u6211\u5e0c\u671b\u60a8\u786e\u4fdd\u60a8\u672c\u5730\u5df2\u6709\u53ef\u7528\u7684 bash \u73af\u5883\uff0c\u4ee5\u4fbf\u4e8e\u60a8\u80fd\u8ddf\u7740\u6559\u7a0b\u8fb9\u5b9e\u8df5\u8fb9\u5b66\u4e60\u3002

    \u5728\u8fd9\u91cc\uff0c\u6211\u5c06\u63d0\u4f9b\u4e00\u79cd\u7b80\u5355\u7684\u914d\u7f6e bash \u73af\u5883\u7684\u65b9\u6848\uff1a

    \u5f53\u7136\uff0c\u6211\u4eec\u6700\u63a8\u8350\u7684\u8fd8\u662f\u60a8\u53ef\u4ee5\u914d\u7f6e\u4e00\u4e2a Linux \u73af\u5883\u4ee5\u8fdb\u884c\u5b9e\u8df5\u548c\u5b66\u4e60\u3002

    \u5f53\u60a8\u5b8c\u6210\u8fd9\u4e9b\u5de5\u4f5c\u540e\uff0c\u60a8\u53ef\u80fd\u770b\u5230\u7c7b\u4f3c\u4e8e\u5982\u4e0b\u5217\u4e3e\u7684\u5185\u5bb9\u7684\u60c5\u51b5\uff1a

    # \u4e5f\u8bb8\u662f\u8fd9\u6837\nxxx:~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u6216\u8005\u8fd9\u6837\n[xxx@yyy]~$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# \u53c8\u6216\u8005\u8fd9\u6837\nxxxx yyyy ~\n$ {\u4f60\u7684\u5149\u6807\u5728\u8fd9\u91cc}\n# ...\n

    \u5b9e\u9645\u60c5\u51b5\u8fd8\u6709\u5f88\u591a\u79cd\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u201c\u5f62\u5f0f\u201d\u90fd\u662f\u53ef\u4ee5\u88ab\u8bbe\u7f6e\u7684\u3002\u6bd4\u5982\u8fd9\u91cc\u7684 $ \u88ab\u79f0\u4e3a prompt\uff0c\u5728\u672c\u6587\u7b2c\u4e00\u5f20\u56fe\u7247\u4e2d\u6211\u5c31\u5c06\u5b83\u8bbe\u7f6e\u4e3a\u4e86\u4e00\u4e2a Emoji \u56fe\u6807\u3002\u800c\u6211\u4eec\u53d1\u73b0\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e2a ~ \uff0c\u5b83\u8868\u793a\u7684\u662f\u60a8\u7684\u201c\u5bb6\u76ee\u5f55\u201d\u3002\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u5b83\u7684\u542b\u4e49\u662f\u60a8\u5f53\u524d\u6240\u5728\u7684\u4f4d\u7f6e\u662f\u60a8\u7684\u5bb6\u76ee\u5f55\u3002\u5173\u4e8e\u8fd9\u4e00\u70b9\u6211\u4eec\u5c06\u5728\u63a5\u4e0b\u6765\u5c55\u5f00\u3002

    \u6b64\u5916\uff0c\u5982\u679c\u60a8\u5bf9 Linux \u7cfb\u7edf\u6709\u4e00\u5b9a\u8ba4\u8bc6\uff0c\u90a3\u65e0\u7591\u4f1a\u5e2e\u52a9\u60a8\u7406\u89e3\u672c\u6587\u3002

    \u90a3\u4e48\u63a5\u4e0b\u6765\uff0c\u8ba9\u6211\u4eec\u5f00\u59cb\u5427\uff01

    "},{"location":"tech_accu/tool/Shell/#\u5e2e\u52a9\u624b\u518c","title":"\u5e2e\u52a9\u624b\u518c","text":"

    \u5de6\u601d\u53f3\u60f3\uff0c\u6700\u540e\u6211\u8fd8\u662f\u628a\u8fd9\u6761\u6307\u4ee4\u653e\u5230\u4e86\u6700\u524d\u6765\u8bb2\u3002\u6211\u4eec\u4e0d\u53ef\u80fd\u4ec5\u4ec5\u901a\u8fc7\u4e00\u7bc7\u6587\u7ae0\u5c31\u4e86\u89e3\u547d\u4ee4\u884c\u7684\u5168\u90e8\u77e5\u8bc6\uff0c\u6240\u4ee5\u6211\u89c9\u5f97\u628a man \u653e\u5230\u6700\u524d\u9762\u6765\u8bb2\u662f\u5f88\u6709\u610f\u4e49\u7684\u3002

    man \u7684\u4f5c\u7528\u662f\u6253\u5f00\u4e00\u4e2a user manual\u3002\u4f8b\u5982\uff0c\u5982\u679c\u6211\u4eec\u5728\u7ec8\u7aef\u4e2d\u8f93\u5165 man man\uff0c\u5c31\u4f1a\u5f97\u5230\u5982\u4e0b\u7ed3\u679c\uff0c\u5373\u4f7f\u7528 man \u6253\u5f00\u4e86 man \u7684\u624b\u518c\uff1a

    man(1)                                     General Commands Manual                                    man(1)\n\nNAME\n       man - format and display the on-line manual pages\n\nSYNOPSIS\n       man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B\n       browser] [-H htmlpager] [-S section_list] [section] name ...\n\nDESCRIPTION\n       man formats and displays the on-line manual pages.  If you specify section, man only looks in that\n       section of the manual.  name is normally the name of the manual page, which is typically the name of\n       a command, function, or file.  However, if name contains a slash (/) then man interprets it as a file\n       specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz.\n\n       See below for a description of where man looks for the manual page files.\n\n......\n

    \u4e3a\u4e86\u5b9e\u73b0\u629b\u7816\u5f15\u7389\u7684\u76ee\u7684\uff0c\u73b0\u5728\u6211\u4eec\u4ec5\u4ec5\u4ecb\u7ecd man \u7684\u8fd9\u4e9b\u90e8\u5206\uff0c\u5b9e\u9645\u4e0a\u5149\u770b manual \u7684\u6587\u672c\u91cf\u5c31\u80fd\u611f\u53d7\u5230\uff0c man \u8fdc\u4e0d\u6b62\u5982\u6b64\uff0c\u4f46\u672c\u6587\u5e76\u4e0d\u6253\u7b97\u5c31\u6b64\u6df1\u5165\u3002\u800c\u5728\u8fd9\u91cc\u4ecb\u7ecd man \u7684\u76ee\u7684\uff0c\u4e00\u65b9\u9762\u662f\u5e0c\u671b\u5927\u5bb6\u5728\u5b66\u4e60\u4e4b\u540e\u7684\u547d\u4ee4\u65f6\uff0c\u53ef\u4ee5\u53c2\u8003 user manual\uff0c\u4e8b\u5b9e\u4e0a\u672c\u6587\u6d89\u53ca\u7684\u547d\u4ee4\u4e5f\u5e76\u4e0d\u4f1a\u4ecb\u7ecd\u5176\u5168\u90e8\u7528\u6cd5\uff1b\u53e6\u4e00\u65b9\u9762\u662f\u9f13\u52b1\u5927\u5bb6\u5728\u9047\u5230\u4e3a\u6b62\u7684\u6307\u4ee4\u65f6\uff0c\u901a\u8fc7\u624b\u518c\u7b49\u9014\u5f84\u5148\u67e5\u8be2\u5176\u884c\u4e3a\u3001\u7528\u6cd5\uff0c\u518d\u4f7f\u7528\u5b83\u3002

    "},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u5b57\u7b26\u4e32--echo","title":"\u6253\u5370\u5b57\u7b26\u4e32 | echo","text":"

    echo \u5373\u56de\u54cd\uff0c\u8fd9\u4e2a\u5355\u8bcd\u975e\u5e38\u5f62\u8c61\u5730\u63cf\u8ff0\u4e86\u8fd9\u4e2a\u547d\u4ee4\u7684\u4f5c\u7528\uff0c\u5c06\u5176\u63a5\u53d7\u5230\u7684\u5185\u5bb9\u201c\u56de\u54cd\u201d\u51fa\u6765\u3002

    # echo \u4f1a\u5c06\u5b83\u62ff\u5230\u7684\u53c2\u6570\u5168\u90fd\u5f53\u4f5c\u5b57\u7b26\u4e32\u6253\u5370\u51fa\u6765\uff0c\u4f46\u6210\u5bf9\u5f15\u53f7\u5e76\u4e0d\u4f1a\n$ echo <something>\n$ echo \"something 1 2 3\"\nsomething 1 2 3\n$ echo something 1 2 3\nsomething 1 2 3\n\n# \u5982\u679c\u4f60\u53ea\u8f93\u5165\u4e86\u4e00\u4e2a\u5f15\u53f7\uff0c\u5b83\u4f1a\u7b49\u4f60\u628a\u4ed6\u8865\u5b8c\u518d\u8f93\u51fa\n# \u5982\u679c\u60f3\u8f93\u51fa\u5f15\u53f7\uff0c\u9700\u8981\u4f7f\u7528 \\\" \u8f6c\u4e49\n$ echo \"\nFine, \\\"I\\\" will finish the string.\n\"\nFine, \"I\" will finish the string.\n\n# echo \u652f\u6301\u8f93\u51fa\u53c2\u6570\uff0c\u4ee5 $ \u5f00\u5934\uff0c\u5728\u547d\u4ee4\u884c\u73af\u5883\u4e0b\u4ed6\u4eec\u6307\u73af\u5883\u53d8\u91cf\uff0c\u5728\u811a\u672c\u73af\u5883\u4e0b\u8fd8\u53ef\u4ee5\u8fdb\u884c\u4e00\u4e9b\u53c2\u6570\u4f20\u9012\n# \u4e0b\u9762\u7684\u547d\u4ee4\u8f93\u51fa\u4e86\u5f53\u524d\u7528\u6237\uff0cUSER \u662f\u4e00\u4e2a\u503c\u4e3a\u5f53\u524d\u7528\u6237\u7684\u7528\u6237\u540d\u7684\u73af\u5883\u53d8\u91cf\u3002\necho $USER\nisshikih\n
    "},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u5f53\u524d\u8def\u5f84--pwd","title":"\u67e5\u770b\u5f53\u524d\u8def\u5f84 | pwd","text":"

    \u5728\u8fd9\u91cc\u6211\u4eec\u60f3\u4ecb\u7ecd\u7684\u7b2c\u4e8c\u4e2a\u6307\u4ee4\u662f pwd\uff0c\u5b83\u7684\u6548\u679c\u662f\u8f93\u51fa\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u3002

    $ pwd\n# \u6bd4\u5982\u6211\u7684\u73af\u5883\u4e0b\uff0c\u5728 ~ \u4e0b\u8f93\u51fa\u5982\u4e0b\n/Users/isshikih\n# \u8868\u793a\u6211\u5f53\u524d\u7684\u4f4d\u7f6e\u662f /Users/isshikih\n

    \u4e00\u5207\u7686\u6587\u4ef6 \u662f Linux \u7684\u8bbe\u8ba1\u7406\u5ff5\uff0c\u800c Shell \u7684\u4f7f\u7528\u6709\u76f8\u5f53\u4e00\u90e8\u5206\u662f\u57fa\u4e8e\u6587\u4ef6\u4f53\u7cfb\u7684\u3002\u800c\u5982\u4f55 \u7d22\u5f15 \u4e00\u4e2a\u6587\u4ef6\u5462\uff1f\u6211\u4eec\u9700\u8981\u63d0\u4f9b\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u548c\u6587\u4ef6\u540d\uff01\u4f8b\u5982\uff0c\u60a8\u9700\u8981\u53bb\u4e00\u53f0 Windows \u7535\u8111\u4e2d\u627e\u5230\u60a8\u4e0a\u5b66\u671f\u7684\u8bfe\u7a0b\u4f5c\u4e1a\uff0c\u5b83\u7684\u6587\u4ef6\u540d\u4e3a myHomework.pdf \uff0c\u4e5f\u8bb8\u4f60\u9700\u8981\u6253\u5f00D\u76d8\u4e2d\u7684 Homework \u6587\u4ef6\u5939\u3002\u90a3\u4e48\u62bd\u8c61\u5730\u6765\u8bf4\uff0c\u8fd9\u4e2a\u6587\u4ef6\u7684\u8def\u5f84\u4e3a D:\\Homework\\myHomework.pdf \uff08\u8fd9\u662f\u5728 Windows \u4e0a\u7684\u5199\u6cd5\uff09\u3002\u8fd9\u79cd\u5f62\u5f0f\u7684\u201c\u4f4d\u7f6e\u201d\u88ab\u79f0\u4e3a \u7edd\u5bf9\u8def\u5f84\uff0c\u5373\u6211\u4eec\u9700\u8981\u586b\u5199\u6587\u4ef6\u7684\u5b8c\u6574\u8def\u5f84\u624d\u80fd\u627e\u5230\u8fd9\u4e2a\u6587\u4ef6\u3002\u5728\u4e4b\u540e\u7684\u90e8\u5206\u4e2d\uff0c\u6211\u4eec\u63d0\u5230\u7684<filename><dirname>\u7b49\u90fd\u5305\u62ec\u4e86\u6587\u4ef6\u7684\u8def\u5f84\u3002

    \ud83d\udc49\u00a0\u4e8b\u5b9e\u4e0a\uff0c\u6709\u76f8\u5f53\u4e00\u90e8\u5206 Shell \u8bed\u6cd5\u662f\u56f4\u7ed5\u7740\u6587\u4ef6\u5c55\u5f00\u7684\u3002

    "},{"location":"tech_accu/tool/Shell/#\u5207\u6362\u76ee\u5f55--cd","title":"\u5207\u6362\u76ee\u5f55 | cd","text":"

    cd \u662f change directory \u7684\u7f29\u5199\uff0c\u5b83\u7684\u6548\u679c\u662f\u5c06\u60a8\u5f53\u524d\u7684\u4f4d\u7f6e\u8f6c\u79fb\u5230\u76ee\u6807\u76ee\u5f55\u4e2d\u3002\u5b83\u7684\u5199\u6cd5\u5982\u4e0b\uff1a

    cd {target directory}\n\n# eg 1: =========================================\n$ pwd\n/home/username\n\n$ cd /home/username/aaa\n$ pwd\n/home/username/aaa\n\n# eg 2: =========================================\n$ pwd\n/home/username\n\n$ cd ./aaa/bbb\n$ pwd\n/home/username/aaa/bbb\n\n# eg 3: =========================================\n$ pwd\n/home/username\n\n$ cd ./../aaa\n$ pwd\n/home/aaa\n

    \u63a5\u4e0b\u6765\u5bf9\u4e0a\u9762 eg \u7684\u90e8\u5206\u7b26\u53f7\u505a\u4e00\u4e0b\u89e3\u91ca\uff1a

    \u6b64\u5916\uff0c\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e9b\u5feb\u6377\u65b9\u5f0f\uff1a

    "},{"location":"tech_accu/tool/Shell/#\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9--ls","title":"\u7f57\u5217\u76ee\u5f55\u4e0b\u5185\u5bb9 | ls","text":"

    ls \u6307\u4ee4\u7528\u6765\u67e5\u770b\u76ee\u6807\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u3002\u5e38\u7528\u7684\u53c2\u6570\u4e3b\u8981\u6709 -l \uff08\u957f\u683c\u5f0f\uff09\u548c -a \uff08\u663e\u793a\u5168\u90e8\uff09\u3002

    \u5177\u4f53\u5199\u6cd5\u5982\u4e0b\uff1a

    # \u5047\u8bbe\u6211\u4eec\u5f53\u524d\u5728\u6587\u4ef6\u5939 my_ \u4e0b\uff0c\u6587\u4ef6\u5939\u5185\u6709\u4e24\u4e2a\u6587\u4ef6\u548c\u4e00\u4e2a\u6587\u4ef6\u5939\n# \u6587\u4ef6 .hidden \u548c\u6587\u4ef6 file1.md\n# \u6587\u4ef6\u5939 dir1\uff0c\u91cc\u9762\u6709\u4e2a\u6587\u4ef6 file2.md\n\n$ ls\ndir1        file1.md\n\n$ ls -a\n.               ..      .hiden1     dir1        file1.md\n\n$ ls -l\ndrwxr-xr-x  2 isshikih  staff  64 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff   7 10 12 12:16 file1.md\n\n$ ls -la\ndrwxr-xr-x  5 isshikih  staff  160 10 12 12:15 .\ndrwxr-xr-x  6 isshikih  staff  192 10 12 12:14 ..\n-rw-r--r--  1 isshikih  staff    0 10 12 12:15 .hiden1\ndrwxr-xr-x  2 isshikih  staff   96 10 12 12:15 dir1\n-rw-r--r--  1 isshikih  staff    7 10 12 12:16 file1.md\n\n# \u5982\u679c\u540e\u9762\u8ddf\u7740\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u5219\u663e\u793a\u76ee\u6807\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\uff0c\u5426\u5219\u663e\u793a\u5f53\u524d\u8def\u5f84\u4e0b\u7684\u5185\u5bb9\u3002\n$ ls dir1\nfile2.md\n
    -rw-------   1 me       me            576 Apr 17  2019 weather.txt\ndrwxr-xr-x   6 me       me           1024 Oct  9  2019 web_page\n-rw-rw-r--   1 me       me         276480 Feb 11 20:41 web_site.tar\n-rw-------   1 me       me           5743 Dec 16  2018 xmas_file.txt\n\n----------  -------  -------     -------- ------------ -------------\n|          |        |            |         |             |\n|          |        |            |         |\n|          |        |            |         |           \u6587\u4ef6\u540d\n|          |        |            |         |\n|          |        |            |         +---       \u4fee\u6539\u65f6\u95f4\n|          |        |            |\n|          |        |            +-------------   \u6587\u4ef6\u5927\u5c0f(in bytes)\n|          |        |\n|          |        +--------------------------       \u6240\u5c5e\u7528\u6237\u7ec4\n|          |\n|          +-----------------------------------       \u6240\u5c5e\u7528\u6237\n|\n+----------------------------------------------       \u6587\u4ef6\u6743\u9650\n# Edited from https://linuxcommand.org/lc3_lts0030.php\n
    "},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u5185\u5bb9--cat","title":"\u6253\u5370\u6587\u4ef6\u5185\u5bb9 | cat","text":"

    cat \u6307\u4ee4\u4f1a\u8fde\u63a5\u6587\u4ef6\u5e76\u5c06\u5185\u5bb9\u6253\u5370\u5230\u6807\u51c6\u8f93\u51fa\u6d41\u3002

    # <filename> \u662f\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\u3002\n$ cat <filename>\n
    "},{"location":"tech_accu/tool/Shell/#\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9--head--tail","title":"\u6253\u5370\u6587\u4ef6\u9996\u5c3e\u5185\u5bb9 | head & tail","text":"

    head \u548c tail \u8bed\u6cd5\u7c7b\u4f3c\uff0c\u529f\u80fd\u7c7b\u4f3c\uff0c\u5206\u522b\u4e3a\u67e5\u770b\u76ee\u6807\u6587\u4ef6\u7684\u5f00\u5934\u90e8\u5206\u7684\u5185\u5bb9\u548c\u7ed3\u5c3e\u90e8\u5206\u7684\u5185\u5bb9\u3002\u4e0d\u8fc7\u7531\u4e8e\u6211\u4eec\u5bf9\u6587\u672c\u6587\u4ef6\u9664\u4e86\u8bfb\u5199\uff0c\u8fd8\u6709\u4e00\u4e2a\u53eb\u505a\u201c\u8ffd\u52a0\u201d\u7684\u64cd\u4f5c\uff08\u7c7b\u6bd4 C \u8bed\u8a00\u4e2d fopen() \u7684 \u2018a\u2019 \u6a21\u5f0f\uff09 tail \u4f1a\u6301\u7eed\u6253\u5370\u65b0\u8ffd\u52a0\u8fdb\u6587\u4ef6\u7684\u5185\u5bb9\uff0c\u6240\u4ee5\u82b1\u6837\u7a0d\u5fae\u6bd4 head \u591a\u4e00\u70b9\u3002

    # `head` \u548c `tail` \u90fd\u6709\u9ed8\u8ba4\u53c2\u6570 `-n 10`\n# \u4e5f\u5c31\u662f\uff0c\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u524d 10 \u884c\n$ head <filename>\n$ head -n 10 <filename>\n# \u4e0b\u9762\u8fd9\u4e24\u6761\u6307\u4ee4\u4e5f\u662f\u7b49\u4ef7\u7684\uff0c\u5b83\u4eec\u90fd\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u672b 10 \u884c\n$ tail <filename>\n$ tail -n 10 <filename>\n\n# \u5c06 10 \u6539\u6210\u5176\u4ed6\u6570\u5b57\u5c31\u53ef\u4ee5\u4fee\u6539\u663e\u793a\u7684\u884c\u6570\uff0c\u4f8b\u5982\u4e0b\u9762\u7684\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 4 \u884c\n$ head -n 4 <filename>\n$ tail -n 4 <filename>\n\n# \u9664\u4e86\u884c\u6570\uff0c\u4f60\u4e5f\u53ef\u4ee5\u6307\u5b9a\u6253\u5370\u7684\u5b57\u8282\u6570\uff0c\u5982\u4e0b\u9762\u6307\u4ee4\u4f1a\u6253\u5370\u76ee\u6807\u6587\u4ef6\u7684\u9996/\u672b 20 \u4e2a\u5b57\u8282\n$ head -c 20 <filename>\n$ tail -c 20 <filename>\n

    # `tail` \u6bd4 `head` \u8fd8\u8981\u591a\u4e00\u4e9b\u53c2\u6570\uff0c\u6bd4\u5982 `-f`\n# `-f` \u5728\u6253\u5370\u5b8c\u5df2\u6709\u7684\u6587\u4ef6\u5185\u5bb9\u540e\u4f1a\u963b\u585e\uff0c\u7b49\u5f85\u76ee\u6807\u6587\u4ef6\u7684\u66f4\u65b0\n# \u4e00\u65e6\u6709\u5185\u5bb9\u8ffd\u52a0\u8fdb\u76ee\u6807\u6587\u4ef6\uff0c`tail` \u5c31\u4f1a\u5c06\u5b83\u6253\u5370\u51fa\u6765\n$ tail -f <filename>\n

    \u6ce8\u610f\uff0c\u8fd9\u91cc\u7684 echo \u5f00\u5934\u7684\u8bed\u53e5\u662f\u5728\u505a\u8ffd\u52a0\u64cd\u4f5c\uff0c\u4e4b\u540e\u4f1a\u8bb2\u5230\u3002

    \u800c\u81f3\u4e8e\u5177\u4f53\u7684\u5f15\u7528\u573a\u666f\uff0c\u6bd4\u5982\u6709\u4e9b\u5de5\u5177\u7684\u65e5\u5fd7\u4f1a\u4e0d\u65ad\u8ffd\u52a0\u5230\u67d0\u4e2a\u65e5\u5fd7\u6587\u4ef6\u4e2d\uff0c\u8fd9\u65f6\u5019\u5c31\u53ef\u4ee5\u7528 tail -f \u6765\u5b9e\u65f6\u8ddf\u8e2a\u65e5\u5fd7\u4fe1\u606f\u3002

    "},{"location":"tech_accu/tool/Shell/#\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9--less","title":"\u67e5\u770b\u6587\u672c\u6587\u4ef6\u5185\u5bb9 | less","text":"

    less \u5219\u662f\u771f\u6b63\u7528\u6765\u663e\u793a\u6587\u4ef6\u5185\u5bb9\u7684\u6307\u4ee4\uff0c\u5b83\u4f1a\u4ee5\u6587\u672c\u6587\u4ef6\u7684\u5f62\u5f0f\u5c55\u793a\u6587\u4ef6\u5185\u5bb9\u2014\u2014\u8fd9\u610f\u5473\u7740\u4f60\u5982\u679c\u5f3a\u884c\u4f7f\u7528 less \u6765\u67e5\u770b\u4e00\u4e2a\u4e8c\u8fdb\u5236\u6587\u4ef6\uff0c\u5219\u4f1a\u5f97\u5230\u4e00\u5806\u4e71\u7801\u3002

    # <textFilename> \u4e3a\u76ee\u6807\u6587\u4ef6\u7684\u540d\u5b57\n$ less <textFilename>\n

    \u4f7f\u7528 less \u67e5\u770b\u6587\u4ef6\u65f6\uff0c\u4f60\u4f1a\u53d1\u73b0\u4f60\u6253\u5f00\u4e86\u4e00\u4e2a\u5f88\u50cf man \u7684\u754c\u9762\uff08\u76f8\u4fe1\u4f60\u5df2\u7ecf\u6ce8\u610f\u5230\u4e86\u8fd9\u4e2a\u8bf4\u6cd5\u6709\u70b9\u672c\u672b\u98a0\u5012\uff09\uff0c\u90a3\u5b9e\u9645\u4e0a\u6d4f\u89c8\u7684\u65b9\u5f0f\u4e5f\u662f\u7c7b\u4f3c\u7684\uff0c\u8fd9\u91cc\u518d\u591a\u4ecb\u7ecd\u4e00\u4e9b\u5728\u6d4f\u89c8\u6587\u4ef6\u7684\u65f6\u5019\u53ef\u80fd\u7528\u5230\u7684\u6280\u5de7\uff1a

    "},{"location":"tech_accu/tool/Shell/#\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027\u521b\u5efa\u6587\u4ef6--touch","title":"\u4fee\u6539\u6587\u4ef6\u65f6\u95f4\u5c5e\u6027(\u521b\u5efa\u6587\u4ef6) | touch","text":"

    touch\u5b9e\u9645\u4e0a\u662f\u7528\u6765\u4fee\u6539\u6587\u4ef6\u548c\u76ee\u5f55\u7684\u65f6\u95f4\u5c5e\u6027\u7684\uff0c\u4f46\u662f\u7531\u4e8e\u5b83\u5177\u6709\u201c\u5982\u679c\u6587\u4ef6\u4e0d\u5b58\u5728\u5219\u521b\u5efa\u4e00\u4e2a\u201d\u7684\u7279\u6027\uff0c\u6240\u4ee5\u4e5f\u5e38\u5e38\u7528\u6765\u521b\u5efa\u4e00\u4e2a\u65b0\u6863\u6848\u3002

    $ ls -l\ntotal 0\n\n# \u5982\u679c\u5f53\u524d\u76ee\u5f55\u4e0b\u6ca1\u6709\u53eb\u505a <filename> \u7684\u6587\u4ef6\uff0c\u5219\u521b\u5efa\u4e00\u4e2a <filename>\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:07 file\n# \u5176\u4e2d\u6587\u4ef6\u7684\u65f6\u95f4\u4e3a\u7cfb\u7edf\u7684\u5f53\u524d\u65f6\u95f4\n\n# \u5982\u679c\u6b64\u65f6\u518d\u6b21 touch <filename>\uff0c\u5219\u4f1a\u66f4\u65b0\u5176\u65f6\u95f4\u4e3a\u5f53\u524d\u7cfb\u7edf\u65f6\u95f4\n$ touch file\n$ ls -l\ntotal 0\n-rw-r--r--  1 isshikih  staff  0 10 25 10:10 file\n
    "},{"location":"tech_accu/tool/Shell/#\u521b\u5efa\u6587\u4ef6\u5939--mkdir","title":"\u521b\u5efa\u6587\u4ef6\u5939 | mkdir","text":"

    mkdir\u662f make directory \u7684\u7f29\u5199\uff0c\u4e5f\u5c31\u662f\u521b\u5efa\u4e00\u4e2a\u201c\u6587\u4ef6\u5939\u201d\u3002

    # <dirname> \u53ef\u4ee5\u662f\u4e00\u4e2a\u590d\u6742\u8def\u5f84\u4e0b\u7684\u76ee\u5f55\uff0c\u4f46\u662f\u4e00\u5b9a\u8981\u6c42\u5176\u524d\u7f6e\u76ee\u5f55\u90fd\u5b58\u5728\n$ mkdir <dirname>\n$ ls -l\ntotal 0\n$ mkdir dir1/dir2\nmkdir: dir1: No such file or directory\n# \u8bf4\u660e\u76ee\u6807\u76ee\u5f55 dir2 \u7684\u524d\u7f6e\u8def\u5f84 ./dir1 \u7f3a\u5931\n\n# \u6211\u4eec\u53ef\u4ee5\u4f9d\u6b21\u521b\u5efa\u8fd9\u4e9b\u76ee\u5f55\n$ mkdir dir1 dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n\n# \u6216\u8005\u4f7f\u7528 -p \u53c2\u6570\uff0c\u5b83\u5141\u8bb8\u521b\u5efa\u5d4c\u5957\u76ee\u5f55\uff0c\u5373\u5982\u679c\u524d\u7f6e\u76ee\u5f55\u4e0d\u5b58\u5728\u5b83\u4f1a\u521b\u5efa\u4e00\u4e2a\n$ mkdir -p dir1/dir2\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
    "},{"location":"tech_accu/tool/Shell/#\u79fb\u52a8\u91cd\u547d\u540d--mv","title":"\u79fb\u52a8(\u91cd\u547d\u540d) | mv","text":"

    mv\u5373 move\uff0c\u542b\u4e49\u5f88\u660e\u663e\uff0c\u5373\u6539\u53d8\u6587\u4ef6\u6216\u76ee\u5f55\u7684\u4f4d\u7f6e\u3002\u4e0d\u8fc7\u7531\u4e8e\u201c\u4f4d\u7f6e\u201d\u8fd9\u4ef6\u4e8b\uff0c\u5b9e\u9645\u4e0a\u4e5f\u53ef\u4ee5\u5305\u542b\u6587\u4ef6\u672c\u8eab\u7684\u540d\u5b57\uff0c\u6240\u4ee5\u4e5f\u53ef\u4ee5\u7528\u6765\u505a\u91cd\u547d\u540d\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u4fee\u6539\u76ee\u6807\u4f4d\u7f6e\u5230\u540c\u4e00\u4e2a\u8def\u5f84\u4e0b\u7684\u53e6\u5916\u4e00\u4e2a\u540d\u5b57\u3002

    # \u6ce8\u610f\uff0c\u6211\u4eec\u5728\u8fd9\u4e00\u8282\u4e34\u65f6\u628a <path> \u4ece <filename> \u548c <dirname> \u4e2d\u62c6\u51fa\u6765\n# \u8be5\u6307\u4ee4\u4f1a\u5c06 <target1> \u79fb\u52a8\u5230 <path2> \u5e76\u6539\u540d\u4e3a <target2>\uff0c\u5f53\u7136\u5141\u8bb8\u540c\u540d\n$ mv <path1>/<target1> <path2>/<target2>\n\n# \u7701\u7565 <target2>\uff0c\u5219\u4f1a\u79fb\u52a8\u6587\u4ef6\u4f4d\u7f6e\u4f46\u4e0d\u4fee\u6539\u6587\u4ef6\u540d\uff0c\u5373\u4e0b\u9762\u4e24\u4e2a\u6307\u4ee4\u7b49\u4ef7\n$ mv <path1>/<target1> <path2>\n$ mv <path1>/<target1> <path2>/<target1>\n\n# \u79fb\u52a8\u5230\u540c\u4e00\u76ee\u5f55\uff0c\u5373\u5b9e\u73b0\u91cd\u547d\u540d\uff0c\u5f53\u7136 <path1>/ \u53ef\u4ee5\u7701\u7565\uff0c\u5373\u6b64\u65f6 <path1> \u4e3a .\n$ mv <path1>/<target1> <path1>/<target2>\n
    "},{"location":"tech_accu/tool/Shell/#\u590d\u5236--cp","title":"\u590d\u5236 | cp","text":"

    cp\u5373 copy\uff0c\u7528\u6765\u590d\u5236\u6587\u4ef6\u6216\u76ee\u5f55\uff0c\u57fa\u672c\u8bed\u6cd5\u548cmv\u7c7b\u4f3c\uff0c\u6211\u4eec\u518d\u591a\u4ecb\u7ecd\u4e00\u4e2a-r\u53c2\u6570\u3002

    # \u8be5\u6307\u4ee4\u4f1a\u590d\u5236\u4e00\u4e2a\u6587\u4ef6 <filename> \u5230 <path> \u4e0b\n$ cp <filename> <path>\n\n# cp \u65e0\u6cd5\u590d\u5236\u6587\u4ef6\u5939\n$ cp <dir> <path>\ncp: <dir> is a directory (not copied).\n# \u4f46\u662f\u4f7f\u7528 -r \u53c2\u6570\u53ef\u4ee5\u590d\u5236 <path1> \u4e0b\u6240\u6709\u5185\u5bb9\u5230 <path2> \u4e0b\n$ cp -r <path1> <path2>\n$ cp -r dir1 newDir\n$ tree      # \u8be5\u6307\u4ee4\u4f1a\u663e\u793a\u5f53\u524d\u7684\u6587\u4ef6\u7ed3\u6784\n.\n\u251c\u2500\u2500 dir1\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file1\n\u2514\u2500\u2500 newDir\n    \u251c\u2500\u2500 dir2\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 file2\n    \u2514\u2500\u2500 file1\n\n4 directories, 4 files\n
    "},{"location":"tech_accu/tool/Shell/#\u5220\u9664--rm","title":"\u5220\u9664 | rm","text":"

    \u628arm\u653e\u5728\u6700\u540e\u8bb2\u662f\u6709\u539f\u56e0\u7684\uff0c\u6216\u8bb8\u4f60\u542c\u8bf4\u8fc7 rm / -rf \u8fd9\u6761\u6307\u4ee4\uff0c\u5374\u4e0d\u77e5\u9053\u5b83\u7684\u542b\u4e49\uff0c\u90a3\u4e48\u770b\u5b8c\u8fd9\u4e00\u5c0f\u8282\u4f60\u5c31\u77e5\u9053\u8fd9\u4e2a\u6307\u4ee4\u6709\u591a\u6050\u6016\u4e86\uff08\u5343\u4e07\u4e0d\u8981\u8dd1\u8fd9\u6761\u6307\u4ee4\uff09\u3002

    \u9996\u5148\u6211\u4eec\u9700\u8981\u77e5\u9053\uff0cLinux \u4e0brm\u6307\u4ee4\u5e76\u4e0d\u5b58\u5728\u201c\u5783\u573e\u7bb1\u201d\u8fd9\u4e2a\u673a\u5236\uff0c\u5373\u7528rm\u5220\u6389\u7684\u4e1c\u897f\u662f\u6ca1\u6cd5\u901a\u8fc7\u6b63\u5e38\u624b\u6bb5\u590d\u539f\u7684\uff0c\u800c\u4e0a\u9762\u90a3\u6761\u6307\u4ee4\u7684\u610f\u601d\u5c31\u662f\u5f3a\u5236\u9012\u5f52\u5220\u9664\u7cfb\u7edf\u6839\u76ee\u5f55\u4e0b\u6240\u6709\u5185\u5bb9\uff0c\u4e5f\u5c31\u662f \u5565\u90fd\u5220\u5149\u4e86\u3002

    \u6240\u4ee5\uff0c\u4e00\u822c\u6211\u4eec\u90fd\u4f1a\u5efa\u8bae\u4f7f\u7528alias\u4fdd\u62a4rm\u6307\u4ee4\uff08\u6211\u5199\u8fc7fish\u7684rmalias\u4fdd\u62a4\u6d41\u7a0b\uff0c\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff09\u3002

    rm\u5373 remove\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u7528\u6765\u5220\u9664\u4e1c\u897f\u7684\uff0c\u8fd9\u662f\u4e2a\u975e\u5e38\u5371\u9669\u7684\u6307\u4ee4\u3002\u5e38\u7528\u7684\u53c2\u6570\u6709-r\u548c-f\uff0c\u5206\u522b\u8868\u793a\u9012\u5f52\u5220\u9664\u548c\u5f3a\u5236\u5220\u9664\uff1b\u6b64\u5916\uff0c\u6211\u4eec\u8fd8\u5c06\u4ecb\u7ecd\u4e00\u4e2a-i\u53c2\u6570\u3002

    # \u5220\u9664\u4e00\u4e2a\u6587\u4ef6\n$ rm <filename>\n\n# \u5220\u9664 <dirname> \u4e0b\u6240\u6709\u7684\u4e00\u7ea7\u6587\u4ef6\n$ rm <dirname>/*\n\n$ tree\n.\n\u251c\u2500\u2500 dir2\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 file3\n\u251c\u2500\u2500 file1\n\u2514\u2500\u2500 file2\n\n1 directory, 3 files\n$ rm ./*\nrm: ./dir2: is a directory\n$ tree\n.\n\u2514\u2500\u2500 dir2\n    \u2514\u2500\u2500 file3\n\n1 directory, 1 file\n# \u53ef\u4ee5\u53d1\u73b0\uff0c\u4e2d\u9014\u62a5\u9519\u8bf4 dir2 \u662f\u4e2a\u76ee\u5f55\u5e76\u4e14\u6ca1\u6709\u5220\u6389\uff0c\u5b9e\u9645\u4e0a\uff0c\u5982\u679c dir2 \u662f\u4e2a\u7a7a\u76ee\u5f55\uff0c\u90a3\u5b83\u662f\u4f1a\u88ab\u5220\u6389\u7684\n# \u800c\u5982\u679c\u8981\u771f\u6b63\u5220\u9664\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u6240\u6709\u7684\u5185\u5bb9\uff0c\u5c31\u9700\u8981\u6211\u4eec\u201c\u9012\u5f52\u201d\u5220\u9664\uff0c\u5373\u4f7f\u7528 -r\n\n# \u9012\u5f52\u5220\u9664 <dirname> \u4e0b\u6240\u6709\u5185\u5bb9\n$ rm -r <dirname>/*\n\n# \u9012\u5f52\u5220\u9664 <dirname>\n$ rm -r <dirname>\n\n# \u5371\u9669\uff1a\u5f3a\u5236\u9012\u5f52\u5220\u9664 <dirname>\n$ rm -rf <dirname>\n\n# \u63a8\u8350\uff1a\u9012\u5f52\u5220\u9664\u65f6\u9010\u4e00\u786e\u8ba4\n$ rm -ri dir2\nexamine files in directory dir2/? y     # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2//file3? y                                   # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\nremove dir2/? y                                             # \u8fd9\u91cc\u8f93\u5165\u7684 y \u8868\u793a\u786e\u8ba4\uff0c\u5426\u5219\u90fd\u4e0d\u4f1a\u6267\u884c\u5220\u9664\n
    "},{"location":"tech_accu/tool/Shell/#\u91cd\u5b9a\u5411\u76f8\u5173-","title":"\u91cd\u5b9a\u5411\u76f8\u5173 \ud83d\udca1","text":"

    \u53ef\u4ee5\u8bf4\u8fd9\u662f Shell \u4e2d\u6700\u6709\u610f\u601d\u7684\u77e5\u8bc6\u70b9\u4e4b\u4e00\u4e86\u3002\u91cd\u5b9a\u5411\uff0c\u987e\u540d\u601d\u4e49\u5c31\u662f\u91cd\u65b0\u5b9a\u5411\uff0c\u66f4\u51c6\u786e\u7684\u6765\u8bf4\u662f\u7ed9\u6570\u636e\u6d41\u91cd\u65b0\u5b9a\u5411\u3002\u9996\u5148\uff0c\u6211\u4eec\u6765\u770b\u770b\u8fd9\u5f20\u56fe\uff0c\u5b83\u63cf\u8ff0\u4e86\u547d\u4ee4\u8fd0\u884c\u65f6\u7684\u6570\u636e\u4ea4\u4e92\u3002

    flowchart TD;\ninput[\"file, keyboard, etc\"] \ncommand\noutput[\"file, screen, etc\"]\nerror[\"file, screen, etc\"]\n\ninput -->|\"Standard Input (stdin)\"| command\ncommand -->|\"Standard Output (stdout)\"| output\ncommand -->|\"Standard Error (stderr)\"| error

    \u7b80\u5355\u7684\u63cf\u8ff0\u4e00\u4e0b\uff0c\u547d\u4ee4\u4ece\u6807\u51c6\u8f93\u5165\u6d41 stdin \u4e2d\u8bfb\u53d6\u8f93\u5165\u6570\u636e\uff0c\u5904\u7406\u8fc7\u7a0b\u4e2d\u6216\u8005\u662f\u5904\u7406\u7ed3\u675f\u540e\uff0c\u4f1a\u5411\u6807\u51c6\u8f93\u51fa\u6d41 stdout \u548c\u6807\u51c6\u9519\u8bef\u6d41 stderr \u4e2d\u5199\u5165\u6570\u636e\uff0c\u4e00\u822c\u6765\u8bf4 stdout \u627f\u8f7d\u7684\u662f\u6b63\u5e38\u7684\u8f93\u51fa\u6570\u636e\uff0c\u800c stderr \u627f\u8f7d\u7684\u662f\u62a5\u9519\u7b49\u4fe1\u606f\u3002

    \u800c\u6240\u8c13\u7684\u91cd\u5b9a\u5411\uff0c\u6b63\u662f\u6307\u91cd\u5b9a\u5411\u8fd9\u4e09\u4e2a\u6d41\uff0c\u800c\u4e14\u66f4\u591a\u7684\u6307\u7684\u662f\u91cd\u5b9a\u5411 stdin \u548c stdout\u3002

    \u800c\u5728 Shell \u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ed6\u4eec\u7684\u4ee3\u7801\u6765\u6307\u4ee3\u4ed6\u4eec\uff0c\u5177\u4f53\u5185\u5bb9\u672c\u6587\u4e0d\u4f1a\u8fc7\u591a\u6d89\u53ca\uff0c\u5982\u679c\u60f3\u8981\u6df1\u5165\u4e86\u89e3\u53ef\u4ee5\u4ed4\u7ec6\u770b\u770b\u201c\u5408\u5e76\u201d\u8fd9\u4e00\u8282\u7684\u5185\u5bb9\u3002

    Stream: stdin stdout stderr Code: 0 1 2"},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411---","title":"\u6807\u51c6\u8f93\u51fa\u6d41\u91cd\u5b9a\u5411 | > >>","text":"

    \u57fa\u672c\u4e0a\u6240\u6709\u8bed\u8a00\u7684\u6559\u7a0b\u4e2d\u90fd\u4f1a\u5148\u4ecb\u7ecd\u5982\u4f55\u8f93\u51fa \u201dHello World!\u201c\uff08\u5f53\u7136\u4ed6\u4eec\u4e5f\u53ef\u80fd\u66f4\u60f3\u548c\u522b\u4eba\u6253\u62db\u547c\uff09\u3002\u603b\u800c\u8a00\u4e4b\uff0c\u8f93\u51fa\u5bf9\u4e00\u4e2a\u547d\u4ee4\u3001\u4e00\u4e2a\u7a0b\u5e8f\u662f\u81f3\u5173\u91cd\u8981\u7684\u3002\u4f46\u662f\u4f60\u4f1a\u53d1\u73b0\uff0c\u8fd9\u4e9b\u6307\u4ee4\u90fd\u53ea\u662f\u5c06\u5185\u5bb9\u6253\u5370\u5230\u4f60\u7684\u7ec8\u7aef\u91cc\uff0c\u5373 stdout \u91cc\uff0c\u53ea\u4e0d\u8fc7\u4e00\u822c\u88ab\u9001\u8fdb stdout \u7684\u4e1c\u897f\u4f1a\u88ab\u6253\u5370\u5728 screen \u4e0a\u3002

    \u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u8981\u5b83\u88ab\u5199\u5165\u5230\u4e00\u4e2a\u53eb chat.txt \u7684\u6587\u4ef6\u91cc\uff0c\u4f60\u5f53\u7136\u53ef\u4ee5\u4f7f\u7528 fopen() \u4e4b\u7c7b\u7684\u4e1c\u897f\u6765\u5b9e\u73b0\uff0c\u4f46\u662f\u73b0\u5728\u6211\u4eec\u60f3\u7528 Shell \u6765\u5b9e\u73b0\u8fd9\u4e2a\u6548\u679c\u3002

    \u6211\u4eec\u518d\u6b21\u56de\u5fc6\u6574\u4e2a\u8fc7\u7a0b\u4e2d\u6570\u636e\u7684\u6d41\u52a8\uff1a\u7a0b\u5e8f\u4e2d\u7684\u6570\u636e \u2192 stdout \u2192 screen\uff0c\u800c\u91cd\u5b9a\u5411\u505a\u7684\u4e8b\u60c5\u5c31\u662f\u6539\u53d8 stdout \u2192 screen \u8fd9\u4e2a\u6b65\u9aa4\u3002

    # \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command > file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u5199\u5165\u4e86 chat.txt\n$ echo \"Hello World!\" > chat.txt\n$ cat chat.txt\nHello World!\n\n# \"command\" \u7684\u8f93\u51fa\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5c31\u5b9e\u73b0\u4e86\u5c06 \"Hello World!\" \u8ffd\u52a0\u8fdb chat.txt\n$ echo \"Hello Human!\" >> chat.txt\n$ cat chat.txt\nHello World!\nHello Human!\n\n# \u4e0b\u9762\u8fd9\u6761\u6307\u4ee4\u5b9e\u73b0\u4e86\u5c06\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\u5199\u5165 \"index.txt\"\n$ ls -al > index.txt\n

    \u8bf6\u7b49\u7b49\uff0c\u4e0a\u9762\u600e\u4e48\u7a81\u7136\u51fa\u73b0\u4e86\u201c\u8ffd\u52a0\u201d\u8fd9\u4e2a\u8bcd\uff1f\u522b\u6025\u3002\u8ba9\u6211\u4eec\u56de\u987e\u4e00\u4e0b fopen() \u3002\u5982\u679c\u9700\u8981\u521b\u5efa\u4e00\u4e2a\u53ef\u5199\u6587\u4ef6\uff0cfopen() \u7684\u6a21\u5f0f\u53c2\u6570\u4e00\u822c\u662f w \uff0c\u6216\u8005\u662f a\u3002\u4ed6\u4eec\u5206\u522b\u4ee3\u8868 write \u548c append\uff0c\u5373\u8986\u5199\u548c\u8ffd\u52a0\u3002\u524d\u8005\u5c06\u76ee\u6807\u6587\u4ef6\u7684\u5185\u5bb9\u5168\u90e8\u8986\u76d6\uff0c\u5199\u5165\u65b0\u7684\u5185\u5bb9\uff0c\u5373\u76f8\u5f53\u4e8e\u6e05\u7a7a\u76ee\u6807\u6587\u4ef6\u7136\u540e\u5199\u5165\u5185\u5bb9\uff1b\u540e\u8005\u662f\u5728\u76ee\u6807\u6587\u4ef6\u7684\u5c3e\u90e8\u5f00\u59cb\u5199\u5165\u65b0\u5185\u5bb9\uff0c\u65e7\u7684\u5185\u5bb9\u4ecd\u7136\u4fdd\u7559\u3002\u6240\u4ee5\u4e0a\u9762\u7684\u4ee3\u7801\u4f1a\u51fa\u73b0 \u201cHello Human!\u201d \u88ab\u8ffd\u52a0\u5728 \u201cHello World!\u201d \u540e\u9762\u7684\u60c5\u51b5\u3002

    \u73b0\u5728\uff0c\u5982\u679c\u4f60\u60f3\u8ba9\u4f60\u7684 a.exe \u8f93\u51fa\u7684\u4e1c\u897f\u88ab\u5199\u5165 out.txt \u4e2d\uff0c\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u8fd9\u6837\u8fd0\u884c\u5b83\uff1a

    $ a.exe > out.txt\n
    "},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411--","title":"\u6807\u51c6\u8f93\u5165\u6d41\u91cd\u5b9a\u5411 | <","text":"

    \u4e0e\u8f93\u51fa\u76f8\u5bf9\u5e94\uff0c\u5982\u679c\u6211\u4eec\u60f3\u4ece\u6587\u4ef6\u4e2d\u8bfb\u53d6\u6570\u636e\u800c\u975e\u4ece Keyboard \u5199\u5165\u7684\u7f13\u51b2\u533a\u8bfb\u53d6\u5185\u5bb9\uff0c\u800c\u662f\u4ece\u67d0\u4e2a\u6587\u4ef6\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528 < \u6765\u91cd\u5b9a\u5411\u8f93\u5165\u3002

    // \u5047\u8bbe a.exe \u7684\u6e90\u7801\u662f\u8fd9\u6837\u7684\n#include <stdio.h>\nint main(){\nchar str[1024];\nscanf(\"%s\", str);\nprintf(\"Hello %s!\", str);\n}\n
    // \u5047\u8bbe in.txt \u4e2d\u7684\u5185\u5bb9\u4e3a\u5982\u4e0b\nisshikih\n
    # \"file\" \u4f1a\u88ab\u5f53\u4f5c \"command\" \u7684\u8f93\u5165\u53c2\u6570\n$ command < file\n\n# \"a.exe\" \u4f1a\u8bfb\u5165 \"chat.txt\" \u7684\u5185\u5bb9\u4f5c\u4e3a\u8f93\u5165\n$ a.exe < in.txt\nHello isshikh!\n\n# \u7efc\u5408\u8d77\u6765\uff0c\u6211\u4eec\u8fd8\u53ef\u4ee5\u8fd9\u6837\n$ a.exe < in.txt > out.txt\n$ cat out.txt\nHello isshikih! 
    "},{"location":"tech_accu/tool/Shell/#\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411--2-2","title":"\u6807\u51c6\u9519\u8bef\u6d41\u91cd\u5b9a\u5411 | 2> 2>>","text":"

    stderr \u7684\u91cd\u5b9a\u5411\u57fa\u672c\u4e0a\u548c stdout \u662f\u4e00\u6837\u7684\u3002

    # \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8986\u5199\u8fdb \"file\"\n$ command 2> file\n\n# \"command\" \u7684\u9519\u8bef\u6d41\u4f1a\u88ab\u8ffd\u52a0\u8fdb \"file\"\n$ command >> file\n

    \u4f46\u5bf9\u4e8e stderr \uff0c\u6211\u4eec\u4f7f\u7528\u91cd\u5b9a\u5411\u7684\u76ee\u7684\u4e5f\u53ef\u80fd\u662f\u4e3a\u4e86\u8ba9\u4ed6\u4e0d\u8981\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u51fa\u6765\uff0c\u5373\u5c06\u5b83\u91cd\u5b9a\u5411\u5230\u522b\u7684\u5730\u65b9\u53bb\u3002

    \u8fd9\u91cc\u9700\u8981\u4ecb\u7ecd\u4e00\u4e2a\u7279\u6b8a\u7684\u201c\u6587\u4ef6\u201d\uff0c /dev/null \u2014\u2014\u4efb\u4f55\u5199\u5165\u5230\u5b83\u7684\u5185\u5bb9\u90fd\u4f1a\u88ab\u4e22\u5f03\u3002\u4e5f\u5c31\u662f\u8bf4\uff0c\u53ea\u8981\u6211\u4eec\u5c06 stderr \u91cd\u5b9a\u5411\u5230 /dev/null \uff0c\u5c31\u80fd\u5b9e\u73b0\u7c7b\u4f3c\u4e8e\u201c\u5ffd\u7565\u9519\u8bef\u6d41\u201d\u7684\u6548\u679c\u3002

    # \"command\" \u7684\u9519\u8bef\u4fe1\u606f\u90fd\u4f1a\u88ab\u4e22\u5f03\n$ command 2> /dev/null\n
    "},{"location":"tech_accu/tool/Shell/#\u5408\u5e76--","title":"\u5408\u5e76 | <& >&","text":"

    \u6b64\u5916\uff0c\u8fd8\u6709 <& \u548c >& \u8fd9\u4e24\u4e2a\u7b26\u53f7\uff0c\u7531\u4e8e\u7bc7\u5e45\u6709\u9650\uff0c\u6211\u4e0d\u6253\u7b97\u5c55\u5f00\u8bb2\u8fd9\u4ef6\u4e8b\u3002\u8fd9\u91cc\u5f15\u7528\u8fd9\u4e00\u6279\u56de\u7b54\uff1a

    n>&p\u00a0and\u00a0n<&p\u00a0are the same operator and are for duplicating the file descriptor (fd)\u00a0p\u00a0onto the file descriptor\u00a0n. Or said otherwise, they redirect the file descriptor\u00a0n\u00a0to whatever resource fd\u00a0p\u00a0is redirected to.

    The\u00a0<\u00a0and\u00a0>\u00a0are not used to determine what direction (reading or writing) the redirected file descriptor will be used.\u00a0n\u00a0will get the same direction as\u00a0p. That is, if\u00a0p\u00a0was open for writing, so will be\u00a0n\u00a0even if the\u00a0n<&p\u00a0operator is used.

    The only difference between the two operators is when\u00a0n\u00a0is not specified.\u00a0>&p\u00a0redirects stdout (is like\u00a01>&p\u00a0or\u00a01<&p) and\u00a0<&p\u00a0redirects stdin (is like\u00a00<&p\u00a0or\u00a00>&p).

    So\u00a0<&0\u00a0is like\u00a00<&0, so redirects stdin to whatever resource stdin was redirected to, so does nothing useful, it's usually a no-op and doesn't make much sense.

    But not always a no-op, not in every shell. When job control is disabled, POSIX requires stdin of command in the background to be redirected to\u00a0/dev/null\u00a0or an equivalent file. In Bash (tested in 4.4.12)\u00a0<&0\u00a0overrides this. Compare\u00a0(ls -l /proc/self/fd/0 &)\u00a0and\u00a0(<&0 ls -l /proc/self/fd/0 &). In some cases this is useful.

    >&0\u00a0duplicates the fd 0 onto the fd 1. Because the fd 1 (stdout), is by convention only used for writing, that\u00a0>&0\u00a0only makes sense if fd 0 was open in read+write mode.

    That would be the case in cases where fd 0 points to the terminal device, because terminal emulators or\u00a0getty\u00a0would generally open the terminal device in read+write mode and assign fds 0, 1 and 2 to it.

    So maybe whoever wrote that wanted to redirect stdout to the terminal assuming that stdin was pointing to it.

    One place where\u00a0n>&n\u00a0makes sense is with zsh and its\u00a0mult_IOs\u00a0feature. In\u00a0zsh:

    some-cmd >&1 > some-file\n# that is: some-cmd 1>&1 1> some-file\n

    Redirects the standard output of\u00a0some-cmd\u00a0to both whatever stdout was before (&1) and\u00a0some-file, as if you had written:

    some-cmd | tee some-file\n

    While

    some-cmd <&0 < some-file\n# that is: some-cmd 0<&0 0< some-file\n

    would feed first the original stdin and then\u00a0some-file\u00a0as input to\u00a0some-cmd\u00a0as if you had written:

    cat - some-file | some-cmd\n

    But in\u00a0cmd <&0 >&0, fd 0 is redirected only once, so that does not apply.

    n>&n\u00a0can also have an interesting side effect in some shells (ksh,\u00a0zsh, not\u00a0dash,\u00a0bash\u00a0nor\u00a0yash) in that it triggers an error and gives up running the command if the file descriptor\u00a0n\u00a0is not open. So, in those shells,

    cmd 0<&0\n

    would avoid running\u00a0cmd\u00a0in the pathological condition where\u00a0stdin\u00a0is closed:

    $ ksh -c 'cat file - <&0' <&-\nksh: 0: cannot open [Bad file descriptor]\n$ mksh -c 'cat file - <&0' <&-\nmksh: <&0 : bad file descriptor\n$ zsh -c 'cat file - <&0' <&-\nzsh:1: 0: bad file descriptor\n\n$ bash -c 'cat file - <&0' <&-\ncontents of file\ncat: -: Bad file descriptor\ncat: closing standard input: Bad file descriptor\n
    "},{"location":"tech_accu/tool/Shell/#\u7ba1\u9053\u7b26--","title":"\u7ba1\u9053\u7b26 | |","text":"

    \u524d\u9762\u8bb2\u4e86\u5982\u4f55\u5c06\u8f93\u5165\u8f93\u51fa\u91cd\u5b9a\u5411\u81f3 \u6587\u4ef6\uff0c\u5373\u6570\u636e\u7684\u6d41\u52a8\u662f \u4ece\u547d\u4ee4\u5230\u6587\u4ef6 \u6216\u662f \u4ece\u6587\u4ef6\u5230\u547d\u4ee4\u3002\u800c\u7ba1\u9053\u7b26 | \u5219\u5b9e\u73b0\u4e86\u5c06\u6570\u636e\u7684\u6d41\u52a8\u5b9a\u5411\u4e3a \u4ece\u547d\u4ee4\u5230\u547d\u4ee4\u3002

    # \"command_1\" \u7684\u8f93\u51fa\u4f1a\u4f5c\u4e3a \"command_2\" \u7684\u8f93\u5165\n$ command_1 | command_2\n\n# \u4f7f\u7528 less \u6765\u67e5\u770b\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6/\u6587\u4ef6\u5939\u5217\u8868\n$ ls -al | less\n\n# \u4e00\u4e2a\u5e38\u7528\u7684\u7528\u6cd5\u662f\u642d grep \u5728\u65e5\u5fd7\u4e2d\u627e\u5230\u4f60\u60f3\u8981\u7684\u4e00\u884c\n# \u6bd4\u5982\u4e0b\u9762\u7684\u547d\u4ee4\u4f1a\u5728 xxx.log \u6587\u4ef6\u4e2d\u627e\u5230\u5e26\u6709\u5173\u952e\u8bcd \"lean_shell\" \u7684\u82e5\u5e72\u884c\n$ cat xxx.log | grep \"lean_shell\"\nLet us learn_shell together!\nLearn_shell means learn_shell and learn_shell!\n$ cat xxx.log\nCommand line is powerful!\nLet us learn_shell together!\nHave you ever see this?\nLearn_shell means learn_shell and learn_shell!\n\n# \u53c8\u6216\u8005\u8ba1\u7b97\u5f53\u524d\u76ee\u5f55\u4e0b\u6709\u591a\u5c11\u6587\u4ef6\u5939\u548c\u6587\u4ef6\n$ ls -a | wc -w\n5\n$ ls -a\n.   ..  x   xx  xxx.log\n\n# \u518d\u6bd4\u5982\uff0c\u7edf\u8ba1\u5f53\u524d\u76ee\u5f55\u4e0b\u5404\u4e2a\u6587\u4ef6\u5939\u7684\u5927\u5c0f\uff0c\u5e76\u8f93\u51fa\u4ece\u5927\u5230\u5c0f\u7684 10 \u9879\n$ du | sort -nr | head\n# \u627e\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\uff08\u9012\u5f52\uff09\u6240\u6709\u53eb\u505a \"xxx\" \u7684\u6587\u4ef6\u5e76\u5220\u9664\n$ find . -name \"xxx\"  | xargs rm -f\n
    "},{"location":"tech_accu/tool/Shell/#\u7b5b\u9009\u5668","title":"\u7b5b\u9009\u5668","text":"

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u91cd\u5b9a\u5411\u7684\u529f\u80fd\u975e\u5e38\u5f3a\u5927\u3002\u540c\u65f6\uff0c\u8fd9\u91cc\u4e5f\u6709\u5f88\u591a\u7b5b\u9009\u5668\u4f9b\u4f60\u9009\u62e9\uff0c\u4ed6\u4eec\u7ecf\u5e38\u642d\u914d\u7ba1\u9053\u7b26\u4f7f\u7528\uff0c\u4ee5\u8f85\u52a9\u7ba1\u9053\u7b26\u8fdb\u884c\u4e00\u4e9b\u66f4\u590d\u6742\u7684\u5de5\u4f5c\u3002

    Source: https://linuxcommand.org/lc3_lts0070.php

    "},{"location":"tech_accu/tool/Shell/#\u811a\u672c-shell","title":"\u811a\u672c Shell","text":"

    \u7b80\u5355\u6765\u8bf4\uff0cShell \u811a\u672c\u53ef\u4ee5\u770b\u4f5c\u4e00\u6761\u6761 Shell \u6307\u4ee4\u7684\u96c6\u5408\uff0c\u6211\u4eec\u5728\u8fd0\u884c Shell \u811a\u672c\u65f6\uff0cShell \u811a\u672c\u4e2d\u7684\u6307\u4ee4\u6309\u7167\u7279\u5b9a\u987a\u5e8f\u4e00\u884c\u4e00\u884c\u7684\u88ab\u6267\u884c\u4e0b\u6765\u3002

    Shell \u811a\u672c\u4e00\u822c\u662f\u4ee5 .sh \u4e3a\u540e\u7f00\u7684\u7eaf\u6587\u672c\u6587\u4ef6\uff0c\u800c\u6267\u884c Shell \u811a\u672c\u7684\u65b9\u6cd5\u5927\u81f4\u6709\u4e09\u79cd\uff1a

    \u4ed6\u4eec\u7684\u533a\u522b\u4e3b\u8981\u5982\u4e0b\uff1a

    "},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u6761\u4ef6\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u6761\u4ef6\u8bed\u53e5","text":"
    # \u6761\u4ef6\u5206\u652f\u8bed\u53e5\nif condition1\nthen\ncommands\nelif condition2\nthen\ncommands else\ncommands\nfi\n
    # \u5f53 $var \u4e3a \"A\" \u65f6\u6267\u884c\u7b2c\u4e00\u5757\uff0c\u5f53 $var \u4e3a \"B\" \u65f6\u6267\u884c\u7b2c\u4e8c\u5757\uff0c*) \u5373\u5176\u4ed6\u60c5\u51b5\ncase $var in \"A\")\ncommands\n    ;;\n\"B\")\ncommands\n    ;; *)\ncommands\n    ;;\nesac\n
    "},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u5faa\u73af\u8bed\u53e5","title":"\u6d41\u7a0b\u63a7\u5236 - \u5faa\u73af\u8bed\u53e5","text":"
    # \u4f9d\u6b21\u679a\u4e3e\u82e5\u5e72 item\uff0cvar \u8868\u793a\u6b63\u5728\u679a\u4e3e\u7684\u5185\u5bb9\nfor var in item1 item2 ... itemN\ndo\ncommands\ndone\n
    # \u8fd0\u884c\u5230 condition \u4e3a\u5047\u65f6\u7ed3\u675f\nwhile condition\ndo\ncommands\ndone\n
    # \u8fd0\u884c\u5230 condition \u4e3a\u771f\u65f6\u7ed3\u675f\nuntil condition\ndo\ncommands\ndone\n
    "},{"location":"tech_accu/tool/Shell/#\u6d41\u7a0b\u63a7\u5236---\u51fd\u6570","title":"\u6d41\u7a0b\u63a7\u5236 - \u51fd\u6570","text":"
    # \u5b9a\u4e49\u4e86\u4e00\u4e2a\u53eb\u505a foo \u7684\u51fd\u6570\uff0cfunction \u53ef\u4ee5\u4e0d\u5199\nfunction foo(){\ncommands\n}\n
    "},{"location":"tech_accu/tool/Shell/#\u53c2\u6570\u4f20\u9012","title":"\u53c2\u6570\u4f20\u9012","text":"

    \u5bf9\u4e8e\u51fd\u6570\u6216\u547d\u4ee4\u53ef\u4ee5\u7528 $n \u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002\u4f46\u5f53 n \u4e0d\u6b62\u4e00\u4f4d\u6570\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528 ${n} \u7684\u65b9\u5f0f\u6765\u83b7\u53d6\u7b2c n \u4e2a\u53c2\u6570\u3002

    #! /bin/bash\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n
    $ ./foo.sh a b c d e f g h i j\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
    #! /bin/bash\nfunction foo(){\necho $1\necho $2\necho $3\necho $4\necho $5\necho $6\necho $7\necho $8\necho $9\necho $10\necho ${10}\n}\n\nfoo a b c d e f g h i j\n
    $ ./script.sh\na\nb\nc\nd\ne\nf\ng\nh\ni\na0\nj\n
    "},{"location":"tech_accu/tool/Shell/#\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","title":"\u5c06\u547d\u4ee4\u7ed3\u679c\u4f5c\u4e3a\u53c2\u6570\u5217\u8868","text":"

    \u56de\u5fc6\u5faa\u73af\u8bed\u53e5\u7684\u7ed3\u6784\uff0c\u6211\u4eec\u9700\u8981\u5199\u51fa\u679a\u4e3e\u7684\u6bcf\u4e00\u4e2a\u9879\u76ee\u3002\u663e\u7136\uff0c\u5728\u5927\u91cf\u679a\u4e3e\u76ee\u6807\u7684\u60c5\u51b5\u4e0b\uff0c\u624b\u5199\u51fa\u5168\u90e8\u7684\u679a\u4e3e\u53ef\u80fd\u4e0d\u592a\u73b0\u5b9e\uff0c\u6240\u4ee5\u6211\u4eec\u53ef\u80fd\u4f1a\u60f3\u8981\u4f7f\u7528\u6587\u4ef6\u503c\u6216\u662f\u547d\u4ee4\u7684\u8f93\u51fa\u6765\u5b9e\u73b0\u3002\u8fd9\u4e2a\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 ``` \u628a\u628a\u547d\u4ee4\u7ed9\u62ec\u8d77\u6765\u3002

    A\nB\nC\n
    for var in `cat file`\ndo\necho - var done\n
    - A\n- B\n- C\n
    "},{"location":"tech_accu/tool/Shell/#\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684-shell","title":"\u6307\u5b9a\u6267\u884c\u811a\u672c\u6240\u4f7f\u7528\u7684 Shell","text":"

    \u53ef\u4ee5\u53d1\u73b0\uff0c\u5728\u524d\u9762\u7ed9\u51fa\u7684\u82e5\u5e72\u811a\u672c\u6837\u4f8b\u4e2d\uff0c\u6211\u4eec\u7684\u7b2c\u4e00\u884c\u90fd\u6709\u4e00\u884c\u5947\u602a\u7684\u6ce8\u91ca\uff1a

    #! /bin/bash\n

    \u8fd9\u53e5\u8bdd\u7684\u610f\u601d\u662f\uff0c\u6307\u5b9a\u8be5\u811a\u672c\u9ed8\u8ba4\u4f7f\u7528 /bin/bash \u6765\u6267\u884c\u3002\u8fd9\u91cc\u9700\u8981\u4f7f\u7528\u7edd\u5bf9\u8def\u5f84\u6765\u7d22\u5f15 Shell \u7684\u53ef\u6267\u884c\u6587\u4ef6\u3002

    "},{"location":"tech_accu/tool/Shell/#\u4e00\u4e2a\u6a21\u677f","title":"\u4e00\u4e2a\u6a21\u677f","text":"

    \u8fd9\u91cc\u518d\u8d34\u4e00\u4e2a\u6211\u81ea\u5df1\u5199 Shell \u811a\u672c\u7684\u65f6\u5019\u4f1a\u91c7\u7528\u7684\u6a21\u677f\u3002

    #! /bin/bash\n\n# get current direction\ncurDir=`pwd`\n# get shell direction\nworkDir=$(cd \"$(dirname \"$0\")\";pwd)\n\ncd $workDir\n\n# Write your script here.\n\ncd $curDir\n
    "},{"location":"tech_accu/tool/Shell/#\u5176\u4ed6","title":"\u5176\u4ed6","text":"

    \u547d\u4ee4\u884c\u5e38\u89c1\u5feb\u6377\u952e\uff0cSource: https://lym.readthedocs.io/en/latest/startingcommands.html?highlight=mkdir#moving-around-in-the-command-line

    "},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u8d44\u6599","title":"\u76f8\u5173\u8d44\u6599","text":""},{"location":"tech_accu/tool/Shell/#\u76f8\u5173\u77e5\u8bc6\u70b9","title":"\u76f8\u5173\u77e5\u8bc6\u70b9","text":""}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index e8146334..c91cd788 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,482 +2,482 @@ https://note.isshikih.top/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/coming/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/link/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap01/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap02/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap03/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap04/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap05/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap06/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap07/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1CX_ProbabilityAndStatistics/Chap08/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1QD_CXiaoCheng/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1SJ_Intro2CS/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D1SJ_StanfordCS231n/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Ex01/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec01/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec02/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec03/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec04/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec05/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec06/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec07/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec08/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec09/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec10/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec11/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec12/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec13/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec14/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_AdvancedDataStructure/Lec15/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2CX_ComputerOrganization/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2HJ_StanfordWriting/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/Chap01/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/Chap02/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/Chap03/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/Chap04/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/Chap05/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/Chap06/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/Chap07/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_DigitalDesign/glossary/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec01/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec02/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec03/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec04/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec05/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec06/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec07/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec08/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec09/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec10/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec11/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec12/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D2QD_Intro2CV/Lec13/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit0/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit1/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit2-Part1/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit2-Part2/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit2-Part3/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit3-Part1/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit3-Part2/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit4/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit5/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/cour_note/D3QD_OperatingSystem/Unit6/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/others/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/others/tools/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/others/reveal-md2Slides/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/ACTOR/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/ACTOR/trans/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/EG3D/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/MAS/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/NSM/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/NeRF/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/SA-MHR/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/SAMP/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/pape_read/TRACE/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/ai/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/ai/hydra/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/ai/pytorch/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/language/cpp/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/language/cpp/Part0/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/standard/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/standard/BVH_format/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/tool/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/tool/Colab/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/tool/Git/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/tool/Git/Commands/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/tool/Git/Workflow/ - 2023-12-23 + 2023-12-26 daily https://note.isshikih.top/tech_accu/tool/Shell/ - 2023-12-23 + 2023-12-26 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 984a8ebfaecddba1e4103c571b68dd8d9c6d2ac5..b3ac9194b6ad5084e2935746400a27da725486da 100644 GIT binary patch delta 580 zcmV-K0=xbC1^NXCABzYGuS1HF2g85Zu-Wpywzn-Sxh}-Yil5V*OSPQ@dn<2_;1A^A zNSUdcTS8H$q<*4#$JRF8Ez`!$!}uY+vgVOLN+tbvrt`#eFP)c}L#D?iuX`bU1Pnfc z2tI;7d;|md2!`+xjNl^}Q;*mz7=A6h?v)(@feBWV2? zT7QVF4|~vh=vo^>*V+)e)`rlvHbkhkv8n2{7xvN?T+3fggKfxnQ|Eu%zk4gaB;Q-J z>v=kth4fs_g_DJb^FmCoKVg3}Om>9H?qjkCnCu}Ydj!WWlyQ#REdcy|ihGAdg&4_w z1T!>nga+=Tfd^>dAsTpu1|Fk<55d6nr(++%Xq7HRt90bYUQq+StcB&f=|!@2UQ~eM zTP=ML)E$DlS?7vda6N<8N1*x$I&&iE%;|%=2cT|}ZH@7zu#T|I8>4?H`>c2tTy?6P zB}(RkB(>(XNUh*GZQLxrxm+R;z2%zt4}EeL&1nl4vxGMAN3tLe6w6cE!erK2oG+;x z7gw}}H_KUkLXqf2R;E15*0gb4lJ}L{+;Z~Ddh3nNO4?4I@S@XyrrILO-(|O{#m(I(~A=BfM*S!!v0tO#J z1Rp^kK7s*!1Vi`;M(`1gsYh@xa<#5wv~` ztv^K8hdpRLbgd1cYi$T!YeVQ-8zR)&*i`k}3wvn`uH~<$!8YW(sq??>-@TPylJBkA z^*o)+LVB*|!pTCzc_F6PpRj)!COg7p_c7T6O!g3yJ%VEw$~edE76AS}#l1tKLX6}- zf*Be(LId~Fzymb!5Dh#+1CPJCBOtaHUJxSm1lBT#(=ojDP7=JY|`15h`~w#N8USVvgqjZuG;eO5dRt~yoD z5+!p%l3Mdxq*m~pHf|Q*TrLra-f~U+hdw!r=Cp;2Swb85BUum!isdP7VKVD1&X?4U zi!0i~o8>G%p-A*1D^s3jYuY$2$@|J}ZaH~nz4gXsC2gl_PF(Xs1X*1JNq3!OkG9u& zu5)g45arjq^K@lw#XU4_@UFuF5XMIFM*!!U^dQRER8^C!4upGe?9)n_4FESOh58Tw Ssn-`L{PZ`BF5D|5LjV9503T5R